# GpuFeatureId

`import { GpuFeatureId } from "destack:gpu/binding";`

Stable GPU feature identifier.

These identifiers map one-to-one to WebGPU and `wgpu` feature names.
Values are grouped into one web feature bank and one native feature bank.

```ds title="GpuFeatureId"
export enum GpuFeatureId {
    DepthClipControl = 0x10000,
    Depth32FloatStencil8 = 0x10001,
    TextureCompressionBc = 0x10002,
    TextureCompressionBcSliced3D = 0x10003,
    TextureCompressionEtc2 = 0x10004,
    TextureCompressionAstc = 0x10005,
    TextureCompressionAstcSliced3D = 0x10006,
    TimestampQuery = 0x10007,
    IndirectFirstInstance = 0x10008,
    ShaderF16 = 0x10009,
    Rg11B10UfloatRenderable = 0x1000a,
    Bgra8UnormStorage = 0x1000b,
    Float32Filterable = 0x1000c,
    Float32Blendable = 0x1000d,
    DualSourceBlending = 0x1000e,
    ClipDistances = 0x1000f,
    Immediates = 0x10010,
    ShaderFloat32Atomic = 0x20000,
    TextureFormat16BitNorm = 0x20001,
    TextureCompressionAstcHdr = 0x20002,
    TextureAdapterSpecificFormatFeatures = 0x20003,
    PipelineStatisticsQuery = 0x20004,
    TimestampQueryInsideEncoders = 0x20005,
    TimestampQueryInsidePasses = 0x20006,
    MappablePrimaryBuffers = 0x20007,
    TextureBindingArray = 0x20008,
    BufferBindingArray = 0x20009,
    StorageResourceBindingArray = 0x2000a,
    SampledTextureAndStorageBufferArrayNonUniformIndexing = 0x2000b,
    StorageTextureArrayNonUniformIndexing = 0x2000c,
    PartiallyBoundBindingArray = 0x2000d,
    MultiDrawIndirectCount = 0x2000f,
    AddressModeClampToZero = 0x20011,
    AddressModeClampToBorder = 0x20012,
    PolygonModeLine = 0x20013,
    PolygonModePoint = 0x20014,
    ConservativeRasterization = 0x20015,
    VertexWritableStorage = 0x20016,
    ClearTexture = 0x20017,
    Multiview = 0x2001a,
    VertexAttribute64Bit = 0x2001b,
    TextureAtomic = 0x2001c,
    TextureFormatNv12 = 0x2001d,
    TextureFormatP010 = 0x2001e,
    ExternalTexture = 0x2001f,
    ExperimentalRayQuery = 0x20020,
    ShaderF64 = 0x20021,
    ShaderI16 = 0x20022,
    ShaderPrimitiveIndex = 0x20023,
    ShaderEarlyDepthTest = 0x20024,
    ShaderInt64 = 0x20025,
    Subgroup = 0x20026,
    SubgroupVertex = 0x20027,
    SubgroupBarrier = 0x20028,
    PipelineCache = 0x20029,
    ShaderInt64AtomicMinMax = 0x2002a,
    ShaderInt64AtomicAllOps = 0x2002b,
    VulkanGoogleDisplayTiming = 0x2002c,
    VulkanExternalMemoryWin32 = 0x2002d,
    TextureInt64Atomic = 0x2002e,
    UniformBufferBindingArrays = 0x2002f,
    ExperimentalMeshShader = 0x20030,
    ExperimentalRayHitVertexReturn = 0x20031,
    ExperimentalMeshShaderMultiview = 0x20032,
    ExtendedAccelerationStructureVertexFormats = 0x20033,
    ExperimentalPassthroughShaders = 0x20034,
    ShaderBarycentrics = 0x20035,
    SelectiveMultiview = 0x20036,
    ExperimentalMeshShaderPoints = 0x20037,
    MultisampleArray = 0x20038,
    ExperimentalCooperativeMatrix = 0x20039,
    ShaderPerVertex = 0x2003a,
    ShaderDrawIndex = 0x2003b,
}
```

