From 2de366939bc4bd475c36ff805fb96272f207bb74 Mon Sep 17 00:00:00 2001 From: Ian Douglas Scott Date: Thu, 18 Jul 2024 13:28:56 -0700 Subject: [PATCH] Correctly restrict modifiers in screencopy Fixes issues for workspace capture in multi-gpu systems. Though I wonder if the modifiers requested here match the render device... --- src/backend/wayland/buffer.rs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/backend/wayland/buffer.rs b/src/backend/wayland/buffer.rs index add8f69..3a0b6ba 100644 --- a/src/backend/wayland/buffer.rs +++ b/src/backend/wayland/buffer.rs @@ -80,6 +80,7 @@ impl AppData { fn create_gbm_buffer( &self, format: u32, + modifiers: &[u64], (width, height): (u32, u32), needs_linear: bool, ) -> anyhow::Result> { @@ -100,6 +101,7 @@ impl AppData { && (!needs_linear || x.modifier == u64::from(gbm::Modifier::Linear)) }) .map(|x| gbm::Modifier::from(x.modifier)) + .filter(|x| modifiers.contains(&u64::from(*x))) .collect::>(); if modifiers.is_empty() { @@ -178,9 +180,8 @@ impl AppData { let format = u32::from(wl_shm::Format::Abgr8888); #[cfg(not(feature = "force-shm-screencopy"))] - if let Some((_, _modifiers)) = formats.dmabuf_formats.iter().find(|(f, _)| *f == format) { - // TODO Restrict modifiers - match self.create_gbm_buffer(format, formats.buffer_size, false) { + if let Some((_, modifiers)) = formats.dmabuf_formats.iter().find(|(f, _)| *f == format) { + match self.create_gbm_buffer(format, &modifiers, formats.buffer_size, false) { Ok(Some(buffer)) => { return buffer; }