[Piglit] [PATCH] gl-1.0/swapbuffers-behavior: Try avoid reading from real front

Brian Paul brianp at vmware.com
Wed Jun 21 15:22:35 UTC 2017


On 06/21/2017 08:34 AM, Thomas Hellstrom wrote:
> Hi Brian,
>
> On 06/21/2017 04:20 PM, Brian Paul wrote:
>> On 06/21/2017 06:24 AM, Thomas Hellstrom wrote:
>>> Window systems (read dri3) that allocate a fake frontbuffer on demand
>>> will
>>> effectively read out from the real front before the first swapbuffers
>>> after
>>> fake front creation, and the real front buffer content is subject to
>>> errors
>>> caused by, among other things, window reparenting. So increase the
>>> likelyhood
>>> of not reading out from the real front by advertizing early that we will
>>> access the front buffer. After all, real front consistency is not the
>>> objective
>>> of this test.
>>>
>>> Fixes sporadic failures due to window reparenting on dri3/vmwgfx.
>>>
>>> Cc: Brian Paul <brianp at vmware.com>
>>> Signed-off-by: Thomas Hellstrom <thellstrom at vmware.com>
>>> ---
>>>   tests/spec/gl-1.0/swapbuffers-behavior.c | 2 +-
>>>   1 file changed, 1 insertion(+), 1 deletion(-)
>>>
>>> diff --git a/tests/spec/gl-1.0/swapbuffers-behavior.c
>>> b/tests/spec/gl-1.0/swapbuffers-behavior.c
>>> index d914020..15a07ac 100644
>>> --- a/tests/spec/gl-1.0/swapbuffers-behavior.c
>>> +++ b/tests/spec/gl-1.0/swapbuffers-behavior.c
>>> @@ -62,6 +62,7 @@ piglit_display(void)
>>>
>>>       /* Clear back buffer to green */
>>>       glDrawBuffer(GL_BACK);
>>> +    glReadBuffer(GL_FRONT);
>>
>> The comment no longer agrees with the code.
> I'll fix that.
>
>>
>>>       glClearColor(green[0], green[1], green[2], green[3]);
>>>       glClear(GL_COLOR_BUFFER_BIT);
>>>
>>> @@ -69,7 +70,6 @@ piglit_display(void)
>>>       piglit_swap_buffers();
>>>
>>>           /* Front buffer sanity-check */
>>> -    glReadBuffer(GL_FRONT);
>>
>> Same here.
>
> Actually that comment still makes sense since it's followed by a
> frontbuffer piglit_probe

Oh, right, because of the above change.


>>
>>
>>>       if (!piglit_probe_rect_rgb_silent(0, 0, piglit_width,
>>> piglit_height,
>>>                         green)) {
>>>           printf("SwapBuffers apparently failed!\n");
>>>
>>
>> These changes seem to defeat the purpose of the test.
>>
>> Would a different approach work?  How about after the initial
>> glViewport call we simply clear the front buffer?  That should trigger
>> creation of the fake front buffer, right?
>
> Yes, as long as we access the front buffer before SwapBuffers we should
> be safe. But I don't quite understand how creating the fake front buffer
> using glReadBuffer() would differ form creating it by a write access
> with respect to the test functionality?

glReadBuffer() just sets state and there's no guarantee that it by 
itself will trigger creation of a front buffer.  That may be how Mesa 
does things now, but that could change.  A buffer doesn't really have to 
exist until we try to put something in it.


> All this patch is doing is
> calling glReadBuffer() a little earlier than before?

But we have to clear the back buffer before the swap.  Otherwise, the 
front buffer contents will be undefined after the swap.

-Brian



More information about the Piglit mailing list