Files
Seele/res/shaders/VisibilityCompute.slang
T
2024-06-07 18:43:10 +02:00

23 lines
717 B
Plaintext

import Common;
import Scene;
struct VisibilityCullingData
{
Texture2D<uint> visibilityTexture;
globallycoherent RWStructuredBuffer<MeshletCullingInfo> cullingInfos;
};
ParameterBlock<VisibilityCullingData> pVisibilityParams;
[numthreads(BLOCK_SIZE, BLOCK_SIZE, 1)]
[shader("compute")]
void computeMain(
uint3 dispatchThreadID: SV_DispatchThreadID,
){
int3 texCoords = int3(dispatchThreadID.xy, 0);
uint encoded = pVisibilityParams.visibilityTexture.Load(texCoords).r;
uint2 decoded = decodePrimitive(encoded);
uint arrIdx = decoded.x / 32;
uint bit = decoded.x % 32;
uint32_t orig;
InterlockedOr(pVisibilityParams.cullingInfos[decoded.y].visible[arrIdx], (1 << bit), orig);
}