From 4e3ffd455770442af92cdbcae0f9998db9a8b4c6 Mon Sep 17 00:00:00 2001 From: Stephen Gutekanst Date: Wed, 16 Mar 2022 21:18:47 -0700 Subject: [PATCH] gpu: implement RenderBundleEncoder.setVertexBuffer Signed-off-by: Stephen Gutekanst --- gpu/src/NativeInstance.zig | 113 ++++---------------------------- gpu/src/RenderBundleEncoder.zig | 62 ++++-------------- 2 files changed, 22 insertions(+), 153 deletions(-) diff --git a/gpu/src/NativeInstance.zig b/gpu/src/NativeInstance.zig index 7ba7b43f..2fd2da2d 100644 --- a/gpu/src/NativeInstance.zig +++ b/gpu/src/NativeInstance.zig @@ -1221,108 +1221,17 @@ const render_bundle_encoder_vtable = RenderBundleEncoder.VTable{ ); } }).setIndexBuffer, - // .beginOcclusionQuery = (struct { - // pub fn beginOcclusionQuery(ptr: *anyopaque, query_index: u32) void { - // c.wgpuRenderBundleEncoderBeginOcclusionQuery(@ptrCast(c.WGPURenderBundleEncoder, ptr), query_index); - // } - // }).beginOcclusionQuery, - // .endOcclusionQuery = (struct { - // pub fn endOcclusionQuery(ptr: *anyopaque) void { - // c.wgpuRenderBundleEncoderEndOcclusionQuery(@ptrCast(c.WGPURenderBundleEncoder, ptr)); - // } - // }).endOcclusionQuery, - // .executeBundles = (struct { - // pub fn executeBundles(ptr: *anyopaque, bundles: []RenderBundle) void { - // var few_bundles: [16]c.WGPURenderBundle = undefined; - // const c_bundles = if (bundles.len <= 8) blk: { - // for (bundles) |bundle, i| { - // few_bundles[i] = @ptrCast(c.WGPURenderBundle, bundle.ptr); - // } - // break :blk few_bundles[0..bundles.len]; - // } else blk: { - // const mem = std.heap.page_allocator.alloc(c.WGPURenderBundle, bundles.len) catch unreachable; - // for (bundles) |bundle, i| { - // mem[i] = @ptrCast(c.WGPURenderBundle, bundle.ptr); - // } - // break :blk mem; - // }; - // defer if (bundles.len > 8) std.heap.page_allocator.free(c_bundles); - - // c.wgpuRenderBundleEncoderExecuteBundles( - // @ptrCast(c.WGPURenderBundleEncoder, ptr), - // @intCast(u32, c_bundles.len), - // &c_bundles[0], - // ); - // } - // }).executeBundles, - // .setBlendConstant = (struct { - // pub fn setBlendConstant(ptr: *anyopaque, color: *const Color) void { - // c.wgpuRenderBundleEncoderSetBlendConstant( - // @ptrCast(c.WGPURenderBundleEncoder, ptr), - // @ptrCast(*const c.WGPUColor, color), - // ); - // } - // }).setBlendConstant, - // .setScissorRect = (struct { - // pub fn setScissorRect(ptr: *anyopaque, x: u32, y: u32, width: u32, height: u32) void { - // c.wgpuRenderBundleEncoderSetScissorRect( - // @ptrCast(c.WGPURenderBundleEncoder, ptr), - // x, - // y, - // width, - // height, - // ); - // } - // }).setScissorRect, - // .setStencilReference = (struct { - // pub fn setStencilReference(ptr: *anyopaque, reference: u32) void { - // c.wgpuRenderBundleEncoderSetStencilReference( - // @ptrCast(c.WGPURenderBundleEncoder, ptr), - // reference, - // ); - // } - // }).setStencilReference, - // .setVertexBuffer = (struct { - // pub fn setVertexBuffer(ptr: *anyopaque, slot: u32, buffer: Buffer, offset: u64, size: u64) void { - // c.wgpuRenderBundleEncoderSetVertexBuffer( - // @ptrCast(c.WGPURenderBundleEncoder, ptr), - // slot, - // @ptrCast(c.WGPUBuffer, buffer.ptr), - // offset, - // size, - // ); - // } - // }).setVertexBuffer, - // .setViewport = (struct { - // pub fn setViewport( - // ptr: *anyopaque, - // x: f32, - // y: f32, - // width: f32, - // height: f32, - // min_depth: f32, - // max_depth: f32, - // ) void { - // c.wgpuRenderBundleEncoderSetViewport( - // @ptrCast(c.WGPURenderBundleEncoder, ptr), - // x, - // y, - // width, - // height, - // min_depth, - // max_depth, - // ); - // } - // }).setViewport, - // .writeTimestamp = (struct { - // pub fn writeTimestamp(ptr: *anyopaque, query_set: QuerySet, query_index: u32) void { - // c.wgpuRenderBundleEncoderWriteTimestamp( - // @ptrCast(c.WGPURenderBundleEncoder, ptr), - // @ptrCast(c.WGPUQuerySet, query_set.ptr), - // query_index, - // ); - // } - // }).writeTimestamp, + .setVertexBuffer = (struct { + pub fn setVertexBuffer(ptr: *anyopaque, slot: u32, buffer: Buffer, offset: u64, size: u64) void { + c.wgpuRenderBundleEncoderSetVertexBuffer( + @ptrCast(c.WGPURenderBundleEncoder, ptr), + slot, + @ptrCast(c.WGPUBuffer, buffer.ptr), + offset, + size, + ); + } + }).setVertexBuffer, }; fn wrapRenderBundle(bundle: c.WGPURenderBundle) RenderBundle { diff --git a/gpu/src/RenderBundleEncoder.zig b/gpu/src/RenderBundleEncoder.zig index 978266c6..3486dcd1 100644 --- a/gpu/src/RenderBundleEncoder.zig +++ b/gpu/src/RenderBundleEncoder.zig @@ -40,8 +40,7 @@ pub const VTable = struct { setIndexBuffer: fn (ptr: *anyopaque, buffer: Buffer, format: IndexFormat, offset: u64, size: u64) void, setLabel: fn (ptr: *anyopaque, label: [:0]const u8) void, setPipeline: fn (ptr: *anyopaque, pipeline: RenderPipeline) void, - // setVertexBuffer: fn (ptr: *anyopaque, slot: u32, buffer: Buffer, offset: u64, size: u64) void, - // WGPU_EXPORT void wgpuRenderBundleEncoderSetVertexBuffer(WGPURenderBundleEncoder renderBundleEncoder, uint32_t slot, WGPUBuffer buffer, uint64_t offset, uint64_t size); + setVertexBuffer: fn (ptr: *anyopaque, slot: u32, buffer: Buffer, offset: u64, size: u64) void, }; pub inline fn reference(enc: RenderBundleEncoder) void { @@ -116,22 +115,6 @@ pub inline fn setIndexBuffer( enc.vtable.setIndexBuffer(enc.ptr, buffer, format, offset, size); } -// pub inline fn beginOcclusionQuery(enc: RenderBundleEncoder, query_index: u32) void { -// enc.vtable.beginOcclusionQuery(enc.ptr, query_index); -// } - -// pub inline fn endOcclusionQuery(enc: RenderBundleEncoder) void { -// enc.vtable.endOcclusionQuery(enc.ptr); -// } - -// pub inline fn executeBundles(enc: RenderBundleEncoder, bundles: []RenderBundle) void { -// enc.vtable.executeBundles(enc.ptr, bundles); -// } - -// pub inline fn setBlendConstant(enc: RenderBundleEncoder, color: *const Color) void { -// enc.vtable.setBlendConstant(enc.ptr, color); -// } - pub inline fn setLabel(enc: RenderBundleEncoder, label: [:0]const u8) void { enc.vtable.setLabel(enc.ptr, label); } @@ -140,39 +123,15 @@ pub inline fn setPipeline(enc: RenderBundleEncoder, pipeline: RenderPipeline) vo enc.vtable.setPipeline(enc.ptr, pipeline); } -// pub inline fn setScissorRect(enc: RenderBundleEncoder, x: u32, y: u32, width: u32, height: u32) void { -// enc.vtable.setScissorRect(enc.ptr, x, y, width, height); -// } - -// pub inline fn setStencilReference(enc: RenderBundleEncoder, ref: u32) void { -// enc.vtable.setStencilReference(enc.ptr, ref); -// } - -// pub inline fn setVertexBuffer( -// enc: RenderBundleEncoder, -// slot: u32, -// buffer: Buffer, -// offset: u64, -// size: u64, -// ) void { -// enc.vtable.setVertexBuffer(enc.ptr, slot, buffer, offset, size); -// } - -// pub inline fn setViewport( -// enc: RenderBundleEncoder, -// x: f32, -// y: f32, -// width: f32, -// height: f32, -// min_depth: f32, -// max_depth: f32, -// ) void { -// enc.vtable.setViewport(enc.ptr, x, y, width, height, min_depth, max_depth); -// } - -// pub inline fn writeTimestamp(enc: RenderBundleEncoder, query_set: QuerySet, query_index: u32) void { -// enc.vtable.writeTimestamp(enc.ptr, query_set, query_index); -// } +pub inline fn setVertexBuffer( + enc: RenderBundleEncoder, + slot: u32, + buffer: Buffer, + offset: u64, + size: u64, +) void { + enc.vtable.setVertexBuffer(enc.ptr, slot, buffer, offset, size); +} pub const Descriptor = struct { label: ?[*:0]const u8 = null, @@ -199,5 +158,6 @@ test { _ = setIndexBuffer; _ = setLabel; _ = setPipeline; + _ = setVertexBuffer; _ = Descriptor; }