GPUSupportedLimits

可用性有限

此特性不是基線特性,因為它在一些最廣泛使用的瀏覽器中不起作用。

安全上下文: 此功能僅在安全上下文(HTTPS)中可用,且支援此功能的瀏覽器數量有限。

注意:此功能在 Web Workers 中可用。

GPUSupportedLimits 介面是 WebGPU API 的一部分,用於描述 GPUAdapter 所支援的限制。

當前介面卡的 GPUSupportedLimits 物件可透過 GPUAdapter.limits 屬性訪問。

您應該注意,瀏覽器不太可能報告每個 GPU 的確切限制,而是可能會報告不同限制的不同分層值,以減少可用於驅動程式指紋識別的唯一資訊。例如,某個限制的分層值可能是 2048、8192 和 32768。如果您的 GPU 的實際限制是 16384,瀏覽器仍會報告 8192。

鑑於不同瀏覽器對此的處理方式不同,並且分層值可能會隨時間變化,因此很難準確說明預期的限制值 — 建議進行徹底測試。

例項屬性

以下限制由 GPUSupportedLimits 物件中的屬性表示。有關限制的詳細說明,請參閱規範中的 Limits 部分。

限制名稱 預設值
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 已棄用 非標準 (請使用 maxInterStageShaderVariables,有關更多資訊,請參閱 棄用通知) 60
maxInterStageShaderVariables 16
maxColorAttachments 8
maxColorAttachmentBytesPerSample 32
maxComputeWorkgroupStorageSize 16384 位元組
maxComputeInvocationsPerWorkgroup 256
maxComputeWorkgroupSizeX 256
maxComputeWorkgroupSizeY 256
maxComputeWorkgroupSizeZ 64
maxComputeWorkgroupsPerDimension 65535

示例

在以下程式碼中,我們查詢 GPUAdapter.limitsmaxBindGroups 值,以檢視它是否等於或大於 6。我們理論上的示例應用程式理想情況下需要 6 個繫結組,因此如果返回值為 >= 6,我們將 6 新增到 requiredLimits 物件作為最大限制。然後,我們使用 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

瀏覽器相容性

另見