Commit Graph

1782 Commits

Author SHA1 Message Date
Robbert van der Helm 588a8fd590 Better structure the meson.build file
It's been growing a bit over the last year.
2021-04-30 16:16:35 +02:00
Robbert van der Helm 5680ed5035 Enable additional assertions in debug builds 2021-04-30 16:06:50 +02:00
Robbert van der Helm 66be22b902 Clarify the REAPER context menu regression 2021-04-30 12:47:16 +02:00
Robbert van der Helm 36b3636072 Handle mutual recursion in context menus
REAPER will call `getState()` while the context menu is open, and that
also has to be handled from the GUI thread.
2021-04-30 02:49:54 +02:00
Robbert van der Helm 52428c8749 Also fix mutual recursion across both components
When setting the state on the audio processor, it can happen that plugin
triggers a resize from the edit controller. We should also be able to
handle that situation.
2021-04-30 02:11:24 +02:00
Robbert van der Helm 949ddaf673 Use mutual recursion for IEditController::setState
With this we should be able to handle `setState()`s that try to resize
the currently open editor. This could pop up when using the preset
browser in REAPER with plugins that recall their old size when loading a
preset.
2021-04-30 01:15:18 +02:00
Robbert van der Helm 0536256217 Add clamping to IBStream implementation seek 2021-04-29 23:40:42 +02:00
Robbert van der Helm cb07fd07a2 Handle mutual recursion while loading presets 2021-04-29 23:40:42 +02:00
Robbert van der Helm 74dd7f61a2 Fix ISizeableStream::getStreamSize implementation 2021-04-29 22:49:16 +02:00
Robbert van der Helm 4a92034620 Remove the recommendation for preferring VST3
At least for performance reasons, since with the changes in yabridge
3.2.0 they VST2 plugins perform as good or better depending on the
plugin groups settings. Using plugin groups is still less preferable
than using the VST3 version of course.
2021-04-29 19:21:19 +02:00
Robbert van der Helm 0f506f75e4 Bypass connection point proxies when possible
This greatly improves compatibility with VST3 plugins in Ardour and
Mixbus. Most notably the FabFilter plugins would previously freeze when
having the GUI open while duplicating or inserting new instances.
2021-04-29 15:36:28 +02:00
Robbert van der Helm e4177f2856 Avoid IAudioProcessor::isActive() on GUI thread
I haven't seen this cause any issues this way, and I could imagine that
this could cause some hangs when initializing a second instance of a
plugin while you're interacting with the GUI of the first instance.
2021-04-29 14:29:15 +02:00
Robbert van der Helm a56e4b337f Rename the VST3 mutual recursion functions 2021-04-29 14:03:15 +02:00
Robbert van der Helm 45d83ad9a1 Revert "Separate mutual recursion on GUI and other threads"
This reverts commit a495f1a67f.

