felixdoerre / primus_vk

Vulkan GPU-offloading layer
BSD 2-Clause "Simplified" License
229 stars 18 forks source link

some games do not start through steam #86

Closed ranjithshegde closed 3 years ago

ranjithshegde commented 3 years ago

Greetings,

I have compiled primus_vk using the instructions here pvkrun "almost_anything" works great

then I enabled multilib (arch) and installed steam, installed ALL lib32 variants of vulkan/nvidia/mesa/intel related packages that I have.

pvkrun steam gives this error

Failed to load steamui.so - dlerror(): /usr/lib32/primus/libGL.so.1: undefined symbol: _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE10_M_replaceEjjPKcj, version GLIBCXX_3.4.21
[2020-12-20 16:27:06] Shutdown

I tried removing lib32-primus as it pointed an error directly there and it gave the below error

glXChooseVisual failed
glXChooseVisual failedsrc/steamUI/Main.cpp (338) : Assertion Failed: Fatal Error: glXChooseVisual failed
src/steamUI/Main.cpp (338) : Assertion Failed: Fatal Error: glXChooseVisual failed
Installing breakpad exception handler for appid(steam)/version(1607372145)
./steamwebhelper: symbol lookup error: /usr/lib/primus/libGL.so.1: undefined symbol: _ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE9_M_appendEPKcm, version GLIBCXX_3.4.21
crash_20201220162558_5.dmp[4456]: Uploading dump (out-of-process)
/tmp/dumps/crash_20201220162558_5.dmp

if I run steam normally and run the game inside with pvkrun %command% then I get the error SIGSEGV(11): segmentation fault as follows

PrimusVK: Searching for display GPU:
PrimusVK: 0x8ad1ce0: 32902;16027
PrimusVK: Got integrated gpu!
PrimusVK: Device: Intel(R) UHD Graphics 630 (CFL GT2)
PrimusVK:   Type: 1
PrimusVK: Searching for render GPU:
PrimusVK: 0x8ad1ce0.
PrimusVK: 0x8c8e990.
PrimusVK: 0x8c9bcc0.
PrimusVK: Got discrete gpu!
PrimusVK: Device: GeForce RTX 2070
PrimusVK:   Type: 2
Warning: Previous run didn't quit gracefully, attempting to run crash reporter.
[1220/163146.373047:ERROR:gpu_process_transport_factory.cc(1026)] Lost UI shared context.
Fossilize INFO: Overriding serialization path: "/home/ranjith/.local/share/Steam/steamapps/shadercache/750920/fozpipelinesv4/steamapprun_pipeline_cache".
PrimusVK: fetching dispatch for 0x7f5608143c40
PrimusVK: Creating display device finished!: 0
PrimusVK: fetching dispatch for 0
ShadowOfTheTombRaider: dumped to "/home/ranjith/.local/share/feral-interactive/Shadow of the Tomb Raider/crashes/3ce6272e-3d6a-5777-4b864cc3-4a4805f2.dmp"
ShadowOfTheTombRaider: crash reporter "/home/ranjith/.local/share/Steam/steamapps/common/Shadow of the Tomb Raider/bin/feral_linux_crash_reporter" launching
ERROR: ld.so: object '/home/ranjith/.local/share/Steam/ubuntu12_32/gameoverlayrenderer.so' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS32): ignored.
ERROR: ld.so: object '/home/ranjith/.local/share/Steam/ubuntu12_32/gameoverlayrenderer.so' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS32): ignored.
ERROR: ld.so: object '/home/ranjith/.local/share/Steam/ubuntu12_32/gameoverlayrenderer.so' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS32): ignored.
>>> Adding process 6288 for game ID 750920
ERROR: ld.so: object '/home/ranjith/.local/share/Steam/ubuntu12_32/gameoverlayrenderer.so' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS32): ignored.
ERROR: ld.so: object '/home/ranjith/.local/share/Steam/ubuntu12_32/gameoverlayrenderer.so' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS32): ignored.
>>> Adding process 6289 for game ID 750920
>>> Adding process 6290 for game ID 750920
Game crashed with signal 11
Game crashed with signal SIGSEGV(11): Segmentation fault.

I am on Arch Linux 5.9.14 intel i915 + nvidia RTX2070 (455.45.01-7)

Any help would be appreciated

Thank you

felixdoerre commented 3 years ago

