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

40 lines
1.3 KiB
HLSL

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "/Engine/Shared/MaterialCacheDefinitions.h"
float4 GetMaterialCacheUnwrapClipPosition(float2 TexCoord, float4 UnwrapMinAndInvSize, float2 PageAdvanceAndInvCount = float2(0, 1))
{
// Remap coordinate
TexCoord = (TexCoord - UnwrapMinAndInvSize.xy) * UnwrapMinAndInvSize.zw;
// Viewport remapping
// Nanite multi-view rendering doesn't normalize the NDC space to the view rect, it remains as is
TexCoord.x = TexCoord.x * PageAdvanceAndInvCount.y + PageAdvanceAndInvCount.x;
// To NDC
return float4(
TexCoord.x * 2.0f - 1.0f,
1.0f - TexCoord.y * 2.0f,
0.0f,
1.0f
);
}
FMaterialCacheBinData GetMaterialCacheShadingData(uint Index)
{
// Workaround for static uniform buffer typing around structured buffers
const uint Stride = sizeof(FMaterialCacheBinData) / sizeof(uint4);
uint4 DW0 = MaterialCachePass.ShadingBinData[Stride * Index + 0];
uint4 DW4 = MaterialCachePass.ShadingBinData[Stride * Index + 1];
uint4 DW8 = MaterialCachePass.ShadingBinData[Stride * Index + 2];
FMaterialCacheBinData Data = (FMaterialCacheBinData)0;
Data.ABufferPhysicalPosition = DW0.xyz;
Data.PrimitiveData = DW0.w;
Data.UVMinAndThreadAdvance = asfloat(DW4);
Data.UVMinAndInvSize = asfloat(DW8);
return Data;
}