[PATCH 5/5] d3d11/tests: Test creation of typeless resources.

Józef Kucia jkucia at codeweavers.com
Tue Feb 9 04:24:45 CST 2016


Signed-off-by: Józef Kucia <jkucia at codeweavers.com>
---
 dlls/d3d11/tests/d3d11.c | 111 +++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 111 insertions(+)

diff --git a/dlls/d3d11/tests/d3d11.c b/dlls/d3d11/tests/d3d11.c
index 1410b35..d9ba3bd 100644
--- a/dlls/d3d11/tests/d3d11.c
+++ b/dlls/d3d11/tests/d3d11.c
@@ -5021,6 +5021,116 @@ done:
     ok(!refcount, "Device has %u references left.\n", refcount);
 }
 
+static void test_create_typeless_resource(void)
+{
+    D3D11_TEXTURE2D_DESC texture2d_desc;
+    D3D11_TEXTURE3D_DESC texture3d_desc;
+    ID3D11Resource *resource;
+    ID3D11Device *device;
+    ULONG refcount;
+    unsigned int i;
+    HRESULT hr;
+
+    enum resource_type
+    {
+        rt_texture_2d,
+        rt_texture_3d,
+    };
+
+    static const struct
+    {
+        DXGI_FORMAT format;
+        D3D11_BIND_FLAG bind_flags;
+        enum resource_type type;
+        BOOL succeeds;
+        BOOL todo;
+    }
+    tests[] =
+    {
+        {DXGI_FORMAT_R32G32B32A32_TYPELESS, D3D11_BIND_VERTEX_BUFFER,   rt_texture_2d, FALSE, TRUE},
+        {DXGI_FORMAT_R32G32B32A32_TYPELESS, D3D11_BIND_INDEX_BUFFER,    rt_texture_2d, FALSE, TRUE},
+        {DXGI_FORMAT_R32G32B32A32_TYPELESS, D3D11_BIND_CONSTANT_BUFFER, rt_texture_2d, FALSE, TRUE},
+        {DXGI_FORMAT_R32G32B32A32_TYPELESS, D3D11_BIND_SHADER_RESOURCE, rt_texture_2d, TRUE,  FALSE},
+        {DXGI_FORMAT_R32G32B32A32_TYPELESS, D3D11_BIND_SHADER_RESOURCE, rt_texture_3d, TRUE,  FALSE},
+        {DXGI_FORMAT_R32G32B32A32_TYPELESS, D3D11_BIND_RENDER_TARGET,   rt_texture_2d, TRUE,  FALSE},
+        {DXGI_FORMAT_R32G32B32A32_TYPELESS, D3D11_BIND_DEPTH_STENCIL,   rt_texture_2d, FALSE, FALSE},
+        {DXGI_FORMAT_R32G32B32_TYPELESS,    D3D11_BIND_SHADER_RESOURCE, rt_texture_2d, TRUE,  FALSE},
+        {DXGI_FORMAT_R16G16B16A16_TYPELESS, D3D11_BIND_SHADER_RESOURCE, rt_texture_2d, TRUE,  FALSE},
+        {DXGI_FORMAT_R16G16B16A16_TYPELESS, D3D11_BIND_SHADER_RESOURCE, rt_texture_3d, TRUE,  FALSE},
+        {DXGI_FORMAT_R16G16B16A16_TYPELESS, D3D11_BIND_RENDER_TARGET,   rt_texture_2d, TRUE,  FALSE},
+        {DXGI_FORMAT_R32G32_TYPELESS,       D3D11_BIND_SHADER_RESOURCE, rt_texture_2d, TRUE,  FALSE},
+        {DXGI_FORMAT_R32G8X24_TYPELESS,     D3D11_BIND_DEPTH_STENCIL,   rt_texture_2d, TRUE,  TRUE},
+        {DXGI_FORMAT_R10G10B10A2_TYPELESS,  D3D11_BIND_SHADER_RESOURCE, rt_texture_2d, TRUE,  FALSE},
+        {DXGI_FORMAT_R10G10B10A2_TYPELESS,  D3D11_BIND_SHADER_RESOURCE, rt_texture_3d, TRUE,  FALSE},
+        {DXGI_FORMAT_R10G10B10A2_TYPELESS,  D3D11_BIND_RENDER_TARGET,   rt_texture_2d, TRUE,  FALSE},
+        {DXGI_FORMAT_R32_TYPELESS,          D3D11_BIND_SHADER_RESOURCE, rt_texture_2d, TRUE,  FALSE},
+        {DXGI_FORMAT_R24G8_TYPELESS,        D3D11_BIND_VERTEX_BUFFER,   rt_texture_2d, FALSE, TRUE},
+        {DXGI_FORMAT_R24G8_TYPELESS,        D3D11_BIND_INDEX_BUFFER,    rt_texture_2d, FALSE, TRUE},
+        {DXGI_FORMAT_R24G8_TYPELESS,        D3D11_BIND_CONSTANT_BUFFER, rt_texture_2d, FALSE, TRUE},
+        {DXGI_FORMAT_R24G8_TYPELESS,        D3D11_BIND_SHADER_RESOURCE, rt_texture_2d, TRUE,  FALSE},
+        {DXGI_FORMAT_R24G8_TYPELESS,        D3D11_BIND_DEPTH_STENCIL,   rt_texture_2d, TRUE,  FALSE},
+        {DXGI_FORMAT_R8G8_TYPELESS,         D3D11_BIND_SHADER_RESOURCE, rt_texture_2d, TRUE,  FALSE},
+        {DXGI_FORMAT_R16_TYPELESS,          D3D11_BIND_SHADER_RESOURCE, rt_texture_2d, TRUE,  FALSE},
+        {DXGI_FORMAT_R8_TYPELESS,           D3D11_BIND_SHADER_RESOURCE, rt_texture_2d, TRUE,  FALSE},
+    };
+
+    if (!(device = create_device(NULL)))
+    {
+        skip("Failed to create device.\n");
+        return;
+    }
+
+    texture2d_desc.Width = 512;
+    texture2d_desc.Height = 512;
+    texture2d_desc.MipLevels = 1;
+    texture2d_desc.ArraySize = 1;
+    texture2d_desc.SampleDesc.Count = 1;
+    texture2d_desc.SampleDesc.Quality = 0;
+    texture2d_desc.Usage = D3D11_USAGE_DEFAULT;
+    texture2d_desc.CPUAccessFlags = 0;
+    texture2d_desc.MiscFlags = 0;
+
+    texture3d_desc.Width = 64;
+    texture3d_desc.Height = 64;
+    texture3d_desc.Depth = 64;
+    texture3d_desc.MipLevels = 1;
+    texture3d_desc.Usage = D3D11_USAGE_DEFAULT;
+    texture3d_desc.CPUAccessFlags = 0;
+    texture3d_desc.MiscFlags = 0;
+
+    for (i = 0; i < sizeof(tests) / sizeof(*tests); ++i)
+    {
+        if (tests[i].type == rt_texture_2d)
+        {
+            texture2d_desc.Format = tests[i].format;
+            texture2d_desc.BindFlags = tests[i].bind_flags;
+            hr = ID3D11Device_CreateTexture2D(device, &texture2d_desc, NULL, (ID3D11Texture2D **)&resource);
+        }
+        else if (tests[i].type == rt_texture_3d)
+        {
+            texture3d_desc.Format = tests[i].format;
+            texture3d_desc.BindFlags = tests[i].bind_flags;
+            hr = ID3D11Device_CreateTexture3D(device, &texture3d_desc, NULL, (ID3D11Texture3D **)&resource);
+        }
+        else
+        {
+            trace("Test %u: Unknown resource type %#x.\n", i, tests[i].type);
+            continue;
+        }
+
+        if (tests[i].todo)
+            todo_wine ok(tests[i].succeeds ? SUCCEEDED(hr) : FAILED(hr), "Test %u: Got unexpected hr %#x.\n", i, hr);
+        else
+            ok(tests[i].succeeds ? SUCCEEDED(hr) : FAILED(hr), "Test %u: Got unexpected hr %#x.\n", i, hr);
+
+        if (SUCCEEDED(hr))
+            ID3D11Resource_Release(resource);
+    }
+
+    refcount = ID3D11Device_Release(device);
+    ok(!refcount, "Device has %u references left.\n", refcount);
+}
+
 START_TEST(d3d11)
 {
     test_create_device();
@@ -5053,4 +5163,5 @@ START_TEST(d3d11)
     test_resource_map();
     test_multisample_init();
     test_check_multisample_quality_levels();
+    test_create_typeless_resource();
 }
-- 
2.4.10




More information about the wine-patches mailing list