protonscr

Steam doesn't correctly detect direct rendering support and OpenGL extensions

steamclosed AMD driversreviewed
ValveSoftware/steam-for-linux#2201 · opened 2013-03-21 by baryluk · updated 2017-04-22 · 7 comments · github
Bbaryluk 2013-03-21 github

I am running Ubuntu 12.04 amd64 chroot inside a Debian wheezy/unstable amd64.

I passed environment (mostly DISPLAY=:0), I have mounted /dev/shm and /tmp, etc, from outside of chroot to have access to X server. I installed fglrx 13.1 from Debian experimental both 64 and 32 bit versions, both in Debian and chrooted Ubuntu, so they match and work. After setting LD_LIBRARY_PATH or adding necessary paths to /etc/ld.so.conf, I have working OpenGL with direct rendering:

(precise_amd64)xxx@yhyh:~$ glxinfo | egrep -i 'direct rend|draw_buffers2|string'
direct rendering: Yes
server glx vendor string: ATI
server glx version string: 1.4
client glx vendor string: ATI
client glx version string: 1.4
OpenGL vendor string: Advanced Micro Devices, Inc.
OpenGL renderer string: AMD Radeon HD 7900 Series 
OpenGL version string: 4.2.12002 Compatibility Profile Context 8.982.13
OpenGL shading language version string: 4.20
    GL_EXT_direct_state_access, GL_EXT_draw_buffers2, GL_EXT_draw_instanced, 

In fact this is exactly the same output I am getting outside of the chroot! glxgears work (4000+ fps)

I also successfully run Unigine Valey benchmark in it without ANY ISSUES with full speed.

The graphic card is Radeon 7970 (from gigabyte).

I can start steam without much issues, and it works. But it reports I do not have direct rendering for no apparent reasons:

(precise_amd64)xxx@yhyh:~$ steam
Running Steam on ubuntu 12.04 64-bit
STEAM_RUNTIME is enabled automatically
Installing breakpad exception handler for appid(steam)/version(1363394289_client)
Installing breakpad exception handler for appid(steam)/version(1363394289_client)
unlinked 0 orphaned pipes

(process:17562): Gtk-WARNING **: Locale not supported by C library.
    Using the fallback 'C' locale.
Installing breakpad exception handler for appid(steam)/version(1363394289_client)
[0321/003508:ERROR:bus.cc(261)] Failed to connect to the bus: Failed to connect to socket /var/run/dbus/system_bus_socket: No such file or directory
[0321/003508:ERROR:bus.cc(261)] Failed to connect to the bus: Failed to connect to socket /var/run/dbus/system_bus_socket: No such file or directory
[0321/003508:WARNING:proxy_service.cc(646)] PAC support disabled because there is no system implementation
/home/buildbot/buildslave_steam/steam_rel_client_ubuntu12_linux/build/src/vgui2/src/surface_linux.cpp (1743) : Assertion Failed: X context is not using direct rendering. Unfasten your seatbelt...

Assert( Assertion Failed: X context is not using direct rendering. Unfasten your seatbelt...
 ):/home/buildbot/buildslave_steam/steam_rel_client_ubuntu12_linux/build/src/vgui2/src/surface_linux.cpp:1743

I think steam messes up with library search.

Or is it releated to 32-bit vs 64-bit libs? I installed both, and both should work I think.

(precise_amd64)xxx@yhyh:/$ cat /etc/ld.so.conf.d/x86_64-linux-gnu_GL.conf 
#/usr/lib/x86_64-linux-gnu/mesa
/usr/lib/x86_64-linux-gnu/fglrx
(precise_amd64)xxx@yhyh:/$ cat /etc/ld.so.conf.d/i386-linux-gnu_GL.conf 
#/usr/lib/i386-linux-gnu/mesa
/usr/lib/i386-linux-gnu/fglrx

(with ldconfig followed under root)

Any ideas why steam thinks my X doesn't support direct rendering?

I tried running TF2, but it doesn't work. It ends with "Could not find required OpenGL entry point 'glColorMaskIndexedEXT'! Either your video card is unsupported, or your OpenGL driver needs to be updated."

Bbaryluk 2013-03-21 github

One more bit of information:

