1

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.));
    }

rgba8uint替换rgba8unorm会使 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<rgba8uint,write>而不是texture_storage_2d<rgba8unorm,write>

编辑:按照丹的回答我尝试了以下

[[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)); 失败了 我忘记了10 u ,5 u等中的u ...

谢谢。

4

1 回答 1

0

要存储在 a 中rgba8uint,您需要使用 type vec4<u32>。有关每个纹理存储的相应类型,请参见此处。如果这不起作用,您可能会遇到不同的问题。(您是否将10.etc 传递给vec4<u32>?应该是10u。Wgsl 对类型非常严格。)

于 2021-12-17T20:31:20.227 回答