These show up in games occasionally, and the AMD CACAO demo uses one.
From: Conor McCarthy cmccarthy@codeweavers.com
--- tests/d3d12.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-)
diff --git a/tests/d3d12.c b/tests/d3d12.c index 8a7e6b30..a5f11291 100644 --- a/tests/d3d12.c +++ b/tests/d3d12.c @@ -5013,6 +5013,7 @@ static void test_clear_unordered_access_view_image(void) ID3D12Device *device; UINT clear_value[4]; HRESULT hr; + bool is_1d;
#define IMAGE_SIZE 16 static const struct @@ -5087,6 +5088,7 @@ static void test_clear_unordered_access_view_image(void) } uav_dimensions[] = { + {D3D12_RESOURCE_DIMENSION_TEXTURE1D, D3D12_UAV_DIMENSION_TEXTURE1D, false}, {D3D12_RESOURCE_DIMENSION_TEXTURE2D, D3D12_UAV_DIMENSION_TEXTURE2D, false}, {D3D12_RESOURCE_DIMENSION_TEXTURE2D, D3D12_UAV_DIMENSION_TEXTURE2DARRAY, true }, /* Expected behaviour with partial layer coverage is unclear. */ @@ -5116,12 +5118,12 @@ static void test_clear_unordered_access_view_image(void)
vkd3d_test_push_context("Dim %u, Test %u", d, i);
+ is_1d = uav_dimensions[d].resource_dim == D3D12_RESOURCE_DIMENSION_TEXTURE1D; + resource_desc.Dimension = uav_dimensions[d].resource_dim; resource_desc.Alignment = D3D12_DEFAULT_RESOURCE_PLACEMENT_ALIGNMENT; resource_desc.Width = IMAGE_SIZE; - resource_desc.Height = IMAGE_SIZE; - if (uav_dimensions[d].resource_dim == D3D12_RESOURCE_DIMENSION_TEXTURE1D) - resource_desc.Height = 1; + resource_desc.Height = is_1d ? 1 : IMAGE_SIZE; resource_desc.DepthOrArraySize = tests[i].image_layers; resource_desc.MipLevels = tests[i].image_mips; resource_desc.Format = tests[i].format; @@ -5223,7 +5225,7 @@ static void test_clear_unordered_access_view_image(void) tests[i].mip_level + (layer * tests[i].image_mips), &rb, queue, command_list);
- for (p = 0; p < image_depth * image_size * image_size; ++p) + for (p = 0; p < image_depth * (is_1d ? 1 : image_size) * image_size; ++p) { x = p % image_size; y = (p / image_size) % image_size; @@ -5252,7 +5254,7 @@ static void test_clear_unordered_access_view_image(void) actual_colour = get_readback_uint(&rb.rb, x, y, z); success = compare_color(actual_colour, expected_colour, tests[i].is_float ? 1 : 0);
- todo_if(tests[i].is_todo && expected_colour) + todo_if((tests[i].is_todo || (is_1d && tests[i].mip_level)) && expected_colour) ok(success, "At layer %u, (%u,%u,%u), expected %#x, got %#x.\n", layer, x, y, z, expected_colour, actual_colour);
From: Conor McCarthy cmccarthy@codeweavers.com
--- libs/vkd3d/resource.c | 3 +++ tests/d3d12.c | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-)
diff --git a/libs/vkd3d/resource.c b/libs/vkd3d/resource.c index c282f116..86b82b81 100644 --- a/libs/vkd3d/resource.c +++ b/libs/vkd3d/resource.c @@ -3210,6 +3210,9 @@ static void vkd3d_create_texture_uav(struct d3d12_desc *descriptor, { switch (desc->ViewDimension) { + case D3D12_UAV_DIMENSION_TEXTURE1D: + vkd3d_desc.miplevel_idx = desc->u.Texture1D.MipSlice; + break; case D3D12_UAV_DIMENSION_TEXTURE2D: vkd3d_desc.miplevel_idx = desc->u.Texture2D.MipSlice; if (desc->u.Texture2D.PlaneSlice) diff --git a/tests/d3d12.c b/tests/d3d12.c index a5f11291..ae16fddf 100644 --- a/tests/d3d12.c +++ b/tests/d3d12.c @@ -5254,7 +5254,7 @@ static void test_clear_unordered_access_view_image(void) actual_colour = get_readback_uint(&rb.rb, x, y, z); success = compare_color(actual_colour, expected_colour, tests[i].is_float ? 1 : 0);
- todo_if((tests[i].is_todo || (is_1d && tests[i].mip_level)) && expected_colour) + todo_if(tests[i].is_todo && expected_colour) ok(success, "At layer %u, (%u,%u,%u), expected %#x, got %#x.\n", layer, x, y, z, expected_colour, actual_colour);
From: Conor McCarthy cmccarthy@codeweavers.com
--- libs/vkd3d/resource.c | 5 +++++ 1 file changed, 5 insertions(+)
diff --git a/libs/vkd3d/resource.c b/libs/vkd3d/resource.c index 86b82b81..275e31b0 100644 --- a/libs/vkd3d/resource.c +++ b/libs/vkd3d/resource.c @@ -2985,6 +2985,11 @@ void d3d12_desc_create_srv(struct d3d12_desc *descriptor,
switch (desc->ViewDimension) { + case D3D12_SRV_DIMENSION_TEXTURE1D: + vkd3d_desc.view_type = VK_IMAGE_VIEW_TYPE_1D; + vkd3d_desc.miplevel_idx = desc->u.Texture1D.MostDetailedMip; + vkd3d_desc.miplevel_count = desc->u.Texture1D.MipLevels; + break; case D3D12_SRV_DIMENSION_TEXTURE2D: vkd3d_desc.view_type = VK_IMAGE_VIEW_TYPE_2D; vkd3d_desc.miplevel_idx = desc->u.Texture2D.MostDetailedMip;
This merge request was approved by Henri Verbeet.