pvkrun steam gives this error

This error is actually not an error of primus_vk but of the OpenGL-primus. As the default pvkrun script uses (OpenGL)-primus to invoke bumblebee and power up the graphics card it is required to have primus_vk working correctly. The error indicates that whatever you have installed as steam and the (OpenGL)-primus have been compiled against different libstdc++. Is GLIBCXX_3.4.21 your gcc/libstdc++ version? If it isn't then it is the gcc version of the steam runtime and things are colliding there.

Interestingly primus_vk seems to activate fine.

So you could try this: Change pvkrun to:

ENABLE_PRIMUS_LAYER=1 exec optirun -b none "$@"

And then try to run the game with pvkrun %command% from steam. This will not activate any OpenGL-primus (so if the game uses OpenGL to render that will run exclusively on the integrated graphics), but will manually enable bumblebee and primus_vk.

From what I currently see from the output of the game: PrimusVK: fetching dispatch for 0 is kind of a fatal error. This indicates that device creation failed and we are now trying to work with a null-pointer device. This will probably be the cause of the segfault. (By the way: I also own "Shadow of the Tomb Raider", and for me that game runs fine with primus_vk, so it is probably a configuration/setup issue and not a problem with the game.)

You could also try to set the command from steam to pvkrun vkcube # %command% (and install vkcube if you didn't already do that) to test if primus_vk + vulkan works at all from the steam runtime.

ranjithshegde commented 3 years ago

Thank you for your reply.

I tried pvkrun vkcube # %command% from within steam and the cube launches fine.

When I try ENABLE_PRIMUS_LAYER=1 exec optirun -b none "$@" steam with pvkrun inside steam launcher, I get the same segfault. (also I did not know if you meant the above command with steam to replace "$@" or appended to it, tried both, same result)

Nice to know you cal get SOTR working. I am a bit clueless because it runs with PRIME (prime-run) when I have that installed instead of bumblebee. I would hate to switch to PRIME for many many reasons

ranjithshegde commented 3 years ago

Would there be a difference in primus_vk setup for 32 bit?

EDIT: I have compiled from source following your instructions even though build exists for arch on official repos. because the official version cant run without DISPLAY=:08 for vulkaninfo (among other things)

felixdoerre commented 3 years ago

I meant to replace the contents of the pvkrun script. Alternatively you can set the steam command to ENABLE_PRIMUS_LAYER=1 exec optirun -b none %command%. (so not pvkrun, no $@)

For a 32-bit application (like steam) you need: 32-bit graphics drivers, 32-bit primus, 32-bit primus-vk For a 64-bit application (like SOTR) you need: 64-bit graphics drivers, 64-bit primus, 64-bit primus-vk

I am not sure why the official version does not work for you, when I worked together with the people who packaged that in the end we were satisfied that it works for all applications.

When you say, that you need DISPLAY=:8 for vulkaninfo, that means that pvkrun vulkaninfo does not work? Or vulkaninfo does not work when the graphics card is powered on in a different shell?

ranjithshegde commented 3 years ago

Ah, silly me. Yes i have edited the script.

About primus_vk official version yes pvkrun vulkaninfo does not work it gives this error

pvkrun vulkaninfo
ERROR: [Loader Message] Code 0 : /usr/lib32/libvulkan_intel.so: wrong ELF class: ELFCLASS32
WARNING: lavapipe is not a conformant vulkan implementation, testing use only.
MESA-INTEL: warning: Performance support disabled, consider sysctl dev.i915.perf_stream_paranoid=0

ERROR at /build/vulkan-tools/src/Vulkan-Tools-1.2.162/vulkaninfo/vulkaninfo.h:248:vkGetPhysicalDeviceSurfaceFormats2KHR failed with ERROR_INITIALIZATION_FAILED
felixdoerre commented 3 years ago

Have you tried applying this workaround: https://github.com/felixdoerre/primus_vk/issues/76#issuecomment-700512878

EDIT: If it works then we should probably try to get this into the official arch package.

ranjithshegde commented 3 years ago

It is the strangest thing, I installed from the repo thinking I had removed all libs from custom build, but if I leave the /usr/local/share/vulkan as is (from building from source) then pvkrun vulkaninfo does what it should. Not just that, SOTR runs without segfault (although rise of tomb raider segfaults, just wanted to check if this works for all games)

