Steam for Linux > Limited Beta > Topic Details
Freyja, The Witch... Nov 8, 2012 @ 10:32am
Issue Report : Functions that steamui.so expects to get from libGL.so.1
Hi…

I take this from a developer of Bumblebee project (http://bumblebee-project.org/ ):

OK, so Steam does not seem to respect the OpenGL ABI and wants to explicitly link against OpenGL extensions functions. This is a bug on Steam side.

This is the list of the functions that steamui.so expects to get from libGL.so.1 (they should be obtained via glXGetProcAddress instead):
glAttachShader
glBindBuffer
glBindFramebufferEXT
glBlendFuncSeparate
glBufferData
glCheckFramebufferStatusEXT
glCompileShader
glCreateProgram
glCreateShader
glDeleteBuffers
glDeleteFramebuffersEXT
glDeleteProgram
glDeleteShader
glFramebufferTexture2DEXT
glGenBuffers
glGenFramebuffersEXT
glGetProgramInfoLog
glGetProgramiv
glGetShaderInfoLog
glGetShaderiv
glGetUniformLocation
glLinkProgram
glMapBuffer
glShaderSource
glUniform1f
glUniform1i
glUniform2f
glUniform4f
glUniform4fv
glUniformMatrix4fv
glUnmapBuffer
glUseProgram
glBlitFramebufferANGLE
glBlitFramebufferEXT
glDeleteFencesNV
glFinishFenceNV
glGenFencesNV
glGetFenceivNV
glGetQueryObjecti64v
glGetQueryObjectui64v
glGetTranslatedShaderSourceANGLE
glIsFenceNV
glQueryCounter
glRenderbufferStorageMultisampleANGLE
glSetFenceNV
glTestFenceNV
glTexStorage2DEXT
glXBindTexImageEXT
glXCopySubBufferMESA
glXCreateContextAttribsARB
glXReleaseTexImageEXT
glXSwapIntervalEXT
However, their presence is not guaranteed even if all corresponding extensions are supported. On the contrary, OpenGL ABI document at http://www.opengl.org/registry/ABI/ specifies the following:

----8<----
3.4. The libraries must export all OpenGL 1.2, GLU 1.3, GLX 1.3, and ARB_multitexture entry points statically.

It's possible (but unlikely) that additional ARB or vendor extensions will be mandated before the ABI is finalized. Applications should not expect to link statically against any entry points not specified here.
----8<----

Note the last sentence. Please obtain the pointers to those functions via glXGetProcAddress instead.

Why do I care: I'm developing an OpenGL offloading hack useful for Linux laptops with Nvidia Optimus hybrid graphics (https://github.com/amonakov/primus) that works by providing an "intermediate" libGL.so.1 and handles rerouting rendering to a rendering slave, reading back the framebuffer, and displaying it via the primary card. Therefore, I need to provide GLX and GL APIs from primus' libGL, and I prefer not adding more functions than required by the OpenGL ABI.

Please also note that Mesa developers expressed a desire to stop providing extension symbols from Mesa's libGL.so as well (sorry, can find the URL to that discussion now).

He also saids that prevents the use of Steam on Nvidia cards with Optimus technology…

Source in French:
http://forum.ubuntu-fr.org/viewtopic.php?pid=11440351#p11440351
http://forum.ubuntu-fr.org/viewtopic.php?pid=11441711#p11441711
Last edited by Freyja, The Witch...; Nov 14, 2012 @ 10:07am
Showing 1-3 of 3 comments
< >
johndrinkwater [🐧︀ 🎮] Nov 8, 2012 @ 3:06pm 
*bump for attention*
Freyja, The Witch... Nov 14, 2012 @ 10:45am 
The Bumblebee developer asks me to add theses functions in the listing above :
glBlitFramebufferANGLE
glBlitFramebufferEXT
glDeleteFencesNV
glFinishFenceNV
glGenFencesNV
glGetFenceivNV
glGetQueryObjecti64v
glGetQueryObjectui64v
glGetTranslatedShaderSourceANGLE
glIsFenceNV
glQueryCounter
glRenderbufferStorageMultisampleANGLE
glSetFenceNV
glTestFenceNV
glTexStorage2DEXT
glXBindTexImageEXT
glXCopySubBufferMESA
glXCreateContextAttribsARB
glXReleaseTexImageEXT
glXSwapIntervalEXT
Showing 1-3 of 3 comments
< >
Per page: 15 30 50
Date Posted: Nov 8, 2012 @ 10:32am
Posts: 3