gfx-rs / wgpu

A cross-platform, safe, pure-Rust graphics API.
https://wgpu.rs
Apache License 2.0
12.32k stars 906 forks source link

Vulkan backend in renderdoc with wayland #3889

Open nical opened 1 year ago

nical commented 1 year ago

Description

The vulkan backend fails to initialize in renderdoc on wayland.

I am not sure where the responsibility lie between wgpu, winit and renderdoc. I'll document what I know here for future reference because I periodically forget and re-investigate the issue:

I wonder whether when we get to create_surface_from_wayland it is still possible initialize the surface via another method or whether the presence of the extension should be checked earlier. Ideally wgpu applications would work in renderdoc with wayland without having to know about forcing the X11 backend.

Workaround

As far as local testing goes, using winit's x11 backend seems to be a sufficient workaround (set the WINIT_UNIX_BACKEND environment variable to "x11").

Repro steps

Run any of this repository's examples in renderdoc with the WGPU_BACKEND environment variable set to "vulkan" under wayland.

Platform

Linux with wayland

cwfitzgerald commented 1 year ago

I'm not really sure what a good option we have. By the time we have the wayland pointer, the window has already been made by winit.

We might be able to expose "Linux window system support" on an adapter, but winit has no way to decide programmatically but via an env var. This also feels very specific to this exact situation.

Maybe the best option is an error message that suggests the workaround (if renderdoc is found injected).

nical commented 1 year ago

Maybe the best option is an error message that suggests the workaround (if renderdoc is found injected).

That sounds very reasonable. I don´t know if we can easily know that renderdoc was injected but we can at least see that VK_KHR_xlib_surface is present and suggest starting the app in "x11 mode" and link back to a wiki page or this issue with specific instructions about winit (which is presubmably what most people use to create the window).