From 1756244e109e49c9663198e0f863520e6e8a7078 Mon Sep 17 00:00:00 2001 From: bjorn3 <17426603+bjorn3@users.noreply.github.com> Date: Tue, 23 Sep 2025 22:28:15 +0200 Subject: [PATCH] graphics/driver-graphics: Allow larger framebuffers Previously only frame buffers up to 0x1_000_000 bytes were allowed, while we use 0x10_000_000 as multiplier for the fake offsets and thus can safely accept framebuffers this large. This should be enough for 4k displays. --- graphics/driver-graphics/src/lib.rs | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/graphics/driver-graphics/src/lib.rs b/graphics/driver-graphics/src/lib.rs index 383e34cb7f..0fc6995aa0 100644 --- a/graphics/driver-graphics/src/lib.rs +++ b/graphics/driver-graphics/src/lib.rs @@ -225,6 +225,8 @@ impl GraphicsScheme { } } +const MAP_FAKE_OFFSET_MULTIPLIER: usize = 0x10_000_000; + impl SchemeSync for GraphicsScheme { fn open(&mut self, path: &str, _flags: usize, _ctx: &CallerCtx) -> Result { if path.is_empty() { @@ -490,9 +492,12 @@ impl SchemeSync for GraphicsScheme { } // FIXME use a better scheme for creating map offsets - assert!(fbs[&fb_id].width() * fbs[&fb_id].height() * 4 < 0x1_000_000); + assert!( + ((fbs[&fb_id].width() * fbs[&fb_id].height() * 4) as usize) + < MAP_FAKE_OFFSET_MULTIPLIER + ); - payload.offset = fb_id * 0x10_000_000; + payload.offset = fb_id * MAP_FAKE_OFFSET_MULTIPLIER; Ok(size_of::()) } @@ -562,10 +567,10 @@ impl SchemeSync for GraphicsScheme { next_id: _, fbs, } => ( - fbs.get(&(offset as usize / 0x10_000_000)) + fbs.get(&(offset as usize / MAP_FAKE_OFFSET_MULTIPLIER)) .ok_or(Error::new(EINVAL)) .unwrap(), - offset & (0x10_000_000 - 1), + offset & (MAP_FAKE_OFFSET_MULTIPLIER as u64 - 1), ), }; let ptr = T::map_dumb_framebuffer(&mut self.adapter, framebuffer);