diff --git a/Cargo.lock b/Cargo.lock index 97d08b21..17d62cdd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -880,7 +880,6 @@ dependencies = [ "png", "profiling", "regex", - "renderdoc", "ron", "rust-embed", "rustix 0.38.34", @@ -1694,9 +1693,6 @@ name = "float-cmp" version = "0.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4" -dependencies = [ - "num-traits", -] [[package]] name = "float_next_after" @@ -2903,7 +2899,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c2a198fb6b0eada2a8df47933734e6d35d350665a33a3593d7164fa52c75c19" dependencies = [ "cfg-if", - "windows-targets 0.48.5", + "windows-targets 0.52.5", ] [[package]] @@ -3484,7 +3480,7 @@ version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "681030a937600a36906c185595136d26abfebb4aa9c65701cefcaf8578bb982b" dependencies = [ - "proc-macro-crate 3.1.0", + "proc-macro-crate", "proc-macro2", "quote", "syn 2.0.66", @@ -3916,15 +3912,6 @@ dependencies = [ "toml_edit 0.19.15", ] -[[package]] -name = "proc-macro-crate" -version = "3.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" -dependencies = [ - "toml_edit 0.21.1", -] - [[package]] name = "proc-macro-error" version = "1.0.4" @@ -4180,21 +4167,6 @@ version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "adad44e29e4c806119491a7f06f03de4d1af22c3a680dd47f1e6e179439d1f56" -[[package]] -name = "renderdoc" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "272da9ec1e28b0ef17df4dcefad820b13f098ebe9c82697111fc57ccff621e12" -dependencies = [ - "bitflags 1.3.2", - "float-cmp", - "libloading 0.7.4", - "once_cell", - "renderdoc-sys", - "winapi", - "wio", -] - [[package]] name = "renderdoc-sys" version = "1.1.0" @@ -4581,7 +4553,7 @@ checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "smithay" version = "0.3.0" -source = "git+https://github.com/smithay//smithay?rev=74e8c4f#74e8c4f6ceef2c1bd9b31db0c7809470e05165dc" +source = "git+https://github.com/smithay//smithay?branch=feature/thread-safe-rendering#236468917cfd8b2114432f3e205a757b338221dc" dependencies = [ "appendlist", "ash", @@ -5124,17 +5096,6 @@ dependencies = [ "winnow 0.5.40", ] -[[package]] -name = "toml_edit" -version = "0.21.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1" -dependencies = [ - "indexmap", - "toml_datetime", - "winnow 0.5.40", -] - [[package]] name = "toml_edit" version = "0.22.13" @@ -6278,15 +6239,6 @@ dependencies = [ "memchr", ] -[[package]] -name = "wio" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d129932f4644ac2396cb456385cbf9e63b5b30c6e8dc4820bdca4eb082037a5" -dependencies = [ - "winapi", -] - [[package]] name = "x11-dl" version = "2.21.0" @@ -6461,7 +6413,7 @@ version = "3.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7131497b0f887e8061b430c530240063d33bf9455fa34438f388a245da69e0a5" dependencies = [ - "proc-macro-crate 1.3.1", + "proc-macro-crate", "proc-macro2", "quote", "regex", @@ -6535,7 +6487,7 @@ version = "3.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37c24dc0bed72f5f90d1f8bb5b07228cbf63b3c6e9f82d82559d4bae666e7ed9" dependencies = [ - "proc-macro-crate 1.3.1", + "proc-macro-crate", "proc-macro2", "quote", "syn 1.0.109", diff --git a/Cargo.toml b/Cargo.toml index e245758b..9896e6bf 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -36,7 +36,6 @@ once_cell = "1.18.0" ordered-float = "4.0" png = "0.17.5" regex = "1" -renderdoc = {version = "0.11.0", optional = true} ron = "0.8" rust-embed = {version = "8.0", features = ["debug-embed"]} sanitize-filename = "0.5.0" @@ -93,7 +92,7 @@ optional = true rev = "cdc652e0" [features] -debug = ["egui", "egui_plot", "smithay-egui", "renderdoc", "anyhow/backtrace"] +debug = ["egui", "egui_plot", "smithay-egui", "anyhow/backtrace"] default = ["systemd"] systemd = ["libsystemd"] profile-with-tracy = ["profiling/profile-with-tracy"] @@ -118,4 +117,4 @@ inherits = "release" lto = "fat" [patch."https://github.com/Smithay/smithay.git"] -smithay = {git = "https://github.com/smithay//smithay", rev = "74e8c4f"} +smithay = {git = "https://github.com/smithay//smithay", branch = "feature/thread-safe-rendering"} #rev = "74e8c4f"} diff --git a/src/backend/render/cursor.rs b/src/backend/render/cursor.rs index 75413039..c11af140 100644 --- a/src/backend/render/cursor.rs +++ b/src/backend/render/cursor.rs @@ -319,7 +319,7 @@ pub fn draw_cursor( ) -> Vec<(CursorRenderElement, Point)> where R: Renderer + ImportMem + ImportAll, - ::TextureId: Clone + 'static, + ::TextureId: Send + Clone + 'static, { // draw the cursor as relevant // reset the cursor if the surface is no longer alive diff --git a/src/backend/render/mod.rs b/src/backend/render/mod.rs index 1c2d44e0..52b05eac 100644 --- a/src/backend/render/mod.rs +++ b/src/backend/render/mod.rs @@ -398,7 +398,7 @@ pub fn cursor_elements<'frame, R>( ) -> Vec> where R: Renderer + ImportAll + ImportMem + AsGlowRenderer, - ::TextureId: Clone + 'static, + ::TextureId: Send + Clone + 'static, CosmicMappedRenderElement: RenderElement, { let scale = output.current_scale().fractional_scale(); @@ -486,8 +486,8 @@ pub fn workspace_elements( ) -> Result>, RenderError> where R: Renderer + ImportAll + ImportMem + AsGlowRenderer, - ::TextureId: Clone + 'static, - ::Error: From, + ::TextureId: Send + Clone + 'static, + ::Error: FromGlesError, CosmicMappedRenderElement: RenderElement, WorkspaceRenderElement: RenderElement, { @@ -972,8 +972,8 @@ where + Offscreen + Blit + AsGlowRenderer, - ::TextureId: Clone + 'static, - ::Error: From, + ::TextureId: Send + Clone + 'static, + ::Error: FromGlesError, CosmicElement: RenderElement, CosmicMappedRenderElement: RenderElement, WorkspaceRenderElement: RenderElement, @@ -1128,18 +1128,13 @@ where + Bind + Offscreen + AsGlowRenderer, - ::TextureId: Clone + 'static, - ::Error: From, + ::TextureId: Send + Clone + 'static, + ::Error: FromGlesError, CosmicElement: RenderElement, CosmicMappedRenderElement: RenderElement, WorkspaceRenderElement: RenderElement, -{ - if let Some(ref mut fps) = fps { - fps.start(); - #[cfg(feature = "debug")] if let Some(rd) = fps.rd.as_mut() { rd.start_frame_capture( - renderer.glow_renderer().egl_context().get_context_handle(), std::ptr::null(), ); } diff --git a/src/shell/element/mod.rs b/src/shell/element/mod.rs index 83914a2d..678cdf52 100644 --- a/src/shell/element/mod.rs +++ b/src/shell/element/mod.rs @@ -621,7 +621,7 @@ impl CosmicMapped { ) -> (Vec, Vec) where R: Renderer + ImportAll + ImportMem + AsGlowRenderer, - ::TextureId: Clone + 'static, + ::TextureId: Send + Clone + 'static, CosmicMappedRenderElement: RenderElement, C: From>, { diff --git a/src/shell/element/stack.rs b/src/shell/element/stack.rs index ba749acc..6d62b874 100644 --- a/src/shell/element/stack.rs +++ b/src/shell/element/stack.rs @@ -550,7 +550,7 @@ impl CosmicStack { ) -> (Vec, Vec) where R: Renderer + ImportAll + ImportMem, - ::TextureId: Clone + 'static, + ::TextureId: Send + Clone + 'static, C: From>, { let offset = self diff --git a/src/shell/element/surface.rs b/src/shell/element/surface.rs index a9094a2d..0d6d386d 100644 --- a/src/shell/element/surface.rs +++ b/src/shell/element/surface.rs @@ -407,7 +407,11 @@ impl CosmicSurface { match self.0.underlying_surface() { WindowSurface::Wayland(toplevel) => { Some(with_states(toplevel.wl_surface(), |states| { - states.cached_state.current::().min_size + states + .cached_state + .get::() + .current() + .min_size })) .filter(|size| !(size.w == 0 && size.h == 0)) } @@ -426,7 +430,11 @@ impl CosmicSurface { match self.0.underlying_surface() { WindowSurface::Wayland(toplevel) => { Some(with_states(toplevel.wl_surface(), |states| { - states.cached_state.current::().max_size + states + .cached_state + .get::() + .current() + .max_size })) .filter(|size| !(size.w == 0 && size.h == 0)) } diff --git a/src/shell/element/window.rs b/src/shell/element/window.rs index b28b3fdd..7c6772b3 100644 --- a/src/shell/element/window.rs +++ b/src/shell/element/window.rs @@ -321,7 +321,7 @@ impl CosmicWindow { ) -> (Vec, Vec) where R: Renderer + ImportAll + ImportMem, - ::TextureId: Clone + 'static, + ::TextureId: Send + Clone + 'static, C: From>, { let has_ssd = self.0.with_program(|p| p.has_ssd(false)); diff --git a/src/shell/grabs/menu/mod.rs b/src/shell/grabs/menu/mod.rs index 104d181a..73fd9442 100644 --- a/src/shell/grabs/menu/mod.rs +++ b/src/shell/grabs/menu/mod.rs @@ -63,7 +63,7 @@ impl MenuGrabState { pub fn render(&self, renderer: &mut R, output: &Output) -> Vec where R: Renderer + ImportMem, - ::TextureId: Clone + 'static, + ::TextureId: Send + Clone + 'static, I: From>, { let scale = output.current_scale().fractional_scale(); diff --git a/src/shell/grabs/moving.rs b/src/shell/grabs/moving.rs index 28f20e36..5ac26f78 100644 --- a/src/shell/grabs/moving.rs +++ b/src/shell/grabs/moving.rs @@ -69,7 +69,7 @@ impl MoveGrabState { pub fn render(&self, renderer: &mut R, output: &Output, theme: &CosmicTheme) -> Vec where R: Renderer + ImportAll + ImportMem + AsGlowRenderer, - ::TextureId: Clone + 'static, + ::TextureId: Send + Clone + 'static, CosmicMappedRenderElement: RenderElement, I: From>, { diff --git a/src/shell/layout/floating/mod.rs b/src/shell/layout/floating/mod.rs index 92cca3cf..7f336afa 100644 --- a/src/shell/layout/floating/mod.rs +++ b/src/shell/layout/floating/mod.rs @@ -1242,7 +1242,7 @@ impl FloatingLayout { ) where R: Renderer + ImportAll + ImportMem + AsGlowRenderer, - ::TextureId: Clone + 'static, + ::TextureId: Send + Clone + 'static, CosmicMappedRenderElement: RenderElement, CosmicWindowRenderElement: RenderElement, CosmicStackRenderElement: RenderElement, diff --git a/src/shell/layout/tiling/mod.rs b/src/shell/layout/tiling/mod.rs index ea693db9..453ce0c4 100644 --- a/src/shell/layout/tiling/mod.rs +++ b/src/shell/layout/tiling/mod.rs @@ -3836,7 +3836,7 @@ impl TilingLayout { > where R: Renderer + ImportAll + ImportMem + AsGlowRenderer, - ::TextureId: Clone + 'static, + ::TextureId: Send + Clone + 'static, CosmicMappedRenderElement: RenderElement, CosmicWindowRenderElement: RenderElement, CosmicStackRenderElement: RenderElement, @@ -4681,7 +4681,7 @@ fn render_old_tree( ) where R: Renderer + ImportAll + ImportMem + AsGlowRenderer, - ::TextureId: Clone + 'static, + ::TextureId: Send + Clone + 'static, CosmicMappedRenderElement: RenderElement, CosmicWindowRenderElement: RenderElement, CosmicStackRenderElement: RenderElement, @@ -4841,7 +4841,7 @@ fn render_new_tree( ) where R: Renderer + ImportAll + ImportMem + AsGlowRenderer, - ::TextureId: Clone + 'static, + ::TextureId: Send + Clone + 'static, CosmicMappedRenderElement: RenderElement, CosmicWindowRenderElement: RenderElement, CosmicStackRenderElement: RenderElement, diff --git a/src/shell/mod.rs b/src/shell/mod.rs index 060c02dc..1d58ce4d 100644 --- a/src/shell/mod.rs +++ b/src/shell/mod.rs @@ -1907,9 +1907,9 @@ impl Shell { let wants_focus = { with_states(layer_surface.wl_surface(), |states| { - let state = states.cached_state.current::(); - matches!(state.layer, Layer::Top | Layer::Overlay) - && state.keyboard_interactivity != KeyboardInteractivity::None + let mut state = states.cached_state.get::(); + matches!(state.current().layer, Layer::Top | Layer::Overlay) + && state.current().keyboard_interactivity != KeyboardInteractivity::None }) }; diff --git a/src/shell/workspace.rs b/src/shell/workspace.rs index a36304d8..1a546a06 100644 --- a/src/shell/workspace.rs +++ b/src/shell/workspace.rs @@ -1036,7 +1036,7 @@ impl Workspace { > where R: Renderer + ImportAll + ImportMem + AsGlowRenderer, - ::TextureId: Clone + 'static, + ::TextureId: Send + Clone + 'static, CosmicMappedRenderElement: RenderElement, CosmicWindowRenderElement: RenderElement, CosmicStackRenderElement: RenderElement, diff --git a/src/utils/iced.rs b/src/utils/iced.rs index d2dc706b..ef856610 100644 --- a/src/utils/iced.rs +++ b/src/utils/iced.rs @@ -843,7 +843,7 @@ impl AsRenderElements for IcedElement

where P: Program + Send + 'static, R: Renderer + ImportMem, - ::TextureId: Clone + 'static, + ::TextureId: Send + Clone + 'static, { type RenderElement = MemoryRenderBufferRenderElement; diff --git a/src/wayland/handlers/compositor.rs b/src/wayland/handlers/compositor.rs index 8ece0e71..5cfea8bc 100644 --- a/src/wayland/handlers/compositor.rs +++ b/src/wayland/handlers/compositor.rs @@ -103,7 +103,8 @@ impl CompositorHandler for State { let maybe_dmabuf = with_states(surface, |surface_data| { surface_data .cached_state - .pending::() + .get::() + .pending() .buffer .as_ref() .and_then(|assignment| match assignment { diff --git a/src/wayland/handlers/screencopy/render.rs b/src/wayland/handlers/screencopy/render.rs index f80afac6..263d0768 100644 --- a/src/wayland/handlers/screencopy/render.rs +++ b/src/wayland/handlers/screencopy/render.rs @@ -238,8 +238,8 @@ pub fn render_workspace_to_buffer( + Offscreen + Blit + AsGlowRenderer, - ::TextureId: Clone + 'static, - ::Error: From, + ::TextureId: Send + Clone + 'static, + ::Error: FromGlesError, CosmicElement: RenderElement, CosmicMappedRenderElement: RenderElement, WorkspaceRenderElement: RenderElement, @@ -505,8 +505,8 @@ pub fn render_window_to_buffer( + Offscreen + Blit + AsGlowRenderer, - ::TextureId: Clone + 'static, - ::Error: From, + ::TextureId: Send + Clone + 'static, + ::Error: FromGlesError, CosmicElement: RenderElement, CosmicMappedRenderElement: RenderElement, { @@ -764,8 +764,8 @@ pub fn render_cursor_to_buffer( + Offscreen + Blit + AsGlowRenderer, - ::TextureId: Clone + 'static, - ::Error: From, + ::TextureId: Send + Clone + 'static, + ::Error: FromGlesError, CosmicElement: RenderElement, CosmicMappedRenderElement: RenderElement, { diff --git a/src/wayland/handlers/xdg_shell/mod.rs b/src/wayland/handlers/xdg_shell/mod.rs index e9fcb1be..71c30cf2 100644 --- a/src/wayland/handlers/xdg_shell/mod.rs +++ b/src/wayland/handlers/xdg_shell/mod.rs @@ -413,7 +413,11 @@ impl XdgShellHandler for State { ) { let seat = Seat::from_resource(&seat).unwrap(); location -= with_states(surface.wl_surface(), |states| { - states.cached_state.current::().geometry + states + .cached_state + .get::() + .current() + .geometry }) .unwrap_or_default() .loc; diff --git a/src/wayland/handlers/xdg_shell/popup.rs b/src/wayland/handlers/xdg_shell/popup.rs index f736b2cb..51e74262 100644 --- a/src/wayland/handlers/xdg_shell/popup.rs +++ b/src/wayland/handlers/xdg_shell/popup.rs @@ -425,7 +425,8 @@ fn get_popup_toplevel_coords(popup: &PopupSurface) -> Point { offset += with_states(&parent, |states| { states .cached_state - .current::() + .get::() + .current() .geometry .map(|x| x.loc) .unwrap_or_else(|| (0, 0).into())