69 lines
2.5 KiB
HLSL
69 lines
2.5 KiB
HLSL
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
#include "/Engine/Private/MaterialCache/MaterialCacheCommon.ush"
|
|
#include "/Engine/Shared/MaterialCacheDefinitions.h"
|
|
|
|
#ifndef MATERIAL_CACHE_TAG_INDEX
|
|
#define MATERIAL_CACHE_TAG_INDEX 0
|
|
#endif // MATERIAL_CACHE_TAG_INDEX
|
|
|
|
#define TOKEN_CONCAT(A, B, C) A ## B ## C
|
|
#define TOKEN_EXPAND(A, B, C) TOKEN_CONCAT(A, B, C)
|
|
#define TAG_NAME(NAME) TOKEN_EXPAND(NAME, MATERIAL_CACHE_TAG_INDEX, )
|
|
#define TAG_NAME_ANALYTIC(NAME) TOKEN_EXPAND(NAME, MATERIAL_CACHE_TAG_INDEX, _Analytic)
|
|
|
|
// Current tag in use
|
|
typedef TAG_NAME(FMaterialCacheABuffer_) FMaterialCacheABufferTag;
|
|
|
|
FMaterialCacheABufferTag GetMaterialABuffer(in FMaterialPixelParameters MaterialParameters, in FPixelMaterialInputs PixelMaterialInputs)
|
|
{
|
|
// Handle opacity
|
|
#if MATERIALBLENDING_ANY_TRANSLUCENT
|
|
bool bClipped = GetMaterialOpacity(PixelMaterialInputs) - 1e-2f < 0.0f;
|
|
#elif MATERIALBLENDING_MASKED // MATERIALBLENDING_ANY_TRANSLUCENT
|
|
bool bClipped = GetMaterialMask(PixelMaterialInputs) < 0.0f;
|
|
#else // MATERIALBLENDING_MASKED
|
|
bool bClipped = false;
|
|
#endif // MATERIALBLENDING_MASKED
|
|
|
|
// If clipped, assume black
|
|
if (bClipped)
|
|
{
|
|
// TODO: Temporarily driving weight through opacity, will be removed once the material generation is set up
|
|
//FMaterialCacheABufferTag ABuffer = (FMaterialCacheABufferTag)0;
|
|
//ABuffer.Clipped = true;
|
|
//return ABuffer;
|
|
}
|
|
|
|
#if NUM_MATERIAL_OUTPUTS_GETMATERIALCACHE > 0
|
|
#if USE_ANALYTIC_DERIVATIVES
|
|
return TAG_NAME_ANALYTIC(GetMaterialCache)(MaterialParameters);
|
|
#else // USE_ANALYTIC_DERIVATIVES
|
|
return TAG_NAME(GetMaterialCache)(MaterialParameters);
|
|
#endif // USE_ANALYTIC_DERIVATIVES
|
|
#else // NUM_MATERIAL_OUTPUTS_GETMATERIALCACHE > 0
|
|
return TAG_NAME(GetABufferFromMaterialInputs_)(PixelMaterialInputs);
|
|
#endif // NUM_MATERIAL_OUTPUTS_GETMATERIALCACHE > 0
|
|
}
|
|
|
|
FMaterialCacheABufferTag GetMaterialBottomABuffer(EMaterialCacheFlag Flags, uint3 ABufferPhysicalPosition, uint2 PagePixelPos)
|
|
{
|
|
if (Flags & MatCache_DefaultBottomLayer)
|
|
{
|
|
return TAG_NAME(DefaultMaterialCacheABuffer_)();
|
|
}
|
|
else
|
|
{
|
|
return TAG_NAME(LoadMaterialCacheABufferPixel_)(ABufferPhysicalPosition, PagePixelPos);
|
|
}
|
|
}
|
|
|
|
void StoreMaterialABufferPixel(FMaterialCacheABufferTag Top, EMaterialCacheFlag Flags, uint3 ABufferPhysicalPosition, uint2 PagePixelPos)
|
|
{
|
|
FMaterialCacheABufferTag Bottom = GetMaterialBottomABuffer(Flags, ABufferPhysicalPosition, PagePixelPos);
|
|
|
|
Top = TAG_NAME(BlendMaterialCacheFixedFunctionLerp_)(Bottom, Top, Top.Weight);
|
|
|
|
TAG_NAME(StoreMaterialCacheABufferPixel_)(Top, ABufferPhysicalPosition, PagePixelPos);
|
|
}
|