From 098acdef7b3089801fa1a37411b512227e4fe335 Mon Sep 17 00:00:00 2001 From: Chris Robinson Date: Mon, 28 Aug 2023 22:18:36 -0700 Subject: Avoid some large stack buffers --- alc/effects/modulator.cpp | 45 ++++++++++++++++++--------------------------- 1 file changed, 18 insertions(+), 27 deletions(-) (limited to 'alc/effects/modulator.cpp') diff --git a/alc/effects/modulator.cpp b/alc/effects/modulator.cpp index 14ee5004..cf0e16a6 100644 --- a/alc/effects/modulator.cpp +++ b/alc/effects/modulator.cpp @@ -45,8 +45,6 @@ namespace { using uint = unsigned int; -#define MAX_UPDATE_SAMPLES 128 - #define WAVEFORM_FRACBITS 24 #define WAVEFORM_FRACONE (1< samplesIn, const al::span samplesOut) { - for(size_t base{0u};base < samplesToDo;) - { - alignas(16) float modsamples[MAX_UPDATE_SAMPLES]; - const size_t td{minz(MAX_UPDATE_SAMPLES, samplesToDo-base)}; - - mGetSamples(modsamples, mIndex, mStep, td); - mIndex += static_cast(mStep * td); - mIndex &= WAVEFORM_FRACMASK; + mGetSamples(mModSamples.data(), mIndex, mStep, samplesToDo); + mIndex += static_cast(mStep * samplesToDo); + mIndex &= WAVEFORM_FRACMASK; - auto chandata = std::begin(mChans); - for(const auto &input : samplesIn) + auto chandata = std::begin(mChans); + for(const auto &input : samplesIn) + { + const size_t outidx{chandata->mTargetChannel}; + if(outidx != InvalidChannelIndex) { - const size_t outidx{chandata->mTargetChannel}; - if(outidx != InvalidChannelIndex) - { - alignas(16) float temps[MAX_UPDATE_SAMPLES]; - - chandata->mFilter.process({&input[base], td}, temps); - for(size_t i{0u};i < td;i++) - temps[i] *= modsamples[i]; - - MixSamples({temps, td}, samplesOut[outidx].data()+base, chandata->mCurrentGain, - chandata->mTargetGain, samplesToDo-base); - } - ++chandata; - } + chandata->mFilter.process({input.data(), samplesToDo}, mBuffer.data()); + for(size_t i{0u};i < samplesToDo;++i) + mBuffer[i] *= mModSamples[i]; - base += td; + MixSamples({mBuffer.data(), samplesToDo}, samplesOut[outidx].data(), + chandata->mCurrentGain, chandata->mTargetGain, minz(samplesToDo, 64)); + } + ++chandata; } } -- cgit v1.2.3