Removed redundant memcpy in MetaSound math node Audio::TMathOpMultiply<>::Calculate()

#jira UE-212483
#rb phil.popp

[CL 33042309 by dmytro vovk in ue5-main branch]
This commit is contained in:
dmytro vovk
2024-04-17 13:53:00 -04:00
parent b1aa5de46b
commit 6dd8ca803b
4 changed files with 71 additions and 2 deletions
@@ -804,6 +804,39 @@ namespace Audio
return Max;
}
void ArrayMultiply(TArrayView<const float> InFloatBufferA, TArrayView<const float> InFloatBufferB, TArrayView<float> OutBuffer)
{
CSV_SCOPED_TIMING_STAT(Audio_Dsp, ArrayMultiply);
checkf((InFloatBufferA.Num() == InFloatBufferB.Num()) && (InFloatBufferA.Num() == OutBuffer.Num()), TEXT("Input buffers must be equal length"));
const int32 Num = InFloatBufferA.Num();
if (bAudio_FloatArrayMath_ISPC_Enabled)
{
#if INTEL_ISPC
ispc::ArrayMultiply(InFloatBufferA.GetData(), InFloatBufferB.GetData(), OutBuffer.GetData(), Num);
#endif
}
else
{
const int32 NumToSimd = Num & MathIntrinsics::SimdMask;
for (int32 i = 0; i < NumToSimd; i += AUDIO_NUM_FLOATS_PER_VECTOR_REGISTER)
{
VectorRegister4Float Input1 = VectorLoad(&InFloatBufferA[i]);
VectorRegister4Float Input2 = VectorLoad(&InFloatBufferB[i]);
VectorRegister4Float Output = VectorMultiply(Input1, Input2);
VectorStore(Output, &OutBuffer[i]);
}
for (int32 i = NumToSimd; i < Num; ++i)
{
OutBuffer[i] = InFloatBufferA[i] * InFloatBufferB[i];
}
}
}
void ArrayMultiplyInPlace(TArrayView<const float> InFloatBuffer, TArrayView<float> BufferToMultiply)
{
CSV_SCOPED_TIMING_STAT(Audio_Dsp, ArrayMultiplyInPlace);
@@ -239,6 +239,20 @@ export void ArrayMinMaxNormalize(const uniform float InDataPtr[],
}
}
export void ArrayMultiply(const uniform float InFloatBuffer[],
const uniform float BufferToMultiply[],
uniform float OutDataPtr[],
const uniform int NumSamples)
{
foreach(i = 0 ... NumSamples)
{
const varying float Input = InFloatBuffer[i];
const varying float Output = BufferToMultiply[i];
OutDataPtr[i] = Input * Output;
}
}
export void ArrayMultiplyInPlace(const uniform float InFloatBuffer[],
uniform float BufferToMultiply[],
const uniform int NumSamples)