Files
UnrealEngine/Engine/Shaders/Private/MegaLights/MegaLightsDebug.usf
Brandyn / Techy fcc1b09210 init
2026-04-04 15:40:51 -05:00

137 lines
3.4 KiB
HLSL

// Copyright Epic Games, Inc. All Rights Reserved.
#define DEBUG_MODE 1
#include "../Common.ush"
#include "/Engine/Shared/MegaLightsDefinitions.h"
#include "MegaLights.ush"
StructuredBuffer<uint> DownsampledTileAllocator;
StructuredBuffer<uint> DownsampledTileData;
uint DownsampledTileDataStride;
StructuredBuffer<uint> TileAllocator;
StructuredBuffer<uint> TileData;
uint TileDataStride;
uint DebugTileClassificationMode;
uint GetNumTiles(uint TileType)
{
return (DebugTileClassificationMode % 2 == 1) ? TileAllocator[TileType] : DownsampledTileAllocator[TileType];
}
uint2 GetUnpackedTileData(uint TileType, uint TileIndex)
{
if (DebugTileClassificationMode % 2 == 1)
{
return UnpackTile(TileData[TileIndex + TileType * TileDataStride]);
}
else
{
return UnpackTile(DownsampledTileData[TileIndex + TileType * DownsampledTileDataStride]);
}
}
float4 GetTileTypeColor(uint TileType)
{
float4 Color = ColorMagenta;
switch (TileType)
{
case TILE_MODE_SIMPLE_SHADING:
case TILE_MODE_SIMPLE_SHADING_RECT:
case TILE_MODE_SIMPLE_SHADING_RECT_TEXTURED:
Color = ColorLightGreen;
break;
case TILE_MODE_SINGLE_SHADING:
case TILE_MODE_SINGLE_SHADING_RECT:
case TILE_MODE_SINGLE_SHADING_RECT_TEXTURED:
Color = ColorYellow;
break;
case TILE_MODE_COMPLEX_SHADING:
case TILE_MODE_COMPLEX_SHADING_RECT:
case TILE_MODE_COMPLEX_SHADING_RECT_TEXTURED:
Color = ColorLightRed;
break;
case TILE_MODE_COMPLEX_SPECIAL_SHADING:
case TILE_MODE_COMPLEX_SPECIAL_SHADING_RECT:
case TILE_MODE_COMPLEX_SPECIAL_SHADING_RECT_TEXTURED:
Color = ColorPurple;
break;
case TILE_MODE_EMPTY:
Color = ColorSilver;
break;
};
if (IsRectLightTileType(TileType))
{
Color = lerp(Color, ColorRed, 0.2f);
}
if (IsTexturedLightTileType(TileType))
{
Color = lerp(Color, ColorRed, 0.2f);
}
return float4(Color.xyz, 0.75f);
}
/**
* Run one thread per tile and output debug tile classification visualization
*/
[numthreads(THREADGROUP_SIZE, 1, 1)]
void MegaLightsDebugCS(
uint3 GroupId : SV_GroupID,
uint3 GroupThreadId : SV_GroupThreadID,
uint3 DispatchThreadId : SV_DispatchThreadID)
{
FShaderPrintContext DebugContext = InitShaderPrintContext(true, float2(0.05, 0.05));
if (all(DispatchThreadId == 0))
{
Print(DebugContext, TEXT("TileType | Num "), FontSilver);
for (uint TileType = 0; TileType < MAX_USED_TILE_MODE; ++TileType)
{
FFontColor Color = InitFontColor(GetTileTypeColor(TileType).xyz);
Newline(DebugContext);
PrintTileTypeString(DebugContext, TileType, Color);
Print(DebugContext, TEXT(": "));
Print(DebugContext, GetNumTiles(TileType), FontValue);
}
}
uint TileIndex = DispatchThreadId.x;
for (uint TileType = 0; TileType < MAX_USED_TILE_MODE; ++TileType)
{
if (TileIndex < GetNumTiles(TileType) && TileType != TILE_MODE_EMPTY)
{
uint2 TileCoord = GetUnpackedTileData(TileType, TileIndex);
float4 Color = GetTileTypeColor(TileType);
float2 TileSizeOnScreen = TILE_SIZE;
if (DebugTileClassificationMode % 2 == 0)
{
TileSizeOnScreen *= GetDownsampleFactor();
}
AddFilledQuadSS(
DebugContext,
((TileCoord + 0) * TileSizeOnScreen) / View.ViewResolutionFraction,
((TileCoord + 1) * TileSizeOnScreen) / View.ViewResolutionFraction,
Color);
AddQuadSS(
DebugContext,
((TileCoord + 0) * TileSizeOnScreen) / View.ViewResolutionFraction,
((TileCoord + 1) * TileSizeOnScreen) / View.ViewResolutionFraction,
float4(1, 1, 1, 1));
}
}
}