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

Thomas Hellstrom thellstrom at vmware.com
Wed Sep 5 18:57:19 UTC 2018


On 09/05/2018 04:30 PM, Timothy Arceri wrote:
> On 05/09/18 23:36, Thomas Hellstrom wrote:
>> On 09/05/2018 02:36 PM, Timothy Arceri wrote:
>>> 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%7Cbf80baf0e82c4d4339e708d6133c25d7%7Cb39138ca3cee4b4aa4d6cd83d9dd62f0%7C1%7C0%7C636717546404445044&sdata=RhyyM9A45NftarY5SsJbUz8pMaRTnIbx%2Fp4P2ZRcS64%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.
>>
>> How did you test? I'll give it a test on vmwgfx + piglit.
>> /Thomas
>
> I just tried running the glx-swap-exchange piglit test. I was still 
> getting:
>
> Couldn't get a GLX_SWAP_EXCHANGE_OML, RGBA, double-buffered fbconfig
> PIGLIT: {"result": "skip" }

It works fine here, piglit test is passing. Didn't work at first, but I 
got the dri driver installation directory wrong, once that was resolved 
and the X server really picked up the correct driver it worked fine. 
What distro are you on?

/Thomas



More information about the mesa-dev mailing list