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

Thomas Hellstrom thellstrom at vmware.com
Wed Sep 5 13:36:09 UTC 2018


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%7Cc71a9d949e56467614c108d6132c3212%7Cb39138ca3cee4b4aa4d6cd83d9dd62f0%7C1%7C0%7C636717488813233512&sdata=%2FmIsVYyD7Uvg2DwynXKJS3Am%2FEKiyBVz1d%2BSwjIq2Jw%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


>
>>
>> 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%7Cc71a9d949e56467614c108d6132c3212%7Cb39138ca3cee4b4aa4d6cd83d9dd62f0%7C1%7C0%7C636717488813243551&sdata=iG47YiO49K4vh1C0aV5SiSX%2BlthujiFPXro5DiDNInY%3D&reserved=0 
>>>>
>>>>
>>



More information about the mesa-dev mailing list