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

161 lines
5.2 KiB
HLSL

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "SSDSignalCore.ush"
FSSDSignalArray MulSignalArray(FSSDSignalArray Samples, float Scalar[SIGNAL_ARRAY_SIZE])
{
FSSDSignalArray OutSamples;
UNROLL_N(SIGNAL_ARRAY_SIZE)
for (uint BatchedSignalId = 0; BatchedSignalId < SIGNAL_ARRAY_SIZE; BatchedSignalId++)
{
OutSamples.Array[BatchedSignalId] = MulSignal(Samples.Array[BatchedSignalId], Scalar[BatchedSignalId]);
}
return OutSamples;
}
FSSDSignalArray AddSignalArray(FSSDSignalArray SamplesA, FSSDSignalArray SamplesB)
{
FSSDSignalArray OutSamples;
UNROLL_N(SIGNAL_ARRAY_SIZE)
for (uint BatchedSignalId = 0; BatchedSignalId < SIGNAL_ARRAY_SIZE; BatchedSignalId++)
{
OutSamples.Array[BatchedSignalId] = AddSignal(SamplesA.Array[BatchedSignalId], SamplesB.Array[BatchedSignalId]);
}
return OutSamples;
}
FSSDSignalArray MinusSignalArray(FSSDSignalArray Samples)
{
FSSDSignalArray OutSamples;
UNROLL_N(SIGNAL_ARRAY_SIZE)
for (uint BatchedSignalId = 0; BatchedSignalId < SIGNAL_ARRAY_SIZE; BatchedSignalId++)
{
OutSamples.Array[BatchedSignalId] = MinusSignal(Samples.Array[BatchedSignalId]);
}
return OutSamples;
}
FSSDSignalArray SubtractSignalArray(FSSDSignalArray SamplesA, FSSDSignalArray SamplesB)
{
FSSDSignalArray OutSamples;
UNROLL_N(SIGNAL_ARRAY_SIZE)
for (uint BatchedSignalId = 0; BatchedSignalId < SIGNAL_ARRAY_SIZE; BatchedSignalId++)
{
OutSamples.Array[BatchedSignalId] = SubtractSignal(SamplesA.Array[BatchedSignalId], SamplesB.Array[BatchedSignalId]);
}
return OutSamples;
}
FSSDSignalArray AbsSignalArray(FSSDSignalArray Samples)
{
FSSDSignalArray OutSamples;
UNROLL_N(SIGNAL_ARRAY_SIZE)
for (uint BatchedSignalId = 0; BatchedSignalId < SIGNAL_ARRAY_SIZE; BatchedSignalId++)
{
OutSamples.Array[BatchedSignalId] = AbsSignal(Samples.Array[BatchedSignalId]);
}
return OutSamples;
}
FSSDSignalArray SqrtSignalArray(FSSDSignalArray Samples)
{
FSSDSignalArray OutSamples;
UNROLL_N(SIGNAL_ARRAY_SIZE)
for (uint BatchedSignalId = 0; BatchedSignalId < SIGNAL_ARRAY_SIZE; BatchedSignalId++)
{
OutSamples.Array[BatchedSignalId] = SqrtSignal(Samples.Array[BatchedSignalId]);
}
return OutSamples;
}
FSSDSignalArray PowerSignalArray(FSSDSignalArray Samples, float Exponent)
{
FSSDSignalArray OutSamples;
UNROLL_N(SIGNAL_ARRAY_SIZE)
for (uint BatchedSignalId = 0; BatchedSignalId < SIGNAL_ARRAY_SIZE; BatchedSignalId++)
{
OutSamples.Array[BatchedSignalId] = PowerSignal(Samples.Array[BatchedSignalId], Exponent);
}
return OutSamples;
}
FSSDSignalArray MinSignalArray(FSSDSignalArray SamplesA, FSSDSignalArray SamplesB)
{
FSSDSignalArray OutSamples;
UNROLL_N(SIGNAL_ARRAY_SIZE)
for (uint BatchedSignalId = 0; BatchedSignalId < SIGNAL_ARRAY_SIZE; BatchedSignalId++)
{
OutSamples.Array[BatchedSignalId] = MinSignal(SamplesA.Array[BatchedSignalId], SamplesB.Array[BatchedSignalId]);
}
return OutSamples;
}
FSSDSignalArray MaxSignalArray(FSSDSignalArray SamplesA, FSSDSignalArray SamplesB)
{
FSSDSignalArray OutSamples;
UNROLL_N(SIGNAL_ARRAY_SIZE)
for (uint BatchedSignalId = 0; BatchedSignalId < SIGNAL_ARRAY_SIZE; BatchedSignalId++)
{
OutSamples.Array[BatchedSignalId] = MaxSignal(SamplesA.Array[BatchedSignalId], SamplesB.Array[BatchedSignalId]);
}
return OutSamples;
}
FSSDSignalArray ClampSignalArray(FSSDSignalArray Samples, FSSDSignalArray SamplesMin, FSSDSignalArray SamplesMax)
{
FSSDSignalArray OutSamples;
UNROLL_N(SIGNAL_ARRAY_SIZE)
for (uint BatchedSignalId = 0; BatchedSignalId < SIGNAL_ARRAY_SIZE; BatchedSignalId++)
{
OutSamples.Array[BatchedSignalId] = ClampSignal(Samples.Array[BatchedSignalId], SamplesMin.Array[BatchedSignalId], SamplesMax.Array[BatchedSignalId]);
}
return OutSamples;
}
FSSDSignalArray LerpSignalArray(FSSDSignalArray Samples0, FSSDSignalArray Samples1, float Interp[SIGNAL_ARRAY_SIZE])
{
FSSDSignalArray OutSamples;
UNROLL_N(SIGNAL_ARRAY_SIZE)
for (uint BatchedSignalId = 0; BatchedSignalId < SIGNAL_ARRAY_SIZE; BatchedSignalId++)
{
OutSamples.Array[BatchedSignalId] = LerpSignal(Samples0.Array[BatchedSignalId], Samples1.Array[BatchedSignalId], Interp[BatchedSignalId]);
}
return OutSamples;
}
FSSDSignalArray NormalizeToOneSampleArray(FSSDSignalArray Samples)
{
FSSDSignalArray OutSamples;
UNROLL_N(SIGNAL_ARRAY_SIZE)
for (uint BatchedSignalId = 0; BatchedSignalId < SIGNAL_ARRAY_SIZE; BatchedSignalId++)
{
OutSamples.Array[BatchedSignalId] = NormalizeToOneSample(Samples.Array[BatchedSignalId]);
}
return OutSamples;
}
FSSDSignalArray WaveBroadcastSignalArray(const FWaveBroadcastSettings BroadcastSettings, FSSDSignalArray Samples)
{
FSSDSignalArray OutSamples;
UNROLL_N(SIGNAL_ARRAY_SIZE)
for (uint BatchedSignalId = 0; BatchedSignalId < SIGNAL_ARRAY_SIZE; BatchedSignalId++)
{
OutSamples.Array[BatchedSignalId] = WaveBroadcastSignal(BroadcastSettings, Samples.Array[BatchedSignalId]);
}
return OutSamples;
}
FSSDSignalFrequencyArray WaveBroadcastSignalFrequenciesArray(const FWaveBroadcastSettings BroadcastSettings, FSSDSignalFrequencyArray Frequencies)
{
FSSDSignalFrequencyArray OutFrequencies;
UNROLL_N(SIGNAL_ARRAY_SIZE)
for (uint BatchedSignalId = 0; BatchedSignalId < SIGNAL_ARRAY_SIZE; BatchedSignalId++)
{
OutFrequencies.Array[BatchedSignalId] = WaveBroadcastSignalFrequency(BroadcastSettings, Frequencies.Array[BatchedSignalId]);
}
return OutFrequencies;
}