EDIT: Just removed the files from /usr/local/share and edited the version to 1.2. it woks for pvkrun vulkan info and SOTR

felixdoerre commented 3 years ago

So does it now work for all applications that you tested? Or is there still something that we need to debug/understand?

ranjithshegde commented 3 years ago

Well on my linux machine I only have Tomb Raiders installed. TR and SOTR works. ROTR segfaults the same way.

Non-steam stuff, even lib32 packages like some wine apps work fine too

felixdoerre commented 3 years ago

So does the output from the crashing ROTR also have

PrimusVK: fetching dispatch for 0

in its output?

ranjithshegde commented 3 years ago

Here is the error. if that helps. Does not seem to proceed as far as fetching dispatch for 0

ERROR: ld.so: object '/home/ranjith/.local/share/Steam/ubuntu12_32/gameoverlayrenderer.so' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS32): ignored.
ERROR: ld.so: object '/home/ranjith/.local/share/Steam/ubuntu12_32/gameoverlayrenderer.so' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS32): ignored.
ERROR: ld.so: object '/home/ranjith/.local/share/Steam/ubuntu12_32/gameoverlayrenderer.so' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS32): ignored.
Starting app 391220
>>> Adding process 3518 for game ID 391220
GameAction [AppID 391220, ActionID 1] : LaunchApp changed task to WaitingGameWindow with ""
>>> Adding process 3519 for game ID 391220
ERROR: ld.so: object '/home/ranjith/.local/share/Steam/ubuntu12_32/gameoverlayrenderer.so' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS32): ignored.
GameAction [AppID 391220, ActionID 1] : LaunchApp changed task to Completed with ""
ERROR: ld.so: object '/home/ranjith/.local/share/Steam/ubuntu12_32/gameoverlayrenderer.so' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS32): ignored.
ERROR: ld.so: object '/home/ranjith/.local/share/Steam/ubuntu12_32/gameoverlayrenderer.so' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS32): ignored.
>>> Adding process 3526 for game ID 391220
pid 3537 != 3533, skipping destruction (fork without exec?)
pid 3536 != 3533, skipping destruction (fork without exec?)
>>> Adding process 3533 for game ID 391220
ERROR: ld.so: object '/home/ranjith/.local/share/Steam/ubuntu12_32/gameoverlayrenderer.so' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS32): ignored.
ERROR: ld.so: object '/home/ranjith/.local/share/Steam/ubuntu12_32/gameoverlayrenderer.so' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS32): ignored.
>>> Adding process 3539 for game ID 391220
ERROR: ld.so: object '/home/ranjith/.local/share/Steam/ubuntu12_32/gameoverlayrenderer.so' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS32): ignored.
ERROR: ld.so: object '/home/ranjith/.local/share/Steam/ubuntu12_32/gameoverlayrenderer.so' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS32): ignored.
ERROR: ld.so: object '/home/ranjith/.local/share/Steam/ubuntu12_32/gameoverlayrenderer.so' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS32): ignored.
>>> Adding process 3540 for game ID 391220
>>> Adding process 3543 for game ID 391220
>>> Adding process 3545 for game ID 391220
>>> Adding process 3544 for game ID 391220
pid 3541 != 3519, skipping destruction (fork without exec?)
ERROR: ld.so: object '/home/ranjith/.local/share/Steam/ubuntu12_32/gameoverlayrenderer.so' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS32): ignored.
pid 3556 != 3519, skipping destruction (fork without exec?)
ERROR: ld.so: object '/home/ranjith/.local/share/Steam/ubuntu12_32/gameoverlayrenderer.so' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS32): ignored.
>>> Adding process 3554 for game ID 391220
ERROR: ld.so: object '/home/ranjith/.local/share/Steam/ubuntu12_32/gameoverlayrenderer.so' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS32): ignored.
>>> Adding process 3557 for game ID 391220
>>> Adding process 3558 for game ID 391220
WARNING: lavapipe is not a conformant vulkan implementation, testing use only.
MESA-INTEL: warning: Performance support disabled, consider sysctl dev.i915.perf_stream_paranoid=0

