Skip to content

CI: difftests on windows failing due to wgpu DXC errors #468

@Firestar99

Description

@Firestar99

CI on main is failing on windows due to DXC compiler errors stemming from within wgpu. Even though wgpu should abstract that sort of stuff. I suspect and env change, github updating the runners or something.

Example failure:

wgpu error: Validation Error

Caused by:
  In Device::create_compute_pipeline, label = 'Compute Pipeline'
    Internal error: DXC compile error: Compute Shader:138:14: error: expected identifier
            [8][8] _value3[2][8][8] = _e378;
             ^
Compute Shader:138:17: error: expected identifier
            [8][8] _value3[2][8][8] = _e378;
                ^
Compute Shader:138:20: error: use of undeclared identifier '_value3'
            [8][8] _value3[2][8][8] = _e378;
...
  • Have not found any issues on wgpu's repo that look like this
  • Maybe a simple cargo update does it? no change
  • we're on wgpu v26, there's already wgpu v27 which may fix it?
  • can't repo it locally, but I'm not on 25H2 yet

Suspicion 1: wgpu is using DX12

  • Why is it compiling for DX12 anyway? Wouldn't we want to run on Vulkan software renderers anyway?
    • Vulkan drivers may be missing?
  • workgroup_memory-ash is failing as well with:
thread 'main' panicked at arch\workgroup_memory\workgroup_memory-ash\src\main.rs:49:10:
called `Result::unwrap()` on an `Err` value: Failed to create Vulkan instance

Caused by:
    Unable to find a Vulkan driver
  • I suspect that because wgpu can't see the Vulkan driver, it is now picking some Windows Software DX12 driver. And thus transpiling the spirv to hlsl and compiling it with DXC, which it didn't do previously. So the DXC error may have been there since who knows how long, but switching from Vulkan to DX12 caused it to pop up.

TLDR

  • wgpu started using the DX12 backend instead of the Vulkan one
    • vulkan drivers are still present, no idea why that happened
  • using DX12 means naga transpiles spirv to hlsl, for the DXC compiler
    • the transpiled hlsl is broken, always has been, but we never tested DX12 so noone noticed
    • this is already fixed in naga 27, we're still on wgpu 26
    • Broken code snippet, look at the types:
uint _e378[2][8][8] = phi_841_;
{
    [8][8] _value3[2][8][8] = _e378;
    {
        [8] _value4[8][8] = _value3[0];
        {
            uint _value5[8] = _value4[0];

Resolution:

  • we can force wgpu to use Vulkan by disabling the feature "dx12"
wgpu = { version = "26.0.1", default-features = false, features = ["std", "parking_lot", "spirv", "wgsl", "vulkan", "vulkan-portability"] }
  • you can repo the error by forcing "dx12" and disabling "vulkan":
wgpu = { version = "26.0.1", default-features = false, features = ["std", "parking_lot", "spirv", "wgsl", "dx12", "static-dxc"] }
ash = { version = "0.38" }

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions