adding indirect dispatch; test skip
This commit is contained in:
@@ -9,7 +9,7 @@ on:
|
|||||||
jobs:
|
jobs:
|
||||||
build_and_test:
|
build_and_test:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
if: "!contains(github.event.head_commit.message, 'ci skip')"
|
if: "!contains(github.event.head_commit.message, 'ci skip') && !contains(github.event.head_commit.message, 'test skip')"
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
|||||||
14
README.md
14
README.md
@@ -45,7 +45,7 @@ zig build cdb
|
|||||||
Name | Status
|
Name | Status
|
||||||
-----------------------------------------------|--------
|
-----------------------------------------------|--------
|
||||||
vkAllocateCommandBuffers | ✅ Implemented
|
vkAllocateCommandBuffers | ✅ Implemented
|
||||||
vkAllocateDescriptorSets | ⚙️ WIP
|
vkAllocateDescriptorSets | ✅ Implemented
|
||||||
vkAllocateMemory | ✅ Implemented
|
vkAllocateMemory | ✅ Implemented
|
||||||
vkBeginCommandBuffer | ✅ Implemented
|
vkBeginCommandBuffer | ✅ Implemented
|
||||||
vkBindBufferMemory | ✅ Implemented
|
vkBindBufferMemory | ✅ Implemented
|
||||||
@@ -54,7 +54,7 @@ vkCmdBeginQuery | ⚙️ WIP
|
|||||||
vkCmdBeginRenderPass | ⚙️ WIP
|
vkCmdBeginRenderPass | ⚙️ WIP
|
||||||
vkCmdBindDescriptorSets | ✅ Implemented
|
vkCmdBindDescriptorSets | ✅ Implemented
|
||||||
vkCmdBindIndexBuffer | ⚙️ WIP
|
vkCmdBindIndexBuffer | ⚙️ WIP
|
||||||
vkCmdBindPipeline | ⚙️ WIP
|
vkCmdBindPipeline | ✅ Implemented
|
||||||
vkCmdBindVertexBuffers | ⚙️ WIP
|
vkCmdBindVertexBuffers | ⚙️ WIP
|
||||||
vkCmdBlitImage | ⚙️ WIP
|
vkCmdBlitImage | ⚙️ WIP
|
||||||
vkCmdClearAttachments | ⚙️ wip
|
vkCmdClearAttachments | ⚙️ wip
|
||||||
@@ -114,7 +114,7 @@ vkCreateQueryPool | ⚙️ WIP
|
|||||||
vkCreateRenderPass | ⚙️ WIP
|
vkCreateRenderPass | ⚙️ WIP
|
||||||
vkCreateSampler | ⚙️ WIP
|
vkCreateSampler | ⚙️ WIP
|
||||||
vkCreateSemaphore | ⚙️ WIP
|
vkCreateSemaphore | ⚙️ WIP
|
||||||
vkCreateShaderModule | ⚙️ WIP
|
vkCreateShaderModule | ✅ Implemented
|
||||||
vkDestroyBuffer | ✅ Implemented
|
vkDestroyBuffer | ✅ Implemented
|
||||||
vkDestroyBufferView | ⚙️ WIP
|
vkDestroyBufferView | ⚙️ WIP
|
||||||
vkDestroyCommandPool | ✅ Implemented
|
vkDestroyCommandPool | ✅ Implemented
|
||||||
@@ -134,7 +134,7 @@ vkDestroyQueryPool | ⚙️ WIP
|
|||||||
vkDestroyRenderPass | ⚙️ WIP
|
vkDestroyRenderPass | ⚙️ WIP
|
||||||
vkDestroySampler | ⚙️ WIP
|
vkDestroySampler | ⚙️ WIP
|
||||||
vkDestroySemaphore | ⚙️ WIP
|
vkDestroySemaphore | ⚙️ WIP
|
||||||
vkDestroyShaderModule | ⚙️ WIP
|
vkDestroyShaderModule | ✅ Implemented
|
||||||
vkDeviceWaitIdle | ✅ Implemented
|
vkDeviceWaitIdle | ✅ Implemented
|
||||||
vkEndCommandBuffer | ✅ Implemented
|
vkEndCommandBuffer | ✅ Implemented
|
||||||
vkEnumerateDeviceExtensionProperties | ⚙️ WIP
|
vkEnumerateDeviceExtensionProperties | ⚙️ WIP
|
||||||
@@ -142,7 +142,7 @@ vkEnumerateDeviceLayerProperties | ⚙️ WIP
|
|||||||
vkEnumerateInstanceExtensionProperties | ⚙️ WIP
|
vkEnumerateInstanceExtensionProperties | ⚙️ WIP
|
||||||
vkEnumerateInstanceLayerProperties | ⚙️ WIP
|
vkEnumerateInstanceLayerProperties | ⚙️ WIP
|
||||||
vkEnumeratePhysicalDevices | ✅ Implemented
|
vkEnumeratePhysicalDevices | ✅ Implemented
|
||||||
vkFlushMappedMemoryRanges | ⚙️ WIP
|
vkFlushMappedMemoryRanges | ✅ Implemented
|
||||||
vkFreeCommandBuffers | ✅ Implemented
|
vkFreeCommandBuffers | ✅ Implemented
|
||||||
vkFreeDescriptorSets | ✅ Implemented
|
vkFreeDescriptorSets | ✅ Implemented
|
||||||
vkFreeMemory | ✅ Implemented
|
vkFreeMemory | ✅ Implemented
|
||||||
@@ -166,7 +166,7 @@ vkGetPhysicalDeviceSparseImageFormatProperties | ⚙️ WIP
|
|||||||
vkGetPipelineCacheData | ⚙️ WIP
|
vkGetPipelineCacheData | ⚙️ WIP
|
||||||
vkGetQueryPoolResults | ⚙️ WIP
|
vkGetQueryPoolResults | ⚙️ WIP
|
||||||
vkGetRenderAreaGranularity | ⚙️ WIP
|
vkGetRenderAreaGranularity | ⚙️ WIP
|
||||||
vkInvalidateMappedMemoryRanges | ⚙️ WIP
|
vkInvalidateMappedMemoryRanges | ✅ Implemented
|
||||||
vkMapMemory | ✅ Implemented
|
vkMapMemory | ✅ Implemented
|
||||||
vkMergePipelineCaches | ⚙️ WIP
|
vkMergePipelineCaches | ⚙️ WIP
|
||||||
vkQueueBindSparse | ⚙️ WIP
|
vkQueueBindSparse | ⚙️ WIP
|
||||||
@@ -179,7 +179,7 @@ vkResetEvent | ⚙️ WIP
|
|||||||
vkResetFences | ✅ Implemented
|
vkResetFences | ✅ Implemented
|
||||||
vkSetEvent | ⚙️ WIP
|
vkSetEvent | ⚙️ WIP
|
||||||
vkUnmapMemory | ✅ Implemented
|
vkUnmapMemory | ✅ Implemented
|
||||||
vkUpdateDescriptorSets | ⚙️ WIP
|
vkUpdateDescriptorSets | ✅ Implemented
|
||||||
vkWaitForFences | ✅ Implemented
|
vkWaitForFences | ✅ Implemented
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
|||||||
@@ -46,6 +46,7 @@ pub fn create(device: *base.Device, allocator: std.mem.Allocator, info: *const v
|
|||||||
.copyImage = copyImage,
|
.copyImage = copyImage,
|
||||||
.copyImageToBuffer = copyImageToBuffer,
|
.copyImageToBuffer = copyImageToBuffer,
|
||||||
.dispatch = dispatch,
|
.dispatch = dispatch,
|
||||||
|
.dispatchIndirect = dispatchIndirect,
|
||||||
.end = end,
|
.end = end,
|
||||||
.fillBuffer = fillBuffer,
|
.fillBuffer = fillBuffer,
|
||||||
.reset = reset,
|
.reset = reset,
|
||||||
@@ -289,6 +290,36 @@ pub fn dispatch(interface: *Interface, group_count_x: u32, group_count_y: u32, g
|
|||||||
self.commands.append(allocator, Command.from(cmd)) catch return VkError.OutOfHostMemory;
|
self.commands.append(allocator, Command.from(cmd)) catch return VkError.OutOfHostMemory;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn dispatchIndirect(interface: *Interface, buffer: *base.Buffer, offset: vk.DeviceSize) VkError!void {
|
||||||
|
const self: *Self = @alignCast(@fieldParentPtr("interface", interface));
|
||||||
|
const allocator = self.command_allocator.allocator();
|
||||||
|
|
||||||
|
const CommandImpl = struct {
|
||||||
|
const Impl = @This();
|
||||||
|
|
||||||
|
buffer: *SoftBuffer,
|
||||||
|
offset: vk.DeviceSize,
|
||||||
|
|
||||||
|
pub fn execute(impl: *const Impl, device: *ExecutionDevice) VkError!void {
|
||||||
|
const size = 3 * @sizeOf(u32);
|
||||||
|
const memory = if (impl.buffer.interface.memory) |memory| memory else return VkError.InvalidDeviceMemoryDrv;
|
||||||
|
const map: []u32 = @as([*]u32, @ptrCast(@alignCast(try memory.map(impl.offset, size))))[0..3];
|
||||||
|
|
||||||
|
std.debug.print("{any}\n", .{map});
|
||||||
|
|
||||||
|
try device.compute_routines.dispatch(map[0], map[1], map[2]);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const cmd = allocator.create(CommandImpl) catch return VkError.OutOfHostMemory;
|
||||||
|
errdefer allocator.destroy(cmd);
|
||||||
|
cmd.* = .{
|
||||||
|
.buffer = @alignCast(@fieldParentPtr("interface", buffer)),
|
||||||
|
.offset = offset,
|
||||||
|
};
|
||||||
|
self.commands.append(allocator, Command.from(cmd)) catch return VkError.OutOfHostMemory;
|
||||||
|
}
|
||||||
|
|
||||||
pub fn fillBuffer(interface: *Interface, buffer: *base.Buffer, offset: vk.DeviceSize, size: vk.DeviceSize, data: u32) VkError!void {
|
pub fn fillBuffer(interface: *Interface, buffer: *base.Buffer, offset: vk.DeviceSize, size: vk.DeviceSize, data: u32) VkError!void {
|
||||||
const self: *Self = @alignCast(@fieldParentPtr("interface", interface));
|
const self: *Self = @alignCast(@fieldParentPtr("interface", interface));
|
||||||
const allocator = self.command_allocator.allocator();
|
const allocator = self.command_allocator.allocator();
|
||||||
|
|||||||
@@ -45,6 +45,7 @@ pub const DispatchTable = struct {
|
|||||||
copyImage: *const fn (*Self, *Image, vk.ImageLayout, *Image, vk.ImageLayout, []const vk.ImageCopy) VkError!void,
|
copyImage: *const fn (*Self, *Image, vk.ImageLayout, *Image, vk.ImageLayout, []const vk.ImageCopy) VkError!void,
|
||||||
copyImageToBuffer: *const fn (*Self, *Image, vk.ImageLayout, *Buffer, []const vk.BufferImageCopy) VkError!void,
|
copyImageToBuffer: *const fn (*Self, *Image, vk.ImageLayout, *Buffer, []const vk.BufferImageCopy) VkError!void,
|
||||||
dispatch: *const fn (*Self, u32, u32, u32) VkError!void,
|
dispatch: *const fn (*Self, u32, u32, u32) VkError!void,
|
||||||
|
dispatchIndirect: *const fn (*Self, *Buffer, vk.DeviceSize) VkError!void,
|
||||||
end: *const fn (*Self) VkError!void,
|
end: *const fn (*Self) VkError!void,
|
||||||
fillBuffer: *const fn (*Self, *Buffer, vk.DeviceSize, vk.DeviceSize, u32) VkError!void,
|
fillBuffer: *const fn (*Self, *Buffer, vk.DeviceSize, vk.DeviceSize, u32) VkError!void,
|
||||||
reset: *const fn (*Self, vk.CommandBufferResetFlags) VkError!void,
|
reset: *const fn (*Self, vk.CommandBufferResetFlags) VkError!void,
|
||||||
@@ -152,6 +153,10 @@ pub inline fn dispatch(self: *Self, group_count_x: u32, group_count_y: u32, grou
|
|||||||
try self.dispatch_table.dispatch(self, group_count_x, group_count_y, group_count_z);
|
try self.dispatch_table.dispatch(self, group_count_x, group_count_y, group_count_z);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub inline fn dispatchIndirect(self: *Self, buffer: *Buffer, offset: vk.DeviceSize) VkError!void {
|
||||||
|
try self.dispatch_table.dispatchIndirect(self, buffer, offset);
|
||||||
|
}
|
||||||
|
|
||||||
pub inline fn fillBuffer(self: *Self, buffer: *Buffer, offset: vk.DeviceSize, size: vk.DeviceSize, data: u32) VkError!void {
|
pub inline fn fillBuffer(self: *Self, buffer: *Buffer, offset: vk.DeviceSize, size: vk.DeviceSize, data: u32) VkError!void {
|
||||||
try self.dispatch_table.fillBuffer(self, buffer, offset, size, data);
|
try self.dispatch_table.fillBuffer(self, buffer, offset, size, data);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1869,12 +1869,7 @@ pub export fn strollCmdDispatchIndirect(p_cmd: vk.CommandBuffer, p_buffer: vk.Bu
|
|||||||
|
|
||||||
const cmd = Dispatchable(CommandBuffer).fromHandleObject(p_cmd) catch |err| return errorLogger(err);
|
const cmd = Dispatchable(CommandBuffer).fromHandleObject(p_cmd) catch |err| return errorLogger(err);
|
||||||
const buffer = NonDispatchable(Buffer).fromHandleObject(p_buffer) catch |err| return errorLogger(err);
|
const buffer = NonDispatchable(Buffer).fromHandleObject(p_buffer) catch |err| return errorLogger(err);
|
||||||
|
cmd.dispatchIndirect(buffer, offset) catch |err| return errorLogger(err);
|
||||||
notImplementedWarning();
|
|
||||||
|
|
||||||
_ = cmd;
|
|
||||||
_ = buffer;
|
|
||||||
_ = offset;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub export fn strollCmdDraw(p_cmd: vk.CommandBuffer, vertex_count: u32, instance_count: u32, first_vertex: u32, first_instance: u32) callconv(vk.vulkan_call_conv) void {
|
pub export fn strollCmdDraw(p_cmd: vk.CommandBuffer, vertex_count: u32, instance_count: u32, first_vertex: u32, first_instance: u32) callconv(vk.vulkan_call_conv) void {
|
||||||
|
|||||||
Reference in New Issue
Block a user