Files
UnrealEngineUWP/Engine/Shaders/Private/VirtualShadowMaps/VirtualShadowMapStats.ush
ola olsson b86b9f1d70 Add tracking dirty VSM pages during Nanite rendering to reduce HZB build cost
- Make VSM HZB persistent, reallocated on pool size change.
- Enable two-pass HZB by default for Nanite VSM (r.Shadow.Virtual.UseHZB == 2)

#rb andrew.lauritzen
#preflight 623b1c6088538cd45e0ce824

#ROBOMERGE-AUTHOR: ola.olsson
#ROBOMERGE-SOURCE: CL 19478487 via CL 19481406 via CL 19481553
#ROBOMERGE-BOT: UE5 (Release-Engine-Staging -> Main) (v936-19480137)

[CL 19484029 by ola olsson in ue5-main branch]
2022-03-23 15:54:41 -04:00

55 lines
1.5 KiB
Plaintext

// Copyright Epic Games, Inc. All Rights Reserved.
/*=============================================================================
VirtualShadowMapStats.ush:
=============================================================================*/
#include "../Common.ush"
#include "../WaveOpUtil.ush"
#define VSM_STAT_ALLOCATED_PAGES 0
#define VSM_STAT_STATIC_CACHED_PAGES 1
#define VSM_STAT_STATIC_INVALIDATED_BY_DYNAMIC_PAGES 2
#define VSM_STAT_DYNAMIC_CACHED_PAGES 3
#define VSM_STAT_DYNAMIC_INVALIDATED_BY_DYNAMIC_PAGES 4
#define VSM_STAT_NUM_SMS 5
#define VSM_STAT_NON_NANITE_INSTANCES_TOTAL 6
#define VSM_STAT_NON_NANITE_INSTANCES_DRAWN 7
#define VSM_STAT_NON_NANITE_INSTANCES_HZB_CULLED 8
#define VSM_STAT_NON_NANITE_INSTANCES_PAGE_MASK_CULLED 9
#define VSM_STAT_NON_NANITE_INSTANCES_EMPTY_RECT_CULLED 10
#define VSM_STAT_NON_NANITE_INSTANCES_FRUSTUM_CULLED 11
#define VSM_STAT_NUM_PAGES_TO_MERGE 12
#define VSM_STAT_NUM_PAGES_TO_CLEAR 13
#define VSM_STAT_NUM_HZB_PAGES_BUILT 14
#ifndef VSM_GENERATE_STATS
#define VSM_GENERATE_STATS 0
#endif // VSM_GENERATE_STATS
#if VSM_GENERATE_STATS
RWStructuredBuffer<uint> OutStatsBuffer;
#endif // VSM_GENERATE_STATS
void StatsBufferWrite(uint Index, uint Value)
{
#if VSM_GENERATE_STATS
OutStatsBuffer[Index] = Value;
#endif
}
void StatsBufferInterlockedAdd(uint Index, uint Value)
{
#if VSM_GENERATE_STATS
InterlockedAdd(OutStatsBuffer[Index], Value);
#endif
}
void StatsBufferInterlockedInc(uint Index)
{
#if VSM_GENERATE_STATS
WaveInterlockedAddScalar(OutStatsBuffer[Index], 1U);
#endif
}