Skip to content

Commit 71215db

Browse files
authored
Fix WSL support, update troubleshooting guide (#8610)
1 parent 4b8a487 commit 71215db

File tree

17 files changed

+163
-99
lines changed

17 files changed

+163
-99
lines changed

Cargo.lock

+42-12
Original file line numberDiff line numberDiff line change
@@ -1948,7 +1948,7 @@ checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125"
19481948
[[package]]
19491949
name = "ecolor"
19501950
version = "0.30.0"
1951-
source = "git+https://github.com/emilk/egui.git?rev=938d8b0d2e2a551ac354d76d6208188e5942b21e#938d8b0d2e2a551ac354d76d6208188e5942b21e"
1951+
source = "git+https://github.com/emilk/egui.git?rev=f0d7c74e838b8e8920a22e7515990fbe057ec218#f0d7c74e838b8e8920a22e7515990fbe057ec218"
19521952
dependencies = [
19531953
"bytemuck",
19541954
"color-hex",
@@ -1965,7 +1965,7 @@ checksum = "18aade80d5e09429040243ce1143ddc08a92d7a22820ac512610410a4dd5214f"
19651965
[[package]]
19661966
name = "eframe"
19671967
version = "0.30.0"
1968-
source = "git+https://github.com/emilk/egui.git?rev=938d8b0d2e2a551ac354d76d6208188e5942b21e#938d8b0d2e2a551ac354d76d6208188e5942b21e"
1968+
source = "git+https://github.com/emilk/egui.git?rev=f0d7c74e838b8e8920a22e7515990fbe057ec218#f0d7c74e838b8e8920a22e7515990fbe057ec218"
19691969
dependencies = [
19701970
"ahash",
19711971
"bytemuck",
@@ -2004,11 +2004,12 @@ dependencies = [
20042004
[[package]]
20052005
name = "egui"
20062006
version = "0.30.0"
2007-
source = "git+https://github.com/emilk/egui.git?rev=938d8b0d2e2a551ac354d76d6208188e5942b21e#938d8b0d2e2a551ac354d76d6208188e5942b21e"
2007+
source = "git+https://github.com/emilk/egui.git?rev=f0d7c74e838b8e8920a22e7515990fbe057ec218#f0d7c74e838b8e8920a22e7515990fbe057ec218"
20082008
dependencies = [
20092009
"accesskit",
20102010
"ahash",
20112011
"backtrace",
2012+
"bitflags 2.6.0",
20122013
"emath",
20132014
"epaint",
20142015
"log",
@@ -2021,7 +2022,7 @@ dependencies = [
20212022
[[package]]
20222023
name = "egui-wgpu"
20232024
version = "0.30.0"
2024-
source = "git+https://github.com/emilk/egui.git?rev=938d8b0d2e2a551ac354d76d6208188e5942b21e#938d8b0d2e2a551ac354d76d6208188e5942b21e"
2025+
source = "git+https://github.com/emilk/egui.git?rev=f0d7c74e838b8e8920a22e7515990fbe057ec218#f0d7c74e838b8e8920a22e7515990fbe057ec218"
20252026
dependencies = [
20262027
"ahash",
20272028
"bytemuck",
@@ -2040,7 +2041,7 @@ dependencies = [
20402041
[[package]]
20412042
name = "egui-winit"
20422043
version = "0.30.0"
2043-
source = "git+https://github.com/emilk/egui.git?rev=938d8b0d2e2a551ac354d76d6208188e5942b21e#938d8b0d2e2a551ac354d76d6208188e5942b21e"
2044+
source = "git+https://github.com/emilk/egui.git?rev=f0d7c74e838b8e8920a22e7515990fbe057ec218#f0d7c74e838b8e8920a22e7515990fbe057ec218"
20442045
dependencies = [
20452046
"accesskit_winit",
20462047
"ahash",
@@ -2081,7 +2082,7 @@ dependencies = [
20812082
[[package]]
20822083
name = "egui_extras"
20832084
version = "0.30.0"
2084-
source = "git+https://github.com/emilk/egui.git?rev=938d8b0d2e2a551ac354d76d6208188e5942b21e#938d8b0d2e2a551ac354d76d6208188e5942b21e"
2085+
source = "git+https://github.com/emilk/egui.git?rev=f0d7c74e838b8e8920a22e7515990fbe057ec218#f0d7c74e838b8e8920a22e7515990fbe057ec218"
20852086
dependencies = [
20862087
"ahash",
20872088
"egui",
@@ -2098,7 +2099,7 @@ dependencies = [
20982099
[[package]]
20992100
name = "egui_glow"
21002101
version = "0.30.0"
2101-
source = "git+https://github.com/emilk/egui.git?rev=938d8b0d2e2a551ac354d76d6208188e5942b21e#938d8b0d2e2a551ac354d76d6208188e5942b21e"
2102+
source = "git+https://github.com/emilk/egui.git?rev=f0d7c74e838b8e8920a22e7515990fbe057ec218#f0d7c74e838b8e8920a22e7515990fbe057ec218"
21022103
dependencies = [
21032104
"ahash",
21042105
"bytemuck",
@@ -2115,7 +2116,7 @@ dependencies = [
21152116
[[package]]
21162117
name = "egui_kittest"
21172118
version = "0.30.0"
2118-
source = "git+https://github.com/emilk/egui.git?rev=938d8b0d2e2a551ac354d76d6208188e5942b21e#938d8b0d2e2a551ac354d76d6208188e5942b21e"
2119+
source = "git+https://github.com/emilk/egui.git?rev=f0d7c74e838b8e8920a22e7515990fbe057ec218#f0d7c74e838b8e8920a22e7515990fbe057ec218"
21192120
dependencies = [
21202121
"dify",
21212122
"eframe",
@@ -2124,12 +2125,13 @@ dependencies = [
21242125
"image",
21252126
"kittest",
21262127
"pollster 0.4.0",
2128+
"wgpu",
21272129
]
21282130

21292131
[[package]]
21302132
name = "egui_plot"
21312133
version = "0.30.0"
2132-
source = "git+https://github.com/emilk/egui_plot.git?rev=4a16b8842aa39e6ea6b6c9c98afe20e060e767b6#4a16b8842aa39e6ea6b6c9c98afe20e060e767b6"
2134+
source = "git+https://github.com/emilk/egui_plot.git?rev=80e2199a2e121db288fe6b0099d91c35acc75a7c#80e2199a2e121db288fe6b0099d91c35acc75a7c"
21332135
dependencies = [
21342136
"ahash",
21352137
"egui",
@@ -2185,7 +2187,7 @@ checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0"
21852187
[[package]]
21862188
name = "emath"
21872189
version = "0.30.0"
2188-
source = "git+https://github.com/emilk/egui.git?rev=938d8b0d2e2a551ac354d76d6208188e5942b21e#938d8b0d2e2a551ac354d76d6208188e5942b21e"
2190+
source = "git+https://github.com/emilk/egui.git?rev=f0d7c74e838b8e8920a22e7515990fbe057ec218#f0d7c74e838b8e8920a22e7515990fbe057ec218"
21892191
dependencies = [
21902192
"bytemuck",
21912193
"serde",
@@ -2301,7 +2303,7 @@ dependencies = [
23012303
[[package]]
23022304
name = "epaint"
23032305
version = "0.30.0"
2304-
source = "git+https://github.com/emilk/egui.git?rev=938d8b0d2e2a551ac354d76d6208188e5942b21e#938d8b0d2e2a551ac354d76d6208188e5942b21e"
2306+
source = "git+https://github.com/emilk/egui.git?rev=f0d7c74e838b8e8920a22e7515990fbe057ec218#f0d7c74e838b8e8920a22e7515990fbe057ec218"
23052307
dependencies = [
23062308
"ab_glyph",
23072309
"ahash",
@@ -2320,7 +2322,7 @@ dependencies = [
23202322
[[package]]
23212323
name = "epaint_default_fonts"
23222324
version = "0.30.0"
2323-
source = "git+https://github.com/emilk/egui.git?rev=938d8b0d2e2a551ac354d76d6208188e5942b21e#938d8b0d2e2a551ac354d76d6208188e5942b21e"
2325+
source = "git+https://github.com/emilk/egui.git?rev=f0d7c74e838b8e8920a22e7515990fbe057ec218#f0d7c74e838b8e8920a22e7515990fbe057ec218"
23242326

23252327
[[package]]
23262328
name = "equivalent"
@@ -2908,6 +2910,18 @@ dependencies = [
29082910
"bitflags 2.6.0",
29092911
]
29102912

2913+
[[package]]
2914+
name = "gpu-allocator"
2915+
version = "0.27.0"
2916+
source = "registry+https://github.com/rust-lang/crates.io-index"
2917+
checksum = "c151a2a5ef800297b4e79efa4f4bec035c5f51d5ae587287c9b952bdf734cacd"
2918+
dependencies = [
2919+
"log",
2920+
"presser",
2921+
"thiserror 1.0.65",
2922+
"windows 0.58.0",
2923+
]
2924+
29112925
[[package]]
29122926
name = "gpu-descriptor"
29132927
version = "0.3.0"
@@ -5118,6 +5132,12 @@ dependencies = [
51185132
"zerocopy",
51195133
]
51205134

5135+
[[package]]
5136+
name = "presser"
5137+
version = "0.3.1"
5138+
source = "registry+https://github.com/rust-lang/crates.io-index"
5139+
checksum = "e8cf8e6a8aa66ce33f63993ffc4ea4271eb5b0530a9002db8455ea6050c77bfa"
5140+
51215141
[[package]]
51225142
name = "prettyplease"
51235143
version = "0.2.25"
@@ -5462,6 +5482,12 @@ dependencies = [
54625482
"rand",
54635483
]
54645484

5485+
[[package]]
5486+
name = "range-alloc"
5487+
version = "0.1.3"
5488+
source = "registry+https://github.com/rust-lang/crates.io-index"
5489+
checksum = "9c8a99fddc9f0ba0a85884b8d14e3592853e787d581ca1816c91349b10e4eeab"
5490+
54655491
[[package]]
54665492
name = "raw-cpuid"
54675493
version = "11.2.0"
@@ -9723,6 +9749,7 @@ dependencies = [
97239749
"android_system_properties",
97249750
"arrayvec",
97259751
"ash",
9752+
"bit-set",
97269753
"bitflags 2.6.0",
97279754
"block",
97289755
"bytemuck",
@@ -9731,6 +9758,7 @@ dependencies = [
97319758
"glow 0.14.2",
97329759
"glutin_wgl_sys",
97339760
"gpu-alloc",
9761+
"gpu-allocator",
97349762
"gpu-descriptor",
97359763
"js-sys",
97369764
"khronos-egl",
@@ -9744,6 +9772,7 @@ dependencies = [
97449772
"once_cell",
97459773
"parking_lot",
97469774
"profiling",
9775+
"range-alloc",
97479776
"raw-window-handle",
97489777
"renderdoc-sys",
97499778
"rustc-hash 1.1.0",
@@ -9753,6 +9782,7 @@ dependencies = [
97539782
"web-sys",
97549783
"wgpu-types",
97559784
"windows 0.58.0",
9785+
"windows-core 0.58.0",
97569786
]
97579787

97589788
[[package]]

Cargo.toml

+8-8
Original file line numberDiff line numberDiff line change
@@ -558,13 +558,13 @@ significant_drop_tightening = "allow" # An update of parking_lot made this trigg
558558
# As a last resport, patch with a commit to our own repository.
559559
# ALWAYS document what PR the commit hash is part of, or when it was merged into the upstream trunk.
560560

561-
ecolor = { git = "https://github.com/emilk/egui.git", rev = "938d8b0d2e2a551ac354d76d6208188e5942b21e" } # egui master 2025-01-03
562-
eframe = { git = "https://github.com/emilk/egui.git", rev = "938d8b0d2e2a551ac354d76d6208188e5942b21e" } # egui master 2025-01-03
563-
egui = { git = "https://github.com/emilk/egui.git", rev = "938d8b0d2e2a551ac354d76d6208188e5942b21e" } # egui master 2025-01-03
564-
egui_extras = { git = "https://github.com/emilk/egui.git", rev = "938d8b0d2e2a551ac354d76d6208188e5942b21e" } # egui master 2025-01-03
565-
egui_kittest = { git = "https://github.com/emilk/egui.git", rev = "938d8b0d2e2a551ac354d76d6208188e5942b21e" } # egui master 2025-01-03
566-
egui-wgpu = { git = "https://github.com/emilk/egui.git", rev = "938d8b0d2e2a551ac354d76d6208188e5942b21e" } # egui master 2025-01-03
567-
emath = { git = "https://github.com/emilk/egui.git", rev = "938d8b0d2e2a551ac354d76d6208188e5942b21e" } # egui master 2025-01-03
561+
ecolor = { git = "https://github.com/emilk/egui.git", rev = "f0d7c74e838b8e8920a22e7515990fbe057ec218" } # egui master 2025-01-08
562+
eframe = { git = "https://github.com/emilk/egui.git", rev = "f0d7c74e838b8e8920a22e7515990fbe057ec218" } # egui master 2025-01-08
563+
egui = { git = "https://github.com/emilk/egui.git", rev = "f0d7c74e838b8e8920a22e7515990fbe057ec218" } # egui master 2025-01-08
564+
egui_extras = { git = "https://github.com/emilk/egui.git", rev = "f0d7c74e838b8e8920a22e7515990fbe057ec218" } # egui master 2025-01-08
565+
egui_kittest = { git = "https://github.com/emilk/egui.git", rev = "f0d7c74e838b8e8920a22e7515990fbe057ec218" } # egui master 2025-01-08
566+
egui-wgpu = { git = "https://github.com/emilk/egui.git", rev = "f0d7c74e838b8e8920a22e7515990fbe057ec218" } # egui master 2025-01-08
567+
emath = { git = "https://github.com/emilk/egui.git", rev = "f0d7c74e838b8e8920a22e7515990fbe057ec218" } # egui master 2025-01-08
568568

569569
# Useful while developing:
570570
# ecolor = { path = "../../egui/crates/ecolor" }
@@ -575,7 +575,7 @@ emath = { git = "https://github.com/emilk/egui.git", rev = "938d8b0d2e2a551ac354
575575
# egui-wgpu = { path = "../../egui/crates/egui-wgpu" }
576576
# emath = { path = "../../egui/crates/emath" }
577577

578-
egui_plot = { git = "https://github.com/emilk/egui_plot.git", rev = "4a16b8842aa39e6ea6b6c9c98afe20e060e767b6" }
578+
egui_plot = { git = "https://github.com/emilk/egui_plot.git", rev = "80e2199a2e121db288fe6b0099d91c35acc75a7c" }
579579
# egui_plot = { path = "../../egui_plot/egui_plot" }
580580

581581
# egui_tiles = { git = "https://github.com/rerun-io/egui_tiles", rev = "48e0ef566479000a23d8dabf84badced98f1b9a6" } # https://github.com/rerun-io/egui_tiles/pull/89 2024-11-19

crates/top/rerun/src/commands/entrypoint.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -857,7 +857,7 @@ fn run_impl(
857857
}
858858
Box::new(app)
859859
}),
860-
args.renderer,
860+
args.renderer.as_deref(),
861861
)
862862
.map_err(|err| err.into());
863863

crates/viewer/re_component_ui/src/marker_shape.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ pub(crate) fn edit_marker_shape_ui(
3939

4040
if response.clicked() {
4141
*edit_marker = marker;
42-
response.changed = true;
42+
response.mark_changed();
4343
}
4444

4545
combined_response = Some(match combined_response {

crates/viewer/re_renderer/src/config.rs

+61-1
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,25 @@ impl DeviceTier {
6161
flags: match self {
6262
Self::Gles => wgpu::DownlevelFlags::empty(),
6363
// Require fully WebGPU compliance for the native tier.
64-
Self::FullWebGpuSupport => wgpu::DownlevelFlags::all(),
64+
Self::FullWebGpuSupport => {
65+
// Turn a blind eye on a few features that are missing as of writing in WSL even with latest Vulkan drivers.
66+
// Pretend we still have full WebGPU support anyways.
67+
wgpu::DownlevelFlags::compliant()
68+
// Lacking `SURFACE_VIEW_FORMATS` means we can't set the format of views on surface textures
69+
// (the result of `get_current_texture`).
70+
// And the surface won't tell us which formats are supported.
71+
// We avoid doing anything wonky with surfaces anyways, so we won't hit this.
72+
.intersection(wgpu::DownlevelFlags::SURFACE_VIEW_FORMATS.complement())
73+
// Lacking `FULL_DRAW_INDEX_UINT32` means that vertex indices above 2^24-1 are invalid.
74+
// I.e. we can only draw with about 16.8mio vertices per mesh.
75+
// Typically we don't reach this limit.
76+
//
77+
// This can happen if…
78+
// * OpenGL: `GL_MAX_ELEMENT_INDEX` reports a value lower than `std::u32::MAX`
79+
// * Vulkan: `VkPhysicalDeviceLimits::fullDrawIndexUint32` is false.
80+
// The consequence of exceeding this limit seems to be undefined.
81+
.intersection(wgpu::DownlevelFlags::FULL_DRAW_INDEX_UINT32.complement())
82+
}
6583
},
6684
limits: Default::default(), // unused so far both here and in wgpu as of writing.
6785

@@ -84,6 +102,7 @@ impl DeviceTier {
84102
downlevel_caps: &wgpu::DownlevelCapabilities,
85103
) -> Result<(), InsufficientDeviceCapabilities> {
86104
let required_downlevel_caps_webgpu = self.required_downlevel_capabilities();
105+
87106
if downlevel_caps.shader_model < required_downlevel_caps_webgpu.shader_model {
88107
Err(InsufficientDeviceCapabilities::TooLowShaderModel {
89108
required: required_downlevel_caps_webgpu.shader_model,
@@ -296,6 +315,47 @@ impl DeviceCaps {
296315
}
297316
}
298317

318+
pub fn instance_descriptor(force_backend: Option<&str>) -> wgpu::InstanceDescriptor {
319+
let backends = if let Some(force_backend) = force_backend {
320+
if let Some(backend) = parse_graphics_backend(force_backend) {
321+
if let Err(err) = validate_graphics_backend_applicability(backend) {
322+
re_log::error!("Failed to force rendering backend parsed from {force_backend:?}: {err}\nUsing default backend instead.");
323+
supported_backends()
324+
} else {
325+
re_log::info!("Forcing graphics backend to {backend:?}.");
326+
backend.into()
327+
}
328+
} else {
329+
re_log::error!("Failed to parse rendering backend string {force_backend:?}. Using default backend instead.");
330+
supported_backends()
331+
}
332+
} else {
333+
supported_backends()
334+
};
335+
336+
wgpu::InstanceDescriptor {
337+
backends,
338+
339+
flags: wgpu::InstanceFlags::default()
340+
// Allow adapters that aren't compliant with the backend they're implementing.
341+
// A concrete example of this is the latest Vulkan drivers on WSL which (as of writing)
342+
// advertise themselves as not being Vulkan compliant but work fine for the most part.
343+
//
344+
// In the future we might consider enabling this _only_ for WSL as this might otherwise
345+
// cause us to run with arbitrary development versions of drivers.
346+
// (then again, if a user has such a driver they likely *want* us to run with it anyways!)
347+
.union(wgpu::InstanceFlags::ALLOW_UNDERLYING_NONCOMPLIANT_ADAPTER)
348+
// Allow manipulation via environment variables.
349+
.with_env(),
350+
351+
// FXC isn't great (slow & outdated), but DXC is painful to ship as it has to be provided separately.
352+
// (Note though that we generally prefer running with Vulkan)
353+
dx12_shader_compiler: wgpu::Dx12Compiler::Fxc,
354+
355+
gles_minor_version: wgpu::Gles3MinorVersion::Automatic,
356+
}
357+
}
358+
299359
/// Backends that are officially supported by `re_renderer`.
300360
///
301361
/// Other backend might work as well, but lack of support isn't regarded as a bug.

crates/viewer/re_renderer/src/context.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@ const STARTUP_FRAME_IDX: u64 = u64::MAX;
2323
#[derive(thiserror::Error, Debug)]
2424
pub enum RenderContextError {
2525
#[error(
26-
"The GPU/graphics driver is lacking some abilities: {0}.\nConsider updating the driver."
26+
"The GPU/graphics driver is lacking some abilities: {0}. \
27+
Check the troubleshooting guide at https://rerun.io/docs/getting-started/troubleshooting and consider updating your graphics driver."
2728
)]
2829
InsufficientDeviceCapabilities(#[from] crate::config::InsufficientDeviceCapabilities),
2930
}

crates/viewer/re_renderer_examples/framework.rs

+7-13
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,7 @@ use std::sync::Arc;
77
use anyhow::Context as _;
88
use web_time::Instant;
99

10-
use re_renderer::{
11-
config::{supported_backends, DeviceCaps},
12-
view_builder::ViewBuilder,
13-
RenderContext,
14-
};
10+
use re_renderer::{config::DeviceCaps, view_builder::ViewBuilder, RenderContext};
1511

1612
use winit::{
1713
application::ApplicationHandler,
@@ -112,14 +108,12 @@ fn preferred_framebuffer_format(formats: &[wgpu::TextureFormat]) -> wgpu::Textur
112108
impl<E: Example + 'static> Application<E> {
113109
async fn new(window: Window) -> anyhow::Result<Self> {
114110
let window = Arc::new(window);
115-
let instance = wgpu::Instance::new(wgpu::InstanceDescriptor {
116-
backends: supported_backends(),
117-
flags: wgpu::InstanceFlags::default()
118-
// Run without validation layers, they can be annoying on shader reload depending on the backend.
119-
.intersection(wgpu::InstanceFlags::VALIDATION.complement()),
120-
dx12_shader_compiler: wgpu::Dx12Compiler::Fxc,
121-
gles_minor_version: wgpu::Gles3MinorVersion::Automatic,
122-
});
111+
112+
let mut instance_desc = re_renderer::config::instance_descriptor(None);
113+
// Run without validation layers, they can be annoying on shader reload depending on the backend.
114+
instance_desc.flags.remove(wgpu::InstanceFlags::VALIDATION);
115+
116+
let instance = wgpu::Instance::new(instance_desc);
123117
let surface = instance.create_surface(window.clone()).unwrap();
124118
let adapter = instance
125119
.request_adapter(&wgpu::RequestAdapterOptions {

crates/viewer/re_ui/examples/re_ui_example/main.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -441,7 +441,7 @@ impl egui_tiles::Behavior<Tab> for MyTileTreeBehavior {
441441
_tile_id: egui_tiles::TileId,
442442
_pane: &mut Tab,
443443
) -> egui_tiles::UiResponse {
444-
egui::Frame::none().inner_margin(4.0).show(ui, |ui| {
444+
egui::Frame::new().inner_margin(4.0).show(ui, |ui| {
445445
egui::warn_if_debug_build(ui);
446446
ui.label("Hover me for a tooltip")
447447
.on_hover_text("This is a tooltip");

crates/viewer/re_ui/src/list_item/list_item.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -332,8 +332,8 @@ impl ListItem {
332332
// override_hover should not affect the returned response
333333
let mut style_response = response.clone();
334334
if force_hovered {
335-
style_response.contains_pointer = true;
336-
style_response.hovered = true;
335+
style_response.flags |= egui::response::Flags::CONTAINS_POINTER;
336+
style_response.flags |= egui::response::Flags::HOVERED;
337337
}
338338

339339
let mut collapse_response = None;

crates/viewer/re_ui/src/ui_ext.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ fn notification_label(
2525
visible_text: &str,
2626
full_text: &str,
2727
) -> egui::Response {
28-
egui::Frame::none()
28+
egui::Frame::new()
2929
.stroke((1.0, fg_color))
3030
.fill(error_label_bg_color(fg_color))
3131
.rounding(4.0)

0 commit comments

Comments
 (0)