Update Smithay

This commit is contained in:
Ivan Molodetskikh
2024-06-12 09:40:19 +03:00
parent 2ffa1ae705
commit 9ae98e09cb
13 changed files with 65 additions and 19 deletions
Generated
+2 -2
View File
@@ -3162,7 +3162,7 @@ checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67"
[[package]] [[package]]
name = "smithay" name = "smithay"
version = "0.3.0" version = "0.3.0"
source = "git+https://github.com/Smithay/smithay.git#24e36e97a1844d575a1586d3cddcc94d96c2044d" source = "git+https://github.com/Smithay/smithay.git#6169b213fb663d85d2e139d3bbe44dfae1ec9328"
dependencies = [ dependencies = [
"appendlist", "appendlist",
"bitflags 2.5.0", "bitflags 2.5.0",
@@ -3234,7 +3234,7 @@ dependencies = [
[[package]] [[package]]
name = "smithay-drm-extras" name = "smithay-drm-extras"
version = "0.1.0" version = "0.1.0"
source = "git+https://github.com/Smithay/smithay.git#24e36e97a1844d575a1586d3cddcc94d96c2044d" source = "git+https://github.com/Smithay/smithay.git#6169b213fb663d85d2e139d3bbe44dfae1ec9328"
dependencies = [ dependencies = [
"drm", "drm",
"edid-rs", "edid-rs",
+1 -1
View File
@@ -157,7 +157,7 @@ mod imp {
if let Some(mut damage) = rect.intersection(dst) { if let Some(mut damage) = rect.intersection(dst) {
damage.loc -= dst.loc; damage.loc -= dst.loc;
element element
.draw(&mut frame, src, dst, &[damage]) .draw(&mut frame, src, dst, &[damage], &[])
.context("error drawing element")?; .context("error drawing element")?;
} }
} }
+4 -2
View File
@@ -239,8 +239,9 @@ impl RenderElement<GlesRenderer> for BorderRenderElement {
src: Rectangle<f64, Buffer>, src: Rectangle<f64, Buffer>,
dst: Rectangle<i32, Physical>, dst: Rectangle<i32, Physical>,
damage: &[Rectangle<i32, Physical>], damage: &[Rectangle<i32, Physical>],
opaque_regions: &[Rectangle<i32, Physical>],
) -> Result<(), GlesError> { ) -> Result<(), GlesError> {
RenderElement::<GlesRenderer>::draw(&self.inner, frame, src, dst, damage) RenderElement::<GlesRenderer>::draw(&self.inner, frame, src, dst, damage, opaque_regions)
} }
fn underlying_storage(&self, renderer: &mut GlesRenderer) -> Option<UnderlyingStorage> { fn underlying_storage(&self, renderer: &mut GlesRenderer) -> Option<UnderlyingStorage> {
@@ -255,8 +256,9 @@ impl<'render> RenderElement<TtyRenderer<'render>> for BorderRenderElement {
src: Rectangle<f64, Buffer>, src: Rectangle<f64, Buffer>,
dst: Rectangle<i32, Physical>, dst: Rectangle<i32, Physical>,
damage: &[Rectangle<i32, Physical>], damage: &[Rectangle<i32, Physical>],
opaque_regions: &[Rectangle<i32, Physical>],
) -> Result<(), TtyRendererError<'render>> { ) -> Result<(), TtyRendererError<'render>> {
RenderElement::<TtyRenderer<'_>>::draw(&self.inner, frame, src, dst, damage) RenderElement::<TtyRenderer<'_>>::draw(&self.inner, frame, src, dst, damage, opaque_regions)
} }
fn underlying_storage(&self, renderer: &mut TtyRenderer<'render>) -> Option<UnderlyingStorage> { fn underlying_storage(&self, renderer: &mut TtyRenderer<'render>) -> Option<UnderlyingStorage> {
+4 -2
View File
@@ -215,6 +215,7 @@ impl RenderElement<GlesRenderer> for ClippedSurfaceRenderElement<GlesRenderer> {
src: Rectangle<f64, Buffer>, src: Rectangle<f64, Buffer>,
dst: Rectangle<i32, Physical>, dst: Rectangle<i32, Physical>,
damage: &[Rectangle<i32, Physical>], damage: &[Rectangle<i32, Physical>],
opaque_regions: &[Rectangle<i32, Physical>],
) -> Result<(), GlesError> { ) -> Result<(), GlesError> {
frame.override_default_tex_program( frame.override_default_tex_program(
self.program.clone(), self.program.clone(),
@@ -227,7 +228,7 @@ impl RenderElement<GlesRenderer> for ClippedSurfaceRenderElement<GlesRenderer> {
mat3_uniform("input_to_geo", self.input_to_geo), mat3_uniform("input_to_geo", self.input_to_geo),
], ],
); );
RenderElement::<GlesRenderer>::draw(&self.inner, frame, src, dst, damage)?; RenderElement::<GlesRenderer>::draw(&self.inner, frame, src, dst, damage, opaque_regions)?;
frame.clear_tex_program_override(); frame.clear_tex_program_override();
Ok(()) Ok(())
} }
@@ -248,6 +249,7 @@ impl<'render> RenderElement<TtyRenderer<'render>>
src: Rectangle<f64, Buffer>, src: Rectangle<f64, Buffer>,
dst: Rectangle<i32, Physical>, dst: Rectangle<i32, Physical>,
damage: &[Rectangle<i32, Physical>], damage: &[Rectangle<i32, Physical>],
opaque_regions: &[Rectangle<i32, Physical>],
) -> Result<(), TtyRendererError<'render>> { ) -> Result<(), TtyRendererError<'render>> {
frame.as_gles_frame().override_default_tex_program( frame.as_gles_frame().override_default_tex_program(
self.program.clone(), self.program.clone(),
@@ -260,7 +262,7 @@ impl<'render> RenderElement<TtyRenderer<'render>>
mat3_uniform("input_to_geo", self.input_to_geo), mat3_uniform("input_to_geo", self.input_to_geo),
], ],
); );
RenderElement::draw(&self.inner, frame, src, dst, damage)?; RenderElement::draw(&self.inner, frame, src, dst, damage, opaque_regions)?;
frame.as_gles_frame().clear_tex_program_override(); frame.as_gles_frame().clear_tex_program_override();
Ok(()) Ok(())
} }
+1
View File
@@ -69,6 +69,7 @@ impl<R: Renderer> RenderElement<R> for ExtraDamage {
_src: Rectangle<f64, Buffer>, _src: Rectangle<f64, Buffer>,
_dst: Rectangle<i32, Physical>, _dst: Rectangle<i32, Physical>,
_damage: &[Rectangle<i32, Physical>], _damage: &[Rectangle<i32, Physical>],
_opaque_regions: &[Rectangle<i32, Physical>],
) -> Result<(), R::Error> { ) -> Result<(), R::Error> {
Ok(()) Ok(())
} }
+1 -1
View File
@@ -320,7 +320,7 @@ fn render_elements(
if let Some(mut damage) = output_rect.intersection(dst) { if let Some(mut damage) = output_rect.intersection(dst) {
damage.loc -= dst.loc; damage.loc -= dst.loc;
element element
.draw(&mut frame, src, dst, &[damage]) .draw(&mut frame, src, dst, &[damage], &[])
.context("error drawing element")?; .context("error drawing element")?;
} }
} }
+34 -4
View File
@@ -175,12 +175,27 @@ impl RenderElement<GlesRenderer> for OffscreenRenderElement {
src: Rectangle<f64, Buffer>, src: Rectangle<f64, Buffer>,
dst: Rectangle<i32, Physical>, dst: Rectangle<i32, Physical>,
damage: &[Rectangle<i32, Physical>], damage: &[Rectangle<i32, Physical>],
opaque_regions: &[Rectangle<i32, Physical>],
) -> Result<(), GlesError> { ) -> Result<(), GlesError> {
let gles_frame = frame.as_gles_frame(); let gles_frame = frame.as_gles_frame();
if let Some(texture) = &self.texture { if let Some(texture) = &self.texture {
RenderElement::<GlesRenderer>::draw(texture, gles_frame, src, dst, damage)?; RenderElement::<GlesRenderer>::draw(
texture,
gles_frame,
src,
dst,
damage,
opaque_regions,
)?;
} else { } else {
RenderElement::<GlesRenderer>::draw(&self.fallback, gles_frame, src, dst, damage)?; RenderElement::<GlesRenderer>::draw(
&self.fallback,
gles_frame,
src,
dst,
damage,
opaque_regions,
)?;
} }
Ok(()) Ok(())
} }
@@ -201,12 +216,27 @@ impl<'render> RenderElement<TtyRenderer<'render>> for OffscreenRenderElement {
src: Rectangle<f64, Buffer>, src: Rectangle<f64, Buffer>,
dst: Rectangle<i32, Physical>, dst: Rectangle<i32, Physical>,
damage: &[Rectangle<i32, Physical>], damage: &[Rectangle<i32, Physical>],
opaque_regions: &[Rectangle<i32, Physical>],
) -> Result<(), TtyRendererError<'render>> { ) -> Result<(), TtyRendererError<'render>> {
let gles_frame = frame.as_gles_frame(); let gles_frame = frame.as_gles_frame();
if let Some(texture) = &self.texture { if let Some(texture) = &self.texture {
RenderElement::<GlesRenderer>::draw(texture, gles_frame, src, dst, damage)?; RenderElement::<GlesRenderer>::draw(
texture,
gles_frame,
src,
dst,
damage,
opaque_regions,
)?;
} else { } else {
RenderElement::<GlesRenderer>::draw(&self.fallback, gles_frame, src, dst, damage)?; RenderElement::<GlesRenderer>::draw(
&self.fallback,
gles_frame,
src,
dst,
damage,
opaque_regions,
)?;
} }
Ok(()) Ok(())
} }
+4 -2
View File
@@ -60,9 +60,10 @@ impl RenderElement<GlesRenderer> for PrimaryGpuTextureRenderElement {
src: Rectangle<f64, Buffer>, src: Rectangle<f64, Buffer>,
dst: Rectangle<i32, Physical>, dst: Rectangle<i32, Physical>,
damage: &[Rectangle<i32, Physical>], damage: &[Rectangle<i32, Physical>],
opaque_regions: &[Rectangle<i32, Physical>],
) -> Result<(), GlesError> { ) -> Result<(), GlesError> {
let gles_frame = frame.as_gles_frame(); let gles_frame = frame.as_gles_frame();
RenderElement::<GlesRenderer>::draw(&self.0, gles_frame, src, dst, damage)?; RenderElement::<GlesRenderer>::draw(&self.0, gles_frame, src, dst, damage, opaque_regions)?;
Ok(()) Ok(())
} }
@@ -80,9 +81,10 @@ impl<'render> RenderElement<TtyRenderer<'render>> for PrimaryGpuTextureRenderEle
src: Rectangle<f64, Buffer>, src: Rectangle<f64, Buffer>,
dst: Rectangle<i32, Physical>, dst: Rectangle<i32, Physical>,
damage: &[Rectangle<i32, Physical>], damage: &[Rectangle<i32, Physical>],
opaque_regions: &[Rectangle<i32, Physical>],
) -> Result<(), TtyRendererError<'render>> { ) -> Result<(), TtyRendererError<'render>> {
let gles_frame = frame.as_gles_frame(); let gles_frame = frame.as_gles_frame();
RenderElement::<GlesRenderer>::draw(&self.0, gles_frame, src, dst, damage)?; RenderElement::<GlesRenderer>::draw(&self.0, gles_frame, src, dst, damage, opaque_regions)?;
Ok(()) Ok(())
} }
+4 -2
View File
@@ -103,10 +103,11 @@ macro_rules! niri_render_elements {
src: smithay::utils::Rectangle<f64, smithay::utils::Buffer>, src: smithay::utils::Rectangle<f64, smithay::utils::Buffer>,
dst: smithay::utils::Rectangle<i32, smithay::utils::Physical>, dst: smithay::utils::Rectangle<i32, smithay::utils::Physical>,
damage: &[smithay::utils::Rectangle<i32, smithay::utils::Physical>], damage: &[smithay::utils::Rectangle<i32, smithay::utils::Physical>],
opaque_regions: &[smithay::utils::Rectangle<i32, smithay::utils::Physical>],
) -> Result<(), smithay::backend::renderer::gles::GlesError> { ) -> Result<(), smithay::backend::renderer::gles::GlesError> {
match self { match self {
$($name::$variant(elem) => { $($name::$variant(elem) => {
smithay::backend::renderer::element::RenderElement::<smithay::backend::renderer::gles::GlesRenderer>::draw(elem, frame, src, dst, damage) smithay::backend::renderer::element::RenderElement::<smithay::backend::renderer::gles::GlesRenderer>::draw(elem, frame, src, dst, damage, opaque_regions)
})+ })+
} }
} }
@@ -127,10 +128,11 @@ macro_rules! niri_render_elements {
src: smithay::utils::Rectangle<f64, smithay::utils::Buffer>, src: smithay::utils::Rectangle<f64, smithay::utils::Buffer>,
dst: smithay::utils::Rectangle<i32, smithay::utils::Physical>, dst: smithay::utils::Rectangle<i32, smithay::utils::Physical>,
damage: &[smithay::utils::Rectangle<i32, smithay::utils::Physical>], damage: &[smithay::utils::Rectangle<i32, smithay::utils::Physical>],
opaque_regions: &[smithay::utils::Rectangle<i32, smithay::utils::Physical>],
) -> Result<(), $crate::backend::tty::TtyRendererError<'render>> { ) -> Result<(), $crate::backend::tty::TtyRendererError<'render>> {
match self { match self {
$($name::$variant(elem) => { $($name::$variant(elem) => {
smithay::backend::renderer::element::RenderElement::<$crate::backend::tty::TtyRenderer<'render>>::draw(elem, frame, src, dst, damage) smithay::backend::renderer::element::RenderElement::<$crate::backend::tty::TtyRenderer<'render>>::draw(elem, frame, src, dst, damage, opaque_regions)
})+ })+
} }
} }
+4 -2
View File
@@ -166,8 +166,9 @@ impl RenderElement<GlesRenderer> for ResizeRenderElement {
src: Rectangle<f64, Buffer>, src: Rectangle<f64, Buffer>,
dst: Rectangle<i32, Physical>, dst: Rectangle<i32, Physical>,
damage: &[Rectangle<i32, Physical>], damage: &[Rectangle<i32, Physical>],
opaque_regions: &[Rectangle<i32, Physical>],
) -> Result<(), GlesError> { ) -> Result<(), GlesError> {
RenderElement::<GlesRenderer>::draw(&self.0, frame, src, dst, damage)?; RenderElement::<GlesRenderer>::draw(&self.0, frame, src, dst, damage, opaque_regions)?;
Ok(()) Ok(())
} }
@@ -183,9 +184,10 @@ impl<'render> RenderElement<TtyRenderer<'render>> for ResizeRenderElement {
src: Rectangle<f64, Buffer>, src: Rectangle<f64, Buffer>,
dst: Rectangle<i32, Physical>, dst: Rectangle<i32, Physical>,
damage: &[Rectangle<i32, Physical>], damage: &[Rectangle<i32, Physical>],
opaque_regions: &[Rectangle<i32, Physical>],
) -> Result<(), TtyRendererError<'render>> { ) -> Result<(), TtyRendererError<'render>> {
let gles_frame = frame.as_gles_frame(); let gles_frame = frame.as_gles_frame();
RenderElement::<GlesRenderer>::draw(&self.0, gles_frame, src, dst, damage)?; RenderElement::<GlesRenderer>::draw(&self.0, gles_frame, src, dst, damage, opaque_regions)?;
Ok(()) Ok(())
} }
+3 -1
View File
@@ -297,6 +297,7 @@ impl RenderElement<GlesRenderer> for ShaderRenderElement {
src: Rectangle<f64, Buffer>, src: Rectangle<f64, Buffer>,
dest: Rectangle<i32, Physical>, dest: Rectangle<i32, Physical>,
damage: &[Rectangle<i32, Physical>], damage: &[Rectangle<i32, Physical>],
_opaque_regions: &[Rectangle<i32, Physical>],
) -> Result<(), GlesError> { ) -> Result<(), GlesError> {
let frame = frame.as_gles_frame(); let frame = frame.as_gles_frame();
@@ -526,10 +527,11 @@ impl<'render> RenderElement<TtyRenderer<'render>> for ShaderRenderElement {
src: Rectangle<f64, Buffer>, src: Rectangle<f64, Buffer>,
dst: Rectangle<i32, Physical>, dst: Rectangle<i32, Physical>,
damage: &[Rectangle<i32, Physical>], damage: &[Rectangle<i32, Physical>],
opaque_regions: &[Rectangle<i32, Physical>],
) -> Result<(), TtyRendererError<'render>> { ) -> Result<(), TtyRendererError<'render>> {
let frame = frame.as_gles_frame(); let frame = frame.as_gles_frame();
RenderElement::<GlesRenderer>::draw(self, frame, src, dst, damage)?; RenderElement::<GlesRenderer>::draw(self, frame, src, dst, damage, opaque_regions)?;
Ok(()) Ok(())
} }
+1
View File
@@ -157,6 +157,7 @@ impl<R: Renderer> RenderElement<R> for SolidColorRenderElement {
_src: Rectangle<f64, Buffer>, _src: Rectangle<f64, Buffer>,
dst: Rectangle<i32, Physical>, dst: Rectangle<i32, Physical>,
damage: &[Rectangle<i32, Physical>], damage: &[Rectangle<i32, Physical>],
_opaque_regions: &[Rectangle<i32, Physical>],
) -> Result<(), <R as Renderer>::Error> { ) -> Result<(), <R as Renderer>::Error> {
frame.draw_solid(dst, damage, self.color) frame.draw_solid(dst, damage, self.color)
} }
+2
View File
@@ -203,6 +203,7 @@ where
src: Rectangle<f64, Buffer>, src: Rectangle<f64, Buffer>,
dest: Rectangle<i32, Physical>, dest: Rectangle<i32, Physical>,
damage: &[Rectangle<i32, Physical>], damage: &[Rectangle<i32, Physical>],
opaque_regions: &[Rectangle<i32, Physical>],
) -> Result<(), <R as Renderer>::Error> { ) -> Result<(), <R as Renderer>::Error> {
if frame.id() != self.buffer.renderer_id { if frame.id() != self.buffer.renderer_id {
warn!("trying to render texture from different renderer"); warn!("trying to render texture from different renderer");
@@ -214,6 +215,7 @@ where
src, src,
dest, dest,
damage, damage,
opaque_regions,
self.buffer.transform, self.buffer.transform,
self.alpha, self.alpha,
) )