es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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(10,10), vec4(10,5,10,20));
Olvidé la u en 10u,5u, etc…

Gracias.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para utilizar la función textureStore() con texture_storage_2d<rgba8uint,write> en lugar de texture_storage_2d<rgba8unorm,write>, debes realizar dos cambios en tu código:

    1. Reemplaza rgba8unorm por rgba8uint en la declaración de output:
      [[group(0), binding(0)]] var output : texture_storage_2d<rgba8uint,write>;
      
    2. Cambia el tipo del cuarto argumento en la función textureStore() de vec4<f32> a vec4<u32>, indicando que estás almacenando enteros sin signo en la textura:
      textureStore(output, vec2<i32>(10,10), vec4<u32>(10u,5u,100u,200u));
      

    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 textura texture_storage_2d<rgba8uint,write>.</rgba8uint,write></rgba8uint,write></rgba8unorm,write></rgba8uint,write>

Comments are closed.