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 |
浏览器兼容性
加载中…