Pregunta

Tengo un pedazo de código HLSL que se parece a esto:

float4 GetIndirection(float2 TexCoord)
{
    float4 indirection = tex2D(IndirectionSampler, TexCoord);

    for (half mip = indirection.b * 255; mip > 1 && indirection.a < 128; mip--)
    {
        indirection = tex2Dlod(IndirectionSampler, float4(TexCoord, 0, mip));
    }
    return indirection;
}

Los resultados que estoy recibiendo son consistentes con ese bucle solamente la ejecución de una vez. Comprobé el shader de PIX y las cosas se pusieron aún más raro, la flecha amarilla posición en el código que indica llega al lazo, pasa a través de él una vez, y salta de nuevo al comienzo, en ese momento la flecha amarilla nunca se mueve de nuevo, pero el cursor mueve a través del código y devuelve un resultado (un error en PIX, o solo estoy usando desde hace mal?)

Tengo la sospecha de que esto puede ser un problema que ver con la textura lee conseguir trasladó fuera del bucle por el compilador, sin embargo pensé que no sucedió con tex2Dlod ya que estoy estableciendo el límite de detección manualmente: /

Así que:

1) ¿Cuál es el problema?

2) Cualquier sugirieron soluciones?

¿Fue útil?

Solución

El problema se resolvió, fue un simple error de codificación, que necesitaba para aumentar el nivel de MIP en cada iteración, no disminuirlo.

float4 GetIndirection(float2 TexCoord)
{
    float4 indirection = tex2D(IndirectionSampler, TexCoord);

    for (half mip = indirection.b * 255; mip > 1 && indirection.a < 128; mip++)
    {
        indirection = tex2Dlod(IndirectionSampler, float4(TexCoord, 0, mip));
    }
    return indirection;
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top