parent
9489fe7083
commit
9e945ce951
8 changed files with 53 additions and 49 deletions
|
|
@ -43,7 +43,7 @@ pub inline fn getConstMappedRange(buf: Buffer, comptime T: type, offset: usize,
|
||||||
|
|
||||||
pub inline fn getMappedRange(buf: Buffer, comptime T: type, offset: usize, len: usize) []T {
|
pub inline fn getMappedRange(buf: Buffer, comptime T: type, offset: usize, len: usize) []T {
|
||||||
const data = buf.vtable.getMappedRange(buf.ptr, offset, @sizeOf(T) * len);
|
const data = buf.vtable.getMappedRange(buf.ptr, offset, @sizeOf(T) * len);
|
||||||
return @ptrCast([*]T, data.ptr)[0..len];
|
return @ptrCast([*]T, @alignCast(@alignOf(T), data.ptr))[0..len];
|
||||||
}
|
}
|
||||||
|
|
||||||
pub inline fn setLabel(buf: Buffer, label: [:0]const u8) void {
|
pub inline fn setLabel(buf: Buffer, label: [:0]const u8) void {
|
||||||
|
|
@ -91,7 +91,7 @@ pub const Descriptor = extern struct {
|
||||||
label: ?[*:0]const u8 = null,
|
label: ?[*:0]const u8 = null,
|
||||||
usage: BufferUsage,
|
usage: BufferUsage,
|
||||||
size: usize,
|
size: usize,
|
||||||
mapped_at_creation: bool,
|
mapped_at_creation: bool = false,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub const BindingType = enum(u32) {
|
pub const BindingType = enum(u32) {
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@ vtable: *const VTable,
|
||||||
pub const VTable = struct {
|
pub const VTable = struct {
|
||||||
reference: fn (ptr: *anyopaque) void,
|
reference: fn (ptr: *anyopaque) void,
|
||||||
release: fn (ptr: *anyopaque) void,
|
release: fn (ptr: *anyopaque) void,
|
||||||
beginComputePass: fn (ptr: *anyopaque, descriptor: *const ComputePassEncoder.Descriptor) ComputePassEncoder,
|
beginComputePass: fn (ptr: *anyopaque, descriptor: ?*const ComputePassEncoder.Descriptor) ComputePassEncoder,
|
||||||
beginRenderPass: fn (ptr: *anyopaque, descriptor: *const RenderPassEncoder.Descriptor) RenderPassEncoder,
|
beginRenderPass: fn (ptr: *anyopaque, descriptor: *const RenderPassEncoder.Descriptor) RenderPassEncoder,
|
||||||
clearBuffer: fn (ptr: *anyopaque, buffer: Buffer, offset: u64, size: u64) void,
|
clearBuffer: fn (ptr: *anyopaque, buffer: Buffer, offset: u64, size: u64) void,
|
||||||
copyBufferToBuffer: fn (ptr: *anyopaque, source: Buffer, source_offset: u64, destination: Buffer, destination_offset: u64, size: u64) void,
|
copyBufferToBuffer: fn (ptr: *anyopaque, source: Buffer, source_offset: u64, destination: Buffer, destination_offset: u64, size: u64) void,
|
||||||
|
|
@ -45,7 +45,7 @@ pub inline fn release(enc: CommandEncoder) void {
|
||||||
enc.vtable.release(enc.ptr);
|
enc.vtable.release(enc.ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub inline fn beginComputePass(enc: CommandEncoder, descriptor: *const ComputePassEncoder.Descriptor) ComputePassEncoder {
|
pub inline fn beginComputePass(enc: CommandEncoder, descriptor: ?*const ComputePassEncoder.Descriptor) ComputePassEncoder {
|
||||||
return enc.vtable.beginComputePass(enc.ptr, descriptor);
|
return enc.vtable.beginComputePass(enc.ptr, descriptor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,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: ?[]u32) void,
|
||||||
setLabel: fn (ptr: *anyopaque, label: [:0]const u8) void,
|
setLabel: fn (ptr: *anyopaque, label: [:0]const u8) void,
|
||||||
setPipeline: fn (ptr: *anyopaque, pipeline: ComputePipeline) void,
|
setPipeline: fn (ptr: *anyopaque, pipeline: ComputePipeline) void,
|
||||||
writeTimestamp: fn (ptr: *anyopaque, query_set: QuerySet, query_index: u32) void,
|
writeTimestamp: fn (ptr: *anyopaque, query_set: QuerySet, query_index: u32) void,
|
||||||
|
|
@ -71,7 +71,7 @@ pub inline fn setBindGroup(
|
||||||
enc: ComputePassEncoder,
|
enc: ComputePassEncoder,
|
||||||
group_index: u32,
|
group_index: u32,
|
||||||
group: BindGroup,
|
group: BindGroup,
|
||||||
dynamic_offsets: []u32,
|
dynamic_offsets: ?[]u32,
|
||||||
) void {
|
) void {
|
||||||
enc.vtable.setBindGroup(enc.ptr, group_index, group, dynamic_offsets);
|
enc.vtable.setBindGroup(enc.ptr, group_index, group, dynamic_offsets);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,7 @@ pub inline fn getBindGroupLayout(pipeline: ComputePipeline, group_index: u32) Bi
|
||||||
|
|
||||||
pub const Descriptor = struct {
|
pub const Descriptor = struct {
|
||||||
label: ?[*:0]const u8 = null,
|
label: ?[*:0]const u8 = null,
|
||||||
layout: PipelineLayout,
|
layout: ?PipelineLayout = null,
|
||||||
compute: ProgrammableStageDescriptor,
|
compute: ProgrammableStageDescriptor,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -775,7 +775,7 @@ inline fn convertComputePipelineDescriptor(descriptor: *const ComputePipeline.De
|
||||||
return .{
|
return .{
|
||||||
.nextInChain = null,
|
.nextInChain = null,
|
||||||
.label = if (descriptor.label) |l| l else null,
|
.label = if (descriptor.label) |l| l else null,
|
||||||
.layout = @ptrCast(c.WGPUPipelineLayout, descriptor.layout.ptr),
|
.layout = if (descriptor.layout) |l| @ptrCast(c.WGPUPipelineLayout, l.ptr) else null,
|
||||||
.compute = c.WGPUProgrammableStageDescriptor{
|
.compute = c.WGPUProgrammableStageDescriptor{
|
||||||
.nextInChain = null,
|
.nextInChain = null,
|
||||||
.module = @ptrCast(c.WGPUShaderModule, descriptor.compute.module.ptr),
|
.module = @ptrCast(c.WGPUShaderModule, descriptor.compute.module.ptr),
|
||||||
|
|
@ -1842,7 +1842,8 @@ const command_encoder_vtable = CommandEncoder.VTable{
|
||||||
}
|
}
|
||||||
}).setLabel,
|
}).setLabel,
|
||||||
.beginComputePass = (struct {
|
.beginComputePass = (struct {
|
||||||
pub fn beginComputePass(ptr: *anyopaque, d: *const ComputePassEncoder.Descriptor) ComputePassEncoder {
|
pub fn beginComputePass(ptr: *anyopaque, descriptor: ?*const ComputePassEncoder.Descriptor) ComputePassEncoder {
|
||||||
|
if (descriptor) |d| {
|
||||||
var few_timestamp_writes: [8]c.WGPUComputePassTimestampWrite = undefined;
|
var few_timestamp_writes: [8]c.WGPUComputePassTimestampWrite = undefined;
|
||||||
const timestamp_writes = if (d.timestamp_writes.len <= 8) blk: {
|
const timestamp_writes = if (d.timestamp_writes.len <= 8) blk: {
|
||||||
for (d.timestamp_writes) |v, i| {
|
for (d.timestamp_writes) |v, i| {
|
||||||
|
|
@ -1873,6 +1874,9 @@ const command_encoder_vtable = CommandEncoder.VTable{
|
||||||
.timestampWrites = @ptrCast([*]const c.WGPUComputePassTimestampWrite, timestamp_writes.ptr),
|
.timestampWrites = @ptrCast([*]const c.WGPUComputePassTimestampWrite, timestamp_writes.ptr),
|
||||||
};
|
};
|
||||||
return wrapComputePassEncoder(c.wgpuCommandEncoderBeginComputePass(@ptrCast(c.WGPUCommandEncoder, ptr), &desc));
|
return wrapComputePassEncoder(c.wgpuCommandEncoderBeginComputePass(@ptrCast(c.WGPUCommandEncoder, ptr), &desc));
|
||||||
|
} else {
|
||||||
|
return wrapComputePassEncoder(c.wgpuCommandEncoderBeginComputePass(@ptrCast(c.WGPUCommandEncoder, ptr), null));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}).beginComputePass,
|
}).beginComputePass,
|
||||||
.beginRenderPass = (struct {
|
.beginRenderPass = (struct {
|
||||||
|
|
@ -2157,14 +2161,14 @@ const compute_pass_encoder_vtable = ComputePassEncoder.VTable{
|
||||||
ptr: *anyopaque,
|
ptr: *anyopaque,
|
||||||
group_index: u32,
|
group_index: u32,
|
||||||
group: BindGroup,
|
group: BindGroup,
|
||||||
dynamic_offsets: []const u32,
|
dynamic_offsets: ?[]const u32,
|
||||||
) void {
|
) void {
|
||||||
c.wgpuComputePassEncoderSetBindGroup(
|
c.wgpuComputePassEncoderSetBindGroup(
|
||||||
@ptrCast(c.WGPUComputePassEncoder, ptr),
|
@ptrCast(c.WGPUComputePassEncoder, ptr),
|
||||||
group_index,
|
group_index,
|
||||||
@ptrCast(c.WGPUBindGroup, group.ptr),
|
@ptrCast(c.WGPUBindGroup, group.ptr),
|
||||||
@intCast(u32, dynamic_offsets.len),
|
if (dynamic_offsets) |d| @intCast(u32, d.len) else 0,
|
||||||
dynamic_offsets.ptr,
|
if (dynamic_offsets) |d| d.ptr else null,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}).setBindGroup,
|
}).setBindGroup,
|
||||||
|
|
|
||||||
|
|
@ -182,7 +182,7 @@ pub inline fn writeTimestamp(pass: RenderPassEncoder, query_set: QuerySet, query
|
||||||
pub const Descriptor = struct {
|
pub const Descriptor = struct {
|
||||||
label: ?[*:0]const u8 = null,
|
label: ?[*:0]const u8 = null,
|
||||||
color_attachments: []const RenderPassColorAttachment,
|
color_attachments: []const RenderPassColorAttachment,
|
||||||
depth_stencil_attachment: ?*const RenderPassDepthStencilAttachment,
|
depth_stencil_attachment: ?*const RenderPassDepthStencilAttachment = null,
|
||||||
occlusion_query_set: ?QuerySet = null,
|
occlusion_query_set: ?QuerySet = null,
|
||||||
timestamp_writes: ?[]RenderPassTimestampWrite = null,
|
timestamp_writes: ?[]RenderPassTimestampWrite = null,
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -38,12 +38,12 @@ pub inline fn getBindGroupLayout(pipeline: RenderPipeline, group_index: u32) Bin
|
||||||
|
|
||||||
pub const Descriptor = struct {
|
pub const Descriptor = struct {
|
||||||
label: ?[*:0]const u8 = null,
|
label: ?[*:0]const u8 = null,
|
||||||
layout: ?PipelineLayout,
|
layout: ?PipelineLayout = null,
|
||||||
vertex: VertexState,
|
vertex: VertexState,
|
||||||
primitive: PrimitiveState,
|
primitive: PrimitiveState = .{},
|
||||||
depth_stencil: ?*const DepthStencilState,
|
depth_stencil: ?*const DepthStencilState = null,
|
||||||
multisample: MultisampleState,
|
multisample: MultisampleState = .{},
|
||||||
fragment: ?*const FragmentState,
|
fragment: ?*const FragmentState = null,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub const CreateStatus = enum(u32) {
|
pub const CreateStatus = enum(u32) {
|
||||||
|
|
|
||||||
|
|
@ -69,7 +69,7 @@ pub const ProgrammableStageDescriptor = struct {
|
||||||
label: ?[*:0]const u8 = null,
|
label: ?[*:0]const u8 = null,
|
||||||
module: ShaderModule,
|
module: ShaderModule,
|
||||||
entry_point: [*:0]const u8,
|
entry_point: [*:0]const u8,
|
||||||
constants: ?[]const ConstantEntry,
|
constants: ?[]const ConstantEntry = null,
|
||||||
};
|
};
|
||||||
|
|
||||||
pub const ComputePassTimestampWrite = struct {
|
pub const ComputePassTimestampWrite = struct {
|
||||||
|
|
@ -123,7 +123,7 @@ pub const FragmentState = struct {
|
||||||
pub const ColorTargetState = extern struct {
|
pub const ColorTargetState = extern struct {
|
||||||
reserved: ?*anyopaque = null,
|
reserved: ?*anyopaque = null,
|
||||||
format: Texture.Format,
|
format: Texture.Format,
|
||||||
blend: *const BlendState,
|
blend: ?*const BlendState = null,
|
||||||
write_mask: ColorWriteMask = ColorWriteMask.all,
|
write_mask: ColorWriteMask = ColorWriteMask.all,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue