canonical / steam-snap

Steam as a snap
72 stars 10 forks source link

32-bit Nvidia drivers fail to load because libnvidia-glsi.so.x.y.z is not found #358

Open smcv opened 7 months ago

smcv commented 7 months ago

Ensure there isn't an existing issue for this and check the wiki

Current Behavior

To reproduce, open Steam's Help -> Steam Runtime Diagnostics.

On a working system, you should have both i386 and x86_64 accelerated GLX, EGL and Vulkan drivers, and ideally also VDPAU.

Steam has a diagnostic tool for this, which means it should be very easy to verify whether the Snap app and Valve's official .deb work equally well.

In this Snap app, 64-bit drivers seem to be OK (VA-API is missing, but that's normal for Nvidia):

    "x86_64-linux-gnu" : {
      "can-run" : true,
      "libdl-LIB" : "lib/x86_64-linux-gnu",
      "libdl-PLATFORM" : "haswell",
      "runtime-linker" : {
        "path" : "/lib64/ld-linux-x86-64.so.2",
        "resolved" : "/usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2"
      },
      "library-issues-summary" : [
      ],
      "graphics-details" : {
        "x11/vulkan" : {
          "renderer" : "NVIDIA GeForce GTX 1080",
          "version" : "535.154.05",
          "devices" : [
            {
              "name" : "NVIDIA GeForce GTX 1080",
              "api-version" : "1.3.242",
              "vulkan-driver-id" : 4,
              "driver-name" : "NVIDIA",
              "driver-version" : "535.154.05",
              "vendor-id" : "0x10de",
              "device-id" : "0x1b80",
              "type" : "discrete-gpu"
            }
          ]
        },
        "x11/vdpau" : {
          "renderer" : "NVIDIA VDPAU Driver Shared Library  535.154.05  Thu Dec 28 15:49:31 UTC 2023\n",
          "version" : null
        },
        "x11/vaapi" : {
          "messages" : [
            "libva info: VA-API version 1.14.0",
            "libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/nvidia_drv_video.so",
            "libva info: va_openDriver() returns -1",
            "vaInitialize (va_display, &major_version, &minor_version) failed: unknown libva error (-1)"
          ],
          "renderer" : null,
          "version" : null,
          "issues" : [
            "cannot-draw"
          ],
          "exit-status" : 1
        },
        "glx/gl" : {
          "renderer" : "NVIDIA GeForce GTX 1080/PCIe/SSE2",
          "version" : "4.6.0 NVIDIA 535.154.05",
          "library-vendor" : "glvnd"
        },
        "egl_x11/gl" : {
          "renderer" : "NVIDIA GeForce GTX 1080/PCIe/SSE2",
          "version" : "4.6.0 NVIDIA 535.154.05",
          "library-vendor" : "glvnd"
        },
        "egl_x11/glesv2" : {
          "renderer" : "NVIDIA GeForce GTX 1080/PCIe/SSE2",
          "version" : "OpenGL ES 3.2 NVIDIA 535.154.05",
          "library-vendor" : "glvnd"
        }
      },

but 32-bit Vulkan doesn't work:

  "architectures" : {
    "i386-linux-gnu" : {
      "can-run" : true,
      "libdl-LIB" : "lib/i386-linux-gnu",
      "libdl-PLATFORM" : "i686",
      "runtime-linker" : {
        "path" : "/lib/ld-linux.so.2",
        "resolved" : "/usr/lib/i386-linux-gnu/ld-linux.so.2"
      },
      "library-issues-summary" : [
      ],
      "graphics-details" : {
        "x11/vulkan" : {
          "messages" : [
            "vkEnumeratePhysicalDevices (instance, physical_device_count, NULL) failed: ERROR_INITIALIZATION_FAILED (-3)"
          ],
          "renderer" : null,
          "version" : null,
          "issues" : [
            "cannot-load",
            "cannot-draw"
          ],
          "exit-status" : 1,
          "devices" : [
          ]
        },

32-bit VDPAU is just entirely missing:

        "x11/vdpau" : {
          "messages" : [
            "Failed to open VDPAU backend libvdpau_nvidia.so: wrong ELF class: ELFCLASS64",
            "vdp_device_create_x11 (display, screen, &device, &vdp_get_proc_address) failed: 1"
          ],
          "renderer" : null,
          "version" : null,
          "issues" : [
            "cannot-draw"
          ],
          "exit-status" : 1
        },

32-bit GLX loads a software renderer:

        "glx/gl" : {
          "messages" : [
            "WARNING: unknown fbconfig attribute from server: tag 0x20b3 value 0x0",
...
            "did not find extension DRI2_Flush version 1",
            "Not downgrading visual rating",
            "Disabling server's aux buffer support",
            "Disabling server's tfp mipmap support"
          ],
          "renderer" : "llvmpipe (LLVM 15.0.7, 256 bits)",
          "version" : "4.5 (Compatibility Profile) Mesa 23.3.3 - kisak-mesa PPA",
          "library-vendor" : "glvnd",
          "issues" : [
            "software-rendering"
          ]

and 32-bit EGL doesn't work:

        "egl_x11/gl" : {
          "messages" : [
            "Waffle error: 0x2 WAFFLE_ERROR_UNKNOWN: eglGetDisplay failed with error EGL_BAD_PARAMETER(0x300c)"
          ],
          "renderer" : null,
          "version" : null,
          "library-vendor" : "glvnd",
          "issues" : [
            "cannot-load"
          ],
          "exit-status" : 1
        },
        "egl_x11/glesv2" : {
          "messages" : [
            "Waffle error: 0x2 WAFFLE_ERROR_UNKNOWN: eglGetDisplay failed with error EGL_BAD_PARAMETER(0x300c)"
          ],
          "renderer" : null,
          "version" : null,
          "library-vendor" : "glvnd",
          "issues" : [
            "cannot-load"
          ],
          "exit-status" : 1
        }

Much of this information comes from 32- and 64-bit copies of the wflinfo utility. If you get a shell inside the Snap environment, you can run them like this:

$ ~/.steam/root/ubuntu12_32/steam-runtime/run.sh ~/.steam/root/ubuntu12_32/steam-runtime/usr/libexec/steam-runtime-tools-0/i386-linux-gnu-wflinfo --platform glx --api gl
Waffle platform: glx
Waffle api: gl
OpenGL vendor string: Mesa
OpenGL renderer string: llvmpipe (LLVM 15.0.7, 256 bits)
OpenGL version string: 4.5 (Compatibility Profile) Mesa 23.3.3 - kisak-mesa PPA
OpenGL context flags: 0x0

Running with LD_DEBUG=files in the environment reveals why: /var/lib/snapd/lib/gl32/libGLX_nvidia.so.0 requires libnvidia-glsi.so.535.154.05 which is not found anywhere in the search path.

When running Steam Linux Runtime or Proton games, this manifests as a warning like this one, as also seen on #347:

i386-linux-gnu-capsule-capture-libs: warning: Dependencies of libGLX_nvidia.so.0 not found, ignoring: Missing dependencies: Could not find "libnvidia-glsi.so.535.154.05" in LD_LIBRARY_PATH "/snap/steam/171/graphics/lib/i386-linux-gnu:/snap/steam/171/graphics/usr/lib:/snap/steam/171/usr/lib/i386-linux-gnu:/snap/steam/171/lib/i386-linux-gnu:/snap/steam/171/usr/lib/i386-linux-gnu/pulseaudio:/snap/steam/171/usr/lib/x86_64-linux-gnu/alsa-lib:/snap/steam/171/usr/lib/x86_64-linux-gnu/pulseaudio:/snap/steam/171/graphics/usr/lib/i386-linux-gnu:/snap/steam/171/graphics/usr/lib/x86_64-linux-gnu:/var/lib/snapd/lib/gl:/var/lib/snapd/lib/gl/vdpau", ld.so.cache, DT_RUNPATH or fallback /lib:/usr/lib

Similarly, running the i386-linux-gnu-check-vulkan diagnostic helper (in the same directory) with no arguments reveals that 32-bit Vulkan is broken, and running it under LD_DEBUG=files shows us why:

     29797:     file=libnvidia-glsi.so.535.154.05 [0];  needed by /var/lib/snapd/lib/gl32/libGLX_nvidia.so.0 [0]

but that library cannot be found.

Expected Behavior

Accelerated 32-bit graphics drivers should be provided. These are required by 32-bit games, either native Linux games or Windows games via Proton.

I would have expected that the maintainers of this app would have noticed these warnings during testing and rectified the situation, before recommending this app to the public. This is a regression when compared with installing Steam as a .deb package.

Steps To Reproduce

Open Steam's Help -> Steam Runtime Diagnostics and look for indications of potential brokenness.

Or, try to launch a 32-bit game and observe it running slowly.

Environment

"Unable to collect hardware information due to missing plugs"

(This is an Ubuntu 22.04 system with an Nvidia GTX 1080, which works correctly in a non-Snap environment.)

gaming-graphics-core22 version

kisak-fresh (default)

Anything else?

No response

ErickLandowski commented 7 months ago

You did upgrade your NVIDIA driver recently, didn't you?

I reported this at https://github.com/canonical/steam-snap/issues/311

FoxMcCloud45 commented 1 month ago

I can confirm this is still a problem today. All of Valve's older titles that are still 32-bit (such as Half-Life (1, 2 and the Episodes), Portal, Portal 2, Counter-Strike: Source...) are unable to use the NVIDIA card. On laptops, this will cause the game to fall back to the Mesa implementation running on the integrated Intel chipset silently.

EDIT: My comment seems to be ill-timed; this issue is apparently tied to the way snapd provides the host libs to the container and 2.63.1 should be released very soon to fix this: canonical/snapd#14308

FoxMcCloud45 commented 1 month ago

Well I was wrong again; the stable Steam snap just received an update that fixed this very issue.

Truly the most ill-timed intervention of all time.