summaryrefslogtreecommitdiff
path: root/src/screen/drm
diff options
context:
space:
mode:
Diffstat (limited to 'src/screen/drm')
-rw-r--r--src/screen/drm/card.zig5
-rw-r--r--src/screen/drm/crtc/root.zig45
-rw-r--r--src/screen/drm/request.zig1
3 files changed, 51 insertions, 0 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,