From 34907b1f22cb9d09807989d3558e3d9609452876 Mon Sep 17 00:00:00 2001 From: Stephen Gutekanst Date: Tue, 15 Mar 2022 21:46:30 -0700 Subject: [PATCH] gpu: implement RenderPassEncoder.drawIndexedIndirect Signed-off-by: Stephen Gutekanst --- gpu/src/NativeInstance.zig | 9 +++++++++ gpu/src/RenderPassEncoder.zig | 7 ++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/gpu/src/NativeInstance.zig b/gpu/src/NativeInstance.zig index a8f26ec6..168de84b 100644 --- a/gpu/src/NativeInstance.zig +++ b/gpu/src/NativeInstance.zig @@ -922,6 +922,15 @@ const render_pass_encoder_vtable = RenderPassEncoder.VTable{ ); } }).drawIndexed, + .drawIndexedIndirect = (struct { + pub fn drawIndexedIndirect(ptr: *anyopaque, indirect_buffer: Buffer, indirect_offset: u64) void { + c.wgpuRenderPassEncoderDrawIndexedIndirect( + @ptrCast(c.WGPURenderPassEncoder, ptr), + @ptrCast(c.WGPUBuffer, indirect_buffer.ptr), + indirect_offset, + ); + } + }).drawIndexedIndirect, .beginOcclusionQuery = (struct { pub fn beginOcclusionQuery(ptr: *anyopaque, query_index: u32) void { c.wgpuRenderPassEncoderBeginOcclusionQuery(@ptrCast(c.WGPURenderPassEncoder, ptr), query_index); diff --git a/gpu/src/RenderPassEncoder.zig b/gpu/src/RenderPassEncoder.zig index 0478ed5b..aa60f6a5 100644 --- a/gpu/src/RenderPassEncoder.zig +++ b/gpu/src/RenderPassEncoder.zig @@ -3,6 +3,7 @@ const RenderPassColorAttachment = @import("structs.zig").RenderPassColorAttachme const RenderPassDepthStencilAttachment = @import("structs.zig").RenderPassDepthStencilAttachment; const RenderPassTimestampWrite = @import("structs.zig").RenderPassTimestampWrite; const RenderPipeline = @import("RenderPipeline.zig"); +const Buffer = @import("Buffer.zig"); const RenderPassEncoder = @This(); @@ -24,7 +25,7 @@ pub const VTable = struct { base_vertex: i32, first_instance: u32, ) void, - // WGPU_EXPORT void wgpuRenderPassEncoderDrawIndexedIndirect(WGPURenderPassEncoder renderPassEncoder, WGPUBuffer indirectBuffer, uint64_t indirectOffset); + drawIndexedIndirect: fn (ptr: *anyopaque, indirect_buffer: Buffer, indirect_offset: u64) void, // WGPU_EXPORT void wgpuRenderPassEncoderDrawIndirect(WGPURenderPassEncoder renderPassEncoder, WGPUBuffer indirectBuffer, uint64_t indirectOffset); end: fn (ptr: *anyopaque) void, // WGPU_EXPORT void wgpuRenderPassEncoderEndOcclusionQuery(WGPURenderPassEncoder renderPassEncoder); @@ -75,6 +76,10 @@ pub inline fn drawIndexed( pass.vtable.drawIndexed(pass.ptr, index_count, instance_count, first_index, base_vertex, first_instance); } +pub inline fn drawIndexedIndirect(pass: RenderPassEncoder, indirect_buffer: Buffer, indirect_offset: u64) void { + pass.vtable.drawIndexedIndirect(pass.ptr, indirect_buffer, indirect_offset); +} + pub inline fn beginOcclusionQuery(pass: RenderPassEncoder, query_index: u32) void { pass.vtable.beginOcclusionQuery(pass.ptr, query_index); }