У меня есть фрагмент кода HLSL, который выглядит следующим образом:
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;
}
Результаты, которые я получаю, согласуются с тем, что цикл выполняется только один раз. Я проверил шейдер в PIX, и все стало еще более странным: желтая стрелка, указывающая позицию в коде, попадает в цикл, проходит через него один раз и возвращается к началу, в этот момент желтая стрелка больше никогда не перемещается, но курсор перемещается по коду и возвращает результат (ошибка в PIX, или я просто неправильно ее использую?)
У меня есть подозрение, что это может быть связано с чтением текстур, перемещаемым компилятором вне цикла, однако я подумал, что этого не произошло с tex2Dlod, так как я устанавливаю LOD вручную: /
Итак:
1) В чем проблема?
2) Какие-либо предлагаемые решения?