Wgsl Naga - 如何将内置 textureStore() 与 texture_storage_2d<rgba8uint,write> 一起使用?

Wgsl Naga - How can I use builtin textureStore() with texture_storage_2d<rgba8uint,write>?

Naga 验证此代码段:

    [[group(0), binding(0)]] var output :
    texture_storage_2d<rgba8unorm,write>;
    
    [[stage(compute), workgroup_size(1)]]
    fn main() {
        textureStore(output, vec2<i32>(10,10), vec4<f32>(10.,5.,100.,200.));
    }

rgba8unorm 替换为 rgba8uint 会使 naga 抛出错误。

Entry point main at Compute is invalid:     The value [9] can not be stored
    Generating SPIR-V output requires validation to succeed, and it failed in a previous step

我在 textureStore: i32,u32,f32 中尝试了标量与 vec4<> 的不同组合,但没有成功。

问题是:如何使用内置函数 textureStore() texture_storage_2d 而不是 texture_storage_2d ?

编辑:根据 Dan 的回答,我尝试了以下操作

[[group(0), binding(0)]] var output :
    texture_storage_2d<rgba8uint,write>;
    
    [[stage(compute), workgroup_size(1)]]
    fn main() {
        textureStore(output, vec2<i32>(10,10), vec4<u32>(10u,5u,10u,20u));
    } 

有效!

我尝试使用 textureStore(output, vec2(10,10), vec4(10,5,10,20)); 但失败了 我忘记了10u,5u等的u...

谢谢。

要存储在 rgba8uint 中,您需要使用类型 vec4<u32>。每个纹理存储的对应类型见here。如果这不起作用,您可能会遇到其他问题。 (您是否将 10. 等传递给 vec4<u32>?应该是 10u。Wgsl 对类型非常严格。)