Engine²
Open-source game engine written in C++.
Loading...
Searching...
No Matches
webgpu.hpp
Go to the documentation of this file.
1
26
34
35#pragma once
36
37#include <webgpu/webgpu.h>
38#include <webgpu/wgpu.h>
39
40#include <cassert>
41#include <cmath>
42#include <functional>
43#include <iostream>
44#include <memory>
45#include <string_view>
46#include <vector>
47
48#if __EMSCRIPTEN__
49# include <emscripten.h>
50#endif
51
52#ifdef _MSVC_LANG
53# if _MSVC_LANG >= 202002L
54# define NO_DISCARD \
55 [[nodiscard("You should keep this handle alive for as long as the callback may get invoked.")]]
56# elif _MSVC_LANG >= 201703L
57# define NO_DISCARD [[nodiscard]]
58# else
59# define NO_DISCARD
60# endif
61#else
62# if __cplusplus >= 202002L
63# define NO_DISCARD \
64 [[nodiscard("You should keep this handle alive for as long as the callback may get invoked.")]]
65# elif __cplusplus >= 201703L
66# define NO_DISCARD [[nodiscard]]
67# else
68# define NO_DISCARD
69# endif
70#endif
71
75namespace wgpu {
76
77struct DefaultFlag {};
79
80#define HANDLE(Type) \
81 class Type { \
82 public: \
83 typedef Type S; /* S == Self */ \
84 typedef WGPU##Type W; /* W == WGPU Type */ \
85 Type() : m_raw(nullptr) {} \
86 Type(const W &w) : m_raw(w) {} \
87 operator W &() { return m_raw; } \
88 operator const W &() const { return m_raw; } \
89 operator bool() const { return m_raw != nullptr; } \
90 bool operator==(const Type &other) const { return m_raw == other.m_raw; } \
91 bool operator!=(const Type &other) const { return m_raw != other.m_raw; } \
92 bool operator==(const W &other) const { return m_raw == other; } \
93 bool operator!=(const W &other) const { return m_raw != other; } \
94 friend auto operator<<(std::ostream &stream, const S &self) -> std::ostream & \
95 { \
96 return stream << "<wgpu::" << #Type << " " << self.m_raw << ">"; \
97 } \
98 \
99 private: \
100 W m_raw; \
101 \
102 public:
103
104#define DESCRIPTOR(Type) \
105 struct Type : public WGPU##Type { \
106 public: \
107 typedef Type S; /* S == Self */ \
108 typedef WGPU##Type W; /* W == WGPU Type */ \
109 Type() : W() { nextInChain = nullptr; } \
110 Type(const W &other) : W(other) { nextInChain = nullptr; } \
111 Type(const DefaultFlag &) : W() { setDefault(); } \
112 Type &operator=(const DefaultFlag &) \
113 { \
114 setDefault(); \
115 return *this; \
116 } \
117 friend auto operator<<(std::ostream &stream, const S &) -> std::ostream & \
118 { \
119 return stream << "<wgpu::" << #Type << ">"; \
120 } \
121 \
122 public:
123
124#define STRUCT_NO_OSTREAM(Type) \
125 struct Type : public WGPU##Type { \
126 public: \
127 typedef Type S; /* S == Self */ \
128 typedef WGPU##Type W; /* W == WGPU Type */ \
129 Type() : W() {} \
130 Type(const W &other) : W(other) {} \
131 Type(const DefaultFlag &) : W() { setDefault(); } \
132 Type &operator=(const DefaultFlag &) \
133 { \
134 setDefault(); \
135 return *this; \
136 } \
137 \
138 public:
139
140#define STRUCT(Type) \
141 STRUCT_NO_OSTREAM(Type) \
142 friend auto operator<<(std::ostream &stream, const S &)->std::ostream & \
143 { \
144 return stream << "<wgpu::" << #Type << ">"; \
145 } \
146 \
147 public:
148
149#define ENUM(Type) \
150 class Type { \
151 public: \
152 typedef Type S; /* S == Self */ \
153 typedef WGPU##Type W; /* W == WGPU Type */ \
154 constexpr Type() : m_raw(W{}) {} /* Using default value-initialization */ \
155 constexpr Type(const W &w) : m_raw(w) {} \
156 constexpr operator W() const { return m_raw; } \
157 W m_raw; /* Ideally, this would be private, but then types generated with this macro would not be structural. \
158 */
160#define ENUM_ENTRY(Name, Value) static constexpr W Name = (W) (Value);
162#define END \
163 } \
164 ;
165
166// Other type aliases
167using Flags = uint64_t;
168using Bool = uint32_t;
169using SubmissionIndex = uint64_t;
170
171// Enumerations
172ENUM(AdapterType)
173ENUM_ENTRY(DiscreteGPU, WGPUAdapterType_DiscreteGPU)
174ENUM_ENTRY(IntegratedGPU, WGPUAdapterType_IntegratedGPU)
175ENUM_ENTRY(CPU, WGPUAdapterType_CPU)
176ENUM_ENTRY(Unknown, WGPUAdapterType_Unknown)
177ENUM_ENTRY(Force32, WGPUAdapterType_Force32)
178END ENUM(AddressMode) ENUM_ENTRY(Undefined, WGPUAddressMode_Undefined)
179 ENUM_ENTRY(ClampToEdge, WGPUAddressMode_ClampToEdge) ENUM_ENTRY(Repeat, WGPUAddressMode_Repeat)
180 ENUM_ENTRY(MirrorRepeat, WGPUAddressMode_MirrorRepeat) ENUM_ENTRY(Force32, WGPUAddressMode_Force32) END
181 ENUM(BackendType) ENUM_ENTRY(Undefined, WGPUBackendType_Undefined) ENUM_ENTRY(Null, WGPUBackendType_Null)
182 ENUM_ENTRY(WebGPU, WGPUBackendType_WebGPU) ENUM_ENTRY(D3D11, WGPUBackendType_D3D11)
183 ENUM_ENTRY(D3D12, WGPUBackendType_D3D12) ENUM_ENTRY(Metal, WGPUBackendType_Metal)
184 ENUM_ENTRY(Vulkan, WGPUBackendType_Vulkan) ENUM_ENTRY(OpenGL, WGPUBackendType_OpenGL)
185 ENUM_ENTRY(OpenGLES, WGPUBackendType_OpenGLES) ENUM_ENTRY(Force32, WGPUBackendType_Force32) END
186 ENUM(BlendFactor) ENUM_ENTRY(Undefined, WGPUBlendFactor_Undefined) ENUM_ENTRY(Zero, WGPUBlendFactor_Zero)
187 ENUM_ENTRY(One, WGPUBlendFactor_One) ENUM_ENTRY(Src, WGPUBlendFactor_Src)
188 ENUM_ENTRY(OneMinusSrc, WGPUBlendFactor_OneMinusSrc) ENUM_ENTRY(SrcAlpha, WGPUBlendFactor_SrcAlpha)
189 ENUM_ENTRY(OneMinusSrcAlpha, WGPUBlendFactor_OneMinusSrcAlpha) ENUM_ENTRY(Dst, WGPUBlendFactor_Dst)
190 ENUM_ENTRY(OneMinusDst, WGPUBlendFactor_OneMinusDst) ENUM_ENTRY(DstAlpha, WGPUBlendFactor_DstAlpha)
191 ENUM_ENTRY(OneMinusDstAlpha, WGPUBlendFactor_OneMinusDstAlpha)
192 ENUM_ENTRY(SrcAlphaSaturated, WGPUBlendFactor_SrcAlphaSaturated)
193 ENUM_ENTRY(Constant, WGPUBlendFactor_Constant)
194 ENUM_ENTRY(OneMinusConstant, WGPUBlendFactor_OneMinusConstant)
195 ENUM_ENTRY(Src1, WGPUBlendFactor_Src1)
196 ENUM_ENTRY(OneMinusSrc1, WGPUBlendFactor_OneMinusSrc1)
197 ENUM_ENTRY(Src1Alpha, WGPUBlendFactor_Src1Alpha)
198 ENUM_ENTRY(OneMinusSrc1Alpha, WGPUBlendFactor_OneMinusSrc1Alpha)
199 ENUM_ENTRY(Force32, WGPUBlendFactor_Force32) END
200 ENUM(BlendOperation) ENUM_ENTRY(Undefined, WGPUBlendOperation_Undefined) ENUM_ENTRY(Add, WGPUBlendOperation_Add)
201 ENUM_ENTRY(Subtract, WGPUBlendOperation_Subtract)
202 ENUM_ENTRY(ReverseSubtract, WGPUBlendOperation_ReverseSubtract) ENUM_ENTRY(Min, WGPUBlendOperation_Min)
203 ENUM_ENTRY(Max, WGPUBlendOperation_Max) ENUM_ENTRY(Force32, WGPUBlendOperation_Force32) END
204 ENUM(BufferBindingType) ENUM_ENTRY(BindingNotUsed, WGPUBufferBindingType_BindingNotUsed)
205 ENUM_ENTRY(Undefined, WGPUBufferBindingType_Undefined) ENUM_ENTRY(Uniform, WGPUBufferBindingType_Uniform)
206 ENUM_ENTRY(Storage, WGPUBufferBindingType_Storage)
207 ENUM_ENTRY(ReadOnlyStorage, WGPUBufferBindingType_ReadOnlyStorage)
208 ENUM_ENTRY(Force32, WGPUBufferBindingType_Force32) END
209 ENUM(BufferMapState) ENUM_ENTRY(Unmapped, WGPUBufferMapState_Unmapped)
210 ENUM_ENTRY(Pending, WGPUBufferMapState_Pending) ENUM_ENTRY(Mapped, WGPUBufferMapState_Mapped)
211 ENUM_ENTRY(Force32, WGPUBufferMapState_Force32) END ENUM(CallbackMode)
212 ENUM_ENTRY(WaitAnyOnly, WGPUCallbackMode_WaitAnyOnly)
213 ENUM_ENTRY(AllowProcessEvents, WGPUCallbackMode_AllowProcessEvents)
214 ENUM_ENTRY(AllowSpontaneous, WGPUCallbackMode_AllowSpontaneous)
215 ENUM_ENTRY(Force32, WGPUCallbackMode_Force32) END
216 ENUM(CompareFunction) ENUM_ENTRY(Undefined, WGPUCompareFunction_Undefined)
217 ENUM_ENTRY(Never, WGPUCompareFunction_Never) ENUM_ENTRY(Less, WGPUCompareFunction_Less)
218 ENUM_ENTRY(Equal, WGPUCompareFunction_Equal) ENUM_ENTRY(LessEqual, WGPUCompareFunction_LessEqual)
219 ENUM_ENTRY(Greater, WGPUCompareFunction_Greater) ENUM_ENTRY(NotEqual, WGPUCompareFunction_NotEqual)
220 ENUM_ENTRY(GreaterEqual, WGPUCompareFunction_GreaterEqual)
221 ENUM_ENTRY(Always, WGPUCompareFunction_Always)
222 ENUM_ENTRY(Force32, WGPUCompareFunction_Force32) END ENUM(CompilationInfoRequestStatus)
223 ENUM_ENTRY(Success, WGPUCompilationInfoRequestStatus_Success)
224 ENUM_ENTRY(InstanceDropped, WGPUCompilationInfoRequestStatus_InstanceDropped)
225 ENUM_ENTRY(Error, WGPUCompilationInfoRequestStatus_Error)
226 ENUM_ENTRY(Unknown, WGPUCompilationInfoRequestStatus_Unknown)
227 ENUM_ENTRY(Force32, WGPUCompilationInfoRequestStatus_Force32) END
228 ENUM(CompilationMessageType) ENUM_ENTRY(Error, WGPUCompilationMessageType_Error)
229 ENUM_ENTRY(Warning, WGPUCompilationMessageType_Warning) ENUM_ENTRY(Info, WGPUCompilationMessageType_Info)
230 ENUM_ENTRY(Force32, WGPUCompilationMessageType_Force32) END ENUM(CompositeAlphaMode)
231 ENUM_ENTRY(Auto, WGPUCompositeAlphaMode_Auto) ENUM_ENTRY(Opaque, WGPUCompositeAlphaMode_Opaque)
232 ENUM_ENTRY(Premultiplied, WGPUCompositeAlphaMode_Premultiplied)
233 ENUM_ENTRY(Unpremultiplied, WGPUCompositeAlphaMode_Unpremultiplied)
234 ENUM_ENTRY(Inherit, WGPUCompositeAlphaMode_Inherit)
235 ENUM_ENTRY(Force32, WGPUCompositeAlphaMode_Force32) END ENUM(CreatePipelineAsyncStatus)
236 ENUM_ENTRY(Success, WGPUCreatePipelineAsyncStatus_Success)
237 ENUM_ENTRY(InstanceDropped, WGPUCreatePipelineAsyncStatus_InstanceDropped)
238 ENUM_ENTRY(ValidationError, WGPUCreatePipelineAsyncStatus_ValidationError)
239 ENUM_ENTRY(InternalError, WGPUCreatePipelineAsyncStatus_InternalError)
240 ENUM_ENTRY(Unknown, WGPUCreatePipelineAsyncStatus_Unknown)
241 ENUM_ENTRY(Force32, WGPUCreatePipelineAsyncStatus_Force32) END
242 ENUM(CullMode) ENUM_ENTRY(Undefined, WGPUCullMode_Undefined) ENUM_ENTRY(None, WGPUCullMode_None)
243 ENUM_ENTRY(Front, WGPUCullMode_Front) ENUM_ENTRY(Back, WGPUCullMode_Back)
244 ENUM_ENTRY(Force32, WGPUCullMode_Force32) END ENUM(DeviceLostReason)
245 ENUM_ENTRY(Unknown, WGPUDeviceLostReason_Unknown) ENUM_ENTRY(Destroyed, WGPUDeviceLostReason_Destroyed)
246 ENUM_ENTRY(InstanceDropped, WGPUDeviceLostReason_InstanceDropped)
247 ENUM_ENTRY(FailedCreation, WGPUDeviceLostReason_FailedCreation)
248 ENUM_ENTRY(Force32, WGPUDeviceLostReason_Force32) END
249 ENUM(ErrorFilter) ENUM_ENTRY(Validation, WGPUErrorFilter_Validation)
250 ENUM_ENTRY(OutOfMemory, WGPUErrorFilter_OutOfMemory) ENUM_ENTRY(Internal, WGPUErrorFilter_Internal)
251 ENUM_ENTRY(Force32, WGPUErrorFilter_Force32) END
252 ENUM(ErrorType) ENUM_ENTRY(NoError, WGPUErrorType_NoError) ENUM_ENTRY(Validation, WGPUErrorType_Validation)
253 ENUM_ENTRY(OutOfMemory, WGPUErrorType_OutOfMemory) ENUM_ENTRY(Internal, WGPUErrorType_Internal)
254 ENUM_ENTRY(Unknown, WGPUErrorType_Unknown) ENUM_ENTRY(Force32, WGPUErrorType_Force32) END ENUM(FeatureLevel)
255 ENUM_ENTRY(Compatibility, WGPUFeatureLevel_Compatibility) ENUM_ENTRY(Core, WGPUFeatureLevel_Core)
256 ENUM_ENTRY(Force32, WGPUFeatureLevel_Force32) END
257 ENUM(FeatureName) ENUM_ENTRY(Undefined, WGPUFeatureName_Undefined)
258 ENUM_ENTRY(DepthClipControl, WGPUFeatureName_DepthClipControl) ENUM_ENTRY(Depth32FloatStencil8,
259 WGPUFeatureName_Depth32FloatStencil8)
260 ENUM_ENTRY(TimestampQuery, WGPUFeatureName_TimestampQuery) ENUM_ENTRY(TextureCompressionBC,
261 WGPUFeatureName_TextureCompressionBC)
262 ENUM_ENTRY(TextureCompressionBCSliced3D, WGPUFeatureName_TextureCompressionBCSliced3D)
263 ENUM_ENTRY(TextureCompressionETC2, WGPUFeatureName_TextureCompressionETC2)
264 ENUM_ENTRY(TextureCompressionASTC, WGPUFeatureName_TextureCompressionASTC)
265 ENUM_ENTRY(TextureCompressionASTCSliced3D, WGPUFeatureName_TextureCompressionASTCSliced3D)
266 ENUM_ENTRY(IndirectFirstInstance, WGPUFeatureName_IndirectFirstInstance)
267 ENUM_ENTRY(ShaderF16, WGPUFeatureName_ShaderF16)
268 ENUM_ENTRY(RG11B10UfloatRenderable, WGPUFeatureName_RG11B10UfloatRenderable)
269 ENUM_ENTRY(BGRA8UnormStorage, WGPUFeatureName_BGRA8UnormStorage)
270 ENUM_ENTRY(Float32Filterable, WGPUFeatureName_Float32Filterable)
271 ENUM_ENTRY(Float32Blendable, WGPUFeatureName_Float32Blendable)
272 ENUM_ENTRY(ClipDistances, WGPUFeatureName_ClipDistances)
273 ENUM_ENTRY(DualSourceBlending,
274 WGPUFeatureName_DualSourceBlending)
275 ENUM_ENTRY(Force32, WGPUFeatureName_Force32) END
276 ENUM(FilterMode) ENUM_ENTRY(Undefined, WGPUFilterMode_Undefined) ENUM_ENTRY(Nearest, WGPUFilterMode_Nearest)
277 ENUM_ENTRY(Linear, WGPUFilterMode_Linear) ENUM_ENTRY(Force32, WGPUFilterMode_Force32) END
278 ENUM(FrontFace) ENUM_ENTRY(Undefined, WGPUFrontFace_Undefined) ENUM_ENTRY(CCW, WGPUFrontFace_CCW)
279 ENUM_ENTRY(CW, WGPUFrontFace_CW) ENUM_ENTRY(Force32, WGPUFrontFace_Force32) END ENUM(IndexFormat)
280 ENUM_ENTRY(Undefined, WGPUIndexFormat_Undefined) ENUM_ENTRY(Uint16, WGPUIndexFormat_Uint16)
281 ENUM_ENTRY(Uint32, WGPUIndexFormat_Uint32) ENUM_ENTRY(Force32, WGPUIndexFormat_Force32) END ENUM(LoadOp)
282 ENUM_ENTRY(Undefined, WGPULoadOp_Undefined) ENUM_ENTRY(Load, WGPULoadOp_Load)
283 ENUM_ENTRY(Clear, WGPULoadOp_Clear) ENUM_ENTRY(Force32, WGPULoadOp_Force32) END
284 ENUM(MapAsyncStatus) ENUM_ENTRY(Success, WGPUMapAsyncStatus_Success)
285 ENUM_ENTRY(InstanceDropped, WGPUMapAsyncStatus_InstanceDropped) ENUM_ENTRY(Error, WGPUMapAsyncStatus_Error)
286 ENUM_ENTRY(Aborted, WGPUMapAsyncStatus_Aborted) ENUM_ENTRY(Unknown, WGPUMapAsyncStatus_Unknown)
287 ENUM_ENTRY(Force32, WGPUMapAsyncStatus_Force32) END
288 ENUM(MipmapFilterMode) ENUM_ENTRY(Undefined, WGPUMipmapFilterMode_Undefined)
289 ENUM_ENTRY(Nearest, WGPUMipmapFilterMode_Nearest) ENUM_ENTRY(Linear, WGPUMipmapFilterMode_Linear)
290 ENUM_ENTRY(Force32, WGPUMipmapFilterMode_Force32) END ENUM(OptionalBool)
291 ENUM_ENTRY(False, WGPUOptionalBool_False) ENUM_ENTRY(True, WGPUOptionalBool_True)
292 ENUM_ENTRY(Undefined, WGPUOptionalBool_Undefined) ENUM_ENTRY(Force32, WGPUOptionalBool_Force32) END
293 ENUM(PopErrorScopeStatus) ENUM_ENTRY(Success, WGPUPopErrorScopeStatus_Success)
294 ENUM_ENTRY(InstanceDropped, WGPUPopErrorScopeStatus_InstanceDropped)
295 ENUM_ENTRY(EmptyStack, WGPUPopErrorScopeStatus_EmptyStack)
296 ENUM_ENTRY(Force32, WGPUPopErrorScopeStatus_Force32) END ENUM(PowerPreference)
297 ENUM_ENTRY(Undefined, WGPUPowerPreference_Undefined)
298 ENUM_ENTRY(LowPower, WGPUPowerPreference_LowPower)
299 ENUM_ENTRY(HighPerformance, WGPUPowerPreference_HighPerformance)
300 ENUM_ENTRY(Force32, WGPUPowerPreference_Force32) END
301 ENUM(PresentMode) ENUM_ENTRY(Undefined, WGPUPresentMode_Undefined) ENUM_ENTRY(Fifo, WGPUPresentMode_Fifo)
302 ENUM_ENTRY(FifoRelaxed, WGPUPresentMode_FifoRelaxed) ENUM_ENTRY(Immediate, WGPUPresentMode_Immediate)
303 ENUM_ENTRY(Mailbox, WGPUPresentMode_Mailbox) ENUM_ENTRY(Force32, WGPUPresentMode_Force32) END
304 ENUM(PrimitiveTopology) ENUM_ENTRY(Undefined, WGPUPrimitiveTopology_Undefined)
305 ENUM_ENTRY(PointList, WGPUPrimitiveTopology_PointList) ENUM_ENTRY(LineList, WGPUPrimitiveTopology_LineList)
306 ENUM_ENTRY(LineStrip, WGPUPrimitiveTopology_LineStrip)
307 ENUM_ENTRY(TriangleList, WGPUPrimitiveTopology_TriangleList)
308 ENUM_ENTRY(TriangleStrip, WGPUPrimitiveTopology_TriangleStrip)
309 ENUM_ENTRY(Force32, WGPUPrimitiveTopology_Force32) END
310 ENUM(QueryType) ENUM_ENTRY(Occlusion, WGPUQueryType_Occlusion) ENUM_ENTRY(Timestamp, WGPUQueryType_Timestamp)
311 ENUM_ENTRY(Force32, WGPUQueryType_Force32) END
312 ENUM(QueueWorkDoneStatus) ENUM_ENTRY(Success, WGPUQueueWorkDoneStatus_Success)
313 ENUM_ENTRY(InstanceDropped, WGPUQueueWorkDoneStatus_InstanceDropped)
314 ENUM_ENTRY(Error, WGPUQueueWorkDoneStatus_Error) ENUM_ENTRY(Unknown, WGPUQueueWorkDoneStatus_Unknown)
315 ENUM_ENTRY(Force32, WGPUQueueWorkDoneStatus_Force32) END
316 ENUM(RequestAdapterStatus) ENUM_ENTRY(Success, WGPURequestAdapterStatus_Success)
317 ENUM_ENTRY(InstanceDropped, WGPURequestAdapterStatus_InstanceDropped)
318 ENUM_ENTRY(Unavailable, WGPURequestAdapterStatus_Unavailable)
319 ENUM_ENTRY(Error, WGPURequestAdapterStatus_Error) ENUM_ENTRY(Unknown, WGPURequestAdapterStatus_Unknown)
320 ENUM_ENTRY(Force32, WGPURequestAdapterStatus_Force32) END
321 ENUM(RequestDeviceStatus) ENUM_ENTRY(Success, WGPURequestDeviceStatus_Success)
322 ENUM_ENTRY(InstanceDropped, WGPURequestDeviceStatus_InstanceDropped)
323 ENUM_ENTRY(Error, WGPURequestDeviceStatus_Error) ENUM_ENTRY(Unknown, WGPURequestDeviceStatus_Unknown)
324 ENUM_ENTRY(Force32, WGPURequestDeviceStatus_Force32) END
325 ENUM(SType) ENUM_ENTRY(ShaderSourceSPIRV, WGPUSType_ShaderSourceSPIRV)
326 ENUM_ENTRY(ShaderSourceWGSL, WGPUSType_ShaderSourceWGSL)
327 ENUM_ENTRY(RenderPassMaxDrawCount, WGPUSType_RenderPassMaxDrawCount)
328 ENUM_ENTRY(SurfaceSourceMetalLayer, WGPUSType_SurfaceSourceMetalLayer)
329 ENUM_ENTRY(SurfaceSourceWindowsHWND, WGPUSType_SurfaceSourceWindowsHWND)
330 ENUM_ENTRY(SurfaceSourceXlibWindow, WGPUSType_SurfaceSourceXlibWindow)
331 ENUM_ENTRY(SurfaceSourceWaylandSurface, WGPUSType_SurfaceSourceWaylandSurface)
332 ENUM_ENTRY(SurfaceSourceAndroidNativeWindow, WGPUSType_SurfaceSourceAndroidNativeWindow)
333 ENUM_ENTRY(SurfaceSourceXCBWindow, WGPUSType_SurfaceSourceXCBWindow)
334 ENUM_ENTRY(Force32, WGPUSType_Force32) END
335 ENUM(SamplerBindingType) ENUM_ENTRY(BindingNotUsed, WGPUSamplerBindingType_BindingNotUsed)
336 ENUM_ENTRY(Undefined, WGPUSamplerBindingType_Undefined) ENUM_ENTRY(Filtering, WGPUSamplerBindingType_Filtering)
337 ENUM_ENTRY(NonFiltering, WGPUSamplerBindingType_NonFiltering)
338 ENUM_ENTRY(Comparison, WGPUSamplerBindingType_Comparison)
339 ENUM_ENTRY(Force32, WGPUSamplerBindingType_Force32) END
340 ENUM(Status) ENUM_ENTRY(Success, WGPUStatus_Success) ENUM_ENTRY(Error, WGPUStatus_Error)
341 ENUM_ENTRY(Force32, WGPUStatus_Force32) END ENUM(StencilOperation)
342 ENUM_ENTRY(Undefined, WGPUStencilOperation_Undefined) ENUM_ENTRY(Keep, WGPUStencilOperation_Keep)
343 ENUM_ENTRY(Zero, WGPUStencilOperation_Zero) ENUM_ENTRY(Replace, WGPUStencilOperation_Replace)
344 ENUM_ENTRY(Invert, WGPUStencilOperation_Invert)
345 ENUM_ENTRY(IncrementClamp, WGPUStencilOperation_IncrementClamp)
346 ENUM_ENTRY(DecrementClamp, WGPUStencilOperation_DecrementClamp)
347 ENUM_ENTRY(IncrementWrap, WGPUStencilOperation_IncrementWrap)
348 ENUM_ENTRY(DecrementWrap, WGPUStencilOperation_DecrementWrap)
349 ENUM_ENTRY(Force32, WGPUStencilOperation_Force32) END
350 ENUM(StorageTextureAccess) ENUM_ENTRY(BindingNotUsed, WGPUStorageTextureAccess_BindingNotUsed)
351 ENUM_ENTRY(Undefined, WGPUStorageTextureAccess_Undefined)
352 ENUM_ENTRY(WriteOnly, WGPUStorageTextureAccess_WriteOnly)
353 ENUM_ENTRY(ReadOnly, WGPUStorageTextureAccess_ReadOnly)
354 ENUM_ENTRY(ReadWrite, WGPUStorageTextureAccess_ReadWrite)
355 ENUM_ENTRY(Force32, WGPUStorageTextureAccess_Force32) END ENUM(StoreOp)
356 ENUM_ENTRY(Undefined, WGPUStoreOp_Undefined) ENUM_ENTRY(Store, WGPUStoreOp_Store)
357 ENUM_ENTRY(Discard, WGPUStoreOp_Discard) ENUM_ENTRY(Force32, WGPUStoreOp_Force32) END
358 ENUM(SurfaceGetCurrentTextureStatus) ENUM_ENTRY(SuccessOptimal, WGPUSurfaceGetCurrentTextureStatus_SuccessOptimal)
359 ENUM_ENTRY(SuccessSuboptimal, WGPUSurfaceGetCurrentTextureStatus_SuccessSuboptimal)
360 ENUM_ENTRY(Timeout, WGPUSurfaceGetCurrentTextureStatus_Timeout)
361 ENUM_ENTRY(Outdated, WGPUSurfaceGetCurrentTextureStatus_Outdated)
362 ENUM_ENTRY(Lost, WGPUSurfaceGetCurrentTextureStatus_Lost)
363 ENUM_ENTRY(OutOfMemory, WGPUSurfaceGetCurrentTextureStatus_OutOfMemory)
364 ENUM_ENTRY(DeviceLost, WGPUSurfaceGetCurrentTextureStatus_DeviceLost)
365 ENUM_ENTRY(Error, WGPUSurfaceGetCurrentTextureStatus_Error)
366 ENUM_ENTRY(Force32, WGPUSurfaceGetCurrentTextureStatus_Force32) END
367 ENUM(TextureAspect) ENUM_ENTRY(Undefined, WGPUTextureAspect_Undefined) ENUM_ENTRY(All, WGPUTextureAspect_All)
368 ENUM_ENTRY(StencilOnly, WGPUTextureAspect_StencilOnly) ENUM_ENTRY(DepthOnly, WGPUTextureAspect_DepthOnly)
369 ENUM_ENTRY(Force32, WGPUTextureAspect_Force32) END ENUM(TextureDimension)
370 ENUM_ENTRY(Undefined, WGPUTextureDimension_Undefined) ENUM_ENTRY(_1D, WGPUTextureDimension_1D)
371 ENUM_ENTRY(_2D, WGPUTextureDimension_2D) ENUM_ENTRY(_3D, WGPUTextureDimension_3D)
372 ENUM_ENTRY(Force32, WGPUTextureDimension_Force32) END
373 ENUM(TextureFormat) ENUM_ENTRY(Undefined, WGPUTextureFormat_Undefined) ENUM_ENTRY(
374 R8Unorm,
375 WGPUTextureFormat_R8Unorm) ENUM_ENTRY(R8Snorm,
376 WGPUTextureFormat_R8Snorm) ENUM_ENTRY(R8Uint, WGPUTextureFormat_R8Uint)
377 ENUM_ENTRY(R8Sint, WGPUTextureFormat_R8Sint) ENUM_ENTRY(R16Uint, WGPUTextureFormat_R16Uint) ENUM_ENTRY(
378 R16Sint, WGPUTextureFormat_R16Sint) ENUM_ENTRY(R16Float, WGPUTextureFormat_R16Float)
379 ENUM_ENTRY(RG8Unorm, WGPUTextureFormat_RG8Unorm) ENUM_ENTRY(RG8Snorm, WGPUTextureFormat_RG8Snorm) ENUM_ENTRY(
380 RG8Uint, WGPUTextureFormat_RG8Uint) ENUM_ENTRY(RG8Sint, WGPUTextureFormat_RG8Sint)
381 ENUM_ENTRY(R32Float, WGPUTextureFormat_R32Float) ENUM_ENTRY(
382 R32Uint, WGPUTextureFormat_R32Uint) ENUM_ENTRY(R32Sint, WGPUTextureFormat_R32Sint)
383 ENUM_ENTRY(RG16Uint, WGPUTextureFormat_RG16Uint) ENUM_ENTRY(
384 RG16Sint, WGPUTextureFormat_RG16Sint) ENUM_ENTRY(RG16Float, WGPUTextureFormat_RG16Float)
385 ENUM_ENTRY(RGBA8Unorm, WGPUTextureFormat_RGBA8Unorm) ENUM_ENTRY(
386 RGBA8UnormSrgb,
387 WGPUTextureFormat_RGBA8UnormSrgb) ENUM_ENTRY(RGBA8Snorm, WGPUTextureFormat_RGBA8Snorm)
388 ENUM_ENTRY(RGBA8Uint, WGPUTextureFormat_RGBA8Uint) ENUM_ENTRY(
389 RGBA8Sint,
390 WGPUTextureFormat_RGBA8Sint) ENUM_ENTRY(BGRA8Unorm, WGPUTextureFormat_BGRA8Unorm)
391 ENUM_ENTRY(BGRA8UnormSrgb, WGPUTextureFormat_BGRA8UnormSrgb) ENUM_ENTRY(
392 RGB10A2Uint, WGPUTextureFormat_RGB10A2Uint)
393 ENUM_ENTRY(RGB10A2Unorm, WGPUTextureFormat_RGB10A2Unorm) ENUM_ENTRY(
394 RG11B10Ufloat,
395 WGPUTextureFormat_RG11B10Ufloat)
396 ENUM_ENTRY(RGB9E5Ufloat, WGPUTextureFormat_RGB9E5Ufloat) ENUM_ENTRY(
397 RG32Float,
398 WGPUTextureFormat_RG32Float) ENUM_ENTRY(RG32Uint, WGPUTextureFormat_RG32Uint)
399 ENUM_ENTRY(RG32Sint, WGPUTextureFormat_RG32Sint) ENUM_ENTRY(
400 RGBA16Uint,
401 WGPUTextureFormat_RGBA16Uint) ENUM_ENTRY(RGBA16Sint,
402 WGPUTextureFormat_RGBA16Sint)
403 ENUM_ENTRY(RGBA16Float, WGPUTextureFormat_RGBA16Float) ENUM_ENTRY(
404 RGBA32Float, WGPUTextureFormat_RGBA32Float)
405 ENUM_ENTRY(RGBA32Uint, WGPUTextureFormat_RGBA32Uint)
406 ENUM_ENTRY(RGBA32Sint, WGPUTextureFormat_RGBA32Sint) ENUM_ENTRY(
407 Stencil8, WGPUTextureFormat_Stencil8)
408 ENUM_ENTRY(Depth16Unorm, WGPUTextureFormat_Depth16Unorm) ENUM_ENTRY(Depth24Plus, WGPUTextureFormat_Depth24Plus) ENUM_ENTRY(Depth24PlusStencil8, WGPUTextureFormat_Depth24PlusStencil8) ENUM_ENTRY(Depth32Float, WGPUTextureFormat_Depth32Float) ENUM_ENTRY(Depth32FloatStencil8, WGPUTextureFormat_Depth32FloatStencil8) ENUM_ENTRY(BC1RGBAUnorm, WGPUTextureFormat_BC1RGBAUnorm) ENUM_ENTRY(BC1RGBAUnormSrgb, WGPUTextureFormat_BC1RGBAUnormSrgb) ENUM_ENTRY(BC2RGBAUnorm, WGPUTextureFormat_BC2RGBAUnorm) ENUM_ENTRY(BC2RGBAUnormSrgb, WGPUTextureFormat_BC2RGBAUnormSrgb) ENUM_ENTRY(BC3RGBAUnorm, WGPUTextureFormat_BC3RGBAUnorm) ENUM_ENTRY(BC3RGBAUnormSrgb, WGPUTextureFormat_BC3RGBAUnormSrgb) ENUM_ENTRY(BC4RUnorm,
409 WGPUTextureFormat_BC4RUnorm) ENUM_ENTRY(BC4RSnorm,
410 WGPUTextureFormat_BC4RSnorm) ENUM_ENTRY(BC5RGUnorm, WGPUTextureFormat_BC5RGUnorm) ENUM_ENTRY(BC5RGSnorm, WGPUTextureFormat_BC5RGSnorm) ENUM_ENTRY(BC6HRGBUfloat, WGPUTextureFormat_BC6HRGBUfloat) ENUM_ENTRY(BC6HRGBFloat,
411 WGPUTextureFormat_BC6HRGBFloat) ENUM_ENTRY(BC7RGBAUnorm, WGPUTextureFormat_BC7RGBAUnorm) ENUM_ENTRY(BC7RGBAUnormSrgb,
412 WGPUTextureFormat_BC7RGBAUnormSrgb) ENUM_ENTRY(ETC2RGB8Unorm, WGPUTextureFormat_ETC2RGB8Unorm) ENUM_ENTRY(ETC2RGB8UnormSrgb, WGPUTextureFormat_ETC2RGB8UnormSrgb) ENUM_ENTRY(ETC2RGB8A1Unorm,
413 WGPUTextureFormat_ETC2RGB8A1Unorm) ENUM_ENTRY(ETC2RGB8A1UnormSrgb, WGPUTextureFormat_ETC2RGB8A1UnormSrgb) ENUM_ENTRY(ETC2RGBA8Unorm, WGPUTextureFormat_ETC2RGBA8Unorm) ENUM_ENTRY(ETC2RGBA8UnormSrgb, WGPUTextureFormat_ETC2RGBA8UnormSrgb) ENUM_ENTRY(EACR11Unorm, WGPUTextureFormat_EACR11Unorm) ENUM_ENTRY(EACR11Snorm, WGPUTextureFormat_EACR11Snorm) ENUM_ENTRY(EACRG11Unorm, WGPUTextureFormat_EACRG11Unorm) ENUM_ENTRY(EACRG11Snorm, WGPUTextureFormat_EACRG11Snorm) ENUM_ENTRY(ASTC4x4Unorm, WGPUTextureFormat_ASTC4x4Unorm) ENUM_ENTRY(ASTC4x4UnormSrgb,
414 WGPUTextureFormat_ASTC4x4UnormSrgb) ENUM_ENTRY(ASTC5x4Unorm,
415 WGPUTextureFormat_ASTC5x4Unorm) ENUM_ENTRY(ASTC5x4UnormSrgb,
416 WGPUTextureFormat_ASTC5x4UnormSrgb) ENUM_ENTRY(ASTC5x5Unorm,
417 WGPUTextureFormat_ASTC5x5Unorm) ENUM_ENTRY(ASTC5x5UnormSrgb,
418 WGPUTextureFormat_ASTC5x5UnormSrgb)
419 ENUM_ENTRY(ASTC6x5Unorm, WGPUTextureFormat_ASTC6x5Unorm) ENUM_ENTRY(
420 ASTC6x5UnormSrgb,
421 WGPUTextureFormat_ASTC6x5UnormSrgb) ENUM_ENTRY(ASTC6x6Unorm, WGPUTextureFormat_ASTC6x6Unorm)
422 ENUM_ENTRY(ASTC6x6UnormSrgb, WGPUTextureFormat_ASTC6x6UnormSrgb) ENUM_ENTRY(
423 ASTC8x5Unorm,
424 WGPUTextureFormat_ASTC8x5Unorm) ENUM_ENTRY(ASTC8x5UnormSrgb, WGPUTextureFormat_ASTC8x5UnormSrgb)
425 ENUM_ENTRY(ASTC8x6Unorm, WGPUTextureFormat_ASTC8x6Unorm) ENUM_ENTRY(
426 ASTC8x6UnormSrgb,
427 WGPUTextureFormat_ASTC8x6UnormSrgb)
428 ENUM_ENTRY(ASTC8x8Unorm, WGPUTextureFormat_ASTC8x8Unorm) ENUM_ENTRY(
429 ASTC8x8UnormSrgb,
430 WGPUTextureFormat_ASTC8x8UnormSrgb)
431 ENUM_ENTRY(ASTC10x5Unorm, WGPUTextureFormat_ASTC10x5Unorm) ENUM_ENTRY(
432 ASTC10x5UnormSrgb,
433 WGPUTextureFormat_ASTC10x5UnormSrgb)
434 ENUM_ENTRY(ASTC10x6Unorm, WGPUTextureFormat_ASTC10x6Unorm) ENUM_ENTRY(
435 ASTC10x6UnormSrgb,
436 WGPUTextureFormat_ASTC10x6UnormSrgb)
437 ENUM_ENTRY(ASTC10x8Unorm, WGPUTextureFormat_ASTC10x8Unorm) ENUM_ENTRY(
438 ASTC10x8UnormSrgb,
439 WGPUTextureFormat_ASTC10x8UnormSrgb)
441 ASTC10x10Unorm,
442 WGPUTextureFormat_ASTC10x10Unorm)
444 ASTC10x10UnormSrgb,
445 WGPUTextureFormat_ASTC10x10UnormSrgb)
447 ASTC12x10Unorm,
448 WGPUTextureFormat_ASTC12x10Unorm)
450 ASTC12x10UnormSrgb,
451 WGPUTextureFormat_ASTC12x10UnormSrgb)
453 ASTC12x12Unorm,
454 WGPUTextureFormat_ASTC12x12Unorm)
456 ASTC12x12UnormSrgb,
457 WGPUTextureFormat_ASTC12x12UnormSrgb)
459 Force32,
460 WGPUTextureFormat_Force32)
461 END
462 ENUM(TextureSampleType) ENUM_ENTRY(BindingNotUsed, WGPUTextureSampleType_BindingNotUsed)
463 ENUM_ENTRY(Undefined, WGPUTextureSampleType_Undefined) ENUM_ENTRY(Float, WGPUTextureSampleType_Float)
464 ENUM_ENTRY(UnfilterableFloat, WGPUTextureSampleType_UnfilterableFloat)
465 ENUM_ENTRY(Depth, WGPUTextureSampleType_Depth) ENUM_ENTRY(Sint, WGPUTextureSampleType_Sint)
466 ENUM_ENTRY(Uint, WGPUTextureSampleType_Uint) ENUM_ENTRY(Force32, WGPUTextureSampleType_Force32) END
467 ENUM(TextureViewDimension) ENUM_ENTRY(Undefined, WGPUTextureViewDimension_Undefined)
468 ENUM_ENTRY(_1D, WGPUTextureViewDimension_1D) ENUM_ENTRY(_2D, WGPUTextureViewDimension_2D)
469 ENUM_ENTRY(_2DArray, WGPUTextureViewDimension_2DArray) ENUM_ENTRY(Cube, WGPUTextureViewDimension_Cube)
470 ENUM_ENTRY(CubeArray, WGPUTextureViewDimension_CubeArray) ENUM_ENTRY(_3D, WGPUTextureViewDimension_3D)
471 ENUM_ENTRY(Force32, WGPUTextureViewDimension_Force32) END
472 ENUM(VertexFormat) ENUM_ENTRY(Uint8, WGPUVertexFormat_Uint8) ENUM_ENTRY(Uint8x2, WGPUVertexFormat_Uint8x2)
473 ENUM_ENTRY(Uint8x4, WGPUVertexFormat_Uint8x4) ENUM_ENTRY(Sint8, WGPUVertexFormat_Sint8)
474 ENUM_ENTRY(Sint8x2, WGPUVertexFormat_Sint8x2) ENUM_ENTRY(Sint8x4, WGPUVertexFormat_Sint8x4) ENUM_ENTRY(
475 Unorm8, WGPUVertexFormat_Unorm8) ENUM_ENTRY(Unorm8x2, WGPUVertexFormat_Unorm8x2)
476 ENUM_ENTRY(Unorm8x4, WGPUVertexFormat_Unorm8x4) ENUM_ENTRY(Snorm8, WGPUVertexFormat_Snorm8) ENUM_ENTRY(
477 Snorm8x2, WGPUVertexFormat_Snorm8x2) ENUM_ENTRY(Snorm8x4, WGPUVertexFormat_Snorm8x4)
479 WGPUVertexFormat_Uint16) ENUM_ENTRY(Uint16x2, WGPUVertexFormat_Uint16x2)
480 ENUM_ENTRY(Uint16x4,
481 WGPUVertexFormat_Uint16x4) ENUM_ENTRY(Sint16, WGPUVertexFormat_Sint16)
482 ENUM_ENTRY(Sint16x2,
483 WGPUVertexFormat_Sint16x2) ENUM_ENTRY(Sint16x4, WGPUVertexFormat_Sint16x4)
484 ENUM_ENTRY(Unorm16,
485 WGPUVertexFormat_Unorm16) ENUM_ENTRY(Unorm16x2, WGPUVertexFormat_Unorm16x2)
486 ENUM_ENTRY(Unorm16x4, WGPUVertexFormat_Unorm16x4) ENUM_ENTRY(
487 Snorm16, WGPUVertexFormat_Snorm16) ENUM_ENTRY(Snorm16x2,
488 WGPUVertexFormat_Snorm16x2)
489 ENUM_ENTRY(Snorm16x4, WGPUVertexFormat_Snorm16x4) ENUM_ENTRY(
490 Float16, WGPUVertexFormat_Float16) ENUM_ENTRY(Float16x2,
491 WGPUVertexFormat_Float16x2)
492 ENUM_ENTRY(Float16x4, WGPUVertexFormat_Float16x4) ENUM_ENTRY(
493 Float32,
494 WGPUVertexFormat_Float32) ENUM_ENTRY(Float32x2,
495 WGPUVertexFormat_Float32x2)
496 ENUM_ENTRY(Float32x3, WGPUVertexFormat_Float32x3) ENUM_ENTRY(
497 Float32x4,
498 WGPUVertexFormat_Float32x4)
499 ENUM_ENTRY(Uint32, WGPUVertexFormat_Uint32) ENUM_ENTRY(
500 Uint32x2, WGPUVertexFormat_Uint32x2)
501 ENUM_ENTRY(Uint32x3, WGPUVertexFormat_Uint32x3) ENUM_ENTRY(
502 Uint32x4, WGPUVertexFormat_Uint32x4)
503 ENUM_ENTRY(Sint32, WGPUVertexFormat_Sint32) ENUM_ENTRY(
504 Sint32x2, WGPUVertexFormat_Sint32x2)
505 ENUM_ENTRY(Sint32x3, WGPUVertexFormat_Sint32x3)
506 ENUM_ENTRY(Sint32x4, WGPUVertexFormat_Sint32x4)
507 ENUM_ENTRY(Unorm10_10_10_2,
508 WGPUVertexFormat_Unorm10_10_10_2)
509 ENUM_ENTRY(Unorm8x4BGRA,
510 WGPUVertexFormat_Unorm8x4BGRA)
511 ENUM_ENTRY(Force32,
512 WGPUVertexFormat_Force32) END
513 ENUM(VertexStepMode) ENUM_ENTRY(VertexBufferNotUsed, WGPUVertexStepMode_VertexBufferNotUsed)
514 ENUM_ENTRY(Undefined, WGPUVertexStepMode_Undefined) ENUM_ENTRY(Vertex, WGPUVertexStepMode_Vertex)
515 ENUM_ENTRY(Instance, WGPUVertexStepMode_Instance) ENUM_ENTRY(Force32, WGPUVertexStepMode_Force32) END
516 ENUM(WGSLLanguageFeatureName)
517 ENUM_ENTRY(ReadonlyAndReadwriteStorageTextures, WGPUWGSLLanguageFeatureName_ReadonlyAndReadwriteStorageTextures)
518 ENUM_ENTRY(Packed4x8IntegerDotProduct, WGPUWGSLLanguageFeatureName_Packed4x8IntegerDotProduct)
519 ENUM_ENTRY(UnrestrictedPointerParameters, WGPUWGSLLanguageFeatureName_UnrestrictedPointerParameters)
520 ENUM_ENTRY(PointerCompositeAccess, WGPUWGSLLanguageFeatureName_PointerCompositeAccess)
521 ENUM_ENTRY(Force32, WGPUWGSLLanguageFeatureName_Force32) END
522 ENUM(WaitStatus) ENUM_ENTRY(Success, WGPUWaitStatus_Success) ENUM_ENTRY(TimedOut, WGPUWaitStatus_TimedOut)
523 ENUM_ENTRY(UnsupportedTimeout, WGPUWaitStatus_UnsupportedTimeout)
524 ENUM_ENTRY(UnsupportedCount, WGPUWaitStatus_UnsupportedCount)
525 ENUM_ENTRY(UnsupportedMixedSources, WGPUWaitStatus_UnsupportedMixedSources)
526 ENUM_ENTRY(Force32, WGPUWaitStatus_Force32) END ENUM(BufferUsage)
527 ENUM_ENTRY(None, 0x0000000000000000) ENUM_ENTRY(MapRead, 0x0000000000000001)
528 ENUM_ENTRY(MapWrite, 0x0000000000000002) ENUM_ENTRY(CopySrc, 0x0000000000000004)
529 ENUM_ENTRY(CopyDst, 0x0000000000000008) ENUM_ENTRY(Index, 0x0000000000000010)
530 ENUM_ENTRY(Vertex, 0x0000000000000020) ENUM_ENTRY(Uniform, 0x0000000000000040)
531 ENUM_ENTRY(Storage, 0x0000000000000080) ENUM_ENTRY(Indirect, 0x0000000000000100)
532 ENUM_ENTRY(QueryResolve, 0x0000000000000200) END
533 ENUM(ColorWriteMask) ENUM_ENTRY(None, 0x0000000000000000) ENUM_ENTRY(Red, 0x0000000000000001)
534 ENUM_ENTRY(Green, 0x0000000000000002) ENUM_ENTRY(Blue, 0x0000000000000004) ENUM_ENTRY(Alpha, 0x0000000000000008)
535 ENUM_ENTRY(All, 0x000000000000000F) END ENUM(MapMode) ENUM_ENTRY(None, 0x0000000000000000)
536 ENUM_ENTRY(Read, 0x0000000000000001) ENUM_ENTRY(Write, 0x0000000000000002) END
537 ENUM(ShaderStage) ENUM_ENTRY(None, 0x0000000000000000) ENUM_ENTRY(Vertex, 0x0000000000000001)
538 ENUM_ENTRY(Fragment, 0x0000000000000002) ENUM_ENTRY(Compute, 0x0000000000000004) END ENUM(TextureUsage)
539 ENUM_ENTRY(None, 0x0000000000000000) ENUM_ENTRY(CopySrc, 0x0000000000000001)
540 ENUM_ENTRY(CopyDst, 0x0000000000000002) ENUM_ENTRY(TextureBinding, 0x0000000000000004)
541 ENUM_ENTRY(StorageBinding, 0x0000000000000008) ENUM_ENTRY(RenderAttachment, 0x0000000000000010) END
542 ENUM(NativeSType) ENUM_ENTRY(DeviceExtras, WGPUSType_DeviceExtras) ENUM_ENTRY(NativeLimits, WGPUSType_NativeLimits)
543 ENUM_ENTRY(PipelineLayoutExtras, WGPUSType_PipelineLayoutExtras)
544 ENUM_ENTRY(ShaderModuleGLSLDescriptor, WGPUSType_ShaderModuleGLSLDescriptor)
545 ENUM_ENTRY(InstanceExtras, WGPUSType_InstanceExtras)
546 ENUM_ENTRY(BindGroupEntryExtras, WGPUSType_BindGroupEntryExtras)
547 ENUM_ENTRY(BindGroupLayoutEntryExtras, WGPUSType_BindGroupLayoutEntryExtras)
548 ENUM_ENTRY(QuerySetDescriptorExtras, WGPUSType_QuerySetDescriptorExtras)
549 ENUM_ENTRY(SurfaceConfigurationExtras, WGPUSType_SurfaceConfigurationExtras)
550 ENUM_ENTRY(Force32, WGPUNativeSType_Force32) END
551 ENUM(NativeFeature) ENUM_ENTRY(PushConstants, WGPUNativeFeature_PushConstants) ENUM_ENTRY(
552 TextureAdapterSpecificFormatFeatures,
553 WGPUNativeFeature_TextureAdapterSpecificFormatFeatures) ENUM_ENTRY(MultiDrawIndirect,
554 WGPUNativeFeature_MultiDrawIndirect)
555 ENUM_ENTRY(MultiDrawIndirectCount,
556 WGPUNativeFeature_MultiDrawIndirectCount) ENUM_ENTRY(VertexWritableStorage,
557 WGPUNativeFeature_VertexWritableStorage)
558 ENUM_ENTRY(TextureBindingArray, WGPUNativeFeature_TextureBindingArray) ENUM_ENTRY(
559 SampledTextureAndStorageBufferArrayNonUniformIndexing,
560 WGPUNativeFeature_SampledTextureAndStorageBufferArrayNonUniformIndexing)
561 ENUM_ENTRY(PipelineStatisticsQuery, WGPUNativeFeature_PipelineStatisticsQuery) ENUM_ENTRY(
562 StorageResourceBindingArray, WGPUNativeFeature_StorageResourceBindingArray)
563 ENUM_ENTRY(PartiallyBoundBindingArray, WGPUNativeFeature_PartiallyBoundBindingArray) ENUM_ENTRY(
564 TextureFormat16bitNorm,
565 WGPUNativeFeature_TextureFormat16bitNorm)
566 ENUM_ENTRY(TextureCompressionAstcHdr, WGPUNativeFeature_TextureCompressionAstcHdr) ENUM_ENTRY(
567 MappablePrimaryBuffers,
568 WGPUNativeFeature_MappablePrimaryBuffers) ENUM_ENTRY(BufferBindingArray,
569 WGPUNativeFeature_BufferBindingArray)
570 ENUM_ENTRY(UniformBufferAndStorageTextureArrayNonUniformIndexing,
571 WGPUNativeFeature_UniformBufferAndStorageTextureArrayNonUniformIndexing)
572 ENUM_ENTRY(SpirvShaderPassthrough, WGPUNativeFeature_SpirvShaderPassthrough) ENUM_ENTRY(
573 VertexAttribute64bit, WGPUNativeFeature_VertexAttribute64bit)
574 ENUM_ENTRY(TextureFormatNv12, WGPUNativeFeature_TextureFormatNv12) ENUM_ENTRY(
575 RayTracingAccelerationStructure,
576 WGPUNativeFeature_RayTracingAccelerationStructure)
577 ENUM_ENTRY(RayQuery,
578 WGPUNativeFeature_RayQuery) ENUM_ENTRY(ShaderF64,
579 WGPUNativeFeature_ShaderF64)
580 ENUM_ENTRY(ShaderI16, WGPUNativeFeature_ShaderI16) ENUM_ENTRY(
581 ShaderPrimitiveIndex, WGPUNativeFeature_ShaderPrimitiveIndex)
582 ENUM_ENTRY(ShaderEarlyDepthTest, WGPUNativeFeature_ShaderEarlyDepthTest)
583 ENUM_ENTRY(Subgroup, WGPUNativeFeature_Subgroup) ENUM_ENTRY(
584 SubgroupVertex,
585 WGPUNativeFeature_SubgroupVertex)
586 ENUM_ENTRY(SubgroupBarrier, WGPUNativeFeature_SubgroupBarrier)
587 ENUM_ENTRY(TimestampQueryInsideEncoders,
588 WGPUNativeFeature_TimestampQueryInsideEncoders)
589 ENUM_ENTRY(TimestampQueryInsidePasses,
590 WGPUNativeFeature_TimestampQueryInsidePasses)
591 ENUM_ENTRY(Force32, WGPUNativeFeature_Force32) END
592 ENUM(LogLevel) ENUM_ENTRY(Off, WGPULogLevel_Off) ENUM_ENTRY(Error, WGPULogLevel_Error)
593 ENUM_ENTRY(Warn, WGPULogLevel_Warn) ENUM_ENTRY(Info, WGPULogLevel_Info) ENUM_ENTRY(Debug, WGPULogLevel_Debug)
594 ENUM_ENTRY(Trace, WGPULogLevel_Trace) ENUM_ENTRY(Force32, WGPULogLevel_Force32) END ENUM(InstanceBackend)
595 ENUM_ENTRY(All, 0x00000000) ENUM_ENTRY(Force32, 0x7FFFFFFF) END ENUM(InstanceFlag)
596 ENUM_ENTRY(Default, 0x00000000) ENUM_ENTRY(Force32, 0x7FFFFFFF) END ENUM(Dx12Compiler)
597 ENUM_ENTRY(Undefined, WGPUDx12Compiler_Undefined) ENUM_ENTRY(Fxc, WGPUDx12Compiler_Fxc)
598 ENUM_ENTRY(Dxc, WGPUDx12Compiler_Dxc) ENUM_ENTRY(Force32, WGPUDx12Compiler_Force32) END
599 ENUM(Gles3MinorVersion) ENUM_ENTRY(Automatic, WGPUGles3MinorVersion_Automatic)
600 ENUM_ENTRY(Version0, WGPUGles3MinorVersion_Version0) ENUM_ENTRY(Version1, WGPUGles3MinorVersion_Version1)
601 ENUM_ENTRY(Version2, WGPUGles3MinorVersion_Version2) ENUM_ENTRY(Force32, WGPUGles3MinorVersion_Force32) END
602 ENUM(PipelineStatisticName) ENUM_ENTRY(VertexShaderInvocations, WGPUPipelineStatisticName_VertexShaderInvocations)
603 ENUM_ENTRY(ClipperInvocations, WGPUPipelineStatisticName_ClipperInvocations)
604 ENUM_ENTRY(ClipperPrimitivesOut, WGPUPipelineStatisticName_ClipperPrimitivesOut)
605 ENUM_ENTRY(FragmentShaderInvocations, WGPUPipelineStatisticName_FragmentShaderInvocations)
606 ENUM_ENTRY(ComputeShaderInvocations, WGPUPipelineStatisticName_ComputeShaderInvocations)
607 ENUM_ENTRY(Force32, WGPUPipelineStatisticName_Force32) END ENUM(NativeQueryType)
608 ENUM_ENTRY(PipelineStatistics, WGPUNativeQueryType_PipelineStatistics)
609 ENUM_ENTRY(Force32, WGPUNativeQueryType_Force32) END
610 ENUM(NativeTextureFormat) ENUM_ENTRY(R16Unorm, WGPUNativeTextureFormat_R16Unorm)
611 ENUM_ENTRY(R16Snorm, WGPUNativeTextureFormat_R16Snorm) ENUM_ENTRY(Rg16Unorm, WGPUNativeTextureFormat_Rg16Unorm)
612 ENUM_ENTRY(Rg16Snorm, WGPUNativeTextureFormat_Rg16Snorm)
613 ENUM_ENTRY(Rgba16Unorm, WGPUNativeTextureFormat_Rgba16Unorm)
614 ENUM_ENTRY(Rgba16Snorm, WGPUNativeTextureFormat_Rgba16Snorm)
615 ENUM_ENTRY(NV12, WGPUNativeTextureFormat_NV12) END
616
617 // Structs
618 STRUCT_NO_OSTREAM(StringView) void setDefault();
619StringView(const std::string_view &cpp) : WGPUStringView{cpp.data(), cpp.length()} {}
620operator std::string_view() const;
621friend auto operator<<(std::ostream &stream, const S &self) -> std::ostream &
622{
623 return stream << std::string_view(self);
624}
625END
627 STRUCT(ChainedStruct) void setDefault();
628END
630 STRUCT(ChainedStructOut) void setDefault();
631END
633 STRUCT(BlendComponent) void setDefault();
634END
636 STRUCT(Color) void setDefault();
637Color(double r, double g, double b, double a) : WGPUColor{r, g, b, a} {}
638END
640 STRUCT(ComputePassTimestampWrites) void setDefault();
641END
643 STRUCT(Extent3D) void setDefault();
644Extent3D(uint32_t width, uint32_t height, uint32_t depthOrArrayLayers) : WGPUExtent3D{width, height, depthOrArrayLayers}
645{
646}
647END
649 STRUCT(Future) void setDefault();
650END
652 STRUCT(Origin3D) void setDefault();
653Origin3D(uint32_t x, uint32_t y, uint32_t z) : WGPUOrigin3D{x, y, z} {}
654END
656 STRUCT(RenderPassDepthStencilAttachment) void setDefault();
657END
659 STRUCT(RenderPassMaxDrawCount) void setDefault();
660END
662 STRUCT(RenderPassTimestampWrites) void setDefault();
663END
665 STRUCT(ShaderSourceSPIRV) void setDefault();
666END
668 STRUCT(ShaderSourceWGSL) void setDefault();
669END
671 STRUCT(StencilFaceState) void setDefault();
672END
674 STRUCT(SupportedFeatures) void setDefault();
675void freeMembers();
676END
678 STRUCT(SupportedWGSLLanguageFeatures) void setDefault();
679void freeMembers();
680END
682 STRUCT(SurfaceSourceAndroidNativeWindow) void setDefault();
683END
685 STRUCT(SurfaceSourceMetalLayer) void setDefault();
686END
688 STRUCT(SurfaceSourceWaylandSurface) void setDefault();
689END
691 STRUCT(SurfaceSourceWindowsHWND) void setDefault();
692END
694 STRUCT(SurfaceSourceXCBWindow) void setDefault();
695END
697 STRUCT(SurfaceSourceXlibWindow) void setDefault();
698END
700 STRUCT(TexelCopyBufferLayout) void setDefault();
701END
703 STRUCT(VertexAttribute) void setDefault();
704END
706 STRUCT(BlendState) void setDefault();
707END
709 STRUCT(FutureWaitInfo) void setDefault();
710END
712 STRUCT(TexelCopyBufferInfo) void setDefault();
713END
715 STRUCT(TexelCopyTextureInfo) void setDefault();
716END
718 STRUCT(VertexBufferLayout) void setDefault();
719END
721 STRUCT(InstanceExtras) void setDefault();
722END
724 STRUCT(DeviceExtras) void setDefault();
725END
727 STRUCT(NativeLimits) void setDefault();
728END
730 STRUCT(PushConstantRange) void setDefault();
731END
733 STRUCT(PipelineLayoutExtras) void setDefault();
734END
736 STRUCT(ShaderDefine) void setDefault();
737END
739 STRUCT(ShaderModuleGLSLDescriptor) void setDefault();
740END
742 STRUCT(ShaderModuleDescriptorSpirV) void setDefault();
743END
745 STRUCT(RegistryReport) void setDefault();
746END
748 STRUCT(HubReport) void setDefault();
749END
751 STRUCT(GlobalReport) void setDefault();
752END
754 STRUCT(BindGroupEntryExtras) void setDefault();
755END
757 STRUCT(BindGroupLayoutEntryExtras) void setDefault();
758END
760 STRUCT(QuerySetDescriptorExtras) void setDefault();
761END
763 STRUCT(SurfaceConfigurationExtras) void setDefault();
764END
765
766 // Descriptors
767 DESCRIPTOR(BufferMapCallbackInfo) void setDefault();
768END
770 DESCRIPTOR(CompilationInfoCallbackInfo) void setDefault();
771END
773 DESCRIPTOR(CreateComputePipelineAsyncCallbackInfo) void setDefault();
774END
776 DESCRIPTOR(CreateRenderPipelineAsyncCallbackInfo) void setDefault();
777END
779 DESCRIPTOR(DeviceLostCallbackInfo) void setDefault();
780END
782 DESCRIPTOR(PopErrorScopeCallbackInfo) void setDefault();
783END
785 DESCRIPTOR(QueueWorkDoneCallbackInfo) void setDefault();
786END
788 DESCRIPTOR(RequestAdapterCallbackInfo) void setDefault();
789END
791 DESCRIPTOR(RequestDeviceCallbackInfo) void setDefault();
792END
794 DESCRIPTOR(UncapturedErrorCallbackInfo) void setDefault();
795END
797 DESCRIPTOR(AdapterInfo) void setDefault();
798void freeMembers();
799END
801 DESCRIPTOR(BindGroupEntry) void setDefault();
802END
804 DESCRIPTOR(BufferBindingLayout) void setDefault();
805END
807 DESCRIPTOR(BufferDescriptor) void setDefault();
808END
810 DESCRIPTOR(CommandBufferDescriptor) void setDefault();
811END
813 DESCRIPTOR(CommandEncoderDescriptor) void setDefault();
814END
816 DESCRIPTOR(CompilationMessage) void setDefault();
817END
819 DESCRIPTOR(ConstantEntry) void setDefault();
820END
822 DESCRIPTOR(InstanceCapabilities) void setDefault();
823END
825 DESCRIPTOR(Limits) void setDefault();
826END
828 DESCRIPTOR(MultisampleState) void setDefault();
829END
831 DESCRIPTOR(PipelineLayoutDescriptor) void setDefault();
832END
834 DESCRIPTOR(PrimitiveState) void setDefault();
835END
837 DESCRIPTOR(QuerySetDescriptor) void setDefault();
838END
840 DESCRIPTOR(QueueDescriptor) void setDefault();
841END
843 DESCRIPTOR(RenderBundleDescriptor) void setDefault();
844END
846 DESCRIPTOR(RenderBundleEncoderDescriptor) void setDefault();
847END
849 DESCRIPTOR(RequestAdapterOptions) void setDefault();
850END
852 DESCRIPTOR(SamplerBindingLayout) void setDefault();
853END
855 DESCRIPTOR(SamplerDescriptor) void setDefault();
856END
858 DESCRIPTOR(ShaderModuleDescriptor) void setDefault();
859END
861 DESCRIPTOR(StorageTextureBindingLayout) void setDefault();
862END
864 DESCRIPTOR(SurfaceCapabilities) void setDefault();
865void freeMembers();
866END
868 DESCRIPTOR(SurfaceConfiguration) void setDefault();
869END
871 DESCRIPTOR(SurfaceDescriptor) void setDefault();
872END
874 DESCRIPTOR(SurfaceTexture) void setDefault();
875END
877 DESCRIPTOR(TextureBindingLayout) void setDefault();
878END
880 DESCRIPTOR(TextureViewDescriptor) void setDefault();
881END
883 DESCRIPTOR(BindGroupDescriptor) void setDefault();
884END
886 DESCRIPTOR(BindGroupLayoutEntry) void setDefault();
887END
889 DESCRIPTOR(CompilationInfo) void setDefault();
890END
892 DESCRIPTOR(ComputePassDescriptor) void setDefault();
893END
895 DESCRIPTOR(DepthStencilState) void setDefault();
896END
898 DESCRIPTOR(DeviceDescriptor) void setDefault();
899END
901 DESCRIPTOR(InstanceDescriptor) void setDefault();
902END
904 DESCRIPTOR(ProgrammableStageDescriptor) void setDefault();
905END
907 DESCRIPTOR(RenderPassColorAttachment) void setDefault();
908END
910 DESCRIPTOR(TextureDescriptor) void setDefault();
911END
913 DESCRIPTOR(BindGroupLayoutDescriptor) void setDefault();
914END
916 DESCRIPTOR(ColorTargetState) void setDefault();
917END
919 DESCRIPTOR(ComputePipelineDescriptor) void setDefault();
920END
922 DESCRIPTOR(RenderPassDescriptor) void setDefault();
923END
925 DESCRIPTOR(VertexState) void setDefault();
926END
928 DESCRIPTOR(FragmentState) void setDefault();
929END
931 DESCRIPTOR(RenderPipelineDescriptor) void setDefault();
932END
934 DESCRIPTOR(InstanceEnumerateAdapterOptions) void setDefault();
935END
936
937 // Handles forward declarations
938 class Adapter;
939class BindGroup;
940class BindGroupLayout;
941class Buffer;
942class CommandBuffer;
943class CommandEncoder;
944class ComputePassEncoder;
945class ComputePipeline;
946class Device;
947class Instance;
948class PipelineLayout;
949class QuerySet;
950class Queue;
951class RenderBundle;
952class RenderBundleEncoder;
953class RenderPassEncoder;
954class RenderPipeline;
955class Sampler;
956class ShaderModule;
957class Surface;
958class Texture;
959class TextureView;
960
961// Callback types
962using BufferMapCallback = std::function<void(MapAsyncStatus status, StringView message, void *userdata1)>;
964 std::function<void(CompilationInfoRequestStatus status, const CompilationInfo &compilationInfo, void *userdata1)>;
965using CreateComputePipelineAsyncCallback = std::function<void(
966 CreatePipelineAsyncStatus status, ComputePipeline pipeline, StringView message, void *userdata1)>;
968 std::function<void(CreatePipelineAsyncStatus status, RenderPipeline pipeline, StringView message, void *userdata1)>;
969using DeviceLostCallback =
970 std::function<void(Device const *device, DeviceLostReason reason, StringView message, void *userdata1)>;
972 std::function<void(PopErrorScopeStatus status, ErrorType type, StringView message, void *userdata1)>;
973using QueueWorkDoneCallback = std::function<void(QueueWorkDoneStatus status, void *userdata1)>;
975 std::function<void(RequestAdapterStatus status, Adapter adapter, StringView message, void *userdata1)>;
977 std::function<void(RequestDeviceStatus status, Device device, StringView message, void *userdata1)>;
979 std::function<void(Device const *device, ErrorType type, StringView message, void *userdata1)>;
980using LogCallback = std::function<void(LogLevel level, StringView message)>;
981
982// Handles detailed declarations
983HANDLE(Adapter)
984void getFeatures(SupportedFeatures *features) const;
985Status getInfo(AdapterInfo *info) const;
986Status getLimits(Limits *limits) const;
987Bool hasFeature(FeatureName feature) const;
988Future requestDevice(const DeviceDescriptor &descriptor, RequestDeviceCallbackInfo callbackInfo) const;
991Device requestDevice(const DeviceDescriptor &descriptor);
992END
994 HANDLE(BindGroup) void setLabel(StringView label) const;
995void addRef() const;
996void release() const;
997END
999 HANDLE(BindGroupLayout) void setLabel(StringView label) const;
1000void addRef() const;
1001void release() const;
1002END
1004 HANDLE(Buffer) void destroy() const;
1005void const *getConstMappedRange(size_t offset, size_t size) const;
1006BufferMapState getMapState() const;
1007void *getMappedRange(size_t offset, size_t size) const;
1008uint64_t getSize() const;
1009BufferUsage getUsage() const;
1010Future mapAsync(MapMode mode, size_t offset, size_t size, BufferMapCallbackInfo callbackInfo) const;
1012void unmap() const;
1013void addRef() const;
1014void release() const;
1015END
1017 HANDLE(CommandBuffer) void setLabel(StringView label) const;
1018void addRef() const;
1019void release() const;
1020END
1022 HANDLE(CommandEncoder) ComputePassEncoder beginComputePass(const ComputePassDescriptor &descriptor) const;
1023ComputePassEncoder beginComputePass() const;
1024RenderPassEncoder beginRenderPass(const RenderPassDescriptor &descriptor) const;
1025void clearBuffer(Buffer buffer, uint64_t offset, uint64_t size) const;
1026void copyBufferToBuffer(Buffer source, uint64_t sourceOffset, Buffer destination, uint64_t destinationOffset,
1027 uint64_t size) const;
1028void copyBufferToTexture(const TexelCopyBufferInfo &source, const TexelCopyTextureInfo &destination,
1030void copyTextureToBuffer(const TexelCopyTextureInfo &source, const TexelCopyBufferInfo &destination,
1032void copyTextureToTexture(const TexelCopyTextureInfo &source, const TexelCopyTextureInfo &destination,
1034CommandBuffer finish(const CommandBufferDescriptor &descriptor) const;
1035CommandBuffer finish() const;
1039void resolveQuerySet(QuerySet querySet, uint32_t firstQuery, uint32_t queryCount, Buffer destination,
1040 uint64_t destinationOffset) const;
1042void writeTimestamp(QuerySet querySet, uint32_t queryIndex) const;
1043void addRef() const;
1044void release() const;
1045END
1047 HANDLE(ComputePassEncoder) void dispatchWorkgroups(uint32_t workgroupCountX, uint32_t workgroupCountY,
1048 uint32_t workgroupCountZ) const;
1049void dispatchWorkgroupsIndirect(Buffer indirectBuffer, uint64_t indirectOffset) const;
1050void end() const;
1051void insertDebugMarker(StringView markerLabel) const;
1052void popDebugGroup() const;
1054void setBindGroup(uint32_t groupIndex, BindGroup group, size_t dynamicOffsetCount,
1055 uint32_t const *dynamicOffsets) const;
1056void setBindGroup(uint32_t groupIndex, BindGroup group, const std::vector<uint32_t> &dynamicOffsets) const;
1057void setBindGroup(uint32_t groupIndex, BindGroup group, const uint32_t &dynamicOffsets) const;
1059void setPipeline(ComputePipeline pipeline) const;
1060void addRef() const;
1062void setPushConstants(uint32_t offset, uint32_t sizeBytes, void const *data) const;
1063void beginPipelineStatisticsQuery(QuerySet querySet, uint32_t queryIndex) const;
1065void writeTimestamp(QuerySet querySet, uint32_t queryIndex) const;
1066END
1068 HANDLE(ComputePipeline) BindGroupLayout getBindGroupLayout(uint32_t groupIndex) const;
1069void setLabel(StringView label) const;
1070void addRef() const;
1071void release() const;
1072END
1074 HANDLE(Device) BindGroup createBindGroup(const BindGroupDescriptor &descriptor) const;
1075BindGroupLayout createBindGroupLayout(const BindGroupLayoutDescriptor &descriptor) const;
1076Buffer createBuffer(const BufferDescriptor &descriptor) const;
1077CommandEncoder createCommandEncoder(const CommandEncoderDescriptor &descriptor) const;
1079ComputePipeline createComputePipeline(const ComputePipelineDescriptor &descriptor) const;
1080Future createComputePipelineAsync(const ComputePipelineDescriptor &descriptor,
1081 CreateComputePipelineAsyncCallbackInfo callbackInfo) const;
1082PipelineLayout createPipelineLayout(const PipelineLayoutDescriptor &descriptor) const;
1083QuerySet createQuerySet(const QuerySetDescriptor &descriptor) const;
1084RenderBundleEncoder createRenderBundleEncoder(const RenderBundleEncoderDescriptor &descriptor) const;
1085RenderPipeline createRenderPipeline(const RenderPipelineDescriptor &descriptor) const;
1086Future createRenderPipelineAsync(const RenderPipelineDescriptor &descriptor,
1087 CreateRenderPipelineAsyncCallbackInfo callbackInfo) const;
1088Sampler createSampler(const SamplerDescriptor &descriptor) const;
1090ShaderModule createShaderModule(const ShaderModuleDescriptor &descriptor) const;
1091Texture createTexture(const TextureDescriptor &descriptor) const;
1093AdapterInfo getAdapterInfo() const;
1094void getFeatures(SupportedFeatures *features) const;
1095Status getLimits(Limits *limits) const;
1096Queue getQueue() const;
1097Bool hasFeature(FeatureName feature) const;
1098Future popErrorScope(PopErrorScopeCallbackInfo callbackInfo) const;
1099void pushErrorScope(ErrorFilter filter) const;
1100void setLabel(StringView label) const;
1101void addRef() const;
1103Bool poll(Bool wait, SubmissionIndex const *wrappedSubmissionIndex) const;
1104ShaderModule createShaderModuleSpirV(const ShaderModuleDescriptorSpirV &descriptor) const;
1105END
1107 HANDLE(Instance) Surface createSurface(const SurfaceDescriptor &descriptor) const;
1108Status getWGSLLanguageFeatures(SupportedWGSLLanguageFeatures *features) const;
1109Bool hasWGSLLanguageFeature(WGSLLanguageFeatureName feature) const;
1111Future requestAdapter(const RequestAdapterOptions &options, RequestAdapterCallbackInfo callbackInfo) const;
1112WaitStatus waitAny(size_t futureCount, FutureWaitInfo *futures, uint64_t timeoutNS) const;
1113void addRef() const;
1115size_t enumerateAdapters(const InstanceEnumerateAdapterOptions &options, Adapter *adapters) const;
1116Adapter requestAdapter(const RequestAdapterOptions &options);
1117END
1119 HANDLE(PipelineLayout) void setLabel(StringView label) const;
1120void addRef() const;
1121void release() const;
1122END
1124 HANDLE(QuerySet) void destroy() const;
1125uint32_t getCount() const;
1126QueryType getType() const;
1127void setLabel(StringView label) const;
1128void addRef() const;
1129void release() const;
1130END
1132 HANDLE(Queue) Future onSubmittedWorkDone(QueueWorkDoneCallbackInfo callbackInfo) const;
1134void submit(size_t commandCount, CommandBuffer const *commands) const;
1135void submit(const std::vector<WGPUCommandBuffer> &commands) const;
1136void submit(const WGPUCommandBuffer &commands) const;
1137void writeBuffer(Buffer buffer, uint64_t bufferOffset, void const *data, size_t size) const;
1138void writeTexture(const TexelCopyTextureInfo &destination, void const *data, size_t dataSize,
1139 const TexelCopyBufferLayout &dataLayout, const Extent3D &writeSize) const;
1140void addRef() const;
1142SubmissionIndex submitForIndex(size_t commandCount, CommandBuffer const *commands) const;
1143SubmissionIndex submitForIndex(const std::vector<WGPUCommandBuffer> &commands) const;
1144SubmissionIndex submitForIndex(const WGPUCommandBuffer &commands) const;
1145END
1147 HANDLE(RenderBundle) void setLabel(StringView label) const;
1148void addRef() const;
1149void release() const;
1150END
1152 HANDLE(RenderBundleEncoder) void draw(uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex,
1153 uint32_t firstInstance) const;
1154void drawIndexed(uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t baseVertex,
1155 uint32_t firstInstance) const;
1156void drawIndexedIndirect(Buffer indirectBuffer, uint64_t indirectOffset) const;
1157void drawIndirect(Buffer indirectBuffer, uint64_t indirectOffset) const;
1158RenderBundle finish(const RenderBundleDescriptor &descriptor) const;
1159RenderBundle finish() const;
1160void insertDebugMarker(StringView markerLabel) const;
1161void popDebugGroup() const;
1162void pushDebugGroup(StringView groupLabel) const;
1163void setBindGroup(uint32_t groupIndex, BindGroup group, size_t dynamicOffsetCount,
1164 uint32_t const *dynamicOffsets) const;
1165void setBindGroup(uint32_t groupIndex, BindGroup group, const std::vector<uint32_t> &dynamicOffsets) const;
1166void setBindGroup(uint32_t groupIndex, BindGroup group, const uint32_t &dynamicOffsets) const;
1167void setIndexBuffer(Buffer buffer, IndexFormat format, uint64_t offset, uint64_t size) const;
1169void setPipeline(RenderPipeline pipeline) const;
1170void setVertexBuffer(uint32_t slot, Buffer buffer, uint64_t offset, uint64_t size) const;
1171void addRef() const;
1173void setPushConstants(ShaderStage stages, uint32_t offset, uint32_t sizeBytes, void const *data) const;
1174END
1176 HANDLE(RenderPassEncoder) void beginOcclusionQuery(uint32_t queryIndex) const;
1177void draw(uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance) const;
1178void drawIndexed(uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t baseVertex,
1179 uint32_t firstInstance) const;
1180void drawIndexedIndirect(Buffer indirectBuffer, uint64_t indirectOffset) const;
1181void drawIndirect(Buffer indirectBuffer, uint64_t indirectOffset) const;
1182void end() const;
1184void executeBundles(size_t bundleCount, RenderBundle const *bundles) const;
1185void executeBundles(const std::vector<WGPURenderBundle> &bundles) const;
1186void executeBundles(const WGPURenderBundle &bundles) const;
1187void insertDebugMarker(StringView markerLabel) const;
1188void popDebugGroup() const;
1189void pushDebugGroup(StringView groupLabel) const;
1190void setBindGroup(uint32_t groupIndex, BindGroup group, size_t dynamicOffsetCount,
1191 uint32_t const *dynamicOffsets) const;
1192void setBindGroup(uint32_t groupIndex, BindGroup group, const std::vector<uint32_t> &dynamicOffsets) const;
1193void setBindGroup(uint32_t groupIndex, BindGroup group, const uint32_t &dynamicOffsets) const;
1194void setBlendConstant(const Color &color) const;
1195void setIndexBuffer(Buffer buffer, IndexFormat format, uint64_t offset, uint64_t size) const;
1196void setLabel(StringView label) const;
1197void setPipeline(RenderPipeline pipeline) const;
1198void setScissorRect(uint32_t x, uint32_t y, uint32_t width, uint32_t height) const;
1199void setStencilReference(uint32_t reference) const;
1200void setVertexBuffer(uint32_t slot, Buffer buffer, uint64_t offset, uint64_t size) const;
1201void setViewport(float x, float y, float width, float height, float minDepth, float maxDepth) const;
1202void addRef() const;
1203void release() const;
1204void setPushConstants(ShaderStage stages, uint32_t offset, uint32_t sizeBytes, void const *data) const;
1205void multiDrawIndirect(Buffer buffer, uint64_t offset, uint32_t count) const;
1206void multiDrawIndexedIndirect(Buffer buffer, uint64_t offset, uint32_t count) const;
1207void multiDrawIndirectCount(Buffer buffer, uint64_t offset, Buffer count_buffer, uint64_t count_buffer_offset,
1208 uint32_t max_count) const;
1209void multiDrawIndexedIndirectCount(Buffer buffer, uint64_t offset, Buffer count_buffer, uint64_t count_buffer_offset,
1210 uint32_t max_count) const;
1211void beginPipelineStatisticsQuery(QuerySet querySet, uint32_t queryIndex) const;
1213void writeTimestamp(QuerySet querySet, uint32_t queryIndex) const;
1214END
1216 HANDLE(RenderPipeline) BindGroupLayout getBindGroupLayout(uint32_t groupIndex) const;
1217void setLabel(StringView label) const;
1218void addRef() const;
1219void release() const;
1220END
1222 HANDLE(Sampler) void setLabel(StringView label) const;
1223void addRef() const;
1224void release() const;
1225END
1227 HANDLE(ShaderModule) Future getCompilationInfo(CompilationInfoCallbackInfo callbackInfo) const;
1228void setLabel(StringView label) const;
1229void addRef() const;
1230void release() const;
1231END
1233 HANDLE(Surface) void configure(const SurfaceConfiguration &config) const;
1234Status getCapabilities(Adapter adapter, SurfaceCapabilities *capabilities) const;
1235void getCurrentTexture(SurfaceTexture *surfaceTexture) const;
1236Status present() const;
1238void unconfigure() const;
1239void addRef() const;
1240void release() const;
1241END
1243 HANDLE(Texture) TextureView createView(const TextureViewDescriptor &descriptor) const;
1244TextureView createView() const;
1247TextureDimension getDimension() const;
1248TextureFormat getFormat() const;
1249uint32_t getHeight() const;
1251uint32_t getSampleCount() const;
1252TextureUsage getUsage() const;
1253uint32_t getWidth() const;
1254void setLabel(StringView label) const;
1255void addRef() const;
1256void release() const;
1257END
1259 HANDLE(TextureView) void setLabel(StringView label) const;
1260void addRef() const;
1261void release() const;
1262END
1263
1264 // Non-member procedures
1266 Instance createInstance();
1267Instance createInstance(const InstanceDescriptor &descriptor);
1268
1269#ifdef WEBGPU_CPP_IMPLEMENTATION
1270
1271Instance createInstance() { return wgpuCreateInstance(nullptr); }
1272
1273Instance createInstance(const InstanceDescriptor &descriptor) { return wgpuCreateInstance(&descriptor); }
1274
1275// Handles members implementation
1276// Methods of StringView
1277void StringView::setDefault() {}
1278
1279// Methods of ChainedStruct
1280void ChainedStruct::setDefault() {}
1281
1282// Methods of ChainedStructOut
1283void ChainedStructOut::setDefault() {}
1284
1285// Methods of BufferMapCallbackInfo
1286void BufferMapCallbackInfo::setDefault() {}
1287
1288// Methods of CompilationInfoCallbackInfo
1289void CompilationInfoCallbackInfo::setDefault() {}
1290
1291// Methods of CreateComputePipelineAsyncCallbackInfo
1292void CreateComputePipelineAsyncCallbackInfo::setDefault() {}
1293
1294// Methods of CreateRenderPipelineAsyncCallbackInfo
1295void CreateRenderPipelineAsyncCallbackInfo::setDefault() {}
1296
1297// Methods of DeviceLostCallbackInfo
1298void DeviceLostCallbackInfo::setDefault() {}
1299
1300// Methods of PopErrorScopeCallbackInfo
1301void PopErrorScopeCallbackInfo::setDefault() {}
1302
1303// Methods of QueueWorkDoneCallbackInfo
1304void QueueWorkDoneCallbackInfo::setDefault() {}
1305
1306// Methods of RequestAdapterCallbackInfo
1307void RequestAdapterCallbackInfo::setDefault() {}
1308
1309// Methods of RequestDeviceCallbackInfo
1310void RequestDeviceCallbackInfo::setDefault() {}
1311
1312// Methods of UncapturedErrorCallbackInfo
1313void UncapturedErrorCallbackInfo::setDefault() {}
1314
1315// Methods of AdapterInfo
1316void AdapterInfo::setDefault()
1317{
1318 backendType = BackendType::Undefined;
1319 ((StringView *) &vendor)->setDefault();
1320 ((StringView *) &architecture)->setDefault();
1321 ((StringView *) &device)->setDefault();
1322 ((StringView *) &description)->setDefault();
1323}
1324void AdapterInfo::freeMembers() { return wgpuAdapterInfoFreeMembers(*this); }
1325
1326// Methods of BindGroupEntry
1327void BindGroupEntry::setDefault() { offset = 0; }
1328
1329// Methods of BlendComponent
1330void BlendComponent::setDefault()
1331{
1332 operation = BlendOperation::Add;
1333 srcFactor = BlendFactor::One;
1334 dstFactor = BlendFactor::Zero;
1335}
1336
1337// Methods of BufferBindingLayout
1338void BufferBindingLayout::setDefault()
1339{
1340 type = BufferBindingType::Uniform;
1341 hasDynamicOffset = false;
1342 minBindingSize = 0;
1343}
1344
1345// Methods of BufferDescriptor
1346void BufferDescriptor::setDefault()
1347{
1348 mappedAtCreation = false;
1349 ((StringView *) &label)->setDefault();
1350}
1351
1352// Methods of Color
1353void Color::setDefault() {}
1354
1355// Methods of CommandBufferDescriptor
1356void CommandBufferDescriptor::setDefault() { ((StringView *) &label)->setDefault(); }
1357
1358// Methods of CommandEncoderDescriptor
1359void CommandEncoderDescriptor::setDefault() { ((StringView *) &label)->setDefault(); }
1360
1361// Methods of CompilationMessage
1362void CompilationMessage::setDefault() { ((StringView *) &message)->setDefault(); }
1363
1364// Methods of ComputePassTimestampWrites
1365void ComputePassTimestampWrites::setDefault() {}
1366
1367// Methods of ConstantEntry
1368void ConstantEntry::setDefault() { ((StringView *) &key)->setDefault(); }
1369
1370// Methods of Extent3D
1371void Extent3D::setDefault()
1372{
1373 height = 1;
1374 depthOrArrayLayers = 1;
1375}
1376
1377// Methods of Future
1378void Future::setDefault() {}
1379
1380// Methods of InstanceCapabilities
1381void InstanceCapabilities::setDefault() {}
1382
1383// Methods of Limits
1384void Limits::setDefault()
1385{
1386 maxTextureDimension1D = WGPU_LIMIT_U32_UNDEFINED;
1387 maxTextureDimension2D = WGPU_LIMIT_U32_UNDEFINED;
1388 maxTextureDimension3D = WGPU_LIMIT_U32_UNDEFINED;
1389 maxTextureArrayLayers = WGPU_LIMIT_U32_UNDEFINED;
1390 maxBindGroups = WGPU_LIMIT_U32_UNDEFINED;
1391 maxBindGroupsPlusVertexBuffers = WGPU_LIMIT_U32_UNDEFINED;
1392 maxBindingsPerBindGroup = WGPU_LIMIT_U32_UNDEFINED;
1393 maxDynamicUniformBuffersPerPipelineLayout = WGPU_LIMIT_U32_UNDEFINED;
1394 maxDynamicStorageBuffersPerPipelineLayout = WGPU_LIMIT_U32_UNDEFINED;
1395 maxSampledTexturesPerShaderStage = WGPU_LIMIT_U32_UNDEFINED;
1396 maxSamplersPerShaderStage = WGPU_LIMIT_U32_UNDEFINED;
1397 maxStorageBuffersPerShaderStage = WGPU_LIMIT_U32_UNDEFINED;
1398 maxStorageTexturesPerShaderStage = WGPU_LIMIT_U32_UNDEFINED;
1399 maxUniformBuffersPerShaderStage = WGPU_LIMIT_U32_UNDEFINED;
1400 maxUniformBufferBindingSize = WGPU_LIMIT_U64_UNDEFINED;
1401 maxStorageBufferBindingSize = WGPU_LIMIT_U64_UNDEFINED;
1402 minUniformBufferOffsetAlignment = WGPU_LIMIT_U32_UNDEFINED;
1403 minStorageBufferOffsetAlignment = WGPU_LIMIT_U32_UNDEFINED;
1404 maxVertexBuffers = WGPU_LIMIT_U32_UNDEFINED;
1405 maxBufferSize = WGPU_LIMIT_U64_UNDEFINED;
1406 maxVertexAttributes = WGPU_LIMIT_U32_UNDEFINED;
1407 maxVertexBufferArrayStride = WGPU_LIMIT_U32_UNDEFINED;
1408 maxInterStageShaderVariables = WGPU_LIMIT_U32_UNDEFINED;
1409 maxColorAttachments = WGPU_LIMIT_U32_UNDEFINED;
1410 maxColorAttachmentBytesPerSample = WGPU_LIMIT_U32_UNDEFINED;
1411 maxComputeWorkgroupStorageSize = WGPU_LIMIT_U32_UNDEFINED;
1412 maxComputeInvocationsPerWorkgroup = WGPU_LIMIT_U32_UNDEFINED;
1413 maxComputeWorkgroupSizeX = WGPU_LIMIT_U32_UNDEFINED;
1414 maxComputeWorkgroupSizeY = WGPU_LIMIT_U32_UNDEFINED;
1415 maxComputeWorkgroupSizeZ = WGPU_LIMIT_U32_UNDEFINED;
1416 maxComputeWorkgroupsPerDimension = WGPU_LIMIT_U32_UNDEFINED;
1417}
1418
1419// Methods of MultisampleState
1420void MultisampleState::setDefault()
1421{
1422 count = 1;
1423 mask = 0xFFFFFFFF;
1424 alphaToCoverageEnabled = false;
1425}
1426
1427// Methods of Origin3D
1428void Origin3D::setDefault()
1429{
1430 x = 0;
1431 y = 0;
1432 z = 0;
1433}
1434
1435// Methods of PipelineLayoutDescriptor
1436void PipelineLayoutDescriptor::setDefault() { ((StringView *) &label)->setDefault(); }
1437
1438// Methods of PrimitiveState
1439void PrimitiveState::setDefault()
1440{
1441 topology = PrimitiveTopology::TriangleList;
1442 stripIndexFormat = IndexFormat::Undefined;
1443 frontFace = FrontFace::CCW;
1444 cullMode = CullMode::None;
1445 unclippedDepth = false;
1446}
1447
1448// Methods of QuerySetDescriptor
1449void QuerySetDescriptor::setDefault() { ((StringView *) &label)->setDefault(); }
1450
1451// Methods of QueueDescriptor
1452void QueueDescriptor::setDefault() { ((StringView *) &label)->setDefault(); }
1453
1454// Methods of RenderBundleDescriptor
1455void RenderBundleDescriptor::setDefault() { ((StringView *) &label)->setDefault(); }
1456
1457// Methods of RenderBundleEncoderDescriptor
1458void RenderBundleEncoderDescriptor::setDefault()
1459{
1460 depthStencilFormat = TextureFormat::Undefined;
1461 depthReadOnly = false;
1462 stencilReadOnly = false;
1463 sampleCount = 1;
1464 ((StringView *) &label)->setDefault();
1465}
1466
1467// Methods of RenderPassDepthStencilAttachment
1468void RenderPassDepthStencilAttachment::setDefault()
1469{
1470 depthLoadOp = LoadOp::Undefined;
1471 depthStoreOp = StoreOp::Undefined;
1472 depthReadOnly = false;
1473 stencilLoadOp = LoadOp::Undefined;
1474 stencilStoreOp = StoreOp::Undefined;
1475 stencilClearValue = 0;
1476 stencilReadOnly = false;
1477}
1478
1479// Methods of RenderPassMaxDrawCount
1480void RenderPassMaxDrawCount::setDefault()
1481{
1482 maxDrawCount = 50000000;
1483 ((ChainedStruct *) &chain)->setDefault();
1484 chain.sType = SType::RenderPassMaxDrawCount;
1485 chain.next = nullptr;
1486}
1487
1488// Methods of RenderPassTimestampWrites
1489void RenderPassTimestampWrites::setDefault() {}
1490
1491// Methods of RequestAdapterOptions
1492void RequestAdapterOptions::setDefault()
1493{
1494 powerPreference = PowerPreference::Undefined;
1495 forceFallbackAdapter = false;
1496 backendType = BackendType::Undefined;
1497}
1498
1499// Methods of SamplerBindingLayout
1500void SamplerBindingLayout::setDefault() { type = SamplerBindingType::Filtering; }
1501
1502// Methods of SamplerDescriptor
1503void SamplerDescriptor::setDefault()
1504{
1505 addressModeU = AddressMode::ClampToEdge;
1506 addressModeV = AddressMode::ClampToEdge;
1507 addressModeW = AddressMode::ClampToEdge;
1508 magFilter = FilterMode::Nearest;
1509 minFilter = FilterMode::Nearest;
1510 mipmapFilter = MipmapFilterMode::Nearest;
1511 lodMinClamp = 0;
1512 lodMaxClamp = 32;
1513 compare = CompareFunction::Undefined;
1514 ((StringView *) &label)->setDefault();
1515}
1516
1517// Methods of ShaderModuleDescriptor
1518void ShaderModuleDescriptor::setDefault() { ((StringView *) &label)->setDefault(); }
1519
1520// Methods of ShaderSourceSPIRV
1521void ShaderSourceSPIRV::setDefault()
1522{
1523 ((ChainedStruct *) &chain)->setDefault();
1524 chain.sType = SType::ShaderSourceSPIRV;
1525 chain.next = nullptr;
1526}
1527
1528// Methods of ShaderSourceWGSL
1529void ShaderSourceWGSL::setDefault()
1530{
1531 ((ChainedStruct *) &chain)->setDefault();
1532 ((StringView *) &code)->setDefault();
1533 chain.sType = SType::ShaderSourceWGSL;
1534 chain.next = nullptr;
1535}
1536
1537// Methods of StencilFaceState
1538void StencilFaceState::setDefault()
1539{
1540 compare = CompareFunction::Always;
1541 failOp = StencilOperation::Keep;
1542 depthFailOp = StencilOperation::Keep;
1543 passOp = StencilOperation::Keep;
1544}
1545
1546// Methods of StorageTextureBindingLayout
1547void StorageTextureBindingLayout::setDefault()
1548{
1549 access = StorageTextureAccess::WriteOnly;
1550 format = TextureFormat::Undefined;
1551 viewDimension = TextureViewDimension::_2D;
1552}
1553
1554// Methods of SupportedFeatures
1555void SupportedFeatures::setDefault() {}
1556void SupportedFeatures::freeMembers() { return wgpuSupportedFeaturesFreeMembers(*this); }
1557
1558// Methods of SupportedWGSLLanguageFeatures
1559void SupportedWGSLLanguageFeatures::setDefault() {}
1560void SupportedWGSLLanguageFeatures::freeMembers() { return wgpuSupportedWGSLLanguageFeaturesFreeMembers(*this); }
1561
1562// Methods of SurfaceCapabilities
1563void SurfaceCapabilities::setDefault() {}
1564void SurfaceCapabilities::freeMembers() { return wgpuSurfaceCapabilitiesFreeMembers(*this); }
1565
1566// Methods of SurfaceConfiguration
1567void SurfaceConfiguration::setDefault()
1568{
1569 format = TextureFormat::Undefined;
1570 presentMode = PresentMode::Undefined;
1571}
1572
1573// Methods of SurfaceDescriptor
1574void SurfaceDescriptor::setDefault() { ((StringView *) &label)->setDefault(); }
1575
1576// Methods of SurfaceSourceAndroidNativeWindow
1577void SurfaceSourceAndroidNativeWindow::setDefault()
1578{
1579 ((ChainedStruct *) &chain)->setDefault();
1580 chain.sType = SType::SurfaceSourceAndroidNativeWindow;
1581 chain.next = nullptr;
1582}
1583
1584// Methods of SurfaceSourceMetalLayer
1585void SurfaceSourceMetalLayer::setDefault()
1586{
1587 ((ChainedStruct *) &chain)->setDefault();
1588 chain.sType = SType::SurfaceSourceMetalLayer;
1589 chain.next = nullptr;
1590}
1591
1592// Methods of SurfaceSourceWaylandSurface
1593void SurfaceSourceWaylandSurface::setDefault()
1594{
1595 ((ChainedStruct *) &chain)->setDefault();
1596 chain.sType = SType::SurfaceSourceWaylandSurface;
1597 chain.next = nullptr;
1598}
1599
1600// Methods of SurfaceSourceWindowsHWND
1601void SurfaceSourceWindowsHWND::setDefault()
1602{
1603 ((ChainedStruct *) &chain)->setDefault();
1604 chain.sType = SType::SurfaceSourceWindowsHWND;
1605 chain.next = nullptr;
1606}
1607
1608// Methods of SurfaceSourceXCBWindow
1609void SurfaceSourceXCBWindow::setDefault()
1610{
1611 ((ChainedStruct *) &chain)->setDefault();
1612 chain.sType = SType::SurfaceSourceXCBWindow;
1613 chain.next = nullptr;
1614}
1615
1616// Methods of SurfaceSourceXlibWindow
1617void SurfaceSourceXlibWindow::setDefault()
1618{
1619 ((ChainedStruct *) &chain)->setDefault();
1620 chain.sType = SType::SurfaceSourceXlibWindow;
1621 chain.next = nullptr;
1622}
1623
1624// Methods of SurfaceTexture
1625void SurfaceTexture::setDefault() {}
1626
1627// Methods of TexelCopyBufferLayout
1628void TexelCopyBufferLayout::setDefault() {}
1629
1630// Methods of TextureBindingLayout
1631void TextureBindingLayout::setDefault()
1632{
1633 sampleType = TextureSampleType::Float;
1634 viewDimension = TextureViewDimension::_2D;
1635 multisampled = false;
1636}
1637
1638// Methods of TextureViewDescriptor
1639void TextureViewDescriptor::setDefault()
1640{
1641 format = TextureFormat::Undefined;
1642 dimension = TextureViewDimension::Undefined;
1643 baseMipLevel = 0;
1644 baseArrayLayer = 0;
1645 aspect = TextureAspect::All;
1646 ((StringView *) &label)->setDefault();
1647}
1648
1649// Methods of VertexAttribute
1650void VertexAttribute::setDefault() {}
1651
1652// Methods of BindGroupDescriptor
1653void BindGroupDescriptor::setDefault() { ((StringView *) &label)->setDefault(); }
1654
1655// Methods of BindGroupLayoutEntry
1656void BindGroupLayoutEntry::setDefault()
1657{
1658 ((BufferBindingLayout *) &buffer)->setDefault();
1659 ((SamplerBindingLayout *) &sampler)->setDefault();
1660 ((TextureBindingLayout *) &texture)->setDefault();
1661 ((StorageTextureBindingLayout *) &storageTexture)->setDefault();
1662 buffer.type = BufferBindingType::Undefined;
1663 sampler.type = SamplerBindingType::Undefined;
1664 storageTexture.access = StorageTextureAccess::Undefined;
1665 texture.sampleType = TextureSampleType::Undefined;
1666}
1667
1668// Methods of BlendState
1669void BlendState::setDefault()
1670{
1671 ((BlendComponent *) &color)->setDefault();
1672 ((BlendComponent *) &alpha)->setDefault();
1673}
1674
1675// Methods of CompilationInfo
1676void CompilationInfo::setDefault() {}
1677
1678// Methods of ComputePassDescriptor
1679void ComputePassDescriptor::setDefault() { ((StringView *) &label)->setDefault(); }
1680
1681// Methods of DepthStencilState
1682void DepthStencilState::setDefault()
1683{
1684 format = TextureFormat::Undefined;
1685 depthWriteEnabled = OptionalBool::Undefined;
1686 depthCompare = CompareFunction::Undefined;
1687 stencilReadMask = 0xFFFFFFFF;
1688 stencilWriteMask = 0xFFFFFFFF;
1689 depthBias = 0;
1690 depthBiasSlopeScale = 0;
1691 depthBiasClamp = 0;
1692 ((StencilFaceState *) &stencilFront)->setDefault();
1693 ((StencilFaceState *) &stencilBack)->setDefault();
1694}
1695
1696// Methods of DeviceDescriptor
1697void DeviceDescriptor::setDefault()
1698{
1699 ((StringView *) &label)->setDefault();
1700 ((QueueDescriptor *) &defaultQueue)->setDefault();
1701 ((DeviceLostCallbackInfo *) &deviceLostCallbackInfo)->setDefault();
1702 ((UncapturedErrorCallbackInfo *) &uncapturedErrorCallbackInfo)->setDefault();
1703}
1704
1705// Methods of FutureWaitInfo
1706void FutureWaitInfo::setDefault() { ((Future *) &future)->setDefault(); }
1707
1708// Methods of InstanceDescriptor
1709void InstanceDescriptor::setDefault() { ((InstanceCapabilities *) &features)->setDefault(); }
1710
1711// Methods of ProgrammableStageDescriptor
1712void ProgrammableStageDescriptor::setDefault() { ((StringView *) &entryPoint)->setDefault(); }
1713
1714// Methods of RenderPassColorAttachment
1715void RenderPassColorAttachment::setDefault()
1716{
1717 loadOp = LoadOp::Undefined;
1718 storeOp = StoreOp::Undefined;
1719 ((Color *) &clearValue)->setDefault();
1720}
1721
1722// Methods of TexelCopyBufferInfo
1723void TexelCopyBufferInfo::setDefault() { ((TexelCopyBufferLayout *) &layout)->setDefault(); }
1724
1725// Methods of TexelCopyTextureInfo
1726void TexelCopyTextureInfo::setDefault()
1727{
1728 mipLevel = 0;
1729 aspect = TextureAspect::All;
1730 ((Origin3D *) &origin)->setDefault();
1731}
1732
1733// Methods of TextureDescriptor
1734void TextureDescriptor::setDefault()
1735{
1736 dimension = TextureDimension::_2D;
1737 format = TextureFormat::Undefined;
1738 mipLevelCount = 1;
1739 sampleCount = 1;
1740 ((StringView *) &label)->setDefault();
1741 ((Extent3D *) &size)->setDefault();
1742}
1743
1744// Methods of VertexBufferLayout
1745void VertexBufferLayout::setDefault() { stepMode = VertexStepMode::Vertex; }
1746
1747// Methods of BindGroupLayoutDescriptor
1748void BindGroupLayoutDescriptor::setDefault() { ((StringView *) &label)->setDefault(); }
1749
1750// Methods of ColorTargetState
1751void ColorTargetState::setDefault() { format = TextureFormat::Undefined; }
1752
1753// Methods of ComputePipelineDescriptor
1754void ComputePipelineDescriptor::setDefault()
1755{
1756 ((StringView *) &label)->setDefault();
1757 ((ProgrammableStageDescriptor *) &compute)->setDefault();
1758}
1759
1760// Methods of RenderPassDescriptor
1761void RenderPassDescriptor::setDefault() { ((StringView *) &label)->setDefault(); }
1762
1763// Methods of VertexState
1764void VertexState::setDefault() { ((StringView *) &entryPoint)->setDefault(); }
1765
1766// Methods of FragmentState
1767void FragmentState::setDefault() { ((StringView *) &entryPoint)->setDefault(); }
1768
1769// Methods of RenderPipelineDescriptor
1770void RenderPipelineDescriptor::setDefault()
1771{
1772 ((StringView *) &label)->setDefault();
1773 ((VertexState *) &vertex)->setDefault();
1774 ((PrimitiveState *) &primitive)->setDefault();
1775 ((MultisampleState *) &multisample)->setDefault();
1776}
1777
1778// Methods of InstanceExtras
1779void InstanceExtras::setDefault()
1780{
1781 dx12ShaderCompiler = Dx12Compiler::Undefined;
1782 ((ChainedStruct *) &chain)->setDefault();
1783 ((StringView *) &dxilPath)->setDefault();
1784 ((StringView *) &dxcPath)->setDefault();
1785 chain.sType = (WGPUSType) NativeSType::InstanceExtras;
1786 chain.next = nullptr;
1787}
1788
1789// Methods of DeviceExtras
1790void DeviceExtras::setDefault()
1791{
1792 ((ChainedStruct *) &chain)->setDefault();
1793 ((StringView *) &tracePath)->setDefault();
1794 chain.sType = (WGPUSType) NativeSType::DeviceExtras;
1795 chain.next = nullptr;
1796}
1797
1798// Methods of NativeLimits
1799void NativeLimits::setDefault()
1800{
1801 ((ChainedStructOut *) &chain)->setDefault();
1802 chain.sType = (WGPUSType) NativeSType::NativeLimits;
1803 chain.next = nullptr;
1804}
1805
1806// Methods of PushConstantRange
1807void PushConstantRange::setDefault() {}
1808
1809// Methods of PipelineLayoutExtras
1810void PipelineLayoutExtras::setDefault()
1811{
1812 ((ChainedStruct *) &chain)->setDefault();
1813 chain.sType = (WGPUSType) NativeSType::PipelineLayoutExtras;
1814 chain.next = nullptr;
1815}
1816
1817// Methods of ShaderDefine
1818void ShaderDefine::setDefault()
1819{
1820 ((StringView *) &name)->setDefault();
1821 ((StringView *) &value)->setDefault();
1822}
1823
1824// Methods of ShaderModuleGLSLDescriptor
1825void ShaderModuleGLSLDescriptor::setDefault()
1826{
1827 ((ChainedStruct *) &chain)->setDefault();
1828 ((StringView *) &code)->setDefault();
1829 chain.sType = (WGPUSType) NativeSType::ShaderModuleGLSLDescriptor;
1830 chain.next = nullptr;
1831}
1832
1833// Methods of ShaderModuleDescriptorSpirV
1834void ShaderModuleDescriptorSpirV::setDefault() { ((StringView *) &label)->setDefault(); }
1835
1836// Methods of RegistryReport
1837void RegistryReport::setDefault() {}
1838
1839// Methods of HubReport
1840void HubReport::setDefault()
1841{
1842 ((RegistryReport *) &adapters)->setDefault();
1843 ((RegistryReport *) &devices)->setDefault();
1844 ((RegistryReport *) &queues)->setDefault();
1845 ((RegistryReport *) &pipelineLayouts)->setDefault();
1846 ((RegistryReport *) &shaderModules)->setDefault();
1847 ((RegistryReport *) &bindGroupLayouts)->setDefault();
1848 ((RegistryReport *) &bindGroups)->setDefault();
1849 ((RegistryReport *) &commandBuffers)->setDefault();
1850 ((RegistryReport *) &renderBundles)->setDefault();
1851 ((RegistryReport *) &renderPipelines)->setDefault();
1852 ((RegistryReport *) &computePipelines)->setDefault();
1853 ((RegistryReport *) &pipelineCaches)->setDefault();
1854 ((RegistryReport *) &querySets)->setDefault();
1855 ((RegistryReport *) &buffers)->setDefault();
1856 ((RegistryReport *) &textures)->setDefault();
1857 ((RegistryReport *) &textureViews)->setDefault();
1858 ((RegistryReport *) &samplers)->setDefault();
1859}
1860
1861// Methods of GlobalReport
1862void GlobalReport::setDefault()
1863{
1864 ((RegistryReport *) &surfaces)->setDefault();
1865 ((HubReport *) &hub)->setDefault();
1866}
1867
1868// Methods of InstanceEnumerateAdapterOptions
1869void InstanceEnumerateAdapterOptions::setDefault() {}
1870
1871// Methods of BindGroupEntryExtras
1872void BindGroupEntryExtras::setDefault()
1873{
1874 ((ChainedStruct *) &chain)->setDefault();
1875 chain.sType = (WGPUSType) NativeSType::BindGroupEntryExtras;
1876 chain.next = nullptr;
1877}
1878
1879// Methods of BindGroupLayoutEntryExtras
1880void BindGroupLayoutEntryExtras::setDefault()
1881{
1882 ((ChainedStruct *) &chain)->setDefault();
1883 chain.sType = (WGPUSType) NativeSType::BindGroupLayoutEntryExtras;
1884 chain.next = nullptr;
1885}
1886
1887// Methods of QuerySetDescriptorExtras
1888void QuerySetDescriptorExtras::setDefault()
1889{
1890 ((ChainedStruct *) &chain)->setDefault();
1891 chain.sType = (WGPUSType) NativeSType::QuerySetDescriptorExtras;
1892 chain.next = nullptr;
1893}
1894
1895// Methods of SurfaceConfigurationExtras
1896void SurfaceConfigurationExtras::setDefault()
1897{
1898 ((ChainedStruct *) &chain)->setDefault();
1899 chain.sType = (WGPUSType) NativeSType::SurfaceConfigurationExtras;
1900 chain.next = nullptr;
1901}
1902
1903// Methods of Adapter
1904void Adapter::getFeatures(SupportedFeatures *features) const { return wgpuAdapterGetFeatures(m_raw, features); }
1905Status Adapter::getInfo(AdapterInfo *info) const { return static_cast<Status>(wgpuAdapterGetInfo(m_raw, info)); }
1906Status Adapter::getLimits(Limits *limits) const { return static_cast<Status>(wgpuAdapterGetLimits(m_raw, limits)); }
1907Bool Adapter::hasFeature(FeatureName feature) const
1908{
1909 return wgpuAdapterHasFeature(m_raw, static_cast<WGPUFeatureName>(feature));
1910}
1911Future Adapter::requestDevice(const DeviceDescriptor &descriptor, RequestDeviceCallbackInfo callbackInfo) const
1912{
1913 return wgpuAdapterRequestDevice(m_raw, &descriptor, callbackInfo);
1914}
1915void Adapter::addRef() const { return wgpuAdapterAddRef(m_raw); }
1916void Adapter::release() const { return wgpuAdapterRelease(m_raw); }
1917
1918// Methods of BindGroup
1919void BindGroup::setLabel(StringView label) const { return wgpuBindGroupSetLabel(m_raw, label); }
1920void BindGroup::addRef() const { return wgpuBindGroupAddRef(m_raw); }
1921void BindGroup::release() const { return wgpuBindGroupRelease(m_raw); }
1922
1923// Methods of BindGroupLayout
1924void BindGroupLayout::setLabel(StringView label) const { return wgpuBindGroupLayoutSetLabel(m_raw, label); }
1925void BindGroupLayout::addRef() const { return wgpuBindGroupLayoutAddRef(m_raw); }
1926void BindGroupLayout::release() const { return wgpuBindGroupLayoutRelease(m_raw); }
1927
1928// Methods of Buffer
1929void Buffer::destroy() const { return wgpuBufferDestroy(m_raw); }
1930void const *Buffer::getConstMappedRange(size_t offset, size_t size) const
1931{
1932 return wgpuBufferGetConstMappedRange(m_raw, offset, size);
1933}
1934BufferMapState Buffer::getMapState() const { return static_cast<BufferMapState>(wgpuBufferGetMapState(m_raw)); }
1935void *Buffer::getMappedRange(size_t offset, size_t size) const { return wgpuBufferGetMappedRange(m_raw, offset, size); }
1936uint64_t Buffer::getSize() const { return wgpuBufferGetSize(m_raw); }
1937BufferUsage Buffer::getUsage() const { return static_cast<BufferUsage>(wgpuBufferGetUsage(m_raw)); }
1938Future Buffer::mapAsync(MapMode mode, size_t offset, size_t size, BufferMapCallbackInfo callbackInfo) const
1939{
1940 return wgpuBufferMapAsync(m_raw, static_cast<WGPUMapMode>(mode), offset, size, callbackInfo);
1941}
1942void Buffer::setLabel(StringView label) const { return wgpuBufferSetLabel(m_raw, label); }
1943void Buffer::unmap() const { return wgpuBufferUnmap(m_raw); }
1944void Buffer::addRef() const { return wgpuBufferAddRef(m_raw); }
1945void Buffer::release() const { return wgpuBufferRelease(m_raw); }
1946
1947// Methods of CommandBuffer
1948void CommandBuffer::setLabel(StringView label) const { return wgpuCommandBufferSetLabel(m_raw, label); }
1949void CommandBuffer::addRef() const { return wgpuCommandBufferAddRef(m_raw); }
1950void CommandBuffer::release() const { return wgpuCommandBufferRelease(m_raw); }
1951
1952// Methods of CommandEncoder
1953ComputePassEncoder CommandEncoder::beginComputePass(const ComputePassDescriptor &descriptor) const
1954{
1955 return wgpuCommandEncoderBeginComputePass(m_raw, &descriptor);
1956}
1957ComputePassEncoder CommandEncoder::beginComputePass() const
1958{
1959 return wgpuCommandEncoderBeginComputePass(m_raw, nullptr);
1960}
1961RenderPassEncoder CommandEncoder::beginRenderPass(const RenderPassDescriptor &descriptor) const
1962{
1963 return wgpuCommandEncoderBeginRenderPass(m_raw, &descriptor);
1964}
1965void CommandEncoder::clearBuffer(Buffer buffer, uint64_t offset, uint64_t size) const
1966{
1967 return wgpuCommandEncoderClearBuffer(m_raw, buffer, offset, size);
1968}
1969void CommandEncoder::copyBufferToBuffer(Buffer source, uint64_t sourceOffset, Buffer destination,
1970 uint64_t destinationOffset, uint64_t size) const
1971{
1972 return wgpuCommandEncoderCopyBufferToBuffer(m_raw, source, sourceOffset, destination, destinationOffset, size);
1973}
1974void CommandEncoder::copyBufferToTexture(const TexelCopyBufferInfo &source, const TexelCopyTextureInfo &destination,
1975 const Extent3D &copySize) const
1976{
1977 return wgpuCommandEncoderCopyBufferToTexture(m_raw, &source, &destination, &copySize);
1978}
1979void CommandEncoder::copyTextureToBuffer(const TexelCopyTextureInfo &source, const TexelCopyBufferInfo &destination,
1980 const Extent3D &copySize) const
1981{
1982 return wgpuCommandEncoderCopyTextureToBuffer(m_raw, &source, &destination, &copySize);
1983}
1984void CommandEncoder::copyTextureToTexture(const TexelCopyTextureInfo &source, const TexelCopyTextureInfo &destination,
1985 const Extent3D &copySize) const
1986{
1987 return wgpuCommandEncoderCopyTextureToTexture(m_raw, &source, &destination, &copySize);
1988}
1989CommandBuffer CommandEncoder::finish(const CommandBufferDescriptor &descriptor) const
1990{
1991 return wgpuCommandEncoderFinish(m_raw, &descriptor);
1992}
1993CommandBuffer CommandEncoder::finish() const { return wgpuCommandEncoderFinish(m_raw, nullptr); }
1994void CommandEncoder::insertDebugMarker(StringView markerLabel) const
1995{
1996 return wgpuCommandEncoderInsertDebugMarker(m_raw, markerLabel);
1997}
1998void CommandEncoder::popDebugGroup() const { return wgpuCommandEncoderPopDebugGroup(m_raw); }
1999void CommandEncoder::pushDebugGroup(StringView groupLabel) const
2000{
2001 return wgpuCommandEncoderPushDebugGroup(m_raw, groupLabel);
2002}
2003void CommandEncoder::resolveQuerySet(QuerySet querySet, uint32_t firstQuery, uint32_t queryCount, Buffer destination,
2004 uint64_t destinationOffset) const
2005{
2006 return wgpuCommandEncoderResolveQuerySet(m_raw, querySet, firstQuery, queryCount, destination, destinationOffset);
2007}
2008void CommandEncoder::setLabel(StringView label) const { return wgpuCommandEncoderSetLabel(m_raw, label); }
2009void CommandEncoder::writeTimestamp(QuerySet querySet, uint32_t queryIndex) const
2010{
2011 return wgpuCommandEncoderWriteTimestamp(m_raw, querySet, queryIndex);
2012}
2013void CommandEncoder::addRef() const { return wgpuCommandEncoderAddRef(m_raw); }
2014void CommandEncoder::release() const { return wgpuCommandEncoderRelease(m_raw); }
2015
2016// Methods of ComputePassEncoder
2017void ComputePassEncoder::dispatchWorkgroups(uint32_t workgroupCountX, uint32_t workgroupCountY,
2018 uint32_t workgroupCountZ) const
2019{
2020 return wgpuComputePassEncoderDispatchWorkgroups(m_raw, workgroupCountX, workgroupCountY, workgroupCountZ);
2021}
2022void ComputePassEncoder::dispatchWorkgroupsIndirect(Buffer indirectBuffer, uint64_t indirectOffset) const
2023{
2024 return wgpuComputePassEncoderDispatchWorkgroupsIndirect(m_raw, indirectBuffer, indirectOffset);
2025}
2026void ComputePassEncoder::end() const { return wgpuComputePassEncoderEnd(m_raw); }
2027void ComputePassEncoder::insertDebugMarker(StringView markerLabel) const
2028{
2029 return wgpuComputePassEncoderInsertDebugMarker(m_raw, markerLabel);
2030}
2031void ComputePassEncoder::popDebugGroup() const { return wgpuComputePassEncoderPopDebugGroup(m_raw); }
2032void ComputePassEncoder::pushDebugGroup(StringView groupLabel) const
2033{
2034 return wgpuComputePassEncoderPushDebugGroup(m_raw, groupLabel);
2035}
2036void ComputePassEncoder::setBindGroup(uint32_t groupIndex, BindGroup group, size_t dynamicOffsetCount,
2037 uint32_t const *dynamicOffsets) const
2038{
2039 return wgpuComputePassEncoderSetBindGroup(m_raw, groupIndex, group, dynamicOffsetCount, dynamicOffsets);
2040}
2041void ComputePassEncoder::setBindGroup(uint32_t groupIndex, BindGroup group,
2042 const std::vector<uint32_t> &dynamicOffsets) const
2043{
2044 return wgpuComputePassEncoderSetBindGroup(m_raw, groupIndex, group, static_cast<size_t>(dynamicOffsets.size()),
2045 dynamicOffsets.data());
2046}
2047void ComputePassEncoder::setBindGroup(uint32_t groupIndex, BindGroup group, const uint32_t &dynamicOffsets) const
2048{
2049 return wgpuComputePassEncoderSetBindGroup(m_raw, groupIndex, group, 1, &dynamicOffsets);
2050}
2051void ComputePassEncoder::setLabel(StringView label) const { return wgpuComputePassEncoderSetLabel(m_raw, label); }
2052void ComputePassEncoder::setPipeline(ComputePipeline pipeline) const
2053{
2054 return wgpuComputePassEncoderSetPipeline(m_raw, pipeline);
2055}
2056void ComputePassEncoder::addRef() const { return wgpuComputePassEncoderAddRef(m_raw); }
2057void ComputePassEncoder::release() const { return wgpuComputePassEncoderRelease(m_raw); }
2058void ComputePassEncoder::setPushConstants(uint32_t offset, uint32_t sizeBytes, void const *data) const
2059{
2060 return wgpuComputePassEncoderSetPushConstants(m_raw, offset, sizeBytes, data);
2061}
2062void ComputePassEncoder::beginPipelineStatisticsQuery(QuerySet querySet, uint32_t queryIndex) const
2063{
2064 return wgpuComputePassEncoderBeginPipelineStatisticsQuery(m_raw, querySet, queryIndex);
2065}
2066void ComputePassEncoder::endPipelineStatisticsQuery() const
2067{
2068 return wgpuComputePassEncoderEndPipelineStatisticsQuery(m_raw);
2069}
2070void ComputePassEncoder::writeTimestamp(QuerySet querySet, uint32_t queryIndex) const
2071{
2072 return wgpuComputePassEncoderWriteTimestamp(m_raw, querySet, queryIndex);
2073}
2074
2075// Methods of ComputePipeline
2076BindGroupLayout ComputePipeline::getBindGroupLayout(uint32_t groupIndex) const
2077{
2078 return wgpuComputePipelineGetBindGroupLayout(m_raw, groupIndex);
2079}
2080void ComputePipeline::setLabel(StringView label) const { return wgpuComputePipelineSetLabel(m_raw, label); }
2081void ComputePipeline::addRef() const { return wgpuComputePipelineAddRef(m_raw); }
2082void ComputePipeline::release() const { return wgpuComputePipelineRelease(m_raw); }
2083
2084// Methods of Device
2085BindGroup Device::createBindGroup(const BindGroupDescriptor &descriptor) const
2086{
2087 return wgpuDeviceCreateBindGroup(m_raw, &descriptor);
2088}
2089BindGroupLayout Device::createBindGroupLayout(const BindGroupLayoutDescriptor &descriptor) const
2090{
2091 return wgpuDeviceCreateBindGroupLayout(m_raw, &descriptor);
2092}
2093Buffer Device::createBuffer(const BufferDescriptor &descriptor) const
2094{
2095 return wgpuDeviceCreateBuffer(m_raw, &descriptor);
2096}
2097CommandEncoder Device::createCommandEncoder(const CommandEncoderDescriptor &descriptor) const
2098{
2099 return wgpuDeviceCreateCommandEncoder(m_raw, &descriptor);
2100}
2101CommandEncoder Device::createCommandEncoder() const { return wgpuDeviceCreateCommandEncoder(m_raw, nullptr); }
2102ComputePipeline Device::createComputePipeline(const ComputePipelineDescriptor &descriptor) const
2103{
2104 return wgpuDeviceCreateComputePipeline(m_raw, &descriptor);
2105}
2106Future Device::createComputePipelineAsync(const ComputePipelineDescriptor &descriptor,
2107 CreateComputePipelineAsyncCallbackInfo callbackInfo) const
2108{
2109 return wgpuDeviceCreateComputePipelineAsync(m_raw, &descriptor, callbackInfo);
2110}
2111PipelineLayout Device::createPipelineLayout(const PipelineLayoutDescriptor &descriptor) const
2112{
2113 return wgpuDeviceCreatePipelineLayout(m_raw, &descriptor);
2114}
2115QuerySet Device::createQuerySet(const QuerySetDescriptor &descriptor) const
2116{
2117 return wgpuDeviceCreateQuerySet(m_raw, &descriptor);
2118}
2119RenderBundleEncoder Device::createRenderBundleEncoder(const RenderBundleEncoderDescriptor &descriptor) const
2120{
2121 return wgpuDeviceCreateRenderBundleEncoder(m_raw, &descriptor);
2122}
2123RenderPipeline Device::createRenderPipeline(const RenderPipelineDescriptor &descriptor) const
2124{
2125 return wgpuDeviceCreateRenderPipeline(m_raw, &descriptor);
2126}
2127Future Device::createRenderPipelineAsync(const RenderPipelineDescriptor &descriptor,
2128 CreateRenderPipelineAsyncCallbackInfo callbackInfo) const
2129{
2130 return wgpuDeviceCreateRenderPipelineAsync(m_raw, &descriptor, callbackInfo);
2131}
2132Sampler Device::createSampler(const SamplerDescriptor &descriptor) const
2133{
2134 return wgpuDeviceCreateSampler(m_raw, &descriptor);
2135}
2136Sampler Device::createSampler() const { return wgpuDeviceCreateSampler(m_raw, nullptr); }
2137ShaderModule Device::createShaderModule(const ShaderModuleDescriptor &descriptor) const
2138{
2139 return wgpuDeviceCreateShaderModule(m_raw, &descriptor);
2140}
2141Texture Device::createTexture(const TextureDescriptor &descriptor) const
2142{
2143 return wgpuDeviceCreateTexture(m_raw, &descriptor);
2144}
2145void Device::destroy() const { return wgpuDeviceDestroy(m_raw); }
2146AdapterInfo Device::getAdapterInfo() const { return wgpuDeviceGetAdapterInfo(m_raw); }
2147void Device::getFeatures(SupportedFeatures *features) const { return wgpuDeviceGetFeatures(m_raw, features); }
2148Status Device::getLimits(Limits *limits) const { return static_cast<Status>(wgpuDeviceGetLimits(m_raw, limits)); }
2149Queue Device::getQueue() const { return wgpuDeviceGetQueue(m_raw); }
2150Bool Device::hasFeature(FeatureName feature) const
2151{
2152 return wgpuDeviceHasFeature(m_raw, static_cast<WGPUFeatureName>(feature));
2153}
2154Future Device::popErrorScope(PopErrorScopeCallbackInfo callbackInfo) const
2155{
2156 return wgpuDevicePopErrorScope(m_raw, callbackInfo);
2157}
2158void Device::pushErrorScope(ErrorFilter filter) const
2159{
2160 return wgpuDevicePushErrorScope(m_raw, static_cast<WGPUErrorFilter>(filter));
2161}
2162void Device::setLabel(StringView label) const { return wgpuDeviceSetLabel(m_raw, label); }
2163void Device::addRef() const { return wgpuDeviceAddRef(m_raw); }
2164void Device::release() const { return wgpuDeviceRelease(m_raw); }
2165Bool Device::poll(Bool wait, SubmissionIndex const *wrappedSubmissionIndex) const
2166{
2167 return wgpuDevicePoll(m_raw, wait, wrappedSubmissionIndex);
2168}
2169ShaderModule Device::createShaderModuleSpirV(const ShaderModuleDescriptorSpirV &descriptor) const
2170{
2171 return wgpuDeviceCreateShaderModuleSpirV(m_raw, &descriptor);
2172}
2173
2174// Methods of Instance
2175Surface Instance::createSurface(const SurfaceDescriptor &descriptor) const
2176{
2177 return wgpuInstanceCreateSurface(m_raw, &descriptor);
2178}
2179Status Instance::getWGSLLanguageFeatures(SupportedWGSLLanguageFeatures *features) const
2180{
2181 return static_cast<Status>(wgpuInstanceGetWGSLLanguageFeatures(m_raw, features));
2182}
2183Bool Instance::hasWGSLLanguageFeature(WGSLLanguageFeatureName feature) const
2184{
2185 return wgpuInstanceHasWGSLLanguageFeature(m_raw, static_cast<WGPUWGSLLanguageFeatureName>(feature));
2186}
2187void Instance::processEvents() const { return wgpuInstanceProcessEvents(m_raw); }
2188Future Instance::requestAdapter(const RequestAdapterOptions &options, RequestAdapterCallbackInfo callbackInfo) const
2189{
2190 return wgpuInstanceRequestAdapter(m_raw, &options, callbackInfo);
2191}
2192WaitStatus Instance::waitAny(size_t futureCount, FutureWaitInfo *futures, uint64_t timeoutNS) const
2193{
2194 return static_cast<WaitStatus>(wgpuInstanceWaitAny(m_raw, futureCount, futures, timeoutNS));
2195}
2196void Instance::addRef() const { return wgpuInstanceAddRef(m_raw); }
2197void Instance::release() const { return wgpuInstanceRelease(m_raw); }
2198size_t Instance::enumerateAdapters(const InstanceEnumerateAdapterOptions &options, Adapter *adapters) const
2199{
2200 return wgpuInstanceEnumerateAdapters(m_raw, &options, reinterpret_cast<WGPUAdapter *>(adapters));
2201}
2202
2203// Methods of PipelineLayout
2204void PipelineLayout::setLabel(StringView label) const { return wgpuPipelineLayoutSetLabel(m_raw, label); }
2205void PipelineLayout::addRef() const { return wgpuPipelineLayoutAddRef(m_raw); }
2206void PipelineLayout::release() const { return wgpuPipelineLayoutRelease(m_raw); }
2207
2208// Methods of QuerySet
2209void QuerySet::destroy() const { return wgpuQuerySetDestroy(m_raw); }
2210uint32_t QuerySet::getCount() const { return wgpuQuerySetGetCount(m_raw); }
2211QueryType QuerySet::getType() const { return static_cast<QueryType>(wgpuQuerySetGetType(m_raw)); }
2212void QuerySet::setLabel(StringView label) const { return wgpuQuerySetSetLabel(m_raw, label); }
2213void QuerySet::addRef() const { return wgpuQuerySetAddRef(m_raw); }
2214void QuerySet::release() const { return wgpuQuerySetRelease(m_raw); }
2215
2216// Methods of Queue
2217Future Queue::onSubmittedWorkDone(QueueWorkDoneCallbackInfo callbackInfo) const
2218{
2219 return wgpuQueueOnSubmittedWorkDone(m_raw, callbackInfo);
2220}
2221void Queue::setLabel(StringView label) const { return wgpuQueueSetLabel(m_raw, label); }
2222void Queue::submit(size_t commandCount, CommandBuffer const *commands) const
2223{
2224 return wgpuQueueSubmit(m_raw, commandCount, reinterpret_cast<WGPUCommandBuffer const *>(commands));
2225}
2226void Queue::submit(const std::vector<WGPUCommandBuffer> &commands) const
2227{
2228 return wgpuQueueSubmit(m_raw, static_cast<size_t>(commands.size()), commands.data());
2229}
2230void Queue::submit(const WGPUCommandBuffer &commands) const { return wgpuQueueSubmit(m_raw, 1, &commands); }
2231void Queue::writeBuffer(Buffer buffer, uint64_t bufferOffset, void const *data, size_t size) const
2232{
2233 return wgpuQueueWriteBuffer(m_raw, buffer, bufferOffset, data, size);
2234}
2235void Queue::writeTexture(const TexelCopyTextureInfo &destination, void const *data, size_t dataSize,
2236 const TexelCopyBufferLayout &dataLayout, const Extent3D &writeSize) const
2237{
2238 return wgpuQueueWriteTexture(m_raw, &destination, data, dataSize, &dataLayout, &writeSize);
2239}
2240void Queue::addRef() const { return wgpuQueueAddRef(m_raw); }
2241void Queue::release() const { return wgpuQueueRelease(m_raw); }
2242SubmissionIndex Queue::submitForIndex(size_t commandCount, CommandBuffer const *commands) const
2243{
2244 return wgpuQueueSubmitForIndex(m_raw, commandCount, reinterpret_cast<WGPUCommandBuffer const *>(commands));
2245}
2246SubmissionIndex Queue::submitForIndex(const std::vector<WGPUCommandBuffer> &commands) const
2247{
2248 return wgpuQueueSubmitForIndex(m_raw, static_cast<size_t>(commands.size()), commands.data());
2249}
2250SubmissionIndex Queue::submitForIndex(const WGPUCommandBuffer &commands) const
2251{
2252 return wgpuQueueSubmitForIndex(m_raw, 1, &commands);
2253}
2254
2255// Methods of RenderBundle
2256void RenderBundle::setLabel(StringView label) const { return wgpuRenderBundleSetLabel(m_raw, label); }
2257void RenderBundle::addRef() const { return wgpuRenderBundleAddRef(m_raw); }
2258void RenderBundle::release() const { return wgpuRenderBundleRelease(m_raw); }
2259
2260// Methods of RenderBundleEncoder
2261void RenderBundleEncoder::draw(uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex,
2262 uint32_t firstInstance) const
2263{
2264 return wgpuRenderBundleEncoderDraw(m_raw, vertexCount, instanceCount, firstVertex, firstInstance);
2265}
2266void RenderBundleEncoder::drawIndexed(uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex,
2267 int32_t baseVertex, uint32_t firstInstance) const
2268{
2269 return wgpuRenderBundleEncoderDrawIndexed(m_raw, indexCount, instanceCount, firstIndex, baseVertex, firstInstance);
2270}
2271void RenderBundleEncoder::drawIndexedIndirect(Buffer indirectBuffer, uint64_t indirectOffset) const
2272{
2273 return wgpuRenderBundleEncoderDrawIndexedIndirect(m_raw, indirectBuffer, indirectOffset);
2274}
2275void RenderBundleEncoder::drawIndirect(Buffer indirectBuffer, uint64_t indirectOffset) const
2276{
2277 return wgpuRenderBundleEncoderDrawIndirect(m_raw, indirectBuffer, indirectOffset);
2278}
2279RenderBundle RenderBundleEncoder::finish(const RenderBundleDescriptor &descriptor) const
2280{
2281 return wgpuRenderBundleEncoderFinish(m_raw, &descriptor);
2282}
2283RenderBundle RenderBundleEncoder::finish() const { return wgpuRenderBundleEncoderFinish(m_raw, nullptr); }
2284void RenderBundleEncoder::insertDebugMarker(StringView markerLabel) const
2285{
2286 return wgpuRenderBundleEncoderInsertDebugMarker(m_raw, markerLabel);
2287}
2288void RenderBundleEncoder::popDebugGroup() const { return wgpuRenderBundleEncoderPopDebugGroup(m_raw); }
2289void RenderBundleEncoder::pushDebugGroup(StringView groupLabel) const
2290{
2291 return wgpuRenderBundleEncoderPushDebugGroup(m_raw, groupLabel);
2292}
2293void RenderBundleEncoder::setBindGroup(uint32_t groupIndex, BindGroup group, size_t dynamicOffsetCount,
2294 uint32_t const *dynamicOffsets) const
2295{
2296 return wgpuRenderBundleEncoderSetBindGroup(m_raw, groupIndex, group, dynamicOffsetCount, dynamicOffsets);
2297}
2298void RenderBundleEncoder::setBindGroup(uint32_t groupIndex, BindGroup group,
2299 const std::vector<uint32_t> &dynamicOffsets) const
2300{
2301 return wgpuRenderBundleEncoderSetBindGroup(m_raw, groupIndex, group, static_cast<size_t>(dynamicOffsets.size()),
2302 dynamicOffsets.data());
2303}
2304void RenderBundleEncoder::setBindGroup(uint32_t groupIndex, BindGroup group, const uint32_t &dynamicOffsets) const
2305{
2306 return wgpuRenderBundleEncoderSetBindGroup(m_raw, groupIndex, group, 1, &dynamicOffsets);
2307}
2308void RenderBundleEncoder::setIndexBuffer(Buffer buffer, IndexFormat format, uint64_t offset, uint64_t size) const
2309{
2310 return wgpuRenderBundleEncoderSetIndexBuffer(m_raw, buffer, static_cast<WGPUIndexFormat>(format), offset, size);
2311}
2312void RenderBundleEncoder::setLabel(StringView label) const { return wgpuRenderBundleEncoderSetLabel(m_raw, label); }
2313void RenderBundleEncoder::setPipeline(RenderPipeline pipeline) const
2314{
2315 return wgpuRenderBundleEncoderSetPipeline(m_raw, pipeline);
2316}
2317void RenderBundleEncoder::setVertexBuffer(uint32_t slot, Buffer buffer, uint64_t offset, uint64_t size) const
2318{
2319 return wgpuRenderBundleEncoderSetVertexBuffer(m_raw, slot, buffer, offset, size);
2320}
2321void RenderBundleEncoder::addRef() const { return wgpuRenderBundleEncoderAddRef(m_raw); }
2322void RenderBundleEncoder::release() const { return wgpuRenderBundleEncoderRelease(m_raw); }
2323void RenderBundleEncoder::setPushConstants(ShaderStage stages, uint32_t offset, uint32_t sizeBytes,
2324 void const *data) const
2325{
2326 return wgpuRenderBundleEncoderSetPushConstants(m_raw, static_cast<WGPUShaderStage>(stages), offset, sizeBytes,
2327 data);
2328}
2329
2330// Methods of RenderPassEncoder
2331void RenderPassEncoder::beginOcclusionQuery(uint32_t queryIndex) const
2332{
2333 return wgpuRenderPassEncoderBeginOcclusionQuery(m_raw, queryIndex);
2334}
2335void RenderPassEncoder::draw(uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex,
2336 uint32_t firstInstance) const
2337{
2338 return wgpuRenderPassEncoderDraw(m_raw, vertexCount, instanceCount, firstVertex, firstInstance);
2339}
2340void RenderPassEncoder::drawIndexed(uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex,
2341 int32_t baseVertex, uint32_t firstInstance) const
2342{
2343 return wgpuRenderPassEncoderDrawIndexed(m_raw, indexCount, instanceCount, firstIndex, baseVertex, firstInstance);
2344}
2345void RenderPassEncoder::drawIndexedIndirect(Buffer indirectBuffer, uint64_t indirectOffset) const
2346{
2347 return wgpuRenderPassEncoderDrawIndexedIndirect(m_raw, indirectBuffer, indirectOffset);
2348}
2349void RenderPassEncoder::drawIndirect(Buffer indirectBuffer, uint64_t indirectOffset) const
2350{
2351 return wgpuRenderPassEncoderDrawIndirect(m_raw, indirectBuffer, indirectOffset);
2352}
2353void RenderPassEncoder::end() const { return wgpuRenderPassEncoderEnd(m_raw); }
2354void RenderPassEncoder::endOcclusionQuery() const { return wgpuRenderPassEncoderEndOcclusionQuery(m_raw); }
2355void RenderPassEncoder::executeBundles(size_t bundleCount, RenderBundle const *bundles) const
2356{
2357 return wgpuRenderPassEncoderExecuteBundles(m_raw, bundleCount, reinterpret_cast<WGPURenderBundle const *>(bundles));
2358}
2359void RenderPassEncoder::executeBundles(const std::vector<WGPURenderBundle> &bundles) const
2360{
2361 return wgpuRenderPassEncoderExecuteBundles(m_raw, static_cast<size_t>(bundles.size()), bundles.data());
2362}
2363void RenderPassEncoder::executeBundles(const WGPURenderBundle &bundles) const
2364{
2365 return wgpuRenderPassEncoderExecuteBundles(m_raw, 1, &bundles);
2366}
2367void RenderPassEncoder::insertDebugMarker(StringView markerLabel) const
2368{
2369 return wgpuRenderPassEncoderInsertDebugMarker(m_raw, markerLabel);
2370}
2371void RenderPassEncoder::popDebugGroup() const { return wgpuRenderPassEncoderPopDebugGroup(m_raw); }
2372void RenderPassEncoder::pushDebugGroup(StringView groupLabel) const
2373{
2374 return wgpuRenderPassEncoderPushDebugGroup(m_raw, groupLabel);
2375}
2376void RenderPassEncoder::setBindGroup(uint32_t groupIndex, BindGroup group, size_t dynamicOffsetCount,
2377 uint32_t const *dynamicOffsets) const
2378{
2379 return wgpuRenderPassEncoderSetBindGroup(m_raw, groupIndex, group, dynamicOffsetCount, dynamicOffsets);
2380}
2381void RenderPassEncoder::setBindGroup(uint32_t groupIndex, BindGroup group,
2382 const std::vector<uint32_t> &dynamicOffsets) const
2383{
2384 return wgpuRenderPassEncoderSetBindGroup(m_raw, groupIndex, group, static_cast<size_t>(dynamicOffsets.size()),
2385 dynamicOffsets.data());
2386}
2387void RenderPassEncoder::setBindGroup(uint32_t groupIndex, BindGroup group, const uint32_t &dynamicOffsets) const
2388{
2389 return wgpuRenderPassEncoderSetBindGroup(m_raw, groupIndex, group, 1, &dynamicOffsets);
2390}
2391void RenderPassEncoder::setBlendConstant(const Color &color) const
2392{
2393 return wgpuRenderPassEncoderSetBlendConstant(m_raw, &color);
2394}
2395void RenderPassEncoder::setIndexBuffer(Buffer buffer, IndexFormat format, uint64_t offset, uint64_t size) const
2396{
2397 return wgpuRenderPassEncoderSetIndexBuffer(m_raw, buffer, static_cast<WGPUIndexFormat>(format), offset, size);
2398}
2399void RenderPassEncoder::setLabel(StringView label) const { return wgpuRenderPassEncoderSetLabel(m_raw, label); }
2400void RenderPassEncoder::setPipeline(RenderPipeline pipeline) const
2401{
2402 return wgpuRenderPassEncoderSetPipeline(m_raw, pipeline);
2403}
2404void RenderPassEncoder::setScissorRect(uint32_t x, uint32_t y, uint32_t width, uint32_t height) const
2405{
2406 return wgpuRenderPassEncoderSetScissorRect(m_raw, x, y, width, height);
2407}
2408void RenderPassEncoder::setStencilReference(uint32_t reference) const
2409{
2410 return wgpuRenderPassEncoderSetStencilReference(m_raw, reference);
2411}
2412void RenderPassEncoder::setVertexBuffer(uint32_t slot, Buffer buffer, uint64_t offset, uint64_t size) const
2413{
2414 return wgpuRenderPassEncoderSetVertexBuffer(m_raw, slot, buffer, offset, size);
2415}
2416void RenderPassEncoder::setViewport(float x, float y, float width, float height, float minDepth, float maxDepth) const
2417{
2418 return wgpuRenderPassEncoderSetViewport(m_raw, x, y, width, height, minDepth, maxDepth);
2419}
2420void RenderPassEncoder::addRef() const { return wgpuRenderPassEncoderAddRef(m_raw); }
2421void RenderPassEncoder::release() const { return wgpuRenderPassEncoderRelease(m_raw); }
2422void RenderPassEncoder::setPushConstants(ShaderStage stages, uint32_t offset, uint32_t sizeBytes,
2423 void const *data) const
2424{
2425 return wgpuRenderPassEncoderSetPushConstants(m_raw, static_cast<WGPUShaderStage>(stages), offset, sizeBytes, data);
2426}
2427void RenderPassEncoder::multiDrawIndirect(Buffer buffer, uint64_t offset, uint32_t count) const
2428{
2429 return wgpuRenderPassEncoderMultiDrawIndirect(m_raw, buffer, offset, count);
2430}
2431void RenderPassEncoder::multiDrawIndexedIndirect(Buffer buffer, uint64_t offset, uint32_t count) const
2432{
2433 return wgpuRenderPassEncoderMultiDrawIndexedIndirect(m_raw, buffer, offset, count);
2434}
2435void RenderPassEncoder::multiDrawIndirectCount(Buffer buffer, uint64_t offset, Buffer count_buffer,
2436 uint64_t count_buffer_offset, uint32_t max_count) const
2437{
2438 return wgpuRenderPassEncoderMultiDrawIndirectCount(m_raw, buffer, offset, count_buffer, count_buffer_offset,
2439 max_count);
2440}
2441void RenderPassEncoder::multiDrawIndexedIndirectCount(Buffer buffer, uint64_t offset, Buffer count_buffer,
2442 uint64_t count_buffer_offset, uint32_t max_count) const
2443{
2444 return wgpuRenderPassEncoderMultiDrawIndexedIndirectCount(m_raw, buffer, offset, count_buffer, count_buffer_offset,
2445 max_count);
2446}
2447void RenderPassEncoder::beginPipelineStatisticsQuery(QuerySet querySet, uint32_t queryIndex) const
2448{
2449 return wgpuRenderPassEncoderBeginPipelineStatisticsQuery(m_raw, querySet, queryIndex);
2450}
2451void RenderPassEncoder::endPipelineStatisticsQuery() const
2452{
2453 return wgpuRenderPassEncoderEndPipelineStatisticsQuery(m_raw);
2454}
2455void RenderPassEncoder::writeTimestamp(QuerySet querySet, uint32_t queryIndex) const
2456{
2457 return wgpuRenderPassEncoderWriteTimestamp(m_raw, querySet, queryIndex);
2458}
2459
2460// Methods of RenderPipeline
2461BindGroupLayout RenderPipeline::getBindGroupLayout(uint32_t groupIndex) const
2462{
2463 return wgpuRenderPipelineGetBindGroupLayout(m_raw, groupIndex);
2464}
2465void RenderPipeline::setLabel(StringView label) const { return wgpuRenderPipelineSetLabel(m_raw, label); }
2466void RenderPipeline::addRef() const { return wgpuRenderPipelineAddRef(m_raw); }
2467void RenderPipeline::release() const { return wgpuRenderPipelineRelease(m_raw); }
2468
2469// Methods of Sampler
2470void Sampler::setLabel(StringView label) const { return wgpuSamplerSetLabel(m_raw, label); }
2471void Sampler::addRef() const { return wgpuSamplerAddRef(m_raw); }
2472void Sampler::release() const { return wgpuSamplerRelease(m_raw); }
2473
2474// Methods of ShaderModule
2475Future ShaderModule::getCompilationInfo(CompilationInfoCallbackInfo callbackInfo) const
2476{
2477 return wgpuShaderModuleGetCompilationInfo(m_raw, callbackInfo);
2478}
2479void ShaderModule::setLabel(StringView label) const { return wgpuShaderModuleSetLabel(m_raw, label); }
2480void ShaderModule::addRef() const { return wgpuShaderModuleAddRef(m_raw); }
2481void ShaderModule::release() const { return wgpuShaderModuleRelease(m_raw); }
2482
2483// Methods of Surface
2484void Surface::configure(const SurfaceConfiguration &config) const { return wgpuSurfaceConfigure(m_raw, &config); }
2485Status Surface::getCapabilities(Adapter adapter, SurfaceCapabilities *capabilities) const
2486{
2487 return static_cast<Status>(wgpuSurfaceGetCapabilities(m_raw, adapter, capabilities));
2488}
2489void Surface::getCurrentTexture(SurfaceTexture *surfaceTexture) const
2490{
2491 return wgpuSurfaceGetCurrentTexture(m_raw, surfaceTexture);
2492}
2493Status Surface::present() const { return static_cast<Status>(wgpuSurfacePresent(m_raw)); }
2494void Surface::setLabel(StringView label) const { return wgpuSurfaceSetLabel(m_raw, label); }
2495void Surface::unconfigure() const { return wgpuSurfaceUnconfigure(m_raw); }
2496void Surface::addRef() const { return wgpuSurfaceAddRef(m_raw); }
2497void Surface::release() const { return wgpuSurfaceRelease(m_raw); }
2498
2499// Methods of Texture
2500TextureView Texture::createView(const TextureViewDescriptor &descriptor) const
2501{
2502 return wgpuTextureCreateView(m_raw, &descriptor);
2503}
2504TextureView Texture::createView() const { return wgpuTextureCreateView(m_raw, nullptr); }
2505void Texture::destroy() const { return wgpuTextureDestroy(m_raw); }
2506uint32_t Texture::getDepthOrArrayLayers() const { return wgpuTextureGetDepthOrArrayLayers(m_raw); }
2507TextureDimension Texture::getDimension() const { return static_cast<TextureDimension>(wgpuTextureGetDimension(m_raw)); }
2508TextureFormat Texture::getFormat() const { return static_cast<TextureFormat>(wgpuTextureGetFormat(m_raw)); }
2509uint32_t Texture::getHeight() const { return wgpuTextureGetHeight(m_raw); }
2510uint32_t Texture::getMipLevelCount() const { return wgpuTextureGetMipLevelCount(m_raw); }
2511uint32_t Texture::getSampleCount() const { return wgpuTextureGetSampleCount(m_raw); }
2512TextureUsage Texture::getUsage() const { return static_cast<TextureUsage>(wgpuTextureGetUsage(m_raw)); }
2513uint32_t Texture::getWidth() const { return wgpuTextureGetWidth(m_raw); }
2514void Texture::setLabel(StringView label) const { return wgpuTextureSetLabel(m_raw, label); }
2515void Texture::addRef() const { return wgpuTextureAddRef(m_raw); }
2516void Texture::release() const { return wgpuTextureRelease(m_raw); }
2517
2518// Methods of TextureView
2519void TextureView::setLabel(StringView label) const { return wgpuTextureViewSetLabel(m_raw, label); }
2520void TextureView::addRef() const { return wgpuTextureViewAddRef(m_raw); }
2521void TextureView::release() const { return wgpuTextureViewRelease(m_raw); }
2522
2523// Extra implementations
2524Adapter Instance::requestAdapter(const RequestAdapterOptions &options)
2525{
2526 struct Context {
2527 Adapter adapter = nullptr;
2528 bool requestEnded = false;
2529 };
2530 Context context;
2531
2532 RequestAdapterCallbackInfo callbackInfo;
2533 callbackInfo.nextInChain = nullptr;
2534 callbackInfo.userdata1 = &context;
2535 callbackInfo.callback = [](WGPURequestAdapterStatus status, WGPUAdapter adapter, WGPUStringView message,
2536 void *userdata1, [[maybe_unused]] void *userdata2) {
2537 Context &context = *reinterpret_cast<Context *>(userdata1);
2538 if (status == RequestAdapterStatus::Success)
2539 {
2540 context.adapter = adapter;
2541 }
2542 else
2543 {
2544 std::cout << "Could not get WebGPU adapter: " << StringView(message) << std::endl;
2545 }
2546 context.requestEnded = true;
2547 };
2548 callbackInfo.mode = CallbackMode::AllowSpontaneous;
2549 requestAdapter(options, callbackInfo);
2550
2551# if __EMSCRIPTEN__
2552 while (!context.requestEnded)
2553 {
2554 emscripten_sleep(50);
2555 }
2556# endif
2557
2558 assert(context.requestEnded);
2559 return context.adapter;
2560}
2561
2562Device Adapter::requestDevice(const DeviceDescriptor &descriptor)
2563{
2564 struct Context {
2565 Device device = nullptr;
2566 bool requestEnded = false;
2567 };
2568 Context context;
2569
2570 RequestDeviceCallbackInfo callbackInfo;
2571 callbackInfo.nextInChain = nullptr;
2572 callbackInfo.userdata1 = &context;
2573 callbackInfo.callback = [](WGPURequestDeviceStatus status, WGPUDevice device, WGPUStringView message,
2574 void *userdata1, [[maybe_unused]] void *userdata2) {
2575 Context &context = *reinterpret_cast<Context *>(userdata1);
2576 if (status == RequestDeviceStatus::Success)
2577 {
2578 context.device = device;
2579 }
2580 else
2581 {
2582 std::cout << "Could not get WebGPU device: " << StringView(message) << std::endl;
2583 }
2584 context.requestEnded = true;
2585 };
2586 callbackInfo.mode = CallbackMode::AllowSpontaneous;
2587 requestDevice(descriptor, callbackInfo);
2588
2589# if __EMSCRIPTEN__
2590 while (!context.requestEnded)
2591 {
2592 emscripten_sleep(50);
2593 }
2594# endif
2595
2596 assert(context.requestEnded);
2597 return context.device;
2598}
2599
2600StringView::operator std::string_view() const
2601{
2602 return length == WGPU_STRLEN ? std::string_view(data) : std::string_view(data, length);
2603}
2604
2605#endif // WEBGPU_CPP_IMPLEMENTATION
2606
2607#undef HANDLE
2608#undef DESCRIPTOR
2609#undef ENUM
2610#undef ENUM_ENTRY
2611#undef END
2612
2613} // namespace wgpu
static int count
Definition SystemSetTest.cpp:7
Definition webgpu.hpp:75
void dispatchWorkgroupsIndirect(Buffer indirectBuffer, uint64_t indirectOffset) const
Status getCapabilities(Adapter adapter, SurfaceCapabilities *capabilities) const
Queue getQueue() const
size_t enumerateAdapters(const InstanceEnumerateAdapterOptions &options, Adapter *adapters) const
Bool hasWGSLLanguageFeature(WGSLLanguageFeatureName feature) const
uint64_t Flags
Definition webgpu.hpp:166
constexpr DefaultFlag Default
Definition webgpu.hpp:78
Future createRenderPipelineAsync(const RenderPipelineDescriptor &descriptor, CreateRenderPipelineAsyncCallbackInfo callbackInfo) const
END WGPUAddressMode_Undefined ENUM_ENTRY(ClampToEdge, WGPUAddressMode_ClampToEdge) ENUM_ENTRY(Repeat
void resolveQuerySet(QuerySet querySet, uint32_t firstQuery, uint32_t queryCount, Buffer destination, uint64_t destinationOffset) const
ShaderModule createShaderModule(const ShaderModuleDescriptor &descriptor) const
std::function< void(PopErrorScopeStatus status, ErrorType type, StringView message, void *userdata1)> PopErrorScopeCallback
Definition webgpu.hpp:970
uint32_t getHeight() const
void writeTimestamp(QuerySet querySet, uint32_t queryIndex) const
void const * getConstMappedRange(size_t offset, size_t size) const
void copyBufferToBuffer(Buffer source, uint64_t sourceOffset, Buffer destination, uint64_t destinationOffset, uint64_t size) const
void endPipelineStatisticsQuery() const
Buffer createBuffer(const BufferDescriptor &descriptor) const
RenderPipeline createRenderPipeline(const RenderPipelineDescriptor &descriptor) const
CommandBuffer finish(const CommandBufferDescriptor &descriptor) const
ComputePipeline createComputePipeline(const ComputePipelineDescriptor &descriptor) const
void unmap() const
END ENUM(AddressMode) ENUM_ENTRY(Undefined
void processEvents() const
void drawIndexed(uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t baseVertex, uint32_t firstInstance) const
Future requestAdapter(const RequestAdapterOptions &options, RequestAdapterCallbackInfo callbackInfo) const
std::function< void(RequestDeviceStatus status, Device device, StringView message, void *userdata1)> RequestDeviceCallback
Definition webgpu.hpp:975
TextureView createView() const
void freeMembers()
void setViewport(float x, float y, float width, float height, float minDepth, float maxDepth) const
void setScissorRect(uint32_t x, uint32_t y, uint32_t width, uint32_t height) const
void beginPipelineStatisticsQuery(QuerySet querySet, uint32_t queryIndex) const
Future popErrorScope(PopErrorScopeCallbackInfo callbackInfo) const
std::function< void(RequestAdapterStatus status, Adapter adapter, StringView message, void *userdata1)> RequestAdapterCallback
Definition webgpu.hpp:973
void * getMappedRange(size_t offset, size_t size) const
void writeBuffer(Buffer buffer, uint64_t bufferOffset, void const *data, size_t size) const
void submit(size_t commandCount, CommandBuffer const *commands) const
void writeTexture(const TexelCopyTextureInfo &destination, void const *data, size_t dataSize, const TexelCopyBufferLayout &dataLayout, const Extent3D &writeSize) const
BufferMapState getMapState() const
void pushDebugGroup(StringView groupLabel) const
uint32_t getWidth() const
uint64_t SubmissionIndex
Definition webgpu.hpp:168
CommandEncoder createCommandEncoder(const CommandEncoderDescriptor &descriptor) const
Future mapAsync(MapMode mode, size_t offset, size_t size, BufferMapCallbackInfo callbackInfo) const
std::function< void(CompilationInfoRequestStatus status, const CompilationInfo &compilationInfo, void *userdata1)> CompilationInfoCallback
Definition webgpu.hpp:962
Future createComputePipelineAsync(const ComputePipelineDescriptor &descriptor, CreateComputePipelineAsyncCallbackInfo callbackInfo) const
void setStencilReference(uint32_t reference) const
void clearBuffer(Buffer buffer, uint64_t offset, uint64_t size) const
RenderBundleEncoder createRenderBundleEncoder(const RenderBundleEncoderDescriptor &descriptor) const
SubmissionIndex submitForIndex(size_t commandCount, CommandBuffer const *commands) const
void setBindGroup(uint32_t groupIndex, BindGroup group, size_t dynamicOffsetCount, uint32_t const *dynamicOffsets) const
END HANDLE(BindGroup) void setLabel(StringView label) const
void copyTextureToBuffer(const TexelCopyTextureInfo &source, const TexelCopyBufferInfo &destination, const Extent3D &copySize) const
END uint32_t uint32_t firstVertex
Definition webgpu.hpp:1151
QueryType getType() const
void getFeatures(SupportedFeatures *features) const
Bool poll(Bool wait, SubmissionIndex const *wrappedSubmissionIndex) const
WaitStatus waitAny(size_t futureCount, FutureWaitInfo *futures, uint64_t timeoutNS) const
void getCurrentTexture(SurfaceTexture *surfaceTexture) const
std::function< void(MapAsyncStatus status, StringView message, void *userdata1)> BufferMapCallback
Definition webgpu.hpp:961
Status getInfo(AdapterInfo *info) const
uint32_t getCount() const
Origin3D(uint32_t x, uint32_t y, uint32_t z)
Definition webgpu.hpp:652
QuerySet createQuerySet(const QuerySetDescriptor &descriptor) const
void setPushConstants(uint32_t offset, uint32_t sizeBytes, void const *data) const
Color(double r, double g, double b, double a)
Definition webgpu.hpp:636
void setIndexBuffer(Buffer buffer, IndexFormat format, uint64_t offset, uint64_t size) const
std::function< void( CreatePipelineAsyncStatus status, ComputePipeline pipeline, StringView message, void *userdata1)> CreateComputePipelineAsyncCallback
Definition webgpu.hpp:964
void insertDebugMarker(StringView markerLabel) const
uint64_t getSize() const
StringView(const std::string_view &cpp)
Definition webgpu.hpp:618
Extent3D(uint32_t width, uint32_t height, uint32_t depthOrArrayLayers)
Definition webgpu.hpp:643
uint32_t getDepthOrArrayLayers() const
ComputePassEncoder beginComputePass() const
void addRef() const
TextureDimension getDimension() const
void setLabel(StringView label) const
uint32_t getMipLevelCount() const
void release() const
void endOcclusionQuery() const
BufferUsage getUsage() const
std::function< void(CreatePipelineAsyncStatus status, RenderPipeline pipeline, StringView message, void *userdata1)> CreateRenderPipelineAsyncCallback
Definition webgpu.hpp:966
void drawIndexedIndirect(Buffer indirectBuffer, uint64_t indirectOffset) const
void multiDrawIndexedIndirect(Buffer buffer, uint64_t offset, uint32_t count) const
PipelineLayout createPipelineLayout(const PipelineLayoutDescriptor &descriptor) const
void setBlendConstant(const Color &color) const
END uint32_t uint32_t workgroupCountZ const
Definition webgpu.hpp:1047
void popDebugGroup() const
Bool hasFeature(FeatureName feature) const
END Instance createInstance()
END uint32_t instanceCount
Definition webgpu.hpp:1151
std::function< void(Device const *device, ErrorType type, StringView message, void *userdata1)> UncapturedErrorCallback
Definition webgpu.hpp:977
std::function< void(LogLevel level, StringView message)> LogCallback
Definition webgpu.hpp:979
ShaderModule createShaderModuleSpirV(const ShaderModuleDescriptorSpirV &descriptor) const
void destroy() const
void drawIndirect(Buffer indirectBuffer, uint64_t indirectOffset) const
std::function< void(Device const *device, DeviceLostReason reason, StringView message, void *userdata1)> DeviceLostCallback
Definition webgpu.hpp:968
Status getLimits(Limits *limits) const
void multiDrawIndirectCount(Buffer buffer, uint64_t offset, Buffer count_buffer, uint64_t count_buffer_offset, uint32_t max_count) const
Status getWGSLLanguageFeatures(SupportedWGSLLanguageFeatures *features) const
TextureFormat getFormat() const
void multiDrawIndirect(Buffer buffer, uint64_t offset, uint32_t count) const
friend auto operator<<(std::ostream &stream, const S &self) -> std::ostream &
Definition webgpu.hpp:620
Future requestDevice(const DeviceDescriptor &descriptor, RequestDeviceCallbackInfo callbackInfo) const
Texture createTexture(const TextureDescriptor &descriptor) const
void unconfigure() const
void pushErrorScope(ErrorFilter filter) const
void setVertexBuffer(uint32_t slot, Buffer buffer, uint64_t offset, uint64_t size) const
END uint32_t workgroupCountY
Definition webgpu.hpp:1046
AdapterInfo getAdapterInfo() const
void copyBufferToTexture(const TexelCopyBufferInfo &source, const TexelCopyTextureInfo &destination, const Extent3D &copySize) const
RenderPassEncoder beginRenderPass(const RenderPassDescriptor &descriptor) const
Sampler createSampler(const SamplerDescriptor &descriptor) const
void draw(uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance) const
void multiDrawIndexedIndirectCount(Buffer buffer, uint64_t offset, Buffer count_buffer, uint64_t count_buffer_offset, uint32_t max_count) const
Status present() const
uint32_t Bool
Definition webgpu.hpp:167
uint32_t getSampleCount() const
void copyTextureToTexture(const TexelCopyTextureInfo &source, const TexelCopyTextureInfo &destination, const Extent3D &copySize) const
void end() const
void executeBundles(size_t bundleCount, RenderBundle const *bundles) const
void setPipeline(ComputePipeline pipeline) const
BindGroupLayout createBindGroupLayout(const BindGroupLayoutDescriptor &descriptor) const
std::function< void(QueueWorkDoneStatus status, void *userdata1)> QueueWorkDoneCallback
Definition webgpu.hpp:972
Definition webgpu.hpp:77
#define STRUCT_NO_OSTREAM(Type)
Definition webgpu.hpp:124
#define END
Definition webgpu.hpp:161
#define ENUM(Type)
Definition webgpu.hpp:149
#define HANDLE(Type)
Definition webgpu.hpp:80
#define ENUM_ENTRY(Name, Value)
Definition webgpu.hpp:159
#define STRUCT(Type)
Definition webgpu.hpp:140
#define DESCRIPTOR(Type)
Definition webgpu.hpp:104