Signed-off-by: Henri Verbeet hverbeet@codeweavers.com --- dlls/d3d11/tests/d3d11.c | 101 +++++++++++++++++++++++++++-------------------- 1 file changed, 58 insertions(+), 43 deletions(-)
diff --git a/dlls/d3d11/tests/d3d11.c b/dlls/d3d11/tests/d3d11.c index 4a02b3f51f6..6f438482fc3 100644 --- a/dlls/d3d11/tests/d3d11.c +++ b/dlls/d3d11/tests/d3d11.c @@ -936,11 +936,16 @@ static void *get_readback_data(struct resource_readback *rb, return (BYTE *)rb->map_desc.pData + z * rb->map_desc.DepthPitch + y * rb->map_desc.RowPitch + x * byte_width; }
-static BYTE get_readback_byte(struct resource_readback *rb, unsigned int x, unsigned int y, unsigned int z) +static BYTE get_readback_u8(struct resource_readback *rb, unsigned int x, unsigned int y, unsigned int z) { return *(BYTE *)get_readback_data(rb, x, y, z, sizeof(BYTE)); }
+static WORD get_readback_u16(struct resource_readback *rb, unsigned int x, unsigned int y, unsigned int z) +{ + return *(WORD *)get_readback_data(rb, x, y, z, sizeof(WORD)); +} + 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, z, sizeof(DWORD)); @@ -980,12 +985,12 @@ static DWORD get_texture_color(ID3D11Texture2D *texture, unsigned int x, unsigne return color; }
-#define check_readback_data_byte(a, b, c, d) check_readback_data_byte_(__LINE__, a, b, c, d) -static void check_readback_data_byte_(unsigned int line, struct resource_readback *rb, +#define check_readback_data_u8(a, b, c, d) check_readback_data_u8_(__LINE__, a, b, c, d) +static void check_readback_data_u8_(unsigned int line, struct resource_readback *rb, const RECT *rect, BYTE expected_value, BYTE max_diff) { unsigned int x = 0, y = 0, z = 0; - BOOL all_match = TRUE; + BOOL all_match = FALSE; RECT default_rect; BYTE value = 0;
@@ -1001,30 +1006,61 @@ static void check_readback_data_byte_(unsigned int line, struct resource_readbac { for (x = rect->left; x < rect->right; ++x) { - value = get_readback_byte(rb, x, y, z); - if (!compare_color(value, expected_value, max_diff)) - { - all_match = FALSE; - break; - } + value = get_readback_u8(rb, x, y, z); + if (abs((int)value - (int)expected_value) > max_diff) + goto done; } - if (!all_match) - break; } - if (!all_match) - break; } + all_match = TRUE; + +done: ok_(__FILE__, line)(all_match, "Got 0x%02x, expected 0x%02x at (%u, %u, %u), sub-resource %u.\n", value, expected_value, x, y, z, rb->sub_resource_idx); }
+#define check_readback_data_u16(a, b, c, d) check_readback_data_u16_(__LINE__, a, b, c, d) +static void check_readback_data_u16_(unsigned int line, struct resource_readback *rb, + const RECT *rect, WORD expected_value, BYTE max_diff) +{ + unsigned int x = 0, y = 0, z = 0; + BOOL all_match = FALSE; + RECT default_rect; + WORD value = 0; + + if (!rect) + { + SetRect(&default_rect, 0, 0, rb->width, rb->height); + rect = &default_rect; + } + + for (z = 0; z < rb->depth; ++z) + { + for (y = rect->top; y < rect->bottom; ++y) + { + for (x = rect->left; x < rect->right; ++x) + { + value = get_readback_u16(rb, x, y, z); + if (abs((int)value - (int)expected_value) > max_diff) + goto done; + } + } + } + all_match = TRUE; + +done: + ok_(__FILE__, line)(all_match, + "Got 0x%04x, expected 0x%04x at (%u, %u, %u), sub-resource %u.\n", + value, expected_value, x, y, z, rb->sub_resource_idx); +} + #define check_readback_data_color(a, b, c, d) check_readback_data_color_(__LINE__, a, b, c, d) 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, z = 0; - BOOL all_match = TRUE; + BOOL all_match = FALSE; RECT default_rect; DWORD color = 0;
@@ -1042,17 +1078,13 @@ static void check_readback_data_color_(unsigned int line, struct resource_readba { color = get_readback_color(rb, x, y, z); if (!compare_color(color, expected_color, max_diff)) - { - all_match = FALSE; - break; - } + goto done; } - if (!all_match) - break; } - if (!all_match) - break; } + all_match = TRUE; + +done: ok_(__FILE__, line)(all_match, "Got 0x%08x, expected 0x%08x at (%u, %u, %u), sub-resource %u.\n", color, expected_color, x, y, z, rb->sub_resource_idx); @@ -25514,14 +25546,7 @@ static void test_depth_bias(void) break; case DXGI_FORMAT_D16_UNORM: get_texture_readback(texture, 0, &rb); - for (y = 0; y < texture_desc.Height; ++y) - { - for (x = 0; x < texture_desc.Width; ++x) - { - u16 = get_readback_data(&rb, x, y, 0, sizeof(*u16)); - ok(*u16 == 0xffff, "Got unexpected value %#x.\n", *u16); - } - } + check_readback_data_u16(&rb, NULL, 0xffffu, 0); release_resource_readback(&rb); break; default: @@ -25586,17 +25611,7 @@ static void test_depth_bias(void) depth = min(max(0.0f, quads[i].z + bias), 1.0f);
get_texture_readback(texture, 0, &rb); - for (y = 0; y < texture_desc.Height; ++y) - { - expected_value = depth * 65535.0f + 0.5f; - for (x = 0; x < texture_desc.Width; ++x) - { - 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); - } - } + check_readback_data_u16(&rb, NULL, depth * 65535.0f + 0.5f, 1); release_resource_readback(&rb); break; default: @@ -29007,7 +29022,7 @@ static void test_render_a8(void) ID3D11DeviceContext_OMSetRenderTargets(context, 1, &rtv, NULL); draw_quad(&test_context); get_texture_readback(texture, 0, &rb); - check_readback_data_byte(&rb, NULL, 0xff, 0); + check_readback_data_u8(&rb, NULL, 0xff, 0); release_resource_readback(&rb);
ID3D11DeviceContext_ClearRenderTargetView(context, test_context.backbuffer_rtv, black);
Hi,
While running your changed tests, I think I found new failures. Being a bot and all I'm not very good at pattern recognition, so I might be wrong, but could you please double-check?
Full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=50384
Your paranoid android.
=== debian9 (32 bit report) ===
d3d11: Unhandled exception: page fault on read access to 0x3f800000 in 32-bit code (0x7ed69e9d).
=== debian9 (32 bit French report) ===
d3d11: Unhandled exception: page fault on read access to 0x00000001 in 32-bit code (0x7ed81e9d).
=== debian9 (32 bit Japanese:Japan report) ===
d3d11: d3d11.c:5625: Test failed: Got unexpected hr 0x8876086a.
=== debian9 (32 bit Chinese:China report) ===
d3d11: Unhandled exception: page fault on read access to 0x00000001 in 32-bit code (0x7ed69e9d).
=== debian9 (32 bit WoW report) ===
d3d11: d3d11.c:5378: Test failed: Got unexpected hr 0x8876086a for query type 4. Unhandled exception: page fault on execute access to 0x00000000 in 32-bit code (0x00000000).