gpu: example: use Device.createRenderPipeline

Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
This commit is contained in:
Stephen Gutekanst 2022-03-11 19:58:36 -07:00 committed by Stephen Gutekanst
parent 4e31e015a4
commit cc40004a5f

View file

@ -101,40 +101,39 @@ pub fn main() !void {
.dst_factor = .one, .dst_factor = .one,
}, },
}; };
const color_target = gpu.ColorTargetState{
var color_target = std.mem.zeroes(c.WGPUColorTargetState); .format = window_data.swap_chain_format,
color_target.format = @enumToInt(window_data.swap_chain_format); .blend = &blend,
color_target.blend = @ptrCast(*const c.WGPUBlendState, &blend); .write_mask = .all,
color_target.writeMask = c.WGPUColorWriteMask_All; };
const fragment = gpu.FragmentState{
var fragment = std.mem.zeroes(c.WGPUFragmentState); .module = fs_module,
fragment.module = @ptrCast(c.WGPUShaderModule, fs_module.ptr); .entry_point = "main",
fragment.entryPoint = "main"; .targets = &.{color_target},
fragment.targetCount = 1; .constants = null,
fragment.targets = &color_target; };
const pipeline_descriptor = gpu.RenderPipeline.Descriptor{
var pipeline_descriptor = std.mem.zeroes(c.WGPURenderPipelineDescriptor); .fragment = &fragment,
pipeline_descriptor.fragment = &fragment; .layout = null,
.depth_stencil = null,
// Other state .vertex = .{
pipeline_descriptor.layout = null; .module = vs_module,
pipeline_descriptor.depthStencil = null; .entry_point = "main",
.buffers = null,
pipeline_descriptor.vertex.module = @ptrCast(c.WGPUShaderModule, vs_module.ptr); },
pipeline_descriptor.vertex.entryPoint = "main"; .multisample = .{
pipeline_descriptor.vertex.bufferCount = 0; .count = 1,
pipeline_descriptor.vertex.buffers = null; .mask = 0xFFFFFFFF,
.alpha_to_coverage_enabled = false,
pipeline_descriptor.multisample.count = 1; },
pipeline_descriptor.multisample.mask = 0xFFFFFFFF; .primitive = .{
pipeline_descriptor.multisample.alphaToCoverageEnabled = false; .front_face = .ccw,
.cull_mode = .none,
pipeline_descriptor.primitive.frontFace = c.WGPUFrontFace_CCW; .topology = .triangle_list,
pipeline_descriptor.primitive.cullMode = c.WGPUCullMode_None; .strip_index_format = .none,
pipeline_descriptor.primitive.topology = c.WGPUPrimitiveTopology_TriangleList; },
pipeline_descriptor.primitive.stripIndexFormat = c.WGPUIndexFormat_Undefined; };
const pipeline = setup.device.createRenderPipeline(&pipeline_descriptor);
const pipeline = c.wgpuDeviceCreateRenderPipeline(@ptrCast(c.WGPUDevice, setup.device.ptr), &pipeline_descriptor);
vs_module.release(); vs_module.release();
fs_module.release(); fs_module.release();
@ -172,7 +171,7 @@ const WindowData = struct {
const FrameParams = struct { const FrameParams = struct {
window: glfw.Window, window: glfw.Window,
device: gpu.Device, device: gpu.Device,
pipeline: c.WGPURenderPipeline, pipeline: gpu.RenderPipeline,
queue: gpu.Queue, queue: gpu.Queue,
}; };
@ -209,7 +208,7 @@ fn frame(params: FrameParams) !void {
const encoder = c.wgpuDeviceCreateCommandEncoder(@ptrCast(c.WGPUDevice, params.device.ptr), null); const encoder = c.wgpuDeviceCreateCommandEncoder(@ptrCast(c.WGPUDevice, params.device.ptr), null);
const pass = c.wgpuCommandEncoderBeginRenderPass(encoder, &render_pass_info); const pass = c.wgpuCommandEncoderBeginRenderPass(encoder, &render_pass_info);
c.wgpuRenderPassEncoderSetPipeline(pass, params.pipeline); c.wgpuRenderPassEncoderSetPipeline(pass, @ptrCast(c.WGPURenderPipeline, params.pipeline.ptr));
c.wgpuRenderPassEncoderDraw(pass, 3, 1, 0, 0); c.wgpuRenderPassEncoderDraw(pass, 3, 1, 0, 0);
c.wgpuRenderPassEncoderEnd(pass); c.wgpuRenderPassEncoderEnd(pass);
c.wgpuRenderPassEncoderRelease(pass); c.wgpuRenderPassEncoderRelease(pass);