From fef523a8d7c87f272de18c8abd57e0cc53e2ef40 Mon Sep 17 00:00:00 2001 From: Nathan Reiner Date: Sun, 2 Feb 2025 22:24:00 +0100 Subject: screen: drm change raw buffer interface --- src/screen/drm/buffer/raw.zig | 31 ++++++++++--------------------- 1 file changed, 10 insertions(+), 21 deletions(-) (limited to 'src/screen/drm/buffer/raw.zig') diff --git a/src/screen/drm/buffer/raw.zig b/src/screen/drm/buffer/raw.zig index e4674eb..a79c6a7 100644 --- a/src/screen/drm/buffer/raw.zig +++ b/src/screen/drm/buffer/raw.zig @@ -10,18 +10,16 @@ pub const Raw = struct { id: u32, width: u32, height: u32, - bpp: u32, stride: u32, - data_size: u64, - canvas_size: u64, handle: u32, - data: [*]volatile drm.Pixel, + pixels: []volatile drm.Pixel, + bytes: []volatile u8, - pub fn init(card: *drm.Card, width: u32, height: u32, bpp: u32) !Self { + pub fn init(card: *drm.Card, width: u32, height: u32) !Self { var create_dumb = std.mem.zeroInit(drm.request.CreateDumb, .{ .width = width, .height = height, - .bpp = bpp, + .bpp = 32, }); try card.request( .create_dumb, @@ -32,12 +30,10 @@ pub const Raw = struct { .id = 0, .width = create_dumb.width, .height = create_dumb.height, - .bpp = create_dumb.bpp, .stride = create_dumb.pitch, - .data_size = create_dumb.size, - .canvas_size = create_dumb.size / (bpp / 8), .handle = create_dumb.handle, - .data = undefined, + .pixels = undefined, + .bytes = undefined, .card = card, }; @@ -69,7 +65,7 @@ pub const Raw = struct { const address = os.mmap( null, - fb.data_size, + create_dumb.size, os.PROT.READ | os.PROT.WRITE, .{ .TYPE = os.MAP_TYPE.SHARED }, card.file.handle, @@ -78,22 +74,15 @@ pub const Raw = struct { try cerror.from_usize(address); - fb.data = @ptrFromInt(address); + fb.pixels = @as([*]volatile drm.Pixel, @ptrFromInt(address))[0..create_dumb.size / 4]; + fb.bytes = @as([*]volatile u8, @ptrFromInt(address))[0..create_dumb.size]; return fb; } - pub fn set(self: *Self, x: u32, y: u32, p: drm.Pixel) void { - self.data[x + self.width * y] = p; - } - - pub fn fill(self: *Self, p: drm.Pixel) void { - @memset(self.data[0..self.canvas_size], p); - } - pub fn deinit(self: *Self) void { cerror.from_usize( - os.munmap(@ptrCast(@volatileCast(self.data)), self.data_size) + os.munmap(@ptrCast(@volatileCast(self.bytes)), self.bytes.len) ) catch |err| std.debug.panic("munmap failed in frame-buffer: {}", .{err}); self.card.request( -- cgit v1.2.3-70-g09d2