//compute screen-space position float4 position; position.x = input.TexCoord.x * 2.0f - 1.0f; position.y = -(input.TexCoord.y * 2.0f - 1.0f); position.z = depthVal; position.w = 1.0f; //transform to world space position = mul(position, InvertViewProjection); position /= position.w; float4 projection = mul(position, LightWVP); projection /= projection.w; float2 projectedTexCoords; projectedTexCoords[0] = projection.x / projection.w / 2.0f + 0.5f; projectedTexCoords[1] = -projection.y / projection.w / 2.0f + 0.5f; float4 moments = tex2D(shadowSampler, projectedTexCoords);