tests/shader_runner: Allocate the d3d11/d3d12 resource_data arrays dynamically.

This commit is contained in:
Shaun Ren
2025-08-23 00:14:56 -04:00
committed by Henri Verbeet
parent 40789b32e7
commit d037b45718
Notes: Henri Verbeet 2025-09-03 13:09:54 +02:00
Approved-by: Elizabeth Figura (@zfigura)
Approved-by: Henri Verbeet (@hverbeet)
Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1698
2 changed files with 7 additions and 8 deletions

View File

@@ -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, static bool init_resource_2d(struct d3d11_shader_runner *runner, struct d3d11_resource *resource,
const struct resource_params *params) const struct resource_params *params)
{ {
D3D11_SUBRESOURCE_DATA resource_data[6];
ID3D11Device *device = runner->device; ID3D11Device *device = runner->device;
D3D11_TEXTURE2D_DESC desc = {0}; D3D11_TEXTURE2D_DESC desc = {0};
UINT quality_levels; UINT quality_levels;
HRESULT hr; 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.sample_count > 1)
{ {
if (params->desc.level_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) if (params->data)
{ {
D3D11_SUBRESOURCE_DATA *resource_data;
if (params->desc.sample_count > 1) if (params->desc.sample_count > 1)
fatal_error("Cannot upload data to a multisampled texture.\n"); 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); init_subresource_data(resource_data, params);
hr = ID3D11Device_CreateTexture2D(device, &desc, resource_data, &resource->texture); hr = ID3D11Device_CreateTexture2D(device, &desc, resource_data, &resource->texture);
free(resource_data);
} }
else else
{ {

View File

@@ -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 d3d12_shader_runner *runner = d3d12_shader_runner(r);
struct test_context *test_context = &runner->test_context; struct test_context *test_context = &runner->test_context;
ID3D12Device *device = test_context->device; ID3D12Device *device = test_context->device;
D3D12_SUBRESOURCE_DATA resource_data[6] = {0};
D3D12_RESOURCE_STATES initial_state, state; D3D12_RESOURCE_STATES initial_state, state;
D3D12_SUBRESOURCE_DATA *resource_data;
struct d3d12_resource *resource; struct d3d12_resource *resource;
unsigned int buffer_offset = 0; unsigned int buffer_offset = 0;
if (params->desc.level_count > ARRAY_SIZE(resource_data)) resource_data = calloc(params->desc.layer_count * params->desc.level_count, sizeof(*resource_data));
fatal_error("Level count %u is too high.\n", params->desc.level_count);
resource = calloc(1, sizeof(*resource)); resource = calloc(1, sizeof(*resource));
init_resource(&resource->r, params); init_resource(&resource->r, params);
@@ -294,6 +292,7 @@ static struct resource *d3d12_runner_create_resource(struct shader_runner *r, co
break; break;
} }
free(resource_data);
return &resource->r; return &resource->r;
} }