device.zig (7475B)
1 const std = @import("std"); 2 3 const c = @import("c.zig").c; 4 const BindGroup = @import("bind_group.zig").BindGroup; 5 const BindGroupLayout = @import("bind_group_layout.zig").BindGroupLayout; 6 const Buffer = @import("buffer.zig").Buffer; 7 const CallbackMode = @import("common.zig").CallbackMode; 8 const ChainedStruct = @import("common.zig").ChainedStruct; 9 const CommandEncoder = @import("command_encoder.zig").CommandEncoder; 10 const PipelineLayout = @import("pipeline_layout.zig").PipelineLayout; 11 const Queue = @import("queue.zig").Queue; 12 const RenderPipeline = @import("render_pipeline.zig").RenderPipeline; 13 const Sampler = @import("sampler.zig").Sampler; 14 const ShaderModule = @import("shader_module.zig").ShaderModule; 15 const StringView = @import("common.zig").StringView; 16 const Texture = @import("texture.zig").Texture; 17 18 pub const FeatureName = enum(u32) { 19 undefined = 0x00000000, 20 depth_clip_control = 0x00000001, 21 depth32_float_stencil8 = 0x00000002, 22 timestamp_query = 0x00000003, 23 texture_compression_bc = 0x00000004, 24 texture_compression_bc_sliced_3d = 0x00000005, 25 texture_compression_etc2 = 0x00000006, 26 texture_compression_astc = 0x00000007, 27 texture_compression_astc_sliced_3d = 0x00000008, 28 indirect_first_instance = 0x00000009, 29 shader_f16 = 0x0000000A, 30 rg11b10_ufloat_renderable = 0x0000000B, 31 bgra8_unorm_storage = 0x0000000C, 32 float32_filterable = 0x0000000D, 33 float32_blendable = 0x0000000E, 34 clip_distances = 0x0000000F, 35 dual_source_blending = 0x00000010, 36 }; 37 38 pub const Limits = extern struct { 39 max_texture_dimension_1d: u32, 40 max_texture_dimension_2d: u32, 41 max_texture_dimension_3d: u32, 42 max_texture_array_layers: u32, 43 max_bind_groups: u32, 44 max_bind_groups_plus_vertex_buffers: u32, 45 max_bindings_per_bind_group: u32, 46 max_dynamic_uniform_buffers_per_pipeline_layout: u32, 47 max_dynamic_storage_buffers_per_pipeline_layout: u32, 48 max_sampled_textures_per_shader_stage: u32, 49 max_sampler_per_shader_stage: u32, 50 max_storage_buffers_per_shader_stage: u32, 51 max_storage_textures_per_shader_stage: u32, 52 max_uniform_buffers_per_shader_stage: u32, 53 max_uniform_buffer_binding_size: u64, 54 max_storage_buffer_binding_size: u64, 55 min_uniform_buffer_offset_alignment: u32, 56 min_storage_buffer_offset_alignmnet: u32, 57 max_vertex_buffers: u32, 58 max_buffer_size: u64, 59 max_vertex_attributes: u32, 60 max_vertex_buffer_array_stride: u32, 61 max_inter_stage_shader_variables: u32, 62 max_color_attachments: u32, 63 max_color_attachment_bytes_per_sample: u32, 64 max_compute_workgroup_storage_size: u32, 65 max_compute_invocations_per_workgroup: u32, 66 max_compute_workgroup_size_x: u32, 67 max_compute_workgroup_size_y: u32, 68 max_compute_workgroup_size_z: u32, 69 max_compute_workgroups_per_dimension: u32, 70 }; 71 72 pub const RequiredLimits = extern struct { 73 next: ?*const ChainedStruct = null, 74 limits: Limits, 75 }; 76 77 pub const DeviceLostReason = enum(u32) { 78 unknown = 0x00000001, 79 destroyed = 0x00000002, 80 instance_dropped = 0x00000003, 81 failed_creation = 0x00000004, 82 }; 83 84 pub const DeviceLostCallback = fn ( 85 device: *const Device, 86 reason: DeviceLostReason, 87 message: StringView, 88 userdata1: ?*anyopaque, 89 userdata2: ?*anyopaque, 90 ) callconv(.C) void; 91 92 pub const DeviceLostCallbackInfo = extern struct { 93 next: ?*const ChainedStruct = null, 94 mode: CallbackMode, 95 callback: *const DeviceLostCallback, 96 userdata1: ?*anyopaque, 97 userdata2: ?*anyopaque, 98 }; 99 100 pub const ErrorType = enum(u32) { 101 no_error = 0x00000001, 102 validation = 0x00000002, 103 out_of_memory = 0x00000003, 104 internal = 0x00000004, 105 unknown = 0x00000005, 106 }; 107 108 pub const UncapturedErrorCallback = fn ( 109 device: *const Device, 110 @"type": ErrorType, 111 message: StringView, 112 userdata1: ?*anyopaque, 113 userdata2: ?*anyopaque, 114 ) callconv(.C) void; 115 116 pub const UncapturedErrorCallbackInfo = extern struct { 117 next: ?*const ChainedStruct = null, 118 callback: ?*const UncapturedErrorCallback, 119 userdata1: ?*anyopaque, 120 userdata2: ?*anyopaque, 121 }; 122 123 pub const Device = opaque { 124 pub const Descriptor = extern struct { 125 next: ?*const ChainedStruct = null, 126 label: StringView, 127 required_feature_count: usize, 128 required_features: ?[*]const FeatureName, 129 required_limits: ?*const RequiredLimits, 130 default_queue: Queue.Descriptor, 131 device_lost_callback_info: DeviceLostCallbackInfo, 132 uncaptured_error_callback_info: UncapturedErrorCallbackInfo, 133 }; 134 135 pub fn release(device: *Device) void { 136 c.wgpuDeviceRelease(@ptrCast(device)); 137 } 138 139 pub fn getQueue(device: *Device) *Queue { 140 return @ptrCast(c.wgpuDeviceGetQueue(@ptrCast(device)).?); 141 } 142 143 pub fn createCommandEncoder( 144 device: *Device, 145 descriptor: *const CommandEncoder.Descriptor, 146 ) ?*CommandEncoder { 147 return @ptrCast(c.wgpuDeviceCreateCommandEncoder( 148 @ptrCast(device), 149 @ptrCast(descriptor), 150 )); 151 } 152 153 pub fn createRenderPipeline( 154 device: *Device, 155 descriptor: *const RenderPipeline.Descriptor, 156 ) ?*RenderPipeline { 157 return @ptrCast(c.wgpuDeviceCreateRenderPipeline( 158 @ptrCast(device), 159 @ptrCast(descriptor), 160 )); 161 } 162 163 pub fn createPipelineLayout( 164 device: *Device, 165 descriptor: *const PipelineLayout.Descriptor, 166 ) ?*PipelineLayout { 167 return @ptrCast(c.wgpuDeviceCreatePipelineLayout( 168 @ptrCast(device), 169 @ptrCast(descriptor), 170 )); 171 } 172 173 pub fn createShaderModule( 174 device: *Device, 175 descriptor: *const ShaderModule.Descriptor, 176 ) ?*ShaderModule { 177 return @ptrCast(c.wgpuDeviceCreateShaderModule( 178 @ptrCast(device), 179 @ptrCast(descriptor), 180 )); 181 } 182 183 pub fn createBindGroupLayout( 184 device: *Device, 185 descriptor: *const BindGroupLayout.Descriptor, 186 ) ?*BindGroupLayout { 187 return @ptrCast(c.wgpuDeviceCreateBindGroupLayout( 188 @ptrCast(device), 189 @ptrCast(descriptor), 190 )); 191 } 192 193 pub fn createBindGroup( 194 device: *Device, 195 descriptor: *const BindGroup.Descriptor, 196 ) ?*BindGroup { 197 return @ptrCast(c.wgpuDeviceCreateBindGroup( 198 @ptrCast(device), 199 @ptrCast(descriptor), 200 )); 201 } 202 203 pub fn createBuffer( 204 device: *Device, 205 descriptor: *const Buffer.Descriptor, 206 ) ?*Buffer { 207 return @ptrCast(c.wgpuDeviceCreateBuffer( 208 @ptrCast(device), 209 @ptrCast(descriptor), 210 )); 211 } 212 213 pub fn createSampler( 214 device: *Device, 215 descriptor: *const Sampler.Descriptor, 216 ) ?*Sampler { 217 return @ptrCast(c.wgpuDeviceCreateSampler( 218 @ptrCast(device), 219 @ptrCast(descriptor), 220 )); 221 } 222 223 pub fn createTexture( 224 device: *Device, 225 descriptor: *const Texture.Descriptor, 226 ) ?*Texture { 227 return @ptrCast(c.wgpuDeviceCreateTexture( 228 @ptrCast(device), 229 @ptrCast(descriptor), 230 )); 231 } 232 233 // createComputePipeline 234 // createComputePipelineAsync 235 // createQuerySet 236 // createRenderBundleEncoder 237 // createRenderPipelineAsync 238 // destroy 239 // enumerateFeatures 240 // getLimits 241 // hasFeature 242 // popErrorScope 243 // pushErrorScope 244 // setLabel 245 // reference 246 };