You've already forked UnrealEngineUWP
mirror of
https://github.com/izzy2lost/UnrealEngineUWP.git
synced 2026-03-26 18:15:20 -07:00
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:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user