(precise_amd64)xxx@yhyh:/$ /sbin/ldconfig -p | grep libGL.so.1
    libGL.so.1 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libGL.so.1
    libGL.so.1 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/fglrx/libGL.so.1
    libGL.so.1 (libc6) => /usr/lib/i386-linux-gnu/fglrx/libGL.so.1
    libGL.so.1 (libc6) => /usr/lib/i386-linux-gnu/libGL.so.1
(precise_amd64)xxx@yhyh:/$ ls -l /usr/lib/x86_64-linux-gnu/libGL.so.1
lrwxrwxrwx 1 root root 50 Mar 19 06:11 /usr/lib/x86_64-linux-gnu/libGL.so.1 -> /etc/alternatives/glx--libGL.so.1-x86_64-linux-gnu
(precise_amd64)xxx@yhyh:/$ ls -l /etc/alternatives/glx--libGL.so.1-x86_64-linux-gnu
lrwxrwxrwx 1 root root 42 Mar 19 06:33 /etc/alternatives/glx--libGL.so.1-x86_64-linux-gnu -> /usr/lib/x86_64-linux-gnu/fglrx/libGL.so.1
(precise_amd64)xxx@yhyh:/$ ls -l /usr/lib/x86_64-linux-gnu/fglrx/libGL.so.1
lrwxrwxrwx 1 root root 18 Feb  1 13:11 /usr/lib/x86_64-linux-gnu/fglrx/libGL.so.1 -> fglrx-libGL.so.1.2
(precise_amd64)xxx@yhyh:/$ ls -l /usr/lib/x86_64-linux-gnu/fglrx/fglrx-libGL.so.1.2
-rw-r--r-- 1 root root 942120 Feb  1 13:11 /usr/lib/x86_64-linux-gnu/fglrx/fglrx-libGL.so.1.2
(precise_amd64)xxx@yhyh:/$ 
Ggdrewb-valve maintainer 2013-03-21 github

It's most likely a configuration issue where your 32-bit support doesn't match your 64-bit support. Can you run the 32-bit glxinfo and see what it says? You can also ldd the 32-bit glxinfo and see if it's loading the right OpenGL.

There's a bit more info here: https://support.steampowered.com/kb_article.php?ref=9938-EYZB-7457

Bbaryluk 2013-03-21 github

I was able to run Counter Strike, without any issues.

TF2 and CS:S however, returns "Could not find required OpenGL entry point 'glColorMaskIndexedEXT'! Either your video card is unsupported, or your OpenGL driver needs to be updated."

Not sure how to run 32-big glxinfo.

I downloaded _i386 package, unpacked it manually, and started glxinfo from there:
and indeed there are some issues:

(precise_amd64)xxx@yhyh:~/a$ ./glxinfo 
name of display: :0.0
display: :0  screen: 0
direct rendering: No (If you want to find out why, try setting LIBGL_DEBUG=verbose)
server glx vendor string: ATI
server glx version string: 1.4
server glx extensions:
    GLX_ARB_multisample, GLX_EXT_import_context, GLX_EXT_texture_from_pixmap, 
    GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_OML_swap_method, 
    GLX_SGI_make_current_read, GLX_SGI_swap_control, GLX_SGIS_multisample, 
    GLX_SGIX_fbconfig, GLX_SGIX_pbuffer, GLX_SGIX_visual_select_group
client glx vendor string: ATI
client glx version string: 1.4
client glx extensions:
    GLX_ARB_create_context, GLX_ARB_create_context_profile, 
    GLX_ARB_get_proc_address, GLX_ARB_multisample, GLX_EXT_import_context, 
    GLX_EXT_swap_control, GLX_EXT_visual_info, GLX_EXT_visual_rating, 
    GLX_MESA_allocate_memory, GLX_MESA_copy_sub_buffer, GLX_MESA_swap_control, 
    GLX_MESA_swap_frame_usage, GLX_NV_swap_group, GLX_OML_swap_method, 
    GLX_SGI_make_current_read, GLX_SGI_swap_control, GLX_SGI_video_sync, 
    GLX_SGIS_multisample, GLX_SGIX_fbconfig, GLX_SGIX_pbuffer, 
    GLX_SGIX_swap_barrier, GLX_SGIX_swap_group, GLX_SGIX_visual_select_group, 
    GLX_EXT_texture_from_pixmap, GLX_EXT_framebuffer_sRGB, 
    GLX_ARB_fbconfig_float, GLX_AMD_gpu_association
