开发者问题收集

无法读取 null 的属性“requestDevice”

2020-12-19
4645

我正在尝试在 WebGpu 中渲染 Web GPU 着色器对象

并且它返回此错误

未捕获(在承诺中)TypeError:无法读取 cube.html:28 的 null 属性“requestDevice”

这是我对 requestDevice 的代码

(async () => {
 

    const [adapter, glslang] = await Promise.all([
        navigator.gpu.requestAdapter(),
        import("https://unpkg.com/@webgpu/[email protected]/web/glslang.js").then(m => m.default())
    ]);

    const device = await adapter.requestDevice();
    
    const canvas = document.getElementById("webgpu-canvas");
    canvas.width = window.innerWidth;
    canvas.height = window.innerHeight;

});

有什么想法可以修复此错误?

2个回答

尝试了很多方法后,我通过重新启用 about:flags 中的 --enable-unsafe-webgpu 标志解决了这个问题!

之前刷新页面几次都可以,但后来就停止了……现在好像没问题了!

jeyko
2021-02-07

发生这种情况的原因如下。请按特定顺序查看这些原因:

  1. 当用户在 chrome://settings/system 中关闭“在可用时使用图形加速”时,WebGPU 将被禁用。请检查此设置是否已关闭,然后重新打开

  2. 此平台尚不支持 WebGPU。您可以启用 chrome://flags/#enable-unsafe-webgpu 标志并重新启动 Chrome。对于 Linux 实验性支持,您还需要启用 chrome://flags/#enable-vulkan 标志。查看 Headless Chrome 中的 WebGPU 支持 以了解更多信息。

  3. GPU 硬件已被特别列入黑名单。如果您在 chrome://gpu 中看到“已通过阻止列表或命令行禁用 WebGPU”,则可以通过启用 chrome://flags/#enable-unsafe-webgpu 标志并重新启动 Chrome 来禁用 WebGPU 适配器阻止列表。

  4. 对于 requestAdapter() 中传递的选项,没有匹配的 GPU 适配器。 尝试使用不同的选项调用 requestAdapter()

  5. WebGPU 需要 GPU(硬件或软件模拟)。您可以通过访问 chrome://gpu 检查 Chrome 是否检测到 GPU。

有关更多提示,请参阅 https://developer.chrome.com/docs/web-platform/webgpu/troubleshooting-tips

François Beaufort
2024-02-07