[PATCH 3/7] d3d11/tests: Add workaround for bug in AMD Windows driver.
Józef Kucia
jkucia at codeweavers.com
Thu Dec 15 06:45:07 CST 2016
Signed-off-by: Józef Kucia <jkucia at codeweavers.com>
---
dlls/d3d11/tests/d3d11.c | 59 +++++++++++++++++++++++++++---------------------
1 file changed, 33 insertions(+), 26 deletions(-)
diff --git a/dlls/d3d11/tests/d3d11.c b/dlls/d3d11/tests/d3d11.c
index 0edb5dc..1fd690c 100644
--- a/dlls/d3d11/tests/d3d11.c
+++ b/dlls/d3d11/tests/d3d11.c
@@ -6290,12 +6290,12 @@ static void test_texture(void)
static void test_depth_stencil_sampling(void)
{
ID3D11PixelShader *ps_cmp, *ps_depth, *ps_stencil, *ps_depth_stencil;
+ ID3D11Texture2D *texture, *rt_texture, *dsv_texture;
ID3D11ShaderResourceView *depth_srv, *stencil_srv;
ID3D11SamplerState *cmp_sampler, *sampler;
D3D11_SHADER_RESOURCE_VIEW_DESC srv_desc;
D3D11_DEPTH_STENCIL_VIEW_DESC dsv_desc;
struct d3d11_test_context test_context;
- ID3D11Texture2D *texture, *rt_texture;
D3D11_TEXTURE2D_DESC texture_desc;
D3D11_SAMPLER_DESC sampler_desc;
ID3D11DeviceContext *context;
@@ -6307,7 +6307,6 @@ static void test_depth_stencil_sampling(void)
unsigned int i;
HRESULT hr;
- static const float black[] = {0.0f, 0.0f, 0.0f, 0.0f};
static const DWORD ps_compare_code[] =
{
#if 0
@@ -6497,7 +6496,14 @@ static void test_depth_stencil_sampling(void)
for (i = 0; i < sizeof(tests) / sizeof(*tests); ++i)
{
texture_desc.Format = tests[i].typeless_format;
- texture_desc.BindFlags = D3D11_BIND_SHADER_RESOURCE | D3D11_BIND_DEPTH_STENCIL;
+ texture_desc.BindFlags = D3D11_BIND_DEPTH_STENCIL;
+ hr = ID3D11Device_CreateTexture2D(device, &texture_desc, NULL, &dsv_texture);
+ ok(SUCCEEDED(hr), "Failed to create texture for format %#x, hr %#x.\n",
+ texture_desc.Format, hr);
+
+ /* We use separate resources for DEPTH_STENCIL and SHADER_RESOURCE in
+ * order to avoid a bug in AMD Windows driver. */
+ texture_desc.BindFlags = D3D11_BIND_SHADER_RESOURCE;
hr = ID3D11Device_CreateTexture2D(device, &texture_desc, NULL, &texture);
ok(SUCCEEDED(hr), "Failed to create texture for format %#x, hr %#x.\n",
texture_desc.Format, hr);
@@ -6506,7 +6512,7 @@ static void test_depth_stencil_sampling(void)
dsv_desc.ViewDimension = D3D11_DSV_DIMENSION_TEXTURE2D;
dsv_desc.Flags = 0;
U(dsv_desc).Texture2D.MipSlice = 0;
- hr = ID3D11Device_CreateDepthStencilView(device, (ID3D11Resource *)texture, &dsv_desc, &dsv);
+ hr = ID3D11Device_CreateDepthStencilView(device, (ID3D11Resource *)dsv_texture, &dsv_desc, &dsv);
ok(SUCCEEDED(hr), "Failed to create depth stencil view for format %#x, hr %#x.\n",
dsv_desc.Format, hr);
@@ -6527,30 +6533,29 @@ static void test_depth_stencil_sampling(void)
NULL, &ps_constant, 0, 0);
ID3D11DeviceContext_ClearDepthStencilView(context, dsv, D3D11_CLEAR_DEPTH, 1.0f, 0);
- ID3D11DeviceContext_ClearRenderTargetView(context, rtv, black);
+ ID3D11DeviceContext_CopyResource(context, (ID3D11Resource *)texture, (ID3D11Resource *)dsv_texture);
draw_quad(&test_context);
- check_texture_float(rt_texture, 0.0f, 2);
+ todo_wine check_texture_float(rt_texture, 0.0f, 2);
ID3D11DeviceContext_ClearDepthStencilView(context, dsv, D3D11_CLEAR_DEPTH, 0.0f, 0);
- ID3D11DeviceContext_ClearRenderTargetView(context, rtv, black);
+ ID3D11DeviceContext_CopyResource(context, (ID3D11Resource *)texture, (ID3D11Resource *)dsv_texture);
draw_quad(&test_context);
check_texture_float(rt_texture, 1.0f, 2);
ID3D11DeviceContext_ClearDepthStencilView(context, dsv, D3D11_CLEAR_DEPTH, 0.5f, 0);
- ID3D11DeviceContext_ClearRenderTargetView(context, rtv, black);
+ ID3D11DeviceContext_CopyResource(context, (ID3D11Resource *)texture, (ID3D11Resource *)dsv_texture);
draw_quad(&test_context);
- check_texture_float(rt_texture, 0.0f, 2);
+ todo_wine check_texture_float(rt_texture, 0.0f, 2);
ID3D11DeviceContext_ClearDepthStencilView(context, dsv, D3D11_CLEAR_DEPTH, 0.6f, 0);
- ID3D11DeviceContext_ClearRenderTargetView(context, rtv, black);
+ ID3D11DeviceContext_CopyResource(context, (ID3D11Resource *)texture, (ID3D11Resource *)dsv_texture);
draw_quad(&test_context);
- check_texture_float(rt_texture, 0.0f, 2);
+ todo_wine check_texture_float(rt_texture, 0.0f, 2);
ps_constant.x = 0.7f;
ID3D11DeviceContext_UpdateSubresource(context, (ID3D11Resource *)cb, 0,
NULL, &ps_constant, 0, 0);
- ID3D11DeviceContext_ClearRenderTargetView(context, rtv, black);
draw_quad(&test_context);
check_texture_float(rt_texture, 1.0f, 2);
@@ -6558,19 +6563,20 @@ static void test_depth_stencil_sampling(void)
ID3D11DeviceContext_PSSetSamplers(context, 0, 1, &sampler);
ID3D11DeviceContext_ClearDepthStencilView(context, dsv, D3D11_CLEAR_DEPTH, 1.0f, 0);
- ID3D11DeviceContext_ClearRenderTargetView(context, rtv, black);
+ ID3D11DeviceContext_CopyResource(context, (ID3D11Resource *)texture, (ID3D11Resource *)dsv_texture);
draw_quad(&test_context);
- check_texture_float(rt_texture, 1.0f, 2);
+ todo_wine check_texture_float(rt_texture, 1.0f, 2);
ID3D11DeviceContext_ClearDepthStencilView(context, dsv, D3D11_CLEAR_DEPTH, 0.2f, 0);
- ID3D11DeviceContext_ClearRenderTargetView(context, rtv, black);
+ ID3D11DeviceContext_CopyResource(context, (ID3D11Resource *)texture, (ID3D11Resource *)dsv_texture);
draw_quad(&test_context);
- check_texture_float(rt_texture, 0.2f, 2);
+ todo_wine check_texture_float(rt_texture, 0.2f, 2);
if (!tests[i].stencil_view_format)
{
ID3D11DepthStencilView_Release(dsv);
ID3D11ShaderResourceView_Release(depth_srv);
+ ID3D11Texture2D_Release(dsv_texture);
ID3D11Texture2D_Release(texture);
continue;
}
@@ -6584,42 +6590,43 @@ static void test_depth_stencil_sampling(void)
ID3D11DeviceContext_PSSetShaderResources(context, 0, 1, &stencil_srv);
ID3D11DeviceContext_ClearDepthStencilView(context, dsv, D3D11_CLEAR_STENCIL, 0.0f, 0);
- ID3D11DeviceContext_ClearRenderTargetView(context, rtv, black);
+ ID3D11DeviceContext_CopyResource(context, (ID3D11Resource *)texture, (ID3D11Resource *)dsv_texture);
draw_quad(&test_context);
check_texture_float(rt_texture, 0.0f, 0);
ID3D11DeviceContext_ClearDepthStencilView(context, dsv, D3D11_CLEAR_STENCIL, 0.0f, 100);
- ID3D11DeviceContext_ClearRenderTargetView(context, rtv, black);
+ ID3D11DeviceContext_CopyResource(context, (ID3D11Resource *)texture, (ID3D11Resource *)dsv_texture);
draw_quad(&test_context);
- check_texture_float(rt_texture, 100.0f, 0);
+ todo_wine check_texture_float(rt_texture, 100.0f, 0);
ID3D11DeviceContext_ClearDepthStencilView(context, dsv, D3D11_CLEAR_STENCIL, 0.0f, 255);
- ID3D11DeviceContext_ClearRenderTargetView(context, rtv, black);
+ ID3D11DeviceContext_CopyResource(context, (ID3D11Resource *)texture, (ID3D11Resource *)dsv_texture);
draw_quad(&test_context);
- check_texture_float(rt_texture, 255.0f, 0);
+ todo_wine check_texture_float(rt_texture, 255.0f, 0);
ID3D11DeviceContext_PSSetShader(context, ps_depth_stencil, NULL, 0);
ID3D11DeviceContext_PSSetShaderResources(context, 0, 1, &depth_srv);
ID3D11DeviceContext_PSSetShaderResources(context, 1, 1, &stencil_srv);
ID3D11DeviceContext_ClearDepthStencilView(context, dsv, D3D11_CLEAR_DEPTH | D3D11_CLEAR_STENCIL, 0.3f, 3);
- ID3D11DeviceContext_ClearRenderTargetView(context, rtv, black);
+ ID3D11DeviceContext_CopyResource(context, (ID3D11Resource *)texture, (ID3D11Resource *)dsv_texture);
draw_quad(&test_context);
- check_texture_float(rt_texture, 3.3f, 2);
+ todo_wine check_texture_float(rt_texture, 3.3f, 2);
ID3D11DeviceContext_ClearDepthStencilView(context, dsv, D3D11_CLEAR_DEPTH | D3D11_CLEAR_STENCIL, 1.0f, 3);
- ID3D11DeviceContext_ClearRenderTargetView(context, rtv, black);
+ ID3D11DeviceContext_CopyResource(context, (ID3D11Resource *)texture, (ID3D11Resource *)dsv_texture);
draw_quad(&test_context);
- check_texture_float(rt_texture, 4.0f, 2);
+ todo_wine check_texture_float(rt_texture, 4.0f, 2);
ID3D11DeviceContext_ClearDepthStencilView(context, dsv, D3D11_CLEAR_DEPTH | D3D11_CLEAR_STENCIL, 0.0f, 0);
- ID3D11DeviceContext_ClearRenderTargetView(context, rtv, black);
+ ID3D11DeviceContext_CopyResource(context, (ID3D11Resource *)texture, (ID3D11Resource *)dsv_texture);
draw_quad(&test_context);
check_texture_float(rt_texture, 0.0f, 2);
ID3D11DepthStencilView_Release(dsv);
ID3D11ShaderResourceView_Release(depth_srv);
ID3D11ShaderResourceView_Release(stencil_srv);
+ ID3D11Texture2D_Release(dsv_texture);
ID3D11Texture2D_Release(texture);
}
--
2.7.3
More information about the wine-patches
mailing list