PrimusVK: Searching for display GPU:
PrimusVK: 0x2021eb0:
PrimusVK: 0x1f9bbd0:
PrimusVK: 0x1efbf00:
PrimusVK: Got integrated gpu!
PrimusVK: Device: Intel(R) UHD Graphics 630 (CFL GT2)
PrimusVK:   Type: 1
PrimusVK: Searching for render GPU:
PrimusVK: 0x2021eb0.
PrimusVK: Got discrete gpu!
PrimusVK: Device: GeForce RTX 2070
PrimusVK:   Type: 2
ERROR: ld.so: object '/home/ranjith/.local/share/Steam/ubuntu12_32/gameoverlayrenderer.so' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS32): ignored.
ERROR: ld.so: object '/home/ranjith/.local/share/Steam/ubuntu12_32/gameoverlayrenderer.so' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS32): ignored.
>>> Adding process 3591 for game ID 391220
RiseOfTheTombRaider: crash reporter initialised with path "/home/ranjith/.local/share/feral-interactive/Rise of the
Tomb Raider/crashes"
>>> Adding process 3592 for game ID 391220
ATTENTION: default value of option vblank_mode overridden by environment.
SDL2 initialised [built against 2.0.7, running with 2.0.7]
Game update: AppID 391220 "", ProcID 3592, IP 0.0.0.0:0
RecordSteamInterfaceCreation (PID 3592): SteamUtils008 / Utils
Setting breakpad minidump AppID = 391220
RecordSteamInterfaceCreation (PID 3592): SteamUser019 / User
Steam_SetMinidumpSteamID:  Caching Steam ID:  76561198832761804 [API loaded no]
RecordSteamInterfaceCreation (PID 3592): SteamUser019 / User
RecordSteamInterfaceCreation (PID 3592): SteamFriends015 / Friends
RecordSteamInterfaceCreation (PID 3592): SteamUtils008 / Utils
RecordSteamInterfaceCreation (PID 3592): SteamMatchMaking009 / Matchmaking
RecordSteamInterfaceCreation (PID 3592): SteamMatchMakingServers002 / MatchmakingServers
RecordSteamInterfaceCreation (PID 3592): STEAMUSERSTATS_INTERFACE_VERSION011 / UserStats
RecordSteamInterfaceCreation (PID 3592): STEAMAPPS_INTERFACE_VERSION008 / Apps
RecordSteamInterfaceCreation (PID 3592): SteamNetworking005 / Networking
RecordSteamInterfaceCreation (PID 3592): STEAMREMOTESTORAGE_INTERFACE_VERSION013 / RemoteStorage
RecordSteamInterfaceCreation (PID 3592): STEAMSCREENSHOTS_INTERFACE_VERSION002 / Screenshots
RecordSteamInterfaceCreation (PID 3592): STEAMHTTP_INTERFACE_VERSION002 / HTTP
RecordSteamInterfaceCreation (PID 3592): STEAMUNIFIEDMESSAGES_INTERFACE_VERSION001 / UnifiedMessages
RecordSteamInterfaceCreation (PID 3592): SteamController003 / Controller
RecordSteamInterfaceCreation (PID 3592): STEAMUGC_INTERFACE_VERSION008 / UGC
RecordSteamInterfaceCreation (PID 3592): STEAMAPPLIST_INTERFACE_VERSION001 / AppList
RecordSteamInterfaceCreation (PID 3592): STEAMMUSIC_INTERFACE_VERSION001 / Music
RecordSteamInterfaceCreation (PID 3592): STEAMMUSICREMOTE_INTERFACE_VERSION001 / MusicRemote
RecordSteamInterfaceCreation (PID 3592): STEAMHTMLSURFACE_INTERFACE_VERSION_003 / HTMLSurface
RecordSteamInterfaceCreation (PID 3592): STEAMINVENTORY_INTERFACE_V001 / Inventory
RecordSteamInterfaceCreation (PID 3592): STEAMVIDEO_INTERFACE_V001 / Video
WARNING: lavapipe is not a conformant vulkan implementation, testing use only.
MESA-INTEL: warning: Performance support disabled, consider sysctl dev.i915.perf_stream_paranoid=0

RiseOfTheTombRaider: dumped to "/home/ranjith/.local/share/feral-interactive/Rise of the Tomb Raider/crashes/305eca8d-5f46-7e18-11f95756-0fdc4d35.dmp"
RiseOfTheTombRaider: crash reporter "/home/ranjith/.local/share/Steam/steamapps/common/Rise of the Tomb Raider/bin/feral_linux_crash_reporter" launching
Game crashed with signal 11
Game crashed with signal SIGSEGV(11): Segmentation fault.

