[PATCH 4/6] d3d11/tests: Add test for clearing 3D render target views.
Józef Kucia
jkucia at codeweavers.com
Mon May 28 04:33:17 CDT 2018
Signed-off-by: Józef Kucia <jkucia at codeweavers.com>
---
dlls/d3d11/tests/d3d11.c | 315 +++++++++++++++++++++++++++++++++--------------
1 file changed, 223 insertions(+), 92 deletions(-)
diff --git a/dlls/d3d11/tests/d3d11.c b/dlls/d3d11/tests/d3d11.c
index f6f4fe3a558d..aa48365aa88e 100644
--- a/dlls/d3d11/tests/d3d11.c
+++ b/dlls/d3d11/tests/d3d11.c
@@ -671,11 +671,11 @@ struct resource_readback
ID3D11Resource *resource;
D3D11_MAPPED_SUBRESOURCE map_desc;
ID3D11DeviceContext *immediate_context;
- unsigned int width, height, sub_resource_idx;
+ unsigned int width, height, depth, sub_resource_idx;
};
static void init_resource_readback(ID3D11Resource *resource, ID3D11Resource *readback_resource,
- unsigned int width, unsigned int height, unsigned int sub_resource_idx,
+ unsigned int width, unsigned int height, unsigned int depth, unsigned int sub_resource_idx,
ID3D11Device *device, struct resource_readback *rb)
{
HRESULT hr;
@@ -683,6 +683,7 @@ static void init_resource_readback(ID3D11Resource *resource, ID3D11Resource *rea
rb->resource = readback_resource;
rb->width = width;
rb->height = height;
+ rb->depth = depth;
rb->sub_resource_idx = sub_resource_idx;
ID3D11Device_GetImmediateContext(device, &rb->immediate_context);
@@ -724,7 +725,7 @@ static void get_buffer_readback(ID3D11Buffer *buffer, struct resource_readback *
}
init_resource_readback((ID3D11Resource *)buffer, rb_buffer,
- buffer_desc.ByteWidth, 1, 0, device, rb);
+ buffer_desc.ByteWidth, 1, 1, 0, device, rb);
ID3D11Device_Release(device);
}
@@ -756,7 +757,7 @@ static void get_texture1d_readback(ID3D11Texture1D *texture, unsigned int sub_re
miplevel = sub_resource_idx % texture_desc.MipLevels;
init_resource_readback((ID3D11Resource *)texture, rb_texture,
- max(1, texture_desc.Width >> miplevel), 1, sub_resource_idx, device, rb);
+ max(1, texture_desc.Width >> miplevel), 1, 1, sub_resource_idx, device, rb);
ID3D11Device_Release(device);
}
@@ -790,34 +791,70 @@ static void get_texture_readback(ID3D11Texture2D *texture, unsigned int sub_reso
init_resource_readback((ID3D11Resource *)texture, rb_texture,
max(1, texture_desc.Width >> miplevel),
max(1, texture_desc.Height >> miplevel),
+ 1, sub_resource_idx, device, rb);
+
+ ID3D11Device_Release(device);
+}
+
+static void get_texture3d_readback(ID3D11Texture3D *texture, unsigned int sub_resource_idx,
+ struct resource_readback *rb)
+{
+ D3D11_TEXTURE3D_DESC texture_desc;
+ ID3D11Resource *rb_texture;
+ unsigned int miplevel;
+ ID3D11Device *device;
+ HRESULT hr;
+
+ memset(rb, 0, sizeof(*rb));
+
+ ID3D11Texture3D_GetDevice(texture, &device);
+
+ ID3D11Texture3D_GetDesc(texture, &texture_desc);
+ texture_desc.Usage = D3D11_USAGE_STAGING;
+ texture_desc.BindFlags = 0;
+ texture_desc.CPUAccessFlags = D3D11_CPU_ACCESS_READ;
+ texture_desc.MiscFlags = 0;
+ if (FAILED(hr = ID3D11Device_CreateTexture3D(device, &texture_desc, NULL, (ID3D11Texture3D **)&rb_texture)))
+ {
+ trace("Failed to create texture, hr %#x.\n", hr);
+ ID3D11Device_Release(device);
+ return;
+ }
+
+ miplevel = sub_resource_idx % texture_desc.MipLevels;
+ init_resource_readback((ID3D11Resource *)texture, rb_texture,
+ max(1, texture_desc.Width >> miplevel),
+ max(1, texture_desc.Height >> miplevel),
+ max(1, texture_desc.Depth >> miplevel),
sub_resource_idx, device, rb);
ID3D11Device_Release(device);
}
-static void *get_readback_data(struct resource_readback *rb, unsigned int x, unsigned int y, unsigned byte_width)
+static void *get_readback_data(struct resource_readback *rb,
+ unsigned int x, unsigned int y, unsigned int z, unsigned byte_width)
{
- return (BYTE *)rb->map_desc.pData + y * rb->map_desc.RowPitch + x * byte_width;
+ return (BYTE *)rb->map_desc.pData + z * rb->map_desc.DepthPitch + y * rb->map_desc.RowPitch + x * byte_width;
}
-static DWORD get_readback_color(struct resource_readback *rb, unsigned int x, unsigned int y)
+static DWORD get_readback_color(struct resource_readback *rb, unsigned int x, unsigned int y, unsigned int z)
{
- return *(DWORD *)get_readback_data(rb, x, y, sizeof(DWORD));
+ return *(DWORD *)get_readback_data(rb, x, y, z, sizeof(DWORD));
}
static float get_readback_float(struct resource_readback *rb, unsigned int x, unsigned int y)
{
- return *(float *)get_readback_data(rb, x, y, sizeof(float));
+ return *(float *)get_readback_data(rb, x, y, 0, sizeof(float));
}
static const struct vec4 *get_readback_vec4(struct resource_readback *rb, unsigned int x, unsigned int y)
{
- return get_readback_data(rb, x, y, sizeof(struct vec4));
+ return get_readback_data(rb, x, y, 0, sizeof(struct vec4));
}
static const struct uvec4 *get_readback_uvec4(struct resource_readback *rb, unsigned int x, unsigned int y)
{
- return get_readback_data(rb, x, y, sizeof(struct uvec4));
+ return get_readback_data(rb, x, y, 0, sizeof(struct uvec4));
}
static void release_resource_readback(struct resource_readback *rb)
@@ -833,7 +870,7 @@ static DWORD get_texture_color(ID3D11Texture2D *texture, unsigned int x, unsigne
DWORD color;
get_texture_readback(texture, 0, &rb);
- color = get_readback_color(&rb, x, y);
+ color = get_readback_color(&rb, x, y, 0);
release_resource_readback(&rb);
return color;
@@ -843,7 +880,7 @@ static DWORD get_texture_color(ID3D11Texture2D *texture, unsigned int x, unsigne
static void check_readback_data_color_(unsigned int line, struct resource_readback *rb,
const RECT *rect, DWORD expected_color, BYTE max_diff)
{
- unsigned int x = 0, y = 0;
+ unsigned int x = 0, y = 0, z = 0;
BOOL all_match = TRUE;
RECT default_rect;
DWORD color = 0;
@@ -854,23 +891,28 @@ static void check_readback_data_color_(unsigned int line, struct resource_readba
rect = &default_rect;
}
- for (y = rect->top; y < rect->bottom; ++y)
+ for (z = 0; z < rb->depth; ++z)
{
- for (x = rect->left; x < rect->right; ++x)
+ for (y = rect->top; y < rect->bottom; ++y)
{
- color = get_readback_color(rb, x, y);
- if (!compare_color(color, expected_color, max_diff))
+ for (x = rect->left; x < rect->right; ++x)
{
- all_match = FALSE;
- break;
+ color = get_readback_color(rb, x, y, z);
+ if (!compare_color(color, expected_color, max_diff))
+ {
+ all_match = FALSE;
+ break;
+ }
}
+ if (!all_match)
+ break;
}
if (!all_match)
break;
}
ok_(__FILE__, line)(all_match,
- "Got 0x%08x, expected 0x%08x at (%u, %u), sub-resource %u.\n",
- color, expected_color, x, y, rb->sub_resource_idx);
+ "Got 0x%08x, expected 0x%08x at (%u, %u, %u), sub-resource %u.\n",
+ color, expected_color, x, y, z, rb->sub_resource_idx);
}
#define check_texture_sub_resource_color(a, b, c, d, e) check_texture_sub_resource_color_(__LINE__, a, b, c, d, e)
@@ -921,6 +963,30 @@ static void check_texture1d_color_(unsigned int line, ID3D11Texture1D *texture,
check_texture1d_sub_resource_color_(line, texture, sub_resource_idx, NULL, expected_color, max_diff);
}
+#define check_texture3d_sub_resource_color(a, b, c, d, e) check_texture3d_sub_resource_color_(__LINE__, a, b, c, d, e)
+static void check_texture3d_sub_resource_color_(unsigned int line, ID3D11Texture3D *texture,
+ unsigned int sub_resource_idx, const RECT *rect, DWORD expected_color, BYTE max_diff)
+{
+ struct resource_readback rb;
+
+ get_texture3d_readback(texture, sub_resource_idx, &rb);
+ check_readback_data_color_(line, &rb, rect, expected_color, max_diff);
+ release_resource_readback(&rb);
+}
+
+#define check_texture3d_color(t, c, d) check_texture3d_color_(__LINE__, t, c, d)
+static void check_texture3d_color_(unsigned int line, ID3D11Texture3D *texture,
+ DWORD expected_color, BYTE max_diff)
+{
+ unsigned int sub_resource_idx, sub_resource_count;
+ D3D11_TEXTURE3D_DESC texture_desc;
+
+ ID3D11Texture3D_GetDesc(texture, &texture_desc);
+ sub_resource_count = texture_desc.MipLevels;
+ for (sub_resource_idx = 0; sub_resource_idx < sub_resource_count; ++sub_resource_idx)
+ check_texture3d_sub_resource_color_(line, texture, sub_resource_idx, NULL, expected_color, max_diff);
+}
+
#define check_texture_sub_resource_float(a, b, c, d, e) check_texture_sub_resource_float_(__LINE__, a, b, c, d, e)
static void check_texture_sub_resource_float_(unsigned int line, ID3D11Texture2D *texture,
unsigned int sub_resource_idx, const RECT *rect, float expected_value, BYTE max_diff)
@@ -6657,7 +6723,7 @@ static void test_texture1d(void)
get_texture_readback(test_context.backbuffer, 0, &rb);
for (x = 0; x < 4; ++x)
{
- color = get_readback_color(&rb, 80 + x * 160, 0);
+ color = get_readback_color(&rb, 80 + x * 160, 0, 0);
ok(compare_color(color, test->expected_colors[x], 2),
"Test %u: Got unexpected color 0x%08x at (%u).\n", i, color, x);
}
@@ -6745,7 +6811,7 @@ static void test_texture1d(void)
get_texture_readback(test_context.backbuffer, 0, &rb);
for (x = 0; x < 4; ++x)
{
- color = get_readback_color(&rb, 80 + x * 160, 0);
+ color = get_readback_color(&rb, 80 + x * 160, 0, 0);
ok(compare_color(color, test->expected_colors[x], 1),
"Test %u: Got unexpected color 0x%08x at (%u).\n", i, color, x);
}
@@ -7615,7 +7681,7 @@ static void test_texture(void)
{
for (x = 0; x < 4; ++x)
{
- color = get_readback_color(&rb, 80 + x * 160, 60 + y * 120);
+ color = get_readback_color(&rb, 80 + x * 160, 60 + y * 120, 0);
ok(compare_color(color, test->expected_colors[y * 4 + x], 2),
"Test %u: Got unexpected color 0x%08x at (%u, %u).\n", i, color, x, y);
}
@@ -7707,7 +7773,7 @@ static void test_texture(void)
{
for (x = 0; x < 4; ++x)
{
- color = get_readback_color(&rb, 80 + x * 160, 60 + y * 120);
+ color = get_readback_color(&rb, 80 + x * 160, 60 + y * 120, 0);
ok(compare_color(color, test->expected_colors[y * 4 + x], 1),
"Test %u: Got unexpected color 0x%08x at (%u, %u).\n", i, color, x, y);
}
@@ -11405,7 +11471,7 @@ static void test_update_subresource(void)
{
for (j = 0; j < 4; ++j)
{
- color = get_readback_color(&rb, 80 + j * 160, 60 + i * 120);
+ color = get_readback_color(&rb, 80 + j * 160, 60 + i * 120, 0);
ok(compare_color(color, expected_colors[j + i * 4], 1),
"Got unexpected color 0x%08x at (%u, %u), expected 0x%08x.\n",
color, j, i, expected_colors[j + i * 4]);
@@ -11421,7 +11487,7 @@ static void test_update_subresource(void)
{
for (j = 0; j < 4; ++j)
{
- color = get_readback_color(&rb, 80 + j * 160, 60 + i * 120);
+ color = get_readback_color(&rb, 80 + j * 160, 60 + i * 120, 0);
ok(compare_color(color, bitmap_data[j + i * 4], 1),
"Got unexpected color 0x%08x at (%u, %u), expected 0x%08x.\n",
color, j, i, bitmap_data[j + i * 4]);
@@ -11612,7 +11678,7 @@ static void test_copy_subresource_region(void)
{
for (j = 0; j < 4; ++j)
{
- color = get_readback_color(&rb, 80 + j * 160, 60 + i * 120);
+ color = get_readback_color(&rb, 80 + j * 160, 60 + i * 120, 0);
ok(compare_color(color, expected_colors[j + i * 4], 1),
"Got unexpected color 0x%08x at (%u, %u), expected 0x%08x.\n",
color, j, i, expected_colors[j + i * 4]);
@@ -11628,7 +11694,7 @@ static void test_copy_subresource_region(void)
{
for (j = 0; j < 4; ++j)
{
- color = get_readback_color(&rb, 80 + j * 160, 60 + i * 120);
+ color = get_readback_color(&rb, 80 + j * 160, 60 + i * 120, 0);
ok(compare_color(color, bitmap_data[j + i * 4], 1),
"Got unexpected color 0x%08x at (%u, %u), expected 0x%08x.\n",
color, j, i, bitmap_data[j + i * 4]);
@@ -11660,7 +11726,7 @@ static void test_copy_subresource_region(void)
{
for (j = 0; j < 4; ++j)
{
- color = get_readback_color(&rb, 80 + j * 160, 60 + i * 120);
+ color = get_readback_color(&rb, 80 + j * 160, 60 + i * 120, 0);
ok(compare_color(color, bitmap_data[j + i * 4], 1),
"Got unexpected color 0x%08x at (%u, %u), expected 0x%08x.\n",
color, j, i, bitmap_data[j + i * 4]);
@@ -11735,7 +11801,7 @@ static void test_copy_subresource_region(void)
{
for (j = 0; j < 4; ++j)
{
- color = get_readback_color(&rb, 80 + j * 160, 60 + i * 120);
+ color = get_readback_color(&rb, 80 + j * 160, 60 + i * 120, 0);
ok(compare_color(color, bitmap_data[j + i * 4], 1),
"Got unexpected color 0x%08x at (%u, %u), expected 0x%08x.\n",
color, j, i, bitmap_data[j + i * 4]);
@@ -12707,7 +12773,7 @@ static void test_clear_render_target_view_1d(void)
texture_desc.CPUAccessFlags = 0;
texture_desc.MiscFlags = 0;
hr = ID3D11Device_CreateTexture1D(device, &texture_desc, NULL, &texture);
- ok(SUCCEEDED(hr), "Failed to create depth texture, hr %#x.\n", hr);
+ ok(SUCCEEDED(hr), "Failed to create texture, hr %#x.\n", hr);
hr = ID3D11Device_CreateRenderTargetView(device, (ID3D11Resource *)texture, NULL, &rtv);
ok(SUCCEEDED(hr), "Failed to create render target view, hr %#x.\n", hr);
@@ -12758,11 +12824,11 @@ static void test_clear_render_target_view_2d(void)
texture_desc.CPUAccessFlags = 0;
texture_desc.MiscFlags = 0;
hr = ID3D11Device_CreateTexture2D(device, &texture_desc, NULL, &texture);
- ok(SUCCEEDED(hr), "Failed to create depth texture, hr %#x.\n", hr);
+ ok(SUCCEEDED(hr), "Failed to create texture, hr %#x.\n", hr);
texture_desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM_SRGB;
hr = ID3D11Device_CreateTexture2D(device, &texture_desc, NULL, &srgb_texture);
- ok(SUCCEEDED(hr), "Failed to create depth texture, hr %#x.\n", hr);
+ ok(SUCCEEDED(hr), "Failed to create texture, hr %#x.\n", hr);
hr = ID3D11Device_CreateRenderTargetView(device, (ID3D11Resource *)texture, NULL, &rtv);
ok(SUCCEEDED(hr), "Failed to create render target view, hr %#x.\n", hr);
@@ -12789,7 +12855,7 @@ static void test_clear_render_target_view_2d(void)
texture_desc.Format = DXGI_FORMAT_R8G8B8A8_TYPELESS;
hr = ID3D11Device_CreateTexture2D(device, &texture_desc, NULL, &texture);
- ok(SUCCEEDED(hr), "Failed to create depth texture, hr %#x.\n", hr);
+ ok(SUCCEEDED(hr), "Failed to create texture, hr %#x.\n", hr);
rtv_desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM_SRGB;
rtv_desc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2D;
@@ -12813,7 +12879,7 @@ static void test_clear_render_target_view_2d(void)
for (j = 0; j < 4; ++j)
{
BOOL broken_device = is_warp_device(device) || is_nvidia_device(device);
- DWORD color = get_readback_color(&rb, 80 + i * 160, 60 + j * 120);
+ DWORD color = get_readback_color(&rb, 80 + i * 160, 60 + j * 120, 0);
ok(compare_color(color, expected_srgb_color, 1)
|| broken(compare_color(color, expected_color, 1) && broken_device),
"Got unexpected color 0x%08x.\n", color);
@@ -12827,6 +12893,70 @@ static void test_clear_render_target_view_2d(void)
release_test_context(&test_context);
}
+static void test_clear_render_target_view_3d(void)
+{
+ static const float color[] = {0.1f, 0.5f, 0.3f, 0.75f};
+ static const float green[] = {0.0f, 1.0f, 0.0f, 0.5f};
+
+ struct d3d11_test_context test_context;
+ D3D11_RENDER_TARGET_VIEW_DESC rtv_desc;
+ D3D11_TEXTURE3D_DESC texture_desc;
+ ID3D11DeviceContext *context;
+ ID3D11RenderTargetView *rtv;
+ ID3D11Texture3D *texture;
+ ID3D11Device *device;
+ HRESULT hr;
+
+ if (!init_test_context(&test_context, NULL))
+ return;
+ device = test_context.device;
+ context = test_context.immediate_context;
+
+ texture_desc.Width = 8;
+ texture_desc.Height = 8;
+ texture_desc.Depth = 4;
+ texture_desc.MipLevels = 1;
+ texture_desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
+ texture_desc.Usage = D3D11_USAGE_DEFAULT;
+ texture_desc.BindFlags = D3D11_BIND_RENDER_TARGET;
+ texture_desc.CPUAccessFlags = 0;
+ texture_desc.MiscFlags = 0;
+ hr = ID3D11Device_CreateTexture3D(device, &texture_desc, NULL, &texture);
+ ok(SUCCEEDED(hr), "Failed to create texture, hr %#x.\n", hr);
+
+ hr = ID3D11Device_CreateRenderTargetView(device, (ID3D11Resource *)texture, NULL, &rtv);
+ ok(SUCCEEDED(hr), "Failed to create render target view, hr %#x.\n", hr);
+
+ ID3D11DeviceContext_ClearRenderTargetView(context, rtv, color);
+ check_texture3d_color(texture, 0xbf4c7f19, 1);
+ ID3D11DeviceContext_ClearRenderTargetView(context, rtv, green);
+ check_texture3d_color(texture, 0x8000ff00, 1);
+
+ ID3D11RenderTargetView_Release(rtv);
+ ID3D11Texture3D_Release(texture);
+
+ texture_desc.Format = DXGI_FORMAT_R8G8B8A8_TYPELESS;
+ hr = ID3D11Device_CreateTexture3D(device, &texture_desc, NULL, &texture);
+ ok(SUCCEEDED(hr), "Failed to create texture, hr %#x.\n", hr);
+
+ rtv_desc.Format = DXGI_FORMAT_R8G8B8A8_UNORM_SRGB;
+ rtv_desc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE3D;
+ U(rtv_desc).Texture3D.MipSlice = 0;
+ U(rtv_desc).Texture3D.FirstWSlice = 0;
+ U(rtv_desc).Texture3D.WSize = ~0u;
+ hr = ID3D11Device_CreateRenderTargetView(device, (ID3D11Resource *)texture, &rtv_desc, &rtv);
+ ok(SUCCEEDED(hr), "Failed to create render target view, hr %#x.\n", hr);
+
+ ID3D11DeviceContext_ClearRenderTargetView(context, rtv, color);
+ check_texture3d_color(texture, 0xbf95bc59, 1);
+ ID3D11DeviceContext_ClearRenderTargetView(context, rtv, green);
+ check_texture3d_color(texture, 0x8000ff00, 1);
+
+ ID3D11RenderTargetView_Release(rtv);
+ ID3D11Texture3D_Release(texture);
+ release_test_context(&test_context);
+}
+
static void test_clear_depth_stencil_view(void)
{
D3D11_TEXTURE2D_DESC texture_desc;
@@ -13061,7 +13191,7 @@ static void test_clear_buffer_unordered_access_view(void)
get_buffer_readback(buffer, &rb);
for (x = 0; x < buffer_desc.ByteWidth / sizeof(uvec4.x); ++x)
{
- DWORD data = get_readback_color(&rb, x, 0);
+ DWORD data = get_readback_color(&rb, x, 0, 0);
ok(data == uvec4.x, "Got unexpected value %#x at %u.\n", data, x);
}
release_resource_readback(&rb);
@@ -13070,7 +13200,7 @@ static void test_clear_buffer_unordered_access_view(void)
get_buffer_readback(buffer, &rb);
for (x = 0; x < buffer_desc.ByteWidth / sizeof(uvec4.x); ++x)
{
- DWORD data = get_readback_color(&rb, x, 0);
+ DWORD data = get_readback_color(&rb, x, 0, 0);
uvec4 = x < U(uav_desc).Buffer.NumElements ? fe_uvec4 : uvec4_data[i];
ok(data == uvec4.x, "Got unexpected value %#x at %u.\n", data, x);
}
@@ -13105,7 +13235,7 @@ static void test_clear_buffer_unordered_access_view(void)
get_buffer_readback(buffer, &rb);
for (x = 0; x < buffer_desc.ByteWidth / sizeof(uvec4.x); ++x)
{
- DWORD data = get_readback_color(&rb, x, 0);
+ DWORD data = get_readback_color(&rb, x, 0, 0);
ok(data == uvec4.x, "Got unexpected value %#x at %u.\n", data, x);
}
release_resource_readback(&rb);
@@ -13114,7 +13244,7 @@ static void test_clear_buffer_unordered_access_view(void)
get_buffer_readback(buffer, &rb);
for (x = 0; x < buffer_desc.ByteWidth / sizeof(uvec4.x); ++x)
{
- DWORD data = get_readback_color(&rb, x, 0);
+ DWORD data = get_readback_color(&rb, x, 0, 0);
uvec4 = U(uav_desc).Buffer.FirstElement <= x ? fe_uvec4 : uvec4_data[i];
ok(data == uvec4.x, "Got unexpected value %#x at %u.\n", data, x);
}
@@ -13149,7 +13279,7 @@ static void test_clear_buffer_unordered_access_view(void)
get_buffer_readback(buffer, &rb);
for (x = 0; x < buffer_desc.ByteWidth / sizeof(uvec4.x); ++x)
{
- DWORD data = get_readback_color(&rb, x, 0);
+ DWORD data = get_readback_color(&rb, x, 0, 0);
ok(data == uvec4.x, "Got unexpected value %#x at %u.\n", data, x);
}
release_resource_readback(&rb);
@@ -13158,7 +13288,7 @@ static void test_clear_buffer_unordered_access_view(void)
get_buffer_readback(buffer, &rb);
for (x = 0; x < buffer_desc.ByteWidth / sizeof(uvec4.x); ++x)
{
- DWORD data = get_readback_color(&rb, x, 0);
+ DWORD data = get_readback_color(&rb, x, 0, 0);
uvec4 = U(uav_desc).Buffer.FirstElement <= x ? fe_uvec4 : uvec4_data[i];
ok(data == uvec4.x, "Got unexpected value %#x at %u.\n", data, x);
}
@@ -13233,7 +13363,7 @@ static void test_clear_buffer_unordered_access_view(void)
ID3D11DeviceContext_ClearUnorderedAccessViewUint(context, uav, &uvec4.x);
get_buffer_readback(buffer, &rb);
for (x = 0; x < buffer_desc.ByteWidth / sizeof(uvec4.x); ++x)
- todo_wine check_rgba_sint8(get_readback_color(&rb, x, 0), &uvec4);
+ todo_wine check_rgba_sint8(get_readback_color(&rb, x, 0, 0), &uvec4);
release_resource_readback(&rb);
ID3D11DeviceContext_ClearUnorderedAccessViewUint(context, uav2, &fe_uvec4.x);
@@ -13241,7 +13371,7 @@ static void test_clear_buffer_unordered_access_view(void)
for (x = 0; x < buffer_desc.ByteWidth / sizeof(uvec4.x); ++x)
{
uvec4 = U(uav_desc).Buffer.FirstElement <= x ? fe_uvec4 : uvec4_data[i];
- todo_wine check_rgba_sint8(get_readback_color(&rb, x, 0), &uvec4);
+ todo_wine check_rgba_sint8(get_readback_color(&rb, x, 0, 0), &uvec4);
}
release_resource_readback(&rb);
}
@@ -17403,15 +17533,15 @@ float4 main(struct ps_data ps_input) : SV_Target
ID3D11DeviceContext_Draw(context, 4, 0);
get_texture_readback(texture, 0, &rb);
- color = get_readback_color(&rb, 320, 190);
+ color = get_readback_color(&rb, 320, 190, 0);
ok(compare_color(color, 0x7fff007f, 1), "Got unexpected color 0x%08x.\n", color);
- color = get_readback_color(&rb, 255, 240);
+ color = get_readback_color(&rb, 255, 240, 0);
ok(compare_color(color, 0x7fff007f, 1), "Got unexpected color 0x%08x.\n", color);
- color = get_readback_color(&rb, 320, 240);
+ color = get_readback_color(&rb, 320, 240, 0);
ok(compare_color(color, 0x7fff007f, 1), "Got unexpected color 0x%08x.\n", color);
- color = get_readback_color(&rb, 385, 240);
+ color = get_readback_color(&rb, 385, 240, 0);
ok(compare_color(color, 0x7fff007f, 1), "Got unexpected color 0x%08x.\n", color);
- color = get_readback_color(&rb, 320, 290);
+ color = get_readback_color(&rb, 320, 290, 0);
ok(compare_color(color, 0x7fff007f, 1), "Got unexpected color 0x%08x.\n", color);
release_resource_readback(&rb);
@@ -17420,15 +17550,15 @@ float4 main(struct ps_data ps_input) : SV_Target
ID3D11DeviceContext_Draw(context, 4, 0);
get_texture_readback(test_context.backbuffer, 0, &rb);
- color = get_readback_color(&rb, 320, 190);
+ color = get_readback_color(&rb, 320, 190, 0);
ok(compare_color(color, 0x7fff007f, 1), "Got unexpected color 0x%08x.\n", color);
- color = get_readback_color(&rb, 255, 240);
+ color = get_readback_color(&rb, 255, 240, 0);
ok(compare_color(color, 0x7fff007f, 1), "Got unexpected color 0x%08x.\n", color);
- color = get_readback_color(&rb, 320, 240);
+ color = get_readback_color(&rb, 320, 240, 0);
ok(compare_color(color, 0x7fff007f, 1), "Got unexpected color 0x%08x.\n", color);
- color = get_readback_color(&rb, 385, 240);
+ color = get_readback_color(&rb, 385, 240, 0);
ok(compare_color(color, 0x7fff007f, 1), "Got unexpected color 0x%08x.\n", color);
- color = get_readback_color(&rb, 320, 290);
+ color = get_readback_color(&rb, 320, 290, 0);
ok(compare_color(color, 0x7fff007f, 1), "Got unexpected color 0x%08x.\n", color);
release_resource_readback(&rb);
@@ -18084,7 +18214,7 @@ static void test_uav_load(void)
for (x = 0; x < 4; ++x)
{
DWORD expected = test->expected_colors[y * 4 + x];
- DWORD color = get_readback_color(&rb, 80 + x * 160, 60 + y * 120);
+ DWORD color = get_readback_color(&rb, 80 + x * 160, 60 + y * 120, 0);
ok(compare_color(color, expected, 0),
"Test %u: Got 0x%08x, expected 0x%08x at (%u, %u).\n",
i, color, expected, x, y);
@@ -18485,7 +18615,7 @@ static void test_uav_store_immediate_constant(void)
ID3D11DeviceContext_CSSetUnorderedAccessViews(context, 0, 1, &uav, NULL);
ID3D11DeviceContext_Dispatch(context, 1, 1, 1);
get_buffer_readback(buffer, &rb);
- int_data = get_readback_color(&rb, 0, 0);
+ int_data = get_readback_color(&rb, 0, 0, 0);
ok(int_data == 42, "Got unexpected value %u.\n", int_data);
release_resource_readback(&rb);
@@ -18880,7 +19010,7 @@ static void test_atomic_instructions(void)
get_buffer_readback(in_buffer, &rb);
for (j = 0; j < ARRAY_SIZE(instructions); ++j)
{
- unsigned int value = get_readback_color(&rb, j, 0);
+ unsigned int value = get_readback_color(&rb, j, 0, 0);
unsigned int expected = test->expected_result[j];
todo_wine_if(expected != test->input[j]
@@ -18907,8 +19037,8 @@ static void test_atomic_instructions(void)
{
BOOL todo_instruction = !strcmp(imm_instructions[j], "imm_atomic_imax")
|| !strcmp(imm_instructions[j], "imm_atomic_imin");
- unsigned int out_value = get_readback_color(&out_rb, j, 0);
- unsigned int value = get_readback_color(&rb, j, 0);
+ unsigned int out_value = get_readback_color(&out_rb, j, 0, 0);
+ unsigned int value = get_readback_color(&rb, j, 0, 0);
unsigned int expected = test->expected_result[j];
todo_wine_if(expected != test->input[j] && todo_instruction)
@@ -20409,7 +20539,7 @@ static void test_buffer_srv(void)
{
for (x = 0; x < 4; ++x)
{
- color = get_readback_color(&rb, 80 + x * 160, 60 + y * 120);
+ color = get_readback_color(&rb, 80 + x * 160, 60 + y * 120, 0);
expected_color = test->expected_colors[y * 4 + x];
ok(compare_color(color, expected_color, 1),
"Test %u: Got 0x%08x, expected 0x%08x at (%u, %u).\n",
@@ -20635,7 +20765,7 @@ static void test_unaligned_raw_buffer_access(const D3D_FEATURE_LEVEL feature_lev
get_buffer_readback(raw_buffer, &rb);
for (i = 0; i < ARRAY_SIZE(buffer_data); ++i)
{
- data = get_readback_color(&rb, i, 0);
+ data = get_readback_color(&rb, i, 0, 0);
ok(data == buffer_data[i], "Got unexpected result %#x at %u.\n", data, i);
}
release_resource_readback(&rb);
@@ -20649,7 +20779,7 @@ static void test_unaligned_raw_buffer_access(const D3D_FEATURE_LEVEL feature_lev
get_buffer_readback(raw_buffer, &rb);
for (i = 0; i < ARRAY_SIZE(buffer_data); ++i)
{
- data = get_readback_color(&rb, i, 0);
+ data = get_readback_color(&rb, i, 0, 0);
ok(data == buffer_data[i], "Got unexpected result %#x at %u.\n", data, i);
}
release_resource_readback(&rb);
@@ -20663,7 +20793,7 @@ static void test_unaligned_raw_buffer_access(const D3D_FEATURE_LEVEL feature_lev
get_buffer_readback(raw_buffer, &rb);
for (i = 0; i < ARRAY_SIZE(buffer_data); ++i)
{
- data = get_readback_color(&rb, i, 0);
+ data = get_readback_color(&rb, i, 0, 0);
ok(data == buffer_data[i], "Got unexpected result %#x at %u.\n", data, i);
}
release_resource_readback(&rb);
@@ -20677,7 +20807,7 @@ static void test_unaligned_raw_buffer_access(const D3D_FEATURE_LEVEL feature_lev
get_buffer_readback(raw_buffer, &rb);
for (i = 0; i < ARRAY_SIZE(buffer_data); ++i)
{
- data = get_readback_color(&rb, i, 0);
+ data = get_readback_color(&rb, i, 0, 0);
ok(data == buffer_data[i], "Got unexpected result %#x at %u.\n", data, i);
}
release_resource_readback(&rb);
@@ -20694,9 +20824,9 @@ static void test_unaligned_raw_buffer_access(const D3D_FEATURE_LEVEL feature_lev
NULL, &offset, 0, 0);
ID3D11DeviceContext_Dispatch(context, 1, 1, 1);
get_buffer_readback(raw_buffer, &rb);
- data = get_readback_color(&rb, 0, 0);
+ data = get_readback_color(&rb, 0, 0, 0);
ok(data == 0xffff, "Got unexpected result %#x.\n", data);
- data = get_readback_color(&rb, 1, 0);
+ data = get_readback_color(&rb, 1, 0, 0);
ok(data == 0xa, "Got unexpected result %#x.\n", data);
release_resource_readback(&rb);
@@ -20903,7 +21033,7 @@ static void test_uav_counters(void)
get_buffer_readback(buffer2, &rb);
for (i = 0; i < 8; ++i)
{
- data = get_readback_color(&rb, i, 0);
+ data = get_readback_color(&rb, i, 0, 0);
ok(data == 0xdeadbeef, "Got data %u at %u.\n", data, i);
}
release_resource_readback(&rb);
@@ -21453,7 +21583,7 @@ static void test_tgsm(void)
get_buffer_readback(buffer, &rb);
for (i = 0; i < 64; ++i)
{
- data = get_readback_color(&rb, i, 0);
+ data = get_readback_color(&rb, i, 0, 0);
expected = 33 * i;
ok(data == expected, "Got %u, expected %u (index %u).\n", data, expected, i);
}
@@ -21486,9 +21616,9 @@ static void test_tgsm(void)
for (i = 0; i < 32; ++i)
{
expected = 64 * i + 32;
- data = get_readback_color(&rb, i, 0);
+ data = get_readback_color(&rb, i, 0, 0);
ok(data == expected, "Got %u, expected %u (index %u).\n", data, expected, i);
- data = get_readback_color(&rb2, i, 0);
+ data = get_readback_color(&rb2, i, 0, 0);
ok(data == expected || !data, "Got %u, expected %u (index %u).\n", data, expected, i);
}
release_resource_readback(&rb);
@@ -21530,7 +21660,7 @@ static void test_tgsm(void)
expected = (i % 32 + 1) * (i / 32);
float_data = get_readback_float(&rb, i, 0);
ok(float_data == expected, "Got %.8e, expected %u (index %u).\n", float_data, expected, i);
- data = get_readback_color(&rb2, i, 0);
+ data = get_readback_color(&rb2, i, 0, 0);
ok(data == expected, "Got %u, expected %u (index %u).\n", data, expected, i);
}
release_resource_readback(&rb);
@@ -21746,15 +21876,15 @@ float4 main(struct ps_data ps_input) : SV_Target
ID3D11DeviceContext_Draw(context, 1, 0);
get_texture_readback(test_context.backbuffer, 0, &rb);
- color = get_readback_color(&rb, 320, 190);
+ color = get_readback_color(&rb, 320, 190, 0);
ok(compare_color(color, 0xff0000ff, 1), "Got unexpected color 0x%08x.\n", color);
- color = get_readback_color(&rb, 255, 240);
+ color = get_readback_color(&rb, 255, 240, 0);
ok(compare_color(color, 0xff0000ff, 1), "Got unexpected color 0x%08x.\n", color);
- color = get_readback_color(&rb, 320, 240);
+ color = get_readback_color(&rb, 320, 240, 0);
ok(compare_color(color, 0xffffff00, 1), "Got unexpected color 0x%08x.\n", color);
- color = get_readback_color(&rb, 385, 240);
+ color = get_readback_color(&rb, 385, 240, 0);
ok(compare_color(color, 0xff0000ff, 1), "Got unexpected color 0x%08x.\n", color);
- color = get_readback_color(&rb, 320, 290);
+ color = get_readback_color(&rb, 320, 290, 0);
ok(compare_color(color, 0xff0000ff, 1), "Got unexpected color 0x%08x.\n", color);
release_resource_readback(&rb);
@@ -21784,7 +21914,7 @@ static void check_triangles_(unsigned int line, ID3D11Buffer *buffer,
for (i = 0; i < triangle_count; ++i)
{
- current = get_readback_data(&rb, i, 0, sizeof(*current));
+ current = get_readback_data(&rb, i, 0, 0, sizeof(*current));
expected = &triangles[i];
offset = ~0u;
@@ -24136,7 +24266,7 @@ static void test_depth_bias(void)
{
for (x = 0; x < texture_desc.Width; ++x)
{
- u16 = get_readback_data(&rb, x, y, sizeof(*u16));
+ u16 = get_readback_data(&rb, x, y, 0, sizeof(*u16));
ok(*u16 == 0xffff, "Got unexpected value %#x.\n", *u16);
}
}
@@ -24182,7 +24312,7 @@ static void test_depth_bias(void)
expected_value = depth * 16777215.0f + 0.5f;
for (x = 0; x < texture_desc.Width; ++x)
{
- u32 = get_readback_data(&rb, x, y, sizeof(*u32));
+ u32 = get_readback_data(&rb, x, y, 0, sizeof(*u32));
u32_value = *u32 >> shift;
ok(abs(u32_value - expected_value) <= 1,
"Got value %#x (%.8e), expected %#x (%.8e).\n",
@@ -24203,7 +24333,7 @@ static void test_depth_bias(void)
expected_value = depth * 65535.0f + 0.5f;
for (x = 0; x < texture_desc.Width; ++x)
{
- u16 = get_readback_data(&rb, x, y, sizeof(*u16));
+ u16 = get_readback_data(&rb, x, y, 0, sizeof(*u16));
ok(abs(*u16 - expected_value) <= 1,
"Got value %#x (%.8e), expected %#x (%.8e).\n",
*u16, *u16 / 65535.0f, expected_value, expected_value / 65535.0f);
@@ -24239,12 +24369,12 @@ static void test_depth_bias(void)
depth_values[y] = get_readback_float(&rb, 0, y);
break;
case DXGI_FORMAT_D24_UNORM_S8_UINT:
- u32 = get_readback_data(&rb, 0, y, sizeof(*u32));
+ u32 = get_readback_data(&rb, 0, y, 0, sizeof(*u32));
u32_value = *u32 >> shift;
depth_values[y] = u32_value / 16777215.0f;
break;
case DXGI_FORMAT_D16_UNORM:
- u16 = get_readback_data(&rb, 0, y, sizeof(*u16));
+ u16 = get_readback_data(&rb, 0, y, 0, sizeof(*u16));
depth_values[y] = *u16 / 65535.0f;
break;
default:
@@ -24276,7 +24406,7 @@ static void test_depth_bias(void)
"Got depth %.8e, expected %.8e.\n", data, depth);
break;
case DXGI_FORMAT_D24_UNORM_S8_UINT:
- u32 = get_readback_data(&rb, 0, y, sizeof(*u32));
+ u32 = get_readback_data(&rb, 0, y, 0, sizeof(*u32));
u32_value = *u32 >> shift;
expected_value = depth * 16777215.0f + 0.5f;
ok(abs(u32_value - expected_value) <= 3,
@@ -24285,7 +24415,7 @@ static void test_depth_bias(void)
expected_value, expected_value / 16777215.0f);
break;
case DXGI_FORMAT_D16_UNORM:
- u16 = get_readback_data(&rb, 0, y, sizeof(*u16));
+ u16 = get_readback_data(&rb, 0, y, 0, sizeof(*u16));
expected_value = depth * 65535.0f + 0.5f;
ok(abs(*u16 - expected_value) <= 1,
"Got value %#x (%.8e), expected %#x (%.8e).\n",
@@ -24839,7 +24969,7 @@ static void test_format_compatibility(void)
{
x = j % 4;
y = j / 4;
- colour = get_readback_color(&rb, x, y);
+ colour = get_readback_color(&rb, x, y, 0);
expected = test_data[i].success && x >= texel_dwords && y
? bitmap_data[j - (4 + texel_dwords)] : initial_data[j];
ok(colour == expected, "Test %u: Got unexpected colour 0x%08x at (%u, %u), expected 0x%08x.\n",
@@ -24854,7 +24984,7 @@ static void test_format_compatibility(void)
{
x = j % 4;
y = j / 4;
- colour = get_readback_color(&rb, x, y);
+ colour = get_readback_color(&rb, x, y, 0);
expected = test_data[i].success ? bitmap_data[j] : initial_data[j];
ok(colour == expected, "Test %u: Got unexpected colour 0x%08x at (%u, %u), expected 0x%08x.\n",
i, colour, x, y, expected);
@@ -25601,9 +25731,9 @@ static void test_combined_clip_and_cull_distances(void)
else
{
get_texture_readback(test_context.backbuffer, 0, &rb);
- color = get_readback_color(&rb, 160, 240);
+ color = get_readback_color(&rb, 160, 240, 0);
ok(color == expected_color[0], "Got unexpected color 0x%08x.\n", color);
- color = get_readback_color(&rb, 480, 240);
+ color = get_readback_color(&rb, 480, 240, 0);
ok(color == expected_color[1], "Got unexpected color 0x%08x.\n", color);
release_resource_readback(&rb);
}
@@ -25980,7 +26110,7 @@ static void test_generate_mips(void)
get_texture_readback(test_context.backbuffer, 0, &rb);
for (k = 0; k < ARRAY_SIZE(expected); ++k)
{
- color = get_readback_color(&rb, expected[k].pos.x, expected[k].pos.y);
+ color = get_readback_color(&rb, expected[k].pos.x, expected[k].pos.y, 0);
expected_color = tests[j].expected_mips ? expected[k].color : 0;
ok(color == expected_color, "Resource type %u, test %u: pixel (%u, %u) "
"has color %08x, expected %08x.\n",
@@ -26044,7 +26174,7 @@ static void test_generate_mips(void)
draw_quad(&test_context);
get_texture_readback(test_context.backbuffer, 0, &rb);
- color = get_readback_color(&rb, 320, 240);
+ color = get_readback_color(&rb, 320, 240, 0);
ok(compare_color(color, 0x7fbcbcbc, 1) || broken(compare_color(color, 0x7f7f7f7f, 1)), /* AMD */
"Unexpected color %08x.\n", color);
release_resource_readback(&rb);
@@ -27181,7 +27311,7 @@ static void test_sample_shading(void)
draw_quad(&test_context);
check_texture_color(test_context.backbuffer, 0xff00ff00, 0);
get_buffer_readback(buffer, &rb);
- data = get_readback_color(&rb, 0, 0);
+ data = get_readback_color(&rb, 0, 0, 0);
ok(1024 <= data && data <= 1056, "Test %u: Got unexpected value %u.\n", i, data);
release_resource_readback(&rb);
@@ -27191,7 +27321,7 @@ static void test_sample_shading(void)
1, &rtv, NULL, 1, 1, &uav, NULL);
draw_quad(&test_context);
get_buffer_readback(buffer, &rb);
- data = get_readback_color(&rb, 0, 0);
+ data = get_readback_color(&rb, 0, 0, 0);
todo_wine_if(tests[i].todo)
{
if (tests[i].sample_shading)
@@ -27475,6 +27605,7 @@ START_TEST(d3d11)
test_swapchain_flip();
test_clear_render_target_view_1d();
test_clear_render_target_view_2d();
+ test_clear_render_target_view_3d();
test_clear_depth_stencil_view();
test_clear_buffer_unordered_access_view();
test_initial_depth_stencil_state();
--
2.16.1
More information about the wine-devel
mailing list