felixdoerre / primus_vk

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

vulkaninfo freezes at libnv_vulkan_wrapper.so #56

Closed vkovalen closed 4 years ago

vkovalen commented 4 years ago

Trying to make primus_vk to run under Ubuntu 19.10 (unity session, compiz). libvulkan version: 1.1.114.0-1 primus_vk version: master and 1.3 Build and install is successful.

When I run any vulkan application (vulkaninfo, vkcube...), it freezes. with VK_LOADER_DEBUG I can see that it stops at:

INFO: Found ICD manifest file /usr/share/vulkan/icd.d/nv_vulkan_wrapper.json, version "1.0.0"
DEBUG: Searching for ICD drivers named libnv_vulkan_wrapper.so

It freezes with 100% one core cpu usage.

Without nv_vulkan_wrapper.json vulkan on intel works.

I attach log of primus_vk_diag.sh (I had to kill vulkaninfo manually to allow the utility to finish). primus_vk_diag_no_vulkaninfo.txt

felixdoerre commented 4 years ago

hmm... Can you try to get a stracktrace from such a hanging application (i.e. start the application, wait until it hangs, use gdb -p <pid of hanging application> to attach, use bt got obtain a stracktrace)? the primus_vk_diag output looks really broken.

It seems, that you have chosen /usr/lib/x86_64-linux-gnu/libGLX.so.0 as NV_DRIVER_PATH. Assuming that this is the vendor-neutral dispatch library (from https://packages.ubuntu.com/disco/libglx0), this library is wrong. Assuming that you have the "glvnd"-nvidia driver, I'd suggest you use /usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.0 as NV_DRIVER_PATH.

vkovalen commented 4 years ago

I attach backtrace of vulkaninfo vulkaninfogdb.txt and vkcube vkcubegdb.txt .

NV_DRIVER_PATH in nv_vulkan_wrapper.cpp is set as

define NV_DRIVER_PATH "/usr/lib/x86_64-linux-gnu/nvidia/current/libGL.so.1"

But there is no such a file.

Then I replaced it to #define NV_DRIVER_PATH "/usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.0" in nv_vulkan_wrapper.cpp , and it became better.

Now I am able to run vulkaninfo and vkcube fine. Even Rise of Tomb Rider works well.

felixdoerre commented 4 years ago

Aaah. There was is a bug in the code that searches for the nvidia driver binary, as it hangs in an infinite loop instead of printing a useful error, when no driver is found. I fixed that. The stacktraces point exactly to this location. Thank you! Glad that it works now. If you have any remaining problems feel free to open a new issue.