GPUSupportedLimits
注意:此功能在 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.limits 的 maxBindGroups 值,以檢視它是否等於或大於 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 |
瀏覽器相容性
載入中…