2013-09-23 3 views
0

У меня есть следующий вычислительный шейдерный код для вычисления глубины резкости. Однако очень необычно, цикл выполняется только один раз, даже если g_rayCount равно 10. Пожалуйста, посмотрите в основной функции raycastercs, где лежит цикл for.DirectX 11 Compute Shader 5 loop

//-------------------------------------------------------------------------------------- 
// Compute Shader 
//------------------------------------------------------------------------------------- 

SamplerState SSLinear 
{ 
    Filter = Min_Mag_Linear_Mip_Point; 
    AddressU = Border; 
    AddressV = Border; 
    AddressW = Border; 
}; 

float3 CalculateDoF(uint seedIndex, uint2 fragPos) 
{ 
    ; 
} 

[numthreads(RAYCASTER_THREAD_BLOCK_SIZE, RAYCASTER_THREAD_BLOCK_SIZE, 1)] 
void RaycasterCS(in uint3 threadID: SV_GroupThreadID, in uint3 groupID: SV_GroupID, in uint3 dispatchThreadID :SV_DispatchThreadID) 
{ 
    uint2 fragPos = groupID.xy * RAYCASTER_THREAD_BLOCK_SIZE + threadID.xy; 
    float4 dstColor = g_texFinal[fragPos]; 
    uint seedIndex = dispatchThreadID.x * dispatchThreadID.y; 


    float3 final = float3(0, 0, 0); 
    float color = 0; 

    [loop][allow_uav_condition] 
    for (int i = 0; i < g_rayCount; ++i); 
    { 
     float3 dof = CalculateDoF(seedIndex, fragPos); 
     final += dof; 
    } 

    final *= 1.0f/((float) g_rayCount); 
    g_texFinalRW[fragPos] = float4(final, 1); 
} 


//-------------------------------------------------------------------------------------- 


technique10 Raycaster 
{ 
    pass RaycastDefault 
    { 
     SetVertexShader(NULL); 
     SetGeometryShader(NULL); 
     SetPixelShader(NULL); 
     SetComputeShader(CompileShader(cs_5_0, RaycasterCS())); 
    } 
} 

ответ

3

Удалите точку с запятой в конце для постановки

for (int i = 0; i < g_rayCount; ++i) // removed semicolon 
{ 
    float3 dof = CalculateDoF(seedIndex, fragPos); 
    final += dof; 
} 

Как я думаю, вы знаете, точка с запятой просто работает пустой for цикл, то код в фигурных скобках было после этого выполняется только один раз ,

+0

Я слепой. Спасибо за быстрый гепок. Я просто этого не видел. – Alin

+0

Я проголосовал, потому что это заставило меня смеяться –