From: Conor McCarthy cmccarthy@codeweavers.com
--- tests/shader_runner.c | 7 +++++++ tests/shader_runner.h | 1 + tests/shader_runner_d3d12.c | 4 +++- 3 files changed, 11 insertions(+), 1 deletion(-)
diff --git a/tests/shader_runner.c b/tests/shader_runner.c index fe5ee5972..4983cddcb 100644 --- a/tests/shader_runner.c +++ b/tests/shader_runner.c @@ -420,6 +420,13 @@ static void parse_resource_directive(struct resource_params *resource, const cha { resource->format = parse_format(line, &resource->data_type, &resource->texel_size, &line); } + else if (match_string(line, "stride", &line)) + { + ret = sscanf(line, "%u", &resource->stride); + if (ret < 1) + fatal_error("Malformed texture stride '%s'.\n", line); + resource->texel_size = resource->stride; + } else if (match_string(line, "size", &line)) { ret = sscanf(line, "( %u , %u )", &resource->width, &resource->height); diff --git a/tests/shader_runner.h b/tests/shader_runner.h index a17fa485b..7e630a9fb 100644 --- a/tests/shader_runner.h +++ b/tests/shader_runner.h @@ -81,6 +81,7 @@ struct resource_params DXGI_FORMAT format; enum texture_data_type data_type; unsigned int texel_size; + unsigned int stride; unsigned int width, height; unsigned int level_count; uint8_t *data; diff --git a/tests/shader_runner_d3d12.c b/tests/shader_runner_d3d12.c index 16cfec1ba..e52d5bcba 100644 --- a/tests/shader_runner_d3d12.c +++ b/tests/shader_runner_d3d12.c @@ -210,9 +210,11 @@ static struct resource *d3d12_runner_create_resource(struct shader_runner *r, co RESOURCE_STATE_DO_NOT_CHANGE, D3D12_RESOURCE_STATE_UNORDERED_ACCESS); reset_command_list(test_context->list, test_context->allocator);
- uav_desc.Format = params->format; + uav_desc.Format = params->stride ? DXGI_FORMAT_UNKNOWN : params->format; uav_desc.ViewDimension = D3D12_UAV_DIMENSION_BUFFER; uav_desc.Buffer.NumElements = params->width * params->height; + if (params->stride) + uav_desc.Buffer.StructureByteStride = params->stride;
ID3D12Device_CreateUnorderedAccessView(device, resource->resource, NULL, &uav_desc, get_cpu_descriptor_handle(test_context, runner->heap, resource->r.slot + MAX_RESOURCES));