#include "Include/PlatformDefines.hlsl" #pragma kernel CSInstancedCameraCalculationKernel #pragma kernel CSInstancedCameraCalculationKernelCrossFade RWStructuredBuffer gpuiInstanceLODData; // lodNo - shadowLodNo - cfLodNo - cfLevel #include "Include/CullingVR.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); IsCulledVR(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); IsCulledVR(instanceMatrix, dist, culled); CalculateLODNo(size, dist, culled, lodData.x, lodData.y); #if !SHADER_API_GLCORE && !SHADER_API_GLES3 && !SHADER_API_VULKAN 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); #endif gpuiInstanceLODData[id.x] = lodData; }