EDIT: please ignore issues related vblank-mode=o env, I have the same error with or without that prepended

ranjithshegde commented 3 years ago

Just an update on ROTTR

I tried launching it with proton (experimental) and I get the following error related to PrimuvVK

PrimusVK: ERROR! Nvidia driver could not be loaded from '/usr/lib/libGLX_nvidia.so.0'.

felixdoerre commented 3 years ago

This error messages indicates that the library /usr/lib/libGLX_nvidia.so.0 is either missing or a dependency of it is missing (so dlopen fails to load it). It is very strange that this message appears when running with proton, but does not occur when running natively on linux. The complete output does not contain that much useful information. We see that PrimusVK has detected the 2 devices (so it has gotten further than with proton), but there is not much useful information why the game crashed afterwards.

ranjithshegde commented 3 years ago

Yeah segfault doesnt say much. Could be anything

I can see that it works flawlessly with nvidia-PRIME. So its definitely bumblebee related if not directly related to primus_vk. Not sure one game is worth this much directionless head-scratching. Just going to forget about this for a while

felixdoerre commented 3 years ago

I've tagged the current master as v1.6. There might be fixes in there that might solve the crash you are experiencing. Hopefully the packagers will soon update, so you can test with the packaged version.

If I would be able to reproduce the crash locally I could probably do more than directionless poking around in it, but doing this remotely via a ticket is hard.

ranjithshegde commented 3 years ago

Havent yet seen the new version in arch repos. although I tried to launch ROTM after steam update and this time around the error was different. If you are still interested then I have added the error below. it basically says its unable to connect to bumblebee (SOTTR can)

>>> Adding process 5450 for game ID 391220
GameAction [AppID 391220, ActionID 1] : LaunchApp changed task to WaitingGameWindow with ""
ERROR: ld.so: object '/home/ranjith/.local/share/Steam/ubuntu12_32/gameoverlayrenderer.so' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS32): ignored.
GameAction [AppID 391220, ActionID 1] : LaunchApp changed task to Completed with ""
ERROR: ld.so: object '/home/ranjith/.local/share/Steam/ubuntu12_32/gameoverlayrenderer.so' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS32): ignored.
ERROR: ld.so: object '/home/ranjith/.local/share/Steam/ubuntu12_32/gameoverlayrenderer.so' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS32): ignored.
ERROR: ld.so: object '/home/ranjith/.local/share/Steam/ubuntu12_32/gameoverlayrenderer.so' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS32): ignored.
ERROR: ld.so: object '/home/ranjith/.local/share/Steam/ubuntu12_32/gameoverlayrenderer.so' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS32): ignored.
>>> Adding process 5451 for game ID 391220
Installing breakpad exception handler for appid(steam)/version(1608507519)
pid 5455 != 5451, skipping destruction (fork without exec?)
ERROR: ld.so: object '/home/ranjith/.local/share/Steam/ubuntu12_32/gameoverlayrenderer.so' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS32): ignored.
_v2-entry-point[5451]: STEAM_COMPAT_APP_ID=391220
_v2-entry-point[5451]: STEAM_COMPAT_SESSION_ID=
_v2-entry-point[5451]: XDG_RUNTIME_DIR=/run/user/1000
ERROR: ld.so: object '/home/ranjith/.local/share/Steam/ubuntu12_32/gameoverlayrenderer.so' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS32): ignored.
ERROR: ld.so: object '/home/ranjith/.local/share/Steam/ubuntu12_32/gameoverlayrenderer.so' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS32): ignored.
ERROR: ld.so: object '/home/ranjith/.local/share/Steam/ubuntu12_32/gameoverlayrenderer.so' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS32): ignored.
ERROR: ld.so: object '/home/ranjith/.local/share/Steam/ubuntu12_32/gameoverlayrenderer.so' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS32): ignored.
ERROR: ld.so: object '/home/ranjith/.local/share/Steam/ubuntu12_32/gameoverlayrenderer.so' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS32): ignored.
>>> Adding process 5453 for game ID 391220
ERROR: ld.so: object '/home/ranjith/.local/share/Steam/ubuntu12_32/gameoverlayrenderer.so' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS32): ignored.
ERROR: ld.so: object '/home/ranjith/.local/share/Steam/ubuntu12_32/gameoverlayrenderer.so' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS32): ignored.
>>> Adding process 5456 for game ID 391220
>>> Adding process 5457 for game ID 391220
>>> Adding process 5458 for game ID 391220
>>> Adding process 5459 for game ID 391220
>>> Adding process 5460 for game ID 391220
>>> Adding process 5461 for game ID 391220
ERROR: ld.so: object '/home/ranjith/.local/share/Steam/ubuntu12_32/gameoverlayrenderer.so' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS32): ignored.
ERROR: ld.so: object '/home/ranjith/.local/share/Steam/ubuntu12_32/gameoverlayrenderer.so' from LD_PRELOAD cannot be preloaded (wrong ELF class: ELFCLASS32): ignored.
primus: fatal: failed to connect to Bumblebee daemon: No such file or directory
Game removed: AppID 391220 "", ProcID 5450
Uploaded AppInterfaceStats to Steam
Exiting app 391220
felixdoerre commented 3 years ago

