gpu: example: use CommandEncoder.beginRenderPass

Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
This commit is contained in:
Stephen Gutekanst 2022-03-11 22:04:10 -07:00 committed by Stephen Gutekanst
parent f5a5c7eaa7
commit 6385981d55

View file

@ -192,23 +192,24 @@ fn frame(params: FrameParams) !void {
} }
const back_buffer_view = pl.swap_chain.?.getCurrentTextureView(); const back_buffer_view = pl.swap_chain.?.getCurrentTextureView();
var render_pass_info = std.mem.zeroes(c.WGPURenderPassDescriptor); const color_attachment = gpu.RenderPassColorAttachment{
var color_attachment = std.mem.zeroes(c.WGPURenderPassColorAttachment); .view = back_buffer_view,
color_attachment.view = @ptrCast(c.WGPUTextureView, back_buffer_view.ptr); .resolve_target = null,
color_attachment.resolveTarget = null; .clear_value = std.mem.zeroes(gpu.Color),
color_attachment.clearValue = c.WGPUColor{ .r = 0.0, .g = 0.0, .b = 0.0, .a = 0.0 }; .load_op = .clear,
color_attachment.loadOp = c.WGPULoadOp_Clear; .store_op = .store,
color_attachment.storeOp = c.WGPUStoreOp_Store; };
render_pass_info.colorAttachmentCount = 1;
render_pass_info.colorAttachments = &color_attachment;
render_pass_info.depthStencilAttachment = null;
const encoder = params.device.createCommandEncoder(null); const encoder = params.device.createCommandEncoder(null);
const pass = c.wgpuCommandEncoderBeginRenderPass(@ptrCast(c.WGPUCommandEncoder, encoder.ptr), &render_pass_info); const render_pass_info = gpu.RenderPassEncoder.Descriptor{
c.wgpuRenderPassEncoderSetPipeline(pass, @ptrCast(c.WGPURenderPipeline, params.pipeline.ptr)); .color_attachments = &.{color_attachment},
c.wgpuRenderPassEncoderDraw(pass, 3, 1, 0, 0); .depth_stencil_attachment = null,
c.wgpuRenderPassEncoderEnd(pass); };
c.wgpuRenderPassEncoderRelease(pass); const pass = encoder.beginRenderPass(&render_pass_info);
c.wgpuRenderPassEncoderSetPipeline(@ptrCast(c.WGPURenderPassEncoder, pass.ptr), @ptrCast(c.WGPURenderPipeline, params.pipeline.ptr));
c.wgpuRenderPassEncoderDraw(@ptrCast(c.WGPURenderPassEncoder, pass.ptr), 3, 1, 0, 0);
c.wgpuRenderPassEncoderEnd(@ptrCast(c.WGPURenderPassEncoder, pass.ptr));
pass.release();
var commands = c.wgpuCommandEncoderFinish(@ptrCast(c.WGPUCommandEncoder, encoder.ptr), null); var commands = c.wgpuCommandEncoderFinish(@ptrCast(c.WGPUCommandEncoder, encoder.ptr), null);
encoder.release(); encoder.release();