Update smithay to latest commit

This commit is contained in:
Ian Douglas Scott 2024-04-08 16:55:41 -07:00 committed by Victoria Brekenfeld
parent dd970b8c64
commit de544e1d31
10 changed files with 59 additions and 35 deletions

2
Cargo.lock generated
View file

@ -4506,7 +4506,7 @@ checksum = "e6ecd384b10a64542d77071bd64bd7b231f4ed5940fba55e98c3de13824cf3d7"
[[package]] [[package]]
name = "smithay" name = "smithay"
version = "0.3.0" version = "0.3.0"
source = "git+https://github.com/smithay//smithay?rev=f133e418#f133e418a25b1dfa4520000e08d3c6f548f4f58a" source = "git+https://github.com/smithay//smithay?rev=ba0121a#ba0121aaed065c30ee4c42834126cce481cb0e57"
dependencies = [ dependencies = [
"appendlist", "appendlist",
"ash", "ash",

View file

@ -118,4 +118,4 @@ inherits = "release"
lto = "fat" lto = "fat"
[patch."https://github.com/Smithay/smithay.git"] [patch."https://github.com/Smithay/smithay.git"]
smithay = {git = "https://github.com/smithay//smithay", rev = "f133e418"} smithay = {git = "https://github.com/smithay//smithay", rev = "ba0121a"}

View file

@ -1268,6 +1268,7 @@ impl Surface {
elements.truncate(old_len); elements.truncate(old_len);
} }
let res = res.map(|(a, b)| (a.cloned(), b));
std::mem::drop(damage_tracking); std::mem::drop(damage_tracking);
(session, frame, res) (session, frame, res)
}) })
@ -1295,7 +1296,7 @@ impl Surface {
if frame_result.needs_sync() { if frame_result.needs_sync() {
if let PrimaryPlaneElement::Swapchain(elem) = &frame_result.primary_element { if let PrimaryPlaneElement::Swapchain(elem) = &frame_result.primary_element {
elem.sync.wait(); elem.sync.wait()?;
} }
} }
@ -1404,7 +1405,13 @@ impl Surface {
let transform = self.output.current_transform(); let transform = self.output.current_transform();
match submit_buffer(frame, &mut renderer, transform, damage, sync) { match submit_buffer(
frame,
&mut renderer,
transform,
damage.as_deref(),
sync,
) {
Ok(Some((frame, damage))) => { Ok(Some((frame, damage))) => {
if frame_result.is_empty { if frame_result.is_empty {
frame.success(transform, damage, state.clock.now()); frame.success(transform, damage, state.clock.now());

View file

@ -8,7 +8,7 @@ use smithay::{
Element, Id, RenderElement, UnderlyingStorage, Element, Id, RenderElement, UnderlyingStorage,
}, },
glow::{GlowFrame, GlowRenderer}, glow::{GlowFrame, GlowRenderer},
utils::CommitCounter, utils::{CommitCounter, DamageSet},
Frame, ImportAll, ImportMem, Renderer, Frame, ImportAll, ImportMem, Renderer,
}, },
utils::{Buffer as BufferCoords, Logical, Physical, Point, Rectangle, Scale}, utils::{Buffer as BufferCoords, Logical, Physical, Point, Rectangle, Scale},
@ -116,7 +116,7 @@ where
&self, &self,
scale: Scale<f64>, scale: Scale<f64>,
commit: Option<CommitCounter>, commit: Option<CommitCounter>,
) -> Vec<Rectangle<i32, Physical>> { ) -> DamageSet<i32, Physical> {
match self { match self {
CosmicElement::Workspace(elem) => elem.damage_since(scale, commit), CosmicElement::Workspace(elem) => elem.damage_since(scale, commit),
CosmicElement::Cursor(elem) => elem.damage_since(scale, commit), CosmicElement::Cursor(elem) => elem.damage_since(scale, commit),
@ -374,11 +374,11 @@ impl Element for DamageElement {
&self, &self,
scale: Scale<f64>, scale: Scale<f64>,
_commit: Option<CommitCounter>, _commit: Option<CommitCounter>,
) -> Vec<Rectangle<i32, Physical>> { ) -> DamageSet<i32, Physical> {
vec![Rectangle::from_loc_and_size( DamageSet::from_slice(&[Rectangle::from_loc_and_size(
(0, 0), (0, 0),
self.geometry(scale).size, self.geometry(scale).size,
)] )])
} }
} }

View file

@ -938,17 +938,17 @@ where
} }
#[profiling::function] #[profiling::function]
pub fn render_output<R, Target, OffTarget>( pub fn render_output<'d, R, Target, OffTarget>(
gpu: Option<&DrmNode>, gpu: Option<&DrmNode>,
renderer: &mut R, renderer: &mut R,
target: Target, target: Target,
damage_tracker: &mut OutputDamageTracker, damage_tracker: &'d mut OutputDamageTracker,
age: usize, age: usize,
state: &mut Common, state: &mut Common,
output: &Output, output: &Output,
cursor_mode: CursorMode, cursor_mode: CursorMode,
fps: Option<&mut Fps>, fps: Option<&mut Fps>,
) -> Result<RenderOutputResult, RenderError<R>> ) -> Result<RenderOutputResult<'d>, RenderError<R>>
where where
R: Renderer R: Renderer
+ ImportAll + ImportAll
@ -1058,7 +1058,7 @@ where
.bind(render_buffer) .bind(render_buffer)
.map_err(RenderError::Rendering)?; .map_err(RenderError::Rendering)?;
} }
for rect in damage { for rect in damage.iter() {
renderer renderer
.blit_from(target.clone(), *rect, *rect, TextureFilter::Nearest) .blit_from(target.clone(), *rect, *rect, TextureFilter::Nearest)
.map_err(RenderError::Rendering)?; .map_err(RenderError::Rendering)?;
@ -1083,11 +1083,11 @@ where
} }
#[profiling::function] #[profiling::function]
pub fn render_workspace<R, Target, OffTarget>( pub fn render_workspace<'d, R, Target, OffTarget>(
gpu: Option<&DrmNode>, gpu: Option<&DrmNode>,
renderer: &mut R, renderer: &mut R,
target: Target, target: Target,
damage_tracker: &mut OutputDamageTracker, damage_tracker: &'d mut OutputDamageTracker,
age: usize, age: usize,
additional_damage: Option<Vec<Rectangle<i32, Logical>>>, additional_damage: Option<Vec<Rectangle<i32, Logical>>>,
state: &mut Common, state: &mut Common,
@ -1097,7 +1097,7 @@ pub fn render_workspace<R, Target, OffTarget>(
cursor_mode: CursorMode, cursor_mode: CursorMode,
mut fps: Option<&mut Fps>, mut fps: Option<&mut Fps>,
exclude_workspace_overview: bool, exclude_workspace_overview: bool,
) -> Result<(RenderOutputResult, Vec<CosmicElement<R>>), RenderError<R>> ) -> Result<(RenderOutputResult<'d>, Vec<CosmicElement<R>>), RenderError<R>>
where where
R: Renderer R: Renderer
+ ImportAll + ImportAll

View file

@ -76,7 +76,7 @@ impl WinitState {
.bind() .bind()
.with_context(|| "Failed to bind display")?; .with_context(|| "Failed to bind display")?;
self.backend self.backend
.submit(damage.as_deref()) .submit(damage.map(|x| x.as_slice()))
.with_context(|| "Failed to submit buffer for display")?; .with_context(|| "Failed to submit buffer for display")?;
#[cfg(feature = "debug")] #[cfg(feature = "debug")]
self.fps.displayed(); self.fps.displayed();

View file

@ -19,6 +19,7 @@ use smithay::{
}, },
gles::element::PixelShaderElement, gles::element::PixelShaderElement,
glow::GlowRenderer, glow::GlowRenderer,
utils::DamageSet,
ImportAll, ImportMem, Renderer, ImportAll, ImportMem, Renderer,
}, },
}, },
@ -1146,7 +1147,7 @@ where
&self, &self,
scale: Scale<f64>, scale: Scale<f64>,
commit: Option<smithay::backend::renderer::utils::CommitCounter>, commit: Option<smithay::backend::renderer::utils::CommitCounter>,
) -> Vec<Rectangle<i32, Physical>> { ) -> DamageSet<i32, Physical> {
match self { match self {
CosmicMappedRenderElement::Stack(elem) => elem.damage_since(scale, commit), CosmicMappedRenderElement::Stack(elem) => elem.damage_since(scale, commit),
CosmicMappedRenderElement::Window(elem) => elem.damage_since(scale, commit), CosmicMappedRenderElement::Window(elem) => elem.damage_since(scale, commit),

View file

@ -31,6 +31,7 @@ use smithay::{
}, },
gles::{GlesError, GlesTexture}, gles::{GlesError, GlesTexture},
glow::{GlowFrame, GlowRenderer}, glow::{GlowFrame, GlowRenderer},
utils::DamageSet,
ImportAll, ImportMem, Renderer, ImportAll, ImportMem, Renderer,
}, },
desktop::{layer_map_for_output, space::SpaceElement}, desktop::{layer_map_for_output, space::SpaceElement},
@ -1325,7 +1326,7 @@ where
&self, &self,
scale: Scale<f64>, scale: Scale<f64>,
commit: Option<smithay::backend::renderer::utils::CommitCounter>, commit: Option<smithay::backend::renderer::utils::CommitCounter>,
) -> Vec<Rectangle<i32, smithay::utils::Physical>> { ) -> DamageSet<i32, smithay::utils::Physical> {
match self { match self {
WorkspaceRenderElement::OverrideRedirect(elem) => elem.damage_since(scale, commit), WorkspaceRenderElement::OverrideRedirect(elem) => elem.damage_since(scale, commit),
WorkspaceRenderElement::Fullscreen(elem) => elem.damage_since(scale, commit), WorkspaceRenderElement::Fullscreen(elem) => elem.damage_since(scale, commit),

View file

@ -58,7 +58,7 @@ pub fn submit_buffer<R>(
frame: Frame, frame: Frame,
renderer: &mut R, renderer: &mut R,
transform: Transform, transform: Transform,
damage: Option<Vec<Rectangle<i32, Physical>>>, damage: Option<&[Rectangle<i32, Physical>]>,
sync: SyncPoint, sync: SyncPoint,
) -> Result<Option<(Frame, Vec<Rectangle<i32, BufferCoords>>)>, <R as Renderer>::Error> ) -> Result<Option<(Frame, Vec<Rectangle<i32, BufferCoords>>)>, <R as Renderer>::Error>
where where
@ -141,13 +141,13 @@ pub fn render_session<F, R>(
) -> Result<Option<(Frame, Vec<Rectangle<i32, BufferCoords>>)>, DTError<R>> ) -> Result<Option<(Frame, Vec<Rectangle<i32, BufferCoords>>)>, DTError<R>>
where where
R: ExportMem, R: ExportMem,
F: FnOnce( F: for<'d> FnOnce(
&WlBuffer, &WlBuffer,
&mut R, &mut R,
&mut OutputDamageTracker, &'d mut OutputDamageTracker,
usize, usize,
Vec<Rectangle<i32, BufferCoords>>, Vec<Rectangle<i32, BufferCoords>>,
) -> Result<RenderOutputResult, DTError<R>>, ) -> Result<RenderOutputResult<'d>, DTError<R>>,
{ {
#[cfg(feature = "debug")] #[cfg(feature = "debug")]
puffin::profile_function!(); puffin::profile_function!();
@ -165,8 +165,14 @@ where
); );
match res { match res {
Ok(result) => submit_buffer(frame, renderer, transform, result.damage, result.sync) Ok(result) => submit_buffer(
.map_err(DTError::Rendering), frame,
renderer,
transform,
result.damage.map(|x| x.as_slice()),
result.sync,
)
.map_err(DTError::Rendering),
Err(err) => { Err(err) => {
frame.fail(FailureReason::Unknown); frame.fail(FailureReason::Unknown);
Err(err) Err(err)
@ -214,17 +220,17 @@ pub fn render_workspace_to_buffer(
return; return;
} }
fn render_fn<R>( fn render_fn<'d, R>(
buffer: &WlBuffer, buffer: &WlBuffer,
renderer: &mut R, renderer: &mut R,
dt: &mut OutputDamageTracker, dt: &'d mut OutputDamageTracker,
age: usize, age: usize,
additional_damage: Vec<Rectangle<i32, BufferCoords>>, additional_damage: Vec<Rectangle<i32, BufferCoords>>,
draw_cursor: bool, draw_cursor: bool,
common: &mut Common, common: &mut Common,
output: &Output, output: &Output,
handle: (WorkspaceHandle, usize), handle: (WorkspaceHandle, usize),
) -> Result<RenderOutputResult, DTError<R>> ) -> Result<RenderOutputResult<'d>, DTError<R>>
where where
R: Renderer R: Renderer
+ ImportAll + ImportAll
@ -475,17 +481,17 @@ pub fn render_window_to_buffer(
return; return;
} }
fn render_fn<R>( fn render_fn<'d, R>(
buffer: &WlBuffer, buffer: &WlBuffer,
renderer: &mut R, renderer: &mut R,
dt: &mut OutputDamageTracker, dt: &'d mut OutputDamageTracker,
age: usize, age: usize,
additional_damage: Vec<Rectangle<i32, BufferCoords>>, additional_damage: Vec<Rectangle<i32, BufferCoords>>,
draw_cursor: bool, draw_cursor: bool,
common: &mut Common, common: &mut Common,
window: &CosmicSurface, window: &CosmicSurface,
geometry: Rectangle<i32, Logical>, geometry: Rectangle<i32, Logical>,
) -> Result<RenderOutputResult, DTError<R>> ) -> Result<RenderOutputResult<'d>, DTError<R>>
where where
R: Renderer R: Renderer
+ ImportAll + ImportAll
@ -734,15 +740,15 @@ pub fn render_cursor_to_buffer(
return; return;
} }
fn render_fn<R>( fn render_fn<'d, R>(
buffer: &WlBuffer, buffer: &WlBuffer,
renderer: &mut R, renderer: &mut R,
dt: &mut OutputDamageTracker, dt: &'d mut OutputDamageTracker,
age: usize, age: usize,
additional_damage: Vec<Rectangle<i32, BufferCoords>>, additional_damage: Vec<Rectangle<i32, BufferCoords>>,
common: &mut Common, common: &mut Common,
seat: &Seat<State>, seat: &Seat<State>,
) -> Result<RenderOutputResult, DTError<R>> ) -> Result<RenderOutputResult<'d>, DTError<R>>
where where
R: Renderer R: Renderer
+ ImportAll + ImportAll

View file

@ -1,6 +1,15 @@
// SPDX-License-Identifier: GPL-3.0-only // SPDX-License-Identifier: GPL-3.0-only
use crate::state::State; use crate::state::State;
use smithay::delegate_tablet_manager; use smithay::{
backend::input::TabletToolDescriptor, delegate_tablet_manager,
input::pointer::CursorImageStatus, wayland::tablet_manager::TabletSeatHandler,
};
impl TabletSeatHandler for State {
fn tablet_tool_image(&mut self, _tool: &TabletToolDescriptor, _image: CursorImageStatus) {
// TODO display cursor for each tablet tool
}
}
delegate_tablet_manager!(State); delegate_tablet_manager!(State);