Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[NVIDIA] Explicit sync on nested Wayland with gamescope upscaling crashes from vkImportSemaphoreFdKHR failed #1662

Open
3 of 6 tasks
matte-schwartz opened this issue Dec 10, 2024 · 6 comments

Comments

@matte-schwartz
Copy link

matte-schwartz commented Dec 10, 2024

Is there an existing issue for this?

  • I have searched the existing issues

Are you using any gamescope patches or a forked version of gamescope?

  • The issue occurs on upstream gamescope without any modifications

Current Behavior

Moving this to its own thread since it seems like a new bug: #1320 (comment)

Using gamescope on NVIDIA with 555 series drivers or later causes gamescope to coredump after briefly launching but only showing a black window. The issue only occurs while using gamescope's upscaling, which implements explicit sync since #1463 was merged

This issue no longer occurs if you do one of several things:

  1. ENABLE_GAMESCOPE_WSI=0 gamescope -F fsr -- vkcube works, but you lose HDR without Gamescope WSI
  2. Re-compile gamescope with explicit sync disabled here, which does not require any further workarounds at runtime.:
    gamescope::ConVar<bool> cv_drm_debug_disable_explicit_sync( "drm_debug_disable_explicit_sync", false, "Force disable explicit sync on the DRM backend." );

The issue also does not occur on the Vulkan developer driver series.

Steps To Reproduce

  1. Launch gamescope -F fsr -- vkcube or any other upscaling method

Hardware information

- Distro: CachyOS
- CPU: 13th Gen Intel(R) Core(TM) i9-13900K
- GPU: NVIDIA GeForce RTX 4090
- Driver Version: NVIDIA 565.77 (open modules)

Software information

- Desktop environment: KDE 6.2.4, Cosmic Desktop
- Session type: Wayland
- Gamescope version: latest from master commit
- Gamescope launch command(s): `gamescope -F fsr -- vkcube`

Which gamescope backends have the issue you are reporting?

  • Wayland (default for nested gamescope)
  • DRM (default for embedded gamescope, i.e. gamescope-session)
  • SDL
  • OpenVR

Logging, screenshots, or anything else

Looking at my logs, it seems like it happens after Gamecope WSI establishes its swapchain.
amescope -F fsr -- vkcube
[gamescope] [Info]  console: gamescope version 3.15.9-39-g248c4a0+ (gcc 14.2.1)
No CAP_SYS_NICE, falling back to regular-priority compute and threads.
Performance will be affected.
[gamescope] [Info]  scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts'
[gamescope] [Info]  scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts/00-gamescope'
[gamescope] [Info]  scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts/00-gamescope/common'
[gamescope] [Info]  scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/common/inspect.lua' (id: 0)
[gamescope] [Info]  scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/common/modegen.lua' (id: 1)
[gamescope] [Info]  scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/common/util.lua' (id: 2)
[gamescope] [Info]  scriptmgr: Loading scripts from: '/usr/share/gamescope/scripts/00-gamescope/displays'
[gamescope] [Info]  scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/asus.rogally.lcd.lua' (id: 3)
[gamescope] [Info]  scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/deckhd.steamdeck.deckhd-lcd.lua' (id: 4)
[gamescope] [Info]  scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/valve.steamdeck.lcd.lua' (id: 5)
[gamescope] [Info]  scriptmgr: Running script file '/usr/share/gamescope/scripts/00-gamescope/displays/valve.steamdeck.oled.lua' (id: 6)
[gamescope] [Info]  scriptmgr: Loading scripts from: '/etc/gamescope/scripts'
[gamescope] [Warn]  scriptmgr: Directory '/etc/gamescope/scripts' does not exist
[gamescope] [Info]  scriptmgr: Loading scripts from: '/home/matt/.config/gamescope/scripts'
[gamescope] [Warn]  scriptmgr: Directory '/home/matt/.config/gamescope/scripts' does not exist
ATTENTION: default value of option vk_khr_present_wait overridden by environment.
[gamescope] [Info]  vulkan: selecting physical device 'NVIDIA GeForce RTX 4090': queue family 2 (general queue family 0)
[gamescope] [Info]  vulkan: physical device supports DRM format modifiers
[gamescope] [Info]  wlserver: [backend/headless/backend.c:67] Creating headless backend
[gamescope] [Info]  xdg_backend: Seat name: seat0
[gamescope] [Error] vulkan: vkGetPhysicalDeviceFormatProperties2 returned zero modifiers for DRM format 0x38344241 (VkResult: 0)
[gamescope] [Error] vulkan: vkGetPhysicalDeviceFormatProperties2 returned zero modifiers for DRM format 0x38344258 (VkResult: 0)
[gamescope] [Info]  vulkan: supported DRM formats for sampling usage:
[gamescope] [Info]  vulkan:   AR24 (0x34325241)
[gamescope] [Info]  vulkan:   XR24 (0x34325258)
[gamescope] [Info]  vulkan:   AB24 (0x34324241)
[gamescope] [Info]  vulkan:   XB24 (0x34324258)
[gamescope] [Info]  vulkan:   RG16 (0x36314752)
[gamescope] [Info]  vulkan:   NV12 (0x3231564E)
[gamescope] [Info]  vulkan:   AB4H (0x48344241)
[gamescope] [Info]  vulkan:   XB4H (0x48344258)
[gamescope] [Info]  vulkan:   AB30 (0x30334241)
[gamescope] [Info]  vulkan:   XB30 (0x30334258)
[gamescope] [Info]  vulkan:   AR30 (0x30335241)
[gamescope] [Info]  vulkan:   XR30 (0x30335258)
[gamescope] [Info]  wlserver: Using explicit sync when available
[gamescope] [Info]  wlserver: Running compositor on wayland display 'gamescope-0'
[gamescope] [Info]  wlserver: [backend/headless/backend.c:17] Starting headless backend
[gamescope] [Info]  wlserver: Successfully initialized libei for input emulation!
[gamescope] [Info]  wlserver: [xwayland/server.c:107] Starting Xwayland on :1
[gamescope] [Info]  pipewire: stream state changed: connecting
[gamescope] [Info]  pipewire: stream state changed: paused
[gamescope] [Info]  pipewire: stream available on node ID: 62
[gamescope] [Info]  xwm: Embedded, no cursor set. Using left_ptr by default.
[gamescope] [Info]  vblank: Using timerfd.
[gamescope] [Error] xdg_backend: Failed to map keymap fd.
[gamescope] [Info]  xdg_backend: PreferredMetadata: Red: 0.64 0.33, Green: 0.3 0.6, Blue: 0.15 0.06, White: 0.3127 0.329, Max Luminance: 200 nits, Min Luminance: 0.05 nits, Max Full Frame Luminance: 200 nits
[gamescope] [Info]  edid: Patching res 800x1280 -> 1280x720
Selected WSI platform: xcb
ATTENTION: default value of option vk_khr_present_wait overridden by environment.
ATTENTION: default value of option vk_xwayland_wait_ready overridden by environment.
[Gamescope WSI] Application info:
  pApplicationName: vkcube
  applicationVersion: 0
  pEngineName: vkcube
  engineVersion: 0
  apiVersion: 4194304
[Gamescope WSI] Executable name: vkcube
[Gamescope WSI] Creating Gamescope surface: xid: 0x600000
[Gamescope WSI] Atom of T was wrong type. Expected XCB_ATOM_CARDINAL.
[Gamescope WSI] Made gamescope surface for xid: 0x600000
[Gamescope WSI] Surface state:
  steam app id:                  0
  window xid:                    0x600000
  wayland surface res id:        5
  layer client flags:            0x0
  server hdr output enabled:     false
  hdr formats exposed to client: false
Selected GPU 0: NVIDIA GeForce RTX 4090, type: DiscreteGpu
[Gamescope WSI] Forcing on VK_EXT_swapchain_maintenance1.
[gamescope] [Warn]  xwm: got the same buffer committed twice, ignoring.
The XKEYBOARD keymap compiler (xkbcomp) reports:
> Warning:          Unsupported maximum keycode 708, clipping.
>                   X11 cannot support keycodes above 255.
> Warning:          Could not resolve keysym XF86KbdInputAssistPrevgrou
> Warning:          Could not resolve keysym XF86KbdInputAssistNextgrou
Errors from xkbcomp are not fatal to the X server
[gamescope] [Info]  xdg_backend: Changed refresh to: 119.997hz
[Gamescope WSI] Creating swapchain for xid: 0x600000 - provided minImageCount: 3 - minImageCount: 3 - format: VK_FORMAT_B8G8R8A8_UNORM - colorspace: VK_COLOR_SPACE_SRGB_NONLINEAR_KHR - flip: true
[Gamescope WSI] Created swapchain for xid: 0x600000 - imageCount: 3
[gamescope] [Info]  wlserver: handle_override_window_content: (1) x11_window: 0x600000 swapchain_resource: 0x590a730aa790 surface: 0x590a7306cd20
[gamescope] [Info]  wlserver: gamescope_swapchain_destroy_co swapchain: 0x590a730aa790
[gamescope] [Info]  wlserver: gamescope_swapchain_destroy_co swapchain: 0x590a730aa790 GOT WAYLAND SURFACE
[gamescope] [Info]  wlserver: handle_override_window_content: (3) x11_window: 0x600000 swapchain_resource: 0x590a730aa790 surface: 0x590a7306cd20 co: 0x590a730a4ea0
[gamescope] [Info]  wlserver: handle_override_window_content: (1) x11_window: 0x600000 swapchain_resource: 0x590a730aa790 surface: 0x590a7306cd20
[gamescope] [Info]  wlserver: handle_override_window_content: (1) x11_window: 0x600000 swapchain_resource: 0x590a730aa790 surface: 0x590a7306cd20
[gamescope] [Error] vulkan: vkImportSemaphoreFdKHR failed (VkResult: -3)
[gamescopereaper] [Info]  reaper: Parent of gamescopereaper was killed. Killing children.
(EE) failed to read Wayland events: Broken pipe
fish: Job 1, 'gamescope -F fsr -- vkcube' terminated by signal SIGSEGV (Address boundary error)
It generates the following coredump:
Core was generated by `gamescope -F fsr -- vkcube'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0  0x00005a4b01d4e580 in std::construct_at<VkSemaphore_T*, VkSemaphore_T* const&> (__location=0x7a7368140ec0) at /usr/include/c++/14.2.1/bits/stl_construct.h:97
97	    { return ::new((void*)__location) _Tp(std::forward<_Args>(__args)...); }
[Current thread is 1 (Thread 0x7a73755fe6c0 (LWP 187997))]
(gdb) thread apply all bt

Thread 18 (Thread 0x7a7374dfd6c0 (LWP 187998)):
#0  0x00007a73aec5915d in syscall () from /usr/lib/libc.so.6
#1  0x00007a73ae134597 in g_cond_wait_impl (cond=0x7a73680458f8, mutex=0x7a73680458f0) at ../glib/glib/gthread-posix.c:1007
#2  g_cond_wait (cond=0x7a73680458f8, mutex=0x7a73680458f0) at ../glib/glib/gthread.c:1665
#3  0x00007a73ae0bd3bc in g_async_queue_pop_intern_unlocked (queue=0x7a73680458f0, wait=1, end_time=-1) at ../glib/glib/gasyncqueue.c:375
#4  g_async_queue_pop (queue=0x7a73680458f0) at ../glib/glib/gasyncqueue.c:409
#5  0x00007a73ae532b18 in fc_thread_func () at ../pango/pango/pangofc-fontmap.c:959
#6  0x00007a73ae1383a5 in g_thread_proxy (data=0x7a7368041850) at ../glib/glib/gthread.c:892
#7  0x00007a73aebda386 in start_thread (arg=<optimized out>) at pthread_create.c:447
#8  0x00007a73aec5bb0c in __clone3 () from /usr/lib/libc.so.6

Thread 17 (Thread 0x7a73953ff6c0 (LWP 187984)):
#0  0x00007a73aebd66af in __futex_abstimed_wait_common64 (private=0, futex_word=0x7a7380000f58, expected=0, op=393, abstime=0x0, cancel=true) at futex-internal.c:57
#1  __futex_abstimed_wait_common (futex_word=0x7a7380000f58, expected=0, clockid=0, abstime=0x0, private=0, cancel=true) at futex-internal.c:87
#2  __GI___futex_abstimed_wait_cancelable64 (futex_word=futex_word@entry=0x7a7380000f58, expected=expected@entry=0, clockid=clockid@entry=0, abstime=abstime@entry=0x0, private=private@entry=0) at futex-internal.c:139
#3  0x00007a73aebd9216 in __pthread_cond_wait_common (cond=0x7a7380000f30, mutex=0x5a4b2beaac50, clockid=0, abstime=0x0) at pthread_cond_wait.c:503
#4  ___pthread_cond_wait (cond=0x7a7380000f30, mutex=0x5a4b2beaac50) at pthread_cond_wait.c:618
#5  0x00007a739681264c in ?? () from /usr/lib/libnvidia-glcore.so.565.77
#6  0x00007a7396c2eac5 in ?? () from /usr/lib/libnvidia-glcore.so.565.77
#7  0x00007a7396812864 in ?? () from /usr/lib/libnvidia-glcore.so.565.77
#8  0x00007a73aebda386 in start_thread (arg=<optimized out>) at pthread_create.c:447
#9  0x00007a73aec5bb0c in __clone3 () from /usr/lib/libc.so.6

Thread 16 (Thread 0x7a73a56d26c0 (LWP 187982)):
#0  0x00007a73aebd66af in __futex_abstimed_wait_common64 (private=-1769919958, futex_word=0x7a7388000f58, expected=0, op=393, abstime=0x7a73a56d1a40, cancel=true) at futex-internal.c:57
#1  __futex_abstimed_wait_common (futex_word=0x7a7388000f58, expected=0, clockid=-1519576832, abstime=0x7a73a56d1a40, private=-1769919958, cancel=true) at futex-internal.c:87
#2  __GI___futex_abstimed_wait_cancelable64 (futex_word=futex_word@entry=0x7a7388000f58, expected=expected@entry=0, clockid=clockid@entry=0, abstime=abstime@entry=0x7a73a56d1a40, private=private@entry=0) at futex-internal.c:139
#3  0x00007a73aebd9672 in __pthread_cond_wait_common (cond=0x7a7388000f30, mutex=0x5a4b2be0ed70, clockid=0, abstime=0x7a73a56d1a40) at pthread_cond_wait.c:503
#4  ___pthread_cond_timedwait64 (cond=0x7a7388000f30, mutex=0x5a4b2be0ed70, abstime=0x7a73a56d1a40) at pthread_cond_wait.c:643
#5  0x00007a73968126ac in ?? () from /usr/lib/libnvidia-glcore.so.565.77
#6  0x00007a7396c343f1 in ?? () from /usr/lib/libnvidia-glcore.so.565.77
#7  0x00007a7396812864 in ?? () from /usr/lib/libnvidia-glcore.so.565.77
#8  0x00007a73aebda386 in start_thread (arg=<optimized out>) at pthread_create.c:447
#9  0x00007a73aec5bb0c in __clone3 () from /usr/lib/libc.so.6

Thread 15 (Thread 0x7a73a73fe6c0 (LWP 187978)):
#0  0x00007a73aec4e7f6 in __GI_ppoll (fds=fds@entry=0x5a4b2bd1c5c0, nfds=nfds@entry=1, timeout=<optimized out>, timeout@entry=0x0, sigmask=sigmask@entry=0x0) at ../sysdeps/unix/sysv/linux/ppoll.c:42
#1  0x00007a73ae16bf89 in ppoll (__fds=0x5a4b2bd1c5c0, __nfds=1, __timeout=0x0, __ss=0x0) at /usr/include/bits/poll2.h:101
#2  g_main_context_poll_unlocked (priority=<optimized out>, context=0x5a4b2bd1c3a0, timeout_usec=<optimized out>, fds=0x5a4b2bd1c5c0, n_fds=1) at ../glib/glib/gmain.c:4591
#3  g_main_context_iterate_unlocked.isra.0 (context=context@entry=0x5a4b2bd1c3a0, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../glib/glib/gmain.c:4268
--Type <RET> for more, q to quit, c to continue without paging--c
#4  0x00007a73ae0fa112 in g_main_context_iteration (context=0x5a4b2bd1c3a0, may_block=may_block@entry=1) at ../glib/glib/gmain.c:4338
#5  0x00007a73ae0fa162 in glib_worker_main (data=<optimized out>) at ../glib/glib/gmain.c:6537
#6  0x00007a73ae1383a5 in g_thread_proxy (data=0x5a4b2bd05560) at ../glib/glib/gthread.c:892
#7  0x00007a73aebda386 in start_thread (arg=<optimized out>) at pthread_create.c:447
#8  0x00007a73aec5bb0c in __clone3 () from /usr/lib/libc.so.6

Thread 14 (Thread 0x7a73acdff6c0 (LWP 187973)):
#0  0x00007a73aec5bd56 in epoll_wait (epfd=5, events=0x7a73acdfb9c0, maxevents=1024, timeout=-1) at ../sysdeps/unix/sysv/linux/epoll_wait.c:30
#1  0x00005a4b01cbcd62 in gamescope::CWaiter<1024ul>::PollEvents (this=0x5a4b0224d040 <g_ImageWaiter>, nTimeOut=-1) at ../src/waitable.h:270
#2  0x00005a4b01cbe310 in gamescope::CAsyncWaiter<gamescope::Rc<commit_t, true>, 1024ul>::WaiterThreadFunc (this=0x5a4b0224d040 <g_ImageWaiter>, pszThreadName=0x5a4b01f7de42 "gamescope_img") at ../src/waitable.h:456
#3  0x00005a4b01cb8704 in gamescope::CAsyncWaiter<gamescope::Rc<commit_t, true>, 1024ul>::CAsyncWaiter(char const*)::{lambda()#1}::operator()() const (__closure=0x5a4b2bcda918) at ../src/waitable.h:380
#4  0x00005a4b01cef15b in std::__invoke_impl<void, gamescope::CAsyncWaiter<gamescope::Rc<commit_t, true>, 1024ul>::CAsyncWaiter(char const*)::{lambda()#1}>(std::__invoke_other, gamescope::CAsyncWaiter<gamescope::Rc<commit_t, true>, 1024ul>::CAsyncWaiter(char const*)::{lambda()#1}&&) (__f=...) at /usr/include/c++/14.2.1/bits/invoke.h:61
#5  0x00005a4b01cef0cb in std::__invoke<gamescope::CAsyncWaiter<gamescope::Rc<commit_t, true>, 1024ul>::CAsyncWaiter(char const*)::{lambda()#1}>(gamescope::CAsyncWaiter<gamescope::Rc<commit_t, true>, 1024ul>::CAsyncWaiter(char const*)::{lambda()#1}&&) (__fn=...) at /usr/include/c++/14.2.1/bits/invoke.h:96
#6  0x00005a4b01cef016 in std::thread::_Invoker<std::tuple<gamescope::CAsyncWaiter<gamescope::Rc<commit_t, true>, 1024ul>::CAsyncWaiter(char const*)::{lambda()#1}> >::_M_invoke<0ul>(std::_Index_tuple<0ul>) (this=0x5a4b2bcda918) at /usr/include/c++/14.2.1/bits/std_thread.h:301
#7  0x00005a4b01ceef98 in std::thread::_Invoker<std::tuple<gamescope::CAsyncWaiter<gamescope::Rc<commit_t, true>, 1024ul>::CAsyncWaiter(char const*)::{lambda()#1}> >::operator()() (this=0x5a4b2bcda918) at /usr/include/c++/14.2.1/bits/std_thread.h:308
#8  0x00005a4b01ceee5e in std::thread::_State_impl<std::thread::_Invoker<std::tuple<gamescope::CAsyncWaiter<gamescope::Rc<commit_t, true>, 1024ul>::CAsyncWaiter(char const*)::{lambda()#1}> > >::_M_run() (this=0x5a4b2bcda910) at /usr/include/c++/14.2.1/bits/std_thread.h:253
#9  0x00007a73aeef70a4 in std::execute_native_thread_routine (__p=0x5a4b2bcda910) at /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:104
#10 0x00007a73aebda386 in start_thread (arg=<optimized out>) at pthread_create.c:447
#11 0x00007a73aec5bb0c in __clone3 () from /usr/lib/libc.so.6

Thread 13 (Thread 0x7a73a7bff6c0 (LWP 187977)):
#0  0x00007a73aec5915d in syscall () from /usr/lib/libc.so.6
#1  0x00007a73ae134597 in g_cond_wait_impl (cond=0x5a4b2bd03fd8, mutex=0x5a4b2bd03fd0) at ../glib/glib/gthread-posix.c:1007
#2  g_cond_wait (cond=0x5a4b2bd03fd8, mutex=0x5a4b2bd03fd0) at ../glib/glib/gthread.c:1665
#3  0x00007a73ae0bd48c in g_async_queue_pop_intern_unlocked (queue=0x5a4b2bd03fd0, wait=1, end_time=-1) at ../glib/glib/gasyncqueue.c:375
#4  g_async_queue_pop_unlocked (queue=0x5a4b2bd03fd0) at ../glib/glib/gasyncqueue.c:431
#5  0x00007a73ae13abb6 in g_thread_pool_spawn_thread (data=<optimized out>) at ../glib/glib/gthreadpool.c:297
#6  0x00007a73ae1383a5 in g_thread_proxy (data=0x5a4b2bd16470) at ../glib/glib/gthread.c:892
#7  0x00007a73aebda386 in start_thread (arg=<optimized out>) at pthread_create.c:447
#8  0x00007a73aec5bb0c in __clone3 () from /usr/lib/libc.so.6

Thread 12 (Thread 0x7a73ac5fe6c0 (LWP 187974)):
#0  0x00007a73aec5bd56 in epoll_wait (epfd=11, events=0x7a73ac5faa00, maxevents=1024, timeout=-1) at ../sysdeps/unix/sysv/linux/epoll_wait.c:30
#1  0x00005a4b01cbcd62 in gamescope::CWaiter<1024ul>::PollEvents (this=0x5a4b022735a0 <g_LibEisWaiter>, nTimeOut=-1) at ../src/waitable.h:270
#2  0x00005a4b01d1abb4 in gamescope::CAsyncWaiter<gamescope::CRawPointer<gamescope::IWaitable>, 1024ul>::WaiterThreadFunc (this=0x5a4b022735a0 <g_LibEisWaiter>, pszThreadName=0x5a4b01f98677 "gamescope-eis") at ../src/waitable.h:456
#3  0x00005a4b01d167c2 in gamescope::CAsyncWaiter<gamescope::CRawPointer<gamescope::IWaitable>, 1024ul>::CAsyncWaiter(char const*)::{lambda()#1}::operator()() const (__closure=0x5a4b2bcdca28) at ../src/waitable.h:380
#4  0x00005a4b01d28e0d in std::__invoke_impl<void, gamescope::CAsyncWaiter<gamescope::CRawPointer<gamescope::IWaitable>, 1024ul>::CAsyncWaiter(char const*)::{lambda()#1}>(std::__invoke_other, gamescope::CAsyncWaiter<gamescope::CRawPointer<gamescope::IWaitable>, 1024ul>::CAsyncWaiter(char const*)::{lambda()#1}&&) (__f=...) at /usr/include/c++/14.2.1/bits/invoke.h:61
#5  0x00005a4b01d28d97 in std::__invoke<gamescope::CAsyncWaiter<gamescope::CRawPointer<gamescope::IWaitable>, 1024ul>::CAsyncWaiter(char const*)::{lambda()#1}>(gamescope::CAsyncWaiter<gamescope::CRawPointer<gamescope::IWaitable>, 1024ul>::CAsyncWaiter(char const*)::{lambda()#1}&&) (__fn=...) at /usr/include/c++/14.2.1/bits/invoke.h:96
#6  0x00005a4b01d28cd8 in std::thread::_Invoker<std::tuple<gamescope::CAsyncWaiter<gamescope::CRawPointer<gamescope::IWaitable>, 1024ul>::CAsyncWaiter(char const*)::{lambda()#1}> >::_M_invoke<0ul>(std::_Index_tuple<0ul>) (this=0x5a4b2bcdca28) at /usr/include/c++/14.2.1/bits/std_thread.h:301
#7  0x00005a4b01d28be4 in std::thread::_Invoker<std::tuple<gamescope::CAsyncWaiter<gamescope::CRawPointer<gamescope::IWaitable>, 1024ul>::CAsyncWaiter(char const*)::{lambda()#1}> >::operator()() (this=0x5a4b2bcdca28) at /usr/include/c++/14.2.1/bits/std_thread.h:308
#8  0x00005a4b01d28a0c in std::thread::_State_impl<std::thread::_Invoker<std::tuple<gamescope::CAsyncWaiter<gamescope::CRawPointer<gamescope::IWaitable>, 1024ul>::CAsyncWaiter(char const*)::{lambda()#1}> > >::_M_run() (this=0x5a4b2bcdca20) at /usr/include/c++/14.2.1/bits/std_thread.h:253
#9  0x00007a73aeef70a4 in std::execute_native_thread_routine (__p=0x5a4b2bcdca20) at /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:104
#10 0x00007a73aebda386 in start_thread (arg=<optimized out>) at pthread_create.c:447
#11 0x00007a73aec5bb0c in __clone3 () from /usr/lib/libc.so.6

Thread 11 (Thread 0x7a73679ff6c0 (LWP 188000)):
#0  0x00007a73aec43737 in __GI___wait4 (pid=187999, stat_loc=0x7a73679fea04, options=0, usage=0x0) at ../sysdeps/unix/sysv/linux/wait4.c:30
#1  0x00005a4b01c4edd6 in gamescope::Process::WaitForChild (nPid=187999) at ../src/Utils/Process.cpp:137
#2  0x00005a4b01cad3b3 in operator() (__closure=0x7a7368070118) at ../src/steamcompmgr.cpp:7410
#3  0x00005a4b01cb36b3 in std::__invoke_impl<void, LaunchNestedChildren(char**)::<lambda()> >(std::__invoke_other, struct {...} &&) (__f=...) at /usr/include/c++/14.2.1/bits/invoke.h:61
#4  0x00005a4b01cb3623 in std::__invoke<LaunchNestedChildren(char**)::<lambda()> >(struct {...} &&) (__fn=...) at /usr/include/c++/14.2.1/bits/invoke.h:96
#5  0x00005a4b01cb35a4 in std::thread::_Invoker<std::tuple<LaunchNestedChildren(char**)::<lambda()> > >::_M_invoke<0>(std::_Index_tuple<0>) (this=0x7a7368070118) at /usr/include/c++/14.2.1/bits/std_thread.h:301
#6  0x00005a4b01cb355c in std::thread::_Invoker<std::tuple<LaunchNestedChildren(char**)::<lambda()> > >::operator()(void) (this=0x7a7368070118) at /usr/include/c++/14.2.1/bits/std_thread.h:308
#7  0x00005a4b01cb3520 in std::thread::_State_impl<std::thread::_Invoker<std::tuple<LaunchNestedChildren(char**)::<lambda()> > > >::_M_run(void) (this=0x7a7368070110) at /usr/include/c++/14.2.1/bits/std_thread.h:253
#8  0x00007a73aeef70a4 in std::execute_native_thread_routine (__p=0x7a7368070110) at /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:104
#9  0x00007a73aebda386 in start_thread (arg=<optimized out>) at pthread_create.c:447
#10 0x00007a73aec5bb0c in __clone3 () from /usr/lib/libc.so.6

Thread 10 (Thread 0x7a7375dff6c0 (LWP 187996)):
#0  0x00007a73aec4e27f in __GI___poll (fds=0x7a7375dfea00, nfds=2, timeout=-1) at ../sysdeps/unix/sysv/linux/poll.c:29
#1  0x00005a4b01e0c4d3 in run_pipewire (state=0x5a4b021e0ce0 <pipewire_state>) at ../src/pipewire.cpp:628
#2  0x00005a4b01e0e8a8 in std::__invoke_impl<void, void (*)(pipewire_state*), pipewire_state*> (__f=@0x5a4b2c5e5920: 0x5a4b01e0c3e4 <run_pipewire(pipewire_state*)>) at /usr/include/c++/14.2.1/bits/invoke.h:61
#3  0x00005a4b01e0e81d in std::__invoke<void (*)(pipewire_state*), pipewire_state*> (__fn=@0x5a4b2c5e5920: 0x5a4b01e0c3e4 <run_pipewire(pipewire_state*)>) at /usr/include/c++/14.2.1/bits/invoke.h:96
#4  0x00005a4b01e0e78d in std::thread::_Invoker<std::tuple<void (*)(pipewire_state*), pipewire_state*> >::_M_invoke<0ul, 1ul> (this=0x5a4b2c5e5918) at /usr/include/c++/14.2.1/bits/std_thread.h:301
#5  0x00005a4b01e0e746 in std::thread::_Invoker<std::tuple<void (*)(pipewire_state*), pipewire_state*> >::operator() (this=0x5a4b2c5e5918) at /usr/include/c++/14.2.1/bits/std_thread.h:308
#6  0x00005a4b01e0e72a in std::thread::_State_impl<std::thread::_Invoker<std::tuple<void (*)(pipewire_state*), pipewire_state*> > >::_M_run (this=0x5a4b2c5e5910) at /usr/include/c++/14.2.1/bits/std_thread.h:253
#7  0x00007a73aeef70a4 in std::execute_native_thread_routine (__p=0x5a4b2c5e5910) at /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:104
#8  0x00007a73aebda386 in start_thread (arg=<optimized out>) at pthread_create.c:447
#9  0x00007a73aec5bb0c in __clone3 () from /usr/lib/libc.so.6

Thread 9 (Thread 0x7a738cbff6c0 (LWP 187990)):
#0  0x00007a73aebd66af in __futex_abstimed_wait_common64 (private=0, futex_word=0x7a737c000f58, expected=0, op=393, abstime=0x7a738cbfe970, cancel=true) at futex-internal.c:57
#1  __futex_abstimed_wait_common (futex_word=0x7a737c000f58, expected=0, clockid=0, abstime=0x7a738cbfe970, private=0, cancel=true) at futex-internal.c:87
#2  __GI___futex_abstimed_wait_cancelable64 (futex_word=futex_word@entry=0x7a737c000f58, expected=expected@entry=0, clockid=clockid@entry=0, abstime=abstime@entry=0x7a738cbfe970, private=private@entry=0) at futex-internal.c:139
#3  0x00007a73aebd9672 in __pthread_cond_wait_common (cond=0x7a737c000f30, mutex=0x5a4b2beabb80, clockid=0, abstime=0x7a738cbfe970) at pthread_cond_wait.c:503
#4  ___pthread_cond_timedwait64 (cond=0x7a737c000f30, mutex=0x5a4b2beabb80, abstime=0x7a738cbfe970) at pthread_cond_wait.c:643
#5  0x00007a73968126ac in ?? () from /usr/lib/libnvidia-glcore.so.565.77
#6  0x00007a7396d35f8c in ?? () from /usr/lib/libnvidia-glcore.so.565.77
#7  0x00007a7396d21f06 in ?? () from /usr/lib/libnvidia-glcore.so.565.77
#8  0x00007a7396812864 in ?? () from /usr/lib/libnvidia-glcore.so.565.77
#9  0x00007a73aebda386 in start_thread (arg=<optimized out>) at pthread_create.c:447
#10 0x00007a73aec5bb0c in __clone3 () from /usr/lib/libc.so.6

Thread 8 (Thread 0x7a7394bfe6c0 (LWP 187986)):
#0  0x00007a73aebd66af in __futex_abstimed_wait_common64 (private=0, futex_word=0x7a7378000f58, expected=0, op=393, abstime=0x7a7394bfda50, cancel=true) at futex-internal.c:57
#1  __futex_abstimed_wait_common (futex_word=0x7a7378000f58, expected=0, clockid=0, abstime=0x7a7394bfda50, private=0, cancel=true) at futex-internal.c:87
#2  __GI___futex_abstimed_wait_cancelable64 (futex_word=futex_word@entry=0x7a7378000f58, expected=expected@entry=0, clockid=clockid@entry=0, abstime=abstime@entry=0x7a7394bfda50, private=private@entry=0) at futex-internal.c:139
#3  0x00007a73aebd9672 in __pthread_cond_wait_common (cond=0x7a7378000f30, mutex=0x5a4b2c34dd90, clockid=0, abstime=0x7a7394bfda50) at pthread_cond_wait.c:503
#4  ___pthread_cond_timedwait64 (cond=0x7a7378000f30, mutex=0x5a4b2c34dd90, abstime=0x7a7394bfda50) at pthread_cond_wait.c:643
#5  0x00007a73968126ac in ?? () from /usr/lib/libnvidia-glcore.so.565.77
#6  0x00007a7396c1a88d in ?? () from /usr/lib/libnvidia-glcore.so.565.77
#7  0x00007a7396812864 in ?? () from /usr/lib/libnvidia-glcore.so.565.77
#8  0x00007a73aebda386 in start_thread (arg=<optimized out>) at pthread_create.c:447
#9  0x00007a73aec5bb0c in __clone3 () from /usr/lib/libc.so.6

Thread 7 (Thread 0x7a73a4ed16c0 (LWP 187983)):
#0  0x00007a73aebd66af in __futex_abstimed_wait_common64 (private=0, futex_word=0x7a7384000f58, expected=0, op=393, abstime=0x7a73a4ed0a60, cancel=true) at futex-internal.c:57
#1  __futex_abstimed_wait_common (futex_word=0x7a7384000f58, expected=0, clockid=0, abstime=0x7a73a4ed0a60, private=0, cancel=true) at futex-internal.c:87
#2  __GI___futex_abstimed_wait_cancelable64 (futex_word=futex_word@entry=0x7a7384000f58, expected=expected@entry=0, clockid=clockid@entry=0, abstime=abstime@entry=0x7a73a4ed0a60, private=private@entry=0) at futex-internal.c:139
#3  0x00007a73aebd9672 in __pthread_cond_wait_common (cond=0x7a7384000f30, mutex=0x5a4b2bebe8d0, clockid=0, abstime=0x7a73a4ed0a60) at pthread_cond_wait.c:503
#4  ___pthread_cond_timedwait64 (cond=0x7a7384000f30, mutex=0x5a4b2bebe8d0, abstime=0x7a73a4ed0a60) at pthread_cond_wait.c:643
#5  0x00007a73968126ac in ?? () from /usr/lib/libnvidia-glcore.so.565.77
#6  0x00007a7396c44142 in ?? () from /usr/lib/libnvidia-glcore.so.565.77
#7  0x00007a7396812864 in ?? () from /usr/lib/libnvidia-glcore.so.565.77
#8  0x00007a73aebda386 in start_thread (arg=<optimized out>) at pthread_create.c:447
#9  0x00007a73aec5bb0c in __clone3 () from /usr/lib/libc.so.6

Thread 6 (Thread 0x7a737760f6c0 (LWP 187991)):
#0  0x00007a738f23ac44 in ?? () from /usr/lib/libnvidia-gpucomp.so.565.77
#1  0x00007a738f23b210 in ?? () from /usr/lib/libnvidia-gpucomp.so.565.77
#2  0x00007a738f23b256 in ?? () from /usr/lib/libnvidia-gpucomp.so.565.77
#3  0x00007a738ec7da3e in ?? () from /usr/lib/libnvidia-gpucomp.so.565.77
#4  0x00007a738d39780e in ?? () from /usr/lib/libnvidia-gpucomp.so.565.77
#5  0x00007a738d52fe9e in ?? () from /usr/lib/libnvidia-gpucomp.so.565.77
#6  0x00007a738ecb0971 in ?? () from /usr/lib/libnvidia-gpucomp.so.565.77
#7  0x00007a738ecb1d50 in ?? () from /usr/lib/libnvidia-gpucomp.so.565.77
#8  0x00007a738ecb2516 in ?? () from /usr/lib/libnvidia-gpucomp.so.565.77
#9  0x00007a738d4a8d06 in ?? () from /usr/lib/libnvidia-gpucomp.so.565.77
#10 0x00007a738d4a8702 in ?? () from /usr/lib/libnvidia-gpucomp.so.565.77
#11 0x00007a738d4c2352 in ?? () from /usr/lib/libnvidia-gpucomp.so.565.77
#12 0x00007a738d4a8aa4 in ?? () from /usr/lib/libnvidia-gpucomp.so.565.77
#13 0x00007a739553527a in ?? () from /usr/lib/libnvidia-glvkspirv.so.565.77
#14 0x00007a7395536196 in _nv002nvvm () from /usr/lib/libnvidia-glvkspirv.so.565.77
#15 0x00007a7396c5db48 in ?? () from /usr/lib/libnvidia-glcore.so.565.77
#16 0x00007a7396d466f4 in ?? () from /usr/lib/libnvidia-glcore.so.565.77
#17 0x00007a7396c62af2 in ?? () from /usr/lib/libnvidia-glcore.so.565.77
#18 0x00007a7396d66ed6 in ?? () from /usr/lib/libnvidia-glcore.so.565.77
#19 0x00007a7396c6324b in ?? () from /usr/lib/libnvidia-glcore.so.565.77
#20 0x00007a7396c63959 in ?? () from /usr/lib/libnvidia-glcore.so.565.77
#21 0x00007a7396c4a01f in ?? () from /usr/lib/libnvidia-glcore.so.565.77
#22 0x00007a7396b2f742 in ?? () from /usr/lib/libnvidia-glcore.so.565.77
#23 0x00005a4b01d30faf in CVulkanDevice::compilePipeline (this=0x5a4b02273a20 <g_device>, layerCount=4, ycbcrMask=2, type=SHADER_TYPE_RCAS, blur_layer_count=1, composite_debug=0, colorspace_mask=0, output_eotf=0, itm_enable=false) at ../src/rendervulkan.cpp:1108
#24 0x00005a4b01d3131f in CVulkanDevice::compileAllPipelines (this=0x5a4b02273a20 <g_device>) at ../src/rendervulkan.cpp:1142
#25 0x00005a4b01d2d1fd in operator() (__closure=0x5a4b2c5118b8) at ../src/rendervulkan.cpp:295
#26 0x00005a4b01d3e0be in std::__invoke_impl<void, CVulkanDevice::BInit(VkInstance, VkSurfaceKHR)::<lambda()> >(std::__invoke_other, struct {...} &&) (__f=...) at /usr/include/c++/14.2.1/bits/invoke.h:61
#27 0x00005a4b01d3e081 in std::__invoke<CVulkanDevice::BInit(VkInstance, VkSurfaceKHR)::<lambda()> >(struct {...} &&) (__fn=...) at /usr/include/c++/14.2.1/bits/invoke.h:96
#28 0x00005a4b01d3e02e in std::thread::_Invoker<std::tuple<CVulkanDevice::BInit(VkInstance, VkSurfaceKHR)::<lambda()> > >::_M_invoke<0>(std::_Index_tuple<0>) (this=0x5a4b2c5118b8) at /usr/include/c++/14.2.1/bits/std_thread.h:301
#29 0x00005a4b01d3e002 in std::thread::_Invoker<std::tuple<CVulkanDevice::BInit(VkInstance, VkSurfaceKHR)::<lambda()> > >::operator()(void) (this=0x5a4b2c5118b8) at /usr/include/c++/14.2.1/bits/std_thread.h:308
#30 0x00005a4b01d3dfe6 in std::thread::_State_impl<std::thread::_Invoker<std::tuple<CVulkanDevice::BInit(VkInstance, VkSurfaceKHR)::<lambda()> > > >::_M_run(void) (this=0x5a4b2c5118b0) at /usr/include/c++/14.2.1/bits/std_thread.h:253
#31 0x00007a73aeef70a4 in std::execute_native_thread_routine (__p=0x5a4b2c5118b0) at /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:104
#32 0x00007a73aebda386 in start_thread (arg=<optimized out>) at pthread_create.c:447
#33 0x00007a73aec5bb0c in __clone3 () from /usr/lib/libc.so.6

Thread 5 (Thread 0x7a73a6bfd6c0 (LWP 187979)):
#0  0x00007a73aec5915d in syscall () from /usr/lib/libc.so.6
#1  0x00007a73ae1352a0 in g_cond_wait_until_impl (cond=<optimized out>, mutex=0x5a4b2bd051c0, end_time=<optimized out>) at ../glib/glib/gthread-posix.c:1140
#2  g_cond_wait_until (cond=<optimized out>, mutex=0x5a4b2bd051c0, end_time=<optimized out>) at ../glib/glib/gthread.c:1761
#3  0x00007a73ae0bd115 in g_async_queue_pop_intern_unlocked (queue=0x5a4b2bd051c0, wait=1, end_time=3707836681) at ../glib/glib/gasyncqueue.c:378
#4  0x00007a73ae0bd1b7 in g_async_queue_timeout_pop (queue=0x5a4b2bd051c0, timeout=<optimized out>) at ../glib/glib/gasyncqueue.c:501
#5  0x00007a73ae13ad90 in g_thread_pool_wait_for_new_pool () at ../glib/glib/gthreadpool.c:167
#6  g_thread_pool_thread_proxy (data=<optimized out>) at ../glib/glib/gthreadpool.c:394
#7  0x00007a73ae1383a5 in g_thread_proxy (data=0x7a7398000b90) at ../glib/glib/gthread.c:892
#8  0x00007a73aebda386 in start_thread (arg=<optimized out>) at pthread_create.c:447
#9  0x00007a73aec5bb0c in __clone3 () from /usr/lib/libc.so.6

Thread 4 (Thread 0x7a73a63fc6c0 (LWP 187980)):
#0  0x00007a73aec4e7f6 in __GI_ppoll (fds=fds@entry=0x7a7390000b90, nfds=nfds@entry=2, timeout=<optimized out>, timeout@entry=0x0, sigmask=sigmask@entry=0x0) at ../sysdeps/unix/sysv/linux/ppoll.c:42
#1  0x00007a73ae16bf89 in ppoll (__fds=0x7a7390000b90, __nfds=2, __timeout=0x0, __ss=0x0) at /usr/include/bits/poll2.h:101
#2  g_main_context_poll_unlocked (priority=<optimized out>, context=0x7a739c005b20, timeout_usec=<optimized out>, fds=0x7a7390000b90, n_fds=2) at ../glib/glib/gmain.c:4591
#3  g_main_context_iterate_unlocked.isra.0 (context=0x7a739c005b20, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at ../glib/glib/gmain.c:4268
#4  0x00007a73ae100477 in g_main_loop_run (loop=0x7a739c007f90) at ../glib/glib/gmain.c:4475
#5  0x00007a73ab160abc in gdbus_shared_thread_func (user_data=0x7a739c005af0) at ../glib/gio/gdbusprivate.c:284
#6  0x00007a73ae1383a5 in g_thread_proxy (data=0x7a739c005c40) at ../glib/glib/gthread.c:892
#7  0x00007a73aebda386 in start_thread (arg=<optimized out>) at pthread_create.c:447
#8  0x00007a73aec5bb0c in __clone3 () from /usr/lib/libc.so.6

Thread 3 (Thread 0x7a73abdfd6c0 (LWP 187975)):
#0  0x00007a73aec5bd56 in epoll_wait (epfd=15, events=0x7a73abdfc950, maxevents=4, timeout=-1) at ../sysdeps/unix/sysv/linux/epoll_wait.c:30
#1  0x00005a4b01c2e85a in gamescope::CWaiter<4ul>::PollEvents (this=0x5a4b2bcee228, nTimeOut=-1) at ../src/waitable.h:270
#2  0x00005a4b01c2461c in gamescope::CWaylandInputThread::ThreadFunc (this=0x5a4b2bcee220) at ../src/Backends/WaylandBackend.cpp:2421
#3  0x00005a4b01c23f95 in operator() (__closure=0x5a4b2bce8808) at ../src/Backends/WaylandBackend.cpp:2329
#4  0x00005a4b01c28154 in std::__invoke_impl<void, gamescope::CWaylandInputThread::CWaylandInputThread()::<lambda()> >(std::__invoke_other, struct {...} &&) (__f=...) at /usr/include/c++/14.2.1/bits/invoke.h:61
#5  0x00005a4b01c28117 in std::__invoke<gamescope::CWaylandInputThread::CWaylandInputThread()::<lambda()> >(struct {...} &&) (__fn=...) at /usr/include/c++/14.2.1/bits/invoke.h:96
#6  0x00005a4b01c280c4 in std::thread::_Invoker<std::tuple<gamescope::CWaylandInputThread::CWaylandInputThread()::<lambda()> > >::_M_invoke<0>(std::_Index_tuple<0>) (this=0x5a4b2bce8808) at /usr/include/c++/14.2.1/bits/std_thread.h:301
#7  0x00005a4b01c2808a in std::thread::_Invoker<std::tuple<gamescope::CWaylandInputThread::CWaylandInputThread()::<lambda()> > >::operator()(void) (this=0x5a4b2bce8808) at /usr/include/c++/14.2.1/bits/std_thread.h:308
#8  0x00005a4b01c2802c in std::thread::_State_impl<std::thread::_Invoker<std::tuple<gamescope::CWaylandInputThread::CWaylandInputThread()::<lambda()> > > >::_M_run(void) (this=0x5a4b2bce8800) at /usr/include/c++/14.2.1/bits/std_thread.h:253
#9  0x00007a73aeef70a4 in std::execute_native_thread_routine (__p=0x5a4b2bce8800) at /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:104
#10 0x00007a73aebda386 in start_thread (arg=<optimized out>) at pthread_create.c:447
#11 0x00007a73aec5bb0c in __clone3 () from /usr/lib/libc.so.6

Thread 2 (Thread 0x7a73ae84dfc0 (LWP 187972)):
#0  0x00007a73aec4e27f in __GI___poll (fds=0x7ffd3b84aa10, nfds=2, timeout=-1) at ../sysdeps/unix/sysv/linux/poll.c:29
#1  0x00005a4b01d0e71f in wlserver_run () at ../src/wlserver.cpp:1940
#2  0x00005a4b01d04aa2 in main (argc=5, argv=0x7ffd3b84ac28) at ../src/main.cpp:987

Thread 1 (Thread 0x7a73755fe6c0 (LWP 187997)):
#0  0x00005a4b01d4e580 in std::construct_at<VkSemaphore_T*, VkSemaphore_T* const&> (__location=0x7a7368140ec0) at /usr/include/c++/14.2.1/bits/stl_construct.h:97
#1  0x00005a4b01d48786 in std::allocator_traits<std::allocator<VkSemaphore_T*> >::construct<VkSemaphore_T*, VkSemaphore_T* const&> (__a=..., __p=0x7a7368140ec0) at /usr/include/c++/14.2.1/bits/alloc_traits.h:536
#2  std::vector<VkSemaphore_T*, std::allocator<VkSemaphore_T*> >::_M_realloc_append<VkSemaphore_T* const&> (this=0x7a73755fd0f0) at /usr/include/c++/14.2.1/bits/vector.tcc:634
#3  0x00005a4b01d43825 in std::vector<VkSemaphore_T*, std::allocator<VkSemaphore_T*> >::push_back (this=0x7a73755fd0f0, __x=<error reading variable: Cannot access memory at address 0x8>) at /usr/include/c++/14.2.1/bits/stl_vector.h:1294
#4  0x00005a4b01d31ae7 in CVulkanDevice::submitInternal (this=0x5a4b02273a20 <g_device>, cmdBuffer=0x5a4b2bd64880) at ../src/rendervulkan.cpp:1256
#5  0x00005a4b01d31d8e in CVulkanDevice::submit (this=0x5a4b02273a20 <g_device>, cmdBuffer=std::unique_ptr<CVulkanCmdBuffer> = {...}) at ../src/rendervulkan.cpp:1291
#6  0x00005a4b01d3c991 in vulkan_composite (frameInfo=0x7a73755fd5c0, pPipewireTexture=..., partial=false, pOutputOverride=..., increment=false, pInCommandBuffer=std::unique_ptr<CVulkanCmdBuffer> = {...}) at ../src/rendervulkan.cpp:4079
#7  0x00005a4b01ca98b6 in update_wayland_res (doneCommits=0x7a7368000c80, w=0x7a73680cdd70, reslistentry=...) at ../src/steamcompmgr.cpp:6521
#8  0x00005a4b01ca9df1 in check_new_xwayland_res (ctx=0x7a7368000b70) at ../src/steamcompmgr.cpp:6608
#9  0x00005a4b01caecb7 in steamcompmgr_main (argc=5, argv=0x7ffd3b84ac28) at ../src/steamcompmgr.cpp:7822
#10 0x00005a4b01d04b3b in steamCompMgrThreadRun (argc=5, argv=0x7ffd3b84ac28) at ../src/main.cpp:999
#11 0x00005a4b01d05ac5 in std::__invoke_impl<void, void (*)(int, char**), int, char**> (__f=@0x5a4b2c5e6088: 0x5a4b01d04b01 <steamCompMgrThreadRun(int, char**)>) at /usr/include/c++/14.2.1/bits/invoke.h:61
#12 0x00005a4b01d05a06 in std::__invoke<void (*)(int, char**), int, char**> (__fn=@0x5a4b2c5e6088: 0x5a4b01d04b01 <steamCompMgrThreadRun(int, char**)>) at /usr/include/c++/14.2.1/bits/invoke.h:96
#13 0x00005a4b01d05939 in std::thread::_Invoker<std::tuple<void (*)(int, char**), int, char**> >::_M_invoke<0ul, 1ul, 2ul> (this=0x5a4b2c5e6078) at /usr/include/c++/14.2.1/bits/std_thread.h:301
#14 0x00005a4b01d058d6 in std::thread::_Invoker<std::tuple<void (*)(int, char**), int, char**> >::operator() (this=0x5a4b2c5e6078) at /usr/include/c++/14.2.1/bits/std_thread.h:308
#15 0x00005a4b01d058ba in std::thread::_State_impl<std::thread::_Invoker<std::tuple<void (*)(int, char**), int, char**> > >::_M_run (this=0x5a4b2c5e6070) at /usr/include/c++/14.2.1/bits/std_thread.h:253
#16 0x00007a73aeef70a4 in std::execute_native_thread_routine (__p=0x5a4b2c5e6070) at /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:104
#17 0x00007a73aebda386 in start_thread (arg=<optimized out>) at pthread_create.c:447
#18 0x00007a73aec5bb0c in __clone3 () from /usr/lib/libc.so.6

nvidia-bug-report.log.gz

@cubanismo
Copy link

I haven't looked yet, but GameScope isn't by chance trying to directly import a DRM timeline syncobj FD into Vulkan as a timeline semaphore is it? That's definitely not allowed by any current spec, but probably works on Mesa drivers and not ours.

Even if that's the case, we're not allowed to crash, so it'd still be a driver bug. Just wanted to see if it's a possibility.

@cubanismo
Copy link

For future reference, I've filed NV-internal bug 5007734 to track this issue.

@matte-schwartz
Copy link
Author

I haven't looked yet, but GameScope isn't by chance trying to directly import a DRM timeline syncobj FD into Vulkan as a timeline semaphore is it? That's definitely not allowed by any current spec, but probably works on Mesa drivers and not ours.

this is probably best answered by @misyltoad or someone with a better understanding of the code than myself

@misyltoad
Copy link
Collaborator

misyltoad commented Dec 13, 2024

I haven't looked yet, but GameScope isn't by chance trying to directly import a DRM timeline syncobj FD into Vulkan as a timeline semaphore is it? That's definitely not allowed by any current spec, but probably works on Mesa drivers and not ours.

That is exactly what we are doing, works fine on Mesa.

Why would this be forbidden by the spec?

To my knowledge, there is no language that forbids importing a syncobj just because it's timeline -- it is just explicit that the type must match:

  * [[VUID-VkImportSemaphoreFdInfoKHR-handleType-03264]]
    If pname:handleType is
    ename:VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT, the
    slink:VkSemaphoreTypeCreateInfo::pname:semaphoreType field must: match
    that of the semaphore from which pname:fd was exported

It's only forbidden to import timelines from syncobjs temporarily, which we don't do.

  * [[VUID-VkImportSemaphoreFdInfoKHR-flags-03323]]
    If pname:flags contains ename:VK_SEMAPHORE_IMPORT_TEMPORARY_BIT, the
    slink:VkSemaphoreTypeCreateInfo::pname:semaphoreType field of the
    semaphore from which pname:fd was exported must: not be
    ename:VK_SEMAPHORE_TYPE_TIMELINE

@mahkoh
Copy link

mahkoh commented Dec 13, 2024

To my knowledge, there is no language that forbids importing a syncobj just because it's timeline

There is no language that allows importing a syncobj in the first place. OPAQUE_FD does not mean syncobj. It would be welcome if you could propose a new extension that provided a SYNCOBJ_FD handle type.

@misyltoad
Copy link
Collaborator

It has long been decided that OPAQUE_FD is syncobj compatible on Linux.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants