multiplicativeRamp behaves like linearRamp
This commit is contained in:
parent
12cb0b5b43
commit
5412593da9
3 changed files with 5 additions and 5 deletions
|
|
@ -566,8 +566,8 @@ namespace _internals {
|
||||||
template <class T>
|
template <class T>
|
||||||
inline void snippetRampMultiplicative(T*& output, T& value, T step)
|
inline void snippetRampMultiplicative(T*& output, T& value, T step)
|
||||||
{
|
{
|
||||||
value *= step;
|
|
||||||
*output++ = value;
|
*output++ = value;
|
||||||
|
value *= step;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -487,7 +487,7 @@ float sfz::multiplicativeRamp<float, true>(absl::Span<float> output, float value
|
||||||
while (unaligned(out) && out < lastAligned)
|
while (unaligned(out) && out < lastAligned)
|
||||||
_internals::snippetRampMultiplicative<float>(out, value, step);
|
_internals::snippetRampMultiplicative<float>(out, value, step);
|
||||||
|
|
||||||
auto mmValue = _mm_set1_ps(value);
|
auto mmValue = _mm_set1_ps(value / step);
|
||||||
auto mmStep = _mm_set_ps(step * step * step * step, step * step * step, step * step, step);
|
auto mmStep = _mm_set_ps(step * step * step * step, step * step * step, step * step, step);
|
||||||
|
|
||||||
while (out < lastAligned) {
|
while (out < lastAligned) {
|
||||||
|
|
@ -497,7 +497,7 @@ float sfz::multiplicativeRamp<float, true>(absl::Span<float> output, float value
|
||||||
out += TypeAlignment;
|
out += TypeAlignment;
|
||||||
}
|
}
|
||||||
|
|
||||||
value = _mm_cvtss_f32(mmValue);
|
value = _mm_cvtss_f32(mmValue) * step;
|
||||||
while (out < output.end())
|
while (out < output.end())
|
||||||
_internals::snippetRampMultiplicative<float>(out, value, step);
|
_internals::snippetRampMultiplicative<float>(out, value, step);
|
||||||
return value;
|
return value;
|
||||||
|
|
|
||||||
|
|
@ -539,7 +539,7 @@ TEST_CASE("[Helpers] Multiplicative Ramp")
|
||||||
const float start { 1.0f };
|
const float start { 1.0f };
|
||||||
const float v { fillValue };
|
const float v { fillValue };
|
||||||
std::array<float, 6> output;
|
std::array<float, 6> output;
|
||||||
std::array<float, 6> expected { v, v * v, v * v * v, v * v * v * v, v * v * v * v * v, v * v * v * v * v * v };
|
std::array<float, 6> expected { start, start * v, start * v * v, start * v * v * v, start * v * v * v * v, start * v * v * v * v * v };
|
||||||
sfz::multiplicativeRamp<float, false>(absl::MakeSpan(output), start, v);
|
sfz::multiplicativeRamp<float, false>(absl::MakeSpan(output), start, v);
|
||||||
REQUIRE(approxEqual<float>(output, expected));
|
REQUIRE(approxEqual<float>(output, expected));
|
||||||
}
|
}
|
||||||
|
|
@ -549,7 +549,7 @@ TEST_CASE("[Helpers] Multiplicative Ramp (SIMD)")
|
||||||
const float start { 1.0f };
|
const float start { 1.0f };
|
||||||
const float v { fillValue };
|
const float v { fillValue };
|
||||||
std::array<float, 6> output;
|
std::array<float, 6> output;
|
||||||
std::array<float, 6> expected { v, v * v, v * v * v, v * v * v * v, v * v * v * v * v, v * v * v * v * v * v };
|
std::array<float, 6> expected { start, start * v, start * v * v, start * v * v * v, start * v * v * v * v, start * v * v * v * v * v };
|
||||||
sfz::multiplicativeRamp<float, true>(absl::MakeSpan(output), start, v);
|
sfz::multiplicativeRamp<float, true>(absl::MakeSpan(output), start, v);
|
||||||
REQUIRE(approxEqual<float>(output, expected));
|
REQUIRE(approxEqual<float>(output, expected));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue