render: Merge FromGlesError into AsGlowRenderer

This commit is contained in:
Victoria Brekenfeld 2026-03-04 16:57:17 +01:00 committed by Victoria Brekenfeld
parent 0ce7f11445
commit 8b990e5658
8 changed files with 40 additions and 79 deletions

View file

@ -12,10 +12,9 @@ use smithay::{
},
drm::{CreateDrmNodeError, DrmNode},
renderer::{
RendererSuper,
gles::{GlesError, GlesRenderer, ffi},
glow::GlowRenderer,
multigpu::{ApiDevice, Error as MultiError, GraphicsApi},
multigpu::{ApiDevice, GraphicsApi},
},
},
reexports::drm::control::Device,
@ -32,8 +31,6 @@ use std::{
sync::atomic::{AtomicBool, Ordering},
};
use crate::backend::render::element::FromGlesError;
/// Errors raised by the [`GbmGlesBackend`]
#[derive(Debug, thiserror::Error)]
pub enum Error {
@ -213,15 +210,3 @@ impl ApiDevice for GbmGlowDevice {
!self.intel_export_quirk
}
}
impl<T: GraphicsApi, A: AsFd + Device + Clone + 'static> FromGlesError
for MultiError<GbmGlowBackend<A>, T>
where
T::Error: 'static,
<<T::Device as ApiDevice>::Renderer as RendererSuper>::Error: 'static,
{
#[inline]
fn from_gles_error(err: GlesError) -> MultiError<GbmGlowBackend<A>, T> {
MultiError::Render(err)
}
}

View file

@ -1,4 +1,7 @@
use crate::shell::{CosmicMappedRenderElement, WorkspaceRenderElement};
use crate::{
backend::render::GlMultiError,
shell::{CosmicMappedRenderElement, WorkspaceRenderElement},
};
#[cfg(feature = "debug")]
use smithay::backend::renderer::element::texture::TextureRenderElement;
@ -203,7 +206,6 @@ impl<R> RenderElement<R> for CosmicElement<R>
where
R: AsGlowRenderer,
R::TextureId: 'static,
R::Error: FromGlesError,
CosmicMappedRenderElement<R>: RenderElement<R>,
{
fn draw(
@ -237,7 +239,7 @@ where
opaque_regions,
cache,
)
.map_err(FromGlesError::from_gles_error)
.map_err(R::from_gles_error)
}
CosmicElement::Zoom(elem) => elem.draw(frame, src, dst, damage, opaque_regions, cache),
#[cfg(feature = "debug")]
@ -252,7 +254,7 @@ where
opaque_regions,
cache,
)
.map_err(FromGlesError::from_gles_error)
.map_err(R::from_gles_error)
}
}
}
@ -293,7 +295,7 @@ where
RenderElement::<GlowRenderer>::capture_framebuffer(
elem, glow_frame, src, dst, cache,
)
.map_err(FromGlesError::from_gles_error)
.map_err(R::from_gles_error)
}
CosmicElement::Zoom(elem) => elem.capture_framebuffer(frame, src, dst, cache),
#[cfg(feature = "debug")]
@ -302,7 +304,7 @@ where
RenderElement::<GlowRenderer>::capture_framebuffer(
elem, glow_frame, src, dst, cache,
)
.map_err(FromGlesError::from_gles_error)
.map_err(R::from_gles_error)
}
}
}
@ -365,6 +367,7 @@ pub trait AsGlowRenderer:
fn glow_frame_mut<'a, 'frame, 'buffer>(
frame: &'a mut Self::Frame<'frame, 'buffer>,
) -> &'a mut GlowFrame<'frame, 'buffer>;
fn from_gles_error(err: GlesError) -> Self::Error;
}
impl AsGlowRenderer for GlowRenderer {
@ -384,6 +387,9 @@ impl AsGlowRenderer for GlowRenderer {
) -> &'a mut GlowFrame<'frame, 'buffer> {
frame
}
fn from_gles_error(err: GlesError) -> Self::Error {
err
}
}
impl AsGlowRenderer for GlMultiRenderer<'_> {
@ -403,6 +409,9 @@ impl AsGlowRenderer for GlMultiRenderer<'_> {
) -> &'b mut GlowFrame<'frame, 'buffer> {
frame.as_mut()
}
fn from_gles_error(err: GlesError) -> Self::Error {
GlMultiError::Render(err)
}
}
pub struct DamageElement {
@ -458,13 +467,3 @@ impl<R: Renderer> RenderElement<R> for DamageElement {
Ok(())
}
}
pub trait FromGlesError {
fn from_gles_error(err: GlesError) -> Self;
}
impl FromGlesError for GlesError {
fn from_gles_error(err: GlesError) -> Self {
err
}
}

View file

@ -42,7 +42,6 @@ use crate::{
};
use cosmic::Theme;
use element::FromGlesError;
use smithay::{
backend::{
allocator::Fourcc,
@ -628,7 +627,6 @@ pub fn output_elements<R>(
where
R: AsGlowRenderer,
R::TextureId: Send + Clone + 'static,
R::Error: FromGlesError,
CosmicMappedRenderElement<R>: RenderElement<R>,
WorkspaceRenderElement<R>: RenderElement<R>,
{
@ -655,7 +653,7 @@ where
),
scale,
)
.map_err(FromGlesError::from_gles_error)
.map_err(R::from_gles_error)
.map_err(RenderError::Rendering)?
.into(),
]
@ -728,7 +726,6 @@ pub fn workspace_elements<R>(
where
R: AsGlowRenderer,
R::TextureId: Send + Clone + 'static,
R::Error: FromGlesError,
CosmicMappedRenderElement<R>: RenderElement<R>,
WorkspaceRenderElement<R>: RenderElement<R>,
{
@ -1205,7 +1202,6 @@ pub fn render_output<'d, R>(
where
R: AsGlowRenderer,
R::TextureId: Send + Clone + 'static,
R::Error: FromGlesError,
CosmicElement<R>: RenderElement<R>,
CosmicMappedRenderElement<R>: RenderElement<R>,
WorkspaceRenderElement<R>: RenderElement<R>,
@ -1510,7 +1506,6 @@ pub fn render_workspace<'d, R>(
where
R: AsGlowRenderer,
R::TextureId: Send + Clone + 'static,
R::Error: FromGlesError,
CosmicElement<R>: RenderElement<R>,
CosmicMappedRenderElement<R>: RenderElement<R>,
WorkspaceRenderElement<R>: RenderElement<R>,