summaryrefslogtreecommitdiff
path: root/src/screen/drm/frame-buffer/root.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/screen/drm/frame-buffer/root.zig')
-rw-r--r--src/screen/drm/frame-buffer/root.zig280
1 files changed, 140 insertions, 140 deletions
diff --git a/src/screen/drm/frame-buffer/root.zig b/src/screen/drm/frame-buffer/root.zig
index 0083711..e0e51f8 100644
--- a/src/screen/drm/frame-buffer/root.zig
+++ b/src/screen/drm/frame-buffer/root.zig
@@ -6,183 +6,183 @@ 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,
+ 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,
+ 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,
+ handle: u32,
+ __padding: u32,
+ offset: i64,
};
pub const DoubleBuffer = struct {
- const Self = @This();
+ const Self = @This();
- back: FrameBuffer,
- front: FrameBuffer,
+ 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 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;
+ 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;
- }
+ 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 deinit(self: *Self) void {
+ self.back.deinit();
+ self.front.deinit();
+ }
- pub fn buffer(self: *Self) *FrameBuffer {
- return &self.back;
- }
+ pub fn buffer(self: *Self) *FrameBuffer {
+ return &self.back;
+ }
- pub fn crtc_buffer(self: *Self) *FrameBuffer {
- return &self.front;
- }
+ 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,
+ blue: u8,
+ green: u8,
+ red: u8,
+ _padding: u8 = 0x0,
};
pub const FrameBuffer = struct {
- const Self = @This();
+ 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,
+ 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
- );
+ 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 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 },
- };
+ 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
- );
+ try Drm.add_frame_buffer2.request(
+ card.file.handle,
+ FrameBufferCmd2,
+ &buffer_cmd
+ );
- fb.id = buffer_cmd.id;
+ fb.id = buffer_cmd.id;
- var map_dumb = std.mem.zeroInit(MapDumb, .{ .handle = fb.handle });
+ var map_dumb = std.mem.zeroInit(MapDumb, .{ .handle = fb.handle });
- try Drm.map_dumb.request(
- card.file.handle,
- MapDumb,
- &map_dumb
- );
+ 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
- );
+ 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);
+ try cerror.from_usize(address);
- fb.data = @ptrFromInt(address);
+ fb.data = @ptrFromInt(address);
- return fb;
- }
+ return fb;
+ }
- pub fn set(self: *Self, x: u32, y: u32, pixel: Pixel) void {
- self.data[x + self.width * y] = pixel;
- }
+ 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 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});
+ 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.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");
- }
+ Drm.destroy_dumb.request(
+ self.card.file.handle,
+ u32,
+ &self.handle
+ ) catch @panic("failed to destroy dumb-buffer");
+ }
};