summaryrefslogtreecommitdiff
path: root/pkgs/development/python-modules/rangehttpserver
diff options
context:
space:
mode:
authornixdrin <146267602+nixdrin@users.noreply.github.com>2023-10-19 23:03:09 +0200
committernixdrin <146267602+nixdrin@users.noreply.github.com>2023-10-19 23:28:01 +0200
commitdb3731b88799ec90d8ac90f7c85a38aed28ff4d8 (patch)
tree5a1e70382450b2a164bfb21842d97764fea44e4e /pkgs/development/python-modules/rangehttpserver
parent083d89547d1d1204e314b06d19451c6e840ecfe4 (diff)
chromium: fix libpci GPU detection
Chromium has blocklists that workaround various GPU driver bugs, either by forcing software rendering [1] or by disabling use of certain GPU features [2]. These blocklists can only be applied successfully if the GPU vendor and device is detected correctly. One of the methods used for GPU detection is to load libpci.so via dlopen() at runtime to read the PCI vendor and device ID. The current derivation already contains a sed command to rewrite the dlopen() to the absolute path of libpci.so in the Nix store, namely sed -i -e '/libpci_loader.*Load/s!"\(libpci\.so\)!"${pciutils}/lib/\1!' \ gpu/config/gpu_info_collector_linux.cc However, in Chromium 59 (6 years ago), this code was moved into the ANGLE library used by Chromium [3]. This sed command no longer works. There is similar code in ANGLE now [4] that must be similarly patched to ensure the GPU vendor and device is always detected correctly. Without libpci some GPUs are not detected correctly. For example, in a VMWare virtual machine opening chrome://gpu in the browser shows: VENDOR= 0x0000 [Google Inc. (VMware, Inc.)], DEVICE=0x0000 [ANGLE (VMware Inc., SVGA3D; build: RELEASE; LLVM;, OpenGL 4.1 (Core Profile) Mesa 23.0.3)], DRIVER_VENDOR=Mesa, DRIVER_VERSION=23.0.3 *ACTIVE* Note the VENDOR=0x0000 and DEVICE=0x0000. Adding libpci.so to the library path fixes this: VENDOR= 0x15ad [Google Inc. (VMware, Inc.)], DEVICE=0x0405 [ANGLE (VMware Inc., SVGA3D; build: RELEASE; LLVM;, OpenGL 4.1 (Core Profile) Mesa 23.0.3)], DRIVER_VENDOR=Mesa, DRIVER_VERSION=23.0.3 *ACTIVE* Note the VENDOR=0x15ad and DEVICE=0x0405. Also now the blocklist entries are applied correctly, fixing some graphical issues. Fix this by adding pciutils to the rpath set with patchelf. This avoids having to patch lines in the source code that might get moved around. [1]: https://chromium.googlesource.com/chromium/src/+/e52f33f30b91b4ddfad649acddc39ab570473b86/gpu/config/software_rendering_list.json [2]: https://chromium.googlesource.com/chromium/src/+/e52f33f30b91b4ddfad649acddc39ab570473b86/gpu/config/gpu_driver_bug_list.json [3]: https://github.com/chromium/chromium/commit/873b27d518038be94df98d1128a2e8047e0ef942 [4]: https://github.com/google/angle/blob/05f45adc147393562b518ca1f82a3ccba7ee40f7/src/gpu_info_util/SystemInfo_libpci.cpp#L41
Diffstat (limited to 'pkgs/development/python-modules/rangehttpserver')
0 files changed, 0 insertions, 0 deletions