GLX version: 1.4
GLX extensions:
    GLX_ARB_get_proc_address, GLX_ARB_multisample, GLX_EXT_import_context, 
    GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_OML_swap_method, 
    GLX_SGI_make_current_read, GLX_SGI_swap_control, GLX_SGIS_multisample, 
    GLX_SGIX_fbconfig, GLX_SGIX_pbuffer, GLX_SGIX_visual_select_group, 
    GLX_EXT_texture_from_pixmap
OpenGL vendor string: ATI Technologies Inc.
OpenGL renderer string: AMD Radeon HD 7900 Series 
OpenGL version string: 2.1 (4.2.12002 Compatibility Profile Context 8.982.13)
OpenGL shading language version string: (null)
OpenGL extensions:
...
...
(precise_amd64)xxx@yhyh:~/a$   ./glxinfo  | grep draw_buffers2
(precise_amd64)xxx@yhyh:~/a$ 

ldd glxinfo, and ldd /usr/lib/i386-linux-gnu/fglrx/fglrx-libGL.so.1.2

both looks fine.

Debugging now.

(precise_amd64)xxx@yhyh:~/a$ ./glxinfo 
name of display: :0.0
libGL: AtiGetClientDriverName: 9.1.11 fglrx (screen 0)
libGL error: dlopen fglrx_dri.so failed
display: :0  screen: 0
...

Looks a problem with dynamic loading.

Not sure how to solve it.

(precise_amd64)root@:/# dpkg -l | grep -- -dri
ii  fglrx-driver                     1:13.1-2                           non-free ATI/AMD RadeonHD display driver
ii  libgl1-mesa-dri                  8.0.2-0ubuntu3                     free implementation of the OpenGL API -- DRI modules
ii  libgl1-mesa-dri:i386             8.0.2-0ubuntu3                     free implementation of the OpenGL API -- DRI modules

Apparently I have both installed

(precise_amd64)root@:/# dpkg -S fglrx_dri
fglrx-driver: /usr/lib/dri/fglrx_dri.so
libfglrx: /usr/lib/x86_64-linux-gnu/dri/fglrx_dri.so
libfglrx:i386: /usr/lib/i386-linux-gnu/dri/fglrx_dri.so

Not sure.

