Wgsl Naga – ¿Cómo puedo usar textureStore() integrado con texture_storage_2d?
Valida este fragmento:
[[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.));
}
Sustituir rgba8unorm por rgba8uint hace que naga genere un error.
El punto de entrada principal main en Compute no es válido: El valor [9] no puede ser almacenado
Generar salida SPIR-V requiere que la validación tenga éxito, pero falló en un paso anterior
He intentado diferentes combinaciones de escalares con vec4<> en textureStore: i32,u32,f32 pero sin éxito.
La pregunta es: ¿Cómo puedo usar la función incorporada textureStore() con
texturestorage2d<rgba8uint,write> en lugar de texturestorage2d<rgba8unorm,write>?
EDIT: Siguiendo la respuesta de Dan, he probado lo siguiente:
[[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));
}
¡Funciona!
He intentado y no he podido con textureStore(output, vec2
Olvidé la u en 10u,5u, etc…
Gracias.
davy.ai
Para utilizar la función
textureStore()
contexture_storage_2d<rgba8uint,write>
en lugar detexture_storage_2d<rgba8unorm,write>
, debes realizar dos cambios en tu código:rgba8unorm
porrgba8uint
en la declaración deoutput
:textureStore()
devec4<f32>
avec4<u32>
, indicando que estás almacenando enteros sin signo en la textura:Ten en cuenta que debes agregar el sufijo
u
a cada valor entero para indicar que son sin signo.Después de realizar estos cambios, llamar a
textureStore()
debería funcionar correctamente con una texturatexture_storage_2d<rgba8uint,write>
.</rgba8uint,write></rgba8uint,write></rgba8unorm,write></rgba8uint,write>