The error message:

primus: fatal: failed to connect to Bumblebee daemon: No such file or directory

indicates that the socket for the bumblebee daemon could not be found. This is actually an earlier error than the output we saw before. The bumblebee socket is typically located under /var/run/bumblebee.socket. One cause could be that the bumblebee daemon is not running. Another could be that the game is running with the newer Steam runtime called "Soldier" or "Pressure Vessel" and is launching the games in a dedicated mount namespace where the bumblebee socket is not mounted into. You could forcibly select the older runtime, by using "Force the use of a specific Steam Play compatibility tool" -> "Steam Linux Runtime".

ranjithshegde commented 3 years ago

Thank you. A bit more info (I cant test with more games because of poor internet connection where I am at the moment). I only have SOTR and ROTR installed. SOTR runs fine, connects to bumblebee, all good. ROTR has the above error. If I run in compatibility mode (steam linux runtime) then I get the error with bumblebee connection. if I run in the new steam Soldier/PressureVessel then I get the same old Sigsegfault11

aguinet commented 3 years ago

Commenting here because I have the same issue as the original one. Running SOTR through Steam gives:

PrimusVK: Searching for display GPU:
PrimusVK: 0x9058b70: 4318;4941
PrimusVK: 0x9a9e3b0: 32902;22811
PrimusVK: Got integrated gpu!
PrimusVK: Device: Intel(R) HD Graphics 630 (KBL GT2)
PrimusVK:   Type: 1
PrimusVK: Searching for render GPU:
PrimusVK: 0x9058b70.
PrimusVK: Got discrete gpu!
PrimusVK: Device: GeForce 940MX
PrimusVK:   Type: 2
PrimusVK: fetching dispatch for 0x7f0b902513e0
PrimusVK: Creating display device finished!: 0
PrimusVK: fetching dispatch for 0 <- issue here

and then segfault.

I tried:

I am using an updated debian sid, that has primus-vk version 1.6.1-1 (according to apt-cache show). I recompiled the packages with debug symbols, and here is the backtrace of the crash (extracted with minidump-2-core):

#0  0x00007f87400371d2 in VK_LAYER_fossilize_GetDeviceProcAddr () from /home/aguinet/.local/share/Steam/ubuntu12_64/libVkLayer_steam_fossilize.so
[Current thread is 45928 (LWP 54752)]
(gdb) bt
#0  0x00007f87400371d2 in VK_LAYER_fossilize_GetDeviceProcAddr () at /home/aguinet/.local/share/Steam/ubuntu12_64/libVkLayer_steam_fossilize.so
#1  0x00007f8736ef0518 in fetchDispatchTable(void (*(*)(VkDevice_T*, char const*))(), VkDevice_T**)
    (gdpa=gdpa@entry=0x7f8740037110 <VK_LAYER_fossilize_GetDeviceProcAddr>, pDevice=pDevice@entry=0x7f86c67fa0e8) at primus_vk.cpp:808
#2  0x00007f8736ef2e97 in PrimusVK_CreateDevice(VkPhysicalDevice_T*, VkDeviceCreateInfo const*, VkAllocationCallbacks const*, VkDevice_T**)
    (physicalDevice=<optimized out>, pCreateInfo=0x7f86c67fa130, pAllocator=0x0, pDevice=0x7f86c67fa0e8) at primus_vk.cpp:793
