Documentation

Unity Engine


Unity Engine


WebGPU Device Filter features and limits

Read time 5 minutesLast updated a month ago

When you configure your WebGPU device, you can define specific hardware features and resource limits required by your project. You can add these parameters to your Allow Filters or Deny Filters lists to control which devices to support or exclude based on their capabilities.

Prerequisites

Before you can filter devices by required features or limits, you need to:
  1. Create a WebGPU Device Filter asset.
  2. In the created WedGPU Device Filter asset, select + under the Allow Filters or Deny Filters list.
  3. Expand Capabilities. The Required Features and Limits lists show.

Required features

Filter your device depending on what features your device supports.
To filter devices by required features:
  1. In the device filter asset, select Add Feature. This adds a feature to the list.
  2. Set Feature to your preferred feature from the dropdown.
The filtering asset contains the following feature options:

Feature Name

Description

NoneNo specific feature requirements.
BGRA8UnormStorageSupports using the
bgra8unorm
texture format for storage usage (
bgra8-unorm-storage
).
ClipDistancesAllows vertex shaders to write to user-defined clip distances (
clip-distances
).
CoreFeaturesAndLimitsGuarantees support for WebGPU core features and minimum required limits (
core-features-and-limits
).
Depth32FloatStencil8Supports the
depth32float-stencil8
combined depth and stencil texture format.
DepthClipControlAllows disabling depth clipping, which enables the use of depth clamping (
depth-clip-control
).
DualSourceBlendingEnables dual-source blending, which allows shaders to output two colors to the same color attachment (
dual-source-blending
).
Float32BlendableAllows blending operations on 32-bit floating-point color attachments (
float32-blendable
).
Float32FilterableAllows linear filtering when sampling 32-bit floating-point textures (
float32-filterable
).
IndirectFirstInstanceEnables the
firstInstance
parameter in indirect draw calls (
indirect-first-instance
).
PrimitiveIndexAllows shaders to read the primitive index (
primitive-index
).
RG11B10UfloatRenderableAllows rendering directly to textures using the
rg11b10ufloat
format (
rg11b10ufloat-renderable
).
ShaderF16Enables the use of 16-bit floating-point types (
f16
) for performance optimizations in shaders (
shader-f16
).
SubgroupsEnables subgroup operations in compute and fragment shaders (
subgroups
).
TextureComponentSwizzleAllows customizing how texture channels (R, G, B, A) are swizzled when reading (
texture-component-swizzle
).
TextureCompressionASTCSupports Adaptive Scalable Texture Compression (ASTC) formats (
texture-compression-astc
).
TextureCompressionASTCSliced3DSupports 3D sliced textures using ASTC compression (
texture-compression-astc-sliced-3d
).
TextureCompressionBCSupports Block Compression (BC) formats, commonly used on desktop hardware (
texture-compression-bc
).
TextureCompressionBCSliced3DSupports 3D sliced textures using BC compression (
texture-compression-bc-sliced-3d
).
TextureCompressionETC2Supports Ericsson Texture Compression (ETC2) formats, standard on mobile devices (
texture-compression-etc2
).
TextureFormatsTier1Provides Tier 1 level extended support for texture formats (
texture-formats-tier-1
).
TextureFormatsTier2Provides Tier 2 level extended support for texture formats (
texture-formats-tier-2
).
TimestampQueryAllows querying GPU timestamp execution times for accurate performance profiling (
timestamp-query
).

Limits

Filter devices depending on required resource counts, dimensions, and memory allocations. These limits ensure the device can handle the specific load and architecture of your application.
To filter devices by limits:
  1. From the filtering asset, select Add Limit.
  2. Set Limit to your preferred limit.
The filtering asset has the following limit options:

Limit Name

Description

NoneNo specific limit requirement.
MaxBindGroupsThe maximum number of bind groups that can be bound simultaneously in a pipeline.
MaxBindGroupsPlusVertexBuffersThe combined maximum limit for the sum of bound bind groups and bound vertex buffers.
MaxBindingsPerBindGroupThe maximum number of individual resources (textures, buffers, samplers) allowed within a single bind group.
MaxBufferSizeThe maximum allowed size (in bytes) for a single buffer.
MaxColorAttachmentBytesPerSampleThe maximum total bytes per sample across all color attachments in a single render pass.
MaxColorAttachmentsThe maximum number of color attachments that can be output to simultaneously.
MaxComputeInvocationsPerWorkgroupThe maximum total number of shader invocations (threads) allowed in a single compute work group (X × Y × Z).
MaxComputeWorkgroupSizeXThe maximum size of a compute work group in the X dimension.
MaxComputeWorkgroupSizeYThe maximum size of a compute work group in the Y dimension.
MaxComputeWorkgroupSizeZThe maximum size of a compute work group in the Z dimension.
MaxComputeWorkgroupsPerDimensionThe maximum number of compute work groups that can be dispatched in any single dimension (X, Y, or Z).
MaxComputeWorkgroupStorageSizeThe maximum amount of shared memory (in bytes) available per compute work group.
MaxDynamicStorageBuffersPerPipelineLayoutThe maximum number of dynamic storage buffers allowed in a pipeline layout.
MaxDynamicUniformBuffersPerPipelineLayoutThe maximum number of dynamic uniform buffers allowed in a pipeline layout.
MaxInterStageShaderVariablesThe maximum number of variables that can be passed between shader stages (for example, from vertex to fragment).
MaxSampledTexturesPerShaderStageThe maximum number of sampled textures accessible within a single shader stage.
MaxSamplersPerShaderStageThe maximum number of texture samplers allowed within a single shader stage.
MaxStorageBufferBindingSizeThe maximum binding size (in bytes) allowed for a single storage buffer.
MaxStorageBuffersInFragmentStageThe maximum number of storage buffers accessible specifically in the fragment shader stage.
MaxStorageBuffersInVertexStageThe maximum number of storage buffers accessible specifically in the vertex shader stage.
MaxStorageBuffersPerShaderStageThe maximum number of storage buffers accessible across any single shader stage.
MaxStorageTexturesInFragmentStageThe maximum number of storage textures accessible specifically in the fragment shader stage.
MaxStorageTexturesInVertexStageThe maximum number of storage textures accessible specifically in the vertex shader stage.
MaxStorageTexturesPerShaderStageThe maximum number of storage textures accessible across any single shader stage.
MaxTextureArrayLayersThe maximum number of 2D array layers allowed in a texture array.
MaxTextureDimension1DThe maximum length of a 1D texture.
MaxTextureDimension2DThe maximum width or height of a 2D texture.
MaxTextureDimension3DThe maximum width, height, or depth of a 3D texture.
MaxUniformBufferBindingSizeThe maximum binding size (in bytes) allowed for a single uniform buffer.
MaxUniformBuffersPerShaderStageThe maximum number of uniform buffers accessible within a single shader stage.
MaxVertexAttributesThe maximum number of vertex attributes supported in a single vertex layout.
MaxVertexBuffersThe maximum number of vertex buffers that can be bound simultaneously.
MaxVertexBufferArrayStrideThe maximum allowed stride (in bytes) between elements in a vertex buffer array.
MinStorageBufferOffsetAlignmentThe required minimum alignment (in bytes) for storage buffer binding offsets.
MinUniformBufferOffsetAlignmentThe required minimum alignment (in bytes) for uniform buffer binding offsets.

Additional resources