#include "Include/PlatformDefines.hlsl" #pragma kernel CSInstancedCameraCalculationKernel #pragma kernel CSInstancedCameraCalculationKernelCrossFade RWStructuredBuffer gpuiInstanceLODData; // lodNo - shadowLodNo - cfLodNo - cfLevel #include "Include/Culling.hlsl" #include "Include/Camera.hlsl" [numthreads(GPUI_THREADS, 1, 1)] void CSInstancedCameraCalculationKernel(uint3 id : SV_DispatchThreadID) { if (id.x >= bufferSize) return; float dist = 0; bool culled = false; float size = 0; uint4 lodData = uint4(9, 9, 9, 0); float4x4 instanceMatrix = gpuiInstanceData[id.x]; CalculateDistanceAndSize(instanceMatrix, dist, size); IsCulled(instanceMatrix, dist, culled); CalculateLODNo(size, dist, culled, lodData.x, lodData.y); gpuiInstanceLODData[id.x] = lodData; } [numthreads(GPUI_THREADS, 1, 1)] void CSInstancedCameraCalculationKernelCrossFade(uint3 id : SV_DispatchThreadID) { if (id.x >= bufferSize) return; float dist = 0; bool culled = false; float size = 0; uint4 lodData = uint4(9, 9, 9, 0); float4x4 instanceMatrix = gpuiInstanceData[id.x]; CalculateDistanceAndSize(instanceMatrix, dist, size); IsCulled(instanceMatrix, dist, culled); CalculateLODNo(size, dist, culled, lodData.x, lodData.y); if (animateCrossFade) { uint4 previousLodData = gpuiInstanceLODData[id.x]; lodData.w = previousLodData.w; lodData.z = previousLodData.z; CalculateCFLODNoAnimate(previousLodData.x, lodData.x, lodData.z, lodData.w); } else CalculateCFLODNo(size, lodData.x, lodData.z, lodData.w); gpuiInstanceLODData[id.x] = lodData; }