This ended up not being an issue. What we _do_ have to do, sadly, is to
have a mutual recursion context stack per plugin. Otherwise multiple
plugin instances can deadlock eachother.
2021-04-29 13:54:48 +02:00
Robbert van der Helm a2e3e691d2 Change wording in the changelog 2021-04-29 12:30:19 +02:00
Robbert van der Helm a0abfed689 Merge the two prefetching changelog entries 2021-04-29 12:25:54 +02:00
Robbert van der Helm a495f1a67f Separate mutual recursion on GUI and other threads
I wasn't able to get this to clash, but this way we can be 100% sure
that there aren't any weird issues.
2021-04-29 12:07:11 +02:00
Robbert van der Helm 8b168b310c Fix mutual recursion with latency in Ardour/Mixbus
This would cause Ardour and Mixbus to freeze when inserting a latency
introducing (JUCE based) VST3 plugin. As mentioned in #98.
2021-04-29 03:13:53 +02:00
Robbert van der Helm 22f94dd22f Prevent unnecessary copies in ScopedValueCache 2021-04-29 02:58:05 +02:00
Robbert van der Helm ee24969539 Mention SWAM Cello among the fixed plugins
Since this now no longer requires an option to get good performance.
2021-04-29 02:19:17 +02:00
Robbert van der Helm fb04524b1a Update the tested Mixbus version 2021-04-29 01:22:50 +02:00
Robbert van der Helm 6f6e6c5b94 Reword caching to prefetching
Since that makes it much clearer what we're actually doing. With old
`cache_time_info` was actually caching the response, but now we're
querying it before the plugin has even requested the information.
2021-04-29 01:07:14 +02:00
Robbert van der Helm c82eb35243 Also cache audioMasterGetCurrentProcessLevel()
Melda plugins seem to call this during every processing cycle.
2021-04-29 01:02:10 +02:00
Robbert van der Helm 383b0c3f10 Remove the cache_time_info option
The new time info caching behaviour supersedes this by getting rid of
callbacks altogether.
2021-04-29 00:46:43 +02:00
Robbert van der Helm 2a9840828f Add a todo for also caching the process level 2021-04-29 00:42:44 +02:00
Robbert van der Helm b8f8dd7236 Log cached audioMasterGetTime() calls
Just like we log cached VST3 function calls.
2021-04-29 00:41:56 +02:00
Robbert van der Helm 1deb4cf664 Send the VST2 transport info along with processing
And cache it during the processing cycle. This greatly reduces the
overhead of bridging VST2 plugins.
2021-04-29 00:32:25 +02:00
Robbert van der Helm 6a3c726acf Get rid of spurious accessibility label 2021-04-29 00:31:11 +02:00
Robbert van der Helm 6cd1b664d3 Rearrange fields in Vst2Bridge 2021-04-29 00:31:11 +02:00
Robbert van der Helm 70adf5493e Add a logger to the Wine VST2 bridge 2021-04-29 00:31:11 +02:00
Robbert van der Helm 32db921b9b Move generic logger on the Wine side to common.h
We'll also need this for VST2 plugins when we start caching the time
info.
2021-04-29 00:31:11 +02:00
Robbert van der Helm dee964ec89 Add a helper for scope-bound caching of values 2021-04-29 00:31:11 +02:00
Robbert van der Helm 676f995f83 Remove the changelog entry for force_ftz
Since this behaviour is now always enabled.
2021-04-28 15:36:14 +02:00
Robbert van der Helm 14b0ba0c62 Clarify the definition of empty_arrangement
This is the same thing of course, but it's a bitfield so just a single 0
may seem a bit odd if you don't already know that.
2021-04-28 13:41:24 +02:00
Robbert van der Helm 216c6bc4f2 Always provide at least some speaker arrangement
This works around a bug in the VST3 version of W. A. Production
Imperfect as mentioned in #97. Even if it's a synth and numInputs is 0,
the plugin will still try to read the input arrangement.
2021-04-28 13:35:15 +02:00
Robbert van der Helm 23f94b35d0 Fix move semantics in Win32Thread and Win32Timer
I was sure that moving an `std::optional<T>` would reset the object you
moved from, but apparently not.
2021-04-28 12:56:49 +02:00
Robbert van der Helm 160c6acb85 Properly handle move semantics in the scoped FTZ 2021-04-28 12:55:58 +02:00
Robbert van der Helm 93f089eca7 Always set FTZ instead of gating it behind a flag
After a quick round of testing it seems like REAPER doesn't always
enable this on the audio thread, but Bitwig, Ardour, Carla and Renoise
do. So it should be safe to just get rid of the option and to leave this
enabled all the time.
2021-04-28 12:07:14 +02:00
Robbert van der Helm d75805820d Mark the options that are not yet in 3.1.0 2021-04-28 00:53:31 +02:00
Robbert van der Helm a12e0dcc27 Enable SSE2 instructions
We need this to enable FTZ in 3aac8e3483.
SSSE2 is a default on x86_64, but we need to explicitly enable it when
compiling the 32-bit bitbridge.
2021-04-27 23:50:28 +02:00
Robbert van der Helm 2be41da9b6 Add compatibility option to force flushing to zero
This prevents Kush Audio REDDI from taking down the DAW when the host
passes it denormalized audio to process. I've discovered that the issue
with this plugin had to do with denormals in the issue linked below, but
I didn't realize that we can just enable the FTZ flag for plugins that
don't already do so.

https://github.com/osxmidi/LinVst/issues/174
2021-04-27 23:33:50 +02:00
Robbert van der Helm 3aac8e3483 Add a RAII wrapper for enabling flush-to-zero 2021-04-27 23:00:41 +02:00
Robbert van der Helm 73d9f5f9b8 Remove unnecessary include 2021-04-27 20:46:08 +02:00
Robbert van der Helm ab56115c87 Add Bitwig+Chromaphone 3 as a hide_daw candidate
Under Bitwig, the plugin will crash when trying to enter text unless you
hide the DAW the plugin is being hosted under.
2021-04-27 18:57:09 +02:00
Robbert van der Helm ee50044062 Also allow hiding the host for VST3 plugins 2021-04-27 18:50:47 +02:00
Robbert van der Helm 3a73fb9689 Allow hiding the DAW name for VST2 plugins
This can be useful when plugins have (broken) host-specific behaviour
that you want to avoid. I'll later add a list of host/plugin
combinations where this may be useful to the readme.
2021-04-27 18:41:36 +02:00
Robbert van der Helm 38abdbee50 Rearrange the configuration options 2021-04-27 17:54:46 +02:00
Robbert van der Helm b52362e698 Fix time info cache being applied to other opcodes
I don't know how I've never noticed this, but we should of course only
be handling `audioMasterGetTime()` this way. This also explains why
enabling this permanently in the past broke some plugins.
2021-04-27 17:32:32 +02:00
Robbert van der Helm 5a68b8b39d Flush the reparent from 0c7dbe8
This should add a root reparent to prevent that X11 error, but it should
still prevent flickering by doing it just before closing the window.
2021-04-27 03:43:45 +02:00
Robbert van der Helm 0d1d368e4f Fix spelling in the changelog 2021-04-26 23:41:26 +02:00