mach/libs/gpu/src/dawn_impl.zig
Stephen Gutekanst 1e0fa20622 all: employ self-hosted @cImport hack only on Darwin targets
This is an poor approximation for the host OS running Darwin, which
is good enough for now. In practice this means macOS works but can't
cross-compile (until the cImport issue is fixed in Zig itself), but
Windows/Linux are unaffected and should be able to build natively and
cross-compile.

Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
2022-08-27 11:19:57 -07:00

1224 lines
53 KiB
Zig

const gpu = @import("main.zig");
const c = if (@import("builtin").zig_backend == .stage1 or !@import("builtin").target.isDarwin())
@cImport({
@cInclude("dawn/webgpu.h");
@cInclude("mach_dawn.h");
})
else
// TODO(self-hosted): HACK: workaround https://github.com/ziglang/zig/issues/12483
//
// cd gpu/src/
// echo '#include <dawn/webgpu.h>' > tmp.c
// echo '#include "mach_dawn.h"' >> tmp.c
// zig translate-c tmp.c -I ../zig-cache/mach/gpu-dawn/release-777728f/include/ > dawn_webgpu_h.zig
@import("dawn_webgpu_h.zig");
var procs: c.DawnProcTable = undefined;
/// A Dawn implementation of the gpu.Interface, which merely directs calls to the Dawn proc table.
///
/// Before use, it must be `.init()`ialized in order to set the global proc table.
pub const Interface = struct {
pub fn init() void {
procs = c.machDawnGetProcTable();
}
pub inline fn createInstance(descriptor: ?*const gpu.Instance.Descriptor) ?*gpu.Instance {
return @ptrCast(?*gpu.Instance, procs.createInstance.?(
@ptrCast(?*const c.WGPUInstanceDescriptor, descriptor),
));
}
pub inline fn getProcAddress(device: *gpu.Device, proc_name: [*:0]const u8) ?gpu.Proc {
return procs.getProcAddress.?(
@ptrCast(c.WGPUDevice, device),
proc_name,
);
}
pub inline fn adapterCreateDevice(adapter: *gpu.Adapter, descriptor: ?*const gpu.Device.Descriptor) ?*gpu.Device {
return @ptrCast(?*gpu.Device, procs.adapterCreateDevice.?(
@ptrCast(c.WGPUAdapter, adapter),
@ptrCast(?*const c.WGPUDeviceDescriptor, descriptor),
));
}
pub inline fn adapterEnumerateFeatures(adapter: *gpu.Adapter, features: ?[*]gpu.FeatureName) usize {
return procs.adapterEnumerateFeatures.?(
@ptrCast(c.WGPUAdapter, adapter),
@ptrCast(?[*]c.WGPUFeatureName, features),
);
}
pub inline fn adapterGetLimits(adapter: *gpu.Adapter, limits: *gpu.SupportedLimits) bool {
return procs.adapterGetLimits.?(
@ptrCast(c.WGPUAdapter, adapter),
@ptrCast(*c.WGPUSupportedLimits, limits),
);
}
pub inline fn adapterGetProperties(adapter: *gpu.Adapter, properties: *gpu.Adapter.Properties) void {
return procs.adapterGetProperties.?(
@ptrCast(c.WGPUAdapter, adapter),
@ptrCast(*c.WGPUAdapterProperties, properties),
);
}
pub inline fn adapterHasFeature(adapter: *gpu.Adapter, feature: gpu.FeatureName) bool {
return procs.adapterHasFeature.?(
@ptrCast(c.WGPUAdapter, adapter),
@enumToInt(feature),
);
}
pub inline fn adapterRequestDevice(adapter: *gpu.Adapter, descriptor: ?*const gpu.Device.Descriptor, callback: gpu.RequestDeviceCallback, userdata: ?*anyopaque) void {
return procs.adapterRequestDevice.?(
@ptrCast(c.WGPUAdapter, adapter),
@ptrCast(?*const c.WGPUDeviceDescriptor, descriptor),
@ptrCast(c.WGPURequestDeviceCallback, callback),
userdata,
);
}
pub inline fn adapterReference(adapter: *gpu.Adapter) void {
procs.adapterReference.?(@ptrCast(c.WGPUAdapter, adapter));
}
pub inline fn adapterRelease(adapter: *gpu.Adapter) void {
procs.adapterRelease.?(@ptrCast(c.WGPUAdapter, adapter));
}
pub inline fn bindGroupSetLabel(bind_group: *gpu.BindGroup, label: [*:0]const u8) void {
procs.bindGroupSetLabel.?(@ptrCast(c.WGPUBindGroup, bind_group), label);
}
pub inline fn bindGroupReference(bind_group: *gpu.BindGroup) void {
procs.bindGroupReference.?(@ptrCast(c.WGPUBindGroup, bind_group));
}
pub inline fn bindGroupRelease(bind_group: *gpu.BindGroup) void {
procs.bindGroupRelease.?(@ptrCast(c.WGPUBindGroup, bind_group));
}
pub inline fn bindGroupLayoutSetLabel(bind_group_layout: *gpu.BindGroupLayout, label: [*:0]const u8) void {
procs.bindGroupLayoutSetLabel.?(@ptrCast(c.WGPUBindGroupLayout, bind_group_layout), label);
}
pub inline fn bindGroupLayoutReference(bind_group_layout: *gpu.BindGroupLayout) void {
procs.bindGroupLayoutReference.?(@ptrCast(c.WGPUBindGroupLayout, bind_group_layout));
}
pub inline fn bindGroupLayoutRelease(bind_group_layout: *gpu.BindGroupLayout) void {
procs.bindGroupLayoutRelease.?(@ptrCast(c.WGPUBindGroupLayout, bind_group_layout));
}
pub inline fn bufferDestroy(buffer: *gpu.Buffer) void {
procs.bufferDestroy.?(@ptrCast(c.WGPUBuffer, buffer));
}
// TODO: dawn: return value not marked as nullable in dawn.json but in fact is.
pub inline fn bufferGetConstMappedRange(buffer: *gpu.Buffer, offset: usize, size: usize) ?*const anyopaque {
return procs.bufferGetConstMappedRange.?(
@ptrCast(c.WGPUBuffer, buffer),
offset,
size,
);
}
// TODO: dawn: return value not marked as nullable in dawn.json but in fact is.
pub inline fn bufferGetMappedRange(buffer: *gpu.Buffer, offset: usize, size: usize) ?*anyopaque {
return procs.bufferGetMappedRange.?(
@ptrCast(c.WGPUBuffer, buffer),
offset,
size,
);
}
pub inline fn bufferGetSize(buffer: *gpu.Buffer) u64 {
return procs.bufferGetSize.?(@ptrCast(c.WGPUBuffer, buffer));
}
pub inline fn bufferGetUsage(buffer: *gpu.Buffer) gpu.Buffer.UsageFlags {
return @bitCast(gpu.Buffer.UsageFlags, procs.bufferGetUsage.?(@ptrCast(c.WGPUBuffer, buffer)));
}
pub inline fn bufferMapAsync(buffer: *gpu.Buffer, mode: gpu.MapModeFlags, offset: usize, size: usize, callback: gpu.Buffer.MapCallback, userdata: ?*anyopaque) void {
procs.bufferMapAsync.?(
@ptrCast(c.WGPUBuffer, buffer),
@bitCast(c.WGPUMapModeFlags, mode),
offset,
size,
@ptrCast(c.WGPUBufferMapCallback, callback),
userdata,
);
}
pub inline fn bufferSetLabel(buffer: *gpu.Buffer, label: [*:0]const u8) void {
procs.bufferSetLabel.?(@ptrCast(c.WGPUBuffer, buffer), label);
}
pub inline fn bufferUnmap(buffer: *gpu.Buffer) void {
procs.bufferUnmap.?(@ptrCast(c.WGPUBuffer, buffer));
}
pub inline fn bufferReference(buffer: *gpu.Buffer) void {
procs.bufferReference.?(@ptrCast(c.WGPUBuffer, buffer));
}
pub inline fn bufferRelease(buffer: *gpu.Buffer) void {
procs.bufferRelease.?(@ptrCast(c.WGPUBuffer, buffer));
}
pub inline fn commandBufferSetLabel(command_buffer: *gpu.CommandBuffer, label: [*:0]const u8) void {
procs.commandBufferSetLabel.?(@ptrCast(c.WGPUCommandBuffer, command_buffer), label);
}
pub inline fn commandBufferReference(command_buffer: *gpu.CommandBuffer) void {
procs.commandBufferReference.?(@ptrCast(c.WGPUCommandBuffer, command_buffer));
}
pub inline fn commandBufferRelease(command_buffer: *gpu.CommandBuffer) void {
procs.commandBufferRelease.?(@ptrCast(c.WGPUCommandBuffer, command_buffer));
}
pub inline fn commandEncoderBeginComputePass(command_encoder: *gpu.CommandEncoder, descriptor: ?*const gpu.ComputePassDescriptor) *gpu.ComputePassEncoder {
return @ptrCast(*gpu.ComputePassEncoder, procs.commandEncoderBeginComputePass.?(
@ptrCast(c.WGPUCommandEncoder, command_encoder),
@ptrCast(?*const c.WGPUComputePassDescriptor, descriptor),
));
}
pub inline fn commandEncoderBeginRenderPass(command_encoder: *gpu.CommandEncoder, descriptor: *const gpu.RenderPassDescriptor) *gpu.RenderPassEncoder {
return @ptrCast(*gpu.RenderPassEncoder, procs.commandEncoderBeginRenderPass.?(
@ptrCast(c.WGPUCommandEncoder, command_encoder),
@ptrCast(?*const c.WGPURenderPassDescriptor, descriptor),
));
}
pub inline fn commandEncoderClearBuffer(command_encoder: *gpu.CommandEncoder, buffer: *gpu.Buffer, offset: u64, size: u64) void {
procs.commandEncoderClearBuffer.?(
@ptrCast(c.WGPUCommandEncoder, command_encoder),
@ptrCast(c.WGPUBuffer, buffer),
offset,
size,
);
}
pub inline fn commandEncoderCopyBufferToBuffer(command_encoder: *gpu.CommandEncoder, source: *gpu.Buffer, source_offset: u64, destination: *gpu.Buffer, destination_offset: u64, size: u64) void {
procs.commandEncoderCopyBufferToBuffer.?(
@ptrCast(c.WGPUCommandEncoder, command_encoder),
@ptrCast(c.WGPUBuffer, source),
source_offset,
@ptrCast(c.WGPUBuffer, destination),
destination_offset,
size,
);
}
pub inline fn commandEncoderCopyBufferToTexture(command_encoder: *gpu.CommandEncoder, source: *const gpu.ImageCopyBuffer, destination: *const gpu.ImageCopyTexture, copy_size: *const gpu.Extent3D) void {
procs.commandEncoderCopyBufferToTexture.?(
@ptrCast(c.WGPUCommandEncoder, command_encoder),
@ptrCast(*const c.WGPUImageCopyBuffer, source),
@ptrCast(*const c.WGPUImageCopyTexture, destination),
@ptrCast(*const c.WGPUExtent3D, copy_size),
);
}
pub inline fn commandEncoderCopyTextureToBuffer(command_encoder: *gpu.CommandEncoder, source: *const gpu.ImageCopyTexture, destination: *const gpu.ImageCopyBuffer, copy_size: *const gpu.Extent3D) void {
procs.commandEncoderCopyTextureToBuffer.?(
@ptrCast(c.WGPUCommandEncoder, command_encoder),
@ptrCast(*const c.WGPUImageCopyTexture, source),
@ptrCast(*const c.WGPUImageCopyBuffer, destination),
@ptrCast(*const c.WGPUExtent3D, copy_size),
);
}
pub inline fn commandEncoderCopyTextureToTexture(command_encoder: *gpu.CommandEncoder, source: *const gpu.ImageCopyTexture, destination: *const gpu.ImageCopyTexture, copy_size: *const gpu.Extent3D) void {
procs.commandEncoderCopyTextureToTexture.?(
@ptrCast(c.WGPUCommandEncoder, command_encoder),
@ptrCast(*const c.WGPUImageCopyTexture, source),
@ptrCast(*const c.WGPUImageCopyTexture, destination),
@ptrCast(*const c.WGPUExtent3D, copy_size),
);
}
pub inline fn commandEncoderCopyTextureToTextureInternal(command_encoder: *gpu.CommandEncoder, source: *const gpu.ImageCopyTexture, destination: *const gpu.ImageCopyTexture, copy_size: *const gpu.Extent3D) void {
procs.commandEncoderCopyTextureToTextureInternal.?(
@ptrCast(c.WGPUCommandEncoder, command_encoder),
@ptrCast(*const c.WGPUImageCopyTexture, source),
@ptrCast(*const c.WGPUImageCopyTexture, destination),
@ptrCast(*const c.WGPUExtent3D, copy_size),
);
}
pub inline fn commandEncoderFinish(command_encoder: *gpu.CommandEncoder, descriptor: ?*const gpu.CommandBuffer.Descriptor) *gpu.CommandBuffer {
return @ptrCast(*gpu.CommandBuffer, procs.commandEncoderFinish.?(
@ptrCast(c.WGPUCommandEncoder, command_encoder),
@ptrCast(?*const c.WGPUCommandBufferDescriptor, descriptor),
));
}
pub inline fn commandEncoderInjectValidationError(command_encoder: *gpu.CommandEncoder, message: [*:0]const u8) void {
procs.commandEncoderInjectValidationError.?(
@ptrCast(c.WGPUCommandEncoder, command_encoder),
message,
);
}
pub inline fn commandEncoderInsertDebugMarker(command_encoder: *gpu.CommandEncoder, marker_label: [*:0]const u8) void {
procs.commandEncoderInsertDebugMarker.?(
@ptrCast(c.WGPUCommandEncoder, command_encoder),
marker_label,
);
}
pub inline fn commandEncoderPopDebugGroup(command_encoder: *gpu.CommandEncoder) void {
procs.commandEncoderPopDebugGroup.?(@ptrCast(c.WGPUCommandEncoder, command_encoder));
}
pub inline fn commandEncoderPushDebugGroup(command_encoder: *gpu.CommandEncoder, group_label: [*:0]const u8) void {
procs.commandEncoderPushDebugGroup.?(
@ptrCast(c.WGPUCommandEncoder, command_encoder),
group_label,
);
}
pub inline fn commandEncoderResolveQuerySet(command_encoder: *gpu.CommandEncoder, query_set: *gpu.QuerySet, first_query: u32, query_count: u32, destination: *gpu.Buffer, destination_offset: u64) void {
procs.commandEncoderResolveQuerySet.?(
@ptrCast(c.WGPUCommandEncoder, command_encoder),
@ptrCast(c.WGPUQuerySet, query_set),
first_query,
query_count,
@ptrCast(c.WGPUBuffer, destination),
destination_offset,
);
}
pub inline fn commandEncoderSetLabel(command_encoder: *gpu.CommandEncoder, label: [*:0]const u8) void {
procs.commandEncoderSetLabel.?(@ptrCast(c.WGPUCommandEncoder, command_encoder), label);
}
pub inline fn commandEncoderWriteBuffer(command_encoder: *gpu.CommandEncoder, buffer: *gpu.Buffer, buffer_offset: u64, data: [*]const u8, size: u64) void {
procs.commandEncoderWriteBuffer.?(
@ptrCast(c.WGPUCommandEncoder, command_encoder),
@ptrCast(c.WGPUBuffer, buffer),
buffer_offset,
data,
size,
);
}
pub inline fn commandEncoderWriteTimestamp(command_encoder: *gpu.CommandEncoder, query_set: *gpu.QuerySet, query_index: u32) void {
procs.commandEncoderWriteTimestamp.?(
@ptrCast(c.WGPUCommandEncoder, command_encoder),
@ptrCast(c.WGPUQuerySet, query_set),
query_index,
);
}
pub inline fn commandEncoderReference(command_encoder: *gpu.CommandEncoder) void {
procs.commandEncoderReference.?(@ptrCast(c.WGPUCommandEncoder, command_encoder));
}
pub inline fn commandEncoderRelease(command_encoder: *gpu.CommandEncoder) void {
procs.commandEncoderRelease.?(@ptrCast(c.WGPUCommandEncoder, command_encoder));
}
pub inline fn computePassEncoderDispatchWorkgroups(compute_pass_encoder: *gpu.ComputePassEncoder, workgroup_count_x: u32, workgroup_count_y: u32, workgroup_count_z: u32) void {
procs.computePassEncoderDispatchWorkgroups.?(
@ptrCast(c.WGPUComputePassEncoder, compute_pass_encoder),
workgroup_count_x,
workgroup_count_y,
workgroup_count_z,
);
}
pub inline fn computePassEncoderDispatchWorkgroupsIndirect(compute_pass_encoder: *gpu.ComputePassEncoder, indirect_buffer: *gpu.Buffer, indirect_offset: u64) void {
procs.computePassEncoderDispatchWorkgroupsIndirect.?(
@ptrCast(c.WGPUComputePassEncoder, compute_pass_encoder),
@ptrCast(c.WGPUBuffer, indirect_buffer),
indirect_offset,
);
}
pub inline fn computePassEncoderEnd(compute_pass_encoder: *gpu.ComputePassEncoder) void {
procs.computePassEncoderEnd.?(@ptrCast(c.WGPUComputePassEncoder, compute_pass_encoder));
}
pub inline fn computePassEncoderInsertDebugMarker(compute_pass_encoder: *gpu.ComputePassEncoder, marker_label: [*:0]const u8) void {
procs.computePassEncoderInsertDebugMarker.?(
@ptrCast(c.WGPUComputePassEncoder, compute_pass_encoder),
marker_label,
);
}
pub inline fn computePassEncoderPopDebugGroup(compute_pass_encoder: *gpu.ComputePassEncoder) void {
procs.computePassEncoderPopDebugGroup.?(@ptrCast(c.WGPUComputePassEncoder, compute_pass_encoder));
}
pub inline fn computePassEncoderPushDebugGroup(compute_pass_encoder: *gpu.ComputePassEncoder, group_label: [*:0]const u8) void {
procs.computePassEncoderPushDebugGroup.?(
@ptrCast(c.WGPUComputePassEncoder, compute_pass_encoder),
group_label,
);
}
pub inline fn computePassEncoderSetBindGroup(compute_pass_encoder: *gpu.ComputePassEncoder, group_index: u32, group: *gpu.BindGroup, dynamic_offset_count: u32, dynamic_offsets: ?[*]const u32) void {
procs.computePassEncoderSetBindGroup.?(
@ptrCast(c.WGPUComputePassEncoder, compute_pass_encoder),
group_index,
@ptrCast(c.WGPUBindGroup, group),
dynamic_offset_count,
dynamic_offsets,
);
}
pub inline fn computePassEncoderSetLabel(compute_pass_encoder: *gpu.ComputePassEncoder, label: [*:0]const u8) void {
procs.computePassEncoderSetLabel.?(@ptrCast(c.WGPUComputePassEncoder, compute_pass_encoder), label);
}
pub inline fn computePassEncoderSetPipeline(compute_pass_encoder: *gpu.ComputePassEncoder, pipeline: *gpu.ComputePipeline) void {
procs.computePassEncoderSetPipeline.?(
@ptrCast(c.WGPUComputePassEncoder, compute_pass_encoder),
@ptrCast(c.WGPUComputePipeline, pipeline),
);
}
pub inline fn computePassEncoderWriteTimestamp(compute_pass_encoder: *gpu.ComputePassEncoder, query_set: *gpu.QuerySet, query_index: u32) void {
procs.computePassEncoderWriteTimestamp.?(
@ptrCast(c.WGPUComputePassEncoder, compute_pass_encoder),
@ptrCast(c.WGPUQuerySet, query_set),
query_index,
);
}
pub inline fn computePassEncoderReference(compute_pass_encoder: *gpu.ComputePassEncoder) void {
procs.computePassEncoderReference.?(@ptrCast(c.WGPUComputePassEncoder, compute_pass_encoder));
}
pub inline fn computePassEncoderRelease(compute_pass_encoder: *gpu.ComputePassEncoder) void {
procs.computePassEncoderRelease.?(@ptrCast(c.WGPUComputePassEncoder, compute_pass_encoder));
}
pub inline fn computePipelineGetBindGroupLayout(compute_pipeline: *gpu.ComputePipeline, group_index: u32) *gpu.BindGroupLayout {
return @ptrCast(*gpu.BindGroupLayout, procs.computePipelineGetBindGroupLayout.?(
@ptrCast(c.WGPUComputePipeline, compute_pipeline),
group_index,
));
}
pub inline fn computePipelineSetLabel(compute_pipeline: *gpu.ComputePipeline, label: [*:0]const u8) void {
procs.computePipelineSetLabel.?(@ptrCast(c.WGPUComputePipeline, compute_pipeline), label);
}
pub inline fn computePipelineReference(compute_pipeline: *gpu.ComputePipeline) void {
procs.computePipelineReference.?(@ptrCast(c.WGPUComputePipeline, compute_pipeline));
}
pub inline fn computePipelineRelease(compute_pipeline: *gpu.ComputePipeline) void {
procs.computePipelineRelease.?(@ptrCast(c.WGPUComputePipeline, compute_pipeline));
}
pub inline fn deviceCreateBindGroup(device: *gpu.Device, descriptor: *const gpu.BindGroup.Descriptor) *gpu.BindGroup {
return @ptrCast(*gpu.BindGroup, procs.deviceCreateBindGroup.?(
@ptrCast(c.WGPUDevice, device),
@ptrCast(*const c.WGPUBindGroupDescriptor, descriptor),
));
}
pub inline fn deviceCreateBindGroupLayout(device: *gpu.Device, descriptor: *const gpu.BindGroupLayout.Descriptor) *gpu.BindGroupLayout {
return @ptrCast(*gpu.BindGroupLayout, procs.deviceCreateBindGroupLayout.?(
@ptrCast(c.WGPUDevice, device),
@ptrCast(*const c.WGPUBindGroupLayoutDescriptor, descriptor),
));
}
pub inline fn deviceCreateBuffer(device: *gpu.Device, descriptor: *const gpu.Buffer.Descriptor) *gpu.Buffer {
return @ptrCast(*gpu.Buffer, procs.deviceCreateBuffer.?(
@ptrCast(c.WGPUDevice, device),
@ptrCast(*const c.WGPUBufferDescriptor, descriptor),
));
}
pub inline fn deviceCreateCommandEncoder(device: *gpu.Device, descriptor: ?*const gpu.CommandEncoder.Descriptor) *gpu.CommandEncoder {
return @ptrCast(*gpu.CommandEncoder, procs.deviceCreateCommandEncoder.?(
@ptrCast(c.WGPUDevice, device),
@ptrCast(?*const c.WGPUCommandEncoderDescriptor, descriptor),
));
}
pub inline fn deviceCreateComputePipeline(device: *gpu.Device, descriptor: *const gpu.ComputePipeline.Descriptor) *gpu.ComputePipeline {
return @ptrCast(*gpu.ComputePipeline, procs.deviceCreateComputePipeline.?(
@ptrCast(c.WGPUDevice, device),
@ptrCast(*const c.WGPUComputePipelineDescriptor, descriptor),
));
}
pub inline fn deviceCreateComputePipelineAsync(device: *gpu.Device, descriptor: *const gpu.ComputePipeline.Descriptor, callback: gpu.CreateComputePipelineAsyncCallback, userdata: ?*anyopaque) void {
procs.deviceCreateComputePipelineAsync.?(
@ptrCast(c.WGPUDevice, device),
@ptrCast(*const c.WGPUComputePipelineDescriptor, descriptor),
@ptrCast(c.WGPUCreateComputePipelineAsyncCallback, callback),
userdata,
);
}
pub inline fn deviceCreateErrorBuffer(device: *gpu.Device) *gpu.Buffer {
return @ptrCast(*gpu.Buffer, procs.deviceCreateErrorBuffer.?(@ptrCast(c.WGPUDevice, device)));
}
pub inline fn deviceCreateErrorExternalTexture(device: *gpu.Device) *gpu.ExternalTexture {
return @ptrCast(*gpu.ExternalTexture, procs.deviceCreateErrorExternalTexture.?(@ptrCast(c.WGPUDevice, device)));
}
pub inline fn deviceCreateErrorTexture(device: *gpu.Device, descriptor: *const gpu.Texture.Descriptor) *gpu.Texture {
return @ptrCast(*gpu.Texture, procs.deviceCreateErrorTexture.?(
@ptrCast(c.WGPUDevice, device),
@ptrCast(*const c.WGPUTextureDescriptor, descriptor),
));
}
pub inline fn deviceCreateExternalTexture(device: *gpu.Device, external_texture_descriptor: *const gpu.ExternalTexture.Descriptor) *gpu.ExternalTexture {
return @ptrCast(*gpu.ExternalTexture, procs.deviceCreateExternalTexture.?(
@ptrCast(c.WGPUDevice, device),
@ptrCast(*const c.WGPUExternalTextureDescriptor, external_texture_descriptor),
));
}
pub inline fn deviceCreatePipelineLayout(device: *gpu.Device, pipeline_layout_descriptor: *const gpu.PipelineLayout.Descriptor) *gpu.PipelineLayout {
return @ptrCast(*gpu.PipelineLayout, procs.deviceCreatePipelineLayout.?(
@ptrCast(c.WGPUDevice, device),
@ptrCast(*const c.WGPUPipelineLayoutDescriptor, pipeline_layout_descriptor),
));
}
pub inline fn deviceCreateQuerySet(device: *gpu.Device, descriptor: *const gpu.QuerySet.Descriptor) *gpu.QuerySet {
return @ptrCast(*gpu.QuerySet, procs.deviceCreateQuerySet.?(
@ptrCast(c.WGPUDevice, device),
@ptrCast(*const c.WGPUQuerySetDescriptor, descriptor),
));
}
pub inline fn deviceCreateRenderBundleEncoder(device: *gpu.Device, descriptor: *const gpu.RenderBundleEncoder.Descriptor) *gpu.RenderBundleEncoder {
return @ptrCast(*gpu.RenderBundleEncoder, procs.deviceCreateRenderBundleEncoder.?(
@ptrCast(c.WGPUDevice, device),
@ptrCast(*const c.WGPURenderBundleEncoderDescriptor, descriptor),
));
}
pub inline fn deviceCreateRenderPipeline(device: *gpu.Device, descriptor: *const gpu.RenderPipeline.Descriptor) *gpu.RenderPipeline {
return @ptrCast(*gpu.RenderPipeline, procs.deviceCreateRenderPipeline.?(
@ptrCast(c.WGPUDevice, device),
@ptrCast(*const c.WGPURenderPipelineDescriptor, descriptor),
));
}
pub inline fn deviceCreateRenderPipelineAsync(device: *gpu.Device, descriptor: *const gpu.RenderPipeline.Descriptor, callback: gpu.CreateRenderPipelineAsyncCallback, userdata: ?*anyopaque) void {
procs.deviceCreateRenderPipelineAsync.?(
@ptrCast(c.WGPUDevice, device),
@ptrCast(*const c.WGPURenderPipelineDescriptor, descriptor),
@ptrCast(c.WGPUCreateRenderPipelineAsyncCallback, callback),
userdata,
);
}
// TODO(self-hosted): this cannot be marked as inline for some reason.
// https://github.com/ziglang/zig/issues/12545
pub fn deviceCreateSampler(device: *gpu.Device, descriptor: ?*const gpu.Sampler.Descriptor) *gpu.Sampler {
return @ptrCast(*gpu.Sampler, procs.deviceCreateSampler.?(
@ptrCast(c.WGPUDevice, device),
@ptrCast(?*const c.WGPUSamplerDescriptor, descriptor),
));
}
pub inline fn deviceCreateShaderModule(device: *gpu.Device, descriptor: *const gpu.ShaderModule.Descriptor) *gpu.ShaderModule {
return @ptrCast(*gpu.ShaderModule, procs.deviceCreateShaderModule.?(
@ptrCast(c.WGPUDevice, device),
@ptrCast(*const c.WGPUShaderModuleDescriptor, descriptor),
));
}
pub inline fn deviceCreateSwapChain(device: *gpu.Device, surface: ?*gpu.Surface, descriptor: *const gpu.SwapChain.Descriptor) *gpu.SwapChain {
return @ptrCast(*gpu.SwapChain, procs.deviceCreateSwapChain.?(
@ptrCast(c.WGPUDevice, device),
@ptrCast(c.WGPUSurface, surface),
@ptrCast(*const c.WGPUSwapChainDescriptor, descriptor),
));
}
pub inline fn deviceCreateTexture(device: *gpu.Device, descriptor: *const gpu.Texture.Descriptor) *gpu.Texture {
return @ptrCast(*gpu.Texture, procs.deviceCreateTexture.?(
@ptrCast(c.WGPUDevice, device),
@ptrCast(*const c.WGPUTextureDescriptor, descriptor),
));
}
pub inline fn deviceDestroy(device: *gpu.Device) void {
procs.deviceDestroy.?(@ptrCast(c.WGPUDevice, device));
}
pub inline fn deviceEnumerateFeatures(device: *gpu.Device, features: ?[*]gpu.FeatureName) usize {
return procs.deviceEnumerateFeatures.?(
@ptrCast(c.WGPUDevice, device),
@ptrCast(?[*]c.WGPUFeatureName, features),
);
}
pub inline fn deviceGetLimits(device: *gpu.Device, limits: *gpu.SupportedLimits) bool {
return procs.deviceGetLimits.?(
@ptrCast(c.WGPUDevice, device),
@ptrCast(*c.WGPUSupportedLimits, limits),
);
}
pub inline fn deviceGetQueue(device: *gpu.Device) *gpu.Queue {
return @ptrCast(*gpu.Queue, procs.deviceGetQueue.?(@ptrCast(c.WGPUDevice, device)));
}
pub inline fn deviceHasFeature(device: *gpu.Device, feature: gpu.FeatureName) bool {
return procs.deviceHasFeature.?(
@ptrCast(c.WGPUDevice, device),
@enumToInt(feature),
);
}
pub inline fn deviceInjectError(device: *gpu.Device, typ: gpu.ErrorType, message: [*:0]const u8) void {
procs.deviceInjectError.?(
@ptrCast(c.WGPUDevice, device),
@enumToInt(typ),
message,
);
}
pub inline fn deviceLoseForTesting(device: *gpu.Device) void {
procs.deviceLoseForTesting.?(@ptrCast(c.WGPUDevice, device));
}
pub inline fn devicePopErrorScope(device: *gpu.Device, callback: gpu.ErrorCallback, userdata: ?*anyopaque) bool {
return procs.devicePopErrorScope.?(
@ptrCast(c.WGPUDevice, device),
@ptrCast(c.WGPUErrorCallback, callback),
userdata,
);
}
pub inline fn devicePushErrorScope(device: *gpu.Device, filter: gpu.ErrorFilter) void {
procs.devicePushErrorScope.?(
@ptrCast(c.WGPUDevice, device),
@enumToInt(filter),
);
}
pub inline fn deviceSetDeviceLostCallback(device: *gpu.Device, callback: ?gpu.Device.LostCallback, userdata: ?*anyopaque) void {
procs.deviceSetDeviceLostCallback.?(
@ptrCast(c.WGPUDevice, device),
@ptrCast(c.WGPUDeviceLostCallback, callback),
userdata,
);
}
pub inline fn deviceSetLabel(device: *gpu.Device, label: [*:0]const u8) void {
procs.deviceSetLabel.?(@ptrCast(c.WGPUDevice, device), label);
}
pub inline fn deviceSetLoggingCallback(device: *gpu.Device, callback: ?gpu.LoggingCallback, userdata: ?*anyopaque) void {
procs.deviceSetLoggingCallback.?(
@ptrCast(c.WGPUDevice, device),
@ptrCast(c.WGPULoggingCallback, callback),
userdata,
);
}
pub inline fn deviceSetUncapturedErrorCallback(device: *gpu.Device, callback: ?gpu.ErrorCallback, userdata: ?*anyopaque) void {
procs.deviceSetUncapturedErrorCallback.?(
@ptrCast(c.WGPUDevice, device),
@ptrCast(c.WGPUErrorCallback, callback),
userdata,
);
}
pub inline fn deviceTick(device: *gpu.Device) void {
procs.deviceTick.?(@ptrCast(c.WGPUDevice, device));
}
pub inline fn deviceReference(device: *gpu.Device) void {
procs.deviceReference.?(@ptrCast(c.WGPUDevice, device));
}
pub inline fn deviceRelease(device: *gpu.Device) void {
procs.deviceRelease.?(@ptrCast(c.WGPUDevice, device));
}
pub inline fn externalTextureDestroy(external_texture: *gpu.ExternalTexture) void {
procs.externalTextureDestroy.?(@ptrCast(c.WGPUExternalTexture, external_texture));
}
pub inline fn externalTextureSetLabel(external_texture: *gpu.ExternalTexture, label: [*:0]const u8) void {
procs.externalTextureSetLabel.?(@ptrCast(c.WGPUExternalTexture, external_texture), label);
}
pub inline fn externalTextureReference(external_texture: *gpu.ExternalTexture) void {
procs.externalTextureReference.?(@ptrCast(c.WGPUExternalTexture, external_texture));
}
pub inline fn externalTextureRelease(external_texture: *gpu.ExternalTexture) void {
procs.externalTextureRelease.?(@ptrCast(c.WGPUExternalTexture, external_texture));
}
pub inline fn instanceCreateSurface(instance: *gpu.Instance, descriptor: *const gpu.Surface.Descriptor) *gpu.Surface {
return @ptrCast(*gpu.Surface, procs.instanceCreateSurface.?(
@ptrCast(c.WGPUInstance, instance),
@ptrCast(*const c.WGPUSurfaceDescriptor, descriptor),
));
}
pub inline fn instanceRequestAdapter(instance: *gpu.Instance, options: ?*const gpu.RequestAdapterOptions, callback: gpu.RequestAdapterCallback, userdata: ?*anyopaque) void {
procs.instanceRequestAdapter.?(
@ptrCast(c.WGPUInstance, instance),
@ptrCast(?*const c.WGPURequestAdapterOptions, options),
@ptrCast(c.WGPURequestAdapterCallback, callback),
userdata,
);
}
pub inline fn instanceReference(instance: *gpu.Instance) void {
procs.instanceReference.?(@ptrCast(c.WGPUInstance, instance));
}
pub inline fn instanceRelease(instance: *gpu.Instance) void {
procs.instanceRelease.?(@ptrCast(c.WGPUInstance, instance));
}
pub inline fn pipelineLayoutSetLabel(pipeline_layout: *gpu.PipelineLayout, label: [*:0]const u8) void {
procs.pipelineLayoutSetLabel.?(@ptrCast(c.WGPUPipelineLayout, pipeline_layout), label);
}
pub inline fn pipelineLayoutReference(pipeline_layout: *gpu.PipelineLayout) void {
procs.pipelineLayoutReference.?(@ptrCast(c.WGPUPipelineLayout, pipeline_layout));
}
pub inline fn pipelineLayoutRelease(pipeline_layout: *gpu.PipelineLayout) void {
procs.pipelineLayoutRelease.?(@ptrCast(c.WGPUPipelineLayout, pipeline_layout));
}
pub inline fn querySetDestroy(query_set: *gpu.QuerySet) void {
procs.querySetDestroy.?(@ptrCast(c.WGPUQuerySet, query_set));
}
pub inline fn querySetGetCount(query_set: *gpu.QuerySet) u32 {
return procs.querySetGetCount.?(@ptrCast(c.WGPUQuerySet, query_set));
}
pub inline fn querySetGetType(query_set: *gpu.QuerySet) gpu.QueryType {
return @intToEnum(gpu.QueryType, procs.querySetGetType.?(@ptrCast(c.WGPUQuerySet, query_set)));
}
pub inline fn querySetSetLabel(query_set: *gpu.QuerySet, label: [*:0]const u8) void {
procs.querySetSetLabel.?(@ptrCast(c.WGPUQuerySet, query_set), label);
}
pub inline fn querySetReference(query_set: *gpu.QuerySet) void {
procs.querySetReference.?(@ptrCast(c.WGPUQuerySet, query_set));
}
pub inline fn querySetRelease(query_set: *gpu.QuerySet) void {
procs.querySetRelease.?(@ptrCast(c.WGPUQuerySet, query_set));
}
pub inline fn queueCopyTextureForBrowser(queue: *gpu.Queue, source: *const gpu.ImageCopyTexture, destination: *const gpu.ImageCopyTexture, copy_size: *const gpu.Extent3D, options: *const gpu.CopyTextureForBrowserOptions) void {
procs.queueCopyTextureForBrowser.?(
@ptrCast(c.WGPUQueue, queue),
@ptrCast(*const c.WGPUImageCopyTexture, source),
@ptrCast(*const c.WGPUImageCopyTexture, destination),
@ptrCast(*const c.WGPUExtent3D, copy_size),
@ptrCast(*const c.WGPUCopyTextureForBrowserOptions, options),
);
}
pub inline fn queueOnSubmittedWorkDone(queue: *gpu.Queue, signal_value: u64, callback: gpu.Queue.WorkDoneCallback, userdata: ?*anyopaque) void {
procs.queueOnSubmittedWorkDone.?(
@ptrCast(c.WGPUQueue, queue),
signal_value,
@ptrCast(c.WGPUQueueWorkDoneCallback, callback),
userdata,
);
}
pub inline fn queueSetLabel(queue: *gpu.Queue, label: [*:0]const u8) void {
procs.queueSetLabel.?(@ptrCast(c.WGPUQueue, queue), label);
}
pub inline fn queueSubmit(queue: *gpu.Queue, command_count: u32, commands: [*]*const gpu.CommandBuffer) void {
procs.queueSubmit.?(
@ptrCast(c.WGPUQueue, queue),
command_count,
@ptrCast([*]const c.WGPUCommandBuffer, commands),
);
}
pub inline fn queueWriteBuffer(queue: *gpu.Queue, buffer: *gpu.Buffer, buffer_offset: u64, data: *const anyopaque, size: usize) void {
procs.queueWriteBuffer.?(
@ptrCast(c.WGPUQueue, queue),
@ptrCast(c.WGPUBuffer, buffer),
buffer_offset,
data,
size,
);
}
pub inline fn queueWriteTexture(queue: *gpu.Queue, destination: *const gpu.ImageCopyTexture, data: *const anyopaque, data_size: usize, data_layout: *const gpu.Texture.DataLayout, write_size: *const gpu.Extent3D) void {
procs.queueWriteTexture.?(
@ptrCast(c.WGPUQueue, queue),
@ptrCast(*const c.WGPUImageCopyTexture, destination),
data,
data_size,
@ptrCast(*const c.WGPUTextureDataLayout, data_layout),
@ptrCast(*const c.WGPUExtent3D, write_size),
);
}
pub inline fn queueReference(queue: *gpu.Queue) void {
procs.queueReference.?(@ptrCast(c.WGPUQueue, queue));
}
pub inline fn queueRelease(queue: *gpu.Queue) void {
procs.queueRelease.?(@ptrCast(c.WGPUQueue, queue));
}
pub inline fn renderBundleReference(render_bundle: *gpu.RenderBundle) void {
procs.renderBundleReference.?(@ptrCast(c.WGPURenderBundle, render_bundle));
}
pub inline fn renderBundleRelease(render_bundle: *gpu.RenderBundle) void {
procs.renderBundleRelease.?(@ptrCast(c.WGPURenderBundle, render_bundle));
}
pub inline fn renderBundleEncoderDraw(render_bundle_encoder: *gpu.RenderBundleEncoder, vertex_count: u32, instance_count: u32, first_vertex: u32, first_instance: u32) void {
procs.renderBundleEncoderDraw.?(@ptrCast(c.WGPURenderBundleEncoder, render_bundle_encoder), vertex_count, instance_count, first_vertex, first_instance);
}
pub inline fn renderBundleEncoderDrawIndexed(render_bundle_encoder: *gpu.RenderBundleEncoder, index_count: u32, instance_count: u32, first_index: u32, base_vertex: i32, first_instance: u32) void {
procs.renderBundleEncoderDrawIndexed.?(
@ptrCast(c.WGPURenderBundleEncoder, render_bundle_encoder),
index_count,
instance_count,
first_index,
base_vertex,
first_instance,
);
}
pub inline fn renderBundleEncoderDrawIndexedIndirect(render_bundle_encoder: *gpu.RenderBundleEncoder, indirect_buffer: *gpu.Buffer, indirect_offset: u64) void {
procs.renderBundleEncoderDrawIndexedIndirect.?(
@ptrCast(c.WGPURenderBundleEncoder, render_bundle_encoder),
@ptrCast(c.WGPUBuffer, indirect_buffer),
indirect_offset,
);
}
pub inline fn renderBundleEncoderDrawIndirect(render_bundle_encoder: *gpu.RenderBundleEncoder, indirect_buffer: *gpu.Buffer, indirect_offset: u64) void {
procs.renderBundleEncoderDrawIndirect.?(
@ptrCast(c.WGPURenderBundleEncoder, render_bundle_encoder),
@ptrCast(c.WGPUBuffer, indirect_buffer),
indirect_offset,
);
}
pub inline fn renderBundleEncoderFinish(render_bundle_encoder: *gpu.RenderBundleEncoder, descriptor: ?*const gpu.RenderBundle.Descriptor) *gpu.RenderBundle {
return @ptrCast(*gpu.RenderBundle, procs.renderBundleEncoderFinish.?(
@ptrCast(c.WGPURenderBundleEncoder, render_bundle_encoder),
@ptrCast(?*const c.WGPURenderBundleDescriptor, descriptor),
));
}
pub inline fn renderBundleEncoderInsertDebugMarker(render_bundle_encoder: *gpu.RenderBundleEncoder, marker_label: [*:0]const u8) void {
procs.renderBundleEncoderInsertDebugMarker.?(
@ptrCast(c.WGPURenderBundleEncoder, render_bundle_encoder),
marker_label,
);
}
pub inline fn renderBundleEncoderPopDebugGroup(render_bundle_encoder: *gpu.RenderBundleEncoder) void {
procs.renderBundleEncoderPopDebugGroup.?(@ptrCast(c.WGPURenderBundleEncoder, render_bundle_encoder));
}
pub inline fn renderBundleEncoderPushDebugGroup(render_bundle_encoder: *gpu.RenderBundleEncoder, group_label: [*:0]const u8) void {
procs.renderBundleEncoderPushDebugGroup.?(@ptrCast(c.WGPURenderBundleEncoder, render_bundle_encoder), group_label);
}
pub inline fn renderBundleEncoderSetBindGroup(render_bundle_encoder: *gpu.RenderBundleEncoder, group_index: u32, group: *gpu.BindGroup, dynamic_offset_count: u32, dynamic_offsets: ?[*]const u32) void {
procs.renderBundleEncoderSetBindGroup.?(
@ptrCast(c.WGPURenderBundleEncoder, render_bundle_encoder),
group_index,
@ptrCast(c.WGPUBindGroup, group),
dynamic_offset_count,
dynamic_offsets,
);
}
pub inline fn renderBundleEncoderSetIndexBuffer(render_bundle_encoder: *gpu.RenderBundleEncoder, buffer: *gpu.Buffer, format: gpu.IndexFormat, offset: u64, size: u64) void {
procs.renderBundleEncoderSetIndexBuffer.?(
@ptrCast(c.WGPURenderBundleEncoder, render_bundle_encoder),
@ptrCast(c.WGPUBuffer, buffer),
@enumToInt(format),
offset,
size,
);
}
pub inline fn renderBundleEncoderSetLabel(render_bundle_encoder: *gpu.RenderBundleEncoder, label: [*:0]const u8) void {
procs.renderBundleEncoderSetLabel.?(@ptrCast(c.WGPURenderBundleEncoder, render_bundle_encoder), label);
}
pub inline fn renderBundleEncoderSetPipeline(render_bundle_encoder: *gpu.RenderBundleEncoder, pipeline: *gpu.RenderPipeline) void {
procs.renderBundleEncoderSetPipeline.?(
@ptrCast(c.WGPURenderBundleEncoder, render_bundle_encoder),
@ptrCast(c.WGPURenderPipeline, pipeline),
);
}
pub inline fn renderBundleEncoderSetVertexBuffer(render_bundle_encoder: *gpu.RenderBundleEncoder, slot: u32, buffer: *gpu.Buffer, offset: u64, size: u64) void {
procs.renderBundleEncoderSetVertexBuffer.?(
@ptrCast(c.WGPURenderBundleEncoder, render_bundle_encoder),
slot,
@ptrCast(c.WGPUBuffer, buffer),
offset,
size,
);
}
pub inline fn renderBundleEncoderReference(render_bundle_encoder: *gpu.RenderBundleEncoder) void {
procs.renderBundleEncoderReference.?(@ptrCast(c.WGPURenderBundleEncoder, render_bundle_encoder));
}
pub inline fn renderBundleEncoderRelease(render_bundle_encoder: *gpu.RenderBundleEncoder) void {
procs.renderBundleEncoderRelease.?(@ptrCast(c.WGPURenderBundleEncoder, render_bundle_encoder));
}
pub inline fn renderPassEncoderBeginOcclusionQuery(render_pass_encoder: *gpu.RenderPassEncoder, query_index: u32) void {
procs.renderPassEncoderBeginOcclusionQuery.?(
@ptrCast(c.WGPURenderPassEncoder, render_pass_encoder),
query_index,
);
}
pub inline fn renderPassEncoderDraw(render_pass_encoder: *gpu.RenderPassEncoder, vertex_count: u32, instance_count: u32, first_vertex: u32, first_instance: u32) void {
procs.renderPassEncoderDraw.?(
@ptrCast(c.WGPURenderPassEncoder, render_pass_encoder),
vertex_count,
instance_count,
first_vertex,
first_instance,
);
}
pub inline fn renderPassEncoderDrawIndexed(render_pass_encoder: *gpu.RenderPassEncoder, index_count: u32, instance_count: u32, first_index: u32, base_vertex: i32, first_instance: u32) void {
procs.renderPassEncoderDrawIndexed.?(
@ptrCast(c.WGPURenderPassEncoder, render_pass_encoder),
index_count,
instance_count,
first_index,
base_vertex,
first_instance,
);
}
pub inline fn renderPassEncoderDrawIndexedIndirect(render_pass_encoder: *gpu.RenderPassEncoder, indirect_buffer: *gpu.Buffer, indirect_offset: u64) void {
procs.renderPassEncoderDrawIndexedIndirect.?(
@ptrCast(c.WGPURenderPassEncoder, render_pass_encoder),
@ptrCast(c.WGPUBuffer, indirect_buffer),
indirect_offset,
);
}
pub inline fn renderPassEncoderDrawIndirect(render_pass_encoder: *gpu.RenderPassEncoder, indirect_buffer: *gpu.Buffer, indirect_offset: u64) void {
procs.renderPassEncoderDrawIndirect.?(
@ptrCast(c.WGPURenderPassEncoder, render_pass_encoder),
@ptrCast(c.WGPUBuffer, indirect_buffer),
indirect_offset,
);
}
pub inline fn renderPassEncoderEnd(render_pass_encoder: *gpu.RenderPassEncoder) void {
procs.renderPassEncoderEnd.?(@ptrCast(c.WGPURenderPassEncoder, render_pass_encoder));
}
pub inline fn renderPassEncoderEndOcclusionQuery(render_pass_encoder: *gpu.RenderPassEncoder) void {
procs.renderPassEncoderEndOcclusionQuery.?(@ptrCast(c.WGPURenderPassEncoder, render_pass_encoder));
}
pub inline fn renderPassEncoderExecuteBundles(render_pass_encoder: *gpu.RenderPassEncoder, bundles_count: u32, bundles: [*]const *const gpu.RenderBundle) void {
procs.renderPassEncoderExecuteBundles.?(
@ptrCast(c.WGPURenderPassEncoder, render_pass_encoder),
bundles_count,
@ptrCast([*]const c.WGPURenderBundle, bundles),
);
}
pub inline fn renderPassEncoderInsertDebugMarker(render_pass_encoder: *gpu.RenderPassEncoder, marker_label: [*:0]const u8) void {
procs.renderPassEncoderInsertDebugMarker.?(@ptrCast(c.WGPURenderPassEncoder, render_pass_encoder), marker_label);
}
pub inline fn renderPassEncoderPopDebugGroup(render_pass_encoder: *gpu.RenderPassEncoder) void {
procs.renderPassEncoderPopDebugGroup.?(@ptrCast(c.WGPURenderPassEncoder, render_pass_encoder));
}
pub inline fn renderPassEncoderPushDebugGroup(render_pass_encoder: *gpu.RenderPassEncoder, group_label: [*:0]const u8) void {
procs.renderPassEncoderPushDebugGroup.?(
@ptrCast(c.WGPURenderPassEncoder, render_pass_encoder),
group_label,
);
}
pub inline fn renderPassEncoderSetBindGroup(render_pass_encoder: *gpu.RenderPassEncoder, group_index: u32, group: *gpu.BindGroup, dynamic_offset_count: u32, dynamic_offsets: ?[*]const u32) void {
procs.renderPassEncoderSetBindGroup.?(
@ptrCast(c.WGPURenderPassEncoder, render_pass_encoder),
group_index,
@ptrCast(c.WGPUBindGroup, group),
dynamic_offset_count,
dynamic_offsets,
);
}
pub inline fn renderPassEncoderSetBlendConstant(render_pass_encoder: *gpu.RenderPassEncoder, color: *const gpu.Color) void {
procs.renderPassEncoderSetBlendConstant.?(
@ptrCast(c.WGPURenderPassEncoder, render_pass_encoder),
@ptrCast(*const c.WGPUColor, color),
);
}
pub inline fn renderPassEncoderSetIndexBuffer(render_pass_encoder: *gpu.RenderPassEncoder, buffer: *gpu.Buffer, format: gpu.IndexFormat, offset: u64, size: u64) void {
procs.renderPassEncoderSetIndexBuffer.?(
@ptrCast(c.WGPURenderPassEncoder, render_pass_encoder),
@ptrCast(c.WGPUBuffer, buffer),
@enumToInt(format),
offset,
size,
);
}
pub inline fn renderPassEncoderSetLabel(render_pass_encoder: *gpu.RenderPassEncoder, label: [*:0]const u8) void {
procs.renderPassEncoderSetLabel.?(@ptrCast(c.WGPURenderPassEncoder, render_pass_encoder), label);
}
pub inline fn renderPassEncoderSetPipeline(render_pass_encoder: *gpu.RenderPassEncoder, pipeline: *gpu.RenderPipeline) void {
procs.renderPassEncoderSetPipeline.?(
@ptrCast(c.WGPURenderPassEncoder, render_pass_encoder),
@ptrCast(c.WGPURenderPipeline, pipeline),
);
}
pub inline fn renderPassEncoderSetScissorRect(render_pass_encoder: *gpu.RenderPassEncoder, x: u32, y: u32, width: u32, height: u32) void {
procs.renderPassEncoderSetScissorRect.?(
@ptrCast(c.WGPURenderPassEncoder, render_pass_encoder),
x,
y,
width,
height,
);
}
pub inline fn renderPassEncoderSetStencilReference(render_pass_encoder: *gpu.RenderPassEncoder, reference: u32) void {
procs.renderPassEncoderSetStencilReference.?(
@ptrCast(c.WGPURenderPassEncoder, render_pass_encoder),
reference,
);
}
pub inline fn renderPassEncoderSetVertexBuffer(render_pass_encoder: *gpu.RenderPassEncoder, slot: u32, buffer: *gpu.Buffer, offset: u64, size: u64) void {
procs.renderPassEncoderSetVertexBuffer.?(
@ptrCast(c.WGPURenderPassEncoder, render_pass_encoder),
slot,
@ptrCast(c.WGPUBuffer, buffer),
offset,
size,
);
}
pub inline fn renderPassEncoderSetViewport(render_pass_encoder: *gpu.RenderPassEncoder, x: f32, y: f32, width: f32, height: f32, min_depth: f32, max_depth: f32) void {
procs.renderPassEncoderSetViewport.?(
@ptrCast(c.WGPURenderPassEncoder, render_pass_encoder),
x,
y,
width,
height,
min_depth,
max_depth,
);
}
pub inline fn renderPassEncoderWriteTimestamp(render_pass_encoder: *gpu.RenderPassEncoder, query_set: *gpu.QuerySet, query_index: u32) void {
procs.renderPassEncoderWriteTimestamp.?(
@ptrCast(c.WGPURenderPassEncoder, render_pass_encoder),
@ptrCast(c.WGPUQuerySet, query_set),
query_index,
);
}
pub inline fn renderPassEncoderReference(render_pass_encoder: *gpu.RenderPassEncoder) void {
procs.renderPassEncoderReference.?(@ptrCast(c.WGPURenderPassEncoder, render_pass_encoder));
}
pub inline fn renderPassEncoderRelease(render_pass_encoder: *gpu.RenderPassEncoder) void {
procs.renderPassEncoderRelease.?(@ptrCast(c.WGPURenderPassEncoder, render_pass_encoder));
}
pub inline fn renderPipelineGetBindGroupLayout(render_pipeline: *gpu.RenderPipeline, group_index: u32) *gpu.BindGroupLayout {
return @ptrCast(*gpu.BindGroupLayout, procs.renderPipelineGetBindGroupLayout.?(
@ptrCast(c.WGPURenderPipeline, render_pipeline),
group_index,
));
}
pub inline fn renderPipelineSetLabel(render_pipeline: *gpu.RenderPipeline, label: [*:0]const u8) void {
procs.renderPipelineSetLabel.?(@ptrCast(c.WGPURenderPipeline, render_pipeline), label);
}
pub inline fn renderPipelineReference(render_pipeline: *gpu.RenderPipeline) void {
procs.renderPipelineReference.?(@ptrCast(c.WGPURenderPipeline, render_pipeline));
}
pub inline fn renderPipelineRelease(render_pipeline: *gpu.RenderPipeline) void {
procs.renderPipelineRelease.?(@ptrCast(c.WGPURenderPipeline, render_pipeline));
}
pub inline fn samplerSetLabel(sampler: *gpu.Sampler, label: [*:0]const u8) void {
procs.samplerSetLabel.?(@ptrCast(c.WGPUSampler, sampler), label);
}
pub inline fn samplerReference(sampler: *gpu.Sampler) void {
procs.samplerReference.?(@ptrCast(c.WGPUSampler, sampler));
}
pub inline fn samplerRelease(sampler: *gpu.Sampler) void {
procs.samplerRelease.?(@ptrCast(c.WGPUSampler, sampler));
}
pub inline fn shaderModuleGetCompilationInfo(shader_module: *gpu.ShaderModule, callback: gpu.CompilationInfoCallback, userdata: ?*anyopaque) void {
procs.shaderModuleGetCompilationInfo.?(
@ptrCast(c.WGPUShaderModule, shader_module),
@ptrCast(c.WGPUCompilationInfoCallback, callback),
userdata,
);
}
pub inline fn shaderModuleSetLabel(shader_module: *gpu.ShaderModule, label: [*:0]const u8) void {
procs.shaderModuleSetLabel.?(@ptrCast(c.WGPUShaderModule, shader_module), label);
}
pub inline fn shaderModuleReference(shader_module: *gpu.ShaderModule) void {
procs.shaderModuleReference.?(@ptrCast(c.WGPUShaderModule, shader_module));
}
pub inline fn shaderModuleRelease(shader_module: *gpu.ShaderModule) void {
procs.shaderModuleRelease.?(@ptrCast(c.WGPUShaderModule, shader_module));
}
pub inline fn surfaceReference(surface: *gpu.Surface) void {
procs.surfaceReference.?(@ptrCast(c.WGPUSurface, surface));
}
pub inline fn surfaceRelease(surface: *gpu.Surface) void {
procs.surfaceRelease.?(@ptrCast(c.WGPUSurface, surface));
}
pub inline fn swapChainConfigure(swap_chain: *gpu.SwapChain, format: gpu.Texture.Format, allowed_usage: gpu.Texture.UsageFlags, width: u32, height: u32) void {
procs.swapChainConfigure.?(
@ptrCast(c.WGPUSwapChain, swap_chain),
@enumToInt(format),
@bitCast(c.WGPUTextureUsageFlags, allowed_usage),
width,
height,
);
}
pub inline fn swapChainGetCurrentTextureView(swap_chain: *gpu.SwapChain) *gpu.TextureView {
return @ptrCast(*gpu.TextureView, procs.swapChainGetCurrentTextureView.?(@ptrCast(c.WGPUSwapChain, swap_chain)));
}
pub inline fn swapChainPresent(swap_chain: *gpu.SwapChain) void {
procs.swapChainPresent.?(@ptrCast(c.WGPUSwapChain, swap_chain));
}
pub inline fn swapChainReference(swap_chain: *gpu.SwapChain) void {
procs.swapChainReference.?(@ptrCast(c.WGPUSwapChain, swap_chain));
}
pub inline fn swapChainRelease(swap_chain: *gpu.SwapChain) void {
procs.swapChainRelease.?(@ptrCast(c.WGPUSwapChain, swap_chain));
}
pub inline fn textureCreateView(texture: *gpu.Texture, descriptor: ?*const gpu.TextureView.Descriptor) *gpu.TextureView {
return @ptrCast(*gpu.TextureView, procs.textureCreateView.?(
@ptrCast(c.WGPUTexture, texture),
@ptrCast(?*const c.WGPUTextureViewDescriptor, descriptor),
));
}
pub inline fn textureDestroy(texture: *gpu.Texture) void {
procs.textureDestroy.?(@ptrCast(c.WGPUTexture, texture));
}
pub inline fn textureGetDepthOrArrayLayers(texture: *gpu.Texture) u32 {
return procs.textureGetDepthOrArrayLayers.?(@ptrCast(c.WGPUTexture, texture));
}
pub inline fn textureGetDimension(texture: *gpu.Texture) gpu.Texture.Dimension {
return @intToEnum(gpu.Texture.Dimension, procs.textureGetDimension.?(@ptrCast(c.WGPUTexture, texture)));
}
pub inline fn textureGetFormat(texture: *gpu.Texture) gpu.Texture.Format {
return @intToEnum(gpu.Texture.Format, procs.textureGetFormat.?(@ptrCast(c.WGPUTexture, texture)));
}
pub inline fn textureGetHeight(texture: *gpu.Texture) u32 {
return procs.textureGetHeight.?(@ptrCast(c.WGPUTexture, texture));
}
pub inline fn textureGetMipLevelCount(texture: *gpu.Texture) u32 {
return procs.textureGetMipLevelCount.?(@ptrCast(c.WGPUTexture, texture));
}
pub inline fn textureGetSampleCount(texture: *gpu.Texture) u32 {
return procs.textureGetSampleCount.?(@ptrCast(c.WGPUTexture, texture));
}
pub inline fn textureGetUsage(texture: *gpu.Texture) gpu.Texture.UsageFlags {
return @bitCast(gpu.Texture.UsageFlags, procs.textureGetUsage.?(
@ptrCast(c.WGPUTexture, texture),
));
}
pub inline fn textureGetWidth(texture: *gpu.Texture) u32 {
return procs.textureGetWidth.?(@ptrCast(c.WGPUTexture, texture));
}
pub inline fn textureSetLabel(texture: *gpu.Texture, label: [*:0]const u8) void {
procs.textureSetLabel.?(@ptrCast(c.WGPUTexture, texture), label);
}
pub inline fn textureReference(texture: *gpu.Texture) void {
procs.textureReference.?(@ptrCast(c.WGPUTexture, texture));
}
pub inline fn textureRelease(texture: *gpu.Texture) void {
procs.textureRelease.?(@ptrCast(c.WGPUTexture, texture));
}
pub inline fn textureViewSetLabel(texture_view: *gpu.TextureView, label: [*:0]const u8) void {
procs.textureViewSetLabel.?(@ptrCast(c.WGPUTextureView, texture_view), label);
}
pub inline fn textureViewReference(texture_view: *gpu.TextureView) void {
procs.textureViewReference.?(@ptrCast(c.WGPUTextureView, texture_view));
}
pub inline fn textureViewRelease(texture_view: *gpu.TextureView) void {
procs.textureViewRelease.?(@ptrCast(c.WGPUTextureView, texture_view));
}
};
test "dawn_impl" {
_ = gpu.Export(Interface);
}