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

72 lines
1.5 KiB
HLSL

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
///////////////////////////////////////////////////////////////////////////////
// Material buffer writing
#ifndef SUBSTRATE_VRS_WRITE
#define SUBSTRATE_VRS_WRITE 0
#endif
void WriteDataToBuffer(RWTexture2DArray<uint> OutBuffer, uint InData, uint3 InCoord, uint InQuadPixelWriteMask)
{
if (InQuadPixelWriteMask > 0u)
{
#if SUBSTRATE_VRS_WRITE
BRANCH
if (InQuadPixelWriteMask & 1u)
#endif
{
OutBuffer[InCoord] = InData;
}
#if SUBSTRATE_VRS_WRITE
BRANCH
if (InQuadPixelWriteMask & 2u) // Copy H
{
OutBuffer[uint3(InCoord.xy + uint2(1, 0), InCoord.z)] = InData;
}
BRANCH
if (InQuadPixelWriteMask & 4u) // Copy V
{
OutBuffer[uint3(InCoord.xy + uint2(0, 1), InCoord.z)] = InData;
}
BRANCH
if (InQuadPixelWriteMask & 8u) // Copy D
{
OutBuffer[uint3(InCoord.xy + uint2(1, 1), InCoord.z)] = InData;
}
#endif
}
}
void WriteDataToBuffer(RWTexture2D<float3> OutBuffer, float3 InData, uint2 InCoord, uint InQuadPixelWriteMask)
{
if (InQuadPixelWriteMask > 0u)
{
#if SUBSTRATE_VRS_WRITE
BRANCH
if (InQuadPixelWriteMask & 1u)
#endif
{
OutBuffer[InCoord] = InData;
}
#if SUBSTRATE_VRS_WRITE
BRANCH
if (InQuadPixelWriteMask & 2u) /* Copy H */
{
OutBuffer[InCoord + uint2(1, 0)] = InData;
}
BRANCH
if (InQuadPixelWriteMask & 4u) /* Copy V */
{
OutBuffer[InCoord + uint2(0, 1)] = InData;
}
BRANCH
if (InQuadPixelWriteMask & 8u) /* Copy D */
{
OutBuffer[InCoord + uint2(1, 1)] = InData;
}
#endif
}
}