#3  0x00007f875943f6e0 in loader_create_device_chain
    (pd=pd@entry=0x9865490, pCreateInfo=pCreateInfo@entry=0x7f86c67fa3b0, pAllocator=pAllocator@entry=0x0, inst=inst@entry=0x912d3d0, dev=dev@entry=0x7f86a4146190, callingLayer=callingLayer@entry=0x0, layerNextGDPA=0x0) at ../loader/loader.c:6272
#4  0x00007f8759440291 in loader_layer_create_device
    (instance=instance@entry=0x0, physicalDevice=physicalDevice@entry=0x969d380, pCreateInfo=pCreateInfo@entry=0x7f86c67fa3b0, pAllocator=pAllocator@entry=0x0, pDevice=pDevice@entry=0x7f86a4188fb0, layerGIPA=layerGIPA@entry=0x0, nextGDPA=0x0) at ../loader/loader.c:5863
#5  0x00007f875944380f in vkCreateDevice (physicalDevice=0x969d380, pCreateInfo=0x7f86c67fa3b0, pAllocator=0x0, pDevice=0x7f86a4188fb0) at ../loader/trampoline.c:779

pvkrun vkcubeworks.

Any clue of what I am doing wrong?

Thanks!

EDIT: by rereading the output of primus-vk, I see 32-bit pointers, whereas SOTR is a 64-bit process. Isn't the issue related to this?

EDIT(bis): false alarm. I added code to dump /proc/self/maps at the beggining of PrimusVK_CreateDevice, and I have:

PrimusVK: Searching for display GPU:
PrimusVK: 0x93b5820: 4318;4941
PrimusVK: 0x9401260: 32902;22811
PrimusVK: Got integrated gpu!
PrimusVK: Device: Intel(R) HD Graphics 630 (KBL GT2)
PrimusVK:   Type: 1
PrimusVK: Searching for render GPU:
PrimusVK: 0x93b5820.
PrimusVK: Got discrete gpu!
PrimusVK: Device: GeForce 940MX
PrimusVK:   Type: 2
Warning: Previous run didn't quit gracefully, attempting to run crash reporter.
[0311/200411.169874:ERROR:gpu_process_transport_factory.cc(1026)] Lost UI shared context.
PrimusVK: 00400000-0041e000 r--p 00000000 fe:02 4746845                            /home/aguinet/.local/share/Steam/steamapps/common/Shadow of the Tomb Raider/bin/ShadowOfTheTombRaider
0041e000-02bdf000 r-xp 0001e000 fe:02 4746845                            /home/aguinet/.local/share/Steam/steamapps/common/Shadow of the Tomb Raider/bin/ShadowOfTheTombRaider
02bdf000-04471000 r--p 027df000 fe:02 4746845                            /home/aguinet/.local/share/Steam/steamapps/common/Shadow of the Tomb Raider/bin/ShadowOfTheTombRaider
04472000-04578000 r--p 04071000 fe:02 4746845                            /home/aguinet/.local/share/Steam/steamapps/common/Shadow of the Tomb Raider/bin/ShadowOfTheTombRaider
04578000-04834000 rw-p 04177000 fe:02 4746845                            /home/aguinet/.local/share/Steam/steamapps/common/Shadow of the Tomb Raider/bin/ShadowOfTheTombRaider
04834000-07b0e000 rw-p 00000000 00:00 0 
08633000-09eac000 rw-p 00000000 00:00 0                                  [heap]

so it just seems to be objects allocated on the heap!

felixdoerre commented 3 years ago

I am not that sure that what you are seeing is the same issue, but here a few blind guesses: Can you try to compile and install libnv_vulkan_wrapper in this version: https://github.com/felixdoerre/primus_vk/blob/0411d00f3e3a7051c4148c1995d0615a13c08fe2/nv_vulkan_wrapper.cpp It might be that the game in this configuration uses multiple threads to initialize the Vulkan API and you need to use another hack to get the nvidia driver working.

felixdoerre commented 3 years ago

@aguinet you might want to have a quick try of the changes I just pushed to master: 29e966e This adjusts the way that the nvidia vulkan driver instance is obtained and might solve your problem.

aguinet commented 3 years ago

Thanks for your answer @felixdoerre ! In the meantime I have installed nvidia's official drivers and this works out of the box. For the sake of knowledge, I will try and reinstall primus-vk and try this patch!