#include "Include/PlatformDefines.hlsl" #pragma kernel CSInstancedRenderingVisibilityKernelLOD0 #pragma kernel CSInstancedRenderingVisibilityKernelLOD1 #pragma kernel CSInstancedRenderingVisibilityKernelLOD2 RWStructuredBuffer gpuiInstanceLODData; // lodNo - shadowLodNo - cfLodNo - cfLevel AppendStructuredBuffer gpuiTransformationMatrix_LOD0; AppendStructuredBuffer gpuiTransformationMatrix_LOD1; AppendStructuredBuffer gpuiTransformationMatrix_LOD2; uniform uint bufferSize; uniform uint lodShift; uniform uint lodAppendIndex; [numthreads(GPUI_THREADS, 1, 1)] void CSInstancedRenderingVisibilityKernelLOD0(uint3 id : SV_DispatchThreadID) { if (id.x >= bufferSize) return; uint lodNo = gpuiInstanceLODData[id.x][lodAppendIndex]; if (lodNo == lodShift) gpuiTransformationMatrix_LOD0.Append(id.x); } [numthreads(GPUI_THREADS, 1, 1)] void CSInstancedRenderingVisibilityKernelLOD1(uint3 id : SV_DispatchThreadID) { if (id.x >= bufferSize) return; uint lodNo = gpuiInstanceLODData[id.x][lodAppendIndex]; if (lodNo == lodShift) gpuiTransformationMatrix_LOD0.Append(id.x); else if (lodNo == lodShift + 1) gpuiTransformationMatrix_LOD1.Append(id.x); } [numthreads(GPUI_THREADS, 1, 1)] void CSInstancedRenderingVisibilityKernelLOD2(uint3 id : SV_DispatchThreadID) { if (id.x >= bufferSize) return; uint lodNo = gpuiInstanceLODData[id.x][lodAppendIndex]; if (lodNo == lodShift) gpuiTransformationMatrix_LOD0.Append(id.x); else if (lodNo == lodShift + 1) gpuiTransformationMatrix_LOD1.Append(id.x); else if (lodNo == lodShift + 2) gpuiTransformationMatrix_LOD2.Append(id.x); }