aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorChristian Meissl <meissl.christian@gmail.com>2024-07-05 21:49:08 +0200
committerIvan Molodetskikh <yalterz@gmail.com>2024-07-08 08:30:00 +0300
commit570bf1cb3c1f9ffc847359009c6061e062c72871 (patch)
treef087b302e1f25c61556170735fe9a70fe14ce9bb /src
parent6ec9c72539684ed409427649a11837ab56a0250c (diff)
downloadniri-570bf1cb3c1f9ffc847359009c6061e062c72871.tar.gz
niri-570bf1cb3c1f9ffc847359009c6061e062c72871.tar.bz2
niri-570bf1cb3c1f9ffc847359009c6061e062c72871.zip
bump smithay
Diffstat (limited to 'src')
-rw-r--r--src/backend/tty.rs39
-rw-r--r--src/handlers/compositor.rs3
-rw-r--r--src/handlers/xdg_shell.rs6
-rw-r--r--src/render_helpers/renderer.rs4
-rw-r--r--src/render_helpers/surface.rs12
-rw-r--r--src/window/mapped.rs8
6 files changed, 32 insertions, 40 deletions
diff --git a/src/backend/tty.rs b/src/backend/tty.rs
index 0654f4f0..dc0954d3 100644
--- a/src/backend/tty.rs
+++ b/src/backend/tty.rs
@@ -24,9 +24,9 @@ use smithay::backend::drm::{
DrmDevice, DrmDeviceFd, DrmEvent, DrmEventMetadata, DrmEventTime, DrmNode, NodeType,
};
use smithay::backend::egl::context::ContextPriority;
-use smithay::backend::egl::{EGLContext, EGLDevice, EGLDisplay};
+use smithay::backend::egl::{EGLDevice, EGLDisplay};
use smithay::backend::libinput::{LibinputInputBackend, LibinputSessionInterface};
-use smithay::backend::renderer::gles::{Capability, GlesRenderer};
+use smithay::backend::renderer::gles::GlesRenderer;
use smithay::backend::renderer::multigpu::gbm::GbmGlesBackend;
use smithay::backend::renderer::multigpu::{GpuManager, MultiFrame, MultiRenderer};
use smithay::backend::renderer::{DebugFlags, ImportDma, ImportEgl, Renderer};
@@ -148,7 +148,16 @@ impl OutputDevice {
builder.add_connector(connector);
builder.add_crtc(*crtc);
let planes = self.drm.planes(crtc).map_err(LeaseRejected::with_cause)?;
- builder.add_plane(planes.primary.handle);
+ let (primary_plane, primary_plane_claim) = planes
+ .primary
+ .iter()
+ .find_map(|plane| {
+ self.drm
+ .claim_plane(plane.handle, *crtc)
+ .map(|claim| (plane, claim))
+ })
+ .ok_or_else(LeaseRejected::default)?;
+ builder.add_plane(primary_plane.handle, primary_plane_claim);
}
Ok(builder)
}
@@ -239,25 +248,7 @@ impl Tty {
})
.unwrap();
- let config_ = config.clone();
- let create_renderer = move |display: &EGLDisplay| {
- let color_transforms = config_
- .borrow()
- .debug
- .enable_color_transformations_capability;
-
- let egl_context = EGLContext::new_with_priority(display, ContextPriority::High)?;
- let gles = if color_transforms {
- unsafe { GlesRenderer::new(egl_context)? }
- } else {
- let capabilities = unsafe { GlesRenderer::supported_capabilities(&egl_context) }?
- .into_iter()
- .filter(|c| *c != Capability::ColorTransformations);
- unsafe { GlesRenderer::with_capabilities(egl_context, capabilities)? }
- };
- Ok(gles)
- };
- let api = GbmGlesBackend::with_factory(Box::new(create_renderer));
+ let api = GbmGlesBackend::with_context_priority(ContextPriority::High);
let gpu_manager = GpuManager::new(api).context("error creating the GPU manager")?;
let (primary_node, primary_render_node) = primary_node_from_config(&config.borrow())
@@ -1987,8 +1978,8 @@ fn surface_dmabuf_feedback(
let surface = compositor.surface();
let planes = surface.planes();
- let plane_formats = planes
- .primary
+ let plane_formats = surface
+ .plane_info()
.formats
.iter()
.chain(planes.overlay.iter().flat_map(|p| p.formats.iter()))
diff --git a/src/handlers/compositor.rs b/src/handlers/compositor.rs
index 34030124..583e88bd 100644
--- a/src/handlers/compositor.rs
+++ b/src/handlers/compositor.rs
@@ -50,7 +50,8 @@ impl CompositorHandler for State {
let maybe_dmabuf = with_states(surface, |surface_data| {
surface_data
.cached_state
- .pending::<SurfaceAttributes>()
+ .get::<SurfaceAttributes>()
+ .pending()
.buffer
.as_ref()
.and_then(|assignment| match assignment {
diff --git a/src/handlers/xdg_shell.rs b/src/handlers/xdg_shell.rs
index 73eb01e9..4dc353b5 100644
--- a/src/handlers/xdg_shell.rs
+++ b/src/handlers/xdg_shell.rs
@@ -1006,8 +1006,10 @@ pub fn add_mapped_toplevel_pre_commit_hook(toplevel: &ToplevelSurface) -> HookId
};
let (got_unmapped, commit_serial) = with_states(surface, |states| {
- let attrs = states.cached_state.pending::<SurfaceAttributes>();
- let got_unmapped = matches!(attrs.buffer, Some(BufferAssignment::Removed));
+ let got_unmapped = {
+ let mut guard = states.cached_state.get::<SurfaceAttributes>();
+ matches!(guard.pending().buffer, Some(BufferAssignment::Removed))
+ };
let role = states
.data_map
diff --git a/src/render_helpers/renderer.rs b/src/render_helpers/renderer.rs
index 5c483182..f4872738 100644
--- a/src/render_helpers/renderer.rs
+++ b/src/render_helpers/renderer.rs
@@ -17,7 +17,7 @@ pub trait NiriRenderer:
+ AsGlesRenderer
{
// Associated types to work around the instability of associated type bounds.
- type NiriTextureId: Texture + Clone + 'static;
+ type NiriTextureId: Texture + Clone + Send + 'static;
type NiriError: std::error::Error
+ Send
+ Sync
@@ -28,7 +28,7 @@ pub trait NiriRenderer:
impl<R> NiriRenderer for R
where
R: ImportAll + ImportMem + ExportMem + Bind<Dmabuf> + Offscreen<GlesTexture> + AsGlesRenderer,
- R::TextureId: Texture + Clone + 'static,
+ R::TextureId: Texture + Clone + Send + 'static,
R::Error: std::error::Error + Send + Sync + From<<GlesRenderer as Renderer>::Error> + 'static,
{
type NiriTextureId = R::TextureId;
diff --git a/src/render_helpers/surface.rs b/src/render_helpers/surface.rs
index 93738673..96065923 100644
--- a/src/render_helpers/surface.rs
+++ b/src/render_helpers/surface.rs
@@ -25,7 +25,7 @@ pub fn render_snapshot_from_surface_tree(
let data = states.data_map.get::<RendererSurfaceStateUserData>();
if let Some(data) = data {
- let data = &*data.borrow();
+ let data = &*data.lock().unwrap();
if let Some(view) = data.view() {
location += view.offset.to_f64();
@@ -42,19 +42,17 @@ pub fn render_snapshot_from_surface_tree(
let data = states.data_map.get::<RendererSurfaceStateUserData>();
if let Some(data) = data {
- if let Some(view) = data.borrow().view() {
- location += view.offset.to_f64();
- } else {
+ let Some(view) = data.lock().unwrap().view() else {
return;
- }
+ };
+ location += view.offset.to_f64();
if let Err(err) = import_surface(renderer, states) {
warn!("failed to import surface: {err:?}");
return;
}
- let data = data.borrow();
- let view = data.view().unwrap();
+ let data = data.lock().unwrap();
let Some(texture) = data.texture::<GlesRenderer>(renderer.id()) else {
return;
};
diff --git a/src/window/mapped.rs b/src/window/mapped.rs
index 8b6b8e61..178b0a30 100644
--- a/src/window/mapped.rs
+++ b/src/window/mapped.rs
@@ -461,8 +461,8 @@ impl LayoutElement for Mapped {
fn min_size(&self) -> Size<i32, Logical> {
let mut size = with_states(self.toplevel().wl_surface(), |state| {
- let curr = state.cached_state.current::<SurfaceCachedState>();
- curr.min_size
+ let mut guard = state.cached_state.get::<SurfaceCachedState>();
+ guard.current().min_size
});
if let Some(x) = self.rules.min_width {
@@ -477,8 +477,8 @@ impl LayoutElement for Mapped {
fn max_size(&self) -> Size<i32, Logical> {
let mut size = with_states(self.toplevel().wl_surface(), |state| {
- let curr = state.cached_state.current::<SurfaceCachedState>();
- curr.max_size
+ let mut guard = state.cached_state.get::<SurfaceCachedState>();
+ guard.current().max_size
});
if let Some(x) = self.rules.max_width {