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