Created attachment 126086 [details]
Example code how I did the check, code taken from wine
According to a check for extensions (glxinfo) the driver supports "GLX_OML_swap_method", but no pixelformat supports the values "GLX_SWAP_EXCHANGE_OML" or "GLX_SWAP_COPY_OML".
This means pglXChooseFBConfig too fails if it is requested.
Attached a snipped from the wine code to show how I checked for the support. Tell me if you need more information.
-Radeon R9 285 using amdgpu and opensource driver
-OpenGL core profile version string: 4.3 (Core Profile) Mesa 12.1.0-devel
-OpenGL version string: 3.0 Mesa 12.1.0-devel
-mesa-git and mesa-libgl-git (84367.fb89551), libdrm-git (5912.b214b05)
*** Bug 107687 has been marked as a duplicate of this bug. ***
GLX_SWAP_COPY_OML should be working Thomas Hellstrom added support for it towards the end of 2017. Partial support was also added for GLX_SWAP_EXCHANGE_OML below is a direct copy of Thomas's reply when I asked him what remained to properly expose GLX_SWAP_EXCHANGE_OML .
"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
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.
For the other dri drivers there should be a similar way to set the
As a temporary workaround to get the game Brink running I disabled the GLX_OML_swap_method. Wine has a check, and will ignore the attribute if the extension is missing.
Brink starts and runs, though I'm not sure what the possible side effects are?
I tried the suggested hack of adding _DRI_ATTRIB_SWAP_EXCHANGE to back_buffer_modes. In the case of Brink, it allows me to launch the game, but in fullscreen mode it stops updating the screen, so only a single frame is shown. Running the game windowed seems to work fine.
It could be a problem on my end, though I did rebuild system Mesa (32- and 64bit) so the server side should be picking up the changes too.