Files
ZHGD_Web/Assets/Art/Art Plugins/GPUInstancer/Resources/Compute/CSInstancedRenderingVisibilityKernel.compute
2025-07-13 23:16:20 +08:00

57 lines
1.7 KiB
Plaintext

#include "Include/PlatformDefines.hlsl"
#pragma kernel CSInstancedRenderingVisibilityKernelLOD0
#pragma kernel CSInstancedRenderingVisibilityKernelLOD1
#pragma kernel CSInstancedRenderingVisibilityKernelLOD2
RWStructuredBuffer<uint4> gpuiInstanceLODData; // lodNo - shadowLodNo - cfLodNo - cfLevel
AppendStructuredBuffer<uint> gpuiTransformationMatrix_LOD0;
AppendStructuredBuffer<uint> gpuiTransformationMatrix_LOD1;
AppendStructuredBuffer<uint> 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);
}