mirror of
https://github.com/niri-wm/niri.git
synced 2026-06-21 02:01:55 +07:00
Upgrade Smithay (framebuffer effect, subframes)
This commit is contained in:
Generated
+2
-2
@@ -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",
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -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
@@ -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,
|
||||
)
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
@@ -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(())
|
||||
}
|
||||
|
||||
|
||||
@@ -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(())
|
||||
}
|
||||
|
||||
@@ -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(())
|
||||
}
|
||||
|
||||
@@ -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(())
|
||||
}
|
||||
|
||||
|
||||
@@ -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")?;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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(())
|
||||
}
|
||||
|
||||
|
||||
@@ -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(())
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
})+
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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(())
|
||||
}
|
||||
|
||||
|
||||
@@ -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(())
|
||||
}
|
||||
|
||||
@@ -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(())
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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(())
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user