fixing linter errors
Test / build_and_test (push) Successful in 5m28s
Build / build (push) Successful in 7m26s

This commit is contained in:
2026-07-15 15:39:16 +02:00
parent 1640013546
commit 2375abf688
116 changed files with 563 additions and 354 deletions
@@ -1,19 +1,18 @@
const vk = @import("vulkan");
pub const command_base = 0x40;
pub const i915_gem_create = 0x1b;
pub const i915_gem_mmap_gtt = 0x24;
pub const i915_gem_set_domain = 0x1f;
pub const i915_gem_execbuffer2 = 0x29;
pub const gem_create = 0x1b;
pub const gem_mmap_gtt = 0x24;
pub const gem_set_domain = 0x1f;
pub const gem_execbuffer2 = 0x29;
pub const gem_close = 0x09;
pub const i915_mmap_offset_wb = 2;
pub const i915_gem_domain_cpu = 0x00000001;
pub const i915_gem_domain_gtt = 0x00000040;
pub const i915_exec_blt = 3 << 0;
pub const i915_exec_fence_array: u64 = 1 << 19;
pub const i915_exec_fence_wait: u32 = 1 << 0;
pub const i915_exec_fence_signal: u32 = 1 << 1;
pub const mmap_offset_wb = 2;
pub const gem_domain_cpu = 0x00000001;
pub const gem_domain_gtt = 0x00000040;
pub const exec_blt = 3 << 0;
pub const exec_fence_array: u64 = 1 << 19;
pub const exec_fence_wait: u32 = 1 << 0;
pub const exec_fence_signal: u32 = 1 << 1;
pub const exec_object_write = 1 << 2;
pub const mi_flush_dw: u32 = (0x26 << 23) | 3;
+43 -26
View File
@@ -2,13 +2,11 @@ const std = @import("std");
const vk = @import("vulkan");
const base = @import("base");
const drm = @import("drm.zig");
const _i915 = @import("i915.zig");
const common_kmd = @import("../kmd.zig");
const VkError = base.VkError;
const IOCTL = std.os.linux.IOCTL;
const Mapping = struct {
bytes: []align(std.heap.page_size_min) u8,
@@ -33,12 +31,17 @@ pub const Device = struct {
}
pub fn allocateMemory(self: *Device, io: std.Io, size: vk.DeviceSize) VkError!Memory {
var create = drm.GemCreate{
var create = _i915.GemCreate{
.size = size,
.handle = 0,
.pad = 0,
};
base.utils.ioctl(self.card.handle, io, common_kmd.drmIoctlIowr(drm.command_base + drm.i915_gem_create, drm.GemCreate), &create) catch return VkError.OutOfDeviceMemory;
base.utils.ioctl(
self.card.handle,
io,
common_kmd.drmIoctlIowr(_i915.command_base + _i915.gem_create, _i915.GemCreate),
&create,
) catch return VkError.OutOfDeviceMemory;
var memory = Memory{
.handle = create.handle,
@@ -47,7 +50,7 @@ pub const Device = struct {
};
errdefer memory.deinit(self, io);
try memory.setDomain(self, io, drm.i915_gem_domain_cpu, 0);
try memory.setDomain(self, io, _i915.gem_domain_cpu, 0);
return memory;
}
@@ -61,7 +64,7 @@ pub const Device = struct {
const batch_map = try batch.map(self, io, 0, batch_size);
const batch_words = std.mem.bytesAsSlice(u32, batch_map);
@memcpy(batch_words[0..commands.len], commands);
batch_words[commands.len + 0] = drm.mi_flush_dw;
batch_words[commands.len + 0] = _i915.mi_flush_dw;
batch_words[commands.len + 1] = 0;
batch_words[commands.len + 2] = 0;
batch_words[commands.len + 3] = 0;
@@ -71,7 +74,7 @@ pub const Device = struct {
}
try batch.flushRange(self, io, 0, batch_size);
var objects = std.ArrayList(drm.ExecObject2).empty;
var objects = std.ArrayList(_i915.ExecObject2).empty;
defer objects.deinit(allocator);
var object_handles = std.ArrayList(u32).empty;
@@ -86,17 +89,17 @@ pub const Device = struct {
.relocs_ptr = 0,
.alignment = 0,
.offset = 0,
.flags = if (relocation.write) drm.exec_object_write else 0,
.flags = if (relocation.write) _i915.exec_object_write else 0,
.rsvd1 = 0,
.rsvd2 = 0,
}) catch return VkError.OutOfHostMemory;
} else if (relocation.write) {
const index = std.mem.indexOfScalar(u32, object_handles.items, relocation.target_handle).?;
objects.items[index].flags |= drm.exec_object_write;
objects.items[index].flags |= _i915.exec_object_write;
}
}
var i915_relocations = std.ArrayList(drm.RelocationEntry).empty;
var i915_relocations = std.ArrayList(_i915.RelocationEntry).empty;
defer i915_relocations.deinit(allocator);
for (relocations) |relocation| {
@@ -121,17 +124,16 @@ pub const Device = struct {
.rsvd2 = 0,
}) catch return VkError.OutOfHostMemory;
var exec_fences = std.ArrayList(drm.ExecFence).empty;
var exec_fences = std.ArrayList(_i915.ExecFence).empty;
defer exec_fences.deinit(allocator);
for (syncs) |sync| {
exec_fences.append(allocator, .{
.handle = sync.handle,
.flags = (if (sync.wait) drm.i915_exec_fence_wait else 0) |
(if (sync.signal) drm.i915_exec_fence_signal else 0),
.flags = (if (sync.wait) _i915.exec_fence_wait else 0) | (if (sync.signal) _i915.exec_fence_signal else 0),
}) catch return VkError.OutOfHostMemory;
}
var execbuffer = drm.ExecBuffer2{
var execbuffer = _i915.ExecBuffer2{
.buffers_ptr = @intFromPtr(objects.items.ptr),
.buffer_count = @intCast(objects.items.len),
.batch_start_offset = 0,
@@ -140,11 +142,16 @@ pub const Device = struct {
.DR4 = 0,
.num_cliprects = @intCast(exec_fences.items.len),
.cliprects_ptr = if (exec_fences.items.len == 0) 0 else @intFromPtr(exec_fences.items.ptr),
.flags = drm.i915_exec_blt | (if (exec_fences.items.len == 0) 0 else drm.i915_exec_fence_array),
.flags = _i915.exec_blt | (if (exec_fences.items.len == 0) 0 else _i915.exec_fence_array),
.rsvd1 = 0,
.rsvd2 = 0,
};
base.utils.ioctl(self.card.handle, io, common_kmd.drmIoctlIowr(drm.command_base + drm.i915_gem_execbuffer2, drm.ExecBuffer2), &execbuffer) catch return VkError.DeviceLost;
base.utils.ioctl(
self.card.handle,
io,
common_kmd.drmIoctlIowr(_i915.command_base + _i915.gem_execbuffer2, _i915.ExecBuffer2),
&execbuffer,
) catch return VkError.DeviceLost;
}
};
@@ -156,11 +163,11 @@ pub const Memory = struct {
pub fn deinit(self: *Memory, device: *Device, io: std.Io) void {
self.unmap();
var close = drm.GemClose{
var close = _i915.GemClose{
.handle = self.handle,
.pad = 0,
};
base.utils.ioctl(device.card.handle, io, common_kmd.drmIoctlIow(drm.gem_close, drm.GemClose), &close) catch {};
base.utils.ioctl(device.card.handle, io, common_kmd.drmIoctlIow(_i915.gem_close, _i915.GemClose), &close) catch @panic("Caught an error while handling an error");
self.* = undefined;
}
@@ -176,14 +183,19 @@ pub const Memory = struct {
return mapping.slice(offset, map_size);
}
var mmap_offset = drm.GemMmapOffset{
var mmap_offset = _i915.GemMmapOffset{
.handle = self.handle,
.pad = 0,
.offset = 0,
.flags = drm.i915_mmap_offset_wb,
.flags = _i915.mmap_offset_wb,
.extensions = 0,
};
base.utils.ioctl(device.card.handle, io, common_kmd.drmIoctlIowr(drm.command_base + drm.i915_gem_mmap_gtt, drm.GemMmapOffset), &mmap_offset) catch return VkError.MemoryMapFailed;
base.utils.ioctl(
device.card.handle,
io,
common_kmd.drmIoctlIowr(_i915.command_base + _i915.gem_mmap_gtt, _i915.GemMmapOffset),
&mmap_offset,
) catch return VkError.MemoryMapFailed;
if (self.size > std.math.maxInt(usize)) return VkError.MemoryMapFailed;
const full_size: usize = @intCast(self.size);
@@ -210,21 +222,26 @@ pub const Memory = struct {
pub fn flushRange(self: *Memory, device: *Device, io: std.Io, offset: vk.DeviceSize, size: vk.DeviceSize) VkError!void {
_ = offset;
_ = size;
try self.setDomain(device, io, drm.i915_gem_domain_cpu, 0);
try self.setDomain(device, io, _i915.gem_domain_cpu, 0);
}
pub fn invalidateRange(self: *Memory, device: *Device, io: std.Io, offset: vk.DeviceSize, size: vk.DeviceSize) VkError!void {
_ = offset;
_ = size;
try self.setDomain(device, io, drm.i915_gem_domain_cpu, 0);
try self.setDomain(device, io, _i915.gem_domain_cpu, 0);
}
fn setDomain(self: *Memory, device: *Device, io: std.Io, read_domains: u32, write_domain: u32) VkError!void {
var domain = drm.GemSetDomain{
var domain = _i915.GemSetDomain{
.handle = self.handle,
.read_domains = read_domains,
.write_domain = write_domain,
};
base.utils.ioctl(device.card.handle, io, common_kmd.drmIoctlIow(drm.command_base + drm.i915_gem_set_domain, drm.GemSetDomain), &domain) catch return VkError.DeviceLost;
base.utils.ioctl(
device.card.handle,
io,
common_kmd.drmIoctlIow(_i915.command_base + _i915.gem_set_domain, _i915.GemSetDomain),
&domain,
) catch return VkError.DeviceLost;
}
};