Upgrade Smithay (framebuffer effect, subframes)

This commit is contained in:
Ivan Molodetskikh
2026-02-02 16:32:42 +03:00
parent 0117d6953d
commit 250aa1f3cb
18 changed files with 203 additions and 24 deletions
Generated
+2 -2
View File
@@ -3475,7 +3475,7 @@ checksum = "b7c388c1b5e93756d0c740965c41e8822f866621d41acbdf6336a6a168f8840c"
[[package]]
name = "smithay"
version = "0.7.0"
source = "git+https://github.com/Smithay/smithay.git#f1d0d2c43e843233119af3dcf76d619e1afff4ee"
source = "git+https://github.com/Smithay/smithay.git?rev=dce4d34e7421559b661af9c519904f4b24346148#dce4d34e7421559b661af9c519904f4b24346148"
dependencies = [
"aliasable",
"appendlist",
@@ -3550,7 +3550,7 @@ dependencies = [
[[package]]
name = "smithay-drm-extras"
version = "0.1.0"
source = "git+https://github.com/Smithay/smithay.git#f1d0d2c43e843233119af3dcf76d619e1afff4ee"
source = "git+https://github.com/Smithay/smithay.git?rev=dce4d34e7421559b661af9c519904f4b24346148#dce4d34e7421559b661af9c519904f4b24346148"
dependencies = [
"drm",
"libdisplay-info",
+2
View File
@@ -31,12 +31,14 @@ tracy-client = { version = "0.18.4", default-features = false }
[workspace.dependencies.smithay]
# version = "0.4.1"
git = "https://github.com/Smithay/smithay.git"
rev = "dce4d34e7421559b661af9c519904f4b24346148"
# path = "../smithay"
default-features = false
[workspace.dependencies.smithay-drm-extras]
# version = "0.1.0"
git = "https://github.com/Smithay/smithay.git"
rev = "dce4d34e7421559b661af9c519904f4b24346148"
# path = "../smithay/smithay-drm-extras"
[package]
+9 -1
View File
@@ -20,6 +20,7 @@ mod imp {
use smithay::backend::renderer::gles::{GlesRenderer, GlesTexture};
use smithay::backend::renderer::{Bind, Color32F, Frame, Offscreen, Renderer};
use smithay::reexports::gbm::Format as Fourcc;
use smithay::utils::user_data::UserDataMap;
use smithay::utils::{Physical, Rectangle, Scale, Transform};
use super::*;
@@ -206,8 +207,15 @@ mod imp {
if let Some(mut damage) = rect.intersection(dst) {
damage.loc -= dst.loc;
let cache = UserDataMap::new();
if element.is_framebuffer_effect() {
element
.capture_framebuffer(&mut frame, src, dst, &cache)
.context("error in capture_framebuffer()")?;
}
element
.draw(&mut frame, src, dst, &[damage], &[])
.draw(&mut frame, src, dst, &[damage], &[], Some(&cache))
.context("error drawing element")?;
}
}
+31 -5
View File
@@ -4688,6 +4688,7 @@ impl Niri {
surface,
output,
states,
None,
render_element_states,
default_primary_scanout_output_compare,
);
@@ -4706,6 +4707,7 @@ impl Niri {
surface,
output,
states,
None,
render_element_states,
default_primary_scanout_output_compare,
);
@@ -4762,6 +4764,7 @@ impl Niri {
primary_scanout_output.update_from_render_element_states(
id,
output,
None,
render_element_states,
|_, _, output, _| output,
);
@@ -4807,6 +4810,7 @@ impl Niri {
primary_scanout_output.update_from_render_element_states(
id,
output,
None,
render_element_states,
// Layer surfaces are shown only on one output at a time.
|_, _, output, _| output,
@@ -4821,6 +4825,7 @@ impl Niri {
surface,
output,
states,
None,
render_element_states,
// Layer surfaces are shown only on one output at a time.
|_, _, output, _| output,
@@ -4839,6 +4844,7 @@ impl Niri {
surface,
output,
states,
None,
render_element_states,
default_primary_scanout_output_compare,
);
@@ -5110,7 +5116,11 @@ impl Niri {
&mut feedback,
surface_primary_scanout_output,
|surface, _| {
surface_presentation_feedback_flags_from_states(surface, render_element_states)
surface_presentation_feedback_flags_from_states(
surface,
None,
render_element_states,
)
},
);
}
@@ -5121,7 +5131,11 @@ impl Niri {
&mut feedback,
surface_primary_scanout_output,
|surface, _| {
surface_presentation_feedback_flags_from_states(surface, render_element_states)
surface_presentation_feedback_flags_from_states(
surface,
None,
render_element_states,
)
},
);
}
@@ -5131,7 +5145,11 @@ impl Niri {
&mut feedback,
surface_primary_scanout_output,
|surface, _| {
surface_presentation_feedback_flags_from_states(surface, render_element_states)
surface_presentation_feedback_flags_from_states(
surface,
None,
render_element_states,
)
},
)
}
@@ -5141,7 +5159,11 @@ impl Niri {
&mut feedback,
surface_primary_scanout_output,
|surface, _| {
surface_presentation_feedback_flags_from_states(surface, render_element_states)
surface_presentation_feedback_flags_from_states(
surface,
None,
render_element_states,
)
},
);
}
@@ -5152,7 +5174,11 @@ impl Niri {
&mut feedback,
surface_primary_scanout_output,
|surface, _| {
surface_presentation_feedback_flags_from_states(surface, render_element_states)
surface_presentation_feedback_flags_from_states(
surface,
None,
render_element_states,
)
},
);
}
+5 -1
View File
@@ -9,6 +9,7 @@ use smithay::backend::renderer::element::{Element, Id, Kind, RenderElement, Unde
use smithay::backend::renderer::gles::{GlesError, GlesFrame, GlesRenderer, Uniform};
use smithay::backend::renderer::utils::{CommitCounter, DamageSet, OpaqueRegions};
use smithay::gpu_span_location;
use smithay::utils::user_data::UserDataMap;
use smithay::utils::{Buffer, Logical, Physical, Point, Rectangle, Scale, Size, Transform};
use super::renderer::NiriRenderer;
@@ -285,6 +286,7 @@ impl RenderElement<GlesRenderer> for BorderRenderElement {
dst: Rectangle<i32, Physical>,
damage: &[Rectangle<i32, Physical>],
opaque_regions: &[Rectangle<i32, Physical>],
cache: Option<&UserDataMap>,
) -> Result<(), GlesError> {
let _span = tracy_client::span!("BorderRenderElement::draw");
frame.with_gpu_span(gpu_span_location!("BorderRenderElement::draw"), |frame| {
@@ -295,6 +297,7 @@ impl RenderElement<GlesRenderer> for BorderRenderElement {
dst,
damage,
opaque_regions,
cache,
)
})
}
@@ -312,9 +315,10 @@ impl<'render> RenderElement<TtyRenderer<'render>> for BorderRenderElement {
dst: Rectangle<i32, Physical>,
damage: &[Rectangle<i32, Physical>],
opaque_regions: &[Rectangle<i32, Physical>],
cache: Option<&UserDataMap>,
) -> Result<(), TtyRendererError<'render>> {
let frame = frame.as_gles_frame();
RenderElement::<GlesRenderer>::draw(self, frame, src, dst, damage, opaque_regions)?;
RenderElement::<GlesRenderer>::draw(self, frame, src, dst, damage, opaque_regions, cache)?;
Ok(())
}
+13 -2
View File
@@ -6,6 +6,7 @@ use smithay::backend::renderer::gles::{
GlesError, GlesFrame, GlesRenderer, GlesTexProgram, Uniform,
};
use smithay::backend::renderer::utils::{CommitCounter, DamageSet, OpaqueRegions};
use smithay::utils::user_data::UserDataMap;
use smithay::utils::{Buffer, Logical, Physical, Point, Rectangle, Scale, Size, Transform};
use super::damage::ExtraDamage;
@@ -228,9 +229,18 @@ impl RenderElement<GlesRenderer> for ClippedSurfaceRenderElement<GlesRenderer> {
dst: Rectangle<i32, Physical>,
damage: &[Rectangle<i32, Physical>],
opaque_regions: &[Rectangle<i32, Physical>],
cache: Option<&UserDataMap>,
) -> Result<(), GlesError> {
frame.override_default_tex_program(self.program.clone(), self.compute_uniforms());
RenderElement::<GlesRenderer>::draw(&self.inner, frame, src, dst, damage, opaque_regions)?;
RenderElement::<GlesRenderer>::draw(
&self.inner,
frame,
src,
dst,
damage,
opaque_regions,
cache,
)?;
frame.clear_tex_program_override();
Ok(())
}
@@ -252,11 +262,12 @@ impl<'render> RenderElement<TtyRenderer<'render>>
dst: Rectangle<i32, Physical>,
damage: &[Rectangle<i32, Physical>],
opaque_regions: &[Rectangle<i32, Physical>],
cache: Option<&UserDataMap>,
) -> Result<(), TtyRendererError<'render>> {
frame
.as_gles_frame()
.override_default_tex_program(self.program.clone(), self.compute_uniforms());
RenderElement::draw(&self.inner, frame, src, dst, damage, opaque_regions)?;
RenderElement::draw(&self.inner, frame, src, dst, damage, opaque_regions, cache)?;
frame.as_gles_frame().clear_tex_program_override();
Ok(())
}
+2
View File
@@ -1,6 +1,7 @@
use smithay::backend::renderer::element::{Element, Id, RenderElement};
use smithay::backend::renderer::utils::CommitCounter;
use smithay::backend::renderer::Renderer;
use smithay::utils::user_data::UserDataMap;
use smithay::utils::{Buffer, Logical, Physical, Rectangle, Scale, Size};
#[derive(Debug, Clone)]
@@ -62,6 +63,7 @@ impl<R: Renderer> RenderElement<R> for ExtraDamage {
_dst: Rectangle<i32, Physical>,
_damage: &[Rectangle<i32, Physical>],
_opaque_regions: &[Rectangle<i32, Physical>],
_cache: Option<&UserDataMap>,
) -> Result<(), R::Error> {
Ok(())
}
+21 -2
View File
@@ -3,6 +3,7 @@ use smithay::backend::renderer::gles::{
GlesError, GlesFrame, GlesRenderer, GlesTexProgram, GlesTexture, Uniform,
};
use smithay::backend::renderer::utils::{CommitCounter, DamageSet, OpaqueRegions};
use smithay::utils::user_data::UserDataMap;
use smithay::utils::{Buffer, Physical, Rectangle, Scale, Transform};
use super::texture::TextureRenderElement;
@@ -96,10 +97,19 @@ impl RenderElement<GlesRenderer> for GradientFadeTextureRenderElement {
dst: Rectangle<i32, Physical>,
damage: &[Rectangle<i32, Physical>],
opaque_regions: &[Rectangle<i32, Physical>],
cache: Option<&UserDataMap>,
) -> Result<(), GlesError> {
let uniforms = vec![Uniform::new("cutoff", self.cutoff)];
frame.override_default_tex_program(self.program.0.clone(), uniforms);
RenderElement::<GlesRenderer>::draw(&self.inner, frame, src, dst, damage, opaque_regions)?;
RenderElement::<GlesRenderer>::draw(
&self.inner,
frame,
src,
dst,
damage,
opaque_regions,
cache,
)?;
frame.clear_tex_program_override();
Ok(())
}
@@ -119,9 +129,18 @@ impl<'render> RenderElement<TtyRenderer<'render>> for GradientFadeTextureRenderE
dst: Rectangle<i32, Physical>,
damage: &[Rectangle<i32, Physical>],
opaque_regions: &[Rectangle<i32, Physical>],
cache: Option<&UserDataMap>,
) -> Result<(), TtyRendererError<'render>> {
let gles_frame = frame.as_gles_frame();
RenderElement::<GlesRenderer>::draw(&self, gles_frame, src, dst, damage, opaque_regions)?;
RenderElement::<GlesRenderer>::draw(
&self,
gles_frame,
src,
dst,
damage,
opaque_regions,
cache,
)?;
Ok(())
}
+9 -1
View File
@@ -15,6 +15,7 @@ use smithay::backend::renderer::{
};
use smithay::reexports::wayland_server::protocol::wl_buffer::WlBuffer;
use smithay::reexports::wayland_server::protocol::wl_shm;
use smithay::utils::user_data::UserDataMap;
use smithay::utils::{Logical, Physical, Point, Rectangle, Scale, Size, Transform};
use smithay::wayland::shm;
use solid_color::{SolidColorBuffer, SolidColorRenderElement};
@@ -359,8 +360,15 @@ fn render_elements(
if let Some(mut damage) = output_rect.intersection(dst) {
damage.loc -= dst.loc;
let cache = UserDataMap::new();
if element.is_framebuffer_effect() {
element
.capture_framebuffer(&mut frame, src, dst, &cache)
.context("error in capture_framebuffer()")?;
}
element
.draw(&mut frame, src, dst, &[damage], &[])
.draw(&mut frame, src, dst, &[damage], &[], Some(&cache))
.context("error drawing element")?;
}
}
+12 -1
View File
@@ -15,6 +15,7 @@ use smithay::backend::renderer::utils::{
use smithay::backend::renderer::{
Bind as _, Color32F, ContextId, Frame as _, Offscreen as _, Renderer, Texture as _,
};
use smithay::utils::user_data::UserDataMap;
use smithay::utils::{Buffer, Logical, Physical, Point, Rectangle, Scale, Size, Transform};
use super::encompassing_geo;
@@ -306,6 +307,7 @@ impl RenderElement<GlesRenderer> for OffscreenRenderElement {
dest: Rectangle<i32, Physical>,
damage: &[Rectangle<i32, Physical>],
opaque_regions: &[Rectangle<i32, Physical>],
_cache: Option<&UserDataMap>,
) -> Result<(), GlesError> {
if frame.context_id() != self.renderer_context_id {
warn!("trying to render texture from different renderer");
@@ -340,9 +342,18 @@ impl<'render> RenderElement<TtyRenderer<'render>> for OffscreenRenderElement {
dst: Rectangle<i32, Physical>,
damage: &[Rectangle<i32, Physical>],
opaque_regions: &[Rectangle<i32, Physical>],
cache: Option<&UserDataMap>,
) -> Result<(), TtyRendererError<'render>> {
let gles_frame = frame.as_gles_frame();
RenderElement::<GlesRenderer>::draw(&self, gles_frame, src, dst, damage, opaque_regions)?;
RenderElement::<GlesRenderer>::draw(
&self,
gles_frame,
src,
dst,
damage,
opaque_regions,
cache,
)?;
Ok(())
}
+21 -2
View File
@@ -1,6 +1,7 @@
use smithay::backend::renderer::element::{Element, Id, Kind, RenderElement, UnderlyingStorage};
use smithay::backend::renderer::gles::{GlesError, GlesFrame, GlesRenderer, GlesTexture};
use smithay::backend::renderer::utils::{CommitCounter, DamageSet, OpaqueRegions};
use smithay::utils::user_data::UserDataMap;
use smithay::utils::{Buffer, Physical, Rectangle, Scale, Transform};
use super::renderer::AsGlesFrame;
@@ -61,9 +62,18 @@ impl RenderElement<GlesRenderer> for PrimaryGpuTextureRenderElement {
dst: Rectangle<i32, Physical>,
damage: &[Rectangle<i32, Physical>],
opaque_regions: &[Rectangle<i32, Physical>],
cache: Option<&UserDataMap>,
) -> Result<(), GlesError> {
let gles_frame = frame.as_gles_frame();
RenderElement::<GlesRenderer>::draw(&self.0, gles_frame, src, dst, damage, opaque_regions)?;
RenderElement::<GlesRenderer>::draw(
&self.0,
gles_frame,
src,
dst,
damage,
opaque_regions,
cache,
)?;
Ok(())
}
@@ -82,9 +92,18 @@ impl<'render> RenderElement<TtyRenderer<'render>> for PrimaryGpuTextureRenderEle
dst: Rectangle<i32, Physical>,
damage: &[Rectangle<i32, Physical>],
opaque_regions: &[Rectangle<i32, Physical>],
cache: Option<&UserDataMap>,
) -> Result<(), TtyRendererError<'render>> {
let gles_frame = frame.as_gles_frame();
RenderElement::<GlesRenderer>::draw(&self.0, gles_frame, src, dst, damage, opaque_regions)?;
RenderElement::<GlesRenderer>::draw(
&self.0,
gles_frame,
src,
dst,
damage,
opaque_regions,
cache,
)?;
Ok(())
}
+38 -2
View File
@@ -93,11 +93,31 @@ macro_rules! niri_render_elements {
$($name::$variant(elem) => elem.kind()),+
}
}
fn is_framebuffer_effect(&self) -> bool {
match self {
$($name::$variant(elem) => elem.is_framebuffer_effect()),+
}
}
}
impl smithay::backend::renderer::element::RenderElement<smithay::backend::renderer::gles::GlesRenderer>
for $($name_R<smithay::backend::renderer::gles::GlesRenderer>)? $($name_no_R)?
{
fn capture_framebuffer(
&self,
frame: &mut smithay::backend::renderer::gles::GlesFrame<'_, '_>,
src: smithay::utils::Rectangle<f64, smithay::utils::Buffer>,
dst: smithay::utils::Rectangle<i32, smithay::utils::Physical>,
cache: &smithay::utils::user_data::UserDataMap,
) -> Result<(), smithay::backend::renderer::gles::GlesError> {
match self {
$($name::$variant(elem) => {
smithay::backend::renderer::element::RenderElement::<smithay::backend::renderer::gles::GlesRenderer>::capture_framebuffer(elem, frame, src, dst, cache)
})+
}
}
fn draw(
&self,
frame: &mut smithay::backend::renderer::gles::GlesFrame<'_, '_>,
@@ -105,10 +125,11 @@ macro_rules! niri_render_elements {
dst: smithay::utils::Rectangle<i32, smithay::utils::Physical>,
damage: &[smithay::utils::Rectangle<i32, smithay::utils::Physical>],
opaque_regions: &[smithay::utils::Rectangle<i32, smithay::utils::Physical>],
cache: Option<&smithay::utils::user_data::UserDataMap>,
) -> Result<(), smithay::backend::renderer::gles::GlesError> {
match self {
$($name::$variant(elem) => {
smithay::backend::renderer::element::RenderElement::<smithay::backend::renderer::gles::GlesRenderer>::draw(elem, frame, src, dst, damage, opaque_regions)
smithay::backend::renderer::element::RenderElement::<smithay::backend::renderer::gles::GlesRenderer>::draw(elem, frame, src, dst, damage, opaque_regions, cache)
})+
}
}
@@ -123,6 +144,20 @@ macro_rules! niri_render_elements {
impl<'render> smithay::backend::renderer::element::RenderElement<$crate::backend::tty::TtyRenderer<'render>>
for $($name_R<$crate::backend::tty::TtyRenderer<'render>>)? $($name_no_R)?
{
fn capture_framebuffer(
&self,
frame: &mut $crate::backend::tty::TtyFrame<'render, '_, '_>,
src: smithay::utils::Rectangle<f64, smithay::utils::Buffer>,
dst: smithay::utils::Rectangle<i32, smithay::utils::Physical>,
cache: &smithay::utils::user_data::UserDataMap,
) -> Result<(), $crate::backend::tty::TtyRendererError<'render>> {
match self {
$($name::$variant(elem) => {
smithay::backend::renderer::element::RenderElement::<$crate::backend::tty::TtyRenderer<'render>>::capture_framebuffer(elem, frame, src, dst, cache)
})+
}
}
fn draw(
&self,
frame: &mut $crate::backend::tty::TtyFrame<'render, '_, '_>,
@@ -130,10 +165,11 @@ macro_rules! niri_render_elements {
dst: smithay::utils::Rectangle<i32, smithay::utils::Physical>,
damage: &[smithay::utils::Rectangle<i32, smithay::utils::Physical>],
opaque_regions: &[smithay::utils::Rectangle<i32, smithay::utils::Physical>],
cache: Option<&smithay::utils::user_data::UserDataMap>,
) -> Result<(), $crate::backend::tty::TtyRendererError<'render>> {
match self {
$($name::$variant(elem) => {
smithay::backend::renderer::element::RenderElement::<$crate::backend::tty::TtyRenderer<'render>>::draw(elem, frame, src, dst, damage, opaque_regions)
smithay::backend::renderer::element::RenderElement::<$crate::backend::tty::TtyRenderer<'render>>::draw(elem, frame, src, dst, damage, opaque_regions, cache)
})+
}
}
+13 -2
View File
@@ -8,6 +8,7 @@ use smithay::backend::renderer::gles::{GlesError, GlesFrame, GlesRenderer, GlesT
use smithay::backend::renderer::utils::{CommitCounter, DamageSet, OpaqueRegions};
use smithay::backend::renderer::Texture as _;
use smithay::gpu_span_location;
use smithay::utils::user_data::UserDataMap;
use smithay::utils::{Buffer, Logical, Physical, Rectangle, Scale, Size, Transform};
use super::renderer::{AsGlesFrame, NiriRenderer};
@@ -171,10 +172,19 @@ impl RenderElement<GlesRenderer> for ResizeRenderElement {
dst: Rectangle<i32, Physical>,
damage: &[Rectangle<i32, Physical>],
opaque_regions: &[Rectangle<i32, Physical>],
cache: Option<&UserDataMap>,
) -> Result<(), GlesError> {
let _span = tracy_client::span!("ResizeRenderElement::draw");
frame.with_gpu_span(gpu_span_location!("ResizeRenderElement::draw"), |frame| {
RenderElement::<GlesRenderer>::draw(&self.0, frame, src, dst, damage, opaque_regions)
RenderElement::<GlesRenderer>::draw(
&self.0,
frame,
src,
dst,
damage,
opaque_regions,
cache,
)
})
}
@@ -191,9 +201,10 @@ impl<'render> RenderElement<TtyRenderer<'render>> for ResizeRenderElement {
dst: Rectangle<i32, Physical>,
damage: &[Rectangle<i32, Physical>],
opaque_regions: &[Rectangle<i32, Physical>],
cache: Option<&UserDataMap>,
) -> Result<(), TtyRendererError<'render>> {
let frame = frame.as_gles_frame();
RenderElement::<GlesRenderer>::draw(self, frame, src, dst, damage, opaque_regions)?;
RenderElement::<GlesRenderer>::draw(self, frame, src, dst, damage, opaque_regions, cache)?;
Ok(())
}
+4 -1
View File
@@ -10,6 +10,7 @@ use smithay::backend::renderer::gles::{
};
use smithay::backend::renderer::utils::{CommitCounter, OpaqueRegions};
use smithay::backend::renderer::DebugFlags;
use smithay::utils::user_data::UserDataMap;
use smithay::utils::{Buffer, Logical, Physical, Point, Rectangle, Scale, Size};
use super::renderer::AsGlesFrame;
@@ -293,6 +294,7 @@ impl RenderElement<GlesRenderer> for ShaderRenderElement {
dest: Rectangle<i32, Physical>,
damage: &[Rectangle<i32, Physical>],
_opaque_regions: &[Rectangle<i32, Physical>],
_cache: Option<&UserDataMap>,
) -> Result<(), GlesError> {
let _span = tracy_client::span!("ShaderRenderElement::draw");
@@ -527,10 +529,11 @@ impl<'render> RenderElement<TtyRenderer<'render>> for ShaderRenderElement {
dst: Rectangle<i32, Physical>,
damage: &[Rectangle<i32, Physical>],
opaque_regions: &[Rectangle<i32, Physical>],
cache: Option<&UserDataMap>,
) -> Result<(), TtyRendererError<'render>> {
let frame = frame.as_gles_frame();
RenderElement::<GlesRenderer>::draw(self, frame, src, dst, damage, opaque_regions)?;
RenderElement::<GlesRenderer>::draw(self, frame, src, dst, damage, opaque_regions, cache)?;
Ok(())
}
+5 -1
View File
@@ -7,6 +7,7 @@ use smithay::backend::renderer::element::{Element, Id, Kind, RenderElement, Unde
use smithay::backend::renderer::gles::{GlesError, GlesFrame, GlesRenderer, Uniform};
use smithay::backend::renderer::utils::{CommitCounter, DamageSet, OpaqueRegions};
use smithay::gpu_span_location;
use smithay::utils::user_data::UserDataMap;
use smithay::utils::{Buffer, Logical, Physical, Point, Rectangle, Scale, Size, Transform};
use super::renderer::NiriRenderer;
@@ -246,6 +247,7 @@ impl RenderElement<GlesRenderer> for ShadowRenderElement {
dst: Rectangle<i32, Physical>,
damage: &[Rectangle<i32, Physical>],
opaque_regions: &[Rectangle<i32, Physical>],
cache: Option<&UserDataMap>,
) -> Result<(), GlesError> {
let _span = tracy_client::span!("ShadowRenderElement::draw");
frame.with_gpu_span(gpu_span_location!("ShadowRenderElement::draw"), |frame| {
@@ -256,6 +258,7 @@ impl RenderElement<GlesRenderer> for ShadowRenderElement {
dst,
damage,
opaque_regions,
cache,
)
})
}
@@ -273,9 +276,10 @@ impl<'render> RenderElement<TtyRenderer<'render>> for ShadowRenderElement {
dst: Rectangle<i32, Physical>,
damage: &[Rectangle<i32, Physical>],
opaque_regions: &[Rectangle<i32, Physical>],
cache: Option<&UserDataMap>,
) -> Result<(), TtyRendererError<'render>> {
let frame = frame.as_gles_frame();
RenderElement::<GlesRenderer>::draw(self, frame, src, dst, damage, opaque_regions)?;
RenderElement::<GlesRenderer>::draw(self, frame, src, dst, damage, opaque_regions, cache)?;
Ok(())
}
+2
View File
@@ -1,6 +1,7 @@
use smithay::backend::renderer::element::{Element, Id, Kind, RenderElement, UnderlyingStorage};
use smithay::backend::renderer::utils::{CommitCounter, OpaqueRegions};
use smithay::backend::renderer::{Color32F, Frame as _, Renderer};
use smithay::utils::user_data::UserDataMap;
use smithay::utils::{Buffer, Logical, Physical, Point, Rectangle, Scale, Size};
/// Smithay's solid color buffer, but with fractional scale.
@@ -158,6 +159,7 @@ impl<R: Renderer> RenderElement<R> for SolidColorRenderElement {
dst: Rectangle<i32, Physical>,
damage: &[Rectangle<i32, Physical>],
_opaque_regions: &[Rectangle<i32, Physical>],
_cache: Option<&UserDataMap>,
) -> Result<(), R::Error> {
frame.draw_solid(dst, damage, self.color)
}
+2
View File
@@ -3,6 +3,7 @@ use smithay::backend::renderer::element::{Element, Id, Kind, RenderElement, Unde
use smithay::backend::renderer::gles::GlesTexture;
use smithay::backend::renderer::utils::{CommitCounter, OpaqueRegions};
use smithay::backend::renderer::{ContextId, Frame as _, ImportMem, Renderer, Texture};
use smithay::utils::user_data::UserDataMap;
use smithay::utils::{Buffer, Logical, Physical, Point, Rectangle, Scale, Size, Transform};
use super::memory::MemoryBuffer;
@@ -230,6 +231,7 @@ where
dest: Rectangle<i32, Physical>,
damage: &[Rectangle<i32, Physical>],
opaque_regions: &[Rectangle<i32, Physical>],
_cache: Option<&UserDataMap>,
) -> Result<(), R::Error> {
if frame.context_id() != self.buffer.renderer_context_id {
warn!("trying to render texture from different renderer");
+12 -1
View File
@@ -10,6 +10,7 @@ use smithay::backend::renderer::gles::{
};
use smithay::backend::renderer::utils::{CommitCounter, OpaqueRegions};
use smithay::backend::renderer::Color32F;
use smithay::utils::user_data::UserDataMap;
use smithay::utils::{Buffer, Logical, Physical, Point, Rectangle, Scale, Size, Transform};
use crate::backend::tty::{TtyFrame, TtyRenderer, TtyRendererError};
@@ -303,6 +304,7 @@ impl RenderElement<GlesRenderer> for XrayElement {
dst: Rectangle<i32, Physical>,
damage: &[Rectangle<i32, Physical>],
_opaque_regions: &[Rectangle<i32, Physical>],
_cache: Option<&UserDataMap>,
) -> Result<(), GlesError> {
let mut buffer = self.buffer.borrow_mut();
let texture = match buffer.render(frame, self.blur) {
@@ -363,9 +365,18 @@ impl<'render> RenderElement<TtyRenderer<'render>> for XrayElement {
dst: Rectangle<i32, Physical>,
damage: &[Rectangle<i32, Physical>],
opaque_regions: &[Rectangle<i32, Physical>],
cache: Option<&UserDataMap>,
) -> Result<(), TtyRendererError<'render>> {
let gles_frame = frame.as_gles_frame();
RenderElement::<GlesRenderer>::draw(&self, gles_frame, src, dst, damage, opaque_regions)?;
RenderElement::<GlesRenderer>::draw(
&self,
gles_frame,
src,
dst,
damage,
opaque_regions,
cache,
)?;
Ok(())
}
}