Files
UnrealEngine/Engine/Shaders/Private/RayTracing/MipTreeCommon.ush
2025-05-18 13:04:45 +08:00

34 lines
1.0 KiB
HLSL

// Copyright Epic Games, Inc. All Rights Reserved.
/*=============================================================================================
MipTreeCommon.ush: Common utilities for MipTree-based sampling
===============================================================================================*/
#include "../MortonCode.ush"
#define USE_MORTON_CODE 1
uint2 DimensionsAtLevel(uint2 Dimensions, uint Level)
{
return uint2(Dimensions.x >> Level, Dimensions.y >> Level);
}
uint BufferOffsetAtPixel(uint2 Pixel, uint Level, uint2 Dimensions)
{
uint Offset = 0;
for (uint LevelIndex = 0; LevelIndex < Level; ++LevelIndex)
{
uint2 MipLevelDimensions = DimensionsAtLevel(Dimensions, LevelIndex);
Offset += MipLevelDimensions.x * MipLevelDimensions.y;
}
uint2 MipLevelDimensions = DimensionsAtLevel(Dimensions, Level);
#if USE_MORTON_CODE
// NOTE: Morton encoding requires power-of-two dimensionality..
Offset += MortonEncode(Pixel);
#else
Offset += Pixel.y * MipLevelDimensions.x + Pixel.x;
#endif
return Offset;
}