1 // BSD 3-Clause License
2 //
3 // Copyright (c) 2019, "WebGPU native" developers
4 // All rights reserved.
5 //
6 // Redistribution and use in source and binary forms, with or without
7 // modification, are permitted provided that the following conditions are met:
8 //
9 // 1. Redistributions of source code must retain the above copyright notice, this
10 //    list of conditions and the following disclaimer.
11 //
12 // 2. Redistributions in binary form must reproduce the above copyright notice,
13 //    this list of conditions and the following disclaimer in the documentation
14 //    and/or other materials provided with the distribution.
15 //
16 // 3. Neither the name of the copyright holder nor the names of its
17 //    contributors may be used to endorse or promote products derived from
18 //    this software without specific prior written permission.
19 //
20 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21 // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
23 // DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
24 // FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25 // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
26 // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
27 // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
28 // OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 #ifndef WEBGPU_H_
31 #define WEBGPU_H_
32 
33 #if defined(WGPU_SHARED_LIBRARY)
34 #    if defined(_WIN32)
35 #        if defined(WGPU_IMPLEMENTATION)
36 #            define WGPU_EXPORT __declspec(dllexport)
37 #        else
38 #            define WGPU_EXPORT __declspec(dllimport)
39 #        endif
40 #    else  // defined(_WIN32)
41 #        if defined(WGPU_IMPLEMENTATION)
42 #            define WGPU_EXPORT __attribute__((visibility("default")))
43 #        else
44 #            define WGPU_EXPORT
45 #        endif
46 #    endif  // defined(_WIN32)
47 #else       // defined(WGPU_SHARED_LIBRARY)
48 #    define WGPU_EXPORT
49 #endif  // defined(WGPU_SHARED_LIBRARY)
50 
51 #include <stdint.h>
52 #include <stddef.h>
53 #include <stdbool.h>
54 
55 #define WGPU_WHOLE_SIZE (0xffffffffffffffffULL)
56 
57 typedef uint32_t WGPUFlags;
58 
59 typedef struct WGPUAdapterImpl* WGPUAdapter;
60 typedef struct WGPUBindGroupImpl* WGPUBindGroup;
61 typedef struct WGPUBindGroupLayoutImpl* WGPUBindGroupLayout;
62 typedef struct WGPUBufferImpl* WGPUBuffer;
63 typedef struct WGPUCommandBufferImpl* WGPUCommandBuffer;
64 typedef struct WGPUCommandEncoderImpl* WGPUCommandEncoder;
65 typedef struct WGPUComputePassEncoderImpl* WGPUComputePassEncoder;
66 typedef struct WGPUComputePipelineImpl* WGPUComputePipeline;
67 typedef struct WGPUDeviceImpl* WGPUDevice;
68 typedef struct WGPUFenceImpl* WGPUFence;
69 typedef struct WGPUInstanceImpl* WGPUInstance;
70 typedef struct WGPUPipelineLayoutImpl* WGPUPipelineLayout;
71 typedef struct WGPUQuerySetImpl* WGPUQuerySet;
72 typedef struct WGPUQueueImpl* WGPUQueue;
73 typedef struct WGPURenderBundleImpl* WGPURenderBundle;
74 typedef struct WGPURenderBundleEncoderImpl* WGPURenderBundleEncoder;
75 typedef struct WGPURenderPassEncoderImpl* WGPURenderPassEncoder;
76 typedef struct WGPURenderPipelineImpl* WGPURenderPipeline;
77 typedef struct WGPUSamplerImpl* WGPUSampler;
78 typedef struct WGPUShaderModuleImpl* WGPUShaderModule;
79 typedef struct WGPUSurfaceImpl* WGPUSurface;
80 typedef struct WGPUSwapChainImpl* WGPUSwapChain;
81 typedef struct WGPUTextureImpl* WGPUTexture;
82 typedef struct WGPUTextureViewImpl* WGPUTextureView;
83 
84 typedef enum WGPUAdapterType {
85     WGPUAdapterType_DiscreteGPU = 0x00000000,
86     WGPUAdapterType_IntegratedGPU = 0x00000001,
87     WGPUAdapterType_CPU = 0x00000002,
88     WGPUAdapterType_Unknown = 0x00000003,
89     WGPUAdapterType_Force32 = 0x7FFFFFFF
90 } WGPUAdapterType;
91 
92 typedef enum WGPUAddressMode {
93     WGPUAddressMode_Repeat = 0x00000000,
94     WGPUAddressMode_MirrorRepeat = 0x00000001,
95     WGPUAddressMode_ClampToEdge = 0x00000002,
96     WGPUAddressMode_Force32 = 0x7FFFFFFF
97 } WGPUAddressMode;
98 
99 typedef enum WGPUBackendType {
100     WGPUBackendType_Null = 0x00000000,
101     WGPUBackendType_D3D11 = 0x00000001,
102     WGPUBackendType_D3D12 = 0x00000002,
103     WGPUBackendType_Metal = 0x00000003,
104     WGPUBackendType_Vulkan = 0x00000004,
105     WGPUBackendType_OpenGL = 0x00000005,
106     WGPUBackendType_OpenGLES = 0x00000006,
107     WGPUBackendType_Force32 = 0x7FFFFFFF
108 } WGPUBackendType;
109 
110 typedef enum WGPUBindingType {
111     WGPUBindingType_UniformBuffer = 0x00000000,
112     WGPUBindingType_StorageBuffer = 0x00000001,
113     WGPUBindingType_ReadonlyStorageBuffer = 0x00000002,
114     WGPUBindingType_Sampler = 0x00000003,
115     WGPUBindingType_ComparisonSampler = 0x00000004,
116     WGPUBindingType_SampledTexture = 0x00000005,
117     WGPUBindingType_ReadonlyStorageTexture = 0x00000006,
118     WGPUBindingType_WriteonlyStorageTexture = 0x00000007,
119     WGPUBindingType_Force32 = 0x7FFFFFFF
120 } WGPUBindingType;
121 
122 typedef enum WGPUBlendFactor {
123     WGPUBlendFactor_Zero = 0x00000000,
124     WGPUBlendFactor_One = 0x00000001,
125     WGPUBlendFactor_SrcColor = 0x00000002,
126     WGPUBlendFactor_OneMinusSrcColor = 0x00000003,
127     WGPUBlendFactor_SrcAlpha = 0x00000004,
128     WGPUBlendFactor_OneMinusSrcAlpha = 0x00000005,
129     WGPUBlendFactor_DstColor = 0x00000006,
130     WGPUBlendFactor_OneMinusDstColor = 0x00000007,
131     WGPUBlendFactor_DstAlpha = 0x00000008,
132     WGPUBlendFactor_OneMinusDstAlpha = 0x00000009,
133     WGPUBlendFactor_SrcAlphaSaturated = 0x0000000A,
134     WGPUBlendFactor_BlendColor = 0x0000000B,
135     WGPUBlendFactor_OneMinusBlendColor = 0x0000000C,
136     WGPUBlendFactor_Force32 = 0x7FFFFFFF
137 } WGPUBlendFactor;
138 
139 typedef enum WGPUBlendOperation {
140     WGPUBlendOperation_Add = 0x00000000,
141     WGPUBlendOperation_Subtract = 0x00000001,
142     WGPUBlendOperation_ReverseSubtract = 0x00000002,
143     WGPUBlendOperation_Min = 0x00000003,
144     WGPUBlendOperation_Max = 0x00000004,
145     WGPUBlendOperation_Force32 = 0x7FFFFFFF
146 } WGPUBlendOperation;
147 
148 typedef enum WGPUBufferMapAsyncStatus {
149     WGPUBufferMapAsyncStatus_Success = 0x00000000,
150     WGPUBufferMapAsyncStatus_Error = 0x00000001,
151     WGPUBufferMapAsyncStatus_Unknown = 0x00000002,
152     WGPUBufferMapAsyncStatus_DeviceLost = 0x00000003,
153     WGPUBufferMapAsyncStatus_Force32 = 0x7FFFFFFF
154 } WGPUBufferMapAsyncStatus;
155 
156 typedef enum WGPUCompareFunction {
157     WGPUCompareFunction_Undefined = 0x00000000,
158     WGPUCompareFunction_Never = 0x00000001,
159     WGPUCompareFunction_Less = 0x00000002,
160     WGPUCompareFunction_LessEqual = 0x00000003,
161     WGPUCompareFunction_Greater = 0x00000004,
162     WGPUCompareFunction_GreaterEqual = 0x00000005,
163     WGPUCompareFunction_Equal = 0x00000006,
164     WGPUCompareFunction_NotEqual = 0x00000007,
165     WGPUCompareFunction_Always = 0x00000008,
166     WGPUCompareFunction_Force32 = 0x7FFFFFFF
167 } WGPUCompareFunction;
168 
169 typedef enum WGPUCullMode {
170     WGPUCullMode_None = 0x00000000,
171     WGPUCullMode_Front = 0x00000001,
172     WGPUCullMode_Back = 0x00000002,
173     WGPUCullMode_Force32 = 0x7FFFFFFF
174 } WGPUCullMode;
175 
176 typedef enum WGPUErrorFilter {
177     WGPUErrorFilter_None = 0x00000000,
178     WGPUErrorFilter_Validation = 0x00000001,
179     WGPUErrorFilter_OutOfMemory = 0x00000002,
180     WGPUErrorFilter_Force32 = 0x7FFFFFFF
181 } WGPUErrorFilter;
182 
183 typedef enum WGPUErrorType {
184     WGPUErrorType_NoError = 0x00000000,
185     WGPUErrorType_Validation = 0x00000001,
186     WGPUErrorType_OutOfMemory = 0x00000002,
187     WGPUErrorType_Unknown = 0x00000003,
188     WGPUErrorType_DeviceLost = 0x00000004,
189     WGPUErrorType_Force32 = 0x7FFFFFFF
190 } WGPUErrorType;
191 
192 typedef enum WGPUFenceCompletionStatus {
193     WGPUFenceCompletionStatus_Success = 0x00000000,
194     WGPUFenceCompletionStatus_Error = 0x00000001,
195     WGPUFenceCompletionStatus_Unknown = 0x00000002,
196     WGPUFenceCompletionStatus_DeviceLost = 0x00000003,
197     WGPUFenceCompletionStatus_Force32 = 0x7FFFFFFF
198 } WGPUFenceCompletionStatus;
199 
200 typedef enum WGPUFilterMode {
201     WGPUFilterMode_Nearest = 0x00000000,
202     WGPUFilterMode_Linear = 0x00000001,
203     WGPUFilterMode_Force32 = 0x7FFFFFFF
204 } WGPUFilterMode;
205 
206 typedef enum WGPUFrontFace {
207     WGPUFrontFace_CCW = 0x00000000,
208     WGPUFrontFace_CW = 0x00000001,
209     WGPUFrontFace_Force32 = 0x7FFFFFFF
210 } WGPUFrontFace;
211 
212 typedef enum WGPUIndexFormat {
213     WGPUIndexFormat_Uint16 = 0x00000000,
214     WGPUIndexFormat_Uint32 = 0x00000001,
215     WGPUIndexFormat_Force32 = 0x7FFFFFFF
216 } WGPUIndexFormat;
217 
218 typedef enum WGPUInputStepMode {
219     WGPUInputStepMode_Vertex = 0x00000000,
220     WGPUInputStepMode_Instance = 0x00000001,
221     WGPUInputStepMode_Force32 = 0x7FFFFFFF
222 } WGPUInputStepMode;
223 
224 typedef enum WGPULoadOp {
225     WGPULoadOp_Clear = 0x00000000,
226     WGPULoadOp_Load = 0x00000001,
227     WGPULoadOp_Force32 = 0x7FFFFFFF
228 } WGPULoadOp;
229 
230 typedef enum WGPUPipelineStatisticName {
231     WGPUPipelineStatisticName_VertexShaderInvocations = 0x00000000,
232     WGPUPipelineStatisticName_ClipperInvocations = 0x00000001,
233     WGPUPipelineStatisticName_ClipperPrimitivesOut = 0x00000002,
234     WGPUPipelineStatisticName_FragmentShaderInvocations = 0x00000003,
235     WGPUPipelineStatisticName_ComputeShaderInvocations = 0x00000004,
236     WGPUPipelineStatisticName_Force32 = 0x7FFFFFFF
237 } WGPUPipelineStatisticName;
238 
239 typedef enum WGPUPresentMode {
240     WGPUPresentMode_Immediate = 0x00000000,
241     WGPUPresentMode_Mailbox = 0x00000001,
242     WGPUPresentMode_Fifo = 0x00000002,
243     WGPUPresentMode_Force32 = 0x7FFFFFFF
244 } WGPUPresentMode;
245 
246 typedef enum WGPUPrimitiveTopology {
247     WGPUPrimitiveTopology_PointList = 0x00000000,
248     WGPUPrimitiveTopology_LineList = 0x00000001,
249     WGPUPrimitiveTopology_LineStrip = 0x00000002,
250     WGPUPrimitiveTopology_TriangleList = 0x00000003,
251     WGPUPrimitiveTopology_TriangleStrip = 0x00000004,
252     WGPUPrimitiveTopology_Force32 = 0x7FFFFFFF
253 } WGPUPrimitiveTopology;
254 
255 typedef enum WGPUQueryType {
256     WGPUQueryType_Occlusion = 0x00000000,
257     WGPUQueryType_PipelineStatistics = 0x00000001,
258     WGPUQueryType_Timestamp = 0x00000002,
259     WGPUQueryType_Force32 = 0x7FFFFFFF
260 } WGPUQueryType;
261 
262 typedef enum WGPUSType {
263     WGPUSType_Invalid = 0x00000000,
264     WGPUSType_SurfaceDescriptorFromMetalLayer = 0x00000001,
265     WGPUSType_SurfaceDescriptorFromWindowsHWND = 0x00000002,
266     WGPUSType_SurfaceDescriptorFromXlib = 0x00000003,
267     WGPUSType_SurfaceDescriptorFromCanvasHTMLSelector = 0x00000004,
268     WGPUSType_ShaderModuleSPIRVDescriptor = 0x00000005,
269     WGPUSType_ShaderModuleWGSLDescriptor = 0x00000006,
270     WGPUSType_Force32 = 0x7FFFFFFF
271 } WGPUSType;
272 
273 typedef enum WGPUStencilOperation {
274     WGPUStencilOperation_Keep = 0x00000000,
275     WGPUStencilOperation_Zero = 0x00000001,
276     WGPUStencilOperation_Replace = 0x00000002,
277     WGPUStencilOperation_Invert = 0x00000003,
278     WGPUStencilOperation_IncrementClamp = 0x00000004,
279     WGPUStencilOperation_DecrementClamp = 0x00000005,
280     WGPUStencilOperation_IncrementWrap = 0x00000006,
281     WGPUStencilOperation_DecrementWrap = 0x00000007,
282     WGPUStencilOperation_Force32 = 0x7FFFFFFF
283 } WGPUStencilOperation;
284 
285 typedef enum WGPUStoreOp {
286     WGPUStoreOp_Store = 0x00000000,
287     WGPUStoreOp_Clear = 0x00000001,
288     WGPUStoreOp_Force32 = 0x7FFFFFFF
289 } WGPUStoreOp;
290 
291 typedef enum WGPUTextureAspect {
292     WGPUTextureAspect_All = 0x00000000,
293     WGPUTextureAspect_StencilOnly = 0x00000001,
294     WGPUTextureAspect_DepthOnly = 0x00000002,
295     WGPUTextureAspect_Force32 = 0x7FFFFFFF
296 } WGPUTextureAspect;
297 
298 typedef enum WGPUTextureComponentType {
299     WGPUTextureComponentType_Float = 0x00000000,
300     WGPUTextureComponentType_Sint = 0x00000001,
301     WGPUTextureComponentType_Uint = 0x00000002,
302     WGPUTextureComponentType_Force32 = 0x7FFFFFFF
303 } WGPUTextureComponentType;
304 
305 typedef enum WGPUTextureDimension {
306     WGPUTextureDimension_1D = 0x00000000,
307     WGPUTextureDimension_2D = 0x00000001,
308     WGPUTextureDimension_3D = 0x00000002,
309     WGPUTextureDimension_Force32 = 0x7FFFFFFF
310 } WGPUTextureDimension;
311 
312 typedef enum WGPUTextureFormat {
313     WGPUTextureFormat_Undefined = 0x00000000,
314     WGPUTextureFormat_R8Unorm = 0x00000001,
315     WGPUTextureFormat_R8Snorm = 0x00000002,
316     WGPUTextureFormat_R8Uint = 0x00000003,
317     WGPUTextureFormat_R8Sint = 0x00000004,
318     WGPUTextureFormat_R16Uint = 0x00000005,
319     WGPUTextureFormat_R16Sint = 0x00000006,
320     WGPUTextureFormat_R16Float = 0x00000007,
321     WGPUTextureFormat_RG8Unorm = 0x00000008,
322     WGPUTextureFormat_RG8Snorm = 0x00000009,
323     WGPUTextureFormat_RG8Uint = 0x0000000A,
324     WGPUTextureFormat_RG8Sint = 0x0000000B,
325     WGPUTextureFormat_R32Float = 0x0000000C,
326     WGPUTextureFormat_R32Uint = 0x0000000D,
327     WGPUTextureFormat_R32Sint = 0x0000000E,
328     WGPUTextureFormat_RG16Uint = 0x0000000F,
329     WGPUTextureFormat_RG16Sint = 0x00000010,
330     WGPUTextureFormat_RG16Float = 0x00000011,
331     WGPUTextureFormat_RGBA8Unorm = 0x00000012,
332     WGPUTextureFormat_RGBA8UnormSrgb = 0x00000013,
333     WGPUTextureFormat_RGBA8Snorm = 0x00000014,
334     WGPUTextureFormat_RGBA8Uint = 0x00000015,
335     WGPUTextureFormat_RGBA8Sint = 0x00000016,
336     WGPUTextureFormat_BGRA8Unorm = 0x00000017,
337     WGPUTextureFormat_BGRA8UnormSrgb = 0x00000018,
338     WGPUTextureFormat_RGB10A2Unorm = 0x00000019,
339     WGPUTextureFormat_RG11B10Float = 0x0000001A,
340     WGPUTextureFormat_RG32Float = 0x0000001B,
341     WGPUTextureFormat_RG32Uint = 0x0000001C,
342     WGPUTextureFormat_RG32Sint = 0x0000001D,
343     WGPUTextureFormat_RGBA16Uint = 0x0000001E,
344     WGPUTextureFormat_RGBA16Sint = 0x0000001F,
345     WGPUTextureFormat_RGBA16Float = 0x00000020,
346     WGPUTextureFormat_RGBA32Float = 0x00000021,
347     WGPUTextureFormat_RGBA32Uint = 0x00000022,
348     WGPUTextureFormat_RGBA32Sint = 0x00000023,
349     WGPUTextureFormat_Depth32Float = 0x00000024,
350     WGPUTextureFormat_Depth24Plus = 0x00000025,
351     WGPUTextureFormat_Depth24PlusStencil8 = 0x00000026,
352     WGPUTextureFormat_BC1RGBAUnorm = 0x00000027,
353     WGPUTextureFormat_BC1RGBAUnormSrgb = 0x00000028,
354     WGPUTextureFormat_BC2RGBAUnorm = 0x00000029,
355     WGPUTextureFormat_BC2RGBAUnormSrgb = 0x0000002A,
356     WGPUTextureFormat_BC3RGBAUnorm = 0x0000002B,
357     WGPUTextureFormat_BC3RGBAUnormSrgb = 0x0000002C,
358     WGPUTextureFormat_BC4RUnorm = 0x0000002D,
359     WGPUTextureFormat_BC4RSnorm = 0x0000002E,
360     WGPUTextureFormat_BC5RGUnorm = 0x0000002F,
361     WGPUTextureFormat_BC5RGSnorm = 0x00000030,
362     WGPUTextureFormat_BC6HRGBUfloat = 0x00000031,
363     WGPUTextureFormat_BC6HRGBSfloat = 0x00000032,
364     WGPUTextureFormat_BC7RGBAUnorm = 0x00000033,
365     WGPUTextureFormat_BC7RGBAUnormSrgb = 0x00000034,
366     WGPUTextureFormat_Force32 = 0x7FFFFFFF
367 } WGPUTextureFormat;
368 
369 typedef enum WGPUTextureViewDimension {
370     WGPUTextureViewDimension_Undefined = 0x00000000,
371     WGPUTextureViewDimension_1D = 0x00000001,
372     WGPUTextureViewDimension_2D = 0x00000002,
373     WGPUTextureViewDimension_2DArray = 0x00000003,
374     WGPUTextureViewDimension_Cube = 0x00000004,
375     WGPUTextureViewDimension_CubeArray = 0x00000005,
376     WGPUTextureViewDimension_3D = 0x00000006,
377     WGPUTextureViewDimension_Force32 = 0x7FFFFFFF
378 } WGPUTextureViewDimension;
379 
380 typedef enum WGPUVertexFormat {
381     WGPUVertexFormat_UChar2 = 0x00000000,
382     WGPUVertexFormat_UChar4 = 0x00000001,
383     WGPUVertexFormat_Char2 = 0x00000002,
384     WGPUVertexFormat_Char4 = 0x00000003,
385     WGPUVertexFormat_UChar2Norm = 0x00000004,
386     WGPUVertexFormat_UChar4Norm = 0x00000005,
387     WGPUVertexFormat_Char2Norm = 0x00000006,
388     WGPUVertexFormat_Char4Norm = 0x00000007,
389     WGPUVertexFormat_UShort2 = 0x00000008,
390     WGPUVertexFormat_UShort4 = 0x00000009,
391     WGPUVertexFormat_Short2 = 0x0000000A,
392     WGPUVertexFormat_Short4 = 0x0000000B,
393     WGPUVertexFormat_UShort2Norm = 0x0000000C,
394     WGPUVertexFormat_UShort4Norm = 0x0000000D,
395     WGPUVertexFormat_Short2Norm = 0x0000000E,
396     WGPUVertexFormat_Short4Norm = 0x0000000F,
397     WGPUVertexFormat_Half2 = 0x00000010,
398     WGPUVertexFormat_Half4 = 0x00000011,
399     WGPUVertexFormat_Float = 0x00000012,
400     WGPUVertexFormat_Float2 = 0x00000013,
401     WGPUVertexFormat_Float3 = 0x00000014,
402     WGPUVertexFormat_Float4 = 0x00000015,
403     WGPUVertexFormat_UInt = 0x00000016,
404     WGPUVertexFormat_UInt2 = 0x00000017,
405     WGPUVertexFormat_UInt3 = 0x00000018,
406     WGPUVertexFormat_UInt4 = 0x00000019,
407     WGPUVertexFormat_Int = 0x0000001A,
408     WGPUVertexFormat_Int2 = 0x0000001B,
409     WGPUVertexFormat_Int3 = 0x0000001C,
410     WGPUVertexFormat_Int4 = 0x0000001D,
411     WGPUVertexFormat_Force32 = 0x7FFFFFFF
412 } WGPUVertexFormat;
413 
414 typedef enum WGPUBufferUsage {
415     WGPUBufferUsage_None = 0x00000000,
416     WGPUBufferUsage_MapRead = 0x00000001,
417     WGPUBufferUsage_MapWrite = 0x00000002,
418     WGPUBufferUsage_CopySrc = 0x00000004,
419     WGPUBufferUsage_CopyDst = 0x00000008,
420     WGPUBufferUsage_Index = 0x00000010,
421     WGPUBufferUsage_Vertex = 0x00000020,
422     WGPUBufferUsage_Uniform = 0x00000040,
423     WGPUBufferUsage_Storage = 0x00000080,
424     WGPUBufferUsage_Indirect = 0x00000100,
425     WGPUBufferUsage_QueryResolve = 0x00000200,
426     WGPUBufferUsage_Force32 = 0x7FFFFFFF
427 } WGPUBufferUsage;
428 typedef WGPUFlags WGPUBufferUsageFlags;
429 
430 typedef enum WGPUColorWriteMask {
431     WGPUColorWriteMask_None = 0x00000000,
432     WGPUColorWriteMask_Red = 0x00000001,
433     WGPUColorWriteMask_Green = 0x00000002,
434     WGPUColorWriteMask_Blue = 0x00000004,
435     WGPUColorWriteMask_Alpha = 0x00000008,
436     WGPUColorWriteMask_All = 0x0000000F,
437     WGPUColorWriteMask_Force32 = 0x7FFFFFFF
438 } WGPUColorWriteMask;
439 typedef WGPUFlags WGPUColorWriteMaskFlags;
440 
441 typedef enum WGPUMapMode {
442     WGPUMapMode_Read = 0x00000001,
443     WGPUMapMode_Write = 0x00000002,
444     WGPUMapMode_Force32 = 0x7FFFFFFF
445 } WGPUMapMode;
446 typedef WGPUFlags WGPUMapModeFlags;
447 
448 typedef enum WGPUShaderStage {
449     WGPUShaderStage_None = 0x00000000,
450     WGPUShaderStage_Vertex = 0x00000001,
451     WGPUShaderStage_Fragment = 0x00000002,
452     WGPUShaderStage_Compute = 0x00000004,
453     WGPUShaderStage_Force32 = 0x7FFFFFFF
454 } WGPUShaderStage;
455 typedef WGPUFlags WGPUShaderStageFlags;
456 
457 typedef enum WGPUTextureUsage {
458     WGPUTextureUsage_None = 0x00000000,
459     WGPUTextureUsage_CopySrc = 0x00000001,
460     WGPUTextureUsage_CopyDst = 0x00000002,
461     WGPUTextureUsage_Sampled = 0x00000004,
462     WGPUTextureUsage_Storage = 0x00000008,
463     WGPUTextureUsage_OutputAttachment = 0x00000010,
464     WGPUTextureUsage_Force32 = 0x7FFFFFFF
465 } WGPUTextureUsage;
466 typedef WGPUFlags WGPUTextureUsageFlags;
467 
468 
469 typedef struct WGPUChainedStruct {
470     struct WGPUChainedStruct const * next;
471     WGPUSType sType;
472 } WGPUChainedStruct;
473 
474 typedef struct WGPUAdapterProperties {
475     WGPUChainedStruct const * nextInChain;
476     uint32_t deviceID;
477     uint32_t vendorID;
478     char const * name;
479     WGPUAdapterType adapterType;
480     WGPUBackendType backendType;
481 } WGPUAdapterProperties;
482 
483 typedef struct WGPUBindGroupEntry {
484     uint32_t binding;
485     WGPUBuffer buffer;
486     uint64_t offset;
487     uint64_t size;
488     WGPUSampler sampler;
489     WGPUTextureView textureView;
490 } WGPUBindGroupEntry;
491 
492 typedef struct WGPUBindGroupLayoutEntry {
493     uint32_t binding;
494     WGPUShaderStageFlags visibility;
495     WGPUBindingType type;
496     bool hasDynamicOffset;
497     uint64_t minBufferBindingSize;
498     bool multisampled;
499     WGPUTextureViewDimension viewDimension;
500     WGPUTextureComponentType textureComponentType;
501     WGPUTextureFormat storageTextureFormat;
502 } WGPUBindGroupLayoutEntry;
503 
504 typedef struct WGPUBlendDescriptor {
505     WGPUBlendOperation operation;
506     WGPUBlendFactor srcFactor;
507     WGPUBlendFactor dstFactor;
508 } WGPUBlendDescriptor;
509 
510 typedef struct WGPUBufferDescriptor {
511     WGPUChainedStruct const * nextInChain;
512     char const * label;
513     WGPUBufferUsageFlags usage;
514     uint64_t size;
515     bool mappedAtCreation;
516 } WGPUBufferDescriptor;
517 
518 typedef struct WGPUColor {
519     float r;
520     float g;
521     float b;
522     float a;
523 } WGPUColor;
524 
525 typedef struct WGPUCommandBufferDescriptor {
526     WGPUChainedStruct const * nextInChain;
527     char const * label;
528 } WGPUCommandBufferDescriptor;
529 
530 typedef struct WGPUCommandEncoderDescriptor {
531     WGPUChainedStruct const * nextInChain;
532     char const * label;
533 } WGPUCommandEncoderDescriptor;
534 
535 typedef struct WGPUComputePassDescriptor {
536     WGPUChainedStruct const * nextInChain;
537     char const * label;
538 } WGPUComputePassDescriptor;
539 
540 typedef struct WGPUDeviceDescriptor {
541     WGPUChainedStruct const * nextInChain;
542 } WGPUDeviceDescriptor;
543 
544 typedef struct WGPUExtent3D {
545     uint32_t width;
546     uint32_t height;
547     uint32_t depth;
548 } WGPUExtent3D;
549 
550 typedef struct WGPUFenceDescriptor {
551     WGPUChainedStruct const * nextInChain;
552     char const * label;
553     uint64_t initialValue;
554 } WGPUFenceDescriptor;
555 
556 typedef struct WGPUInstanceDescriptor {
557     WGPUChainedStruct const * nextInChain;
558 } WGPUInstanceDescriptor;
559 
560 typedef struct WGPUOrigin3D {
561     uint32_t x;
562     uint32_t y;
563     uint32_t z;
564 } WGPUOrigin3D;
565 
566 typedef struct WGPUPipelineLayoutDescriptor {
567     WGPUChainedStruct const * nextInChain;
568     char const * label;
569     uint32_t bindGroupLayoutCount;
570     WGPUBindGroupLayout const * bindGroupLayouts;
571 } WGPUPipelineLayoutDescriptor;
572 
573 typedef struct WGPUProgrammableStageDescriptor {
574     WGPUChainedStruct const * nextInChain;
575     WGPUShaderModule module;
576     char const * entryPoint;
577 } WGPUProgrammableStageDescriptor;
578 
579 typedef struct WGPUQuerySetDescriptor {
580     WGPUChainedStruct const * nextInChain;
581     char const * label;
582     WGPUQueryType type;
583     uint32_t count;
584     WGPUPipelineStatisticName const * pipelineStatistics;
585     uint32_t pipelineStatisticsCount;
586 } WGPUQuerySetDescriptor;
587 
588 typedef struct WGPURasterizationStateDescriptor {
589     WGPUChainedStruct const * nextInChain;
590     WGPUFrontFace frontFace;
591     WGPUCullMode cullMode;
592     int32_t depthBias;
593     float depthBiasSlopeScale;
594     float depthBiasClamp;
595 } WGPURasterizationStateDescriptor;
596 
597 typedef struct WGPURenderBundleDescriptor {
598     WGPUChainedStruct const * nextInChain;
599     char const * label;
600 } WGPURenderBundleDescriptor;
601 
602 typedef struct WGPURenderBundleEncoderDescriptor {
603     WGPUChainedStruct const * nextInChain;
604     char const * label;
605     uint32_t colorFormatsCount;
606     WGPUTextureFormat const * colorFormats;
607     WGPUTextureFormat depthStencilFormat;
608     uint32_t sampleCount;
609 } WGPURenderBundleEncoderDescriptor;
610 
611 typedef struct WGPURenderPassDepthStencilAttachmentDescriptor {
612     WGPUTextureView attachment;
613     WGPULoadOp depthLoadOp;
614     WGPUStoreOp depthStoreOp;
615     float clearDepth;
616     bool depthReadOnly;
617     WGPULoadOp stencilLoadOp;
618     WGPUStoreOp stencilStoreOp;
619     uint32_t clearStencil;
620     bool stencilReadOnly;
621 } WGPURenderPassDepthStencilAttachmentDescriptor;
622 
623 typedef struct WGPURequestAdapterOptions {
624     WGPUChainedStruct const * nextInChain;
625     WGPUSurface compatibleSurface;
626 } WGPURequestAdapterOptions;
627 
628 typedef struct WGPUSamplerDescriptor {
629     WGPUChainedStruct const * nextInChain;
630     char const * label;
631     WGPUAddressMode addressModeU;
632     WGPUAddressMode addressModeV;
633     WGPUAddressMode addressModeW;
634     WGPUFilterMode magFilter;
635     WGPUFilterMode minFilter;
636     WGPUFilterMode mipmapFilter;
637     float lodMinClamp;
638     float lodMaxClamp;
639     WGPUCompareFunction compare;
640 } WGPUSamplerDescriptor;
641 
642 typedef struct WGPUShaderModuleDescriptor {
643     WGPUChainedStruct const * nextInChain;
644     char const * label;
645 } WGPUShaderModuleDescriptor;
646 
647 typedef struct WGPUShaderModuleSPIRVDescriptor {
648     WGPUChainedStruct chain;
649     uint32_t codeSize;
650     uint32_t const * code;
651 } WGPUShaderModuleSPIRVDescriptor;
652 
653 typedef struct WGPUShaderModuleWGSLDescriptor {
654     WGPUChainedStruct chain;
655     char const * source;
656 } WGPUShaderModuleWGSLDescriptor;
657 
658 typedef struct WGPUStencilStateFaceDescriptor {
659     WGPUCompareFunction compare;
660     WGPUStencilOperation failOp;
661     WGPUStencilOperation depthFailOp;
662     WGPUStencilOperation passOp;
663 } WGPUStencilStateFaceDescriptor;
664 
665 typedef struct WGPUSurfaceDescriptor {
666     WGPUChainedStruct const * nextInChain;
667     char const * label;
668 } WGPUSurfaceDescriptor;
669 
670 typedef struct WGPUSurfaceDescriptorFromCanvasHTMLSelector {
671     WGPUChainedStruct chain;
672     char const * selector;
673 } WGPUSurfaceDescriptorFromCanvasHTMLSelector;
674 
675 typedef struct WGPUSurfaceDescriptorFromMetalLayer {
676     WGPUChainedStruct chain;
677     void * layer;
678 } WGPUSurfaceDescriptorFromMetalLayer;
679 
680 typedef struct WGPUSurfaceDescriptorFromWindowsHWND {
681     WGPUChainedStruct chain;
682     void * hinstance;
683     void * hwnd;
684 } WGPUSurfaceDescriptorFromWindowsHWND;
685 
686 typedef struct WGPUSurfaceDescriptorFromXlib {
687     WGPUChainedStruct chain;
688     void * display;
689     uint32_t window;
690 } WGPUSurfaceDescriptorFromXlib;
691 
692 typedef struct WGPUSwapChainDescriptor {
693     WGPUChainedStruct const * nextInChain;
694     char const * label;
695     WGPUTextureUsageFlags usage;
696     WGPUTextureFormat format;
697     uint32_t width;
698     uint32_t height;
699     WGPUPresentMode presentMode;
700 } WGPUSwapChainDescriptor;
701 
702 typedef struct WGPUTextureDataLayout {
703     WGPUChainedStruct const * nextInChain;
704     uint64_t offset;
705     uint32_t bytesPerRow;
706     uint32_t rowsPerImage;
707 } WGPUTextureDataLayout;
708 
709 typedef struct WGPUTextureViewDescriptor {
710     WGPUChainedStruct const * nextInChain;
711     char const * label;
712     WGPUTextureFormat format;
713     WGPUTextureViewDimension dimension;
714     uint32_t baseMipLevel;
715     uint32_t mipLevelCount;
716     uint32_t baseArrayLayer;
717     uint32_t arrayLayerCount;
718     WGPUTextureAspect aspect;
719 } WGPUTextureViewDescriptor;
720 
721 typedef struct WGPUVertexAttributeDescriptor {
722     WGPUVertexFormat format;
723     uint64_t offset;
724     uint32_t shaderLocation;
725 } WGPUVertexAttributeDescriptor;
726 
727 typedef struct WGPUBindGroupDescriptor {
728     WGPUChainedStruct const * nextInChain;
729     char const * label;
730     WGPUBindGroupLayout layout;
731     uint32_t entryCount;
732     WGPUBindGroupEntry const * entries;
733 } WGPUBindGroupDescriptor;
734 
735 typedef struct WGPUBindGroupLayoutDescriptor {
736     WGPUChainedStruct const * nextInChain;
737     char const * label;
738     uint32_t entryCount;
739     WGPUBindGroupLayoutEntry const * entries;
740 } WGPUBindGroupLayoutDescriptor;
741 
742 typedef struct WGPUBufferCopyView {
743     WGPUChainedStruct const * nextInChain;
744     WGPUTextureDataLayout layout;
745     WGPUBuffer buffer;
746 } WGPUBufferCopyView;
747 
748 typedef struct WGPUColorStateDescriptor {
749     WGPUChainedStruct const * nextInChain;
750     WGPUTextureFormat format;
751     WGPUBlendDescriptor alphaBlend;
752     WGPUBlendDescriptor colorBlend;
753     WGPUColorWriteMaskFlags writeMask;
754 } WGPUColorStateDescriptor;
755 
756 typedef struct WGPUComputePipelineDescriptor {
757     WGPUChainedStruct const * nextInChain;
758     char const * label;
759     WGPUPipelineLayout layout;
760     WGPUProgrammableStageDescriptor computeStage;
761 } WGPUComputePipelineDescriptor;
762 
763 typedef struct WGPUDepthStencilStateDescriptor {
764     WGPUChainedStruct const * nextInChain;
765     WGPUTextureFormat format;
766     bool depthWriteEnabled;
767     WGPUCompareFunction depthCompare;
768     WGPUStencilStateFaceDescriptor stencilFront;
769     WGPUStencilStateFaceDescriptor stencilBack;
770     uint32_t stencilReadMask;
771     uint32_t stencilWriteMask;
772 } WGPUDepthStencilStateDescriptor;
773 
774 typedef struct WGPURenderPassColorAttachmentDescriptor {
775     WGPUTextureView attachment;
776     WGPUTextureView resolveTarget;
777     WGPULoadOp loadOp;
778     WGPUStoreOp storeOp;
779     WGPUColor clearColor;
780 } WGPURenderPassColorAttachmentDescriptor;
781 
782 typedef struct WGPUTextureCopyView {
783     WGPUChainedStruct const * nextInChain;
784     WGPUTexture texture;
785     uint32_t mipLevel;
786     WGPUOrigin3D origin;
787 } WGPUTextureCopyView;
788 
789 typedef struct WGPUTextureDescriptor {
790     WGPUChainedStruct const * nextInChain;
791     char const * label;
792     WGPUTextureUsageFlags usage;
793     WGPUTextureDimension dimension;
794     WGPUExtent3D size;
795     WGPUTextureFormat format;
796     uint32_t mipLevelCount;
797     uint32_t sampleCount;
798 } WGPUTextureDescriptor;
799 
800 typedef struct WGPUVertexBufferLayoutDescriptor {
801     uint64_t arrayStride;
802     WGPUInputStepMode stepMode;
803     uint32_t attributeCount;
804     WGPUVertexAttributeDescriptor const * attributes;
805 } WGPUVertexBufferLayoutDescriptor;
806 
807 typedef struct WGPURenderPassDescriptor {
808     WGPUChainedStruct const * nextInChain;
809     char const * label;
810     uint32_t colorAttachmentCount;
811     WGPURenderPassColorAttachmentDescriptor const * colorAttachments;
812     WGPURenderPassDepthStencilAttachmentDescriptor const * depthStencilAttachment;
813     WGPUQuerySet occlusionQuerySet;
814 } WGPURenderPassDescriptor;
815 
816 typedef struct WGPUVertexStateDescriptor {
817     WGPUChainedStruct const * nextInChain;
818     WGPUIndexFormat indexFormat;
819     uint32_t vertexBufferCount;
820     WGPUVertexBufferLayoutDescriptor const * vertexBuffers;
821 } WGPUVertexStateDescriptor;
822 
823 typedef struct WGPURenderPipelineDescriptor {
824     WGPUChainedStruct const * nextInChain;
825     char const * label;
826     WGPUPipelineLayout layout;
827     WGPUProgrammableStageDescriptor vertexStage;
828     WGPUProgrammableStageDescriptor const * fragmentStage;
829     WGPUVertexStateDescriptor const * vertexState;
830     WGPUPrimitiveTopology primitiveTopology;
831     WGPURasterizationStateDescriptor const * rasterizationState;
832     uint32_t sampleCount;
833     WGPUDepthStencilStateDescriptor const * depthStencilState;
834     uint32_t colorStateCount;
835     WGPUColorStateDescriptor const * colorStates;
836     uint32_t sampleMask;
837     bool alphaToCoverageEnabled;
838 } WGPURenderPipelineDescriptor;
839 
840 
841 #ifdef __cplusplus
842 extern "C" {
843 #endif
844 
845 typedef void (*WGPUBufferMapCallback)(WGPUBufferMapAsyncStatus status, void * userdata);
846 typedef void (*WGPUDeviceLostCallback)(char const * message, void * userdata);
847 typedef void (*WGPUErrorCallback)(WGPUErrorType type, char const * message, void * userdata);
848 typedef void (*WGPUFenceOnCompletionCallback)(WGPUFenceCompletionStatus status, void * userdata);
849 typedef void (*WGPURequestAdapterCallback)(WGPUAdapter result, void * userdata);
850 typedef void (*WGPURequestDeviceCallback)(WGPUDevice result, void * userdata);
851 typedef void (*WGPUSurfaceGetPreferredFormatCallback)(WGPUTextureFormat format, void * userdata);
852 
853 typedef void (*WGPUProc)(void);
854 
855 #if !defined(WGPU_SKIP_PROCS)
856 
857 typedef WGPUInstance (*WGPUProcCreateInstance)(WGPUInstanceDescriptor const * descriptor);
858 typedef WGPUProc (*WGPUProcGetProcAddress)(WGPUDevice device, char const * procName);
859 
860 // Procs of Adapter
861 typedef void (*WGPUProcAdapterGetProperties)(WGPUAdapter adapter, WGPUAdapterProperties * properties);
862 typedef void (*WGPUProcAdapterRequestDevice)(WGPUAdapter adapter, WGPUDeviceDescriptor const * descriptor, WGPURequestDeviceCallback callback, void * userdata);
863 
864 // Procs of BindGroup
865 typedef void (*WGPUProcBindGroupReference)(WGPUBindGroup bindGroup);
866 typedef void (*WGPUProcBindGroupRelease)(WGPUBindGroup bindGroup);
867 
868 // Procs of BindGroupLayout
869 typedef void (*WGPUProcBindGroupLayoutReference)(WGPUBindGroupLayout bindGroupLayout);
870 typedef void (*WGPUProcBindGroupLayoutRelease)(WGPUBindGroupLayout bindGroupLayout);
871 
872 // Procs of Buffer
873 typedef void (*WGPUProcBufferDestroy)(WGPUBuffer buffer);
874 typedef void const * (*WGPUProcBufferGetConstMappedRange)(WGPUBuffer buffer, size_t offset, size_t size);
875 typedef void * (*WGPUProcBufferGetMappedRange)(WGPUBuffer buffer, size_t offset, size_t size);
876 typedef void (*WGPUProcBufferMapAsync)(WGPUBuffer buffer, WGPUMapModeFlags mode, size_t offset, size_t size, WGPUBufferMapCallback callback, void * userdata);
877 typedef void (*WGPUProcBufferUnmap)(WGPUBuffer buffer);
878 typedef void (*WGPUProcBufferReference)(WGPUBuffer buffer);
879 typedef void (*WGPUProcBufferRelease)(WGPUBuffer buffer);
880 
881 // Procs of CommandBuffer
882 typedef void (*WGPUProcCommandBufferReference)(WGPUCommandBuffer commandBuffer);
883 typedef void (*WGPUProcCommandBufferRelease)(WGPUCommandBuffer commandBuffer);
884 
885 // Procs of CommandEncoder
886 typedef WGPUComputePassEncoder (*WGPUProcCommandEncoderBeginComputePass)(WGPUCommandEncoder commandEncoder, WGPUComputePassDescriptor const * descriptor);
887 typedef WGPURenderPassEncoder (*WGPUProcCommandEncoderBeginRenderPass)(WGPUCommandEncoder commandEncoder, WGPURenderPassDescriptor const * descriptor);
888 typedef void (*WGPUProcCommandEncoderCopyBufferToBuffer)(WGPUCommandEncoder commandEncoder, WGPUBuffer source, uint64_t sourceOffset, WGPUBuffer destination, uint64_t destinationOffset, uint64_t size);
889 typedef void (*WGPUProcCommandEncoderCopyBufferToTexture)(WGPUCommandEncoder commandEncoder, WGPUBufferCopyView const * source, WGPUTextureCopyView const * destination, WGPUExtent3D const * copySize);
890 typedef void (*WGPUProcCommandEncoderCopyTextureToBuffer)(WGPUCommandEncoder commandEncoder, WGPUTextureCopyView const * source, WGPUBufferCopyView const * destination, WGPUExtent3D const * copySize);
891 typedef void (*WGPUProcCommandEncoderCopyTextureToTexture)(WGPUCommandEncoder commandEncoder, WGPUTextureCopyView const * source, WGPUTextureCopyView const * destination, WGPUExtent3D const * copySize);
892 typedef WGPUCommandBuffer (*WGPUProcCommandEncoderFinish)(WGPUCommandEncoder commandEncoder, WGPUCommandBufferDescriptor const * descriptor);
893 typedef void (*WGPUProcCommandEncoderInsertDebugMarker)(WGPUCommandEncoder commandEncoder, char const * markerLabel);
894 typedef void (*WGPUProcCommandEncoderPopDebugGroup)(WGPUCommandEncoder commandEncoder);
895 typedef void (*WGPUProcCommandEncoderPushDebugGroup)(WGPUCommandEncoder commandEncoder, char const * groupLabel);
896 typedef void (*WGPUProcCommandEncoderResolveQuerySet)(WGPUCommandEncoder commandEncoder, WGPUQuerySet querySet, uint32_t firstQuery, uint32_t queryCount, WGPUBuffer destination, uint64_t destinationOffset);
897 typedef void (*WGPUProcCommandEncoderWriteTimestamp)(WGPUCommandEncoder commandEncoder, WGPUQuerySet querySet, uint32_t queryIndex);
898 typedef void (*WGPUProcCommandEncoderReference)(WGPUCommandEncoder commandEncoder);
899 typedef void (*WGPUProcCommandEncoderRelease)(WGPUCommandEncoder commandEncoder);
900 
901 // Procs of ComputePassEncoder
902 typedef void (*WGPUProcComputePassEncoderBeginPipelineStatisticsQuery)(WGPUComputePassEncoder computePassEncoder, WGPUQuerySet querySet, uint32_t queryIndex);
903 typedef void (*WGPUProcComputePassEncoderDispatch)(WGPUComputePassEncoder computePassEncoder, uint32_t x, uint32_t y, uint32_t z);
904 typedef void (*WGPUProcComputePassEncoderDispatchIndirect)(WGPUComputePassEncoder computePassEncoder, WGPUBuffer indirectBuffer, uint64_t indirectOffset);
905 typedef void (*WGPUProcComputePassEncoderEndPass)(WGPUComputePassEncoder computePassEncoder);
906 typedef void (*WGPUProcComputePassEncoderEndPipelineStatisticsQuery)(WGPUComputePassEncoder computePassEncoder);
907 typedef void (*WGPUProcComputePassEncoderInsertDebugMarker)(WGPUComputePassEncoder computePassEncoder, char const * markerLabel);
908 typedef void (*WGPUProcComputePassEncoderPopDebugGroup)(WGPUComputePassEncoder computePassEncoder);
909 typedef void (*WGPUProcComputePassEncoderPushDebugGroup)(WGPUComputePassEncoder computePassEncoder, char const * groupLabel);
910 typedef void (*WGPUProcComputePassEncoderSetBindGroup)(WGPUComputePassEncoder computePassEncoder, uint32_t groupIndex, WGPUBindGroup group, uint32_t dynamicOffsetCount, uint32_t const * dynamicOffsets);
911 typedef void (*WGPUProcComputePassEncoderSetPipeline)(WGPUComputePassEncoder computePassEncoder, WGPUComputePipeline pipeline);
912 typedef void (*WGPUProcComputePassEncoderWriteTimestamp)(WGPUComputePassEncoder computePassEncoder, WGPUQuerySet querySet, uint32_t queryIndex);
913 typedef void (*WGPUProcComputePassEncoderReference)(WGPUComputePassEncoder computePassEncoder);
914 typedef void (*WGPUProcComputePassEncoderRelease)(WGPUComputePassEncoder computePassEncoder);
915 
916 // Procs of ComputePipeline
917 typedef WGPUBindGroupLayout (*WGPUProcComputePipelineGetBindGroupLayout)(WGPUComputePipeline computePipeline, uint32_t groupIndex);
918 typedef void (*WGPUProcComputePipelineReference)(WGPUComputePipeline computePipeline);
919 typedef void (*WGPUProcComputePipelineRelease)(WGPUComputePipeline computePipeline);
920 
921 // Procs of Device
922 typedef WGPUBindGroup (*WGPUProcDeviceCreateBindGroup)(WGPUDevice device, WGPUBindGroupDescriptor const * descriptor);
923 typedef WGPUBindGroupLayout (*WGPUProcDeviceCreateBindGroupLayout)(WGPUDevice device, WGPUBindGroupLayoutDescriptor const * descriptor);
924 typedef WGPUBuffer (*WGPUProcDeviceCreateBuffer)(WGPUDevice device, WGPUBufferDescriptor const * descriptor);
925 typedef WGPUCommandEncoder (*WGPUProcDeviceCreateCommandEncoder)(WGPUDevice device, WGPUCommandEncoderDescriptor const * descriptor);
926 typedef WGPUComputePipeline (*WGPUProcDeviceCreateComputePipeline)(WGPUDevice device, WGPUComputePipelineDescriptor const * descriptor);
927 typedef WGPUPipelineLayout (*WGPUProcDeviceCreatePipelineLayout)(WGPUDevice device, WGPUPipelineLayoutDescriptor const * descriptor);
928 typedef WGPUQuerySet (*WGPUProcDeviceCreateQuerySet)(WGPUDevice device, WGPUQuerySetDescriptor const * descriptor);
929 typedef WGPURenderBundleEncoder (*WGPUProcDeviceCreateRenderBundleEncoder)(WGPUDevice device, WGPURenderBundleEncoderDescriptor const * descriptor);
930 typedef WGPURenderPipeline (*WGPUProcDeviceCreateRenderPipeline)(WGPUDevice device, WGPURenderPipelineDescriptor const * descriptor);
931 typedef WGPUSampler (*WGPUProcDeviceCreateSampler)(WGPUDevice device, WGPUSamplerDescriptor const * descriptor);
932 typedef WGPUShaderModule (*WGPUProcDeviceCreateShaderModule)(WGPUDevice device, WGPUShaderModuleDescriptor const * descriptor);
933 typedef WGPUSwapChain (*WGPUProcDeviceCreateSwapChain)(WGPUDevice device, WGPUSurface surface, WGPUSwapChainDescriptor const * descriptor);
934 typedef WGPUTexture (*WGPUProcDeviceCreateTexture)(WGPUDevice device, WGPUTextureDescriptor const * descriptor);
935 typedef WGPUQueue (*WGPUProcDeviceGetDefaultQueue)(WGPUDevice device);
936 typedef bool (*WGPUProcDevicePopErrorScope)(WGPUDevice device, WGPUErrorCallback callback, void * userdata);
937 typedef void (*WGPUProcDevicePushErrorScope)(WGPUDevice device, WGPUErrorFilter filter);
938 typedef void (*WGPUProcDeviceSetDeviceLostCallback)(WGPUDevice device, WGPUDeviceLostCallback callback, void * userdata);
939 typedef void (*WGPUProcDeviceSetUncapturedErrorCallback)(WGPUDevice device, WGPUErrorCallback callback, void * userdata);
940 typedef void (*WGPUProcDeviceReference)(WGPUDevice device);
941 typedef void (*WGPUProcDeviceRelease)(WGPUDevice device);
942 
943 // Procs of Fence
944 typedef uint64_t (*WGPUProcFenceGetCompletedValue)(WGPUFence fence);
945 typedef void (*WGPUProcFenceOnCompletion)(WGPUFence fence, uint64_t value, WGPUFenceOnCompletionCallback callback, void * userdata);
946 typedef void (*WGPUProcFenceReference)(WGPUFence fence);
947 typedef void (*WGPUProcFenceRelease)(WGPUFence fence);
948 
949 // Procs of Instance
950 typedef WGPUSurface (*WGPUProcInstanceCreateSurface)(WGPUInstance instance, WGPUSurfaceDescriptor const * descriptor);
951 typedef void (*WGPUProcInstanceProcessEvents)(WGPUInstance instance);
952 typedef void (*WGPUProcInstanceRequestAdapter)(WGPUInstance instance, WGPURequestAdapterOptions const * options, WGPURequestAdapterCallback callback, void * userdata);
953 typedef void (*WGPUProcInstanceReference)(WGPUInstance instance);
954 typedef void (*WGPUProcInstanceRelease)(WGPUInstance instance);
955 
956 // Procs of PipelineLayout
957 typedef void (*WGPUProcPipelineLayoutReference)(WGPUPipelineLayout pipelineLayout);
958 typedef void (*WGPUProcPipelineLayoutRelease)(WGPUPipelineLayout pipelineLayout);
959 
960 // Procs of QuerySet
961 typedef void (*WGPUProcQuerySetDestroy)(WGPUQuerySet querySet);
962 typedef void (*WGPUProcQuerySetReference)(WGPUQuerySet querySet);
963 typedef void (*WGPUProcQuerySetRelease)(WGPUQuerySet querySet);
964 
965 // Procs of Queue
966 typedef WGPUFence (*WGPUProcQueueCreateFence)(WGPUQueue queue, WGPUFenceDescriptor const * descriptor);
967 typedef void (*WGPUProcQueueSignal)(WGPUQueue queue, WGPUFence fence, uint64_t signalValue);
968 typedef void (*WGPUProcQueueSubmit)(WGPUQueue queue, uint32_t commandCount, WGPUCommandBuffer const * commands);
969 typedef void (*WGPUProcQueueWriteBuffer)(WGPUQueue queue, WGPUBuffer buffer, uint64_t bufferOffset, void const * data, size_t size);
970 typedef void (*WGPUProcQueueWriteTexture)(WGPUQueue queue, WGPUTextureCopyView const * destination, void const * data, size_t dataSize, WGPUTextureDataLayout const * dataLayout, WGPUExtent3D const * writeSize);
971 typedef void (*WGPUProcQueueReference)(WGPUQueue queue);
972 typedef void (*WGPUProcQueueRelease)(WGPUQueue queue);
973 
974 // Procs of RenderBundle
975 typedef void (*WGPUProcRenderBundleReference)(WGPURenderBundle renderBundle);
976 typedef void (*WGPUProcRenderBundleRelease)(WGPURenderBundle renderBundle);
977 
978 // Procs of RenderBundleEncoder
979 typedef void (*WGPUProcRenderBundleEncoderDraw)(WGPURenderBundleEncoder renderBundleEncoder, uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance);
980 typedef void (*WGPUProcRenderBundleEncoderDrawIndexed)(WGPURenderBundleEncoder renderBundleEncoder, uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t baseVertex, uint32_t firstInstance);
981 typedef void (*WGPUProcRenderBundleEncoderDrawIndexedIndirect)(WGPURenderBundleEncoder renderBundleEncoder, WGPUBuffer indirectBuffer, uint64_t indirectOffset);
982 typedef void (*WGPUProcRenderBundleEncoderDrawIndirect)(WGPURenderBundleEncoder renderBundleEncoder, WGPUBuffer indirectBuffer, uint64_t indirectOffset);
983 typedef WGPURenderBundle (*WGPUProcRenderBundleEncoderFinish)(WGPURenderBundleEncoder renderBundleEncoder, WGPURenderBundleDescriptor const * descriptor);
984 typedef void (*WGPUProcRenderBundleEncoderInsertDebugMarker)(WGPURenderBundleEncoder renderBundleEncoder, char const * markerLabel);
985 typedef void (*WGPUProcRenderBundleEncoderPopDebugGroup)(WGPURenderBundleEncoder renderBundleEncoder);
986 typedef void (*WGPUProcRenderBundleEncoderPushDebugGroup)(WGPURenderBundleEncoder renderBundleEncoder, char const * groupLabel);
987 typedef void (*WGPUProcRenderBundleEncoderSetBindGroup)(WGPURenderBundleEncoder renderBundleEncoder, uint32_t groupIndex, WGPUBindGroup group, uint32_t dynamicOffsetCount, uint32_t const * dynamicOffsets);
988 typedef void (*WGPUProcRenderBundleEncoderSetIndexBuffer)(WGPURenderBundleEncoder renderBundleEncoder, WGPUBuffer buffer, uint64_t offset, uint64_t size);
989 typedef void (*WGPUProcRenderBundleEncoderSetPipeline)(WGPURenderBundleEncoder renderBundleEncoder, WGPURenderPipeline pipeline);
990 typedef void (*WGPUProcRenderBundleEncoderSetVertexBuffer)(WGPURenderBundleEncoder renderBundleEncoder, uint32_t slot, WGPUBuffer buffer, uint64_t offset, uint64_t size);
991 typedef void (*WGPUProcRenderBundleEncoderReference)(WGPURenderBundleEncoder renderBundleEncoder);
992 typedef void (*WGPUProcRenderBundleEncoderRelease)(WGPURenderBundleEncoder renderBundleEncoder);
993 
994 // Procs of RenderPassEncoder
995 typedef void (*WGPUProcRenderPassEncoderBeginOcclusionQuery)(WGPURenderPassEncoder renderPassEncoder, uint32_t queryIndex);
996 typedef void (*WGPUProcRenderPassEncoderBeginPipelineStatisticsQuery)(WGPURenderPassEncoder renderPassEncoder, WGPUQuerySet querySet, uint32_t queryIndex);
997 typedef void (*WGPUProcRenderPassEncoderDraw)(WGPURenderPassEncoder renderPassEncoder, uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance);
998 typedef void (*WGPUProcRenderPassEncoderDrawIndexed)(WGPURenderPassEncoder renderPassEncoder, uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t baseVertex, uint32_t firstInstance);
999 typedef void (*WGPUProcRenderPassEncoderDrawIndexedIndirect)(WGPURenderPassEncoder renderPassEncoder, WGPUBuffer indirectBuffer, uint64_t indirectOffset);
1000 typedef void (*WGPUProcRenderPassEncoderDrawIndirect)(WGPURenderPassEncoder renderPassEncoder, WGPUBuffer indirectBuffer, uint64_t indirectOffset);
1001 typedef void (*WGPUProcRenderPassEncoderEndOcclusionQuery)(WGPURenderPassEncoder renderPassEncoder);
1002 typedef void (*WGPUProcRenderPassEncoderEndPass)(WGPURenderPassEncoder renderPassEncoder);
1003 typedef void (*WGPUProcRenderPassEncoderEndPipelineStatisticsQuery)(WGPURenderPassEncoder renderPassEncoder);
1004 typedef void (*WGPUProcRenderPassEncoderExecuteBundles)(WGPURenderPassEncoder renderPassEncoder, uint32_t bundlesCount, WGPURenderBundle const * bundles);
1005 typedef void (*WGPUProcRenderPassEncoderInsertDebugMarker)(WGPURenderPassEncoder renderPassEncoder, char const * markerLabel);
1006 typedef void (*WGPUProcRenderPassEncoderPopDebugGroup)(WGPURenderPassEncoder renderPassEncoder);
1007 typedef void (*WGPUProcRenderPassEncoderPushDebugGroup)(WGPURenderPassEncoder renderPassEncoder, char const * groupLabel);
1008 typedef void (*WGPUProcRenderPassEncoderSetBindGroup)(WGPURenderPassEncoder renderPassEncoder, uint32_t groupIndex, WGPUBindGroup group, uint32_t dynamicOffsetCount, uint32_t const * dynamicOffsets);
1009 typedef void (*WGPUProcRenderPassEncoderSetBlendColor)(WGPURenderPassEncoder renderPassEncoder, WGPUColor const * color);
1010 typedef void (*WGPUProcRenderPassEncoderSetIndexBuffer)(WGPURenderPassEncoder renderPassEncoder, WGPUBuffer buffer, uint64_t offset, uint64_t size);
1011 typedef void (*WGPUProcRenderPassEncoderSetPipeline)(WGPURenderPassEncoder renderPassEncoder, WGPURenderPipeline pipeline);
1012 typedef void (*WGPUProcRenderPassEncoderSetScissorRect)(WGPURenderPassEncoder renderPassEncoder, uint32_t x, uint32_t y, uint32_t width, uint32_t height);
1013 typedef void (*WGPUProcRenderPassEncoderSetStencilReference)(WGPURenderPassEncoder renderPassEncoder, uint32_t reference);
1014 typedef void (*WGPUProcRenderPassEncoderSetVertexBuffer)(WGPURenderPassEncoder renderPassEncoder, uint32_t slot, WGPUBuffer buffer, uint64_t offset, uint64_t size);
1015 typedef void (*WGPUProcRenderPassEncoderSetViewport)(WGPURenderPassEncoder renderPassEncoder, float x, float y, float width, float height, float minDepth, float maxDepth);
1016 typedef void (*WGPUProcRenderPassEncoderWriteTimestamp)(WGPURenderPassEncoder renderPassEncoder, WGPUQuerySet querySet, uint32_t queryIndex);
1017 typedef void (*WGPUProcRenderPassEncoderReference)(WGPURenderPassEncoder renderPassEncoder);
1018 typedef void (*WGPUProcRenderPassEncoderRelease)(WGPURenderPassEncoder renderPassEncoder);
1019 
1020 // Procs of RenderPipeline
1021 typedef WGPUBindGroupLayout (*WGPUProcRenderPipelineGetBindGroupLayout)(WGPURenderPipeline renderPipeline, uint32_t groupIndex);
1022 typedef void (*WGPUProcRenderPipelineReference)(WGPURenderPipeline renderPipeline);
1023 typedef void (*WGPUProcRenderPipelineRelease)(WGPURenderPipeline renderPipeline);
1024 
1025 // Procs of Sampler
1026 typedef void (*WGPUProcSamplerReference)(WGPUSampler sampler);
1027 typedef void (*WGPUProcSamplerRelease)(WGPUSampler sampler);
1028 
1029 // Procs of ShaderModule
1030 typedef void (*WGPUProcShaderModuleReference)(WGPUShaderModule shaderModule);
1031 typedef void (*WGPUProcShaderModuleRelease)(WGPUShaderModule shaderModule);
1032 
1033 // Procs of Surface
1034 typedef void (*WGPUProcSurfaceGetPreferredFormat)(WGPUSurface surface, WGPUAdapter adapter, WGPUSurfaceGetPreferredFormatCallback callback, void * userdata);
1035 typedef void (*WGPUProcSurfaceReference)(WGPUSurface surface);
1036 typedef void (*WGPUProcSurfaceRelease)(WGPUSurface surface);
1037 
1038 // Procs of SwapChain
1039 typedef WGPUTextureView (*WGPUProcSwapChainGetCurrentTextureView)(WGPUSwapChain swapChain);
1040 typedef void (*WGPUProcSwapChainPresent)(WGPUSwapChain swapChain);
1041 typedef void (*WGPUProcSwapChainReference)(WGPUSwapChain swapChain);
1042 typedef void (*WGPUProcSwapChainRelease)(WGPUSwapChain swapChain);
1043 
1044 // Procs of Texture
1045 typedef WGPUTextureView (*WGPUProcTextureCreateView)(WGPUTexture texture, WGPUTextureViewDescriptor const * descriptor);
1046 typedef void (*WGPUProcTextureDestroy)(WGPUTexture texture);
1047 typedef void (*WGPUProcTextureReference)(WGPUTexture texture);
1048 typedef void (*WGPUProcTextureRelease)(WGPUTexture texture);
1049 
1050 // Procs of TextureView
1051 typedef void (*WGPUProcTextureViewReference)(WGPUTextureView textureView);
1052 typedef void (*WGPUProcTextureViewRelease)(WGPUTextureView textureView);
1053 
1054 #endif  // !defined(WGPU_SKIP_PROCS)
1055 
1056 #if !defined(WGPU_SKIP_DECLARATIONS)
1057 
1058 WGPU_EXPORT WGPUInstance wgpuCreateInstance(WGPUInstanceDescriptor const * descriptor);
1059 WGPU_EXPORT WGPUProc wgpuGetProcAddress(WGPUDevice device, char const * procName);
1060 
1061 // Methods of Adapter
1062 WGPU_EXPORT void wgpuAdapterGetProperties(WGPUAdapter adapter, WGPUAdapterProperties * properties);
1063 WGPU_EXPORT void wgpuAdapterRequestDevice(WGPUAdapter adapter, WGPUDeviceDescriptor const * descriptor, WGPURequestDeviceCallback callback, void * userdata);
1064 
1065 // Methods of BindGroup
1066 WGPU_EXPORT void wgpuBindGroupReference(WGPUBindGroup bindGroup);
1067 WGPU_EXPORT void wgpuBindGroupRelease(WGPUBindGroup bindGroup);
1068 
1069 // Methods of BindGroupLayout
1070 WGPU_EXPORT void wgpuBindGroupLayoutReference(WGPUBindGroupLayout bindGroupLayout);
1071 WGPU_EXPORT void wgpuBindGroupLayoutRelease(WGPUBindGroupLayout bindGroupLayout);
1072 
1073 // Methods of Buffer
1074 WGPU_EXPORT void wgpuBufferDestroy(WGPUBuffer buffer);
1075 WGPU_EXPORT void const * wgpuBufferGetConstMappedRange(WGPUBuffer buffer, size_t offset, size_t size);
1076 WGPU_EXPORT void * wgpuBufferGetMappedRange(WGPUBuffer buffer, size_t offset, size_t size);
1077 WGPU_EXPORT void wgpuBufferMapAsync(WGPUBuffer buffer, WGPUMapModeFlags mode, size_t offset, size_t size, WGPUBufferMapCallback callback, void * userdata);
1078 WGPU_EXPORT void wgpuBufferUnmap(WGPUBuffer buffer);
1079 WGPU_EXPORT void wgpuBufferReference(WGPUBuffer buffer);
1080 WGPU_EXPORT void wgpuBufferRelease(WGPUBuffer buffer);
1081 
1082 // Methods of CommandBuffer
1083 WGPU_EXPORT void wgpuCommandBufferReference(WGPUCommandBuffer commandBuffer);
1084 WGPU_EXPORT void wgpuCommandBufferRelease(WGPUCommandBuffer commandBuffer);
1085 
1086 // Methods of CommandEncoder
1087 WGPU_EXPORT WGPUComputePassEncoder wgpuCommandEncoderBeginComputePass(WGPUCommandEncoder commandEncoder, WGPUComputePassDescriptor const * descriptor);
1088 WGPU_EXPORT WGPURenderPassEncoder wgpuCommandEncoderBeginRenderPass(WGPUCommandEncoder commandEncoder, WGPURenderPassDescriptor const * descriptor);
1089 WGPU_EXPORT void wgpuCommandEncoderCopyBufferToBuffer(WGPUCommandEncoder commandEncoder, WGPUBuffer source, uint64_t sourceOffset, WGPUBuffer destination, uint64_t destinationOffset, uint64_t size);
1090 WGPU_EXPORT void wgpuCommandEncoderCopyBufferToTexture(WGPUCommandEncoder commandEncoder, WGPUBufferCopyView const * source, WGPUTextureCopyView const * destination, WGPUExtent3D const * copySize);
1091 WGPU_EXPORT void wgpuCommandEncoderCopyTextureToBuffer(WGPUCommandEncoder commandEncoder, WGPUTextureCopyView const * source, WGPUBufferCopyView const * destination, WGPUExtent3D const * copySize);
1092 WGPU_EXPORT void wgpuCommandEncoderCopyTextureToTexture(WGPUCommandEncoder commandEncoder, WGPUTextureCopyView const * source, WGPUTextureCopyView const * destination, WGPUExtent3D const * copySize);
1093 WGPU_EXPORT WGPUCommandBuffer wgpuCommandEncoderFinish(WGPUCommandEncoder commandEncoder, WGPUCommandBufferDescriptor const * descriptor);
1094 WGPU_EXPORT void wgpuCommandEncoderInsertDebugMarker(WGPUCommandEncoder commandEncoder, char const * markerLabel);
1095 WGPU_EXPORT void wgpuCommandEncoderPopDebugGroup(WGPUCommandEncoder commandEncoder);
1096 WGPU_EXPORT void wgpuCommandEncoderPushDebugGroup(WGPUCommandEncoder commandEncoder, char const * groupLabel);
1097 WGPU_EXPORT void wgpuCommandEncoderResolveQuerySet(WGPUCommandEncoder commandEncoder, WGPUQuerySet querySet, uint32_t firstQuery, uint32_t queryCount, WGPUBuffer destination, uint64_t destinationOffset);
1098 WGPU_EXPORT void wgpuCommandEncoderWriteTimestamp(WGPUCommandEncoder commandEncoder, WGPUQuerySet querySet, uint32_t queryIndex);
1099 WGPU_EXPORT void wgpuCommandEncoderReference(WGPUCommandEncoder commandEncoder);
1100 WGPU_EXPORT void wgpuCommandEncoderRelease(WGPUCommandEncoder commandEncoder);
1101 
1102 // Methods of ComputePassEncoder
1103 WGPU_EXPORT void wgpuComputePassEncoderBeginPipelineStatisticsQuery(WGPUComputePassEncoder computePassEncoder, WGPUQuerySet querySet, uint32_t queryIndex);
1104 WGPU_EXPORT void wgpuComputePassEncoderDispatch(WGPUComputePassEncoder computePassEncoder, uint32_t x, uint32_t y, uint32_t z);
1105 WGPU_EXPORT void wgpuComputePassEncoderDispatchIndirect(WGPUComputePassEncoder computePassEncoder, WGPUBuffer indirectBuffer, uint64_t indirectOffset);
1106 WGPU_EXPORT void wgpuComputePassEncoderEndPass(WGPUComputePassEncoder computePassEncoder);
1107 WGPU_EXPORT void wgpuComputePassEncoderEndPipelineStatisticsQuery(WGPUComputePassEncoder computePassEncoder);
1108 WGPU_EXPORT void wgpuComputePassEncoderInsertDebugMarker(WGPUComputePassEncoder computePassEncoder, char const * markerLabel);
1109 WGPU_EXPORT void wgpuComputePassEncoderPopDebugGroup(WGPUComputePassEncoder computePassEncoder);
1110 WGPU_EXPORT void wgpuComputePassEncoderPushDebugGroup(WGPUComputePassEncoder computePassEncoder, char const * groupLabel);
1111 WGPU_EXPORT void wgpuComputePassEncoderSetBindGroup(WGPUComputePassEncoder computePassEncoder, uint32_t groupIndex, WGPUBindGroup group, uint32_t dynamicOffsetCount, uint32_t const * dynamicOffsets);
1112 WGPU_EXPORT void wgpuComputePassEncoderSetPipeline(WGPUComputePassEncoder computePassEncoder, WGPUComputePipeline pipeline);
1113 WGPU_EXPORT void wgpuComputePassEncoderWriteTimestamp(WGPUComputePassEncoder computePassEncoder, WGPUQuerySet querySet, uint32_t queryIndex);
1114 WGPU_EXPORT void wgpuComputePassEncoderReference(WGPUComputePassEncoder computePassEncoder);
1115 WGPU_EXPORT void wgpuComputePassEncoderRelease(WGPUComputePassEncoder computePassEncoder);
1116 
1117 // Methods of ComputePipeline
1118 WGPU_EXPORT WGPUBindGroupLayout wgpuComputePipelineGetBindGroupLayout(WGPUComputePipeline computePipeline, uint32_t groupIndex);
1119 WGPU_EXPORT void wgpuComputePipelineReference(WGPUComputePipeline computePipeline);
1120 WGPU_EXPORT void wgpuComputePipelineRelease(WGPUComputePipeline computePipeline);
1121 
1122 // Methods of Device
1123 WGPU_EXPORT WGPUBindGroup wgpuDeviceCreateBindGroup(WGPUDevice device, WGPUBindGroupDescriptor const * descriptor);
1124 WGPU_EXPORT WGPUBindGroupLayout wgpuDeviceCreateBindGroupLayout(WGPUDevice device, WGPUBindGroupLayoutDescriptor const * descriptor);
1125 WGPU_EXPORT WGPUBuffer wgpuDeviceCreateBuffer(WGPUDevice device, WGPUBufferDescriptor const * descriptor);
1126 WGPU_EXPORT WGPUCommandEncoder wgpuDeviceCreateCommandEncoder(WGPUDevice device, WGPUCommandEncoderDescriptor const * descriptor);
1127 WGPU_EXPORT WGPUComputePipeline wgpuDeviceCreateComputePipeline(WGPUDevice device, WGPUComputePipelineDescriptor const * descriptor);
1128 WGPU_EXPORT WGPUPipelineLayout wgpuDeviceCreatePipelineLayout(WGPUDevice device, WGPUPipelineLayoutDescriptor const * descriptor);
1129 WGPU_EXPORT WGPUQuerySet wgpuDeviceCreateQuerySet(WGPUDevice device, WGPUQuerySetDescriptor const * descriptor);
1130 WGPU_EXPORT WGPURenderBundleEncoder wgpuDeviceCreateRenderBundleEncoder(WGPUDevice device, WGPURenderBundleEncoderDescriptor const * descriptor);
1131 WGPU_EXPORT WGPURenderPipeline wgpuDeviceCreateRenderPipeline(WGPUDevice device, WGPURenderPipelineDescriptor const * descriptor);
1132 WGPU_EXPORT WGPUSampler wgpuDeviceCreateSampler(WGPUDevice device, WGPUSamplerDescriptor const * descriptor);
1133 WGPU_EXPORT WGPUShaderModule wgpuDeviceCreateShaderModule(WGPUDevice device, WGPUShaderModuleDescriptor const * descriptor);
1134 WGPU_EXPORT WGPUSwapChain wgpuDeviceCreateSwapChain(WGPUDevice device, WGPUSurface surface, WGPUSwapChainDescriptor const * descriptor);
1135 WGPU_EXPORT WGPUTexture wgpuDeviceCreateTexture(WGPUDevice device, WGPUTextureDescriptor const * descriptor);
1136 WGPU_EXPORT WGPUQueue wgpuDeviceGetDefaultQueue(WGPUDevice device);
1137 WGPU_EXPORT bool wgpuDevicePopErrorScope(WGPUDevice device, WGPUErrorCallback callback, void * userdata);
1138 WGPU_EXPORT void wgpuDevicePushErrorScope(WGPUDevice device, WGPUErrorFilter filter);
1139 WGPU_EXPORT void wgpuDeviceSetDeviceLostCallback(WGPUDevice device, WGPUDeviceLostCallback callback, void * userdata);
1140 WGPU_EXPORT void wgpuDeviceSetUncapturedErrorCallback(WGPUDevice device, WGPUErrorCallback callback, void * userdata);
1141 WGPU_EXPORT void wgpuDeviceReference(WGPUDevice device);
1142 WGPU_EXPORT void wgpuDeviceRelease(WGPUDevice device);
1143 
1144 // Methods of Fence
1145 WGPU_EXPORT uint64_t wgpuFenceGetCompletedValue(WGPUFence fence);
1146 WGPU_EXPORT void wgpuFenceOnCompletion(WGPUFence fence, uint64_t value, WGPUFenceOnCompletionCallback callback, void * userdata);
1147 WGPU_EXPORT void wgpuFenceReference(WGPUFence fence);
1148 WGPU_EXPORT void wgpuFenceRelease(WGPUFence fence);
1149 
1150 // Methods of Instance
1151 WGPU_EXPORT WGPUSurface wgpuInstanceCreateSurface(WGPUInstance instance, WGPUSurfaceDescriptor const * descriptor);
1152 WGPU_EXPORT void wgpuInstanceProcessEvents(WGPUInstance instance);
1153 WGPU_EXPORT void wgpuInstanceRequestAdapter(WGPUInstance instance, WGPURequestAdapterOptions const * options, WGPURequestAdapterCallback callback, void * userdata);
1154 WGPU_EXPORT void wgpuInstanceReference(WGPUInstance instance);
1155 WGPU_EXPORT void wgpuInstanceRelease(WGPUInstance instance);
1156 
1157 // Methods of PipelineLayout
1158 WGPU_EXPORT void wgpuPipelineLayoutReference(WGPUPipelineLayout pipelineLayout);
1159 WGPU_EXPORT void wgpuPipelineLayoutRelease(WGPUPipelineLayout pipelineLayout);
1160 
1161 // Methods of QuerySet
1162 WGPU_EXPORT void wgpuQuerySetDestroy(WGPUQuerySet querySet);
1163 WGPU_EXPORT void wgpuQuerySetReference(WGPUQuerySet querySet);
1164 WGPU_EXPORT void wgpuQuerySetRelease(WGPUQuerySet querySet);
1165 
1166 // Methods of Queue
1167 WGPU_EXPORT WGPUFence wgpuQueueCreateFence(WGPUQueue queue, WGPUFenceDescriptor const * descriptor);
1168 WGPU_EXPORT void wgpuQueueSignal(WGPUQueue queue, WGPUFence fence, uint64_t signalValue);
1169 WGPU_EXPORT void wgpuQueueSubmit(WGPUQueue queue, uint32_t commandCount, WGPUCommandBuffer const * commands);
1170 WGPU_EXPORT void wgpuQueueWriteBuffer(WGPUQueue queue, WGPUBuffer buffer, uint64_t bufferOffset, void const * data, size_t size);
1171 WGPU_EXPORT void wgpuQueueWriteTexture(WGPUQueue queue, WGPUTextureCopyView const * destination, void const * data, size_t dataSize, WGPUTextureDataLayout const * dataLayout, WGPUExtent3D const * writeSize);
1172 WGPU_EXPORT void wgpuQueueReference(WGPUQueue queue);
1173 WGPU_EXPORT void wgpuQueueRelease(WGPUQueue queue);
1174 
1175 // Methods of RenderBundle
1176 WGPU_EXPORT void wgpuRenderBundleReference(WGPURenderBundle renderBundle);
1177 WGPU_EXPORT void wgpuRenderBundleRelease(WGPURenderBundle renderBundle);
1178 
1179 // Methods of RenderBundleEncoder
1180 WGPU_EXPORT void wgpuRenderBundleEncoderDraw(WGPURenderBundleEncoder renderBundleEncoder, uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance);
1181 WGPU_EXPORT void wgpuRenderBundleEncoderDrawIndexed(WGPURenderBundleEncoder renderBundleEncoder, uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t baseVertex, uint32_t firstInstance);
1182 WGPU_EXPORT void wgpuRenderBundleEncoderDrawIndexedIndirect(WGPURenderBundleEncoder renderBundleEncoder, WGPUBuffer indirectBuffer, uint64_t indirectOffset);
1183 WGPU_EXPORT void wgpuRenderBundleEncoderDrawIndirect(WGPURenderBundleEncoder renderBundleEncoder, WGPUBuffer indirectBuffer, uint64_t indirectOffset);
1184 WGPU_EXPORT WGPURenderBundle wgpuRenderBundleEncoderFinish(WGPURenderBundleEncoder renderBundleEncoder, WGPURenderBundleDescriptor const * descriptor);
1185 WGPU_EXPORT void wgpuRenderBundleEncoderInsertDebugMarker(WGPURenderBundleEncoder renderBundleEncoder, char const * markerLabel);
1186 WGPU_EXPORT void wgpuRenderBundleEncoderPopDebugGroup(WGPURenderBundleEncoder renderBundleEncoder);
1187 WGPU_EXPORT void wgpuRenderBundleEncoderPushDebugGroup(WGPURenderBundleEncoder renderBundleEncoder, char const * groupLabel);
1188 WGPU_EXPORT void wgpuRenderBundleEncoderSetBindGroup(WGPURenderBundleEncoder renderBundleEncoder, uint32_t groupIndex, WGPUBindGroup group, uint32_t dynamicOffsetCount, uint32_t const * dynamicOffsets);
1189 WGPU_EXPORT void wgpuRenderBundleEncoderSetIndexBuffer(WGPURenderBundleEncoder renderBundleEncoder, WGPUBuffer buffer, uint64_t offset, uint64_t size);
1190 WGPU_EXPORT void wgpuRenderBundleEncoderSetPipeline(WGPURenderBundleEncoder renderBundleEncoder, WGPURenderPipeline pipeline);
1191 WGPU_EXPORT void wgpuRenderBundleEncoderSetVertexBuffer(WGPURenderBundleEncoder renderBundleEncoder, uint32_t slot, WGPUBuffer buffer, uint64_t offset, uint64_t size);
1192 WGPU_EXPORT void wgpuRenderBundleEncoderReference(WGPURenderBundleEncoder renderBundleEncoder);
1193 WGPU_EXPORT void wgpuRenderBundleEncoderRelease(WGPURenderBundleEncoder renderBundleEncoder);
1194 
1195 // Methods of RenderPassEncoder
1196 WGPU_EXPORT void wgpuRenderPassEncoderBeginOcclusionQuery(WGPURenderPassEncoder renderPassEncoder, uint32_t queryIndex);
1197 WGPU_EXPORT void wgpuRenderPassEncoderBeginPipelineStatisticsQuery(WGPURenderPassEncoder renderPassEncoder, WGPUQuerySet querySet, uint32_t queryIndex);
1198 WGPU_EXPORT void wgpuRenderPassEncoderDraw(WGPURenderPassEncoder renderPassEncoder, uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance);
1199 WGPU_EXPORT void wgpuRenderPassEncoderDrawIndexed(WGPURenderPassEncoder renderPassEncoder, uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t baseVertex, uint32_t firstInstance);
1200 WGPU_EXPORT void wgpuRenderPassEncoderDrawIndexedIndirect(WGPURenderPassEncoder renderPassEncoder, WGPUBuffer indirectBuffer, uint64_t indirectOffset);
1201 WGPU_EXPORT void wgpuRenderPassEncoderDrawIndirect(WGPURenderPassEncoder renderPassEncoder, WGPUBuffer indirectBuffer, uint64_t indirectOffset);
1202 WGPU_EXPORT void wgpuRenderPassEncoderEndOcclusionQuery(WGPURenderPassEncoder renderPassEncoder);
1203 WGPU_EXPORT void wgpuRenderPassEncoderEndPass(WGPURenderPassEncoder renderPassEncoder);
1204 WGPU_EXPORT void wgpuRenderPassEncoderEndPipelineStatisticsQuery(WGPURenderPassEncoder renderPassEncoder);
1205 WGPU_EXPORT void wgpuRenderPassEncoderExecuteBundles(WGPURenderPassEncoder renderPassEncoder, uint32_t bundlesCount, WGPURenderBundle const * bundles);
1206 WGPU_EXPORT void wgpuRenderPassEncoderInsertDebugMarker(WGPURenderPassEncoder renderPassEncoder, char const * markerLabel);
1207 WGPU_EXPORT void wgpuRenderPassEncoderPopDebugGroup(WGPURenderPassEncoder renderPassEncoder);
1208 WGPU_EXPORT void wgpuRenderPassEncoderPushDebugGroup(WGPURenderPassEncoder renderPassEncoder, char const * groupLabel);
1209 WGPU_EXPORT void wgpuRenderPassEncoderSetBindGroup(WGPURenderPassEncoder renderPassEncoder, uint32_t groupIndex, WGPUBindGroup group, uint32_t dynamicOffsetCount, uint32_t const * dynamicOffsets);
1210 WGPU_EXPORT void wgpuRenderPassEncoderSetBlendColor(WGPURenderPassEncoder renderPassEncoder, WGPUColor const * color);
1211 WGPU_EXPORT void wgpuRenderPassEncoderSetIndexBuffer(WGPURenderPassEncoder renderPassEncoder, WGPUBuffer buffer, uint64_t offset, uint64_t size);
1212 WGPU_EXPORT void wgpuRenderPassEncoderSetPipeline(WGPURenderPassEncoder renderPassEncoder, WGPURenderPipeline pipeline);
1213 WGPU_EXPORT void wgpuRenderPassEncoderSetScissorRect(WGPURenderPassEncoder renderPassEncoder, uint32_t x, uint32_t y, uint32_t width, uint32_t height);
1214 WGPU_EXPORT void wgpuRenderPassEncoderSetStencilReference(WGPURenderPassEncoder renderPassEncoder, uint32_t reference);
1215 WGPU_EXPORT void wgpuRenderPassEncoderSetVertexBuffer(WGPURenderPassEncoder renderPassEncoder, uint32_t slot, WGPUBuffer buffer, uint64_t offset, uint64_t size);
1216 WGPU_EXPORT void wgpuRenderPassEncoderSetViewport(WGPURenderPassEncoder renderPassEncoder, float x, float y, float width, float height, float minDepth, float maxDepth);
1217 WGPU_EXPORT void wgpuRenderPassEncoderWriteTimestamp(WGPURenderPassEncoder renderPassEncoder, WGPUQuerySet querySet, uint32_t queryIndex);
1218 WGPU_EXPORT void wgpuRenderPassEncoderReference(WGPURenderPassEncoder renderPassEncoder);
1219 WGPU_EXPORT void wgpuRenderPassEncoderRelease(WGPURenderPassEncoder renderPassEncoder);
1220 
1221 // Methods of RenderPipeline
1222 WGPU_EXPORT WGPUBindGroupLayout wgpuRenderPipelineGetBindGroupLayout(WGPURenderPipeline renderPipeline, uint32_t groupIndex);
1223 WGPU_EXPORT void wgpuRenderPipelineReference(WGPURenderPipeline renderPipeline);
1224 WGPU_EXPORT void wgpuRenderPipelineRelease(WGPURenderPipeline renderPipeline);
1225 
1226 // Methods of Sampler
1227 WGPU_EXPORT void wgpuSamplerReference(WGPUSampler sampler);
1228 WGPU_EXPORT void wgpuSamplerRelease(WGPUSampler sampler);
1229 
1230 // Methods of ShaderModule
1231 WGPU_EXPORT void wgpuShaderModuleReference(WGPUShaderModule shaderModule);
1232 WGPU_EXPORT void wgpuShaderModuleRelease(WGPUShaderModule shaderModule);
1233 
1234 // Methods of Surface
1235 WGPU_EXPORT void wgpuSurfaceGetPreferredFormat(WGPUSurface surface, WGPUAdapter adapter, WGPUSurfaceGetPreferredFormatCallback callback, void * userdata);
1236 WGPU_EXPORT void wgpuSurfaceReference(WGPUSurface surface);
1237 WGPU_EXPORT void wgpuSurfaceRelease(WGPUSurface surface);
1238 
1239 // Methods of SwapChain
1240 WGPU_EXPORT WGPUTextureView wgpuSwapChainGetCurrentTextureView(WGPUSwapChain swapChain);
1241 WGPU_EXPORT void wgpuSwapChainPresent(WGPUSwapChain swapChain);
1242 WGPU_EXPORT void wgpuSwapChainReference(WGPUSwapChain swapChain);
1243 WGPU_EXPORT void wgpuSwapChainRelease(WGPUSwapChain swapChain);
1244 
1245 // Methods of Texture
1246 WGPU_EXPORT WGPUTextureView wgpuTextureCreateView(WGPUTexture texture, WGPUTextureViewDescriptor const * descriptor);
1247 WGPU_EXPORT void wgpuTextureDestroy(WGPUTexture texture);
1248 WGPU_EXPORT void wgpuTextureReference(WGPUTexture texture);
1249 WGPU_EXPORT void wgpuTextureRelease(WGPUTexture texture);
1250 
1251 // Methods of TextureView
1252 WGPU_EXPORT void wgpuTextureViewReference(WGPUTextureView textureView);
1253 WGPU_EXPORT void wgpuTextureViewRelease(WGPUTextureView textureView);
1254 
1255 #endif  // !defined(WGPU_SKIP_DECLARATIONS)
1256 
1257 #ifdef __cplusplus
1258 } // extern "C"
1259 #endif
1260 
1261 #endif // WEBGPU_H_
1262