2
我有一段HLSL代码看起来像这样:问题的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)任何建议的解决方案?
您是针对SM3还是SM4进行编译?如果这是DirectX 10,则编译着色器时可能需要设置D3D10_SHADER_DEBUG和D3D10_SHADER_SKIP_OPTIMIZATION标志,因为这可能有助于您追踪PIX中的问题。 – Tchami 2009-09-01 00:49:20
使用DirectX9编译为SM3,这是我可以使用的最高版本,因为这是XNA – Martin 2009-09-01 08:46:29
好的,自从您将它标记为DirectX和XNA以来,这并不是很明显;) – Tchami 2009-09-01 11:11:51