=?UTF-8?Q?J=C3=B3zef=20Kucia=20?=: d3d11/tests: Add more tests for structured and raw buffers.

Alexandre Julliard julliard at winehq.org
Thu Jul 21 09:58:54 CDT 2016


Module: wine
Branch: master
Commit: 70ce8f435ffb0232329624832821d1ffa50cc9fe
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=70ce8f435ffb0232329624832821d1ffa50cc9fe

Author: Józef Kucia <jkucia at codeweavers.com>
Date:   Wed Jul 20 15:49:41 2016 +0200

d3d11/tests: Add more tests for structured and raw buffers.

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>

---

 dlls/d3d11/tests/d3d11.c | 168 +++++++++++++++++++++++++++++++++++++++++------
 1 file changed, 149 insertions(+), 19 deletions(-)

diff --git a/dlls/d3d11/tests/d3d11.c b/dlls/d3d11/tests/d3d11.c
index 9e6e843..9a20b8b 100644
--- a/dlls/d3d11/tests/d3d11.c
+++ b/dlls/d3d11/tests/d3d11.c
@@ -2181,7 +2181,7 @@ static void test_texture3d_interfaces(void)
     ok(!refcount, "Device has %u references left.\n", refcount);
 }
 
-static void test_buffer_interfaces(void)
+static void test_create_buffer(void)
 {
     ID3D10Buffer *d3d10_buffer;
     D3D11_BUFFER_DESC desc;
@@ -2193,6 +2193,7 @@ static void test_buffer_interfaces(void)
 
     static const struct test
     {
+        BOOL succeeds;
         BOOL implements_d3d10_interfaces;
         UINT bind_flags;
         UINT misc_flags;
@@ -2200,65 +2201,171 @@ static void test_buffer_interfaces(void)
         UINT expected_bind_flags;
         UINT expected_misc_flags;
     }
-    desc_conversion_tests[] =
+    tests[] =
     {
         {
-            TRUE,
+            TRUE, TRUE,
             D3D11_BIND_VERTEX_BUFFER, 0, 0,
             D3D10_BIND_VERTEX_BUFFER, 0
         },
         {
-            TRUE,
+            TRUE, TRUE,
             D3D11_BIND_INDEX_BUFFER, 0, 0,
             D3D10_BIND_INDEX_BUFFER, 0
         },
         {
-            TRUE,
+            TRUE, TRUE,
             D3D11_BIND_CONSTANT_BUFFER, 0, 0,
             D3D10_BIND_CONSTANT_BUFFER, 0
         },
         {
-            TRUE,
+            TRUE, TRUE,
             D3D11_BIND_SHADER_RESOURCE, 0, 0,
             D3D10_BIND_SHADER_RESOURCE, 0
         },
         {
-            TRUE,
+            TRUE, TRUE,
             D3D11_BIND_STREAM_OUTPUT, 0, 0,
             D3D10_BIND_STREAM_OUTPUT, 0
         },
         {
-            TRUE,
+            TRUE, TRUE,
             D3D11_BIND_RENDER_TARGET, 0, 0,
             D3D10_BIND_RENDER_TARGET, 0
         },
         {
-            TRUE,
+            TRUE, TRUE,
             D3D11_BIND_UNORDERED_ACCESS, 0, 0,
             D3D11_BIND_UNORDERED_ACCESS, 0
         },
         {
-            TRUE,
+            TRUE, TRUE,
             0, D3D11_RESOURCE_MISC_SHARED, 0,
             0, D3D10_RESOURCE_MISC_SHARED
         },
         {
-            TRUE,
+            TRUE, TRUE,
             0, D3D11_RESOURCE_MISC_DRAWINDIRECT_ARGS, 0,
             0, 0
         },
         {
-            TRUE,
+            FALSE, FALSE,
+            D3D11_BIND_VERTEX_BUFFER, D3D11_RESOURCE_MISC_BUFFER_ALLOW_RAW_VIEWS, 0,
+        },
+        {
+            FALSE, FALSE,
+            D3D11_BIND_INDEX_BUFFER, D3D11_RESOURCE_MISC_BUFFER_ALLOW_RAW_VIEWS, 0,
+        },
+        {
+            FALSE, FALSE,
+            D3D11_BIND_CONSTANT_BUFFER, D3D11_RESOURCE_MISC_BUFFER_ALLOW_RAW_VIEWS, 0,
+        },
+        {
+            TRUE, TRUE,
             D3D11_BIND_SHADER_RESOURCE, D3D11_RESOURCE_MISC_BUFFER_ALLOW_RAW_VIEWS, 0,
             D3D10_BIND_SHADER_RESOURCE, 0
         },
         {
-            FALSE /* Structured buffers do not implement ID3D10Buffer. */,
+            FALSE, FALSE,
+            D3D11_BIND_STREAM_OUTPUT, D3D11_RESOURCE_MISC_BUFFER_ALLOW_RAW_VIEWS, 0,
+        },
+        {
+            FALSE, FALSE,
+            D3D11_BIND_RENDER_TARGET, D3D11_RESOURCE_MISC_BUFFER_ALLOW_RAW_VIEWS, 0,
+        },
+        {
+            TRUE, TRUE,
+            D3D11_BIND_UNORDERED_ACCESS, D3D11_RESOURCE_MISC_BUFFER_ALLOW_RAW_VIEWS, 0,
+            D3D11_BIND_UNORDERED_ACCESS, 0
+        },
+        {
+            FALSE, FALSE,
+            0, D3D11_RESOURCE_MISC_BUFFER_ALLOW_RAW_VIEWS, 0,
+        },
+        /* Structured buffers do not implement ID3D10Buffer. */
+        {
+            TRUE, FALSE,
             0, D3D11_RESOURCE_MISC_BUFFER_STRUCTURED, 16,
+        },
+        {
+            TRUE, FALSE,
+            D3D11_BIND_SHADER_RESOURCE, D3D11_RESOURCE_MISC_BUFFER_STRUCTURED, 16,
+        },
+        {
+            FALSE, FALSE,
+            D3D11_BIND_SHADER_RESOURCE, D3D11_RESOURCE_MISC_BUFFER_STRUCTURED, ~0u,
+        },
+        {
+            FALSE, FALSE,
+            D3D11_BIND_SHADER_RESOURCE, D3D11_RESOURCE_MISC_BUFFER_STRUCTURED, 0,
+        },
+        {
+            FALSE, FALSE,
+            D3D11_BIND_SHADER_RESOURCE, D3D11_RESOURCE_MISC_BUFFER_STRUCTURED, 1,
+        },
+        {
+            FALSE, FALSE,
+            D3D11_BIND_SHADER_RESOURCE, D3D11_RESOURCE_MISC_BUFFER_STRUCTURED, 2,
+        },
+        {
+            FALSE, FALSE,
+            D3D11_BIND_SHADER_RESOURCE, D3D11_RESOURCE_MISC_BUFFER_STRUCTURED, 3,
+        },
+        {
+            TRUE, FALSE,
+            D3D11_BIND_SHADER_RESOURCE, D3D11_RESOURCE_MISC_BUFFER_STRUCTURED, 4,
+        },
+        {
+            FALSE, FALSE,
+            D3D11_BIND_SHADER_RESOURCE, D3D11_RESOURCE_MISC_BUFFER_STRUCTURED, 5,
+        },
+        {
+            TRUE, FALSE,
+            D3D11_BIND_SHADER_RESOURCE, D3D11_RESOURCE_MISC_BUFFER_STRUCTURED, 8,
+        },
+        {
+            TRUE, FALSE,
+            D3D11_BIND_SHADER_RESOURCE, D3D11_RESOURCE_MISC_BUFFER_STRUCTURED, 512,
+        },
+        {
+            FALSE, FALSE,
+            D3D11_BIND_SHADER_RESOURCE, D3D11_RESOURCE_MISC_BUFFER_STRUCTURED, 513,
+        },
+        {
+            TRUE, FALSE,
+            D3D11_BIND_SHADER_RESOURCE, D3D11_RESOURCE_MISC_BUFFER_STRUCTURED, 1024,
+        },
+        {
+            TRUE, TRUE,
+            0, 0, 513,
             0, 0
         },
         {
-            TRUE,
+            TRUE, TRUE,
+            D3D11_BIND_CONSTANT_BUFFER, 0, 513,
+            D3D10_BIND_CONSTANT_BUFFER, 0
+        },
+        {
+            TRUE, TRUE,
+            D3D11_BIND_SHADER_RESOURCE, 0, 513,
+            D3D10_BIND_SHADER_RESOURCE, 0
+        },
+        {
+            TRUE, TRUE,
+            D3D11_BIND_UNORDERED_ACCESS, 0, 513,
+            D3D11_BIND_UNORDERED_ACCESS, 0
+        },
+        {
+            FALSE, FALSE,
+            0, D3D11_RESOURCE_MISC_BUFFER_ALLOW_RAW_VIEWS | D3D11_RESOURCE_MISC_BUFFER_STRUCTURED, 16,
+        },
+        {
+            FALSE, FALSE,
+            D3D11_BIND_SHADER_RESOURCE,
+            D3D11_RESOURCE_MISC_BUFFER_ALLOW_RAW_VIEWS | D3D11_RESOURCE_MISC_BUFFER_STRUCTURED, 16,
+        },
+        {
+            TRUE, TRUE,
             0, D3D11_RESOURCE_MISC_SHARED_KEYEDMUTEX, 0,
             0, D3D10_RESOURCE_MISC_SHARED_KEYEDMUTEX
         },
@@ -2284,11 +2391,13 @@ static void test_buffer_interfaces(void)
         return;
     }
 
-    for (i = 0; i < sizeof(desc_conversion_tests) / sizeof(*desc_conversion_tests); ++i)
+    for (i = 0; i < sizeof(tests) / sizeof(*tests); ++i)
     {
-        const struct test *current = &desc_conversion_tests[i];
+        const struct test *current = &tests[i];
+        D3D11_BUFFER_DESC obtained_desc;
         D3D10_BUFFER_DESC d3d10_desc;
         ID3D10Device *d3d10_device;
+        HRESULT expected_hr;
 
         desc.ByteWidth = 1024;
         desc.Usage = D3D11_USAGE_DEFAULT;
@@ -2298,14 +2407,35 @@ static void test_buffer_interfaces(void)
         desc.StructureByteStride = current->structure_stride;
 
         hr = ID3D11Device_CreateBuffer(device, &desc, NULL, &buffer);
+        expected_hr = current->succeeds ? S_OK : E_INVALIDARG;
         /* Shared resources are not supported by REF and WARP devices. */
-        ok(SUCCEEDED(hr) || broken(hr == E_OUTOFMEMORY), "Test %u: Failed to create a buffer, hr %#x.\n", i, hr);
+        ok(hr == expected_hr || broken(hr == E_OUTOFMEMORY), "Test %u: Got hr %#x, expected %#x.\n",
+                i, hr, expected_hr);
         if (FAILED(hr))
         {
-            win_skip("Failed to create a buffer, skipping test %u.\n", i);
+            if (hr == E_OUTOFMEMORY)
+                win_skip("Failed to create a buffer, skipping test %u.\n", i);
             continue;
         }
 
+        if (!(desc.MiscFlags & D3D11_RESOURCE_MISC_BUFFER_STRUCTURED))
+            desc.StructureByteStride = 0;
+
+        ID3D11Buffer_GetDesc(buffer, &obtained_desc);
+
+        ok(obtained_desc.ByteWidth == desc.ByteWidth,
+                "Test %u: Got unexpected ByteWidth %u.\n", i, obtained_desc.ByteWidth);
+        ok(obtained_desc.Usage == desc.Usage,
+                "Test %u: Got unexpected Usage %u.\n", i, obtained_desc.Usage);
+        ok(obtained_desc.BindFlags == desc.BindFlags,
+                "Test %u: Got unexpected BindFlags %#x.\n", i, obtained_desc.BindFlags);
+        ok(obtained_desc.CPUAccessFlags == desc.CPUAccessFlags,
+                "Test %u: Got unexpected CPUAccessFlags %#x.\n", i, obtained_desc.CPUAccessFlags);
+        ok(obtained_desc.MiscFlags == desc.MiscFlags,
+                "Test %u: Got unexpected MiscFlags %#x.\n", i, obtained_desc.MiscFlags);
+        ok(obtained_desc.StructureByteStride == desc.StructureByteStride,
+                "Test %u: Got unexpected StructureByteStride %u.\n", i, obtained_desc.StructureByteStride);
+
         hr = ID3D11Buffer_QueryInterface(buffer, &IID_ID3D10Buffer, (void **)&d3d10_buffer);
         ID3D11Buffer_Release(buffer);
 
@@ -9575,7 +9705,7 @@ START_TEST(d3d11)
     test_texture2d_interfaces();
     test_create_texture3d();
     test_texture3d_interfaces();
-    test_buffer_interfaces();
+    test_create_buffer();
     test_create_depthstencil_view();
     test_depthstencil_view_interfaces();
     test_create_rendertarget_view();




More information about the wine-cvs mailing list