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

Timothy Arceri tarceri at itsqueeze.com
Thu Sep 6 11:20:20 UTC 2018



On 06/09/18 04:57, Thomas Hellstrom wrote:
> 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?

I'm using Fedora 28. lsof /opt/xorg/lib/dri/radeonsi_dri.so shows

Xorg 1952 tarceri mem REG 253,0 78109952 1967931 
/opt/xorg/lib/dri/radeonsi_dri.so

> 
> /Thomas
> 


More information about the mesa-dev mailing list