Draw List works now

This commit is contained in:
Dynamitos
2024-06-07 18:43:10 +02:00
parent bc0d05dbb0
commit 2644b127fa
5 changed files with 38 additions and 33 deletions
+1 -1
View File
@@ -38,7 +38,7 @@ void meshMain(
uint local_idx1 = pScene.primitiveIndices[m.primitiveOffset + (p * 3) + 1];
uint local_idx2 = pScene.primitiveIndices[m.primitiveOffset + (p * 3) + 2];
indices[p] = uint3(local_idx0, local_idx1, local_idx2);
prim[p].cull = false;//!cull.triangleCulled(p);
prim[p].cull = !cull.triangleCulled(p);
#ifdef VISIBILITY
prim[p].prim = encodePrimitive(p, meshletId);
#endif
+1 -1
View File
@@ -26,7 +26,7 @@ void taskMain(
uint cull = p.cullingOffset + i;
MeshletDescription meshlet = pScene.meshletInfos[m];
MeshletCullingInfo culling = pScene.cullingInfos[cull];
//if(!culling.anyVisible())
if(false)//if(!culling.anyVisible())
{
uint index;
InterlockedAdd(head, 1, index);
+9 -15
View File
@@ -4,26 +4,20 @@ import Scene;
struct VisibilityCullingData
{
Texture2D<uint> visibilityTexture;
RWStructuredBuffer<MeshletCullingInfo> cullingInfos;
globallycoherent RWStructuredBuffer<MeshletCullingInfo> cullingInfos;
};
ParameterBlock<VisibilityCullingData> pVisibilityParams;
[numthreads(BLOCK_SIZE, 1, 1)]
[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;
pVisibilityParams.cullingInfos[dispatchThreadID.x].visible[0] = 0x0;
pVisibilityParams.cullingInfos[dispatchThreadID.x].visible[1] = 0x0;
pVisibilityParams.cullingInfos[dispatchThreadID.x].visible[2] = 0x0;
pVisibilityParams.cullingInfos[dispatchThreadID.x].visible[3] = 0x0;
pVisibilityParams.cullingInfos[dispatchThreadID.x].visible[4] = 0x0;
pVisibilityParams.cullingInfos[dispatchThreadID.x].visible[5] = 0x0;
pVisibilityParams.cullingInfos[dispatchThreadID.x].visible[6] = 0x0;
pVisibilityParams.cullingInfos[dispatchThreadID.x].visible[7] = 0x0;
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);
}