gpu: Added helpers to BindGroup.Entry; make dynamic_offset a const slice (#215)

Helps hexops/mach#
This commit is contained in:
Michal Ziulek 2022-04-11 20:47:02 +02:00 committed by GitHub
parent 8c8534e609
commit f2ce208aa1
Failed to generate hash of commit
3 changed files with 33 additions and 5 deletions

View file

@ -35,6 +35,34 @@ pub const Entry = struct {
size: u64, size: u64,
sampler: ?Sampler = null, sampler: ?Sampler = null,
texture_view: ?TextureView = null, texture_view: ?TextureView = null,
/// Helper to create a buffer BindGroup.Entry.
pub fn buffer(binding: u32, buf: Buffer, offset: u64, size: u64) Entry {
return .{
.binding = binding,
.buffer = buf,
.offset = offset,
.size = size,
};
}
/// Helper to create a sampler BindGroup.Entry.
pub fn sampler(binding: u32, sam: Sampler) Entry {
return .{
.binding = binding,
.sampler = sam,
.size = 0,
};
}
/// Helper to create a texture view BindGroup.Entry.
pub fn textureView(binding: u32, texview: TextureView) Entry {
return .{
.binding = binding,
.texture_view = texview,
.size = 0,
};
}
}; };
pub const Descriptor = struct { pub const Descriptor = struct {

View file

@ -1298,7 +1298,7 @@ const render_pass_encoder_vtable = RenderPassEncoder.VTable{
ptr: *anyopaque, ptr: *anyopaque,
group_index: u32, group_index: u32,
group: BindGroup, group: BindGroup,
dynamic_offsets: []u32, dynamic_offsets: []const u32,
) void { ) void {
c.wgpuRenderPassEncoderSetBindGroup( c.wgpuRenderPassEncoderSetBindGroup(
@ptrCast(c.WGPURenderPassEncoder, ptr), @ptrCast(c.WGPURenderPassEncoder, ptr),
@ -1495,7 +1495,7 @@ const render_bundle_encoder_vtable = RenderBundleEncoder.VTable{
ptr: *anyopaque, ptr: *anyopaque,
group_index: u32, group_index: u32,
group: BindGroup, group: BindGroup,
dynamic_offsets: []u32, dynamic_offsets: []const u32,
) void { ) void {
c.wgpuRenderBundleEncoderSetBindGroup( c.wgpuRenderBundleEncoderSetBindGroup(
@ptrCast(c.WGPURenderBundleEncoder, ptr), @ptrCast(c.WGPURenderBundleEncoder, ptr),
@ -2157,7 +2157,7 @@ const compute_pass_encoder_vtable = ComputePassEncoder.VTable{
ptr: *anyopaque, ptr: *anyopaque,
group_index: u32, group_index: u32,
group: BindGroup, group: BindGroup,
dynamic_offsets: []u32, dynamic_offsets: []const u32,
) void { ) void {
c.wgpuComputePassEncoderSetBindGroup( c.wgpuComputePassEncoderSetBindGroup(
@ptrCast(c.WGPUComputePassEncoder, ptr), @ptrCast(c.WGPUComputePassEncoder, ptr),

View file

@ -37,7 +37,7 @@ pub const VTable = struct {
insertDebugMarker: fn (ptr: *anyopaque, marker_label: [*:0]const u8) void, insertDebugMarker: fn (ptr: *anyopaque, marker_label: [*:0]const u8) void,
popDebugGroup: fn (ptr: *anyopaque) void, popDebugGroup: fn (ptr: *anyopaque) void,
pushDebugGroup: fn (ptr: *anyopaque, group_label: [*:0]const u8) void, pushDebugGroup: fn (ptr: *anyopaque, group_label: [*:0]const u8) void,
setBindGroup: fn (ptr: *anyopaque, group_index: u32, group: BindGroup, dynamic_offsets: []u32) void, setBindGroup: fn (ptr: *anyopaque, group_index: u32, group: BindGroup, dynamic_offsets: []const u32) void,
setBlendConstant: fn (ptr: *anyopaque, color: *const Color) void, setBlendConstant: fn (ptr: *anyopaque, color: *const Color) void,
setIndexBuffer: fn (ptr: *anyopaque, buffer: Buffer, format: IndexFormat, offset: u64, size: u64) void, setIndexBuffer: fn (ptr: *anyopaque, buffer: Buffer, format: IndexFormat, offset: u64, size: u64) void,
setLabel: fn (ptr: *anyopaque, label: [:0]const u8) void, setLabel: fn (ptr: *anyopaque, label: [:0]const u8) void,
@ -118,7 +118,7 @@ pub inline fn setBindGroup(
pass: RenderPassEncoder, pass: RenderPassEncoder,
group_index: u32, group_index: u32,
group: BindGroup, group: BindGroup,
dynamic_offsets: []u32, dynamic_offsets: []const u32,
) void { ) void {
pass.vtable.setBindGroup(pass.ptr, group_index, group, dynamic_offsets); pass.vtable.setBindGroup(pass.ptr, group_index, group, dynamic_offsets);
} }