From: Józef Kucia Subject: [PATCH 5/5] d3d11/tests: Test creation of typeless resources. Message-Id: <1455013485-6963-5-git-send-email-jkucia@codeweavers.com> Date: Tue, 9 Feb 2016 11:24:45 +0100 In-Reply-To: <1455013485-6963-1-git-send-email-jkucia@codeweavers.com> References: <1455013485-6963-1-git-send-email-jkucia@codeweavers.com> Signed-off-by: Józef Kucia --- 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