import Common; import Scene; struct VisibilityCullingData { Texture2D visibilityTexture; globallycoherent RWStructuredBuffer cullingInfos; }; ParameterBlock 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); }