From f8c40b0aa96b822605f0c0b0f8fb418112a3e642 Mon Sep 17 00:00:00 2001 From: Stephen Gutekanst Date: Wed, 16 Mar 2022 10:34:53 -0700 Subject: [PATCH] gpu: implement RenderPassEncoder.setBlendConstant Signed-off-by: Stephen Gutekanst --- gpu/src/NativeInstance.zig | 9 +++++++++ gpu/src/RenderPassEncoder.zig | 14 +++++++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/gpu/src/NativeInstance.zig b/gpu/src/NativeInstance.zig index 59fe0ead..5901fb72 100644 --- a/gpu/src/NativeInstance.zig +++ b/gpu/src/NativeInstance.zig @@ -18,6 +18,7 @@ const RequestDeviceResponse = Adapter.RequestDeviceResponse; const Device = @import("Device.zig"); const Surface = @import("Surface.zig"); const Limits = @import("data.zig").Limits; +const Color = @import("data.zig").Color; const Queue = @import("Queue.zig"); const CommandBuffer = @import("CommandBuffer.zig"); const ShaderModule = @import("ShaderModule.zig"); @@ -1005,6 +1006,14 @@ const render_pass_encoder_vtable = RenderPassEncoder.VTable{ ); } }).setBindGroup, + .setBlendConstant = (struct { + pub fn setBlendConstant(ptr: *anyopaque, color: *const Color) void { + c.wgpuRenderPassEncoderSetBlendConstant( + @ptrCast(c.WGPURenderPassEncoder, ptr), + @ptrCast(*const c.WGPUColor, color), + ); + } + }).setBlendConstant, }; fn wrapRenderBundleEncoder(enc: c.WGPURenderBundleEncoder) RenderBundleEncoder { diff --git a/gpu/src/RenderPassEncoder.zig b/gpu/src/RenderPassEncoder.zig index 89eedd93..05a7e282 100644 --- a/gpu/src/RenderPassEncoder.zig +++ b/gpu/src/RenderPassEncoder.zig @@ -6,6 +6,7 @@ const RenderPipeline = @import("RenderPipeline.zig"); const Buffer = @import("Buffer.zig"); const RenderBundle = @import("RenderBundle.zig"); const BindGroup = @import("BindGroup.zig"); +const Color = @import("data.zig").Color; const RenderPassEncoder = @This(); @@ -36,14 +37,20 @@ pub const VTable = struct { popDebugGroup: fn (ptr: *anyopaque) void, pushDebugGroup: fn (ptr: *anyopaque, group_label: [*:0]const u8) void, setBindGroup: fn (ptr: *anyopaque, group_index: u32, group: BindGroup, dynamic_offsets: []u32) void, - // WGPU_EXPORT void wgpuRenderPassEncoderSetBlendConstant(WGPURenderPassEncoder renderPassEncoder, WGPUColor const * color); + setBlendConstant: fn (ptr: *anyopaque, color: *const Color) void, + // setIndexBuffer: fn (ptr: *anyopaque, buffer: Buffer, format: IndexFormat, offset: u64, size: u64) void, // WGPU_EXPORT void wgpuRenderPassEncoderSetIndexBuffer(WGPURenderPassEncoder renderPassEncoder, 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, + // setScissorRect: fn (ptr: *anyopaque, x: u32, y: u32, width: u32, height: u32) void, // WGPU_EXPORT void wgpuRenderPassEncoderSetScissorRect(WGPURenderPassEncoder renderPassEncoder, uint32_t x, uint32_t y, uint32_t width, uint32_t height); + // setStencilReference: fn (ptr: *anyopaque, reference: u32) void, // WGPU_EXPORT void wgpuRenderPassEncoderSetStencilReference(WGPURenderPassEncoder renderPassEncoder, uint32_t reference); + // setVertexBuffer: fn (ptr: *anyopaque, slot: u32, buffer: Buffer, offset: u64, size: u64) void, // WGPU_EXPORT void wgpuRenderPassEncoderSetVertexBuffer(WGPURenderPassEncoder renderPassEncoder, uint32_t slot, WGPUBuffer buffer, uint64_t offset, uint64_t size); + // setViewport: fn (ptr: *anyopaque, x: f32, y: f32, width: f32, height: f32, min_depth: f32, max_depth: f32) void, // WGPU_EXPORT void wgpuRenderPassEncoderSetViewport(WGPURenderPassEncoder renderPassEncoder, float x, float y, float width, float height, float minDepth, float maxDepth); + // writeTimestamp: fn (ptr: *anyopaque, query_set: QuerySet, query_index: u32) void, // WGPU_EXPORT void wgpuRenderPassEncoderWriteTimestamp(WGPURenderPassEncoder renderPassEncoder, WGPUQuerySet querySet, uint32_t queryIndex); }; @@ -121,6 +128,10 @@ pub inline fn setBindGroup( pass.vtable.setBindGroup(pass.ptr, group_index, group, dynamic_offsets); } +pub inline fn setBlendConstant(pass: RenderPassEncoder, color: *const Color) void { + pass.vtable.setBlendConstant(pass.ptr, color); +} + pub inline fn setLabel(pass: RenderPassEncoder, label: [:0]const u8) void { pass.vtable.setLabel(pass.ptr, label); } @@ -153,6 +164,7 @@ test { _ = popDebugGroup; _ = pushDebugGroup; _ = setBindGroup; + _ = setBlendConstant; _ = setLabel; _ = setPipeline; _ = Descriptor;