=?UTF-8?Q?J=C3=B3zef=20Kucia=20?=: d3d11/tests: Add test for 2D array texture UAVs.
Alexandre Julliard
julliard at winehq.org
Mon Dec 12 16:15:27 CST 2016
Module: wine
Branch: master
Commit: 0f08eddb15aa0981e2a0045acfb65999cda4aefd
URL: http://source.winehq.org/git/wine.git/?a=commit;h=0f08eddb15aa0981e2a0045acfb65999cda4aefd
Author: Józef Kucia <jkucia at codeweavers.com>
Date: Fri Dec 9 11:30:47 2016 +0100
d3d11/tests: Add test for 2D array texture UAVs.
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 | 82 +++++++++++++++++++++++++++++++++++++++++++-----
1 file changed, 74 insertions(+), 8 deletions(-)
diff --git a/dlls/d3d11/tests/d3d11.c b/dlls/d3d11/tests/d3d11.c
index 6f413c5..be34166 100644
--- a/dlls/d3d11/tests/d3d11.c
+++ b/dlls/d3d11/tests/d3d11.c
@@ -11403,7 +11403,7 @@ static void test_uav_load(void)
UINT miplevel_count;
UINT array_size;
DXGI_FORMAT format;
- D3D11_SUBRESOURCE_DATA data[1];
+ D3D11_SUBRESOURCE_DATA data[3];
};
/* FIXME: Use a single R32_TYPELESS RT with multiple RTVs. */
@@ -11421,6 +11421,7 @@ static void test_uav_load(void)
ID3D11PixelShader *ps;
ID3D11Device *device;
unsigned int i, x, y;
+ ID3D11Buffer *cb;
HRESULT hr;
static const float white[] = {1.0f, 1.0f, 1.0f, 1.0f};
@@ -11506,6 +11507,37 @@ static void test_uav_load(void)
0x00102012, 0x00000000, 0x0010000a, 0x00000000, 0x0100003e,
};
static const struct shader ps_ld_2d_int = {ps_ld_2d_int_code, sizeof(ps_ld_2d_int_code)};
+ static const DWORD ps_ld_2d_uint_arr_code[] =
+ {
+#if 0
+ RWTexture2DArray<uint> u;
+
+ uint layer;
+
+ uint main(float4 position : SV_Position) : SV_Target
+ {
+ float3 s;
+ u.GetDimensions(s.x, s.y, s.z);
+ s.z = layer;
+ return u[s * float3(position.x / 640.0f, position.y / 480.0f, 1.0f)];
+ }
+#endif
+ 0x43425844, 0xa7630358, 0xd7e7228f, 0xa9f1be03, 0x838554f1, 0x00000001, 0x000001bc, 0x00000003,
+ 0x0000002c, 0x00000060, 0x00000094, 0x4e475349, 0x0000002c, 0x00000001, 0x00000008, 0x00000020,
+ 0x00000000, 0x00000001, 0x00000003, 0x00000000, 0x0000030f, 0x505f5653, 0x7469736f, 0x006e6f69,
+ 0x4e47534f, 0x0000002c, 0x00000001, 0x00000008, 0x00000020, 0x00000000, 0x00000000, 0x00000001,
+ 0x00000000, 0x00000e01, 0x545f5653, 0x65677261, 0xabab0074, 0x58454853, 0x00000120, 0x00000050,
+ 0x00000048, 0x0100086a, 0x04000059, 0x00208e46, 0x00000000, 0x00000001, 0x0400409c, 0x0011e000,
+ 0x00000001, 0x00004444, 0x04002064, 0x00101032, 0x00000000, 0x00000001, 0x03000065, 0x00102012,
+ 0x00000000, 0x02000068, 0x00000001, 0x8900003d, 0x80000202, 0x00111103, 0x00100032, 0x00000000,
+ 0x00004001, 0x00000000, 0x0011ee46, 0x00000001, 0x07000038, 0x00100032, 0x00000000, 0x00100046,
+ 0x00000000, 0x00101046, 0x00000000, 0x06000056, 0x001000c2, 0x00000000, 0x00208006, 0x00000000,
+ 0x00000000, 0x0a000038, 0x001000f2, 0x00000000, 0x00100e46, 0x00000000, 0x00004002, 0x3acccccd,
+ 0x3b088889, 0x3f800000, 0x3f800000, 0x0500001c, 0x001000f2, 0x00000000, 0x00100e46, 0x00000000,
+ 0x890000a3, 0x80000202, 0x00111103, 0x00100012, 0x00000000, 0x00100e46, 0x00000000, 0x0011ee46,
+ 0x00000001, 0x05000036, 0x00102012, 0x00000000, 0x0010000a, 0x00000000, 0x0100003e,
+ };
+ static const struct shader ps_ld_2d_uint_arr = {ps_ld_2d_uint_arr_code, sizeof(ps_ld_2d_uint_arr_code)};
static const float float_data[] =
{
0.50f, 0.25f, 1.00f, 0.00f,
@@ -11520,6 +11552,20 @@ static void test_uav_load(void)
0x80, 0x90, 0xa0, 0xb0,
0xc0, 0xd0, 0xe0, 0xf0,
};
+ static const unsigned int uint_data2[] =
+ {
+ 0xffff, 0xffff, 0xffff, 0xffff,
+ 0xffff, 0xc000, 0xc000, 0xffff,
+ 0xffff, 0xc000, 0xc000, 0xffff,
+ 0xffff, 0xffff, 0xffff, 0xffff,
+ };
+ static const unsigned int uint_data3[] =
+ {
+ 0xaa, 0xaa, 0xcc, 0xcc,
+ 0xaa, 0xaa, 0xdd, 0xdd,
+ 0xbb, 0xbb, 0xee, 0xee,
+ 0xbb, 0xbb, 0xff, 0xff,
+ };
static const int int_data[] =
{
-1, 0x10, 0x20, 0x30,
@@ -11531,6 +11577,10 @@ static void test_uav_load(void)
{{float_data, 4 * sizeof(*float_data), 0}}};
static const struct texture uint_2d = {4, 4, 1, 1, DXGI_FORMAT_R32_UINT,
{{uint_data, 4 * sizeof(*uint_data), 0}}};
+ static const struct texture uint2d_arr = {4, 4, 1, 3, DXGI_FORMAT_R32_UINT,
+ {{uint_data, 4 * sizeof(*uint_data), 0},
+ {uint_data2, 4 * sizeof(*uint_data2), 0},
+ {uint_data3, 4 * sizeof(*uint_data3), 0}}};
static const struct texture int_2d = {4, 4, 1, 1, DXGI_FORMAT_R32_SINT,
{{int_data, 4 * sizeof(*int_data), 0}}};
@@ -11539,18 +11589,27 @@ static void test_uav_load(void)
const struct shader *ps;
const struct texture *texture;
struct uav_desc uav_desc;
+ struct uvec4 constant;
const DWORD *expected_colors;
}
tests[] =
{
-#define TEX_2D D3D11_UAV_DIMENSION_TEXTURE2D
-#define R32_FLOAT DXGI_FORMAT_R32_FLOAT
-#define R32_UINT DXGI_FORMAT_R32_UINT
-#define R32_SINT DXGI_FORMAT_R32_SINT
- {&ps_ld_2d_float, &float_2d, {R32_FLOAT, TEX_2D, 0}, (const DWORD *)float_data},
- {&ps_ld_2d_uint, &uint_2d, {R32_UINT, TEX_2D, 0}, (const DWORD *)uint_data},
- {&ps_ld_2d_int, &int_2d, {R32_SINT, TEX_2D, 0}, (const DWORD *)int_data},
+#define TEX_2D D3D11_UAV_DIMENSION_TEXTURE2D
+#define TEX_2D_ARRAY D3D11_UAV_DIMENSION_TEXTURE2DARRAY
+#define R32_FLOAT DXGI_FORMAT_R32_FLOAT
+#define R32_UINT DXGI_FORMAT_R32_UINT
+#define R32_SINT DXGI_FORMAT_R32_SINT
+ {&ps_ld_2d_float, &float_2d, {R32_FLOAT, TEX_2D, 0}, {}, (const DWORD *)float_data},
+ {&ps_ld_2d_uint, &uint_2d, {R32_UINT, TEX_2D, 0}, {}, (const DWORD *)uint_data},
+ {&ps_ld_2d_int, &int_2d, {R32_SINT, TEX_2D, 0}, {}, (const DWORD *)int_data},
+ {&ps_ld_2d_uint_arr, &uint2d_arr, {R32_UINT, TEX_2D_ARRAY, 0, 0, ~0u}, {0}, (const DWORD *)uint_data},
+ {&ps_ld_2d_uint_arr, &uint2d_arr, {R32_UINT, TEX_2D_ARRAY, 0, 0, ~0u}, {1}, (const DWORD *)uint_data2},
+ {&ps_ld_2d_uint_arr, &uint2d_arr, {R32_UINT, TEX_2D_ARRAY, 0, 0, ~0u}, {2}, (const DWORD *)uint_data3},
+ {&ps_ld_2d_uint_arr, &uint2d_arr, {R32_UINT, TEX_2D_ARRAY, 0, 1, ~0u}, {0}, (const DWORD *)uint_data2},
+ {&ps_ld_2d_uint_arr, &uint2d_arr, {R32_UINT, TEX_2D_ARRAY, 0, 1, ~0u}, {1}, (const DWORD *)uint_data3},
+ {&ps_ld_2d_uint_arr, &uint2d_arr, {R32_UINT, TEX_2D_ARRAY, 0, 2, ~0u}, {0}, (const DWORD *)uint_data3},
#undef TEX_2D
+#undef TEX_2D_ARRAY
#undef R32_FLOAT
#undef R32_UINT
#undef R32_SINT
@@ -11593,6 +11652,9 @@ static void test_uav_load(void)
texture_desc.BindFlags = D3D11_BIND_UNORDERED_ACCESS;
+ cb = create_buffer(device, D3D11_BIND_CONSTANT_BUFFER, sizeof(struct uvec4), NULL);
+ ID3D11DeviceContext_PSSetConstantBuffers(context, 0, 1, &cb);
+
ps = NULL;
uav = NULL;
texture = NULL;
@@ -11604,6 +11666,9 @@ static void test_uav_load(void)
ID3D11RenderTargetView *current_rtv;
ID3D11Texture2D *current_rt;
+ ID3D11DeviceContext_UpdateSubresource(context, (ID3D11Resource *)cb, 0,
+ NULL, &test->constant, 0, 0);
+
if (current_ps != test->ps)
{
if (ps)
@@ -11687,6 +11752,7 @@ static void test_uav_load(void)
ID3D11Texture2D_Release(texture);
ID3D11UnorderedAccessView_Release(uav);
+ ID3D11Buffer_Release(cb);
ID3D11RenderTargetView_Release(rtv_float);
ID3D11RenderTargetView_Release(rtv_sint);
ID3D11RenderTargetView_Release(rtv_uint);
More information about the wine-cvs
mailing list