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

46 lines
1.4 KiB
Plaintext

#include "Include/PlatformDefines.hlsl"
#pragma kernel CSInstancedRenderingVisibilityKernelLOD0
#pragma kernel CSInstancedRenderingVisibilityKernelLOD1
#pragma kernel CSInstancedRenderingVisibilityKernelLOD2
RWStructuredBuffer<float4x4> gpuiInstanceData;
RWStructuredBuffer<uint4> gpuiInstanceLODData; // lodNo - shadowLodNo - cfLodNo - cfLevel
AppendStructuredBuffer<float4x4> gpuiTransformationMatrix_LOD0;
AppendStructuredBuffer<float4x4> gpuiTransformationMatrix_LOD1;
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(gpuiInstanceData[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(gpuiInstanceData[id.x]);
else if (lodNo == lodShift + 1)
gpuiTransformationMatrix_LOD1.Append(gpuiInstanceData[id.x]);
}
[numthreads(GPUI_THREADS, 1, 1)]
void CSInstancedRenderingVisibilityKernelLOD2(uint3 id : SV_DispatchThreadID)
{
}