summaryrefslogtreecommitdiff
path: root/src/screen/drm/buffer/raw.zig
diff options
context:
space:
mode:
authorNathan Reiner <nathan@nathanreiner.xyz>2025-02-02 22:24:00 +0100
committerNathan Reiner <nathan@nathanreiner.xyz>2025-02-02 22:24:00 +0100
commitfef523a8d7c87f272de18c8abd57e0cc53e2ef40 (patch)
tree7a8472dbdace2d511197da6b5184ec92509ef973 /src/screen/drm/buffer/raw.zig
parent811a6bd572f4c6b26e99b4e746f5d710947ee934 (diff)
screen: drm change raw buffer interface
Diffstat (limited to 'src/screen/drm/buffer/raw.zig')
-rw-r--r--src/screen/drm/buffer/raw.zig31
1 files changed, 10 insertions, 21 deletions
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(