diff --git a/tests/shader_runner_d3d11.c b/tests/shader_runner_d3d11.c index b1038bd4c..c3e77ef85 100644 --- a/tests/shader_runner_d3d11.c +++ b/tests/shader_runner_d3d11.c @@ -451,15 +451,11 @@ static void create_identity_view(ID3D11Device *device, static bool init_resource_2d(struct d3d11_shader_runner *runner, struct d3d11_resource *resource, const struct resource_params *params) { - D3D11_SUBRESOURCE_DATA resource_data[6]; ID3D11Device *device = runner->device; D3D11_TEXTURE2D_DESC desc = {0}; UINT quality_levels; HRESULT hr; - if (params->desc.level_count > ARRAY_SIZE(resource_data)) - fatal_error("Level count %u is too high.\n", params->desc.level_count); - if (params->desc.sample_count > 1) { if (params->desc.level_count > 1) @@ -488,11 +484,15 @@ static bool init_resource_2d(struct d3d11_shader_runner *runner, struct d3d11_re if (params->data) { + D3D11_SUBRESOURCE_DATA *resource_data; + if (params->desc.sample_count > 1) fatal_error("Cannot upload data to a multisampled texture.\n"); + resource_data = calloc(params->desc.layer_count * params->desc.level_count, sizeof(*resource_data)); init_subresource_data(resource_data, params); hr = ID3D11Device_CreateTexture2D(device, &desc, resource_data, &resource->texture); + free(resource_data); } else { diff --git a/tests/shader_runner_d3d12.c b/tests/shader_runner_d3d12.c index 4c88ba5a1..e4debd681 100644 --- a/tests/shader_runner_d3d12.c +++ b/tests/shader_runner_d3d12.c @@ -83,14 +83,12 @@ static struct resource *d3d12_runner_create_resource(struct shader_runner *r, co struct d3d12_shader_runner *runner = d3d12_shader_runner(r); struct test_context *test_context = &runner->test_context; ID3D12Device *device = test_context->device; - D3D12_SUBRESOURCE_DATA resource_data[6] = {0}; D3D12_RESOURCE_STATES initial_state, state; + D3D12_SUBRESOURCE_DATA *resource_data; struct d3d12_resource *resource; unsigned int buffer_offset = 0; - if (params->desc.level_count > ARRAY_SIZE(resource_data)) - fatal_error("Level count %u is too high.\n", params->desc.level_count); - + resource_data = calloc(params->desc.layer_count * params->desc.level_count, sizeof(*resource_data)); resource = calloc(1, sizeof(*resource)); init_resource(&resource->r, params); @@ -294,6 +292,7 @@ static struct resource *d3d12_runner_create_resource(struct shader_runner *r, co break; } + free(resource_data); return &resource->r; }