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 对类型非常严格。)
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
编辑:根据 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 对类型非常严格。)