[language/library/src/gpu/binding/adapter.ds:53:201](https://github.com/destack-sh/destack/blob/main/language/library/src/gpu/binding/adapter.ds#L53-L201)

## Variants

### `DepthClipControl = 0x10000`

Enables depth clip control.

### `Depth32FloatStencil8 = 0x10001`

Enables `depth32float-stencil8`.

### `TextureCompressionBc = 0x10002`

Enables BC texture compression.

### `TextureCompressionBcSliced3D = 0x10003`

Enables 3D BC texture compression.

### `TextureCompressionEtc2 = 0x10004`

Enables ETC2 texture compression.

### `TextureCompressionAstc = 0x10005`

Enables ASTC texture compression.

### `TextureCompressionAstcSliced3D = 0x10006`

Enables 3D ASTC texture compression.

### `TimestampQuery = 0x10007`

Enables timestamp queries.

### `IndirectFirstInstance = 0x10008`

Enables nonzero indirect first instance.

### `ShaderF16 = 0x10009`

Enables shader `f16`.

### `Rg11B10UfloatRenderable = 0x1000a`

Enables `rg11b10ufloat` render targets.

### `Bgra8UnormStorage = 0x1000b`

Enables `bgra8unorm` storage textures.

### `Float32Filterable = 0x1000c`

Enables filterable 32-bit float textures.

### `Float32Blendable = 0x1000d`

Enables blendable 32-bit float textures.

### `DualSourceBlending = 0x1000e`

Enables dual-source blending.

### `ClipDistances = 0x1000f`

Enables clip distances.

### `Immediates = 0x10010`

Enables immediate data.

### `ShaderFloat32Atomic = 0x20000`

Enables shader `atomic<f32>`.

### `TextureFormat16BitNorm = 0x20001`

Enables 16-bit normalized texture formats.

### `TextureCompressionAstcHdr = 0x20002`

Enables ASTC HDR texture formats.

### `TextureAdapterSpecificFormatFeatures = 0x20003`

Enables adapter-specific texture format features.

### `PipelineStatisticsQuery = 0x20004`

Enables pipeline statistics queries.

### `TimestampQueryInsideEncoders = 0x20005`

Enables timestamp writes inside command encoders.

### `TimestampQueryInsidePasses = 0x20006`

Enables timestamp writes inside passes.

### `MappablePrimaryBuffers = 0x20007`

Enables mappable primary buffers.

### `TextureBindingArray = 0x20008`

Enables texture binding arrays.

### `BufferBindingArray = 0x20009`

Enables buffer binding arrays.

### `StorageResourceBindingArray = 0x2000a`

Enables storage resource binding arrays.

### `SampledTextureAndStorageBufferArrayNonUniformIndexing = 0x2000b`

Enables nonuniform indexing for sampled-texture and storage-buffer arrays.

### `StorageTextureArrayNonUniformIndexing = 0x2000c`

Enables nonuniform indexing for storage-texture arrays.

### `PartiallyBoundBindingArray = 0x2000d`

Enables partially bound binding arrays.

### `MultiDrawIndirectCount = 0x2000f`

Enables multi-draw indirect count.

### `AddressModeClampToZero = 0x20011`

Enables clamp-to-zero address mode.

### `AddressModeClampToBorder = 0x20012`

Enables clamp-to-border address mode.

### `PolygonModeLine = 0x20013`

Enables line polygon mode.

### `PolygonModePoint = 0x20014`

Enables point polygon mode.

### `ConservativeRasterization = 0x20015`

Enables conservative rasterization.

### `VertexWritableStorage = 0x20016`

Enables writable storage from vertex shaders.

### `ClearTexture = 0x20017`

Enables explicit texture clears.

### `Multiview = 0x2001a`

Enables multiview rendering.

### `VertexAttribute64Bit = 0x2001b`

Enables 64-bit vertex attributes.

### `TextureAtomic = 0x2001c`

Enables texture atomics.

### `TextureFormatNv12 = 0x2001d`

Enables NV12 texture format support.

### `TextureFormatP010 = 0x2001e`

Enables P010 texture format support.

### `ExternalTexture = 0x2001f`

Enables external textures.

### `ExperimentalRayQuery = 0x20020`

Enables experimental ray queries.

### `ShaderF64 = 0x20021`

Enables shader `f64`.

### `ShaderI16 = 0x20022`

Enables shader `i16`.

### `ShaderPrimitiveIndex = 0x20023`

Enables shader primitive index builtins.

### `ShaderEarlyDepthTest = 0x20024`

Enables early depth tests in shaders.

### `ShaderInt64 = 0x20025`

Enables shader `i64`.

### `Subgroup = 0x20026`

Enables subgroup operations.

### `SubgroupVertex = 0x20027`

Enables subgroup operations in vertex shaders.

### `SubgroupBarrier = 0x20028`

Enables subgroup barriers.

### `PipelineCache = 0x20029`

Enables pipeline caches.

### `ShaderInt64AtomicMinMax = 0x2002a`

Enables `i64` atomic min and max.

### `ShaderInt64AtomicAllOps = 0x2002b`

Enables full `i64` atomic operations.

### `VulkanGoogleDisplayTiming = 0x2002c`

Enables Vulkan Google display timing.

### `VulkanExternalMemoryWin32 = 0x2002d`

Enables Vulkan external memory on Win32.

### `TextureInt64Atomic = 0x2002e`

Enables 64-bit texture atomics.

### `UniformBufferBindingArrays = 0x2002f`

Enables uniform buffer binding arrays.

### `ExperimentalMeshShader = 0x20030`

Enables experimental mesh shaders.

### `ExperimentalRayHitVertexReturn = 0x20031`

Enables experimental ray hit vertex return.

### `ExperimentalMeshShaderMultiview = 0x20032`

Enables experimental mesh-shader multiview.

### `ExtendedAccelerationStructureVertexFormats = 0x20033`

Enables extended acceleration-structure vertex formats.

### `ExperimentalPassthroughShaders = 0x20034`

Enables experimental passthrough shaders.

### `ShaderBarycentrics = 0x20035`

Enables shader barycentrics.

### `SelectiveMultiview = 0x20036`

Enables selective multiview.

### `ExperimentalMeshShaderPoints = 0x20037`

Enables experimental mesh-shader points.

### `MultisampleArray = 0x20038`

Enables multisample arrays.

### `ExperimentalCooperativeMatrix = 0x20039`

Enables experimental cooperative matrices.

### `ShaderPerVertex = 0x2003a`

Enables per-vertex shader outputs.

### `ShaderDrawIndex = 0x2003b`

Enables shader draw index builtins.
