GPUSupportedLimits

实验性: 这是一个 实验性技术
在生产环境中使用此功能之前,请仔细查看 浏览器兼容性表

安全上下文: 此功能仅在 安全上下文(HTTPS)中可用,在某些或所有 支持的浏览器中可用。

GPUSupportedLimits 接口是 WebGPU API 的一部分,它描述了 GPUAdapter 支持的限制。

当前适配器的 GPUSupportedLimits 对象可以通过 GPUAdapter.limits 属性访问。

请注意,浏览器不会报告每个 GPU 的确切限制,而是会报告不同限制的不同层级值,以减少可用于旁路指纹识别的唯一信息。例如,某个限制的层级值可能是 2048、8192 和 32768。如果您的 GPU 的实际限制是 16384,浏览器仍然会报告 8192。

由于不同的浏览器处理方式不同,并且层级值可能会随着时间的推移而改变,因此很难准确地说明要预期哪些限制值——建议进行彻底的测试。

实例属性

以下限制由 GPUSupportedLimits 对象中的属性表示。有关限制的详细描述,请参阅规范的 限制 部分。

限制名称 默认值
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 字节
maxStorageBufferBindingSize 134217728 字节(128 MB)
minUniformBufferOffsetAlignment 256 字节
minStorageBufferOffsetAlignment 256 字节
maxVertexBuffers 8
maxBufferSize 268435456 字节(256 MB)
maxVertexAttributes 16
maxVertexBufferArrayStride 2048 字节
maxInterStageShaderComponents 60
maxInterStageShaderVariables 16
maxColorAttachments 8
maxColorAttachmentBytesPerSample 32
maxComputeWorkgroupStorageSize 16384 字节
maxComputeInvocationsPerWorkgroup 256
maxComputeWorkgroupSizeX 256
maxComputeWorkgroupSizeY 256
maxComputeWorkgroupSizeZ 64
maxComputeWorkgroupsPerDimension 65535

示例

在下面的代码中,我们查询 GPUAdapter.limitsmaxBindGroups 值,以查看它是否等于或大于 6。我们的理论示例应用程序理想情况下需要 6 个绑定组,因此如果返回的值 >= 6,我们将在 requiredLimits 对象中添加 6 的最大限制。然后,我们使用 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,
  });

  // ...
}

规范

规范
WebGPU
# gpusupportedlimits

浏览器兼容性

BCD 表仅在启用了 JavaScript 的浏览器中加载。

另请参阅