mach/gpu/src/RenderBundleEncoder.zig
Stephen Gutekanst 36243b2871 gpu: implement RenderBundleEncoder.draw
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2022-03-19 00:51:48 -07:00

198 lines
7.8 KiB
Zig

const Texture = @import("Texture.zig");
const RenderBundleEncoder = @This();
/// The type erased pointer to the RenderBundleEncoder implementation
/// Equal to c.WGPURenderBundleEncoder for NativeInstance.
ptr: *anyopaque,
vtable: *const VTable,
pub const VTable = struct {
reference: fn (ptr: *anyopaque) void,
release: fn (ptr: *anyopaque) void,
draw: fn (
ptr: *anyopaque,
vertex_count: u32,
instance_count: u32,
first_vertex: u32,
first_instance: u32,
) void,
// WGPU_EXPORT void wgpuRenderBundleEncoderDraw(WGPURenderBundleEncoder renderBundleEncoder, uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance);
// drawIndexed: fn (
// ptr: *anyopaque,
// index_count: u32,
// instance_count: u32,
// first_index: u32,
// base_vertex: i32,
// first_instance: u32,
// ) void,
// WGPU_EXPORT void wgpuRenderBundleEncoderDrawIndexed(WGPURenderBundleEncoder renderBundleEncoder, uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t baseVertex, uint32_t firstInstance);
// drawIndexedIndirect: fn (ptr: *anyopaque, indirect_buffer: Buffer, indirect_offset: u64) void,
// WGPU_EXPORT void wgpuRenderBundleEncoderDrawIndexedIndirect(WGPURenderBundleEncoder renderBundleEncoder, WGPUBuffer indirectBuffer, uint64_t indirectOffset);
// drawIndirect: fn (ptr: *anyopaque, indirect_buffer: Buffer, indirect_offset: u64) void,
// WGPU_EXPORT void wgpuRenderBundleEncoderDrawIndirect(WGPURenderBundleEncoder renderBundleEncoder, WGPUBuffer indirectBuffer, uint64_t indirectOffset);
// finish: fn (ptr: *anyopaque, descriptor: *const RenderBundle.Descriptor) void,
// WGPU_EXPORT WGPURenderBundle wgpuRenderBundleEncoderFinish(WGPURenderBundleEncoder renderBundleEncoder, WGPURenderBundleDescriptor const * descriptor);
// insertDebugMarker: fn (ptr: *anyopaque, marker_label: [*:0]const u8) void,
// WGPU_EXPORT void wgpuRenderBundleEncoderInsertDebugMarker(WGPURenderBundleEncoder renderBundleEncoder, char const * markerLabel);
// popDebugGroup: fn (ptr: *anyopaque) void,
// WGPU_EXPORT void wgpuRenderBundleEncoderPopDebugGroup(WGPURenderBundleEncoder renderBundleEncoder);
// pushDebugGroup: fn (ptr: *anyopaque, group_label: [*:0]const u8) void,
// WGPU_EXPORT void wgpuRenderBundleEncoderPushDebugGroup(WGPURenderBundleEncoder renderBundleEncoder, char const * groupLabel);
// setBindGroup: fn (ptr: *anyopaque, group_index: u32, group: BindGroup, dynamic_offsets: []u32) void,
// WGPU_EXPORT void wgpuRenderBundleEncoderSetBindGroup(WGPURenderBundleEncoder renderBundleEncoder, uint32_t groupIndex, WGPUBindGroup group, uint32_t dynamicOffsetCount, uint32_t const * dynamicOffsets);
// setIndexBuffer: fn (ptr: *anyopaque, buffer: Buffer, format: IndexFormat, offset: u64, size: u64) void,
// WGPU_EXPORT void wgpuRenderBundleEncoderSetIndexBuffer(WGPURenderBundleEncoder renderBundleEncoder, WGPUBuffer buffer, WGPUIndexFormat format, uint64_t offset, uint64_t size);
setLabel: fn (ptr: *anyopaque, label: [:0]const u8) void,
// setPipeline: fn (ptr: *anyopaque, pipeline: RenderPipeline) void,
// WGPU_EXPORT void wgpuRenderBundleEncoderSetPipeline(WGPURenderBundleEncoder renderBundleEncoder, WGPURenderPipeline pipeline);
// 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);
};
pub inline fn reference(enc: RenderBundleEncoder) void {
enc.vtable.reference(enc.ptr);
}
pub inline fn release(enc: RenderBundleEncoder) void {
enc.vtable.release(enc.ptr);
}
pub inline fn draw(
enc: RenderBundleEncoder,
vertex_count: u32,
instance_count: u32,
first_vertex: u32,
first_instance: u32,
) void {
enc.vtable.draw(enc.ptr, vertex_count, instance_count, first_vertex, first_instance);
}
// pub inline fn drawIndexed(
// enc: RenderPassEncoder,
// index_count: u32,
// instance_count: u32,
// first_index: u32,
// base_vertex: i32,
// first_instance: u32,
// ) void {
// enc.vtable.drawIndexed(enc.ptr, index_count, instance_count, first_index, base_vertex, first_instance);
// }
// pub inline fn drawIndexedIndirect(enc: RenderPassEncoder, indirect_buffer: Buffer, indirect_offset: u64) void {
// enc.vtable.drawIndexedIndirect(enc.ptr, indirect_buffer, indirect_offset);
// }
// pub inline fn drawIndirect(enc: RenderPassEncoder, indirect_buffer: Buffer, indirect_offset: u64) void {
// enc.vtable.drawIndirect(enc.ptr, indirect_buffer, indirect_offset);
// }
// pub inline fn beginOcclusionQuery(enc: RenderPassEncoder, query_index: u32) void {
// enc.vtable.beginOcclusionQuery(enc.ptr, query_index);
// }
// pub inline fn endOcclusionQuery(enc: RenderPassEncoder) void {
// enc.vtable.endOcclusionQuery(enc.ptr);
// }
// pub inline fn end(enc: RenderPassEncoder) void {
// enc.vtable.end(enc.ptr);
// }
// pub inline fn executeBundles(enc: RenderPassEncoder, bundles: []RenderBundle) void {
// enc.vtable.executeBundles(enc.ptr, bundles);
// }
// pub inline fn insertDebugMarker(enc: RenderPassEncoder, marker_label: [*:0]const u8) void {
// enc.vtable.insertDebugMarker(enc.ptr, marker_label);
// }
// pub inline fn popDebugGroup(enc: RenderPassEncoder) void {
// enc.vtable.popDebugGroup(enc.ptr);
// }
// pub inline fn pushDebugGroup(enc: RenderPassEncoder, group_label: [*:0]const u8) void {
// enc.vtable.pushDebugGroup(enc.ptr, group_label);
// }
// pub inline fn setBindGroup(
// enc: RenderPassEncoder,
// group_index: u32,
// group: BindGroup,
// dynamic_offsets: []u32,
// ) void {
// enc.vtable.setBindGroup(enc.ptr, group_index, group, dynamic_offsets);
// }
// pub inline fn setBlendConstant(enc: RenderPassEncoder, color: *const Color) void {
// enc.vtable.setBlendConstant(enc.ptr, color);
// }
// pub inline fn setIndexBuffer(
// enc: RenderPassEncoder,
// buffer: Buffer,
// format: IndexFormat,
// offset: u64,
// size: u64,
// ) void {
// enc.vtable.setIndexBuffer(enc.ptr, buffer, format, offset, size);
// }
pub inline fn setLabel(enc: RenderBundleEncoder, label: [:0]const u8) void {
enc.vtable.setLabel(enc.ptr, label);
}
// pub inline fn setPipeline(enc: RenderPassEncoder, pipeline: RenderPipeline) void {
// enc.vtable.setPipeline(enc.ptr, pipeline);
// }
// pub inline fn setScissorRect(enc: RenderPassEncoder, x: u32, y: u32, width: u32, height: u32) void {
// enc.vtable.setScissorRect(enc.ptr, x, y, width, height);
// }
// pub inline fn setStencilReference(enc: RenderPassEncoder, ref: u32) void {
// enc.vtable.setStencilReference(enc.ptr, ref);
// }
// pub inline fn setVertexBuffer(
// enc: RenderPassEncoder,
// slot: u32,
// buffer: Buffer,
// offset: u64,
// size: u64,
// ) void {
// enc.vtable.setVertexBuffer(enc.ptr, slot, buffer, offset, size);
// }
// pub inline fn setViewport(
// enc: RenderPassEncoder,
// 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: RenderPassEncoder, query_set: QuerySet, query_index: u32) void {
// enc.vtable.writeTimestamp(enc.ptr, query_set, query_index);
// }
pub const Descriptor = struct {
label: ?[*:0]const u8 = null,
color_formats: []Texture.Format,
depth_stencil_format: Texture.Format,
sample_count: u32,
depth_read_only: bool,
stencil_read_only: bool,
};
test {
_ = VTable;
_ = reference;
_ = release;
_ = draw;
_ = Descriptor;
}