2012-09-02 14 views
8

Al compilar lo siguiente para bucle en mi shader HLSL en Shader Model 2.0, obtengo el error X3511.HLSL para bucle con Shader Modelo 2.0: Error X3511 incapaz de desenrollar el bucle

for (int x = -5; x <= 5; x++) 
{ 
    for (int y = -5; y <= 5; y++) 
    { 
      ... 

El error dice lo siguiente: no se puede desenrollar de bucle, bucle no aparece para terminar de una manera oportuna (5 iteraciones), utilice el [unroll (n)] atribuir a la fuerza un número exacto superior.

Conozco este mensaje de error, pero no estoy usando una variable aquí para la parte condicional de la declaración for - es una condición hardcoded x < = 5. ¿Que esta mal aquí?

¡Gracias de antemano!

+0

Compila cuando estoy quitando el segundo bucle. Entonces: ¿No hay bucles anidados en HLSL?!? – barnacleboy

+0

No estoy seguro de si funciona con bucles anidados, pero ¿intentó subir el número de iteraciones con el atributo? Como supongo, quizás '[unroll (11)]' en ambos bucles funcionaría? –

+0

Desafortunadamente, no puedo usar el desenrollado al compilar en Shader Model 2.0. Estoy trabajando en una aplicación de procesamiento de imágenes, por lo que quiero asegurarme de que la aplicación pueda al menos ejecutarse en Windows XP. – barnacleboy

Respuesta

8

Prueba esto:

[unroll(121)] for (int i=0; i<121; i++) 
{ 
    int x = i/(int)11 - 5; 
    int y = i % (int)11 - 5; 
} 
+0

¡Eso es todo! ¡Gracias! :) – barnacleboy