gpu: implement RenderBundleEncoder.draw

Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
This commit is contained in:
Stephen Gutekanst 2022-03-16 20:54:33 -07:00 committed by Stephen Gutekanst
parent d2d6b17bc9
commit 36243b2871
2 changed files with 328 additions and 7 deletions

View file

@ -1117,6 +1117,208 @@ const render_bundle_encoder_vtable = RenderBundleEncoder.VTable{
c.wgpuRenderBundleEncoderSetLabel(@ptrCast(c.WGPURenderBundleEncoder, ptr), label);
}
}).setLabel,
// .setPipeline = (struct {
// pub fn setPipeline(ptr: *anyopaque, pipeline: RenderPipeline) void {
// c.wgpuRenderBundleEncoderSetPipeline(@ptrCast(c.WGPURenderBundleEncoder, ptr), @ptrCast(c.WGPURenderPipeline, pipeline.ptr));
// }
// }).setPipeline,
.draw = (struct {
pub fn draw(ptr: *anyopaque, vertex_count: u32, instance_count: u32, first_vertex: u32, first_instance: u32) void {
c.wgpuRenderBundleEncoderDraw(@ptrCast(c.WGPURenderBundleEncoder, ptr), vertex_count, instance_count, first_vertex, first_instance);
}
}).draw,
// .drawIndexed = (struct {
// pub fn drawIndexed(
// ptr: *anyopaque,
// index_count: u32,
// instance_count: u32,
// first_index: u32,
// base_vertex: i32,
// first_instance: u32,
// ) void {
// c.wgpuRenderBundleEncoderDrawIndexed(
// @ptrCast(c.WGPURenderBundleEncoder, ptr),
// index_count,
// instance_count,
// first_index,
// base_vertex,
// first_instance,
// );
// }
// }).drawIndexed,
// .drawIndexedIndirect = (struct {
// pub fn drawIndexedIndirect(ptr: *anyopaque, indirect_buffer: Buffer, indirect_offset: u64) void {
// c.wgpuRenderBundleEncoderDrawIndexedIndirect(
// @ptrCast(c.WGPURenderBundleEncoder, ptr),
// @ptrCast(c.WGPUBuffer, indirect_buffer.ptr),
// indirect_offset,
// );
// }
// }).drawIndexedIndirect,
// .drawIndirect = (struct {
// pub fn drawIndirect(ptr: *anyopaque, indirect_buffer: Buffer, indirect_offset: u64) void {
// c.wgpuRenderBundleEncoderDrawIndexedIndirect(
// @ptrCast(c.WGPURenderBundleEncoder, ptr),
// @ptrCast(c.WGPUBuffer, indirect_buffer.ptr),
// indirect_offset,
// );
// }
// }).drawIndirect,
// .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,
// .end = (struct {
// pub fn end(ptr: *anyopaque) void {
// c.wgpuRenderBundleEncoderEnd(@ptrCast(c.WGPURenderBundleEncoder, ptr));
// }
// }).end,
// .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,
// .insertDebugMarker = (struct {
// pub fn insertDebugMarker(ptr: *anyopaque, marker_label: [*:0]const u8) void {
// c.wgpuRenderBundleEncoderInsertDebugMarker(@ptrCast(c.WGPURenderBundleEncoder, ptr), marker_label);
// }
// }).insertDebugMarker,
// .popDebugGroup = (struct {
// pub fn popDebugGroup(ptr: *anyopaque) void {
// c.wgpuRenderBundleEncoderPopDebugGroup(@ptrCast(c.WGPURenderBundleEncoder, ptr));
// }
// }).popDebugGroup,
// .pushDebugGroup = (struct {
// pub fn pushDebugGroup(ptr: *anyopaque, group_label: [*:0]const u8) void {
// c.wgpuRenderBundleEncoderPushDebugGroup(@ptrCast(c.WGPURenderBundleEncoder, ptr), group_label);
// }
// }).pushDebugGroup,
// .setBindGroup = (struct {
// pub fn setBindGroup(
// ptr: *anyopaque,
// group_index: u32,
// group: BindGroup,
// dynamic_offsets: []u32,
// ) void {
// c.wgpuRenderBundleEncoderSetBindGroup(
// @ptrCast(c.WGPURenderBundleEncoder, ptr),
// group_index,
// @ptrCast(c.WGPUBindGroup, group.ptr),
// @intCast(u32, dynamic_offsets.len),
// &dynamic_offsets[0],
// );
// }
// }).setBindGroup,
// .setBlendConstant = (struct {
// pub fn setBlendConstant(ptr: *anyopaque, color: *const Color) void {
// c.wgpuRenderBundleEncoderSetBlendConstant(
// @ptrCast(c.WGPURenderBundleEncoder, ptr),
// @ptrCast(*const c.WGPUColor, color),
// );
// }
// }).setBlendConstant,
// .setIndexBuffer = (struct {
// pub fn setIndexBuffer(
// ptr: *anyopaque,
// buffer: Buffer,
// format: IndexFormat,
// offset: u64,
// size: u64,
// ) void {
// c.wgpuRenderBundleEncoderSetIndexBuffer(
// @ptrCast(c.WGPURenderBundleEncoder, ptr),
// @ptrCast(c.WGPUBuffer, buffer.ptr),
// @enumToInt(format),
// offset,
// size,
// );
// }
// }).setIndexBuffer,
// .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,
};
fn wrapRenderBundle(bundle: c.WGPURenderBundle) RenderBundle {