Only report the first failed row for each bias clamp test.
Signed-off-by: Francois Gouget fgouget@codeweavers.com --- dlls/d3d10core/tests/d3d10core.c | 12 ++++++++---- dlls/d3d11/tests/d3d11.c | 12 ++++++++---- 2 files changed, 16 insertions(+), 8 deletions(-)
diff --git a/dlls/d3d10core/tests/d3d10core.c b/dlls/d3d10core/tests/d3d10core.c index f799922ea28..b0ff09d3697 100644 --- a/dlls/d3d10core/tests/d3d10core.c +++ b/dlls/d3d10core/tests/d3d10core.c @@ -15765,6 +15765,7 @@ static void test_depth_bias(void)
for (k = 0; k < ARRAY_SIZE(bias_clamp_tests); ++k) { + BOOL all_match = TRUE; rasterizer_desc.DepthBiasClamp = bias_clamp_tests[k]; ID3D10Device_CreateRasterizerState(device, &rasterizer_desc, &rs); ok(SUCCEEDED(hr), "Failed to create rasterizer state, hr %#x.\n", hr); @@ -15775,21 +15776,23 @@ static void test_depth_bias(void) m = quad_slopes[i] / texture_desc.Height; bias = clamp_depth_bias(rasterizer_desc.SlopeScaledDepthBias * m, rasterizer_desc.DepthBiasClamp); get_texture_readback(texture, 0, &rb); - for (y = 0; y < texture_desc.Height; ++y) + for (y = 0; y < texture_desc.Height && all_match; ++y) { depth = min(max(0.0f, depth_values[y] + bias), 1.0f); switch (format) { case DXGI_FORMAT_D32_FLOAT: data = get_readback_float(&rb, 0, y); - ok(compare_float(data, depth, 64), + all_match = compare_float(data, depth, 64); + ok(all_match, "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_value = *u32 >> shift; expected_value = depth * 16777215.0f + 0.5f; - ok(abs(u32_value - expected_value) <= 3, + all_match = abs(u32_value - expected_value) <= 3; + ok(all_match, "Got value %#x (%.8e), expected %#x (%.8e).\n", u32_value, u32_value / 16777215.0f, expected_value, expected_value / 16777215.0f); @@ -15797,7 +15800,8 @@ static void test_depth_bias(void) case DXGI_FORMAT_D16_UNORM: u16 = get_readback_data(&rb, 0, y, sizeof(*u16)); expected_value = depth * 65535.0f + 0.5f; - ok(abs(*u16 - expected_value) <= 1, + all_match = abs(*u16 - expected_value) <= 1; + ok(all_match, "Got value %#x (%.8e), expected %#x (%.8e).\n", *u16, *u16 / 65535.0f, expected_value, expected_value / 65535.0f); break; diff --git a/dlls/d3d11/tests/d3d11.c b/dlls/d3d11/tests/d3d11.c index 3d6cbf57e20..2850d59757e 100644 --- a/dlls/d3d11/tests/d3d11.c +++ b/dlls/d3d11/tests/d3d11.c @@ -25681,6 +25681,7 @@ static void test_depth_bias(void)
for (k = 0; k < ARRAY_SIZE(bias_clamp_tests); ++k) { + BOOL all_match = TRUE; rasterizer_desc.DepthBiasClamp = bias_clamp_tests[k]; ID3D11Device_CreateRasterizerState(device, &rasterizer_desc, &rs); ok(SUCCEEDED(hr), "Failed to create rasterizer state, hr %#x.\n", hr); @@ -25691,21 +25692,23 @@ static void test_depth_bias(void) m = quad_slopes[i] / texture_desc.Height; bias = clamp_depth_bias(rasterizer_desc.SlopeScaledDepthBias * m, rasterizer_desc.DepthBiasClamp); get_texture_readback(texture, 0, &rb); - for (y = 0; y < texture_desc.Height; ++y) + for (y = 0; y < texture_desc.Height && all_match; ++y) { depth = min(max(0.0f, depth_values[y] + bias), 1.0f); switch (format) { case DXGI_FORMAT_D32_FLOAT: data = get_readback_float(&rb, 0, y); - ok(compare_float(data, depth, 64), + all_match = compare_float(data, depth, 64); + ok(all_match, "Got depth %.8e, expected %.8e.\n", data, depth); break; case DXGI_FORMAT_D24_UNORM_S8_UINT: 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, + all_match = abs(u32_value - expected_value) <= 3; + ok(all_match, "Got value %#x (%.8e), expected %#x (%.8e).\n", u32_value, u32_value / 16777215.0f, expected_value, expected_value / 16777215.0f); @@ -25713,7 +25716,8 @@ static void test_depth_bias(void) case DXGI_FORMAT_D16_UNORM: u16 = get_readback_data(&rb, 0, y, 0, sizeof(*u16)); expected_value = depth * 65535.0f + 0.5f; - ok(abs(*u16 - expected_value) <= 1, + all_match = abs(*u16 - expected_value) <= 1; + ok(all_match, "Got value %#x (%.8e), expected %#x (%.8e).\n", *u16, *u16 / 65535.0f, expected_value, expected_value / 65535.0f); break;
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=51004
Your paranoid android.
=== debian9 (32 bit report) ===
d3d10core: d3d10core.c:4921: Test succeeded inside todo block: Got unexpected PrimitivesStorageNeeded: 0. d3d10core.c:4931: Test succeeded inside todo block: Got unexpected PrimitivesStorageNeeded: 0. d3d10core: Timeout
Report errors: d3d11:d3d11 has no test summary line (early exit of the main process?) d3d11:d3d11 has unaccounted for failure messages d3d11:d3d11 has unaccounted for todo messages d3d11:d3d11 has unaccounted for skip messages d3d11:d3d11 returned success despite having failures
=== debian9 (32 bit French report) ===
d3d11: d3d11.c:6022: Test succeeded inside todo block: Got unexpected PrimitivesStorageNeeded: 0. d3d11.c:6032: Test succeeded inside todo block: Got unexpected PrimitivesStorageNeeded: 0.
=== debian9 (32 bit Japanese:Japan report) ===
d3d10core: d3d10core.c:4738: Test failed: Got unexpected CPrimitives count: 3. d3d10core.c:12549: Test failed: Got {-1.00787401e+000, 0.00000000e+000, 1.00000000e+000, 5.03937006e-001}, expected {-1.00000000e+000, 0.00000000e+000, 1.00000000e+000, 5.03937006e-001} at (0, 0), sub-resource 0.
d3d11: d3d11.c:6022: Test succeeded inside todo block: Got unexpected PrimitivesStorageNeeded: 0.
=== debian9 (32 bit Chinese:China report) ===
d3d11: d3d11.c:6032: Test succeeded inside todo block: Got unexpected PrimitivesStorageNeeded: 0. d3d11.c:16770: Test failed: Got {-1.00787401e+000, 0.00000000e+000, 1.00000000e+000, 5.03937006e-001}, expected {-1.00000000e+000, 0.00000000e+000, 1.00000000e+000, 5.03937006e-001} at (0, 0), sub-resource 0. d3d11.c:17854: Test failed: Got {0x00000001, 0xffffffff, 0x00000000, 0x00000000}, expected {0x00000001, 0x00000000, 0x00000000, 0x00000000} at (0, 0), sub-resource 0.
=== debian9 (build log) ===
X Error of failed request: GLXBadFBConfig Major opcode of failed request: 154 (GLX) Minor opcode of failed request: 34 ()
=== debian9 (32 bit WoW report) ===
d3d10core: d3d10core.c:12549: Test failed: Got {-1.00787401e+000, 0.00000000e+000, 1.00000000e+000, 5.03937006e-001}, expected {-1.00000000e+000, 0.00000000e+000, 1.00000000e+000, 5.03937006e-001} at (0, 0), sub-resource 0.
d3d11: d3d11.c:6022: Test succeeded inside todo block: Got unexpected PrimitivesStorageNeeded: 0.
Report errors: d3d11:d3d11 has no test summary line (early exit of the main process?) d3d11:d3d11 has unaccounted for failure messages d3d11:d3d11 has unaccounted for todo messages d3d11:d3d11 has unaccounted for skip messages d3d11:d3d11 returned success despite having failures
=== debian9 (64 bit WoW report) ===
d3d11: d3d11.c:6022: Test succeeded inside todo block: Got unexpected PrimitivesStorageNeeded: 0. d3d11.c:6032: Test succeeded inside todo block: Got unexpected PrimitivesStorageNeeded: 0. d3d11.c:16770: Test failed: Got {-1.00787401e+000, 0.00000000e+000, 1.00000000e+000, 5.03937006e-001}, expected {-1.00000000e+000, 0.00000000e+000, 1.00000000e+000, 5.03937006e-001} at (0, 0), sub-resource 0.
=== debian9 (build log) ===
X Error of failed request: GLXBadFBConfig Major opcode of failed request: 154 (GLX) Minor opcode of failed request: 34 ()
On Tue, 16 Apr 2019 at 19:51, Francois Gouget fgouget@codeweavers.com wrote:
@@ -15775,21 +15776,23 @@ static void test_depth_bias(void) m = quad_slopes[i] / texture_desc.Height; bias = clamp_depth_bias(rasterizer_desc.SlopeScaledDepthBias * m, rasterizer_desc.DepthBiasClamp); get_texture_readback(texture, 0, &rb);
for (y = 0; y < texture_desc.Height; ++y)
for (y = 0; y < texture_desc.Height && all_match; ++y) { depth = min(max(0.0f, depth_values[y] + bias), 1.0f); switch (format) { case DXGI_FORMAT_D32_FLOAT: data = get_readback_float(&rb, 0, y);
ok(compare_float(data, depth, 64),
all_match = compare_float(data, depth, 64);
ok(all_match, "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_value = *u32 >> shift; expected_value = depth * 16777215.0f + 0.5f;
ok(abs(u32_value - expected_value) <= 3,
all_match = abs(u32_value - expected_value) <= 3;
ok(all_match, "Got value %#x (%.8e), expected %#x (%.8e).\n", u32_value, u32_value / 16777215.0f, expected_value, expected_value / 16777215.0f);
@@ -15797,7 +15800,8 @@ static void test_depth_bias(void) case DXGI_FORMAT_D16_UNORM: u16 = get_readback_data(&rb, 0, y, sizeof(*u16)); expected_value = depth * 65535.0f + 0.5f;
ok(abs(*u16 - expected_value) <= 1,
all_match = abs(*u16 - expected_value) <= 1;
ok(all_match, "Got value %#x (%.8e), expected %#x (%.8e).\n", *u16, *u16 / 65535.0f, expected_value, expected_value / 65535.0f); break;
This doesn't reduce the number of ok() call all that much though. It will abort earlier on failure, but successful runs are going to produce the same amount of data as before. You'd want to move the ok() calls out of the loop as well, as is done in the various check_readback_data_*() helpers.
On Thu, 18 Apr 2019, Henri Verbeet wrote: [...]
This doesn't reduce the number of ok() call all that much though. It will abort earlier on failure, but successful runs are going to produce the same amount of data as before.
But then successful ok() calls don't print anything... at least if you don't set WINETEST_REPORT_SUCCESS which we don't for regular WineTest runs since that would cause the report to be just huge.
So since these "for y" loops don't have other ok() calls or trace() calls that should be fine. Going up one loop we have one "Failed to create rasterizer state" ok() call for the bias_clamp_tests loop but my impression was this one would stay out of the check_readback_xxx() function anyway.
On Thu, 18 Apr 2019 at 22:29, Francois Gouget fgouget@codeweavers.com wrote:
On Thu, 18 Apr 2019, Henri Verbeet wrote:
This doesn't reduce the number of ok() call all that much though. It will abort earlier on failure, but successful runs are going to produce the same amount of data as before.
But then successful ok() calls don't print anything... at least if you don't set WINETEST_REPORT_SUCCESS which we don't for regular WineTest runs since that would cause the report to be just huge.
I somehow got the impression successful ok() calls still contributed to the log size, but it looks like that's just wrong.
So since these "for y" loops don't have other ok() calls or trace() calls that should be fine. Going up one loop we have one "Failed to create rasterizer state" ok() call for the bias_clamp_tests loop but my impression was this one would stay out of the check_readback_xxx() function anyway.
I was thinking of moving the ok() calls out of the y-loop, yes.