llvmpipe is extraordinarily slow to execute glBeginQuery() [as much as 10ms per call] when the regression test for bug 45932 is run after the previous test drawing a 33-bit number of samples. Swap the two tests to work around this.
Signed-off-by: Zebediah Figura z.figura12@gmail.com --- I haven't fully debugged it to determine what happens, but naïvely judging from LP_DEBUG output, the previous scene is re-rasterized on every call to glBeginQuery(). This is almost certainly a bug in llvmpipe. However, since by all apperances these two tests are unrelated, it seems far more prudent to me to work around it by reordering them than to spend time optimizing llvmpipe for speed.
For reference, the tests in question were added in 2dc3d2454 and 6b80fe509.
dlls/d3d9/tests/device.c | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-)
diff --git a/dlls/d3d9/tests/device.c b/dlls/d3d9/tests/device.c index 40ca639001..75cddbb6db 100644 --- a/dlls/d3d9/tests/device.c +++ b/dlls/d3d9/tests/device.c @@ -6007,6 +6007,26 @@ static void test_occlusion_query(void) if (broken_occlusion) goto done;
+ hr = IDirect3DDevice9_BeginScene(device); + ok(hr == D3D_OK, "Failed to begin scene, hr %#x.\n", hr); + for (i = 0; i < 50000; ++i) + { + hr = IDirect3DQuery9_Issue(query, D3DISSUE_BEGIN); + ok(hr == D3D_OK, "Got unexpected hr %#x.\n", hr); + hr = IDirect3DQuery9_Issue(query, D3DISSUE_END); + ok(hr == D3D_OK, "Got unexpected hr %#x.\n", hr); + } + hr = IDirect3DDevice9_EndScene(device); + ok(hr == D3D_OK, "Failed to end scene, hr %#x.\n", hr); + + wait_query(query); + + memset(&data, 0xff, sizeof(data)); + hr = IDirect3DQuery9_GetData(query, &data, sizeof(data), D3DGETDATA_FLUSH); + ok(hr == S_OK, "Got unexpected hr %#x.\n", hr); + ok(data.dword[0] == 0 && data.dword[1] == 0, + "Got unexpected query result 0x%08x%08x.\n", data.dword[1], data.dword[0]); + hr = IDirect3DDevice9_GetDeviceCaps(device, &caps); ok(SUCCEEDED(hr), "Failed to get device caps, hr %#x.\n", hr);
@@ -6062,26 +6082,6 @@ static void test_occlusion_query(void) || broken(data.dword[0] < 0xffffffff && !data.dword[1]), "Got unexpected query result 0x%08x%08x.\n", data.dword[1], data.dword[0]);
- hr = IDirect3DDevice9_BeginScene(device); - ok(SUCCEEDED(hr), "Failed to begin scene, hr %#x.\n", hr); - for (i = 0; i < 50000; ++i) - { - hr = IDirect3DQuery9_Issue(query, D3DISSUE_BEGIN); - ok(hr == D3D_OK, "Got unexpected hr %#x.\n", hr); - hr = IDirect3DQuery9_Issue(query, D3DISSUE_END); - ok(hr == D3D_OK, "Got unexpected hr %#x.\n", hr); - } - hr = IDirect3DDevice9_EndScene(device); - ok(SUCCEEDED(hr), "Failed to end scene, hr %#x.\n", hr); - - wait_query(query); - - memset(&data, 0xff, sizeof(data)); - hr = IDirect3DQuery9_GetData(query, &data, sizeof(data), D3DGETDATA_FLUSH); - ok(hr == S_OK, "Got unexpected hr %#x.\n", hr); - ok(data.dword[0] == 0 && data.dword[1] == 0, - "Got unexpected query result 0x%08x%08x.\n", data.dword[1], data.dword[0]); - IDirect3DSurface9_Release(rt);
done:
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=59003
Your paranoid android.
=== w1064v1809 (64 bit report) ===
d3d9: device.c:1808: Test failed: The cursor handle is 0000000000010003