[Mesa-dev] [PATCH 0/9] dri2: Swapbuffer update v3.

Timothy Arceri tarceri at itsqueeze.com
Wed Sep 5 12:36:21 UTC 2018


On 05/09/18 22:09, Thomas Hellstrom wrote:
> On 09/05/2018 01:45 PM, Timothy Arceri wrote:
>>
>>
>> On 16/08/17 04:31, Thomas Hellstrom wrote:
>>> Implement back-to-fake-front flips,
>>> Fix EGL_BUFFER_PRESERVED path.
>>> Implement dri3 support for GLX_SWAP_EXCHANGE_OML and GLX_SWAP_COPY_OML.
>>>
>>> The back-to-fake-front flips will save a full buffer copy in the case 
>>> of a
>>> fake front being enabled and GLX_SWAP_UNDEFINED_OML.
>>>
>>> Support for EGL_BUFFER_PRESERVED and GLX_SWAP_X_OML are mostly useful 
>>> for
>>> things like glretrace if traces are capured with applications relying 
>>> on a
>>> specific swapbuffer behavior.
>>>
>>> The EGL_BUFFER_PRESERVED path previously made sure the present was 
>>> done as
>>> a copy, but there was nothing making sure that after the present,
>>> the same back buffer was chosen.
>>> This has now been changed so that if the previous back buffer is
>>> idle, we reuse it. Otherwise we grab a new and copy the contents and
>>> buffer age from the previous back buffer. Server side flips are allowed.
>>>
>>> GLX_SWAP_COPY_OML will behave like EGL_BUFFER_PRESERVED.
>>>
>>> GLX_SWAP_EXCHANGE_OML will behave similarly, except that we try to 
>>> reuse the
>>> previous fake front as the new back buffer if it's idle. If not, we grab
>>> a new back buffer and copy the contents and buffer age from the old 
>>> fake front.
>>>
>>> v2:
>>> - Split the original patch,
>>> - Make sure we have a context for blitImage even if we don't have a
>>> current context.
>>> - Make sure the delayed backbuffer allocation is performed before
>>> glXSwapBuffers, glXCopyBuffers and querying buffer age.
>>> v3:
>>> - squash three patches related to the same change.
>>> - Address review comments by Michel Dänzer.
>>>
>>> Testing done:
>>> piglit tests/quick without regressions on svga.
>>> A modified piglit glx-swap-exchange posted for review on the piglit 
>>> list.
>>> That test required modifying the dri2 state tracke to advertise 
>>> unconditional
>>> support for GLX_SWAP_EXCHANGE_OML
>>
>> What exactly do I need to do to force this to be advertised? A bigger 
>> question is what more is required to expose GLX_SWAP_EXCHANGE_OML more 
>> generally?
>>
>> It seems this is required for a few games running on wine [1].
>>
>> [1] 
>> https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fbugs.freedesktop.org%2Fshow_bug.cgi%3Fid%3D97516&data=02%7C01%7Cthellstrom%40vmware.com%7Ce4a72f032d3f4912556608d6132507df%7Cb39138ca3cee4b4aa4d6cd83d9dd62f0%7C1%7C0%7C636717447117422764&sdata=wFjbtCf59vWLBdSziwUfqVFVYAHEoDcorDx%2FcZxJBr0%3D&reserved=0 
>>
>>
>>
> 
> You need to get the X server AIGLX to advertize it, because the 
> available features are the intersection of the X server AIGLX features 
> and the dri driver features, even if this is purely implemented in the 
> dri client. The reason GLX works this way is that after you've choosen 
> your config you can either choose to select a direct or indirect 
> context. That was a poor design.
> 
> Now the problem is that AIGLX isn't able to support it, because it uses 
> the dri driver dri2 path rather than the dri3 path, and I never got to 
> modifying AIGLX to use the dri3 path. Didn't think it was worth the 
> extra work.

Hmm ... thanks for the info. I should at least add some of this to the 
bug report.

> 
> In any case, you can hack-enable GLX_SWAP_EXCHANGE_OML if the client is 
> using dri3 by adding __DRI_ATTRIB_SWAP_EXCHANGE to back_buffer_modes[] 
> in src/gallium/state_trackers/dri/dri_screen.c, recompile and make sure 
> the X server also picks up the recompiled driver. That is if you have a 
> gallium driver. This worked fine with vmwgfx at the time I pushed the 
> patch as tested by the corresponding piglit test.

I did try this already with radeonsi but it didn't seem to work. I even 
restarted my PC to make sure the correct driver was selected.

> 
> For the other dri drivers there should be a similar way to set the 
> back_buffer_modes[].
> 
> Thanks,
> Thomas
> 
>>> A piglit glx-swap-copy test derived from the glx-swap-exchange test.
>>> Not posted yet.
>>>
>>>
>>> _______________________________________________
>>> mesa-dev mailing list
>>> mesa-dev at lists.freedesktop.org
>>> https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Flists.freedesktop.org%2Fmailman%2Flistinfo%2Fmesa-dev&data=02%7C01%7Cthellstrom%40vmware.com%7Ce4a72f032d3f4912556608d6132507df%7Cb39138ca3cee4b4aa4d6cd83d9dd62f0%7C1%7C0%7C636717447117422764&sdata=Y4n8dYa33hRjHN2KJlw9gZEQbuWGGz0oWR5FRj0ygd8%3D&reserved=0 
>>>
>>>
> 


More information about the mesa-dev mailing list