On 12/1/20 7:43 AM, Brian Paul wrote: > On 11/26/2020 09:22 AM, Brian Paul wrote: >> On Wed, Nov 25, 2020 at 8:19 PM Ian Romanick <i...@freedesktop.org >> <mailto:i...@freedesktop.org>> wrote: >> >> I was looking at the dlist-beginend subtest test_illegal_begin_mode. >> The test compiles a display list with GL_COMPILE_AND_EXECUTE >> mode. The >> glBegin in the test uses an invalid mode. This should generate a >> GL_INVALID_OPERATION error immediately. The test checks this, and >> that >> >> >> GL_INVALID_ENUM, actually, but anyway.. >> >> >> seems correct. >> >> The test then tries to execute the display list and checks for >> GL_INVALID_OPERATION again. I believe this is incorrect. Section >> 5.4 >> ("Display Lists") of the OpenGL 1.0 spec (this is a gl-1.0 test, >> after >> all!) says: >> >> If mode is COMPILE_AND_EXECUTE then commands are executed as >> they >> are encountered, then placed in the display list. >> >> Section 2.5 ("GL Errors") of the OpenGL 1.0 spec says: >> >> In other cases, the command generating the error is ignored >> so that >> it has no effect on GL state or framebuffer contents. >> >> >> Unfortunately, the spec doesn't clearly define what's meant by >> "ignored" here. That is, does it mean the command is not compiled >> into the display list? My intuition is that even if a command has >> invalid args at compile time, the command should still be compiled >> into the list. If the spec doesn't spell out the answer, I'd opt to >> do whatever other vendors do (hoping they're consistent). >> >> >> While the section numbers and titles have changed, every later >> version >> of the GL (compatibility profile) spec says the exact same thing. >> >> To me, this indicates that the errant glBegin should not be >> included in >> the display list. Assuming this test passes on other >> implementations, I >> think it does so only by luck. The mis-matched glEnd in the display >> list will generate the same error. Am I missing some spec >> language to >> justify this test? >> >> >> I haven't searched, but I suspect the spec doesn't explicitly describe >> this situation. >> >> >> I noticed this because I was adding a test that does >> >> glNewList(list, GL_COMPILE_AND_EXECUTE); >> glColor4fv(green); >> glBegin(GL_QUADS); >> glBegin(GL_QUADS); >> glVertex2f(-1, -1); >> glVertex2f( 1, -1); >> glVertex2f( 1, 0); >> glVertex2f(-1, 0); >> glEnd(); >> glEndList(); >> >> I expected an error while compiling the list, but I expected >> glCallList >> to not generate an error. Errors are generated in both places. >> >> >> I guess my instinct is that errors should be generated both at list >> compile and execute time. I wonder if there's any API function / >> argument combinations that would be errant at compile time but not at >> execute time, depending on some other state. If so, that would >> indicate that calls should always be compiled into the list, even if >> they generate an error at compile time. >> >> >> I think it gets worse. There's a second part to this new subtest >> that >> replaces the errant glBegin call with glReadPixels. glReadPixels >> is not >> allowed between glBegin and glEnd, so it should generate an error in >> GL_COMPILE_AND_EXECUTE mode. It does not. >> >> >> Sound like a run of the mill bug. >> >> >> These changes are in the top commit of: >> >> >> https://gitlab.freedesktop.org/idr/piglit/-/commits/display-list-hell >> <https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgitlab.freedesktop.org%2Fidr%2Fpiglit%2F-%2Fcommits%2Fdisplay-list-hell&data=04%7C01%7Cbrianp%40vmware.com%7C1bece8f6bb15456a704108d892278cef%7Cb39138ca3cee4b4aa4d6cd83d9dd62f0%7C0%7C0%7C637420045848819859%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&sdata=CGW3oxTFndTrF4fVU8EADRhSr1ORAODexsSgl4pYsjc%3D&reserved=0> >> >> >> I don't have any systems currently available with closed-source >> drivers, >> but I would be very interested to see the results of >> gl-1.0-dlist-beginend from that branch on any closed source >> drivers (on >> any platform). >> >> >> I can check on Nvidia next week when I'm back. Maybe someone else can >> test in the mean time. > > Here's the results with Nvidia's 455.38 driver: > > $ build-debug/bin/gl-1.0-dlist-beginend -auto > PIGLIT: {"enumerate subtests": ["glCallList inside glBegin-glEnd", > "nested glCallList inside glBegin-glEnd", "illegal glRect inside > glBegin-glEnd", "illegal glDrawArrays inside glBegin-glEnd", "illegal > glDrawArrays inside glBegin-glEnd (2)", "separate glBegin-glVertex-glEnd > lists", "illegal glBegin mode in display list"]} > PIGLIT: {"subtest": {"glCallList inside glBegin-glEnd" : "pass"}} > PIGLIT: {"subtest": {"nested glCallList inside glBegin-glEnd" : "pass"}} > PIGLIT: {"subtest": {"illegal glRect inside glBegin-glEnd" : "pass"}} > Probe color at (80,80) > Expected: 0.000000 1.000000 0.000000 1.000000 > Observed: 1.000000 0.000000 0.000000 1.000000 > PIGLIT: {"subtest": {"illegal glDrawArrays inside glBegin-glEnd" : "fail"}} > PIGLIT: {"subtest": {"illegal glDrawArrays inside glBegin-glEnd (2)" : > "pass"}} > PIGLIT: {"subtest": {"separate glBegin-glVertex-glEnd lists" : "pass"}} > PIGLIT: {"subtest": {"illegal glBegin mode in display list" : "pass"}} > PIGLIT: {"result": "fail" } > > Looks like the subtest in question passes.
Uh... I don't think that's the right branch. There should be some new subtests with GL_COMPILE_AND_EXECUTE in the name. On current Mesa, I get output more like: $ mesa debug bin/gl-1.0-dlist-beginend -auto PIGLIT: {"enumerate subtests": ["glCallList inside glBegin-glEnd", "nested glCallList inside glBegin-glEnd", "illegal glRect inside glBegin-glEnd", "illegal glDrawArrays inside glBegin-glEnd", "illegal glDrawArrays inside glBegin-glEnd (2)", "separate glBegin-glVertex-glEnd lists", "illegal glBegin mode in display list", "glBegin-glEnd inside GL_COMPILE_AND_EXECUTE", "glBegin-glBegin-glEnd inside GL_COMPILE", "glBegin-glBegin-glEnd inside GL_COMPILE_AND_EXECUTE"]} PIGLIT: {"subtest": {"glCallList inside glBegin-glEnd" : "pass"}} PIGLIT: {"subtest": {"nested glCallList inside glBegin-glEnd" : "pass"}} PIGLIT: {"subtest": {"illegal glRect inside glBegin-glEnd" : "pass"}} PIGLIT: {"subtest": {"illegal glDrawArrays inside glBegin-glEnd" : "pass"}} PIGLIT: {"subtest": {"illegal glDrawArrays inside glBegin-glEnd (2)" : "pass"}} PIGLIT: {"subtest": {"separate glBegin-glVertex-glEnd lists" : "pass"}} PIGLIT: {"subtest": {"illegal glBegin mode in display list" : "pass"}} PIGLIT: {"subtest": {"glBegin-glEnd inside GL_COMPILE_AND_EXECUTE" : "pass"}} PIGLIT: {"subtest": {"glBegin-glBegin-glEnd inside GL_COMPILE" : "pass"}} Unexpected GL error: GL_INVALID_OPERATION 0x502 (Error at /home/idr/devel/graphics/piglit/tests/spec/gl-1.0/dlist-beginend.c:182) Unexpected GL error: GL_NO_ERROR 0x0 (Error at /home/idr/devel/graphics/piglit/tests/spec/gl-1.0/dlist-beginend.c:203) Expected GL error: GL_INVALID_OPERATION 0x502 PIGLIT: {"subtest": {"glBegin-glBegin-glEnd inside GL_COMPILE_AND_EXECUTE" : "fail"}} PIGLIT: {"result": "fail" } > -Brian _______________________________________________ Piglit mailing list Piglit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/piglit