Pergunta

Eu sei que isso não é tecnicamente suportado (e até onde eu sei, é um comportamento indefinido), mas é realmente uma coisa fatalmente horrível fazer uma amostra de uma textura na qual também está sendo gravada?

Eu pergunto porque preciso ler de uma textura de profundidade na qual também preciso escrever, se não puder fazer isso significa que terei que copiar a textura de profundidade e se não for grande coisa, eu não' não vê o mal em simplesmente copiá-lo?

Obrigado por qualquer ajuda!

Foi útil?

Solução

Sim, é fatal e desencadeia um comportamento indefinido.Basta fazer uma cópia e ler a cópia.

A explicação é simples.Como os fragmentos são processados ​​em paralelo em uma ordem não especificada, você pode estar lendo texels já escritos ou texels de valor original e não há como saber o que está lendo.Fazer uma cópia e lê-la garante que você lerá os valores corretos.

Outras dicas

Matias e Goz cobriram os bits mais importantes. Deixe -me adicionar alguns fatos interessantes:

  • O tempo de execução Direct3D desbloqueia ativamente as texturas quando você vincula o recurso subjacente como um alvo de renderização (para que você não possa criar o ciclo lá).
  • Os UAVs no Direct3D 11 realmente permitem operações de leitura-modificação-gravação em um subconjunto dos formatos (aqueles que não requerem uma conversão de tipo). Eles não garantem nenhuma ordem de operação, no entanto. É isso que está sendo usado por vários algoritmos que fazem transparência independente da ordem, principalmente (onde a reordenação é feita manualmente).
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top