diff options
| author | Nathan Reiner <nathan@nathanreiner.xyz> | 2025-02-01 16:19:47 +0100 |
|---|---|---|
| committer | Nathan Reiner <nathan@nathanreiner.xyz> | 2025-02-01 16:19:47 +0100 |
| commit | 88aa2940b27044794d4dcb49c924a5df17cc0055 (patch) | |
| tree | e454101aef7a008d7fe2854eea4329507b8beb60 /src | |
| parent | 857261e9be33e862795ae6228ea05caf20c1a9d5 (diff) | |
screen: add crtc
Diffstat (limited to 'src')
| -rw-r--r-- | src/screen/drm/card.zig | 5 | ||||
| -rw-r--r-- | src/screen/drm/crtc/root.zig | 45 | ||||
| -rw-r--r-- | src/screen/drm/request.zig | 1 | ||||
| -rw-r--r-- | src/screen/main.zig | 10 |
4 files changed, 56 insertions, 5 deletions
diff --git a/src/screen/drm/card.zig b/src/screen/drm/card.zig index c5cca24..411716a 100644 --- a/src/screen/drm/card.zig +++ b/src/screen/drm/card.zig @@ -6,6 +6,7 @@ const cerror = @import("../cerror.zig"); const Resources = @import("resources.zig").Resources; const Connector = @import("connector/root.zig").Connector; const Encoder = @import("encoder/root.zig").Encoder; +const Crtc = @import("crtc/root.zig").Crtc; pub const Card = struct { @@ -47,4 +48,8 @@ pub const Card = struct { pub fn encoder(self: *Card, id: u32) !Encoder { return Encoder.init(self, id); } + + pub fn crtc(self: *Card, id: u32) !Crtc { + return Crtc.init(self, id); + } }; diff --git a/src/screen/drm/crtc/root.zig b/src/screen/drm/crtc/root.zig new file mode 100644 index 0000000..7601732 --- /dev/null +++ b/src/screen/drm/crtc/root.zig @@ -0,0 +1,45 @@ +const std = @import("std"); +const Card = @import("../card.zig").Card; +const Drm = @import("../request.zig").Drm; +const Connector = @import("../connector/root.zig").Connector; + +pub const RawCrtc = extern struct { + connectors: ?*Connector, + count_connectors: u32, + id: u32, + buffer_id: u32, + x: u32, + y: u32, + gamma_size: u32, + mode_valid: u32, +}; + +pub const Crtc = struct { + const Self = @This(); + + id: u32, + buffer_id: u32, + x: u32, + y: u32, + mode_valid: u32, + gamma_size: u32, + card: *Card, + + pub fn init(card: *Card, id: u32) !Self { + var raw = std.mem.zeroInit(RawCrtc, .{ .id = id }); + try Drm.get_crtc.request(card.file.handle, RawCrtc, &raw); + return .{ + .id = raw.id, + .buffer_id = raw.buffer_id, + .x = raw.x, + .y = raw.y, + .mode_valid = raw.mode_valid, + .gamma_size = raw.gamma_size, + .card = card, + }; + } + + pub fn deinit(self: *Self) void { + _ = self; + } +}; diff --git a/src/screen/drm/request.zig b/src/screen/drm/request.zig index 13ccfd3..f833c94 100644 --- a/src/screen/drm/request.zig +++ b/src/screen/drm/request.zig @@ -10,6 +10,7 @@ pub const Drm = enum(u8) { const Self = @This(); get_resources = 0xa0, + get_crtc = 0xa1, get_encoder = 0xa6, get_connector = 0xa7, diff --git a/src/screen/main.zig b/src/screen/main.zig index de8e5aa..b0e5b2e 100644 --- a/src/screen/main.zig +++ b/src/screen/main.zig @@ -11,10 +11,10 @@ pub fn main() !void { var resources = try card.resources(); defer resources.deinit(); - for (resources.encoder_ids) |id| { - var encoder = try card.encoder(id); - defer encoder.deinit(); + std.debug.print("id: {}\n", .{resources.crtc_ids[0]}); - std.debug.print("{}\n", .{encoder}); - } + var crtc = try card.crtc(resources.crtc_ids[0]); + defer crtc.deinit(); + + std.debug.print("crtc: {any}\n", .{crtc}); } |