adding draw indexed
Build / build (push) Successful in 58s
Test / build_and_test (push) Successful in 36m31s

This commit is contained in:
2026-04-30 02:16:49 +02:00
parent 621be5db35
commit 354c9891d6
6 changed files with 207 additions and 87 deletions
+37 -2
View File
@@ -60,6 +60,7 @@ pub fn create(device: *base.Device, allocator: std.mem.Allocator, info: *const v
.dispatch = dispatch,
.dispatchIndirect = dispatchIndirect,
.draw = draw,
.drawIndexed = drawIndexed,
.end = end,
.endRenderPass = endRenderPass,
.executeCommands = executeCommands,
@@ -240,8 +241,11 @@ pub fn bindIndexBuffer(interface: *Interface, buffer: *base.Buffer, offset: usiz
pub fn execute(context: *anyopaque, device: *ExecutionDevice) VkError!void {
const impl: *Impl = @ptrCast(@alignCast(context));
_ = impl;
_ = device;
device.pipeline_states[ExecutionDevice.GRAPHICS_PIPELINE_STATE].data.graphics.index_buffer = .{
.buffer = impl.buffer,
.offset = impl.offset,
.index_type = impl.index_type,
};
}
};
@@ -557,6 +561,37 @@ pub fn dispatchIndirect(interface: *Interface, buffer: *base.Buffer, offset: vk.
self.commands.append(allocator, .{ .ptr = cmd, .vtable = &.{ .execute = CommandImpl.execute } }) catch return VkError.OutOfHostMemory;
}
pub fn drawIndexed(interface: *Interface, index_count: usize, instance_count: usize, first_index: usize, vertex_offset: usize, first_instance: usize) VkError!void {
const self: *Self = @alignCast(@fieldParentPtr("interface", interface));
const allocator = self.command_allocator.allocator();
const CommandImpl = struct {
const Impl = @This();
index_count: usize,
first_index: usize,
instance_count: usize,
first_instance: usize,
vertex_offset: usize,
pub fn execute(context: *anyopaque, device: *ExecutionDevice) VkError!void {
const impl: *Impl = @ptrCast(@alignCast(context));
try device.renderer.drawIndexed(impl.index_count, impl.instance_count, impl.first_index, impl.first_instance, impl.vertex_offset);
}
};
const cmd = allocator.create(CommandImpl) catch return VkError.OutOfHostMemory;
errdefer allocator.destroy(cmd);
cmd.* = .{
.index_count = index_count,
.first_index = first_index,
.instance_count = instance_count,
.first_instance = first_instance,
.vertex_offset = vertex_offset,
};
self.commands.append(allocator, .{ .ptr = cmd, .vtable = &.{ .execute = CommandImpl.execute } }) catch return VkError.OutOfHostMemory;
}
pub fn draw(interface: *Interface, vertex_count: usize, instance_count: usize, first_vertex: usize, first_instance: usize) VkError!void {
const self: *Self = @alignCast(@fieldParentPtr("interface", interface));
const allocator = self.command_allocator.allocator();