Pulp 1.88.0
Cross-platform audio plugin framework
Loading...
Searching...
No Matches
pulp::gpu_audio::GpuConvolutionReverb Class Referencefinal

Optional, control-parity GPU route for the two-channel Forge convolution reverb. More...

#include <gpu_convolution_reverb.hpp>

Public Member Functions

 GpuConvolutionReverb (GpuConvolutionReverbConfig config)
 ~GpuConvolutionReverb ()
 GpuConvolutionReverb (const GpuConvolutionReverb &)=delete
GpuConvolutionReverb & operator= (const GpuConvolutionReverb &)=delete
bool prepare () noexcept
 Prepare the opt-in route.
void release () noexcept
bool prepared () const noexcept
bool gpu_enabled () const noexcept
std::uint32_t block_size () const noexcept
std::uint32_t latency_samples () const noexcept
void set_ir_gain_db (double db) noexcept
void set_predelay_ms (double ms) noexcept
void set_wet_percent (double percent) noexcept
void set_dry_percent (double percent) noexcept
void set_width_percent (double percent) noexcept
void set_lowcut_hz (double hz) noexcept
void set_highcut_hz (double hz) noexcept
void process (const audio::BufferView< const float > &input, audio::BufferView< float > &output, std::uint32_t n) noexcept
 Audio-thread entry point.
GpuConvolutionReverbReport report () const noexcept
GpuAudioStatus status_snapshot () const noexcept
 Allocation-free status of the least healthy lane (lane 0 on a tie), because one fenced or lost lane already changes what the route emits.
GpuAudioRecoveryReason recovery_reason () const noexcept
 First latched recovery cause of that lane, or None.
bool fenced () const noexcept
 True before preparation, or when any lane's GPU delivery is fenced.

Friends

struct detail::GpuConvolutionReverbTestAccess

Detailed Description

Optional, control-parity GPU route for the two-channel Forge convolution reverb.

It uses two separately authenticated mono GpuConvolver instances, one per output lane, so a two-channel IR remains dual-mono and distinct L/R stimuli cannot accidentally collapse to one resident mono spectrum.

The wrapper owns only host-side control, filtering, predelay, dry alignment, and lane composition. GPU work and the continuously primed CPU fallbacks remain inside the existing GpuAudioTransport instances. Its fixed latency is exactly three internal host quanta: two transport lead quanta plus one staging quantum that makes the result independent of callback partitioning. It is reported through latency_samples().

Constructor & Destructor Documentation

◆ GpuConvolutionReverb() [1/2]

pulp::gpu_audio::GpuConvolutionReverb::GpuConvolutionReverb ( GpuConvolutionReverbConfig config)
explicit

◆ ~GpuConvolutionReverb()

pulp::gpu_audio::GpuConvolutionReverb::~GpuConvolutionReverb ( )

◆ GpuConvolutionReverb() [2/2]

pulp::gpu_audio::GpuConvolutionReverb::GpuConvolutionReverb ( const GpuConvolutionReverb & )
delete

Member Function Documentation

◆ block_size()

std::uint32_t pulp::gpu_audio::GpuConvolutionReverb::block_size ( ) const
inlinenoexcept

◆ fenced()

bool pulp::gpu_audio::GpuConvolutionReverb::fenced ( ) const
noexcept

True before preparation, or when any lane's GPU delivery is fenced.

◆ gpu_enabled()

bool pulp::gpu_audio::GpuConvolutionReverb::gpu_enabled ( ) const
inlinenoexcept

◆ latency_samples()

std::uint32_t pulp::gpu_audio::GpuConvolutionReverb::latency_samples ( ) const
inlinenoexcept

◆ operator=()

GpuConvolutionReverb & pulp::gpu_audio::GpuConvolutionReverb::operator= ( const GpuConvolutionReverb & )
delete

◆ prepare()

bool pulp::gpu_audio::GpuConvolutionReverb::prepare ( )
noexcept

Prepare the opt-in route.

The default config is deliberately disabled and fails closed until gpu_enabled is set true by the selected mode.

◆ prepared()

bool pulp::gpu_audio::GpuConvolutionReverb::prepared ( ) const
inlinenoexcept

◆ process()

void pulp::gpu_audio::GpuConvolutionReverb::process ( const audio::BufferView< const float > & input,
audio::BufferView< float > & output,
std::uint32_t n )
noexcept

Audio-thread entry point.

It never allocates, locks, or calls a GPU API. Each lane transport receives the same quantum and sequence shape.

◆ recovery_reason()

GpuAudioRecoveryReason pulp::gpu_audio::GpuConvolutionReverb::recovery_reason ( ) const
noexcept

First latched recovery cause of that lane, or None.

◆ release()

void pulp::gpu_audio::GpuConvolutionReverb::release ( )
noexcept

◆ report()

GpuConvolutionReverbReport pulp::gpu_audio::GpuConvolutionReverb::report ( ) const
noexcept

◆ set_dry_percent()

void pulp::gpu_audio::GpuConvolutionReverb::set_dry_percent ( double percent)
noexcept

◆ set_highcut_hz()

void pulp::gpu_audio::GpuConvolutionReverb::set_highcut_hz ( double hz)
noexcept

◆ set_ir_gain_db()

void pulp::gpu_audio::GpuConvolutionReverb::set_ir_gain_db ( double db)
noexcept

◆ set_lowcut_hz()

void pulp::gpu_audio::GpuConvolutionReverb::set_lowcut_hz ( double hz)
noexcept

◆ set_predelay_ms()

void pulp::gpu_audio::GpuConvolutionReverb::set_predelay_ms ( double ms)
noexcept

◆ set_wet_percent()

void pulp::gpu_audio::GpuConvolutionReverb::set_wet_percent ( double percent)
noexcept

◆ set_width_percent()

void pulp::gpu_audio::GpuConvolutionReverb::set_width_percent ( double percent)
noexcept

◆ status_snapshot()

GpuAudioStatus pulp::gpu_audio::GpuConvolutionReverb::status_snapshot ( ) const
noexcept

Allocation-free status of the least healthy lane (lane 0 on a tie), because one fenced or lost lane already changes what the route emits.

Per-lane statuses are in report().lanes[i].status. Uninitialized until prepare() succeeds. Host/UI thread; not concurrent with prepare().

◆ detail::GpuConvolutionReverbTestAccess

friend struct detail::GpuConvolutionReverbTestAccess
friend

The documentation for this class was generated from the following file: