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

[Regression] - Titles that use 32-bit executables crash with up-to-date 32-bit Gamescope WSI layer #1718

Open
4 of 6 tasks
matte-schwartz opened this issue Jan 22, 2025 · 2 comments · May be fixed by #1737
Open
4 of 6 tasks

Comments

@matte-schwartz
Copy link

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

When an up-to-date lib32-gamescope layer is present alonside the 64-bit layer of the same version, Half-Life 2 fails to launch unless you disable WSI with ENABLE_GAMESCOPE_WSI=0. Gamescope and lib32-gamescope are both built off the 3.16.1 tag, and I've confirmed the issue on SteamOS, Arch Linux, and Fedora. Sometimes the game just hangs indefinitely in gamescope-session, othertimes it does crash gamescope itself. The hang can be reproduced on nested Wayland with gamescope -e -- steam -steamdeck and then launching HL2 from there.

Steps To Reproduce

  1. Compile lib32-gamescope based off the same tag as the 64-bit gamescope package on SteamOS Main
  2. Attempt to launch Half-Life 2 from within gamescope-session

It should either hang indefinitely or crash gamescope at this point.

Hardware information

- Distro: SteamOS Main, Arch Linux, Fedora 41
- CPU: 32-core AMD Ryzen Threadripper 7970X
- GPU: [AMD/ATI] Navi 31 [Radeon RX 7900 XT/7900 XTX/7900M] (happens on NV as well)
- Driver Version: Mesa 24.3.3, nvidia 565.77

Software information

- Desktop environment: N/A, Plasma 6 Wayland 
- Session type: gamescope-session, Wayland
- Gamescope version: gamescope version 3.16.1-35-g19dc18e (gcc 14.2.1)
- Gamescope launch command(s): standard `gamescope-session` from SteamOS

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

gamescope-session gamescope crash while launching linux native half-life 2
Program terminated with signal SIGSEGV, Segmentation fault.
#0  0x000062b3cec1e034 in std::__shared_ptr<gamescope::IBackendConnector, (__gnu_cxx::_Lock_policy)2>::get (this=0x68) at /usr/include/c++/14.2.1/bits/shared_ptr_base.h:1667
1667          { return _M_ptr; }
[Current thread is 1 (Thread 0x7238ca836000 (LWP 13748))]
(gdb) thread apply all bt

Thread 8 (Thread 0x7238b67fc6c0 (LWP 13793)):
#0  0x00007238cae5ba99 in open64 () from /usr/lib/libc.so.6
#1  0x000062b3cebfa34c in statsThreadMain () at ../src/steamcompmgr.cpp:1114
#2  0x000062b3cec57ac5 in std::__invoke_impl<void, void (*)()> (__f=@0x7238b0002458: 0x62b3cebfa2e8 <statsThreadMain()>) at /usr/include/c++/14.2.1/bits/invoke.h:61
#3  0x000062b3cec57a40 in std::__invoke<void (*)()> (__fn=@0x7238b0002458: 0x62b3cebfa2e8 <statsThreadMain()>) at /usr/include/c++/14.2.1/bits/invoke.h:96
#4  0x000062b3cec57964 in std::thread::_Invoker<std::tuple<void (*)()> >::_M_invoke<0ul> (this=0x7238b0002458) at /usr/include/c++/14.2.1/bits/std_thread.h:301
#5  0x000062b3cec578d6 in std::thread::_Invoker<std::tuple<void (*)()> >::operator() (this=0x7238b0002458) at /usr/include/c++/14.2.1/bits/std_thread.h:308
#6  0x000062b3cec577a0 in std::thread::_State_impl<std::thread::_Invoker<std::tuple<void (*)()> > >::_M_run (this=0x7238b0002450) at /usr/include/c++/14.2.1/bits/std_thread.h:253
#7  0x00007238cb0f9c74 in std::execute_native_thread_routine (__p=0x7238b0002450) at /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:104
#8  0x00007238cade5605 in ?? () from /usr/lib/libc.so.6
#9  0x00007238cae6837c in ?? () from /usr/lib/libc.so.6

Thread 7 (Thread 0x7238bd5bd6c0 (LWP 13751)):
#0  0x00007238cade181a in ?? () from /usr/lib/libc.so.6
#1  0x00007238cade43ee in pthread_cond_wait () from /usr/lib/libc.so.6
#2  0x00007238c73131fe in ?? () from /usr/lib/libvulkan_radeon.so
#3  0x00007238c72cda3c in ?? () from /usr/lib/libvulkan_radeon.so
#4  0x00007238c731315c in ?? () from /usr/lib/libvulkan_radeon.so
#5  0x00007238cade5605 in ?? () from /usr/lib/libc.so.6
#6  0x00007238cae6837c in ?? () from /usr/lib/libc.so.6

Thread 6 (Thread 0x7238b7fff6c0 (LWP 13753)):
#0  0x00007238cae5bdaf in poll () from /usr/lib/libc.so.6
#1  0x000062b3ced498c8 in flip_handler_thread_run () at ../src/Backends/DRMBackend.cpp:756
#2  0x000062b3cec57ac5 in std::__invoke_impl<void, void (*)()> (__f=@0x62b3ee8a4b28: 0x62b3ced4986a <flip_handler_thread_run()>) at /usr/include/c++/14.2.1/bits/invoke.h:61
#3  0x000062b3cec57a40 in std::__invoke<void (*)()> (__fn=@0x62b3ee8a4b28: 0x62b3ced4986a <flip_handler_thread_run()>) at /usr/include/c++/14.2.1/bits/invoke.h:96
#4  0x000062b3cec57964 in std::thread::_Invoker<std::tuple<void (*)()> >::_M_invoke<0ul> (this=0x62b3ee8a4b28) at /usr/include/c++/14.2.1/bits/std_thread.h:301
#5  0x000062b3cec578d6 in std::thread::_Invoker<std::tuple<void (*)()> >::operator() (this=0x62b3ee8a4b28) at /usr/include/c++/14.2.1/bits/std_thread.h:308
#6  0x000062b3cec577a0 in std::thread::_State_impl<std::thread::_Invoker<std::tuple<void (*)()> > >::_M_run (this=0x62b3ee8a4b20) at /usr/include/c++/14.2.1/bits/std_thread.h:253
#7  0x00007238cb0f9c74 in std::execute_native_thread_routine (__p=0x62b3ee8a4b20) at /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:104
#8  0x00007238cade5605 in ?? () from /usr/lib/libc.so.6
#9  0x00007238cae6837c in ?? () from /usr/lib/libc.so.6

Thread 5 (Thread 0x7238b77fe6c0 (LWP 13791)):
#0  0x00007238cae5bdaf in poll () from /usr/lib/libc.so.6
#1  0x000062b3ced85845 in run_pipewire (state=0x62b3cf171d60 <pipewire_state>) at ../src/pipewire.cpp:628
#2  0x000062b3ced87c1a in std::__invoke_impl<void, void (*)(pipewire_state*), pipewire_state*> (__f=@0x62b3eecfcf80: 0x62b3ced85756 <run_pipewire(pipewire_state*)>) at /usr/include/c++/14.2.1/bits/invoke.h:61
#3  0x000062b3ced87b8f in std::__invoke<void (*)(pipewire_state*), pipewire_state*> (__fn=@0x62b3eecfcf80: 0x62b3ced85756 <run_pipewire(pipewire_state*)>) at /usr/include/c++/14.2.1/bits/invoke.h:96
#4  0x000062b3ced87aff in std::thread::_Invoker<std::tuple<void (*)(pipewire_state*), pipewire_state*> >::_M_invoke<0ul, 1ul> (this=0x62b3eecfcf78) at /usr/include/c++/14.2.1/bits/std_thread.h:301
#5  0x000062b3ced87ab8 in std::thread::_Invoker<std::tuple<void (*)(pipewire_state*), pipewire_state*> >::operator() (this=0x62b3eecfcf78) at /usr/include/c++/14.2.1/bits/std_thread.h:308
#6  0x000062b3ced87a9c in std::thread::_State_impl<std::thread::_Invoker<std::tuple<void (*)(pipewire_state*), pipewire_state*> > >::_M_run (this=0x62b3eecfcf70) at /usr/include/c++/14.2.1/bits/std_thread.h:253
#7  0x00007238cb0f9c74 in std::execute_native_thread_routine (__p=0x62b3eecfcf70) at /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:104
#8  0x00007238cade5605 in ?? () from /usr/lib/libc.so.6
#9  0x00007238cae6837c in ?? () from /usr/lib/libc.so.6

Thread 4 (Thread 0x7238b6ffd6c0 (LWP 13792)):
#0  0x00007238cae685fa in epoll_wait () from /usr/lib/libc.so.6
#1  0x000062b3cec22680 in gamescope::CWaiter<1024ul>::PollEvents (this=0x62b3cf1de180 <g_SteamCompMgrWaiter>, nTimeOut=-1) at ../src/waitable.h:270
#2  0x000062b3cec1314f in steamcompmgr_main (argc=16, argv=0x7ffcf12e1ab8) at ../src/steamcompmgr.cpp:7723
#3  0x000062b3cec6d671 in steamCompMgrThreadRun (argc=16, argv=0x7ffcf12e1ab8) at ../src/main.cpp:1019
#4  0x000062b3cec6e737 in std::__invoke_impl<void, void (*)(int, char**), int, char**> (__f=@0x62b3eee259f8: 0x62b3cec6d637 <steamCompMgrThreadRun(int, char**)>) at /usr/include/c++/14.2.1/bits/invoke.h:61
#5  0x000062b3cec6e678 in std::__invoke<void (*)(int, char**), int, char**> (__fn=@0x62b3eee259f8: 0x62b3cec6d637 <steamCompMgrThreadRun(int, char**)>) at /usr/include/c++/14.2.1/bits/invoke.h:96
#6  0x000062b3cec6e5ab in std::thread::_Invoker<std::tuple<void (*)(int, char**), int, char**> >::_M_invoke<0ul, 1ul, 2ul> (this=0x62b3eee259e8) at /usr/include/c++/14.2.1/bits/std_thread.h:301
#7  0x000062b3cec6e548 in std::thread::_Invoker<std::tuple<void (*)(int, char**), int, char**> >::operator() (this=0x62b3eee259e8) at /usr/include/c++/14.2.1/bits/std_thread.h:308
#8  0x000062b3cec6e52c in std::thread::_State_impl<std::thread::_Invoker<std::tuple<void (*)(int, char**), int, char**> > >::_M_run (this=0x62b3eee259e0) at /usr/include/c++/14.2.1/bits/std_thread.h:253
#9  0x00007238cb0f9c74 in std::execute_native_thread_routine (__p=0x62b3eee259e0) at /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:104
#10 0x00007238cade5605 in ?? () from /usr/lib/libc.so.6
#11 0x00007238cae6837c in ?? () from /usr/lib/libc.so.6
--Type <RET> for more, q to quit, c to continue without paging--c

Thread 3 (Thread 0x7238c8fff6c0 (LWP 13749)):
#0  0x00007238cae685fa in epoll_wait () from /usr/lib/libc.so.6
#1  0x000062b3cec22680 in gamescope::CWaiter<1024ul>::PollEvents (this=0x62b3cf1de0c0 <g_ImageWaiter>, nTimeOut=-1) at ../src/waitable.h:270
#2  0x000062b3cec23d42 in gamescope::CAsyncWaiter<gamescope::Rc<commit_t, true>, 1024ul>::WaiterThreadFunc (this=0x62b3cf1de0c0 <g_ImageWaiter>, pszThreadName=0x62b3ceefcd32 "gamescope_img") at ../src/waitable.h:456
#3  0x000062b3cec1deee in gamescope::CAsyncWaiter<gamescope::Rc<commit_t, true>, 1024ul>::CAsyncWaiter(char const*)::{lambda()#1}::operator()() const (__closure=0x62b3ee7b0918) at ../src/waitable.h:380
#4  0x000062b3cec57a7d 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  0x000062b3cec579ed 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  0x000062b3cec57938 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=0x62b3ee7b0918) at /usr/include/c++/14.2.1/bits/std_thread.h:301
#7  0x000062b3cec578ba in std::thread::_Invoker<std::tuple<gamescope::CAsyncWaiter<gamescope::Rc<commit_t, true>, 1024ul>::CAsyncWaiter(char const*)::{lambda()#1}> >::operator()() (this=0x62b3ee7b0918) at /usr/include/c++/14.2.1/bits/std_thread.h:308
#8  0x000062b3cec57780 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=0x62b3ee7b0910) at /usr/include/c++/14.2.1/bits/std_thread.h:253
#9  0x00007238cb0f9c74 in std::execute_native_thread_routine (__p=0x62b3ee7b0910) at /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:104
#10 0x00007238cade5605 in ?? () from /usr/lib/libc.so.6
#11 0x00007238cae6837c in ?? () from /usr/lib/libc.so.6

Thread 2 (Thread 0x7238c87fe6c0 (LWP 13750)):
#0  0x00007238cae685fa in epoll_wait () from /usr/lib/libc.so.6
#1  0x000062b3cec22680 in gamescope::CWaiter<1024ul>::PollEvents (this=0x62b3cf2046a0 <g_LibEisWaiter>, nTimeOut=-1) at ../src/waitable.h:270
#2  0x000062b3cec83a52 in gamescope::CAsyncWaiter<gamescope::CRawPointer<gamescope::IWaitable>, 1024ul>::WaiterThreadFunc (this=0x62b3cf2046a0 <g_LibEisWaiter>, pszThreadName=0x62b3cef17a37 "gamescope-eis") at ../src/waitable.h:456
#3  0x000062b3cec7f652 in gamescope::CAsyncWaiter<gamescope::CRawPointer<gamescope::IWaitable>, 1024ul>::CAsyncWaiter(char const*)::{lambda()#1}::operator()() const (__closure=0x62b3ee7b2a28) at ../src/waitable.h:380
#4  0x000062b3cec91cab 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  0x000062b3cec91c35 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  0x000062b3cec91b76 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=0x62b3ee7b2a28) at /usr/include/c++/14.2.1/bits/std_thread.h:301
#7  0x000062b3cec91a82 in std::thread::_Invoker<std::tuple<gamescope::CAsyncWaiter<gamescope::CRawPointer<gamescope::IWaitable>, 1024ul>::CAsyncWaiter(char const*)::{lambda()#1}> >::operator()() (this=0x62b3ee7b2a28) at /usr/include/c++/14.2.1/bits/std_thread.h:308
#8  0x000062b3cec918aa 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=0x62b3ee7b2a20) at /usr/include/c++/14.2.1/bits/std_thread.h:253
#9  0x00007238cb0f9c74 in std::execute_native_thread_routine (__p=0x62b3ee7b2a20) at /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:104
#10 0x00007238cade5605 in ?? () from /usr/lib/libc.so.6
#11 0x00007238cae6837c in ?? () from /usr/lib/libc.so.6

Thread 1 (Thread 0x7238ca836000 (LWP 13748)):
#0  0x000062b3cec1e034 in std::__shared_ptr<gamescope::IBackendConnector, (__gnu_cxx::_Lock_policy)2>::get (this=0x68) at /usr/include/c++/14.2.1/bits/shared_ptr_base.h:1667
#1  0x000062b3cec1a9c0 in global_focus_t::GetNestedHints (this=0x0) at ../src/steamcompmgr.cpp:756
#2  0x000062b3cebfe33e in ShouldDrawCursor () at ../src/steamcompmgr.cpp:2273
#3  0x000062b3cec77cc3 in wlserver_oncursorevent () at ../src/wlserver.cpp:2111
#4  0x000062b3cec788d4 in wlserver_mousemotion (dx=1, dy=0, time=802065) at ../src/wlserver.cpp:2366
#5  0x000062b3cec730bc in wlserver_handle_pointer_motion (listener=0x62b3eed3d8f8, data=0x7ffcf12e14f0) at ../src/wlserver.cpp:345
#6  0x00007238cba9166e in wl_signal_emit_mutable () from /usr/lib/libwayland-server.so.0
#7  0x000062b3cee5a8f8 in handle_pointer_motion (event=0x62b3eec762b0, pointer=0x62b3eedb1e10) at ../subprojects/wlroots/backend/libinput/pointer.c:37
#8  0x000062b3cee5a28e in handle_libinput_event (backend=0x62b3eeb84a80, event=0x62b3eec762b0) at ../subprojects/wlroots/backend/libinput/events.c:161
#9  0x000062b3cee59322 in handle_libinput_readable (fd=45, mask=1, _backend=0x62b3eeb84a80) at ../subprojects/wlroots/backend/libinput/backend.c:59
#10 0x00007238cba93792 in wl_event_loop_dispatch () from /usr/lib/libwayland-server.so.0
#11 0x000062b3cec7767d in wlserver_run () at ../src/wlserver.cpp:1961
#12 0x000062b3cec6d5ce in main (argc=16, argv=0x7ffcf12e1ab8) at ../src/main.cpp:1007

SteamOS system report that shows a hang and game crash rather than a gamescope crash:

systemreport-20250122120839.txt

@matte-schwartz
Copy link
Author

matte-schwartz commented Jan 22, 2025

regressing commit is: 4da5e4a

edit: reverting does work

@matte-schwartz matte-schwartz changed the title Half-Life 2 crashes with up-to-date 32-bit Gamescope WSI layer present [Regression] - Half-Life 2 crashes with up-to-date 32-bit Gamescope WSI layer Jan 23, 2025
@matte-schwartz
Copy link
Author

Jan 26 20:32:39 rog-ally-x kernel: hl2_linux[2914]: segfault at 4 ip 00000000ed4728f1 sp 00000000ffa6fc5c error 4 in libc.so.6[d58f1,ed3bc000+1c9000] likely on CPU 11 (core 3, socket 0)
Jan 26 20:32:39 rog-ally-x kernel: Code: 00 00 21 c2 74 24 7a 17 38 30 0f 84 9f 00 00 00 40 38 30 0f 84 96 00 00 00 40 83 f2 02 74 0b 38 30 0f 84 88 00 00 00 40 31 d2 <8b> 08 83 c0 04 29 ca 81 c1 ff fe fe fe 4a 73 58 31 ca 81 e2 00 01
Jan 26 20:32:39 rog-ally-x systemd-coredump[2928]: Process 2914 (hl2_linux) of user 1000 terminated abnormally with signal 11/SEGV, processing...
Jan 26 20:32:39 rog-ally-x systemd[1]: Created slice Slice /system/systemd-coredump.
Jan 26 20:32:39 rog-ally-x systemd[1]: Started Process Core Dump (PID 2928/UID 0).
Jan 26 20:32:39 rog-ally-x steam[1341]: Adding process 2926 for gameID 220
Jan 26 20:32:40 rog-ally-x systemd-coredump[2929]: [🡕] Process 2914 (hl2_linux) of user 1000 dumped core.
                                                   
                                                   Stack trace of thread 2914:
                                                   #0  0x00000000ed4728f1 n/a (n/a + 0x0)
                                                   ELF object binary architecture: Intel 80386
Jan 26 20:32:40 rog-ally-x systemd[1]: systemd-coredump@0-2928-0.service: Deactivated successfully.
Jan 26 20:32:40 rog-ally-x systemd[1]: systemd-coredump@0-2928-0.service: Consumed 516ms CPU time, 263.1M memory peak.
Jan 26 20:32:40 rog-ally-x steam[1341]: /run/media/matt/SD Card/steamapps/common/Half-Life 2/hl2.sh: line 87:  2914 Segmentation fault      (core dumped) ${GAME_DEBUGGER} "${GAMEROOT}"/${GAMEEXE} "$@"
Jan 26 20:32:40 rog-ally-x steam[1341]: crash_20250126203239_2.dmp[2927]: Finished uploading minidump (out-of-process): success = yes
Jan 26 20:32:40 rog-ally-x steam[1341]: crash_20250126203239_2.dmp[2927]: response: CrashID=bp-ae721286-c11d-4300-95d0-21ec02250126
Jan 26 20:32:40 rog-ally-x steam[1341]: crash_20250126203239_2.dmp[2927]: file ''/tmp/dumps/crash_20250126203239_2.dmp'', upload yes: ''CrashID=bp-ae721286-c11d-4300-95d0-21ec02250126''
Jan 26 20:32:40 rog-ally-x steam[1341]: pid 2927 != 2926, skipping destruction (fork without exec?)

HL2 game dump uploaded here from gamescope -- %command% on Plasma 6 Wayland, Arch Linux

In addition, Grand Theft Auto IV also crashes gamescope with an up-to-date 32-bit layer:
Core was generated by `/usr/bin/gamescope -- /home/matt/.local/share/Steam/ubuntu12_32/steam-launch-wrapper -- /home/matt/.local/share/Steam/ubuntu12_32/reaper SteamLaunch AppId=12210 -- /home/matt/.local/share/Steam/steamapps/common/SteamLinuxRuntime_sniper/_v2-entry-point --verb=waitforexitandrun -- /home/matt/.local/share/Steam/steamapps/common/Proton\ 9.0\ \(Beta\)/proton waitforexitandrun /home/matt/.local/share/Steam/steamapps/common/Grand\ Theft\ Auto\ IV/GTAIV/PlayGTAIV.exe'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0  0x00007cd9644d1cf4 in wl_proxy_get_tag () from /usr/lib/libwayland-client.so.0
[Current thread is 1 (Thread 0x7cd95f1736c0 (LWP 32804))]
(gdb) thread apply all bt

Thread 13 (Thread 0x7cd943fff6c0 (LWP 32811)):
#0  0x00007cd96357c13a in ?? () from /usr/lib/libc.so.6
#1  0x00007cd96357edee in pthread_cond_wait () from /usr/lib/libc.so.6
#2  0x00007cd95813c86c in ?? () from /home/matt/.local/share/Steam/ubuntu12_64/libVkLayer_steam_fossilize.so
#3  0x00007cd95810a24b in ?? () from /home/matt/.local/share/Steam/ubuntu12_64/libVkLayer_steam_fossilize.so
#4  0x00007cd958151c10 in ?? () from /home/matt/.local/share/Steam/ubuntu12_64/libVkLayer_steam_fossilize.so
#5  0x00007cd963580036 in ?? () from /usr/lib/libc.so.6
#6  0x00007cd9636030fc in ?? () from /usr/lib/libc.so.6

Thread 12 (Thread 0x7cd937dfe6c0 (LWP 32829)):
#0  0x00007cd9635eb9ca in wait4 () from /usr/lib/libc.so.6
#1  0x000061ec8b2627ee in gamescope::Process::WaitForChild (nPid=32828) at ../gamescope/src/Utils/Process.cpp:137
#2  operator() (__closure=<optimized out>) at ../gamescope/src/steamcompmgr.cpp:7530
#3  std::__invoke_impl<void, LaunchNestedChildren(char**)::<lambda()> > (__f=...) at /usr/include/c++/14.2.1/bits/invoke.h:61
#4  std::__invoke<LaunchNestedChildren(char**)::<lambda()> > (__fn=...) at /usr/include/c++/14.2.1/bits/invoke.h:96
#5  std::thread::_Invoker<std::tuple<LaunchNestedChildren(char**)::<lambda()> > >::_M_invoke<0> (this=<optimized out>) at /usr/include/c++/14.2.1/bits/std_thread.h:301
#6  std::thread::_Invoker<std::tuple<LaunchNestedChildren(char**)::<lambda()> > >::operator() (this=<optimized out>) at /usr/include/c++/14.2.1/bits/std_thread.h:308
#7  std::thread::_State_impl<std::thread::_Invoker<std::tuple<LaunchNestedChildren(char**)::<lambda()> > > >::_M_run(void) (this=<optimized out>) at /usr/include/c++/14.2.1/bits/std_thread.h:253
#8  0x00007cd9638f9c74 in std::execute_native_thread_routine (__p=0x7cd92c19ca00) at /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:104
#9  0x00007cd963580036 in ?? () from /usr/lib/libc.so.6
#10 0x00007cd9636030fc in ?? () from /usr/lib/libc.so.6

Thread 11 (Thread 0x7cd95a5fe6c0 (LWP 32806)):
#0  0x00007cd9635f6ead in ppoll () from /usr/lib/libc.so.6
#1  0x00007cd96296b371 in ?? () from /usr/lib/libglib-2.0.so.0
#2  0x00007cd9628f7552 in g_main_context_iteration () from /usr/lib/libglib-2.0.so.0
#3  0x00007cd9628f75a2 in ?? () from /usr/lib/libglib-2.0.so.0
#4  0x00007cd962936a55 in ?? () from /usr/lib/libglib-2.0.so.0
#5  0x00007cd963580036 in ?? () from /usr/lib/libc.so.6
#6  0x00007cd9636030fc in ?? () from /usr/lib/libc.so.6

Thread 10 (Thread 0x7cd962d6cf40 (LWP 32801)):
#0  0x00007cd9635f68ef in poll () from /usr/lib/libc.so.6
#1  0x000061ec8b26e845 in poll (__fds=<optimized out>, __nfds=<optimized out>, __timeout=<optimized out>, __fds=<optimized out>, __nfds=<optimized out>, __timeout=<optimized out>) at /usr/include/bits/poll2.h:44
#2  wlserver_run () at ../gamescope/src/wlserver.cpp:1942
#3  0x000061ec8b1e5422 in main (argc=14, argv=0x7ffdc5434468) at ../gamescope/src/main.cpp:1007

Thread 9 (Thread 0x7cd9385ff6c0 (LWP 32810)):
#0  0x00007cd96357c13a in ?? () from /usr/lib/libc.so.6
#1  0x00007cd96357edee in pthread_cond_wait () from /usr/lib/libc.so.6
#2  0x00007cd93892a93e in ?? () from /usr/lib/libvulkan_radeon.so
#3  0x00007cd9388e4f3c in ?? () from /usr/lib/libvulkan_radeon.so
--Type <RET> for more, q to quit, c to continue without paging--c
#4  0x00007cd93892a89c in ?? () from /usr/lib/libvulkan_radeon.so
#5  0x00007cd963580036 in ?? () from /usr/lib/libc.so.6
#6  0x00007cd9636030fc in ?? () from /usr/lib/libc.so.6

Thread 8 (Thread 0x7cd93a7ff6c0 (LWP 32826)):
#0  0x00007cd9635f68ef in poll () from /usr/lib/libc.so.6
#1  0x000061ec8b2c1223 in poll (__fds=<optimized out>, __nfds=<optimized out>, __timeout=<optimized out>, __fds=<optimized out>, __nfds=<optimized out>, __timeout=<optimized out>) at /usr/include/bits/poll2.h:44
#2  run_pipewire (state=0x61ec8b4ee900 <_ZL14pipewire_state.lto_priv.0>) at ../gamescope/src/pipewire.cpp:628
#3  0x00007cd9638f9c74 in std::execute_native_thread_routine (__p=0x61ec9f3665d0) at /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:104
#4  0x00007cd963580036 in ?? () from /usr/lib/libc.so.6
#5  0x00007cd9636030fc in ?? () from /usr/lib/libc.so.6

Thread 7 (Thread 0x7cd958dfb6c0 (LWP 32809)):
#0  0x00007cd9635f6ead in ppoll () from /usr/lib/libc.so.6
#1  0x00007cd96296b371 in ?? () from /usr/lib/libglib-2.0.so.0
#2  0x00007cd9628f7552 in g_main_context_iteration () from /usr/lib/libglib-2.0.so.0
#3  0x00007cd95cebaf5e in ?? () from /usr/lib/gio/modules/libdconfsettings.so
#4  0x00007cd962936a55 in ?? () from /usr/lib/libglib-2.0.so.0
#5  0x00007cd963580036 in ?? () from /usr/lib/libc.so.6
#6  0x00007cd9636030fc in ?? () from /usr/lib/libc.so.6

Thread 6 (Thread 0x7cd939ffe6c0 (LWP 32827)):
#0  0x00007cd96360337a in epoll_wait () from /usr/lib/libc.so.6
#1  0x000061ec8b3b7f85 in gamescope::CWaiter<1024ul>::PollEvents(int) [clone .constprop.0] [clone .isra.0] (nTimeOut=<optimized out>, this=<optimized out>) at ../gamescope/src/waitable.h:270
#2  0x000061ec8b25af35 in steamcompmgr_main (argc=<optimized out>, argv=<optimized out>) at ../gamescope/src/steamcompmgr.cpp:7727
#3  0x000061ec8b26469f in steamCompMgrThreadRun (argc=14, argv=0x7ffdc5434468) at ../gamescope/src/main.cpp:1019
#4  0x00007cd9638f9c74 in std::execute_native_thread_routine (__p=0x61ec9f367390) at /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:104
#5  0x00007cd963580036 in ?? () from /usr/lib/libc.so.6
#6  0x00007cd9636030fc in ?? () from /usr/lib/libc.so.6

Thread 5 (Thread 0x7cd9595fc6c0 (LWP 32808)):
#0  0x00007cd9635f6ead in ppoll () from /usr/lib/libc.so.6
#1  0x00007cd96296b371 in ?? () from /usr/lib/libglib-2.0.so.0
#2  0x00007cd9628fd8af in g_main_loop_run () from /usr/lib/libglib-2.0.so.0
#3  0x00007cd95e4a2efc in ?? () from /usr/lib/libgio-2.0.so.0
#4  0x00007cd962936a55 in ?? () from /usr/lib/libglib-2.0.so.0
#5  0x00007cd963580036 in ?? () from /usr/lib/libc.so.6
#6  0x00007cd9636030fc in ?? () from /usr/lib/libc.so.6

Thread 4 (Thread 0x7cd95adff6c0 (LWP 32805)):
#0  0x00007cd9636005cd in syscall () from /usr/lib/libc.so.6
#1  0x00007cd962932b77 in g_cond_wait () from /usr/lib/libglib-2.0.so.0
#2  0x00007cd9628b972c in g_async_queue_pop_unlocked () from /usr/lib/libglib-2.0.so.0
#3  0x00007cd9629392c6 in ?? () from /usr/lib/libglib-2.0.so.0
#4  0x00007cd962936a55 in ?? () from /usr/lib/libglib-2.0.so.0
#5  0x00007cd963580036 in ?? () from /usr/lib/libc.so.6
#6  0x00007cd9636030fc in ?? () from /usr/lib/libc.so.6

Thread 3 (Thread 0x7cd95f9746c0 (LWP 32803)):
#0  0x00007cd96360337a in epoll_wait () from /usr/lib/libc.so.6
#1  0x000061ec8b3b7df5 in gamescope::CWaiter<1024ul>::PollEvents(int) [clone .constprop.1] [clone .isra.0] (this=this@entry=0x61ec8b55d440 <g_ImageWaiter>, nTimeOut=-1) at ../gamescope/src/waitable.h:270
#2  0x000061ec8b262488 in gamescope::CAsyncWaiter<gamescope::Rc<commit_t, true>, 1024ul>::WaiterThreadFunc (this=0x61ec8b55d440 <g_ImageWaiter>, pszThreadName=<optimized out>) at ../gamescope/src/waitable.h:456
#3  gamescope::CAsyncWaiter<gamescope::Rc<commit_t, true>, 1024ul>::CAsyncWaiter(char const*)::{lambda()#1}::operator()() const (__closure=<optimized out>) at ../gamescope/src/waitable.h:380
#4  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  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  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=<optimized out>) at /usr/include/c++/14.2.1/bits/std_thread.h:301
#7  std::thread::_Invoker<std::tuple<gamescope::CAsyncWaiter<gamescope::Rc<commit_t, true>, 1024ul>::CAsyncWaiter(char const*)::{lambda()#1}> >::operator()() (this=<optimized out>) at /usr/include/c++/14.2.1/bits/std_thread.h:308
#8  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=<optimized out>) at /usr/include/c++/14.2.1/bits/std_thread.h:253
#9  0x00007cd9638f9c74 in std::execute_native_thread_routine (__p=0x61ec9ef67560) at /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:104
#10 0x00007cd963580036 in ?? () from /usr/lib/libc.so.6
#11 0x00007cd9636030fc in ?? () from /usr/lib/libc.so.6

Thread 2 (Thread 0x7cd9601756c0 (LWP 32802)):
#0  0x00007cd96360337a in epoll_wait () from /usr/lib/libc.so.6
#1  0x000061ec8b3b7df5 in gamescope::CWaiter<1024ul>::PollEvents(int) [clone .constprop.1] [clone .isra.0] (this=this@entry=0x61ec8b5825a0 <_ZL14g_LibEisWaiter.lto_priv.0>, nTimeOut=-1) at ../gamescope/src/waitable.h:270
#2  0x000061ec8b26dcd8 in gamescope::CAsyncWaiter<gamescope::CRawPointer<gamescope::IWaitable>, 1024ul>::WaiterThreadFunc (this=0x61ec8b5825a0 <_ZL14g_LibEisWaiter.lto_priv.0>, pszThreadName=0x61ec8b3de3b4 "gamescope-eis") at ../gamescope/src/waitable.h:456
#3  gamescope::CAsyncWaiter<gamescope::CRawPointer<gamescope::IWaitable>, 1024ul>::CAsyncWaiter(char const*)::{lambda()#1}::operator()() const (__closure=<optimized out>) at ../gamescope/src/waitable.h:380
#4  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  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  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=<optimized out>) at /usr/include/c++/14.2.1/bits/std_thread.h:301
#7  std::thread::_Invoker<std::tuple<gamescope::CAsyncWaiter<gamescope::CRawPointer<gamescope::IWaitable>, 1024ul>::CAsyncWaiter(char const*)::{lambda()#1}> >::operator()() (this=<optimized out>) at /usr/include/c++/14.2.1/bits/std_thread.h:308
#8  std::thread::_State_impl<std::thread::_Invoker<std::tuple<gamescope::CAsyncWaiter<gamescope::CRawPointer<gamescope::IWaitable>, 1024ul>::CAsyncWaiter(char const*)::{lambda()#1}> > >::_M_run() (this=<optimized out>) at /usr/include/c++/14.2.1/bits/std_thread.h:253
#9  0x00007cd9638f9c74 in std::execute_native_thread_routine (__p=0x61ec9ef66540) at /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:104
#10 0x00007cd963580036 in ?? () from /usr/lib/libc.so.6
#11 0x00007cd9636030fc in ?? () from /usr/lib/libc.so.6

Thread 1 (Thread 0x7cd95f1736c0 (LWP 32804)):
#0  0x00007cd9644d1cf4 in wl_proxy_get_tag () from /usr/lib/libwayland-client.so.0
#1  0x000061ec8b215a29 in IsSurfacePlane (pSurface=0x0) at ../gamescope/src/Backends/WaylandBackend.cpp:79
#2  gamescope::CWaylandInputThread::Wayland_Pointer_Leave (this=0x61ec9ef72b58, pPointer=<optimized out>, uSerial=<optimized out>, pSurface=0x0) at ../gamescope/src/Backends/WaylandBackend.cpp:2804
#3  operator()<wl_pointer*, unsigned int, wl_surface*> (__closure=0x0, pData=0x61ec9ef72b58) at ../gamescope/src/Backends/WaylandBackend.cpp:547
#4  _FUN<wl_pointer*, unsigned int, wl_surface*> () at ../gamescope/src/Backends/WaylandBackend.cpp:547
#5  0x00007cd96346848e in ?? () from /usr/lib/libffi.so.8
#6  0x00007cd963464283 in ?? () from /usr/lib/libffi.so.8
#7  0x00007cd9634677fe in ffi_call () from /usr/lib/libffi.so.8
#8  0x00007cd9644d1814 in ?? () from /usr/lib/libwayland-client.so.0
#9  0x00007cd9644d2109 in ?? () from /usr/lib/libwayland-client.so.0
#10 0x00007cd9644d253b in wl_display_dispatch_queue_pending () from /usr/lib/libwayland-client.so.0
#11 0x000061ec8b2184a0 in gamescope::CWaylandInputThread::ThreadFunc (this=0x61ec9ef72b58) at ../gamescope/src/Backends/WaylandBackend.cpp:2584
#12 operator() (__closure=<optimized out>) at ../gamescope/src/Backends/WaylandBackend.cpp:2505
#13 std::__invoke_impl<void, gamescope::CWaylandInputThread::CWaylandInputThread()::<lambda()> > (__f=...) at /usr/include/c++/14.2.1/bits/invoke.h:61
#14 std::__invoke<gamescope::CWaylandInputThread::CWaylandInputThread()::<lambda()> > (__fn=...) at /usr/include/c++/14.2.1/bits/invoke.h:96
#15 std::thread::_Invoker<std::tuple<gamescope::CWaylandInputThread::CWaylandInputThread()::<lambda()> > >::_M_invoke<0> (this=<optimized out>) at /usr/include/c++/14.2.1/bits/std_thread.h:301
#16 std::thread::_Invoker<std::tuple<gamescope::CWaylandInputThread::CWaylandInputThread()::<lambda()> > >::operator() (this=<optimized out>) at /usr/include/c++/14.2.1/bits/std_thread.h:308
#17 std::thread::_State_impl<std::thread::_Invoker<std::tuple<gamescope::CWaylandInputThread::CWaylandInputThread()::<lambda()> > > >::_M_run(void) (this=<optimized out>) at /usr/include/c++/14.2.1/bits/std_thread.h:253
#18 0x00007cd9638f9c74 in std::execute_native_thread_routine (__p=0x61ec9ef6e1c0) at /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:104
#19 0x00007cd963580036 in ?? () from /usr/lib/libc.so.6
#20 0x00007cd9636030fc in ?? () from /usr/lib/libc.so.6

@matte-schwartz matte-schwartz changed the title [Regression] - Half-Life 2 crashes with up-to-date 32-bit Gamescope WSI layer [Regression] - Titles that use 32-bit executables crash with up-to-date 32-bit Gamescope WSI layer Feb 1, 2025
matte-schwartz added a commit to matte-schwartz/gamescope that referenced this issue Feb 1, 2025
fprintf pointers added in "layer: Fix oldSwapchain when going in/out of
XWayland bypassing" will crash when executed in the 32-bit WSI layer.
The compiler also warns about pointer usage:

 1085 |       fprintf(stderr, "[Gamescope WSI] Destroying swapchain: %p\n", swapchain);
      |                                                              ~^     ~~~~~~~~~
      |                                                               |     |
      |                                                               void* VkSwapchainKHR {aka long long unsigned int}
      |                                                              %lld

 1087 |       fprintf(stderr, "[Gamescope WSI] Destroyed swapchain: %p\n", swapchain);
      |                                                             ~^     ~~~~~~~~~
      |                                                              |     |
      |                                                              void* VkSwapchainKHR {aka long long unsigned int}
      |                                                             %lld

 1167 |       fprintf(stderr, "[Gamescope WSI] Creating swapchain for xid: 0x%0x - oldSwapchain: %p - provided minImageCount: %u - minImageCount: %u - format: %s - colorspace: %s - flip: %s\n",
      |                                                                                          ~^
      |                                                                                           |
      |                                                                                           void*
      |                                                                                          %lld
 1168 |         gamescopeSurface->window,
 1169 |         pCreateInfo->oldSwapchain,
      |         ~~~~~~~~~~~~~~~~~~~~~~~~~
      |                      |
      |                      long long unsigned int

 1248 |       fprintf(stderr, "[Gamescope WSI] Created swapchain for xid: 0x%0x swapchain: %p - imageCount: %u\n",
      |                                                                                    ~^
      |                                                                                     |
      |                                                                                     void*
      |                                                                                    %lld
 1249 |         gamescopeSurface->window,
 1250 |         *pSwapchain,
      |         ~~~~~~~~~~~
      |         |
      |         VkSwapchainKHR {aka long long unsigned int}

Address these issues by casting the pointers to void, ensuring both
64-bit and 32-bit layers perform as expected.

Closes: ValveSoftware#1718
Closes: ValveSoftware#1736
matte-schwartz added a commit to matte-schwartz/gamescope that referenced this issue Feb 1, 2025
Some fprintf pointers added in "layer: Fix oldSwapchain when going in/out
of XWayland bypassing" will crash when executed in the 32-bit WSI layer.

GCC also warns about the pointer usage with:

```
 1085 |       fprintf(stderr, "[Gamescope WSI] Destroying swapchain: %p\n", swapchain);
      |                                                              ~^     ~~~~~~~~~
      |                                                               |     |
      |                                                               void* VkSwapchainKHR {aka long long unsigned int}
      |                                                              %lld

 1087 |       fprintf(stderr, "[Gamescope WSI] Destroyed swapchain: %p\n", swapchain);
      |                                                             ~^     ~~~~~~~~~
      |                                                              |     |
      |                                                              void* VkSwapchainKHR {aka long long unsigned int}
      |                                                             %lld

 1167 |       fprintf(stderr, "[Gamescope WSI] Creating swapchain for xid: 0x%0x - oldSwapchain: %p - provided minImageCount: %u - minImageCount: %u - format: %s - colorspace: %s - flip: %s\n",
      |                                                                                          ~^
      |                                                                                           |
      |                                                                                           void*
      |                                                                                          %lld
 1168 |         gamescopeSurface->window,
 1169 |         pCreateInfo->oldSwapchain,
      |         ~~~~~~~~~~~~~~~~~~~~~~~~~
      |                      |
      |                      long long unsigned int

 1248 |       fprintf(stderr, "[Gamescope WSI] Created swapchain for xid: 0x%0x swapchain: %p - imageCount: %u\n",
      |                                                                                    ~^
      |                                                                                     |
      |                                                                                     void*
      |                                                                                    %lld
 1249 |         gamescopeSurface->window,
 1250 |         *pSwapchain,
      |         ~~~~~~~~~~~
      |         |
      |         VkSwapchainKHR {aka long long unsigned int}
```

To keep it simple, let's just cast the problematic pointers to void*.

Closes:  ValveSoftware#1718
Closes:  ValveSoftware#1736
matte-schwartz added a commit to matte-schwartz/gamescope that referenced this issue Feb 1, 2025
Some fprintf pointers added in "layer: Fix oldSwapchain when going in/out
of XWayland bypassing" will crash when executed in the 32-bit WSI layer.

GCC also warns about the pointer usage when compiling the 32-bit layer:
"warning: format ‘%p’ expects argument of type ‘void*’, but argument 3
has type ‘VkSwapchainKHR’ {aka ‘long long unsigned int’} [-Wformat=]"

To keep it simple, let's just reinterpret_cast the problematic pointers
to void*.

Closes:  ValveSoftware#1718
Closes:  ValveSoftware#1736
matte-schwartz added a commit to matte-schwartz/gamescope that referenced this issue Feb 1, 2025
Some fprintf pointers added in "layer: Fix oldSwapchain when going in/out
of XWayland bypassing" will crash when executed in the 32-bit WSI layer.

GCC also warns about the pointer usage when compiling the 32-bit layer:
"warning: format ‘%p’ expects argument of type ‘void*’, but argument 3
has type ‘VkSwapchainKHR’ {aka ‘long long unsigned int’} [-Wformat=]"

To keep it simple, let's just reinterpret_cast the problematic pointers
to void*.

Closes:  ValveSoftware#1718
Closes:  ValveSoftware#1736
@matte-schwartz matte-schwartz linked a pull request Feb 1, 2025 that will close this issue
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

Successfully merging a pull request may close this issue.

1 participant