GPUSupportedLimits

Limited availability

This feature is not Baseline because it does not work in some of the most widely-used browsers.

Experimental: This is an experimental technology
Check the Browser compatibility table carefully before using this in production.

Secure context: This feature is available only in secure contexts (HTTPS), in some or all supporting browsers.

Note: This feature is available in Web Workers.

The GPUSupportedLimits interface of the WebGPU API describes the limits supported by a GPUAdapter.

The GPUSupportedLimits object for the current adapter is accessed via the GPUAdapter.limits property.

You should note that, rather than reporting the exact limits of each GPU, browsers will likely report different tier values of different limits to reduce the unique information available to drive-by fingerprinting. For example, the tiers of a certain limit might be 2048, 8192, and 32768. If your GPU's actual limit is 16384, the browser will still report 8192.

Given that different browsers will handle this differently and the tier values may change over time, it is hard to provide an accurate account of what limit values to expect — thorough testing is advised.

Instance properties

The following limits are represented by properties in a GPUSupportedLimits object. See the Limits section of the specification for detailed descriptions of what the limits relate to.

Limit name Default value
maxTextureDimension1D 8192
maxTextureDimension2D 8192
maxTextureDimension3D 2048
maxTextureArrayLayers 256
maxBindGroups 4
maxBindingsPerBindGroup 640
maxDynamicUniformBuffersPerPipelineLayout 8
maxDynamicStorageBuffersPerPipelineLayout 4
maxSampledTexturesPerShaderStage 16
maxSamplersPerShaderStage 16
maxStorageBuffersPerShaderStage 8
maxStorageTexturesPerShaderStage 4
maxUniformBuffersPerShaderStage 12
maxUniformBufferBindingSize 65536 bytes
maxStorageBufferBindingSize 134217728 bytes (128 MB)
minUniformBufferOffsetAlignment 256 bytes
minStorageBufferOffsetAlignment 256 bytes
maxVertexBuffers 8
maxBufferSize 268435456 bytes (256 MB)
maxVertexAttributes 16
maxVertexBufferArrayStride 2048 bytes
maxInterStageShaderComponents 60
maxInterStageShaderVariables 16
maxColorAttachments 8
maxColorAttachmentBytesPerSample 32
maxComputeWorkgroupStorageSize 16384 bytes
maxComputeInvocationsPerWorkgroup 256
maxComputeWorkgroupSizeX 256
maxComputeWorkgroupSizeY 256
maxComputeWorkgroupSizeZ 64
maxComputeWorkgroupsPerDimension 65535

Examples

In the following code we query the GPUAdapter.limits value of maxBindGroups to see if it is equal to or greater than 6. Our theoretical example app ideally needs 6 bind groups, so if the returned value is >= 6, we add a maximum limit of 6 to the requiredLimits object. We then request a device with that limit requirement using GPUAdapter.requestDevice():

js
async function init() {
  if (!navigator.gpu) {
    throw Error("WebGPU not supported.");
  }

  const adapter = await navigator.gpu.requestAdapter();
  if (!adapter) {
    throw Error("Couldn't request WebGPU adapter.");
  }

  const requiredLimits = {};

  // App ideally needs 6 bind groups, so we'll try to request what the app needs
  if (adapter.limits.maxBindGroups >= 6) {
    requiredLimits.maxBindGroups = 6;
  }

  const device = await adapter.requestDevice({
    requiredLimits,
  });

  // ...
}

Specifications

Specification
WebGPU
# gpusupportedlimits

Browser compatibility

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
GPUSupportedLimits
Experimental
maxBindGroups
Experimental
maxBindGroupsPlusVertexBuffers
Experimental
maxBindingsPerBindGroup
Experimental
maxBufferSize
Experimental
maxColorAttachmentBytesPerSample
Experimental
maxColorAttachments
Experimental
maxComputeInvocationsPerWorkgroup
Experimental
maxComputeWorkgroupSizeX
Experimental
maxComputeWorkgroupSizeY
Experimental
maxComputeWorkgroupSizeZ
Experimental
maxComputeWorkgroupStorageSize
Experimental
maxComputeWorkgroupsPerDimension
Experimental
maxDynamicStorageBuffersPerPipelineLayout
Experimental
maxDynamicUniformBuffersPerPipelineLayout
Experimental
maxInterStageShaderComponents
ExperimentalNon-standard
maxInterStageShaderVariables
Experimental
maxSampledTexturesPerShaderStage
Experimental
maxSamplersPerShaderStage
Experimental
maxStorageBufferBindingSize
Experimental
maxStorageBuffersPerShaderStage
Experimental
maxStorageTexturesPerShaderStage
Experimental
maxTextureArrayLayers
Experimental
maxTextureDimension1D
Experimental
maxTextureDimension2D
Experimental
maxTextureDimension3D
Experimental
maxUniformBufferBindingSize
Experimental
maxUniformBuffersPerShaderStage
Experimental
maxVertexAttributes
Experimental
maxVertexBufferArrayStride
Experimental
maxVertexBuffers
Experimental
minStorageBufferOffsetAlignment
Experimental
minUniformBufferOffsetAlignment
Experimental

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support
Partial support
Partial support
In development. Supported in a pre-release version.
In development. Supported in a pre-release version.
No support
No support
Experimental. Expect behavior to change in the future.
Non-standard. Check cross-browser support before using.
See implementation notes.
User must explicitly enable this feature.
Has more compatibility info.

See also