gecko-dev/dom/webgpu/ffi/wgpu_ffi_generated.h

2968 строки
89 KiB
C

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
/* Generated with cbindgen:0.15.0 */
/* DO NOT MODIFY THIS MANUALLY! This file was generated using cbindgen.
* To generate this file:
* 1. Get the latest cbindgen using `cargo install --force cbindgen`
* a. Alternatively, you can clone `https://github.com/eqrion/cbindgen` and use a tagged release
* 2. Run `rustup run nightly cbindgen toolkit/library/rust/ --lockfile Cargo.lock --crate wgpu_bindings -o dom/webgpu/ffi/wgpu_ffi_generated.h`
*/
struct WGPUByteBuf;
typedef uint64_t WGPUNonZeroU64;
typedef uint64_t WGPUOption_BufferSize;
typedef uint32_t WGPUOption_NonZeroU32;
typedef uint8_t WGPUOption_NonZeroU8;
typedef uint64_t WGPUOption_AdapterId;
typedef uint64_t WGPUOption_BufferId;
typedef uint64_t WGPUOption_PipelineLayoutId;
typedef uint64_t WGPUOption_SamplerId;
typedef uint64_t WGPUOption_SurfaceId;
typedef uint64_t WGPUOption_TextureViewId;
#include <stdarg.h>
#include <stdbool.h>
#include <stdint.h>
#include <stdlib.h>
#define WGPUMAX_BIND_GROUPS 8
#define WGPUMAX_COLOR_TARGETS 4
#define WGPUMAX_MIP_LEVELS 16
#define WGPUMAX_VERTEX_BUFFERS 16
#define WGPUMAX_ANISOTROPY 16
#define WGPUSHADER_STAGE_COUNT 3
#define WGPUDESIRED_NUM_FRAMES 3
/**
* Buffer-Texture copies must have [`bytes_per_row`] aligned to this number.
*
* This doesn't apply to [`Queue::write_texture`].
*
* [`bytes_per_row`]: TextureDataLayout::bytes_per_row
*/
#define WGPUCOPY_BYTES_PER_ROW_ALIGNMENT 256
/**
* Alignment all push constants need
*/
#define WGPUPUSH_CONSTANT_ALIGNMENT 4
/**
* How edges should be handled in texture addressing.
*/
enum WGPUAddressMode {
/**
* Clamp the value to the edge of the texture
*
* -0.25 -> 0.0
* 1.25 -> 1.0
*/
WGPUAddressMode_ClampToEdge = 0,
/**
* Repeat the texture in a tiling fashion
*
* -0.25 -> 0.75
* 1.25 -> 0.25
*/
WGPUAddressMode_Repeat = 1,
/**
* Repeat the texture, mirroring it every repeat
*
* -0.25 -> 0.25
* 1.25 -> 0.75
*/
WGPUAddressMode_MirrorRepeat = 2,
/**
* Clamp the value to the border of the texture
* Requires feature [`Features::ADDRESS_MODE_CLAMP_TO_BORDER`]
*
* -0.25 -> border
* 1.25 -> border
*/
WGPUAddressMode_ClampToBorder = 3,
/**
* Must be last for serialization purposes
*/
WGPUAddressMode_Sentinel,
};
/**
* Alpha blend factor.
*
* Alpha blending is very complicated: see the OpenGL or Vulkan spec for more information.
*/
enum WGPUBlendFactor {
WGPUBlendFactor_Zero = 0,
WGPUBlendFactor_One = 1,
WGPUBlendFactor_SrcColor = 2,
WGPUBlendFactor_OneMinusSrcColor = 3,
WGPUBlendFactor_SrcAlpha = 4,
WGPUBlendFactor_OneMinusSrcAlpha = 5,
WGPUBlendFactor_DstColor = 6,
WGPUBlendFactor_OneMinusDstColor = 7,
WGPUBlendFactor_DstAlpha = 8,
WGPUBlendFactor_OneMinusDstAlpha = 9,
WGPUBlendFactor_SrcAlphaSaturated = 10,
WGPUBlendFactor_BlendColor = 11,
WGPUBlendFactor_OneMinusBlendColor = 12,
/**
* Must be last for serialization purposes
*/
WGPUBlendFactor_Sentinel,
};
/**
* Alpha blend operation.
*
* Alpha blending is very complicated: see the OpenGL or Vulkan spec for more information.
*/
enum WGPUBlendOperation {
WGPUBlendOperation_Add = 0,
WGPUBlendOperation_Subtract = 1,
WGPUBlendOperation_ReverseSubtract = 2,
WGPUBlendOperation_Min = 3,
WGPUBlendOperation_Max = 4,
/**
* Must be last for serialization purposes
*/
WGPUBlendOperation_Sentinel,
};
enum WGPUBufferMapAsyncStatus {
WGPUBufferMapAsyncStatus_Success,
WGPUBufferMapAsyncStatus_Error,
WGPUBufferMapAsyncStatus_Unknown,
WGPUBufferMapAsyncStatus_ContextLost,
/**
* Must be last for serialization purposes
*/
WGPUBufferMapAsyncStatus_Sentinel,
};
/**
* Comparison function used for depth and stencil operations.
*/
enum WGPUCompareFunction {
/**
* Function never passes
*/
WGPUCompareFunction_Never = 1,
/**
* Function passes if new value less than existing value
*/
WGPUCompareFunction_Less = 2,
/**
* Function passes if new value is equal to existing value
*/
WGPUCompareFunction_Equal = 3,
/**
* Function passes if new value is less than or equal to existing value
*/
WGPUCompareFunction_LessEqual = 4,
/**
* Function passes if new value is greater than existing value
*/
WGPUCompareFunction_Greater = 5,
/**
* Function passes if new value is not equal to existing value
*/
WGPUCompareFunction_NotEqual = 6,
/**
* Function passes if new value is greater than or equal to existing value
*/
WGPUCompareFunction_GreaterEqual = 7,
/**
* Function always passes
*/
WGPUCompareFunction_Always = 8,
/**
* Must be last for serialization purposes
*/
WGPUCompareFunction_Sentinel,
};
/**
* Type of faces to be culled.
*/
enum WGPUCullMode {
/**
* No faces should be culled
*/
WGPUCullMode_None = 0,
/**
* Front faces should be culled
*/
WGPUCullMode_Front = 1,
/**
* Back faces should be culled
*/
WGPUCullMode_Back = 2,
/**
* Must be last for serialization purposes
*/
WGPUCullMode_Sentinel,
};
/**
* Texel mixing mode when sampling between texels.
*/
enum WGPUFilterMode {
/**
* Nearest neighbor sampling.
*
* This creates a pixelated effect when used as a mag filter
*/
WGPUFilterMode_Nearest = 0,
/**
* Linear Interpolation
*
* This makes textures smooth but blurry when used as a mag filter.
*/
WGPUFilterMode_Linear = 1,
/**
* Must be last for serialization purposes
*/
WGPUFilterMode_Sentinel,
};
/**
* Winding order which classifies the "front" face.
*/
enum WGPUFrontFace {
/**
* Triangles with vertices in counter clockwise order are considered the front face.
*
* This is the default with right handed coordinate spaces.
*/
WGPUFrontFace_Ccw = 0,
/**
* Triangles with vertices in clockwise order are considered the front face.
*
* This is the default with left handed coordinate spaces.
*/
WGPUFrontFace_Cw = 1,
/**
* Must be last for serialization purposes
*/
WGPUFrontFace_Sentinel,
};
enum WGPUHostMap {
WGPUHostMap_Read,
WGPUHostMap_Write,
/**
* Must be last for serialization purposes
*/
WGPUHostMap_Sentinel,
};
/**
* Format of indices used with pipeline.
*/
enum WGPUIndexFormat {
/**
* Indices are 16 bit unsigned integers.
*/
WGPUIndexFormat_Uint16 = 0,
/**
* Indices are 32 bit unsigned integers.
*/
WGPUIndexFormat_Uint32 = 1,
/**
* Must be last for serialization purposes
*/
WGPUIndexFormat_Sentinel,
};
/**
* Rate that determines when vertex data is advanced.
*/
enum WGPUInputStepMode {
/**
* Input data is advanced every vertex. This is the standard value for vertex data.
*/
WGPUInputStepMode_Vertex = 0,
/**
* Input data is advanced every instance.
*/
WGPUInputStepMode_Instance = 1,
/**
* Must be last for serialization purposes
*/
WGPUInputStepMode_Sentinel,
};
/**
* Operation to perform to the output attachment at the start of a renderpass.
*/
enum WGPULoadOp {
/**
* Clear the output attachment with the clear color. Clearing is faster than loading.
*/
WGPULoadOp_Clear = 0,
/**
* Do not clear output attachment.
*/
WGPULoadOp_Load = 1,
/**
* Must be last for serialization purposes
*/
WGPULoadOp_Sentinel,
};
/**
* Type of drawing mode for polygons
*/
enum WGPUPolygonMode {
/**
* Polygons are filled
*/
WGPUPolygonMode_Fill = 0,
/**
* Polygons are draw as line segments
*/
WGPUPolygonMode_Line = 1,
/**
* Polygons are draw as points
*/
WGPUPolygonMode_Point = 2,
/**
* Must be last for serialization purposes
*/
WGPUPolygonMode_Sentinel,
};
/**
* Power Preference when choosing a physical adapter.
*/
enum WGPUPowerPreference {
/**
* Adapter that uses the least possible power. This is often an integerated GPU.
*/
WGPUPowerPreference_LowPower = 0,
/**
* Adapter that has the highest performance. This is often a discrete GPU.
*/
WGPUPowerPreference_HighPerformance = 1,
/**
* Must be last for serialization purposes
*/
WGPUPowerPreference_Sentinel,
};
/**
* Primitive type the input mesh is composed of.
*/
enum WGPUPrimitiveTopology {
/**
* Vertex data is a list of points. Each vertex is a new point.
*/
WGPUPrimitiveTopology_PointList = 0,
/**
* Vertex data is a list of lines. Each pair of vertices composes a new line.
*
* Vertices `0 1 2 3` create two lines `0 1` and `2 3`
*/
WGPUPrimitiveTopology_LineList = 1,
/**
* Vertex data is a strip of lines. Each set of two adjacent vertices form a line.
*
* Vertices `0 1 2 3` create three lines `0 1`, `1 2`, and `2 3`.
*/
WGPUPrimitiveTopology_LineStrip = 2,
/**
* Vertex data is a list of triangles. Each set of 3 vertices composes a new triangle.
*
* Vertices `0 1 2 3 4 5` create two triangles `0 1 2` and `3 4 5`
*/
WGPUPrimitiveTopology_TriangleList = 3,
/**
* Vertex data is a triangle strip. Each set of three adjacent vertices form a triangle.
*
* Vertices `0 1 2 3 4 5` creates four triangles `0 1 2`, `2 1 3`, `3 2 4`, and `4 3 5`
*/
WGPUPrimitiveTopology_TriangleStrip = 4,
/**
* Must be last for serialization purposes
*/
WGPUPrimitiveTopology_Sentinel,
};
enum WGPURawBindingType {
WGPURawBindingType_UniformBuffer,
WGPURawBindingType_StorageBuffer,
WGPURawBindingType_ReadonlyStorageBuffer,
WGPURawBindingType_Sampler,
WGPURawBindingType_ComparisonSampler,
WGPURawBindingType_SampledTexture,
WGPURawBindingType_ReadonlyStorageTexture,
WGPURawBindingType_WriteonlyStorageTexture,
/**
* Must be last for serialization purposes
*/
WGPURawBindingType_Sentinel,
};
/**
* Operation to perform on the stencil value.
*/
enum WGPUStencilOperation {
/**
* Keep stencil value unchanged.
*/
WGPUStencilOperation_Keep = 0,
/**
* Set stencil value to zero.
*/
WGPUStencilOperation_Zero = 1,
/**
* Replace stencil value with value provided in most recent call to [`RenderPass::set_stencil_reference`].
*/
WGPUStencilOperation_Replace = 2,
/**
* Bitwise inverts stencil value.
*/
WGPUStencilOperation_Invert = 3,
/**
* Increments stencil value by one, clamping on overflow.
*/
WGPUStencilOperation_IncrementClamp = 4,
/**
* Decrements stencil value by one, clamping on underflow.
*/
WGPUStencilOperation_DecrementClamp = 5,
/**
* Increments stencil value by one, wrapping on overflow.
*/
WGPUStencilOperation_IncrementWrap = 6,
/**
* Decrements stencil value by one, wrapping on underflow.
*/
WGPUStencilOperation_DecrementWrap = 7,
/**
* Must be last for serialization purposes
*/
WGPUStencilOperation_Sentinel,
};
/**
* Operation to perform to the output attachment at the end of a renderpass.
*/
enum WGPUStoreOp {
/**
* Clear the render target. If you don't care about the contents of the target, this can be faster.
*/
WGPUStoreOp_Clear = 0,
/**
* Store the result of the renderpass.
*/
WGPUStoreOp_Store = 1,
/**
* Must be last for serialization purposes
*/
WGPUStoreOp_Sentinel,
};
/**
* Kind of data the texture holds.
*/
enum WGPUTextureAspect {
/**
* Depth, Stencil, and Color.
*/
WGPUTextureAspect_All,
/**
* Stencil.
*/
WGPUTextureAspect_StencilOnly,
/**
* Depth.
*/
WGPUTextureAspect_DepthOnly,
/**
* Must be last for serialization purposes
*/
WGPUTextureAspect_Sentinel,
};
/**
* Dimensionality of a texture.
*/
enum WGPUTextureDimension {
/**
* 1D texture
*/
WGPUTextureDimension_D1,
/**
* 2D texture
*/
WGPUTextureDimension_D2,
/**
* 3D texture
*/
WGPUTextureDimension_D3,
/**
* Must be last for serialization purposes
*/
WGPUTextureDimension_Sentinel,
};
/**
* Underlying texture data format.
*
* If there is a conversion in the format (such as srgb -> linear), The conversion listed is for
* loading from texture in a shader. When writing to the texture, the opposite conversion takes place.
*/
enum WGPUTextureFormat {
/**
* Red channel only. 8 bit integer per channel. [0, 255] converted to/from float [0, 1] in shader.
*/
WGPUTextureFormat_R8Unorm = 0,
/**
* Red channel only. 8 bit integer per channel. [-127, 127] converted to/from float [-1, 1] in shader.
*/
WGPUTextureFormat_R8Snorm = 1,
/**
* Red channel only. 8 bit integer per channel. Unsigned in shader.
*/
WGPUTextureFormat_R8Uint = 2,
/**
* Red channel only. 8 bit integer per channel. Signed in shader.
*/
WGPUTextureFormat_R8Sint = 3,
/**
* Red channel only. 16 bit integer per channel. Unsigned in shader.
*/
WGPUTextureFormat_R16Uint = 4,
/**
* Red channel only. 16 bit integer per channel. Signed in shader.
*/
WGPUTextureFormat_R16Sint = 5,
/**
* Red channel only. 16 bit float per channel. Float in shader.
*/
WGPUTextureFormat_R16Float = 6,
/**
* Red and green channels. 8 bit integer per channel. [0, 255] converted to/from float [0, 1] in shader.
*/
WGPUTextureFormat_Rg8Unorm = 7,
/**
* Red and green channels. 8 bit integer per channel. [-127, 127] converted to/from float [-1, 1] in shader.
*/
WGPUTextureFormat_Rg8Snorm = 8,
/**
* Red and green channels. 8 bit integer per channel. Unsigned in shader.
*/
WGPUTextureFormat_Rg8Uint = 9,
/**
* Red and green channel s. 8 bit integer per channel. Signed in shader.
*/
WGPUTextureFormat_Rg8Sint = 10,
/**
* Red channel only. 32 bit integer per channel. Unsigned in shader.
*/
WGPUTextureFormat_R32Uint = 11,
/**
* Red channel only. 32 bit integer per channel. Signed in shader.
*/
WGPUTextureFormat_R32Sint = 12,
/**
* Red channel only. 32 bit float per channel. Float in shader.
*/
WGPUTextureFormat_R32Float = 13,
/**
* Red and green channels. 16 bit integer per channel. Unsigned in shader.
*/
WGPUTextureFormat_Rg16Uint = 14,
/**
* Red and green channels. 16 bit integer per channel. Signed in shader.
*/
WGPUTextureFormat_Rg16Sint = 15,
/**
* Red and green channels. 16 bit float per channel. Float in shader.
*/
WGPUTextureFormat_Rg16Float = 16,
/**
* Red, green, blue, and alpha channels. 8 bit integer per channel. [0, 255] converted to/from float [0, 1] in shader.
*/
WGPUTextureFormat_Rgba8Unorm = 17,
/**
* Red, green, blue, and alpha channels. 8 bit integer per channel. Srgb-color [0, 255] converted to/from linear-color float [0, 1] in shader.
*/
WGPUTextureFormat_Rgba8UnormSrgb = 18,
/**
* Red, green, blue, and alpha channels. 8 bit integer per channel. [-127, 127] converted to/from float [-1, 1] in shader.
*/
WGPUTextureFormat_Rgba8Snorm = 19,
/**
* Red, green, blue, and alpha channels. 8 bit integer per channel. Unsigned in shader.
*/
WGPUTextureFormat_Rgba8Uint = 20,
/**
* Red, green, blue, and alpha channels. 8 bit integer per channel. Signed in shader.
*/
WGPUTextureFormat_Rgba8Sint = 21,
/**
* Blue, green, red, and alpha channels. 8 bit integer per channel. [0, 255] converted to/from float [0, 1] in shader.
*/
WGPUTextureFormat_Bgra8Unorm = 22,
/**
* Blue, green, red, and alpha channels. 8 bit integer per channel. Srgb-color [0, 255] converted to/from linear-color float [0, 1] in shader.
*/
WGPUTextureFormat_Bgra8UnormSrgb = 23,
/**
* Red, green, blue, and alpha channels. 10 bit integer for RGB channels, 2 bit integer for alpha channel. [0, 1023] ([0, 3] for alpha) converted to/from float [0, 1] in shader.
*/
WGPUTextureFormat_Rgb10a2Unorm = 24,
/**
* Red, green, and blue channels. 11 bit float with no sign bit for RG channels. 10 bit float with no sign bit for blue channel. Float in shader.
*/
WGPUTextureFormat_Rg11b10Float = 25,
/**
* Red and green channels. 32 bit integer per channel. Unsigned in shader.
*/
WGPUTextureFormat_Rg32Uint = 26,
/**
* Red and green channels. 32 bit integer per channel. Signed in shader.
*/
WGPUTextureFormat_Rg32Sint = 27,
/**
* Red and green channels. 32 bit float per channel. Float in shader.
*/
WGPUTextureFormat_Rg32Float = 28,
/**
* Red, green, blue, and alpha channels. 16 bit integer per channel. Unsigned in shader.
*/
WGPUTextureFormat_Rgba16Uint = 29,
/**
* Red, green, blue, and alpha channels. 16 bit integer per channel. Signed in shader.
*/
WGPUTextureFormat_Rgba16Sint = 30,
/**
* Red, green, blue, and alpha channels. 16 bit float per channel. Float in shader.
*/
WGPUTextureFormat_Rgba16Float = 31,
/**
* Red, green, blue, and alpha channels. 32 bit integer per channel. Unsigned in shader.
*/
WGPUTextureFormat_Rgba32Uint = 32,
/**
* Red, green, blue, and alpha channels. 32 bit integer per channel. Signed in shader.
*/
WGPUTextureFormat_Rgba32Sint = 33,
/**
* Red, green, blue, and alpha channels. 32 bit float per channel. Float in shader.
*/
WGPUTextureFormat_Rgba32Float = 34,
/**
* Special depth format with 32 bit floating point depth.
*/
WGPUTextureFormat_Depth32Float = 35,
/**
* Special depth format with at least 24 bit integer depth.
*/
WGPUTextureFormat_Depth24Plus = 36,
/**
* Special depth/stencil format with at least 24 bit integer depth and 8 bits integer stencil.
*/
WGPUTextureFormat_Depth24PlusStencil8 = 37,
/**
* 4x4 block compressed texture. 8 bytes per block (4 bit/px). 4 color + alpha pallet. 5 bit R + 6 bit G + 5 bit B + 1 bit alpha.
* [0, 64] ([0, 1] for alpha) converted to/from float [0, 1] in shader.
*
* Also known as DXT1.
*
* [`Features::TEXTURE_COMPRESSION_BC`] must be enabled to use this texture format.
*/
WGPUTextureFormat_Bc1RgbaUnorm = 38,
/**
* 4x4 block compressed texture. 8 bytes per block (4 bit/px). 4 color + alpha pallet. 5 bit R + 6 bit G + 5 bit B + 1 bit alpha.
* Srgb-color [0, 64] ([0, 16] for alpha) converted to/from linear-color float [0, 1] in shader.
*
* Also known as DXT1.
*
* [`Features::TEXTURE_COMPRESSION_BC`] must be enabled to use this texture format.
*/
WGPUTextureFormat_Bc1RgbaUnormSrgb = 39,
/**
* 4x4 block compressed texture. 16 bytes per block (8 bit/px). 4 color pallet. 5 bit R + 6 bit G + 5 bit B + 4 bit alpha.
* [0, 64] ([0, 16] for alpha) converted to/from float [0, 1] in shader.
*
* Also known as DXT3.
*
* [`Features::TEXTURE_COMPRESSION_BC`] must be enabled to use this texture format.
*/
WGPUTextureFormat_Bc2RgbaUnorm = 40,
/**
* 4x4 block compressed texture. 16 bytes per block (8 bit/px). 4 color pallet. 5 bit R + 6 bit G + 5 bit B + 4 bit alpha.
* Srgb-color [0, 64] ([0, 256] for alpha) converted to/from linear-color float [0, 1] in shader.
*
* Also known as DXT3.
*
* [`Features::TEXTURE_COMPRESSION_BC`] must be enabled to use this texture format.
*/
WGPUTextureFormat_Bc2RgbaUnormSrgb = 41,
/**
* 4x4 block compressed texture. 16 bytes per block (8 bit/px). 4 color pallet + 8 alpha pallet. 5 bit R + 6 bit G + 5 bit B + 8 bit alpha.
* [0, 64] ([0, 256] for alpha) converted to/from float [0, 1] in shader.
*
* Also known as DXT5.
*
* [`Features::TEXTURE_COMPRESSION_BC`] must be enabled to use this texture format.
*/
WGPUTextureFormat_Bc3RgbaUnorm = 42,
/**
* 4x4 block compressed texture. 16 bytes per block (8 bit/px). 4 color pallet + 8 alpha pallet. 5 bit R + 6 bit G + 5 bit B + 8 bit alpha.
* Srgb-color [0, 64] ([0, 256] for alpha) converted to/from linear-color float [0, 1] in shader.
*
* Also known as DXT5.
*
* [`Features::TEXTURE_COMPRESSION_BC`] must be enabled to use this texture format.
*/
WGPUTextureFormat_Bc3RgbaUnormSrgb = 43,
/**
* 4x4 block compressed texture. 8 bytes per block (4 bit/px). 8 color pallet. 8 bit R.
* [0, 256] converted to/from float [0, 1] in shader.
*
* Also known as RGTC1.
*
* [`Features::TEXTURE_COMPRESSION_BC`] must be enabled to use this texture format.
*/
WGPUTextureFormat_Bc4RUnorm = 44,
/**
* 4x4 block compressed texture. 8 bytes per block (4 bit/px). 8 color pallet. 8 bit R.
* [-127, 127] converted to/from float [-1, 1] in shader.
*
* Also known as RGTC1.
*
* [`Features::TEXTURE_COMPRESSION_BC`] must be enabled to use this texture format.
*/
WGPUTextureFormat_Bc4RSnorm = 45,
/**
* 4x4 block compressed texture. 16 bytes per block (16 bit/px). 8 color red pallet + 8 color green pallet. 8 bit RG.
* [0, 256] converted to/from float [0, 1] in shader.
*
* Also known as RGTC2.
*
* [`Features::TEXTURE_COMPRESSION_BC`] must be enabled to use this texture format.
*/
WGPUTextureFormat_Bc5RgUnorm = 46,
/**
* 4x4 block compressed texture. 16 bytes per block (16 bit/px). 8 color red pallet + 8 color green pallet. 8 bit RG.
* [-127, 127] converted to/from float [-1, 1] in shader.
*
* Also known as RGTC2.
*
* [`Features::TEXTURE_COMPRESSION_BC`] must be enabled to use this texture format.
*/
WGPUTextureFormat_Bc5RgSnorm = 47,
/**
* 4x4 block compressed texture. 16 bytes per block (16 bit/px). Variable sized pallet. 16 bit unsigned float RGB. Float in shader.
*
* Also known as BPTC (float).
*
* [`Features::TEXTURE_COMPRESSION_BC`] must be enabled to use this texture format.
*/
WGPUTextureFormat_Bc6hRgbUfloat = 48,
/**
* 4x4 block compressed texture. 16 bytes per block (16 bit/px). Variable sized pallet. 16 bit signed float RGB. Float in shader.
*
* Also known as BPTC (float).
*
* [`Features::TEXTURE_COMPRESSION_BC`] must be enabled to use this texture format.
*/
WGPUTextureFormat_Bc6hRgbSfloat = 49,
/**
* 4x4 block compressed texture. 16 bytes per block (16 bit/px). Variable sized pallet. 8 bit integer RGBA.
* [0, 256] converted to/from float [0, 1] in shader.
*
* Also known as BPTC (unorm).
*
* [`Features::TEXTURE_COMPRESSION_BC`] must be enabled to use this texture format.
*/
WGPUTextureFormat_Bc7RgbaUnorm = 50,
/**
* 4x4 block compressed texture. 16 bytes per block (16 bit/px). Variable sized pallet. 8 bit integer RGBA.
* Srgb-color [0, 255] converted to/from linear-color float [0, 1] in shader.
*
* Also known as BPTC (unorm).
*
* [`Features::TEXTURE_COMPRESSION_BC`] must be enabled to use this texture format.
*/
WGPUTextureFormat_Bc7RgbaUnormSrgb = 51,
/**
* Must be last for serialization purposes
*/
WGPUTextureFormat_Sentinel,
};
/**
* Dimensions of a particular texture view.
*/
enum WGPUTextureViewDimension {
/**
* A one dimensional texture. `texture1D` in glsl shaders.
*/
WGPUTextureViewDimension_D1,
/**
* A two dimensional texture. `texture2D` in glsl shaders.
*/
WGPUTextureViewDimension_D2,
/**
* A two dimensional array texture. `texture2DArray` in glsl shaders.
*/
WGPUTextureViewDimension_D2Array,
/**
* A cubemap texture. `textureCube` in glsl shaders.
*/
WGPUTextureViewDimension_Cube,
/**
* A cubemap array texture. `textureCubeArray` in glsl shaders.
*/
WGPUTextureViewDimension_CubeArray,
/**
* A three dimensional texture. `texture3D` in glsl shaders.
*/
WGPUTextureViewDimension_D3,
/**
* Must be last for serialization purposes
*/
WGPUTextureViewDimension_Sentinel,
};
/**
* Vertex Format for a Vertex Attribute (input).
*/
enum WGPUVertexFormat {
/**
* Two unsigned bytes (u8). `uvec2` in shaders.
*/
WGPUVertexFormat_Uchar2 = 0,
/**
* Four unsigned bytes (u8). `uvec4` in shaders.
*/
WGPUVertexFormat_Uchar4 = 1,
/**
* Two signed bytes (i8). `ivec2` in shaders.
*/
WGPUVertexFormat_Char2 = 2,
/**
* Four signed bytes (i8). `ivec4` in shaders.
*/
WGPUVertexFormat_Char4 = 3,
/**
* Two unsigned bytes (u8). [0, 255] converted to float [0, 1] `vec2` in shaders.
*/
WGPUVertexFormat_Uchar2Norm = 4,
/**
* Four unsigned bytes (u8). [0, 255] converted to float [0, 1] `vec4` in shaders.
*/
WGPUVertexFormat_Uchar4Norm = 5,
/**
* Two signed bytes (i8). [-127, 127] converted to float [-1, 1] `vec2` in shaders.
*/
WGPUVertexFormat_Char2Norm = 6,
/**
* Four signed bytes (i8). [-127, 127] converted to float [-1, 1] `vec4` in shaders.
*/
WGPUVertexFormat_Char4Norm = 7,
/**
* Two unsigned shorts (u16). `uvec2` in shaders.
*/
WGPUVertexFormat_Ushort2 = 8,
/**
* Four unsigned shorts (u16). `uvec4` in shaders.
*/
WGPUVertexFormat_Ushort4 = 9,
/**
* Two signed shorts (i16). `ivec2` in shaders.
*/
WGPUVertexFormat_Short2 = 10,
/**
* Four signed shorts (i16). `ivec4` in shaders.
*/
WGPUVertexFormat_Short4 = 11,
/**
* Two unsigned shorts (u16). [0, 65535] converted to float [0, 1] `vec2` in shaders.
*/
WGPUVertexFormat_Ushort2Norm = 12,
/**
* Four unsigned shorts (u16). [0, 65535] converted to float [0, 1] `vec4` in shaders.
*/
WGPUVertexFormat_Ushort4Norm = 13,
/**
* Two signed shorts (i16). [-32767, 32767] converted to float [-1, 1] `vec2` in shaders.
*/
WGPUVertexFormat_Short2Norm = 14,
/**
* Four signed shorts (i16). [-32767, 32767] converted to float [-1, 1] `vec4` in shaders.
*/
WGPUVertexFormat_Short4Norm = 15,
/**
* Two half-precision floats (no Rust equiv). `vec2` in shaders.
*/
WGPUVertexFormat_Half2 = 16,
/**
* Four half-precision floats (no Rust equiv). `vec4` in shaders.
*/
WGPUVertexFormat_Half4 = 17,
/**
* One single-precision float (f32). `float` in shaders.
*/
WGPUVertexFormat_Float = 18,
/**
* Two single-precision floats (f32). `vec2` in shaders.
*/
WGPUVertexFormat_Float2 = 19,
/**
* Three single-precision floats (f32). `vec3` in shaders.
*/
WGPUVertexFormat_Float3 = 20,
/**
* Four single-precision floats (f32). `vec4` in shaders.
*/
WGPUVertexFormat_Float4 = 21,
/**
* One unsigned int (u32). `uint` in shaders.
*/
WGPUVertexFormat_Uint = 22,
/**
* Two unsigned ints (u32). `uvec2` in shaders.
*/
WGPUVertexFormat_Uint2 = 23,
/**
* Three unsigned ints (u32). `uvec3` in shaders.
*/
WGPUVertexFormat_Uint3 = 24,
/**
* Four unsigned ints (u32). `uvec4` in shaders.
*/
WGPUVertexFormat_Uint4 = 25,
/**
* One signed int (i32). `int` in shaders.
*/
WGPUVertexFormat_Int = 26,
/**
* Two signed ints (i32). `ivec2` in shaders.
*/
WGPUVertexFormat_Int2 = 27,
/**
* Three signed ints (i32). `ivec3` in shaders.
*/
WGPUVertexFormat_Int3 = 28,
/**
* Four signed ints (i32). `ivec4` in shaders.
*/
WGPUVertexFormat_Int4 = 29,
/**
* Must be last for serialization purposes
*/
WGPUVertexFormat_Sentinel,
};
/**
* The internal enum mirrored from `BufferUsage`. The values don't have to match!
*/
struct WGPUBufferUse;
struct WGPUClient;
struct WGPUComputePass;
struct WGPUGlobal;
/**
* Describes a pipeline layout.
*
* A `PipelineLayoutDescriptor` can be used to create a pipeline layout.
*/
struct WGPUPipelineLayoutDescriptor;
struct WGPURenderBundleEncoder;
struct WGPURenderPass;
/**
* The internal enum mirrored from `TextureUsage`. The values don't have to match!
*/
struct WGPUTextureUse;
struct WGPUInfrastructure {
struct WGPUClient *client;
const uint8_t *error;
};
typedef WGPUNonZeroU64 WGPUId_Adapter_Dummy;
typedef WGPUId_Adapter_Dummy WGPUAdapterId;
typedef WGPUNonZeroU64 WGPUId_Device_Dummy;
typedef WGPUId_Device_Dummy WGPUDeviceId;
typedef WGPUNonZeroU64 WGPUId_Buffer_Dummy;
typedef WGPUId_Buffer_Dummy WGPUBufferId;
typedef const char *WGPURawString;
/**
* Integral type used for buffer offsets.
*/
typedef uint64_t WGPUBufferAddress;
/**
* Different ways that you can use a buffer.
*
* The usages determine what kind of memory the buffer is allocated from and what
* actions the buffer can partake in.
*/
typedef uint32_t WGPUBufferUsage;
/**
* Allow a buffer to be mapped for reading using [`Buffer::map_async`] + [`Buffer::get_mapped_range`].
* This does not include creating a buffer with [`BufferDescriptor::mapped_at_creation`] set.
*
* If [`Features::MAPPABLE_PRIMARY_BUFFERS`] isn't enabled, the only other usage a buffer
* may have is COPY_DST.
*/
#define WGPUBufferUsage_MAP_READ (uint32_t)1
/**
* Allow a buffer to be mapped for writing using [`Buffer::map_async`] + [`Buffer::get_mapped_range_mut`].
* This does not include creating a buffer with `mapped_at_creation` set.
*
* If [`Features::MAPPABLE_PRIMARY_BUFFERS`] feature isn't enabled, the only other usage a buffer
* may have is COPY_SRC.
*/
#define WGPUBufferUsage_MAP_WRITE (uint32_t)2
/**
* Allow a buffer to be the source buffer for a [`CommandEncoder::copy_buffer_to_buffer`] or [`CommandEncoder::copy_buffer_to_texture`]
* operation.
*/
#define WGPUBufferUsage_COPY_SRC (uint32_t)4
/**
* Allow a buffer to be the destination buffer for a [`CommandEncoder::copy_buffer_to_buffer`], [`CommandEncoder::copy_texture_to_buffer`],
* or [`Queue::write_buffer`] operation.
*/
#define WGPUBufferUsage_COPY_DST (uint32_t)8
/**
* Allow a buffer to be the index buffer in a draw operation.
*/
#define WGPUBufferUsage_INDEX (uint32_t)16
/**
* Allow a buffer to be the vertex buffer in a draw operation.
*/
#define WGPUBufferUsage_VERTEX (uint32_t)32
/**
* Allow a buffer to be a [`BindingType::UniformBuffer`] inside a bind group.
*/
#define WGPUBufferUsage_UNIFORM (uint32_t)64
/**
* Allow a buffer to be a [`BindingType::StorageBuffer`] inside a bind group.
*/
#define WGPUBufferUsage_STORAGE (uint32_t)128
/**
* Allow a buffer to be the indirect buffer in an indirect draw call.
*/
#define WGPUBufferUsage_INDIRECT (uint32_t)256
/**
* Describes a [`Buffer`].
*/
struct WGPUBufferDescriptor {
/**
* Debug label of a buffer. This will show up in graphics debuggers for easy identification.
*/
WGPURawString label;
/**
* Size of a buffer.
*/
WGPUBufferAddress size;
/**
* Usages of a buffer. If the buffer is used in any way that isn't specified here, the operation
* will panic.
*/
WGPUBufferUsage usage;
/**
* Allows a buffer to be mapped immediately after they are made. It does not have to be [`BufferUsage::MAP_READ`] or
* [`BufferUsage::MAP_WRITE`], all buffers are allowed to be mapped at creation.
*/
bool mapped_at_creation;
};
typedef WGPUNonZeroU64 WGPUId_Texture_Dummy;
typedef WGPUId_Texture_Dummy WGPUTextureId;
/**
* Extent of a texture related operation.
*/
struct WGPUExtent3d {
uint32_t width;
uint32_t height;
uint32_t depth;
};
/**
* Different ways that you can use a texture.
*
* The usages determine what kind of memory the texture is allocated from and what
* actions the texture can partake in.
*/
typedef uint32_t WGPUTextureUsage;
/**
* Allows a texture to be the source in a [`CommandEncoder::copy_texture_to_buffer`] or
* [`CommandEncoder::copy_texture_to_texture`] operation.
*/
#define WGPUTextureUsage_COPY_SRC (uint32_t)1
/**
* Allows a texture to be the destination in a [`CommandEncoder::copy_texture_to_buffer`],
* [`CommandEncoder::copy_texture_to_texture`], or [`Queue::write_texture`] operation.
*/
#define WGPUTextureUsage_COPY_DST (uint32_t)2
/**
* Allows a texture to be a [`BindingType::SampledTexture`] in a bind group.
*/
#define WGPUTextureUsage_SAMPLED (uint32_t)4
/**
* Allows a texture to be a [`BindingType::StorageTexture`] in a bind group.
*/
#define WGPUTextureUsage_STORAGE (uint32_t)8
/**
* Allows a texture to be a output attachment of a renderpass.
*/
#define WGPUTextureUsage_OUTPUT_ATTACHMENT (uint32_t)16
/**
* Describes a [`Texture`].
*/
struct WGPUTextureDescriptor {
/**
* Debug label of the texture. This will show up in graphics debuggers for easy identification.
*/
WGPURawString label;
/**
* Size of the texture. For a regular 1D/2D texture, the unused sizes will be 1. For 2DArray textures, Z is the
* number of 2D textures in that array.
*/
struct WGPUExtent3d size;
/**
* Mip count of texture. For a texture with no extra mips, this must be 1.
*/
uint32_t mip_level_count;
/**
* Sample count of texture. If this is not 1, texture must have [`BindingType::SampledTexture::multisampled`] set to true.
*/
uint32_t sample_count;
/**
* Dimensions of the texture.
*/
enum WGPUTextureDimension dimension;
/**
* Format of the texture.
*/
enum WGPUTextureFormat format;
/**
* Allowed usages of the texture. If used in other ways, the operation will panic.
*/
WGPUTextureUsage usage;
};
typedef WGPUNonZeroU64 WGPUId_TextureView_Dummy;
typedef WGPUId_TextureView_Dummy WGPUTextureViewId;
struct WGPUTextureViewDescriptor {
WGPURawString label;
const enum WGPUTextureFormat *format;
const enum WGPUTextureViewDimension *dimension;
enum WGPUTextureAspect aspect;
uint32_t base_mip_level;
WGPUOption_NonZeroU32 level_count;
uint32_t base_array_layer;
WGPUOption_NonZeroU32 array_layer_count;
};
typedef WGPUNonZeroU64 WGPUId_Sampler_Dummy;
typedef WGPUId_Sampler_Dummy WGPUSamplerId;
struct WGPUSamplerDescriptor {
WGPURawString label;
enum WGPUAddressMode address_modes[3];
enum WGPUFilterMode mag_filter;
enum WGPUFilterMode min_filter;
enum WGPUFilterMode mipmap_filter;
float lod_min_clamp;
float lod_max_clamp;
const enum WGPUCompareFunction *compare;
WGPUOption_NonZeroU8 anisotropy_clamp;
};
typedef WGPUNonZeroU64 WGPUId_CommandBuffer_Dummy;
typedef WGPUId_CommandBuffer_Dummy WGPUCommandBufferId;
typedef WGPUCommandBufferId WGPUCommandEncoderId;
/**
* Describes a [`CommandEncoder`].
*/
struct WGPUCommandEncoderDescriptor {
/**
* Debug label for the command encoder. This will show up in graphics debuggers for easy identification.
*/
WGPURawString label;
};
struct WGPUComputePassDescriptor {
uint32_t todo;
};
/**
* RGBA double precision color.
*
* This is not to be used as a generic color type, only for specific wgpu interfaces.
*/
struct WGPUColor {
double r;
double g;
double b;
double a;
};
#define WGPUColor_TRANSPARENT (WGPUColor){ .r = 0.0, .g = 0.0, .b = 0.0, .a = 0.0 }
#define WGPUColor_BLACK (WGPUColor){ .r = 0.0, .g = 0.0, .b = 0.0, .a = 1.0 }
#define WGPUColor_WHITE (WGPUColor){ .r = 1.0, .g = 1.0, .b = 1.0, .a = 1.0 }
#define WGPUColor_RED (WGPUColor){ .r = 1.0, .g = 0.0, .b = 0.0, .a = 1.0 }
#define WGPUColor_GREEN (WGPUColor){ .r = 0.0, .g = 1.0, .b = 0.0, .a = 1.0 }
#define WGPUColor_BLUE (WGPUColor){ .r = 0.0, .g = 0.0, .b = 1.0, .a = 1.0 }
/**
* Describes an individual channel within a render pass, such as color, depth, or stencil.
*/
struct WGPUPassChannel_Color {
/**
* Operation to perform to the output attachment at the start of a renderpass. This must be clear if it
* is the first renderpass rendering to a swap chain image.
*/
enum WGPULoadOp load_op;
/**
* Operation to perform to the output attachment at the end of a renderpass.
*/
enum WGPUStoreOp store_op;
/**
* If load_op is [`LoadOp::Clear`], the attachement will be cleared to this color.
*/
struct WGPUColor clear_value;
/**
* If true, the relevant channel is not changed by a renderpass, and the corresponding attachment
* can be used inside the pass by other read-only usages.
*/
bool read_only;
};
/**
* Describes a color attachment to a render pass.
*/
struct WGPUColorAttachmentDescriptor {
/**
* The view to use as an attachment.
*/
WGPUTextureViewId attachment;
/**
* The view that will receive the resolved output if multisampling is used.
*/
WGPUOption_TextureViewId resolve_target;
/**
* What operations will be performed on this color attachment.
*/
struct WGPUPassChannel_Color channel;
};
/**
* Describes an individual channel within a render pass, such as color, depth, or stencil.
*/
struct WGPUPassChannel_f32 {
/**
* Operation to perform to the output attachment at the start of a renderpass. This must be clear if it
* is the first renderpass rendering to a swap chain image.
*/
enum WGPULoadOp load_op;
/**
* Operation to perform to the output attachment at the end of a renderpass.
*/
enum WGPUStoreOp store_op;
/**
* If load_op is [`LoadOp::Clear`], the attachement will be cleared to this color.
*/
float clear_value;
/**
* If true, the relevant channel is not changed by a renderpass, and the corresponding attachment
* can be used inside the pass by other read-only usages.
*/
bool read_only;
};
/**
* Describes an individual channel within a render pass, such as color, depth, or stencil.
*/
struct WGPUPassChannel_u32 {
/**
* Operation to perform to the output attachment at the start of a renderpass. This must be clear if it
* is the first renderpass rendering to a swap chain image.
*/
enum WGPULoadOp load_op;
/**
* Operation to perform to the output attachment at the end of a renderpass.
*/
enum WGPUStoreOp store_op;
/**
* If load_op is [`LoadOp::Clear`], the attachement will be cleared to this color.
*/
uint32_t clear_value;
/**
* If true, the relevant channel is not changed by a renderpass, and the corresponding attachment
* can be used inside the pass by other read-only usages.
*/
bool read_only;
};
/**
* Describes a depth/stencil attachment to a render pass.
*/
struct WGPUDepthStencilAttachmentDescriptor {
/**
* The view to use as an attachment.
*/
WGPUTextureViewId attachment;
/**
* What operations will be performed on the depth part of the attachment.
*/
struct WGPUPassChannel_f32 depth;
/**
* What operations will be performed on the stencil part of the attachment.
*/
struct WGPUPassChannel_u32 stencil;
};
struct WGPURenderPassDescriptor {
const struct WGPUColorAttachmentDescriptor *color_attachments;
uintptr_t color_attachments_length;
const struct WGPUDepthStencilAttachmentDescriptor *depth_stencil_attachment;
};
typedef WGPUNonZeroU64 WGPUId_BindGroupLayout_Dummy;
typedef WGPUId_BindGroupLayout_Dummy WGPUBindGroupLayoutId;
typedef WGPUNonZeroU64 WGPUId_PipelineLayout_Dummy;
typedef WGPUId_PipelineLayout_Dummy WGPUPipelineLayoutId;
typedef WGPUNonZeroU64 WGPUId_BindGroup_Dummy;
typedef WGPUId_BindGroup_Dummy WGPUBindGroupId;
typedef WGPUNonZeroU64 WGPUId_ShaderModule_Dummy;
typedef WGPUId_ShaderModule_Dummy WGPUShaderModuleId;
struct WGPUShaderModuleDescriptor {
const uint32_t *spirv_words;
uintptr_t spirv_words_length;
WGPURawString wgsl_chars;
};
typedef WGPUNonZeroU64 WGPUId_ComputePipeline_Dummy;
typedef WGPUId_ComputePipeline_Dummy WGPUComputePipelineId;
struct WGPUProgrammableStageDescriptor {
WGPUShaderModuleId module;
WGPURawString entry_point;
};
struct WGPUComputePipelineDescriptor {
WGPURawString label;
WGPUOption_PipelineLayoutId layout;
struct WGPUProgrammableStageDescriptor compute_stage;
};
typedef WGPUNonZeroU64 WGPUId_RenderPipeline_Dummy;
typedef WGPUId_RenderPipeline_Dummy WGPURenderPipelineId;
/**
* Describes the state of the rasterizer in a render pipeline.
*/
struct WGPURasterizationStateDescriptor {
enum WGPUFrontFace front_face;
enum WGPUCullMode cull_mode;
/**
* Controls the way each polygon is rasterized. Can be either `Fill` (default), `Line` or `Point`
*
* Setting this to something other than `Fill` requires `Features::NON_FILL_POLYGON_MODE` to be enabled.
*/
enum WGPUPolygonMode polygon_mode;
/**
* If enabled polygon depth is clamped to 0-1 range instead of being clipped.
*
* Requires `Features::DEPTH_CLAMPING` enabled.
*/
bool clamp_depth;
int32_t depth_bias;
float depth_bias_slope_scale;
float depth_bias_clamp;
};
/**
* Describes the blend state of a pipeline.
*
* Alpha blending is very complicated: see the OpenGL or Vulkan spec for more information.
*/
struct WGPUBlendDescriptor {
enum WGPUBlendFactor src_factor;
enum WGPUBlendFactor dst_factor;
enum WGPUBlendOperation operation;
};
/**
* Color write mask. Disabled color channels will not be written to.
*/
typedef uint32_t WGPUColorWrite;
/**
* Enable red channel writes
*/
#define WGPUColorWrite_RED (uint32_t)1
/**
* Enable green channel writes
*/
#define WGPUColorWrite_GREEN (uint32_t)2
/**
* Enable blue channel writes
*/
#define WGPUColorWrite_BLUE (uint32_t)4
/**
* Enable alpha channel writes
*/
#define WGPUColorWrite_ALPHA (uint32_t)8
/**
* Enable red, green, and blue channel writes
*/
#define WGPUColorWrite_COLOR (uint32_t)7
/**
* Enable writes to all channels.
*/
#define WGPUColorWrite_ALL (uint32_t)15
/**
* Describes the color state of a render pipeline.
*/
struct WGPUColorStateDescriptor {
/**
* The [`TextureFormat`] of the image that this pipeline will render to. Must match the the format
* of the corresponding color attachment in [`CommandEncoder::begin_render_pass`].
*/
enum WGPUTextureFormat format;
/**
* The alpha blending that is used for this pipeline.
*/
struct WGPUBlendDescriptor alpha_blend;
/**
* The color blending that is used for this pipeline.
*/
struct WGPUBlendDescriptor color_blend;
/**
* Mask which enables/disables writes to different color/alpha channel.
*/
WGPUColorWrite write_mask;
};
/**
* Describes stencil state in a render pipeline.
*
* If you are not using stencil state, set this to [`StencilStateFaceDescriptor::IGNORE`].
*/
struct WGPUStencilStateFaceDescriptor {
/**
* Comparison function that determines if the fail_op or pass_op is used on the stencil buffer.
*/
enum WGPUCompareFunction compare;
/**
* Operation that is preformed when stencil test fails.
*/
enum WGPUStencilOperation fail_op;
/**
* Operation that is performed when depth test fails but stencil test succeeds.
*/
enum WGPUStencilOperation depth_fail_op;
/**
* Operation that is performed when stencil test success.
*/
enum WGPUStencilOperation pass_op;
};
struct WGPUStencilStateDescriptor {
/**
* Front face mode.
*/
struct WGPUStencilStateFaceDescriptor front;
/**
* Back face mode.
*/
struct WGPUStencilStateFaceDescriptor back;
/**
* Stencil values are AND'd with this mask when reading and writing from the stencil buffer. Only low 8 bits are used.
*/
uint32_t read_mask;
/**
* Stencil values are AND'd with this mask when writing to the stencil buffer. Only low 8 bits are used.
*/
uint32_t write_mask;
};
/**
* Describes the depth/stencil state in a render pipeline.
*/
struct WGPUDepthStencilStateDescriptor {
/**
* Format of the depth/stencil buffer, must be special depth format. Must match the the format
* of the depth/stencil attachment in [`CommandEncoder::begin_render_pass`].
*/
enum WGPUTextureFormat format;
/**
* If disabled, depth will not be written to.
*/
bool depth_write_enabled;
/**
* Comparison function used to compare depth values in the depth test.
*/
enum WGPUCompareFunction depth_compare;
struct WGPUStencilStateDescriptor stencil;
};
/**
* Integral type used for binding locations in shaders.
*/
typedef uint32_t WGPUShaderLocation;
/**
* Vertex inputs (attributes) to shaders.
*
* Arrays of these can be made with the [`vertex_attr_array`] macro. Vertex attributes are assumed to be tightly packed.
*/
struct WGPUVertexAttributeDescriptor {
/**
* Byte offset of the start of the input
*/
WGPUBufferAddress offset;
/**
* Format of the input
*/
enum WGPUVertexFormat format;
/**
* Location for this input. Must match the location in the shader.
*/
WGPUShaderLocation shader_location;
};
struct WGPUVertexBufferDescriptor {
WGPUBufferAddress stride;
enum WGPUInputStepMode step_mode;
const struct WGPUVertexAttributeDescriptor *attributes;
uintptr_t attributes_length;
};
struct WGPUVertexStateDescriptor {
enum WGPUIndexFormat index_format;
const struct WGPUVertexBufferDescriptor *vertex_buffers;
uintptr_t vertex_buffers_length;
};
struct WGPURenderPipelineDescriptor {
WGPURawString label;
WGPUOption_PipelineLayoutId layout;
const struct WGPUProgrammableStageDescriptor *vertex_stage;
const struct WGPUProgrammableStageDescriptor *fragment_stage;
enum WGPUPrimitiveTopology primitive_topology;
const struct WGPURasterizationStateDescriptor *rasterization_state;
const struct WGPUColorStateDescriptor *color_states;
uintptr_t color_states_length;
const struct WGPUDepthStencilStateDescriptor *depth_stencil_state;
struct WGPUVertexStateDescriptor vertex_state;
uint32_t sample_count;
uint32_t sample_mask;
bool alpha_to_coverage_enabled;
};
typedef void *WGPUFactoryParam;
typedef WGPUNonZeroU64 WGPUId_SwapChain_Dummy;
typedef WGPUId_SwapChain_Dummy WGPUSwapChainId;
typedef WGPUNonZeroU64 WGPUId_RenderBundle;
typedef WGPUId_RenderBundle WGPURenderBundleId;
typedef WGPUNonZeroU64 WGPUId_Surface;
typedef WGPUId_Surface WGPUSurfaceId;
struct WGPUIdentityRecyclerFactory {
WGPUFactoryParam param;
void (*free_adapter)(WGPUAdapterId, WGPUFactoryParam);
void (*free_device)(WGPUDeviceId, WGPUFactoryParam);
void (*free_swap_chain)(WGPUSwapChainId, WGPUFactoryParam);
void (*free_pipeline_layout)(WGPUPipelineLayoutId, WGPUFactoryParam);
void (*free_shader_module)(WGPUShaderModuleId, WGPUFactoryParam);
void (*free_bind_group_layout)(WGPUBindGroupLayoutId, WGPUFactoryParam);
void (*free_bind_group)(WGPUBindGroupId, WGPUFactoryParam);
void (*free_command_buffer)(WGPUCommandBufferId, WGPUFactoryParam);
void (*free_render_bundle)(WGPURenderBundleId, WGPUFactoryParam);
void (*free_render_pipeline)(WGPURenderPipelineId, WGPUFactoryParam);
void (*free_compute_pipeline)(WGPUComputePipelineId, WGPUFactoryParam);
void (*free_buffer)(WGPUBufferId, WGPUFactoryParam);
void (*free_texture)(WGPUTextureId, WGPUFactoryParam);
void (*free_texture_view)(WGPUTextureViewId, WGPUFactoryParam);
void (*free_sampler)(WGPUSamplerId, WGPUFactoryParam);
void (*free_surface)(WGPUSurfaceId, WGPUFactoryParam);
};
/**
* Options for requesting adapter.
*/
struct WGPURequestAdapterOptions_SurfaceId {
/**
* Power preference for the adapter.
*/
enum WGPUPowerPreference power_preference;
/**
* Surface that is required to be presentable with the requested adapter. This does not
* create the surface, only guarantees that the adapter can present to said surface.
*/
WGPUOption_SurfaceId compatible_surface;
};
typedef struct WGPURequestAdapterOptions_SurfaceId WGPURequestAdapterOptions;
/**
* Features that are not guaranteed to be supported.
*
* These are either part of the webgpu standard, or are extension features supported by
* wgpu when targeting native.
*
* If you want to use a feature, you need to first verify that the adapter supports
* the feature. If the adapter does not support the feature, requesting a device with it enabled
* will panic.
*/
typedef uint64_t WGPUFeatures;
/**
* By default, polygon depth is clipped to 0-1 range. Anything outside of that range
* is rejected, and respective fragments are not touched.
*
* With this extension, we can force clamping of the polygon depth to 0-1. That allows
* shadow map occluders to be rendered into a tighter depth range.
*
* Supported platforms:
* - desktops
* - some mobile chips
*
* This is a web and native feature.
*/
#define WGPUFeatures_DEPTH_CLAMPING (uint64_t)1
/**
* Enables BCn family of compressed textures. All BCn textures use 4x4 pixel blocks
* with 8 or 16 bytes per block.
*
* Compressed textures sacrifice some quality in exchange for signifigantly reduced
* bandwidth usage.
*
* Supported Platforms:
* - desktops
*
* This is a web and native feature.
*/
#define WGPUFeatures_TEXTURE_COMPRESSION_BC (uint64_t)2
/**
* Webgpu only allows the MAP_READ and MAP_WRITE buffer usage to be matched with
* COPY_DST and COPY_SRC respectively. This removes this requirement.
*
* This is only beneficial on systems that share memory between CPU and GPU. If enabled
* on a system that doesn't, this can severely hinder performance. Only use if you understand
* the consequences.
*
* Supported platforms:
* - All
*
* This is a native only feature.
*/
#define WGPUFeatures_MAPPABLE_PRIMARY_BUFFERS (uint64_t)65536
/**
* Allows the user to create uniform arrays of sampled textures in shaders:
*
* eg. `uniform texture2D textures[10]`.
*
* This capability allows them to exist and to be indexed by compile time constant
* values.
*
* Supported platforms:
* - DX12
* - Metal (with MSL 2.0+ on macOS 10.13+)
* - Vulkan
*
* This is a native only feature.
*/
#define WGPUFeatures_SAMPLED_TEXTURE_BINDING_ARRAY (uint64_t)131072
/**
* Allows shaders to index sampled texture arrays with dynamically uniform values:
*
* eg. `texture_array[uniform_value]`
*
* This capability means the hardware will also support SAMPLED_TEXTURE_BINDING_ARRAY.
*
* Supported platforms:
* - DX12
* - Metal (with MSL 2.0+ on macOS 10.13+)
* - Vulkan's shaderSampledImageArrayDynamicIndexing feature
*
* This is a native only feature.
*/
#define WGPUFeatures_SAMPLED_TEXTURE_ARRAY_DYNAMIC_INDEXING (uint64_t)262144
/**
* Allows shaders to index sampled texture arrays with dynamically non-uniform values:
*
* eg. `texture_array[vertex_data]`
*
* In order to use this capability, the corresponding GLSL extension must be enabled like so:
*
* `#extension GL_EXT_nonuniform_qualifier : require`
*
* and then used either as `nonuniformEXT` qualifier in variable declaration:
*
* eg. `layout(location = 0) nonuniformEXT flat in int vertex_data;`
*
* or as `nonuniformEXT` constructor:
*
* eg. `texture_array[nonuniformEXT(vertex_data)]`
*
* HLSL does not need any extension.
*
* This capability means the hardware will also support SAMPLED_TEXTURE_ARRAY_DYNAMIC_INDEXING
* and SAMPLED_TEXTURE_BINDING_ARRAY.
*
* Supported platforms:
* - DX12
* - Metal (with MSL 2.0+ on macOS 10.13+)
* - Vulkan 1.2+ (or VK_EXT_descriptor_indexing)'s shaderSampledImageArrayNonUniformIndexing feature)
*
* This is a native only feature.
*/
#define WGPUFeatures_SAMPLED_TEXTURE_ARRAY_NON_UNIFORM_INDEXING (uint64_t)524288
/**
* Allows the user to create unsized uniform arrays of bindings:
*
* eg. `uniform texture2D textures[]`.
*
* If this capability is supported, SAMPLED_TEXTURE_ARRAY_NON_UNIFORM_INDEXING is very likely
* to also be supported
*
* Supported platforms:
* - DX12
* - Vulkan 1.2+ (or VK_EXT_descriptor_indexing)'s runtimeDescriptorArray feature
*
* This is a native only feature.
*/
#define WGPUFeatures_UNSIZED_BINDING_ARRAY (uint64_t)1048576
/**
* Allows the user to call [`RenderPass::multi_draw_indirect`] and [`RenderPass::multi_draw_indexed_indirect`].
*
* Allows multiple indirect calls to be dispatched from a single buffer.
*
* Supported platforms:
* - DX12
* - Metal
* - Vulkan
*
* This is a native only feature.
*/
#define WGPUFeatures_MULTI_DRAW_INDIRECT (uint64_t)2097152
/**
* Allows the user to call [`RenderPass::multi_draw_indirect_count`] and [`RenderPass::multi_draw_indexed_indirect_count`].
*
* This allows the use of a buffer containing the actual number of draw calls.
*
* Supported platforms:
* - DX12
* - Vulkan 1.2+ (or VK_KHR_draw_indirect_count)
*
* This is a native only feature.
*/
#define WGPUFeatures_MULTI_DRAW_INDIRECT_COUNT (uint64_t)4194304
/**
* Allows the use of push constants: small, fast bits of memory that can be updated
* inside a [`RenderPass`].
*
* Allows the user to call [`RenderPass::set_push_constants`], provide a non-empty array
* to [`PipelineLayoutDescriptor`], and provide a non-zero limit to [`Limits::max_push_constant_size`].
*
* A block of push constants can be declared with `layout(push_constant) uniform Name {..}` in shaders.
*
* Supported platforms:
* - DX12
* - Vulkan
* - Metal
* - DX11 (emulated with uniforms)
* - OpenGL (emulated with uniforms)
*
* This is a native only feature.
*/
#define WGPUFeatures_PUSH_CONSTANTS (uint64_t)8388608
/**
* Allows the use of [`AddressMode::ClampToBorder`].
*
* Supported platforms:
* - DX12
* - Vulkan
* - Metal (macOS 10.12+ only)
* - DX11
* - OpenGL
*
* This is a web and native feature.
*/
#define WGPUFeatures_ADDRESS_MODE_CLAMP_TO_BORDER (uint64_t)16777216
/**
* Allows the user to set a non-fill polygon mode in [`RasterizationStateDescriptor::polygon_mode`]
*
* This allows drawing polygons/triangles as lines (wireframe) or points instead of filled
*
* Supported platforms:
* - DX12
* - Vulkan
*
* This is a native only feature.
*/
#define WGPUFeatures_NON_FILL_POLYGON_MODE (uint64_t)33554432
/**
* Features which are part of the upstream WebGPU standard.
*/
#define WGPUFeatures_ALL_WEBGPU (uint64_t)65535
/**
* Features that are only available when targeting native (not web).
*/
#define WGPUFeatures_ALL_NATIVE (uint64_t)18446744073709486080ULL
/**
* Represents the sets of limits an adapter/device supports.
*
* Limits "better" than the default must be supported by the adapter and requested when requesting
* a device. If limits "better" than the adapter supports are requested, requesting a device will panic.
* Once a device is requested, you may only use resources up to the limits requested _even_ if the
* adapter supports "better" limits.
*
* Requesting limits that are "better" than you need may cause performance to decrease because the
* implementation needs to support more than is needed. You should ideally only request exactly what
* you need.
*
* See also: https://gpuweb.github.io/gpuweb/#dictdef-gpulimits
*/
struct WGPULimits {
/**
* Amount of bind groups that can be attached to a pipeline at the same time. Defaults to 4. Higher is "better".
*/
uint32_t max_bind_groups;
/**
* Amount of uniform buffer bindings that can be dynamic in a single pipeline. Defaults to 8. Higher is "better".
*/
uint32_t max_dynamic_uniform_buffers_per_pipeline_layout;
/**
* Amount of storage buffer bindings that can be dynamic in a single pipeline. Defaults to 4. Higher is "better".
*/
uint32_t max_dynamic_storage_buffers_per_pipeline_layout;
/**
* Amount of sampled textures visible in a single shader stage. Defaults to 16. Higher is "better".
*/
uint32_t max_sampled_textures_per_shader_stage;
/**
* Amount of samplers visible in a single shader stage. Defaults to 16. Higher is "better".
*/
uint32_t max_samplers_per_shader_stage;
/**
* Amount of storage buffers visible in a single shader stage. Defaults to 4. Higher is "better".
*/
uint32_t max_storage_buffers_per_shader_stage;
/**
* Amount of storage textures visible in a single shader stage. Defaults to 4. Higher is "better".
*/
uint32_t max_storage_textures_per_shader_stage;
/**
* Amount of uniform buffers visible in a single shader stage. Defaults to 12. Higher is "better".
*/
uint32_t max_uniform_buffers_per_shader_stage;
/**
* Maximum size in bytes of a binding to a uniform buffer. Defaults to 16384. Higher is "better".
*/
uint32_t max_uniform_buffer_binding_size;
/**
* Amount of storage available for push constants in bytes. Defaults to 0. Higher is "better".
* Requesting more than 0 during device creation requires [`Features::PUSH_CONSTANTS`] to be enabled.
*
* Expect the size to be:
* - Vulkan: 128-256 bytes
* - DX12: 256 bytes
* - Metal: 4096 bytes
* - DX11 & OpenGL don't natively support push constants, and are emulated with uniforms,
* so this number is less useful.
*/
uint32_t max_push_constant_size;
};
/**
* Describes a [`Device`].
*/
struct WGPUDeviceDescriptor {
/**
* Features that the device should support. If any feature is not supported by
* the adapter, creating a device will panic.
*/
WGPUFeatures features;
/**
* Limits that the device should support. If any limit is "better" than the limit exposed by
* the adapter, creating a device will panic.
*/
struct WGPULimits limits;
/**
* Switch shader validation on/off. This is a temporary field
* that will be removed once our validation logic is complete.
*/
bool shader_validation;
};
typedef void (*WGPUBufferMapCallback)(enum WGPUBufferMapAsyncStatus status, uint8_t *userdata);
struct WGPUBufferMapOperation {
enum WGPUHostMap host;
WGPUBufferMapCallback callback;
uint8_t *user_data;
};
/**
* Describes a [`CommandBuffer`].
*/
struct WGPUCommandBufferDescriptor {
WGPURawString label;
};
/**
* Origin of a copy to/from a texture.
*/
struct WGPUOrigin3d {
uint32_t x;
uint32_t y;
uint32_t z;
};
#define WGPUOrigin3d_ZERO (WGPUOrigin3d){ .x = 0, .y = 0, .z = 0 }
/**
* View of a texture which can be used to copy to/from a buffer/texture.
*/
struct WGPUTextureCopyView_TextureId {
/**
* The texture to be copied to/from.
*/
WGPUTextureId texture;
/**
* The target mip level of the texture.
*/
uint32_t mip_level;
/**
* The base texel of the texture in the selected `mip_level`.
*/
struct WGPUOrigin3d origin;
};
typedef struct WGPUTextureCopyView_TextureId WGPUTextureCopyView;
/**
* Layout of a texture in a buffer's memory.
*/
struct WGPUTextureDataLayout {
/**
* Offset into the buffer that is the start of the texture. Must be a multiple of texture block size.
* For non-compressed textures, this is 1.
*/
WGPUBufferAddress offset;
/**
* Bytes per "row" of the image. This represents one row of pixels in the x direction. Compressed
* textures include multiple rows of pixels in each "row". May be 0 for 1D texture copies.
*
* Must be a multiple of 256 for [`CommandEncoder::copy_buffer_to_texture`] and [`CommandEncoder::copy_texture_to_buffer`].
* [`Queue::write_texture`] does not have this requirement.
*
* Must be a multiple of the texture block size. For non-compressed textures, this is 1.
*/
uint32_t bytes_per_row;
/**
* Rows that make up a single "image". Each "image" is one layer in the z direction of a 3D image. May be larger
* than `copy_size.y`.
*
* May be 0 for 2D texture copies.
*/
uint32_t rows_per_image;
};
/**
* View of a buffer which can be used to copy to/from a texture.
*/
struct WGPUBufferCopyView_BufferId {
/**
* The buffer to be copied to/from.
*/
WGPUBufferId buffer;
/**
* The layout of the texture data in this buffer.
*/
struct WGPUTextureDataLayout layout;
};
typedef struct WGPUBufferCopyView_BufferId WGPUBufferCopyView;
typedef WGPUDeviceId WGPUQueueId;
/**
* Describes the shader stages that a binding will be visible from.
*
* These can be combined so something that is visible from both vertex and fragment shaders can be defined as:
*
* `ShaderStage::VERTEX | ShaderStage::FRAGMENT`
*/
typedef uint32_t WGPUShaderStage;
/**
* Binding is not visible from any shader stage.
*/
#define WGPUShaderStage_NONE (uint32_t)0
/**
* Binding is visible from the vertex shader of a render pipeline.
*/
#define WGPUShaderStage_VERTEX (uint32_t)1
/**
* Binding is visible from the fragment shader of a render pipeline.
*/
#define WGPUShaderStage_FRAGMENT (uint32_t)2
/**
* Binding is visible from the compute shader of a compute pipeline.
*/
#define WGPUShaderStage_COMPUTE (uint32_t)4
typedef uint32_t WGPURawEnumOption_TextureViewDimension;
typedef uint32_t WGPURawEnumOption_TextureComponentType;
typedef uint32_t WGPURawEnumOption_TextureFormat;
struct WGPUBindGroupLayoutEntry {
uint32_t binding;
WGPUShaderStage visibility;
enum WGPURawBindingType ty;
bool has_dynamic_offset;
WGPUOption_BufferSize min_binding_size;
WGPURawEnumOption_TextureViewDimension view_dimension;
WGPURawEnumOption_TextureComponentType texture_component_type;
bool multisampled;
WGPURawEnumOption_TextureFormat storage_texture_format;
};
struct WGPUBindGroupLayoutDescriptor {
WGPURawString label;
const struct WGPUBindGroupLayoutEntry *entries;
uintptr_t entries_length;
};
struct WGPUBindGroupEntry {
uint32_t binding;
WGPUOption_BufferId buffer;
WGPUBufferAddress offset;
WGPUOption_BufferSize size;
WGPUOption_SamplerId sampler;
WGPUOption_TextureViewId texture_view;
};
struct WGPUBindGroupDescriptor {
WGPURawString label;
WGPUBindGroupLayoutId layout;
const struct WGPUBindGroupEntry *entries;
uintptr_t entries_length;
};
/**
* Integral type used for dynamic bind group offsets.
*/
typedef uint32_t WGPUDynamicOffset;
/**
* Bound uniform/storage buffer offsets must be aligned to this number.
*/
#define WGPUBIND_BUFFER_ALIGNMENT 256
/**
* Buffer to buffer copy offsets and sizes must be aligned to this number.
*/
#define WGPUCOPY_BUFFER_ALIGNMENT 4
/**
* Vertex buffer strides have to be aligned to this number.
*/
#define WGPUVERTEX_STRIDE_ALIGNMENT 4
WGPU_INLINE
struct WGPUInfrastructure wgpu_client_new(void)
WGPU_FUNC;
/**
* # Safety
*
* This function is unsafe because improper use may lead to memory
* problems. For example, a double-free may occur if the function is called
* twice on the same raw pointer.
*/
WGPU_INLINE
void wgpu_client_delete(struct WGPUClient *aClient)
WGPU_FUNC;
/**
* # Safety
*
* This function is unsafe as there is no guarantee that the given pointer is
* valid for `id_length` elements.
*/
WGPU_INLINE
uintptr_t wgpu_client_make_adapter_ids(const struct WGPUClient *aClient,
WGPUAdapterId *aIds,
uintptr_t aIdLength)
WGPU_FUNC;
WGPU_INLINE
void wgpu_client_kill_adapter_id(const struct WGPUClient *aClient,
WGPUAdapterId aId)
WGPU_FUNC;
WGPU_INLINE
WGPUDeviceId wgpu_client_make_device_id(const struct WGPUClient *aClient,
WGPUAdapterId aAdapterId)
WGPU_FUNC;
WGPU_INLINE
void wgpu_client_kill_device_id(const struct WGPUClient *aClient,
WGPUDeviceId aId)
WGPU_FUNC;
WGPU_INLINE
WGPUBufferId wgpu_client_make_buffer_id(const struct WGPUClient *aClient,
WGPUDeviceId aDeviceId)
WGPU_FUNC;
WGPU_INLINE
WGPUBufferId wgpu_client_create_buffer(const struct WGPUClient *aClient,
WGPUDeviceId aDeviceId,
const struct WGPUBufferDescriptor *aDesc,
WGPUByteBuf *aBb)
WGPU_FUNC;
WGPU_INLINE
void wgpu_client_kill_buffer_id(const struct WGPUClient *aClient,
WGPUBufferId aId)
WGPU_FUNC;
WGPU_INLINE
WGPUTextureId wgpu_client_create_texture(const struct WGPUClient *aClient,
WGPUDeviceId aDeviceId,
const struct WGPUTextureDescriptor *aDesc,
WGPUByteBuf *aBb)
WGPU_FUNC;
WGPU_INLINE
void wgpu_client_kill_texture_id(const struct WGPUClient *aClient,
WGPUTextureId aId)
WGPU_FUNC;
WGPU_INLINE
WGPUTextureViewId wgpu_client_create_texture_view(const struct WGPUClient *aClient,
WGPUDeviceId aDeviceId,
const struct WGPUTextureViewDescriptor *aDesc,
WGPUByteBuf *aBb)
WGPU_FUNC;
WGPU_INLINE
void wgpu_client_kill_texture_view_id(const struct WGPUClient *aClient,
WGPUTextureViewId aId)
WGPU_FUNC;
WGPU_INLINE
WGPUSamplerId wgpu_client_create_sampler(const struct WGPUClient *aClient,
WGPUDeviceId aDeviceId,
const struct WGPUSamplerDescriptor *aDesc,
WGPUByteBuf *aBb)
WGPU_FUNC;
WGPU_INLINE
void wgpu_client_kill_sampler_id(const struct WGPUClient *aClient,
WGPUSamplerId aId)
WGPU_FUNC;
WGPU_INLINE
WGPUCommandEncoderId wgpu_client_create_command_encoder(const struct WGPUClient *aClient,
WGPUDeviceId aDeviceId,
const struct WGPUCommandEncoderDescriptor *aDesc,
WGPUByteBuf *aBb)
WGPU_FUNC;
WGPU_INLINE
void wgpu_client_kill_encoder_id(const struct WGPUClient *aClient,
WGPUCommandEncoderId aId)
WGPU_FUNC;
WGPU_INLINE
struct WGPUComputePass *wgpu_command_encoder_begin_compute_pass(WGPUCommandEncoderId aEncoderId,
const struct WGPUComputePassDescriptor *aDesc)
WGPU_FUNC;
WGPU_INLINE
void wgpu_compute_pass_finish(const struct WGPUComputePass *aPass,
WGPUByteBuf *aOutput)
WGPU_FUNC;
WGPU_INLINE
void wgpu_compute_pass_destroy(struct WGPUComputePass *aPass)
WGPU_FUNC;
WGPU_INLINE
struct WGPURenderPass *wgpu_command_encoder_begin_render_pass(WGPUCommandEncoderId aEncoderId,
const struct WGPURenderPassDescriptor *aDesc)
WGPU_FUNC;
WGPU_INLINE
void wgpu_render_pass_finish(const struct WGPURenderPass *aPass,
WGPUByteBuf *aOutput)
WGPU_FUNC;
WGPU_INLINE
void wgpu_render_pass_destroy(struct WGPURenderPass *aPass)
WGPU_FUNC;
WGPU_INLINE
WGPUBindGroupLayoutId wgpu_client_make_bind_group_layout_id(const struct WGPUClient *aClient,
WGPUDeviceId aDeviceId)
WGPU_FUNC;
WGPU_INLINE
void wgpu_client_kill_bind_group_layout_id(const struct WGPUClient *aClient,
WGPUBindGroupLayoutId aId)
WGPU_FUNC;
WGPU_INLINE
WGPUPipelineLayoutId wgpu_client_make_pipeline_layout_id(const struct WGPUClient *aClient,
WGPUDeviceId aDeviceId)
WGPU_FUNC;
WGPU_INLINE
void wgpu_client_kill_pipeline_layout_id(const struct WGPUClient *aClient,
WGPUPipelineLayoutId aId)
WGPU_FUNC;
WGPU_INLINE
WGPUBindGroupId wgpu_client_make_bind_group_id(const struct WGPUClient *aClient,
WGPUDeviceId aDeviceId)
WGPU_FUNC;
WGPU_INLINE
void wgpu_client_kill_bind_group_id(const struct WGPUClient *aClient,
WGPUBindGroupId aId)
WGPU_FUNC;
WGPU_INLINE
WGPUShaderModuleId wgpu_client_create_shader_module(const struct WGPUClient *aClient,
WGPUDeviceId aDeviceId,
const struct WGPUShaderModuleDescriptor *aDesc,
WGPUByteBuf *aBb)
WGPU_FUNC;
WGPU_INLINE
void wgpu_client_kill_shader_module_id(const struct WGPUClient *aClient,
WGPUShaderModuleId aId)
WGPU_FUNC;
WGPU_INLINE
WGPUComputePipelineId wgpu_client_create_compute_pipeline(const struct WGPUClient *aClient,
WGPUDeviceId aDeviceId,
const struct WGPUComputePipelineDescriptor *aDesc,
WGPUByteBuf *aBb)
WGPU_FUNC;
WGPU_INLINE
void wgpu_client_kill_compute_pipeline_id(const struct WGPUClient *aClient,
WGPUComputePipelineId aId)
WGPU_FUNC;
WGPU_INLINE
WGPURenderPipelineId wgpu_client_create_render_pipeline(const struct WGPUClient *aClient,
WGPUDeviceId aDeviceId,
const struct WGPURenderPipelineDescriptor *aDesc,
WGPUByteBuf *aBb)
WGPU_FUNC;
WGPU_INLINE
void wgpu_client_kill_render_pipeline_id(const struct WGPUClient *aClient,
WGPURenderPipelineId aId)
WGPU_FUNC;
WGPU_INLINE
struct WGPUGlobal *wgpu_server_new(struct WGPUIdentityRecyclerFactory aFactory)
WGPU_FUNC;
/**
* # Safety
*
* This function is unsafe because improper use may lead to memory
* problems. For example, a double-free may occur if the function is called
* twice on the same raw pointer.
*/
WGPU_INLINE
void wgpu_server_delete(struct WGPUGlobal *aGlobal)
WGPU_FUNC;
WGPU_INLINE
void wgpu_server_poll_all_devices(const struct WGPUGlobal *aGlobal,
bool aForceWait)
WGPU_FUNC;
/**
* Request an adapter according to the specified options.
* Provide the list of IDs to pick from.
*
* Returns the index in this list, or -1 if unable to pick.
*
* # Safety
*
* This function is unsafe as there is no guarantee that the given pointer is
* valid for `id_length` elements.
*/
WGPU_INLINE
int8_t wgpu_server_instance_request_adapter(const struct WGPUGlobal *aGlobal,
const WGPURequestAdapterOptions *aDesc,
const WGPUAdapterId *aIds,
uintptr_t aIdLength)
WGPU_FUNC;
WGPU_INLINE
void wgpu_server_adapter_request_device(const struct WGPUGlobal *aGlobal,
WGPUAdapterId aSelfId,
const struct WGPUDeviceDescriptor *aDesc,
WGPUDeviceId aNewId)
WGPU_FUNC;
WGPU_INLINE
void wgpu_server_adapter_drop(const struct WGPUGlobal *aGlobal,
WGPUAdapterId aAdapterId)
WGPU_FUNC;
WGPU_INLINE
void wgpu_server_device_drop(const struct WGPUGlobal *aGlobal,
WGPUDeviceId aSelfId)
WGPU_FUNC;
WGPU_INLINE
void wgpu_server_device_create_buffer(const struct WGPUGlobal *aGlobal,
WGPUDeviceId aSelfId,
const struct WGPUBufferDescriptor *aDesc,
WGPUBufferId aNewId)
WGPU_FUNC;
WGPU_INLINE
void wgpu_server_buffer_map(const struct WGPUGlobal *aGlobal,
WGPUBufferId aBufferId,
WGPUBufferAddress aStart,
WGPUBufferAddress aSize,
struct WGPUBufferMapOperation aOperation)
WGPU_FUNC;
/**
* # Safety
*
* This function is unsafe as there is no guarantee that the given pointer is
* valid for `size` elements.
*/
WGPU_INLINE
uint8_t *wgpu_server_buffer_get_mapped_range(const struct WGPUGlobal *aGlobal,
WGPUBufferId aBufferId,
WGPUBufferAddress aStart,
WGPUOption_BufferSize aSize)
WGPU_FUNC;
WGPU_INLINE
void wgpu_server_buffer_unmap(const struct WGPUGlobal *aGlobal,
WGPUBufferId aBufferId)
WGPU_FUNC;
WGPU_INLINE
void wgpu_server_buffer_drop(const struct WGPUGlobal *aGlobal,
WGPUBufferId aSelfId)
WGPU_FUNC;
WGPU_INLINE
void wgpu_server_device_create_encoder(const struct WGPUGlobal *aGlobal,
WGPUDeviceId aSelfId,
const struct WGPUCommandEncoderDescriptor *aDesc,
WGPUCommandEncoderId aNewId)
WGPU_FUNC;
WGPU_INLINE
void wgpu_server_encoder_finish(const struct WGPUGlobal *aGlobal,
WGPUCommandEncoderId aSelfId,
const struct WGPUCommandBufferDescriptor *aDesc)
WGPU_FUNC;
WGPU_INLINE
void wgpu_server_encoder_drop(const struct WGPUGlobal *aGlobal,
WGPUCommandEncoderId aSelfId)
WGPU_FUNC;
/**
* # Safety
*
* This function is unsafe as there is no guarantee that the given pointer is
* valid for `byte_length` elements.
*/
WGPU_INLINE
void wgpu_server_command_buffer_drop(const struct WGPUGlobal *aGlobal,
WGPUCommandBufferId aSelfId)
WGPU_FUNC;
WGPU_INLINE
void wgpu_server_encoder_copy_buffer_to_buffer(const struct WGPUGlobal *aGlobal,
WGPUCommandEncoderId aSelfId,
WGPUBufferId aSourceId,
WGPUBufferAddress aSourceOffset,
WGPUBufferId aDestinationId,
WGPUBufferAddress aDestinationOffset,
WGPUBufferAddress aSize)
WGPU_FUNC;
WGPU_INLINE
void wgpu_server_encoder_copy_texture_to_buffer(const struct WGPUGlobal *aGlobal,
WGPUCommandEncoderId aSelfId,
const WGPUTextureCopyView *aSource,
const WGPUBufferCopyView *aDestination,
const struct WGPUExtent3d *aSize)
WGPU_FUNC;
WGPU_INLINE
void wgpu_server_encoder_copy_buffer_to_texture(const struct WGPUGlobal *aGlobal,
WGPUCommandEncoderId aSelfId,
const WGPUBufferCopyView *aSource,
const WGPUTextureCopyView *aDestination,
const struct WGPUExtent3d *aSize)
WGPU_FUNC;
WGPU_INLINE
void wgpu_server_encoder_copy_texture_to_texture(const struct WGPUGlobal *aGlobal,
WGPUCommandEncoderId aSelfId,
const WGPUTextureCopyView *aSource,
const WGPUTextureCopyView *aDestination,
const struct WGPUExtent3d *aSize)
WGPU_FUNC;
/**
* # Safety
*
* This function is unsafe as there is no guarantee that the given pointers are
* valid for `color_attachments_length` and `command_length` elements,
* respectively.
*/
WGPU_INLINE
void wgpu_server_encode_compute_pass(const struct WGPUGlobal *aGlobal,
WGPUCommandEncoderId aSelfId,
const WGPUByteBuf *aByteBuf)
WGPU_FUNC;
/**
* # Safety
*
* This function is unsafe as there is no guarantee that the given pointers are
* valid for `color_attachments_length` and `command_length` elements,
* respectively.
*/
WGPU_INLINE
void wgpu_server_encode_render_pass(const struct WGPUGlobal *aGlobal,
WGPUCommandEncoderId aSelfId,
const struct WGPURenderPass *aPass)
WGPU_FUNC;
/**
* # Safety
*
* This function is unsafe as there is no guarantee that the given pointer is
* valid for `command_buffer_id_length` elements.
*/
WGPU_INLINE
void wgpu_server_queue_submit(const struct WGPUGlobal *aGlobal,
WGPUQueueId aSelfId,
const WGPUCommandBufferId *aCommandBufferIds,
uintptr_t aCommandBufferIdLength)
WGPU_FUNC;
/**
* # Safety
*
* This function is unsafe as there is no guarantee that the given pointer is
* valid for `data_length` elements.
*/
WGPU_INLINE
void wgpu_server_queue_write_buffer(const struct WGPUGlobal *aGlobal,
WGPUQueueId aSelfId,
WGPUBufferId aBufferId,
WGPUBufferAddress aBufferOffset,
const uint8_t *aData,
uintptr_t aDataLength)
WGPU_FUNC;
/**
* # Safety
*
* This function is unsafe as there is no guarantee that the given pointer is
* valid for `data_length` elements.
*/
WGPU_INLINE
void wgpu_server_queue_write_texture(const struct WGPUGlobal *aGlobal,
WGPUQueueId aSelfId,
const WGPUTextureCopyView *aDestination,
const uint8_t *aData,
uintptr_t aDataLength,
const struct WGPUTextureDataLayout *aLayout,
const struct WGPUExtent3d *aExtent)
WGPU_FUNC;
/**
* # Safety
*
* This function is unsafe as there is no guarantee that the given pointer is
* valid for `entries_length` elements.
*/
WGPU_INLINE
void wgpu_server_device_create_bind_group_layout(const struct WGPUGlobal *aGlobal,
WGPUDeviceId aSelfId,
const struct WGPUBindGroupLayoutDescriptor *aDesc,
WGPUBindGroupLayoutId aNewId)
WGPU_FUNC;
WGPU_INLINE
void wgpu_server_bind_group_layout_drop(const struct WGPUGlobal *aGlobal,
WGPUBindGroupLayoutId aSelfId)
WGPU_FUNC;
WGPU_INLINE
void wgpu_server_device_create_pipeline_layout(const struct WGPUGlobal *aGlobal,
WGPUDeviceId aSelfId,
const struct WGPUPipelineLayoutDescriptor *aDesc,
WGPUPipelineLayoutId aNewId)
WGPU_FUNC;
WGPU_INLINE
void wgpu_server_pipeline_layout_drop(const struct WGPUGlobal *aGlobal,
WGPUPipelineLayoutId aSelfId)
WGPU_FUNC;
/**
* # Safety
*
* This function is unsafe as there is no guarantee that the given pointer is
* valid for `entries_length` elements.
*/
WGPU_INLINE
void wgpu_server_device_create_bind_group(const struct WGPUGlobal *aGlobal,
WGPUDeviceId aSelfId,
const struct WGPUBindGroupDescriptor *aDesc,
WGPUBindGroupId aNewId)
WGPU_FUNC;
WGPU_INLINE
void wgpu_server_bind_group_drop(const struct WGPUGlobal *aGlobal,
WGPUBindGroupId aSelfId)
WGPU_FUNC;
WGPU_INLINE
void wgpu_server_shader_module_drop(const struct WGPUGlobal *aGlobal,
WGPUShaderModuleId aSelfId)
WGPU_FUNC;
WGPU_INLINE
void wgpu_server_compute_pipeline_drop(const struct WGPUGlobal *aGlobal,
WGPUComputePipelineId aSelfId)
WGPU_FUNC;
WGPU_INLINE
void wgpu_server_render_pipeline_drop(const struct WGPUGlobal *aGlobal,
WGPURenderPipelineId aSelfId)
WGPU_FUNC;
WGPU_INLINE
void wgpu_server_device_create_texture(const struct WGPUGlobal *aGlobal,
WGPUDeviceId aSelfId,
const struct WGPUTextureDescriptor *aDesc,
WGPUTextureId aNewId)
WGPU_FUNC;
WGPU_INLINE
void wgpu_server_texture_create_view(const struct WGPUGlobal *aGlobal,
WGPUTextureId aSelfId,
const struct WGPUTextureViewDescriptor *aDesc,
WGPUTextureViewId aNewId)
WGPU_FUNC;
WGPU_INLINE
void wgpu_server_texture_drop(const struct WGPUGlobal *aGlobal,
WGPUTextureId aSelfId)
WGPU_FUNC;
WGPU_INLINE
void wgpu_server_texture_view_drop(const struct WGPUGlobal *aGlobal,
WGPUTextureViewId aSelfId)
WGPU_FUNC;
WGPU_INLINE
void wgpu_server_device_create_sampler(const struct WGPUGlobal *aGlobal,
WGPUDeviceId aSelfId,
const struct WGPUSamplerDescriptor *aDesc,
WGPUSamplerId aNewId)
WGPU_FUNC;
WGPU_INLINE
void wgpu_server_sampler_drop(const struct WGPUGlobal *aGlobal,
WGPUSamplerId aSelfId)
WGPU_FUNC;
/**
* # Safety
*
* This function is unsafe as there is no guarantee that the given pointer is
* valid for `offset_length` elements.
*/
WGPU_INLINE
void wgpu_render_bundle_set_bind_group(struct WGPURenderBundleEncoder *aBundle,
uint32_t aIndex,
WGPUBindGroupId aBindGroupId,
const WGPUDynamicOffset *aOffsets,
uintptr_t aOffsetLength)
WGPU_FUNC;
WGPU_INLINE
void wgpu_render_bundle_set_pipeline(struct WGPURenderBundleEncoder *aBundle,
WGPURenderPipelineId aPipelineId)
WGPU_FUNC;
WGPU_INLINE
void wgpu_render_bundle_set_index_buffer(struct WGPURenderBundleEncoder *aBundle,
WGPUBufferId aBufferId,
WGPUBufferAddress aOffset,
WGPUOption_BufferSize aSize)
WGPU_FUNC;
WGPU_INLINE
void wgpu_render_bundle_set_vertex_buffer(struct WGPURenderBundleEncoder *aBundle,
uint32_t aSlot,
WGPUBufferId aBufferId,
WGPUBufferAddress aOffset,
WGPUOption_BufferSize aSize)
WGPU_FUNC;
WGPU_INLINE
void wgpu_render_bundle_set_push_constants(struct WGPURenderBundleEncoder *aPass,
WGPUShaderStage aStages,
uint32_t aOffset,
uint32_t aSizeBytes,
const uint8_t *aData)
WGPU_FUNC;
WGPU_INLINE
void wgpu_render_bundle_draw(struct WGPURenderBundleEncoder *aBundle,
uint32_t aVertexCount,
uint32_t aInstanceCount,
uint32_t aFirstVertex,
uint32_t aFirstInstance)
WGPU_FUNC;
WGPU_INLINE
void wgpu_render_bundle_draw_indexed(struct WGPURenderBundleEncoder *aBundle,
uint32_t aIndexCount,
uint32_t aInstanceCount,
uint32_t aFirstIndex,
int32_t aBaseVertex,
uint32_t aFirstInstance)
WGPU_FUNC;
WGPU_INLINE
void wgpu_render_bundle_draw_indirect(struct WGPURenderBundleEncoder *aBundle,
WGPUBufferId aBufferId,
WGPUBufferAddress aOffset)
WGPU_FUNC;
WGPU_INLINE
void wgpu_render_pass_bundle_indexed_indirect(struct WGPURenderBundleEncoder *aBundle,
WGPUBufferId aBufferId,
WGPUBufferAddress aOffset)
WGPU_FUNC;
WGPU_INLINE
void wgpu_render_bundle_push_debug_group(struct WGPURenderBundleEncoder *aBundle,
WGPURawString aLabel)
WGPU_FUNC;
WGPU_INLINE
void wgpu_render_bundle_pop_debug_group(struct WGPURenderBundleEncoder *aBundle)
WGPU_FUNC;
WGPU_INLINE
void wgpu_render_bundle_insert_debug_marker(struct WGPURenderBundleEncoder *aBundle,
WGPURawString aLabel)
WGPU_FUNC;
/**
* # Safety
*
* This function is unsafe as there is no guarantee that the given pointer is
* valid for `offset_length` elements.
*/
WGPU_INLINE
void wgpu_compute_pass_set_bind_group(struct WGPUComputePass *aPass,
uint32_t aIndex,
WGPUBindGroupId aBindGroupId,
const WGPUDynamicOffset *aOffsets,
uintptr_t aOffsetLength)
WGPU_FUNC;
WGPU_INLINE
void wgpu_compute_pass_set_pipeline(struct WGPUComputePass *aPass,
WGPUComputePipelineId aPipelineId)
WGPU_FUNC;
WGPU_INLINE
void wgpu_compute_pass_set_push_constant(struct WGPUComputePass *aPass,
uint32_t aOffset,
uint32_t aSizeBytes,
const uint8_t *aData)
WGPU_FUNC;
WGPU_INLINE
void wgpu_compute_pass_dispatch(struct WGPUComputePass *aPass,
uint32_t aGroupsX,
uint32_t aGroupsY,
uint32_t aGroupsZ)
WGPU_FUNC;
WGPU_INLINE
void wgpu_compute_pass_dispatch_indirect(struct WGPUComputePass *aPass,
WGPUBufferId aBufferId,
WGPUBufferAddress aOffset)
WGPU_FUNC;
WGPU_INLINE
void wgpu_compute_pass_push_debug_group(struct WGPUComputePass *aPass,
WGPURawString aLabel,
uint32_t aColor)
WGPU_FUNC;
WGPU_INLINE
void wgpu_compute_pass_pop_debug_group(struct WGPUComputePass *aPass)
WGPU_FUNC;
WGPU_INLINE
void wgpu_compute_pass_insert_debug_marker(struct WGPUComputePass *aPass,
WGPURawString aLabel,
uint32_t aColor)
WGPU_FUNC;
/**
* # Safety
*
* This function is unsafe as there is no guarantee that the given pointer is
* valid for `offset_length` elements.
*/
WGPU_INLINE
void wgpu_render_pass_set_bind_group(struct WGPURenderPass *aPass,
uint32_t aIndex,
WGPUBindGroupId aBindGroupId,
const WGPUDynamicOffset *aOffsets,
uintptr_t aOffsetLength)
WGPU_FUNC;
WGPU_INLINE
void wgpu_render_pass_set_pipeline(struct WGPURenderPass *aPass,
WGPURenderPipelineId aPipelineId)
WGPU_FUNC;
WGPU_INLINE
void wgpu_render_pass_set_index_buffer(struct WGPURenderPass *aPass,
WGPUBufferId aBufferId,
WGPUBufferAddress aOffset,
WGPUOption_BufferSize aSize)
WGPU_FUNC;
WGPU_INLINE
void wgpu_render_pass_set_vertex_buffer(struct WGPURenderPass *aPass,
uint32_t aSlot,
WGPUBufferId aBufferId,
WGPUBufferAddress aOffset,
WGPUOption_BufferSize aSize)
WGPU_FUNC;
WGPU_INLINE
void wgpu_render_pass_set_blend_color(struct WGPURenderPass *aPass,
const struct WGPUColor *aColor)
WGPU_FUNC;
WGPU_INLINE
void wgpu_render_pass_set_stencil_reference(struct WGPURenderPass *aPass,
uint32_t aValue)
WGPU_FUNC;
WGPU_INLINE
void wgpu_render_pass_set_viewport(struct WGPURenderPass *aPass,
float aX,
float aY,
float aW,
float aH,
float aDepthMin,
float aDepthMax)
WGPU_FUNC;
WGPU_INLINE
void wgpu_render_pass_set_scissor_rect(struct WGPURenderPass *aPass,
uint32_t aX,
uint32_t aY,
uint32_t aW,
uint32_t aH)
WGPU_FUNC;
WGPU_INLINE
void wgpu_render_pass_set_push_constants(struct WGPURenderPass *aPass,
WGPUShaderStage aStages,
uint32_t aOffset,
uint32_t aSizeBytes,
const uint8_t *aData)
WGPU_FUNC;
WGPU_INLINE
void wgpu_render_pass_draw(struct WGPURenderPass *aPass,
uint32_t aVertexCount,
uint32_t aInstanceCount,
uint32_t aFirstVertex,
uint32_t aFirstInstance)
WGPU_FUNC;
WGPU_INLINE
void wgpu_render_pass_draw_indexed(struct WGPURenderPass *aPass,
uint32_t aIndexCount,
uint32_t aInstanceCount,
uint32_t aFirstIndex,
int32_t aBaseVertex,
uint32_t aFirstInstance)
WGPU_FUNC;
WGPU_INLINE
void wgpu_render_pass_draw_indirect(struct WGPURenderPass *aPass,
WGPUBufferId aBufferId,
WGPUBufferAddress aOffset)
WGPU_FUNC;
WGPU_INLINE
void wgpu_render_pass_draw_indexed_indirect(struct WGPURenderPass *aPass,
WGPUBufferId aBufferId,
WGPUBufferAddress aOffset)
WGPU_FUNC;
WGPU_INLINE
void wgpu_render_pass_multi_draw_indirect(struct WGPURenderPass *aPass,
WGPUBufferId aBufferId,
WGPUBufferAddress aOffset,
uint32_t aCount)
WGPU_FUNC;
WGPU_INLINE
void wgpu_render_pass_multi_draw_indexed_indirect(struct WGPURenderPass *aPass,
WGPUBufferId aBufferId,
WGPUBufferAddress aOffset,
uint32_t aCount)
WGPU_FUNC;
WGPU_INLINE
void wgpu_render_pass_multi_draw_indirect_count(struct WGPURenderPass *aPass,
WGPUBufferId aBufferId,
WGPUBufferAddress aOffset,
WGPUBufferId aCountBufferId,
WGPUBufferAddress aCountBufferOffset,
uint32_t aMaxCount)
WGPU_FUNC;
WGPU_INLINE
void wgpu_render_pass_multi_draw_indexed_indirect_count(struct WGPURenderPass *aPass,
WGPUBufferId aBufferId,
WGPUBufferAddress aOffset,
WGPUBufferId aCountBufferId,
WGPUBufferAddress aCountBufferOffset,
uint32_t aMaxCount)
WGPU_FUNC;
WGPU_INLINE
void wgpu_render_pass_push_debug_group(struct WGPURenderPass *aPass,
WGPURawString aLabel,
uint32_t aColor)
WGPU_FUNC;
WGPU_INLINE
void wgpu_render_pass_pop_debug_group(struct WGPURenderPass *aPass)
WGPU_FUNC;
WGPU_INLINE
void wgpu_render_pass_insert_debug_marker(struct WGPURenderPass *aPass,
WGPURawString aLabel,
uint32_t aColor)
WGPU_FUNC;