(precise_amd64)root@:/# dpkg -l | grep :i386
ii  gcc-4.6-base:i386                4.6.3-1ubuntu5                     GCC, the GNU Compiler Collection (base package)
ii  libc6:i386                       2.15-0ubuntu10                     Embedded GNU C Library: Shared libraries
ii  libcairo2:i386                   1.10.2-6.1ubuntu2                  The Cairo 2D vector graphics library
ii  libdrm-intel1:i386               2.4.32-1ubuntu1                    Userspace interface to intel-specific kernel DRM services -- runtime
ii  libdrm-nouveau1a:i386            2.4.32-1ubuntu1                    Userspace interface to nouveau-specific kernel DRM services -- runtime
ii  libdrm-radeon1:i386              2.4.32-1ubuntu1                    Userspace interface to radeon-specific kernel DRM services -- runtime
ii  libdrm2:i386                     2.4.32-1ubuntu1                    Userspace interface to kernel DRM services -- runtime
ii  libelf1:i386                     0.152-1ubuntu3                     library to read and write ELF files
ii  libexif12:i386                   0.6.20-2                           library to parse EXIF files
ii  libexpat1:i386                   2.0.1-7.2ubuntu1                   XML parsing C library - runtime library
ii  libffi6:i386                     3.0.11~rc1-5                       Foreign Function Interface library runtime
ii  libfglrx:i386                    1:13.1-2                           non-free ATI/AMD RadeonHD display driver (runtime libraries)
ii  libfglrx-amdxvba1:i386           1:13.1-2                           AMD XvBA (X-Video Bitstream Acceleration) runtime libraries
ii  libfontconfig1:i386              2.8.0-3ubuntu9                     generic font configuration library - runtime
ii  libfreetype6:i386                2.4.8-1ubuntu2                     FreeType 2 font engine, shared library files
ii  libgcc1:i386                     1:4.6.3-1ubuntu5                   GCC support library
ii  libgif4:i386                     4.1.6-9ubuntu1                     library for GIF images (library)
ii  libgl1-fglrx-glx:i386            1:13.1-2                           proprietary libGL for the non-free ATI/AMD RadeonHD display driver
ii  libgl1-mesa-dri:i386             8.0.2-0ubuntu3                     free implementation of the OpenGL API -- DRI modules
ii  libgl1-mesa-glx:i386             8.0.2-0ubuntu3                     free implementation of the OpenGL API -- GLX runtime
ii  libglapi-mesa:i386               8.0.2-0ubuntu3                     free implementation of the GL API -- shared library
ii  libglib2.0-0:i386                2.32.1-0ubuntu2                    GLib library of C routines
ii  libjpeg-turbo8:i386              1.1.90+svn733-0ubuntu4             IJG JPEG compliant runtime library.
ii  libjpeg8:i386                    8c-2ubuntu7                        Independent JPEG Group's JPEG runtime library (dependency package)
ii  libllvm3.0:i386                  3.0-4ubuntu1                       Low-Level Virtual Machine (LLVM), runtime library
ii  libpciaccess0:i386               0.12.902-1                         Generic PCI access library for X
ii  libpcre3:i386                    8.12-4                             Perl 5 Compatible Regular Expression Library - runtime files
ii  libpixman-1-0:i386               0.24.4-1                           pixel-manipulation library for X and cairo
ii  libpng12-0:i386                  1.2.46-3ubuntu4                    PNG library - runtime
ii  libselinux1:i386                 2.1.0-4.1ubuntu1                   SELinux runtime shared libraries
ii  libstdc++6:i386                  4.6.3-1ubuntu5                     GNU Standard C++ Library v3
ii  libtiff4:i386                    3.9.5-2ubuntu1                     Tag Image File Format (TIFF) library
ii  libx11-6:i386                    2:1.4.99.1-0ubuntu2                X11 client-side library
ii  libx11-xcb1:i386                 2:1.4.99.1-0ubuntu2                Xlib/XCB interface library
ii  libxau6:i386                     1:1.0.6-4                          X11 authorisation library
ii  libxcb-glx0:i386                 1.8.1-1                            X C Binding, glx extension
ii  libxcb-render0:i386              1.8.1-1                            X C Binding, render extension
ii  libxcb-shm0:i386                 1.8.1-1                            X C Binding, shm extension
ii  libxcb1:i386                     1.8.1-1                            X C Binding
ii  libxdamage1:i386                 1:1.1.3-2build1                    X11 damaged region extension library
ii  libxdmcp6:i386                   1:1.1.0-4                          X11 Display Manager Control Protocol library
ii  libxext6:i386                    2:1.3.0-3build1                    X11 miscellaneous extension library
ii  libxfixes3:i386                  1:5.0-4ubuntu4                     X11 miscellaneous 'fixes' extension library
ii  libxrender1:i386                 1:0.9.6-2build1                    X Rendering Extension client library
ii  libxxf86vm1:i386                 1:1.1.1-2build1                    X11 XFree86 video mode extension library
ii  zlib1g:i386                      1:1.2.3.4.dfsg-3ubuntu4            compression library - runtime
(precise_amd64)root@:/# 

I run strace glxinfo, and

this is interesting bit:

...
write(2, "libGL: ", 7libGL: )                  = 7
write(2, "AtiGetClientDriverName: 9.1.11 f"..., 48AtiGetClientDriverName: 9.1.11 fglrx (screen 0)
) = 48
futex(0xf72e7050, FUTEX_WAKE_PRIVATE, 2147483647) = 0
geteuid32()                             = 1000
getuid32()                              = 1000
open("/usr/lib/i386-linux-gnu/fglrx/dri/fglrx_dri.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib/dri/fglrx_dri.so", O_RDONLY|O_CLOEXEC) = 4
read(4, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0\263\37\0\0\0\0\0"..., 512) = 512
close(4)                                = 0
open("/usr/X11R6/lib32/modules/dri/fglrx_dri.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/usr/lib32/dri/fglrx_dri.so", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
write(2, "libGL error: ", 13libGL error: )           = 13
write(2, "dlopen fglrx_dri.so failed\n", 27dlopen fglrx_dri.so failed
) = 27
...

/usr/lib/dri/fglrx_dri.so is link to 64-bit so it obviously fail to open, and other ones, are missing.

Will create "/usr/lib/i386-linux-gnu/fglrx/dri" -> "/usr/lib/i386-linux-gnu/dri" link, and see what happens.

Bbaryluk 2013-03-21 github

Sucess:

root@:/$ ln -s /usr/lib/i386-linux-gnu/dri /usr/lib/i386-linux-gnu/fglrx/dri

Then:

$ ./mesa-utils_i386/usr/bin/glxinfo
name of display: :0.0
display: :0  screen: 0
direct rendering: Yes
server glx vendor string: ATI
server glx version string: 1.4
server glx extensions:
    GLX_ARB_multisample, GLX_EXT_import_context, GLX_EXT_texture_from_pixmap, 
    GLX_EXT_visual_info, GLX_EXT_visual_rating, GLX_OML_swap_method, 
    GLX_SGI_make_current_read, GLX_SGI_swap_control, GLX_SGIS_multisample, 
    GLX_SGIX_fbconfig, GLX_SGIX_pbuffer, GLX_SGIX_visual_select_group
client glx vendor string: ATI
client glx version string: 1.4
client glx extensions:
    GLX_ARB_create_context, GLX_ARB_create_context_profile, 
    GLX_ARB_get_proc_address, GLX_ARB_multisample, GLX_EXT_import_context, 
    GLX_EXT_swap_control, GLX_EXT_visual_info, GLX_EXT_visual_rating, 
    GLX_MESA_allocate_memory, GLX_MESA_copy_sub_buffer, GLX_MESA_swap_control, 
    GLX_MESA_swap_frame_usage, GLX_NV_swap_group, GLX_OML_swap_method, 
    GLX_SGI_make_current_read, GLX_SGI_swap_control, GLX_SGI_video_sync, 
    GLX_SGIS_multisample, GLX_SGIX_fbconfig, GLX_SGIX_pbuffer, 
    GLX_SGIX_swap_barrier, GLX_SGIX_swap_group, GLX_SGIX_visual_select_group, 
    GLX_EXT_texture_from_pixmap, GLX_EXT_framebuffer_sRGB, 
    GLX_ARB_fbconfig_float, GLX_AMD_gpu_association
GLX version: 1.4
GLX extensions:
    GLX_ARB_create_context, GLX_ARB_create_context_profile, 
    GLX_ARB_get_proc_address, GLX_ARB_multisample, GLX_EXT_import_context, 
    GLX_EXT_swap_control, GLX_EXT_visual_info, GLX_EXT_visual_rating, 
    GLX_MESA_swap_control, GLX_NV_swap_group, GLX_OML_swap_method, 
    GLX_SGI_make_current_read, GLX_SGI_swap_control, GLX_SGI_video_sync, 
    GLX_SGIS_multisample, GLX_SGIX_fbconfig, GLX_SGIX_pbuffer, 
    GLX_SGIX_swap_barrier, GLX_SGIX_swap_group, GLX_SGIX_visual_select_group, 
    GLX_EXT_texture_from_pixmap
OpenGL vendor string: Advanced Micro Devices, Inc.
OpenGL renderer string: AMD Radeon HD 7900 Series 
OpenGL version string: 4.2.12002 Compatibility Profile Context 8.982.13
OpenGL shading language version string: 4.20
OpenGL extensions:
...
    GL_EXT_direct_state_access, GL_EXT_draw_buffers2, GL_EXT_draw_instanced, 
...

Testing TF2 now.

Bbaryluk 2013-03-22 github

TF2 and CS:S are starting now essentially, but still freezes somewhere on loading screen. Looks to be different bug. Will keep you updated.

Counter Strike (non source) and Conter Strike: Condition Zero, seems to be working perfectly. Including steam overlay.

I believe lack of dri symlink or wrong default search path is bug in package. I will report this to Debian, after confirming this first by reinstallation.

Ccartman09 2013-06-08 github

I am running Linux Mint 13, 64b
Messing around trying to fix this I ended up with a fresh OS installation with updates, installed the AMD Catalyst 13.4, installed Steam, added myself into the 'video' group and then without installing the mesa-libs:i386 specifically (i think steam installed something like that)
I was able to run Steam and Left 4 Dead 2 Beta, with this script:

#!/usr/bin/env bash
export LD_LIBRARY_PATH=/usr/lib/i386-linux-gnu:/usr/lib/i386-linux-gnu/dri:/usr/lib/i386-linux-gnu/fglrx:/usr/lib/i386-linux-gnu:gconv
steam
Kkisak-valve maintainer 2017-04-22 github

Hello @baryluk, if you are still experiencing this issue with an up to date system, please open a new issue report and we can investigate further.

Nothing extracted yet.