System Environment: -------------------------- Platform: GM45/Ironlake/Sandybridge/Ivybridge/Haswell Libdrm: (master)2.4.47 Mesa: (master)8bd4476010444642cff71e64146c91a484238dc2 Xserver:(master)xorg-server-1.14.99.3-1-g7ecfab47eb221dbb996ea6c033348b8eceaeb893 Xf86_video_intel:(master)2.99.905-23-g54aaf14dbf33b0e81932507b8753a63d1c6c8e77 Cairo: (master)98fef3cef2d0f7f463a2e4f9f1b35b09f7b6ea77 Libva: (staging)1a011ce5bb0b80506797a25a988854f3f81ce909 Libva_intel_driver:(staging)1cee858036a87837deddc87586701ed869f96261 Kernel: (drm-intel-nightly) 164a4cb4c1431a0689f85507868356fae24da638 Bug detailed description: ------------------------- It fails on GM45/Ironlake/Sandybridge/Ivybridge/Haswell with mesa master branch, and works well on 9.2 branch. Bisect shows:29996e219912fb1fdf35a6595d8f6261384a18dc is the first bad commit. commit 29996e219912fb1fdf35a6595d8f6261384a18dc Author: Carl Worth <cworth@cworth.org> AuthorDate: Thu Oct 17 10:54:56 2013 -0700 Commit: Carl Worth <cworth@cworth.org> CommitDate: Mon Oct 28 12:56:49 2013 -0700 Remove error when calling glGenQueries/glDeleteQueries while a query is acti There is nothing in the OpenGL specification which prevents the user from calling glGenQueries to generate a new query object while another object is active. Neither is there anything in the Mesa implementation which prevents this. So remove the INVALID_OPERATION errors in this case. Similarly, it is explicitly allowed by the OpenGL specification to delete an active query, so remove the assertion for that case, replacing it with the necesssary state updates to end the query, (clear the bindpt pointer and cal into the driver's EndQuery hook). CC: <mesa-stable@lists.freedesktop.org> Reviewed-by: Brian Paul <brianp@vmware.com> Tested-by: Brian Paul <brianp@vmware.com> output: ---------------------------------------------------------------------- Test occlusion query comformance. occluQry subcase PASS: conformOQ_GetQry_CnterBit test occluQry subcase PASS: conformOQ_GetObjivAval_multi1 test occluQry subcase PASS: conformOQ_GetObjivAval_multi2 test occluQry subcase PASS: conformOQ_Begin_unused_id test occluQry subcase PASS: conformOQ_EndAfter test occluQry: Error: No GL_INVALID_OPERATION generated if GenQueries in the progress of another. occluQry subcase FAIL: conformOQ_GenIn test occluQry subcase PASS: conformOQ_BeginIn test occluQry: Error: No GL_INVALID_OPERATION generated if DeleteQueries in the progress of another. occluQry subcase FAIL: conformOQ_DeleteIn test occluQry subcase PASS: conformOQ_GetObjAvalIn test occluQry subcase PASS: conformOQ_GetObjResultIn test occluQry subcase PASS: conformOQ_GetObjivAval test occluQry subcase PASS: conformOQ_Gen_Delete test occluQry subcase PASS: conformOQ_IsIdZero test occluQry subcase PASS: conformOQ_BeginIdZero test occluQry: FAIL rgba8, db, z24, s8, win+pmap, id 32 12 tests passed, 2 tests failed. occluQry subcase PASS: conformOQ_GetQry_CnterBit test occluQry subcase PASS: conformOQ_GetObjivAval_multi1 test occluQry subcase PASS: conformOQ_GetObjivAval_multi2 test occluQry subcase PASS: conformOQ_Begin_unused_id test occluQry subcase PASS: conformOQ_EndAfter test occluQry: Error: No GL_INVALID_OPERATION generated if GenQueries in the progress of another. occluQry subcase FAIL: conformOQ_GenIn test occluQry subcase PASS: conformOQ_BeginIn test occluQry: Error: No GL_INVALID_OPERATION generated if DeleteQueries in the progress of another. occluQry subcase FAIL: conformOQ_DeleteIn test occluQry subcase PASS: conformOQ_GetObjAvalIn test occluQry subcase PASS: conformOQ_GetObjResultIn test occluQry subcase PASS: conformOQ_GetObjivAval test occluQry subcase PASS: conformOQ_Gen_Delete test occluQry subcase PASS: conformOQ_IsIdZero test occluQry subcase PASS: conformOQ_BeginIdZero test occluQry: FAIL rgba8, db, z24, s8, win+pmap, id 33 12 tests passed, 2 tests failed. occluQry subcase PASS: conformOQ_GetQry_CnterBit test occluQry subcase PASS: conformOQ_GetObjivAval_multi1 test occluQry subcase PASS: conformOQ_GetObjivAval_multi2 test occluQry subcase PASS: conformOQ_Begin_unused_id test occluQry subcase PASS: conformOQ_EndAfter test occluQry: Error: No GL_INVALID_OPERATION generated if GenQueries in the progress of another. occluQry subcase FAIL: conformOQ_GenIn test occluQry subcase PASS: conformOQ_BeginIn test occluQry: Error: No GL_INVALID_OPERATION generated if DeleteQueries in the progress of another. occluQry subcase FAIL: conformOQ_DeleteIn test occluQry subcase PASS: conformOQ_GetObjAvalIn test occluQry subcase PASS: conformOQ_GetObjResultIn test occluQry subcase PASS: conformOQ_GetObjivAval test occluQry subcase PASS: conformOQ_Gen_Delete test occluQry subcase PASS: conformOQ_IsIdZero test occluQry subcase PASS: conformOQ_BeginIdZero test occluQry: FAIL rgba8, db, z24, s8, win+pmap, id 95 12 tests passed, 2 tests failed. occluQry subcase PASS: conformOQ_GetQry_CnterBit test occluQry subcase PASS: conformOQ_GetObjivAval_multi1 test occluQry subcase PASS: conformOQ_GetObjivAval_multi2 test occluQry subcase PASS: conformOQ_Begin_unused_id test occluQry subcase PASS: conformOQ_EndAfter test occluQry: Error: No GL_INVALID_OPERATION generated if GenQueries in the progress of another. occluQry subcase FAIL: conformOQ_GenIn test occluQry subcase PASS: conformOQ_BeginIn test occluQry: Error: No GL_INVALID_OPERATION generated if DeleteQueries in the progress of another. occluQry subcase FAIL: conformOQ_DeleteIn test occluQry subcase PASS: conformOQ_GetObjAvalIn test occluQry subcase PASS: conformOQ_GetObjResultIn test occluQry subcase PASS: conformOQ_GetObjivAval test occluQry subcase PASS: conformOQ_Gen_Delete test occluQry subcase PASS: conformOQ_IsIdZero test occluQry subcase PASS: conformOQ_BeginIdZero test occluQry: FAIL rgba8, z24, s8, win+pmap, id 122 12 tests passed, 2 tests failed. occluQry subcase PASS: conformOQ_GetQry_CnterBit test occluQry subcase PASS: conformOQ_GetObjivAval_multi1 test occluQry subcase PASS: conformOQ_GetObjivAval_multi2 test occluQry subcase PASS: conformOQ_Begin_unused_id test occluQry subcase PASS: conformOQ_EndAfter test occluQry: Error: No GL_INVALID_OPERATION generated if GenQueries in the progress of another. occluQry subcase FAIL: conformOQ_GenIn test occluQry subcase PASS: conformOQ_BeginIn test occluQry: Error: No GL_INVALID_OPERATION generated if DeleteQueries in the progress of another. occluQry subcase FAIL: conformOQ_DeleteIn test occluQry subcase PASS: conformOQ_GetObjAvalIn test occluQry subcase PASS: conformOQ_GetObjResultIn test occluQry subcase PASS: conformOQ_GetObjivAval test occluQry subcase PASS: conformOQ_Gen_Delete test occluQry subcase PASS: conformOQ_IsIdZero test occluQry subcase PASS: conformOQ_BeginIdZero test occluQry: FAIL rgba8, db, z24, s8, accrgba16, win+pmap, slow, id 123 12 tests passed, 2 tests failed. occluQry subcase PASS: conformOQ_GetQry_CnterBit test occluQry subcase PASS: conformOQ_GetObjivAval_multi1 test occluQry subcase PASS: conformOQ_GetObjivAval_multi2 test occluQry subcase PASS: conformOQ_Begin_unused_id test occluQry subcase PASS: conformOQ_EndAfter test occluQry: Error: No GL_INVALID_OPERATION generated if GenQueries in the progress of another. occluQry subcase FAIL: conformOQ_GenIn test occluQry subcase PASS: conformOQ_BeginIn test occluQry: Error: No GL_INVALID_OPERATION generated if DeleteQueries in the progress of another. occluQry subcase FAIL: conformOQ_DeleteIn test occluQry subcase PASS: conformOQ_GetObjAvalIn test occluQry subcase PASS: conformOQ_GetObjResultIn test occluQry subcase PASS: conformOQ_GetObjivAval test occluQry subcase PASS: conformOQ_Gen_Delete test occluQry subcase PASS: conformOQ_IsIdZero test occluQry subcase PASS: conformOQ_BeginIdZero test occluQry: FAIL rgba8, z24, s8, win+pmap, id 126 12 tests passed, 2 tests failed. occluQry subcase PASS: conformOQ_GetQry_CnterBit test occluQry subcase PASS: conformOQ_GetObjivAval_multi1 test occluQry subcase PASS: conformOQ_GetObjivAval_multi2 test occluQry subcase PASS: conformOQ_Begin_unused_id test occluQry subcase PASS: conformOQ_EndAfter test occluQry: Error: No GL_INVALID_OPERATION generated if GenQueries in the progress of another. occluQry subcase FAIL: conformOQ_GenIn test occluQry subcase PASS: conformOQ_BeginIn test occluQry: Error: No GL_INVALID_OPERATION generated if DeleteQueries in the progress of another. occluQry subcase FAIL: conformOQ_DeleteIn test occluQry subcase PASS: conformOQ_GetObjAvalIn test occluQry subcase PASS: conformOQ_GetObjResultIn test occluQry subcase PASS: conformOQ_GetObjivAval test occluQry subcase PASS: conformOQ_Gen_Delete test occluQry subcase PASS: conformOQ_IsIdZero test occluQry subcase PASS: conformOQ_BeginIdZero test occluQry: FAIL rgba8, db, z24, s8, win+pmap, id 127 12 tests passed, 2 tests failed. occluQry subcase PASS: conformOQ_GetQry_CnterBit test occluQry subcase PASS: conformOQ_GetObjivAval_multi1 test occluQry subcase PASS: conformOQ_GetObjivAval_multi2 test occluQry subcase PASS: conformOQ_Begin_unused_id test occluQry subcase PASS: conformOQ_EndAfter test occluQry: Error: No GL_INVALID_OPERATION generated if GenQueries in the progress of another. occluQry subcase FAIL: conformOQ_GenIn test occluQry subcase PASS: conformOQ_BeginIn test occluQry: Error: No GL_INVALID_OPERATION generated if DeleteQueries in the progress of another. occluQry subcase FAIL: conformOQ_DeleteIn test occluQry subcase PASS: conformOQ_GetObjAvalIn test occluQry subcase PASS: conformOQ_GetObjResultIn test occluQry subcase PASS: conformOQ_GetObjivAval test occluQry subcase PASS: conformOQ_Gen_Delete test occluQry subcase PASS: conformOQ_IsIdZero test occluQry subcase PASS: conformOQ_BeginIdZero test occluQry: FAIL rgba8, db, z24, s8, accrgba16, win+pmap, slow, id 128 12 tests passed, 2 tests failed. Reproduce steps: ------------------------- 1. xinit 2. ./bin/glean -o -v -v -v -t +occluQry
(In reply to comment #0) > occluQry: Error: No GL_INVALID_OPERATION generated if GenQueries in the > progress of another. > occluQry subcase FAIL: conformOQ_GenIn test > occluQry subcase PASS: conformOQ_BeginIn test > occluQry: Error: No GL_INVALID_OPERATION generated if DeleteQueries in the > progress of another. From the above results, it looks like this test is looking specifically for the behavior that was intentionally changed in the Mesa commit. We looked closely at the OpenGL specification and could not find justification for generating an error if glGenQueries or glDeleteQueries is called while a query is active. So we removed those errors from Mesa. It looks here like the Glean test is expecting precisely those errors. My opinion is that the test should be updated to not expect errors in these cases. -Carl
Yes, the test needs to be updated. It also seems like this should have been noticed before the Mesa patch landed. Is that test not run as part of a full piglit run?
(In reply to comment #2) > Yes, the test needs to be updated. It also seems like this should have been > noticed before the Mesa patch landed. Is that test not run as part of a > full piglit run? Or, did I fail to perform a full piglit run before submitting and then pusing the patch? (*blush*) I'll check one way or the other and resolve this. For now, I'm re-opening the bug and re-assigning it to piglit. -Carl
Fail on 9.2 branch. Fixed on master branch by commit cf6a41928fe8504e5d4949af0429483ffb546e27. commit cf6a41928fe8504e5d4949af0429483ffb546e27 Author: Carl Worth Date: Wed Oct 30 17:17:03 2013 -0700 glean: Fix occlusion query test: expect Gen/DeleteQueries while active to work A recent inspection of the latest OpenGL specification revealed that there is no requirement for errors to be generated if GenQueries or DeleteQueries are called while a query is active. Specifically, in Section 4.2 of OpenGL 4.4 (Core Profile) the only errors specified for GenQueries and DeleteQueries is INVALID_VALUE if the ID is negative. Additionally, the same section specifies what to do in case the active
The Piglit test "occlusion_query_conform" which replaces the Glean test does not test glGen/DeleteQueries during an active query. The new Piglit test "gen_delete_while_active" tests for no error, as indicated by the spec.
Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.