いつもお世話になっております。
<br/>
NiagaraDataInterfaceArrayRWTemplate.ush の AtomicMin 関数と AtomicMax 関数において out CurrValue を返していますが、
これらの値は PrevValue と Value の加算値ではなく、min/max を取った値ではないでしょうか?
直前に AtomicAdd 関数が実装されているので、そのコードをそのまま持ってきてしまっている可能性が高そうに思いました。
また、NiagaraDataInterfaceMemoryBufferTemplate.ush にも同様の関数が実装されていますが、そちらでは min/max を使用されていました。
<br/>
具体的な再現データなどがなくて申し訳ございませんが、ご確認頂けますと幸いです。
void AtomicMin_{ParameterName}_UEImpureCall(bool bSkip, int Index, int Value, out {VariableType} PrevValue, out {VariableType} CurrValue)
{
bool bIsValidIndex;
IsValidIndex_{ParameterName}(Index, bIsValidIndex);
if ( !bSkip && bIsValidIndex )
{
InterlockedMin({ParameterName}_ArrayRWBuffer[Index], Value, PrevValue);
CurrValue = PrevValue + Value; // = min(PrevValue, Value) ?
}
else
{
PrevValue = 0;
CurrValue = 0;
}
}
void AtomicMax_{ParameterName}_UEImpureCall(bool bSkip, int Index, int Value, out {VariableType} PrevValue, out {VariableType} CurrValue)
{
bool bIsValidIndex;
IsValidIndex_{ParameterName}(Index, bIsValidIndex);
if ( !bSkip && bIsValidIndex )
{
InterlockedMax({ParameterName}_ArrayRWBuffer[Index], Value, PrevValue);
CurrValue = PrevValue + Value; // = max(PrevValue, Value) ?
}
else
{
PrevValue = 0;
CurrValue = 0;
}
}