summaryrefslogtreecommitdiff
path: root/src/screen/drm/frame-buffer
diff options
context:
space:
mode:
authorNathan Reiner <nathan@nathanreiner.xyz>2025-02-02 21:54:14 +0100
committerNathan Reiner <nathan@nathanreiner.xyz>2025-02-02 21:54:14 +0100
commit811a6bd572f4c6b26e99b4e746f5d710947ee934 (patch)
tree3ff6375ce2d7ea13e0d49f7800757a1b42604884 /src/screen/drm/frame-buffer
parent3f4375a14218796cbd7bfff1c8cfff0f7bb1f6df (diff)
screen: drm change struct layout
Diffstat (limited to 'src/screen/drm/frame-buffer')
-rw-r--r--src/screen/drm/frame-buffer/page-flip.zig7
-rw-r--r--src/screen/drm/frame-buffer/pixelformat.zig11
-rw-r--r--src/screen/drm/frame-buffer/root.zig188
3 files changed, 0 insertions, 206 deletions
diff --git a/src/screen/drm/frame-buffer/page-flip.zig b/src/screen/drm/frame-buffer/page-flip.zig
deleted file mode 100644
index c6eb836..0000000
--- a/src/screen/drm/frame-buffer/page-flip.zig
+++ /dev/null
@@ -1,7 +0,0 @@
-pub const PageFlip = packed struct(u32) {
- event: bool,
- is_async: bool,
- absolute: bool,
- relative: bool,
- _padding: u28,
-}
diff --git a/src/screen/drm/frame-buffer/pixelformat.zig b/src/screen/drm/frame-buffer/pixelformat.zig
deleted file mode 100644
index ec98900..0000000
--- a/src/screen/drm/frame-buffer/pixelformat.zig
+++ /dev/null
@@ -1,11 +0,0 @@
-
-fn pixel_format_code(comptime a: u8, comptime b: u8, comptime c: u8, comptime d: u8) u32 {
- return @as(u32, @intCast(a)) |
- (@as(u32, @intCast(b)) << 8) |
- (@as(u32, @intCast(c)) << 16) |
- (@as(u32, @intCast(d)) << 24);
-}
-
-pub const PixelFormat = enum(u32) {
- xrgb8888 = pixel_format_code('X', 'R', '2', '4'),
-};
diff --git a/src/screen/drm/frame-buffer/root.zig b/src/screen/drm/frame-buffer/root.zig
deleted file mode 100644
index e0e51f8..0000000
--- a/src/screen/drm/frame-buffer/root.zig
+++ /dev/null
@@ -1,188 +0,0 @@
-const std = @import("std");
-const os = std.os.linux;
-const Card = @import("../card.zig").Card;
-const Drm = @import("../request.zig").Drm;
-const PixelFormat = @import("pixelformat.zig").PixelFormat;
-const cerror = @import("../../cerror.zig");
-
-const CreateDumb = extern struct {
- height: u32,
- width: u32,
- bpp: u32,
- flags: u32,
- handle: u32,
- pitch: u32,
- size: u32,
-};
-
-const FrameBufferCmd2 = extern struct {
- id: u32,
- width: u32,
- height: u32,
- pixel_format: PixelFormat,
- flags: u32,
- handles: [4]u32,
- pitches: [4]u32,
- offsets: [4]u32,
- modifier: [4]u32,
-};
-
-const MapDumb = extern struct {
- handle: u32,
- __padding: u32,
- offset: i64,
-};
-
-pub const DoubleBuffer = struct {
- const Self = @This();
-
- back: FrameBuffer,
- front: FrameBuffer,
-
- pub fn init(card: *Card, width: u32, height: u32, bpp: u32) !Self {
- return .{
- .back = try FrameBuffer.init(card, width, height, bpp),
- .front = try FrameBuffer.init(card, width, height, bpp),
- };
- }
-
- pub fn swap(self: *Self) void {
- const back_data = self.back.data;
- self.back.data = self.front.data;
- self.front.data = back_data;
-
- const back_id = self.back.id;
- self.back.id = self.front.id;
- self.front.id = back_id;
- }
-
- pub fn deinit(self: *Self) void {
- self.back.deinit();
- self.front.deinit();
- }
-
- pub fn buffer(self: *Self) *FrameBuffer {
- return &self.back;
- }
-
- pub fn crtc_buffer(self: *Self) *FrameBuffer {
- return &self.front;
- }
-};
-
-pub const Pixel = packed struct(u32) {
- blue: u8,
- green: u8,
- red: u8,
- _padding: u8 = 0x0,
-};
-
-pub const FrameBuffer = struct {
- const Self = @This();
-
- card: *Card,
- id: u32,
- width: u32,
- height: u32,
- bpp: u32,
- stride: u32,
- data_size: u64,
- canvas_size: u64,
- handle: u32,
- data: [*]volatile Pixel,
-
- pub fn init(card: *Card, width: u32, height: u32, bpp: u32) !Self {
- var create_dumb = std.mem.zeroInit(CreateDumb, .{
- .width = width,
- .height = height,
- .bpp = bpp,
- });
- try Drm.create_dumb.request(
- card.file.handle,
- CreateDumb,
- &create_dumb
- );
-
- var fb = Self {
- .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,
- .card = card,
- };
-
- var buffer_cmd = FrameBufferCmd2 {
- .id = 0,
- .width = fb.width,
- .height = fb.height,
- .pixel_format = PixelFormat.xrgb8888,
- .flags = 0,
- .handles = [_] u32 { fb.handle, 0, 0, 0 },
- .pitches = [_] u32 { fb.stride, 0, 0, 0 },
- .offsets = [_] u32 { 0, 0, 0, 0 },
- .modifier = [_] u32 { 0, 0, 0, 0 },
- };
-
- try Drm.add_frame_buffer2.request(
- card.file.handle,
- FrameBufferCmd2,
- &buffer_cmd
- );
-
- fb.id = buffer_cmd.id;
-
- var map_dumb = std.mem.zeroInit(MapDumb, .{ .handle = fb.handle });
-
- try Drm.map_dumb.request(
- card.file.handle,
- MapDumb,
- &map_dumb
- );
-
- const address = os.mmap(
- null,
- fb.data_size,
- os.PROT.READ | os.PROT.WRITE,
- .{ .TYPE = os.MAP_TYPE.SHARED },
- card.file.handle,
- map_dumb.offset
- );
-
- try cerror.from_usize(address);
-
- fb.data = @ptrFromInt(address);
-
- return fb;
- }
-
- pub fn set(self: *Self, x: u32, y: u32, pixel: Pixel) void {
- self.data[x + self.width * y] = pixel;
- }
-
- pub fn fill(self: *Self, pixel: Pixel) void {
- @memset(self.data[0..self.canvas_size], pixel);
- }
-
- pub fn deinit(self: *Self) void {
- cerror.from_usize(
- os.munmap(@ptrCast(@volatileCast(self.data)), self.data_size)
- ) catch |err| std.debug.panic("munmap failed in frame-buffer: {}", .{err});
-
- Drm.remove_frame_buffer.request(
- self.card.file.handle,
- u32,
- &self.id
- ) catch @panic("failed to remove frame-buffer");
-
- Drm.destroy_dumb.request(
- self.card.file.handle,
- u32,
- &self.handle
- ) catch @panic("failed to destroy dumb-buffer");
- }
-};