Gallium3D Gets A Hack So It Can Now Play BioShock Infinite

BioShock Infinite was ported to Linux back in March. It is a benchmark-friendly game but when it comes to proprietary drivers it performs much better with NVIDIA than AMD Catalyst.
BioShock Infinite requires OpenGL 4.2 support, which the RadeonSI and Nouveau NVC0 Gallium3D drivers now have. However, it also makes use of the OpenGL ARB_copy_image extension from OpenGL 4.3. This extension is described by the OpenGL registry as, "[an] extension enables efficient image data transfer between image objects (i.e. textures and renderbuffers) without the need to bind the objects or otherwise configure the rendering pipeline."
VMware has been working on a proper ARB_copy_image implementation for Gallium3D, but it isn't ready in time for merging for Mesa 11.0. However, Freedreno/Nouveau developer Ilia Mirkin ended up implementing "fake" ARB_copy_image support for Gallium3D. This is just a basic hack for the extension and will only work for the basic uses of ARB_copy_image. However, this hack is enough to make BioShock Infinite happy.
Given that it's a hack / incomplete implementation, the extension isn't advertised by default. But you can easily expose it via the MESA_EXTENSION_OVERRIDE=GL_ARB_copy_image environment variable. With that extension override set and running Mesa Git since last night (this commit), BioShock Infinite should properly play at least on the NVC0 driver.
18 Comments