From bf3859a026f543b2586252b0b4a293655e6aa112 Mon Sep 17 00:00:00 2001 From: kossLAN Date: Fri, 29 May 2026 11:39:18 -0400 Subject: [PATCH] gfx: move shared memory contract into types crate --- Cargo.lock | 3 +++ gfx-types/Cargo.toml | 1 + gfx-types/src/lib.rs | 31 +++++++++++++++++++++++++++++++ src/gfx_api.rs | 28 +--------------------------- 4 files changed, 36 insertions(+), 27 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ee3a9112..408f6f16 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -855,6 +855,9 @@ dependencies = [ [[package]] name = "jay-gfx-types" version = "0.1.0" +dependencies = [ + "uapi", +] [[package]] name = "jay-io-uring" diff --git a/gfx-types/Cargo.toml b/gfx-types/Cargo.toml index ad1c75dc..8605298d 100644 --- a/gfx-types/Cargo.toml +++ b/gfx-types/Cargo.toml @@ -5,3 +5,4 @@ edition = "2024" license = "GPL-3.0-only" [dependencies] +uapi = "0.2.13" diff --git a/gfx-types/src/lib.rs b/gfx-types/src/lib.rs index 28bb50e3..6fd3016f 100644 --- a/gfx-types/src/lib.rs +++ b/gfx-types/src/lib.rs @@ -1,3 +1,8 @@ +use { + std::{cell::Cell, error::Error, rc::Rc}, + uapi::OwnedFd, +}; + #[derive(Copy, Clone, Debug, Eq, PartialEq, Hash, Default)] pub enum AlphaMode { #[default] @@ -5,3 +10,29 @@ pub enum AlphaMode { PremultipliedOptical, Straight, } + +pub trait ShmMemory { + fn len(&self) -> usize; + fn safe_access(&self) -> ShmMemoryBacking; + fn access(&self, f: &mut dyn FnMut(&[Cell])) -> Result<(), Box>; +} + +pub enum ShmMemoryBacking { + Ptr(*const [Cell]), + Fd(Rc, usize), +} + +impl ShmMemory for Vec> { + fn len(&self) -> usize { + self.len() + } + + fn safe_access(&self) -> ShmMemoryBacking { + ShmMemoryBacking::Ptr(&**self) + } + + fn access(&self, f: &mut dyn FnMut(&[Cell])) -> Result<(), Box> { + f(self); + Ok(()) + } +} diff --git a/src/gfx_api.rs b/src/gfx_api.rs index f5518b2e..d3419454 100644 --- a/src/gfx_api.rs +++ b/src/gfx_api.rs @@ -47,7 +47,7 @@ use { uapi::{OwnedFd, c}, }; -pub use jay_gfx_types::AlphaMode; +pub use jay_gfx_types::{AlphaMode, ShmMemory, ShmMemoryBacking}; #[derive(Copy, Clone, Debug, Hash, Eq, PartialEq, Linearize)] pub enum GfxApi { @@ -798,32 +798,6 @@ pub struct PendingShmTransfer { id: u64, } -pub trait ShmMemory { - fn len(&self) -> usize; - fn safe_access(&self) -> ShmMemoryBacking; - fn access(&self, f: &mut dyn FnMut(&[Cell])) -> Result<(), Box>; -} - -pub enum ShmMemoryBacking { - Ptr(*const [Cell]), - Fd(Rc, usize), -} - -impl ShmMemory for Vec> { - fn len(&self) -> usize { - self.len() - } - - fn safe_access(&self) -> ShmMemoryBacking { - ShmMemoryBacking::Ptr(&**self) - } - - fn access(&self, f: &mut dyn FnMut(&[Cell])) -> Result<(), Box> { - f(self); - Ok(()) - } -} - pub trait AsyncShmGfxTexture: GfxTexture { fn staging_size(&self) -> usize { 0