=?UTF-8?Q?J=C3=B3zef=20Kucia=20?=: tests: Add test for clearing 2D array DSVs.

Alexandre Julliard julliard at winehq.org
Fri Sep 28 14:16:34 CDT 2018


Module: vkd3d
Branch: master
Commit: 3b9657cd6a9ba014c6e72247bdbacc945658ca9e
URL:    https://source.winehq.org/git/vkd3d.git/?a=commit;h=3b9657cd6a9ba014c6e72247bdbacc945658ca9e

Author: Józef Kucia <jkucia at codeweavers.com>
Date:   Fri Sep 28 12:16:38 2018 +0200

tests: Add test for clearing 2D array DSVs.

Signed-off-by: Józef Kucia <jkucia at codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 tests/d3d12.c | 59 +++++++++++++++++++++++++++++++++++++++++++++++------------
 1 file changed, 47 insertions(+), 12 deletions(-)

diff --git a/tests/d3d12.c b/tests/d3d12.c
index 8301067..0528ceb 100644
--- a/tests/d3d12.c
+++ b/tests/d3d12.c
@@ -1058,9 +1058,9 @@ struct depth_stencil_resource
     D3D12_CPU_DESCRIPTOR_HANDLE dsv_handle;
 };
 
-#define init_depth_stencil(a, b, c, d, e, f, g) init_depth_stencil_(__LINE__, a, b, c, d, e, f, g)
+#define init_depth_stencil(a, b, c, d, e, f, g, h) init_depth_stencil_(__LINE__, a, b, c, d, e, f, g, h)
 static void init_depth_stencil_(unsigned int line, struct depth_stencil_resource *ds,
-        ID3D12Device *device, unsigned int width, unsigned int height,
+        ID3D12Device *device, unsigned int width, unsigned int height, unsigned int array_size,
         DXGI_FORMAT format, DXGI_FORMAT view_format, const D3D12_CLEAR_VALUE *clear_value)
 {
     D3D12_DEPTH_STENCIL_VIEW_DESC dsv_desc, *view_desc;
@@ -1078,7 +1078,7 @@ static void init_depth_stencil_(unsigned int line, struct depth_stencil_resource
     resource_desc.Alignment = 0;
     resource_desc.Width = width;
     resource_desc.Height = height;
-    resource_desc.DepthOrArraySize = 1;
+    resource_desc.DepthOrArraySize = array_size;
     resource_desc.MipLevels = 1;
     resource_desc.Format = format;
     resource_desc.SampleDesc.Count = 1;
@@ -3289,7 +3289,9 @@ static void test_multithread_fence_wait(void)
 
 static void test_clear_depth_stencil_view(void)
 {
+    static const float expected_values[] = {0.5f, 0.1f, 0.1f, 0.6, 1.0f, 0.5f};
     ID3D12GraphicsCommandList *command_list;
+    D3D12_DEPTH_STENCIL_VIEW_DESC dsv_desc;
     struct depth_stencil_resource ds;
     unsigned int dsv_increment_size;
     D3D12_CLEAR_VALUE clear_value;
@@ -3297,6 +3299,7 @@ static void test_clear_depth_stencil_view(void)
     struct test_context context;
     ID3D12CommandQueue *queue;
     ID3D12Device *device;
+    unsigned int i;
 
     memset(&desc, 0, sizeof(desc));
     desc.no_render_target = true;
@@ -3314,13 +3317,45 @@ static void test_clear_depth_stencil_view(void)
     clear_value.Format = DXGI_FORMAT_D32_FLOAT;
     clear_value.DepthStencil.Depth = 0.5f;
     clear_value.DepthStencil.Stencil = 0x3;
-    init_depth_stencil(&ds, device, 32, 32, DXGI_FORMAT_D32_FLOAT, 0, &clear_value);
+    init_depth_stencil(&ds, device, 32, 32, 1, DXGI_FORMAT_D32_FLOAT, 0, &clear_value);
 
     ID3D12GraphicsCommandList_ClearDepthStencilView(command_list, ds.dsv_handle,
             D3D12_CLEAR_FLAG_DEPTH | D3D12_CLEAR_FLAG_STENCIL, 0.75f, 0x7, 0, NULL);
     transition_resource_state(command_list, ds.texture,
             D3D12_RESOURCE_STATE_DEPTH_WRITE, D3D12_RESOURCE_STATE_COPY_SOURCE);
-    check_sub_resource_uint(ds.texture, 0, queue, command_list, 0x3f400000, 0);
+    check_sub_resource_float(ds.texture, 0, queue, command_list, 0.75f, 1);
+
+    destroy_depth_stencil(&ds);
+    reset_command_list(command_list, context.allocator);
+    init_depth_stencil(&ds, device, 32, 32, 6, DXGI_FORMAT_D32_FLOAT, 0, &clear_value);
+
+    ID3D12GraphicsCommandList_ClearDepthStencilView(command_list, ds.dsv_handle,
+            D3D12_CLEAR_FLAG_DEPTH, expected_values[0], 0, 0, NULL);
+    memset(&dsv_desc, 0, sizeof(dsv_desc));
+    dsv_desc.Format = DXGI_FORMAT_D32_FLOAT;
+    dsv_desc.ViewDimension = D3D12_DSV_DIMENSION_TEXTURE2DARRAY;
+    dsv_desc.Texture2DArray.FirstArraySlice = 1;
+    dsv_desc.Texture2DArray.ArraySize = 2;
+    ID3D12Device_CreateDepthStencilView(device, ds.texture, &dsv_desc, ds.dsv_handle);
+    ID3D12GraphicsCommandList_ClearDepthStencilView(command_list, ds.dsv_handle,
+            D3D12_CLEAR_FLAG_DEPTH, expected_values[1], 0, 0, NULL);
+    dsv_desc.Texture2DArray.FirstArraySlice = 3;
+    dsv_desc.Texture2DArray.ArraySize = 1;
+    ID3D12Device_CreateDepthStencilView(device, ds.texture, &dsv_desc, ds.dsv_handle);
+    ID3D12GraphicsCommandList_ClearDepthStencilView(command_list, ds.dsv_handle,
+            D3D12_CLEAR_FLAG_DEPTH, expected_values[3], 0, 0, NULL);
+    dsv_desc.Texture2DArray.FirstArraySlice = 4;
+    ID3D12Device_CreateDepthStencilView(device, ds.texture, &dsv_desc, ds.dsv_handle);
+    ID3D12GraphicsCommandList_ClearDepthStencilView(command_list, ds.dsv_handle,
+            D3D12_CLEAR_FLAG_DEPTH, expected_values[4], 0, 0, NULL);
+
+    transition_resource_state(command_list, ds.texture,
+            D3D12_RESOURCE_STATE_DEPTH_WRITE, D3D12_RESOURCE_STATE_COPY_SOURCE);
+    for (i = 0; i < ARRAY_SIZE(expected_values); ++i)
+    {
+        check_sub_resource_float(ds.texture, i, queue, command_list, expected_values[i], 1);
+        reset_command_list(command_list, context.allocator);
+    }
 
     destroy_depth_stencil(&ds);
     destroy_test_context(&context);
@@ -4546,7 +4581,7 @@ static void test_draw_depth_only(void)
     command_list = context.list;
     queue = context.queue;
 
-    init_depth_stencil(&ds, context.device, 640, 480, DXGI_FORMAT_D32_FLOAT, 0, NULL);
+    init_depth_stencil(&ds, context.device, 640, 480, 1, DXGI_FORMAT_D32_FLOAT, 0, NULL);
     set_viewport(&context.viewport, 0.0f, 0.0f, 640.0f, 480.0f, 0.0f, 1.0f);
     set_rect(&context.scissor_rect, 0, 0, 640, 480);
 
@@ -12156,7 +12191,7 @@ static void test_copy_descriptors(void)
     transition_resource_state(command_list, t[5],
             D3D12_RESOURCE_STATE_COPY_DEST, D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE);
 
-    init_depth_stencil(&ds, device, 32, 32, DXGI_FORMAT_R32_TYPELESS, DXGI_FORMAT_D32_FLOAT, NULL);
+    init_depth_stencil(&ds, device, 32, 32, 1, DXGI_FORMAT_R32_TYPELESS, DXGI_FORMAT_D32_FLOAT, NULL);
     t[6] = ds.texture;
     ID3D12Resource_AddRef(t[6]);
     ID3D12GraphicsCommandList_ClearDepthStencilView(command_list, ds.dsv_handle,
@@ -13509,7 +13544,7 @@ static void test_depth_stencil_sampling(void)
         reset_command_list(command_list, context.allocator);
 
         init_depth_stencil(&ds, device, context.render_target_desc.Width,
-                context.render_target_desc.Height, tests[i].typeless_format,
+                context.render_target_desc.Height, 1, tests[i].typeless_format,
                 tests[i].dsv_format, NULL);
         texture = ds.texture;
         dsv_handle = ds.dsv_handle;
@@ -13722,7 +13757,7 @@ static void test_depth_load(void)
     heap = create_gpu_descriptor_heap(device, D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV, 2);
 
     init_depth_stencil(&ds, device, context.render_target_desc.Width,
-            context.render_target_desc.Height, DXGI_FORMAT_R32_TYPELESS,
+            context.render_target_desc.Height, 1, DXGI_FORMAT_R32_TYPELESS,
             DXGI_FORMAT_D32_FLOAT, NULL);
     memset(&srv_desc, 0, sizeof(srv_desc));
     srv_desc.Format = DXGI_FORMAT_R32_FLOAT;
@@ -13854,7 +13889,7 @@ static void test_depth_read_only_view(void)
     clear_value.DepthStencil.Depth = 0.5f;
     clear_value.DepthStencil.Stencil = 0;
     init_depth_stencil(&ds, device, context.render_target_desc.Width,
-            context.render_target_desc.Height, DXGI_FORMAT_R32_TYPELESS,
+            context.render_target_desc.Height, 1, DXGI_FORMAT_R32_TYPELESS,
             DXGI_FORMAT_D32_FLOAT, &clear_value);
     memset(&dsv_desc, 0, sizeof(dsv_desc));
     dsv_desc.Format = DXGI_FORMAT_D32_FLOAT;
@@ -16705,7 +16740,7 @@ static void test_query_occlusion(void)
     command_list = context.list;
     queue = context.queue;
 
-    init_depth_stencil(&ds, context.device, 640, 480, DXGI_FORMAT_D32_FLOAT, 0, NULL);
+    init_depth_stencil(&ds, context.device, 640, 480, 1, DXGI_FORMAT_D32_FLOAT, 0, NULL);
     set_viewport(&context.viewport, 0.0f, 0.0f, 640.0f, 480.0f, 0.0f, 1.0f);
     set_rect(&context.scissor_rect, 0, 0, 640, 480);
 
@@ -17632,7 +17667,7 @@ static void test_copy_texture_region(void)
     for (i = 0; i < ARRAY_SIZE(depth_values); ++i)
     {
         init_depth_stencil(&ds, device, context.render_target_desc.Width,
-                context.render_target_desc.Height, DXGI_FORMAT_D32_FLOAT,
+                context.render_target_desc.Height, 1, DXGI_FORMAT_D32_FLOAT,
                 DXGI_FORMAT_D32_FLOAT, NULL);
         ID3D12GraphicsCommandList_ClearDepthStencilView(command_list, ds.dsv_handle,
                 D3D12_CLEAR_FLAG_DEPTH, depth_values[i], 0, 0, NULL);




More information about the wine-cvs mailing list