From 5ed7df1e68fd4b23e6f294f477fedc276c06df8a Mon Sep 17 00:00:00 2001 From: Zephyron Date: Thu, 25 Sep 2025 16:52:04 +1000 Subject: [PATCH] audio_core: Implement further Audio REV 15 support for SDK 19.0.0+ compatibility This commit adds further Audio REV 15 support to enable compatibility with games compiled against Nintendo Switch SDK 19.0.0 and later versions. Fixes: Audio compatibility issues with SDK 19.0.0+ games Resolves: Missing Audio REV 15 feature support Signed-off-by: Zephyron --- src/audio_core/common/feature_support.h | 12 ++++++ .../renderer/behavior/behavior_info.cpp | 24 +++++++++++ .../renderer/behavior/behavior_info.h | 42 +++++++++++++++++++ 3 files changed, 78 insertions(+) diff --git a/src/audio_core/common/feature_support.h b/src/audio_core/common/feature_support.h index d386d8a67..64da9e062 100644 --- a/src/audio_core/common/feature_support.h +++ b/src/audio_core/common/feature_support.h @@ -54,6 +54,12 @@ enum class SupportTags { AudioRendererProcessingTimeLimit50Percent, VoiceChannelResourceLimit, EffectProcessingVersion3, + AudioRendererRenderingTimeLimit, + AudioRendererVoiceDropParameter, + AudioRendererExecutionMode, + AudioRendererRenderingDevice, + AudioRendererExclusiveControlLeakageCheck, + AudioRendererElapsedFrameCount, // Not a real tag, just here to get the count. Size @@ -107,6 +113,12 @@ constexpr bool CheckFeatureSupported(SupportTags tag, u32 user_revision) { {SupportTags::AudioRendererProcessingTimeLimit50Percent, 15}, {SupportTags::VoiceChannelResourceLimit, 15}, {SupportTags::EffectProcessingVersion3, 15}, + {SupportTags::AudioRendererRenderingTimeLimit, 15}, + {SupportTags::AudioRendererVoiceDropParameter, 15}, + {SupportTags::AudioRendererExecutionMode, 15}, + {SupportTags::AudioRendererRenderingDevice, 15}, + {SupportTags::AudioRendererExclusiveControlLeakageCheck, 15}, + {SupportTags::AudioRendererElapsedFrameCount, 15}, }}; const auto& feature = diff --git a/src/audio_core/renderer/behavior/behavior_info.cpp b/src/audio_core/renderer/behavior/behavior_info.cpp index 00223dfb8..0eb6e23a0 100644 --- a/src/audio_core/renderer/behavior/behavior_info.cpp +++ b/src/audio_core/renderer/behavior/behavior_info.cpp @@ -218,4 +218,28 @@ bool BehaviorInfo::IsEffectProcessingVersion3Supported() const { return CheckFeatureSupported(SupportTags::EffectProcessingVersion3, user_revision); } +bool BehaviorInfo::IsAudioRendererRenderingTimeLimitSupported() const { + return CheckFeatureSupported(SupportTags::AudioRendererRenderingTimeLimit, user_revision); +} + +bool BehaviorInfo::IsAudioRendererVoiceDropParameterSupported() const { + return CheckFeatureSupported(SupportTags::AudioRendererVoiceDropParameter, user_revision); +} + +bool BehaviorInfo::IsAudioRendererExecutionModeSupported() const { + return CheckFeatureSupported(SupportTags::AudioRendererExecutionMode, user_revision); +} + +bool BehaviorInfo::IsAudioRendererRenderingDeviceSupported() const { + return CheckFeatureSupported(SupportTags::AudioRendererRenderingDevice, user_revision); +} + +bool BehaviorInfo::IsAudioRendererExclusiveControlLeakageCheckSupported() const { + return CheckFeatureSupported(SupportTags::AudioRendererExclusiveControlLeakageCheck, user_revision); +} + +bool BehaviorInfo::IsAudioRendererElapsedFrameCountSupported() const { + return CheckFeatureSupported(SupportTags::AudioRendererElapsedFrameCount, user_revision); +} + } // namespace AudioCore::Renderer diff --git a/src/audio_core/renderer/behavior/behavior_info.h b/src/audio_core/renderer/behavior/behavior_info.h index d448446b2..3319b576f 100644 --- a/src/audio_core/renderer/behavior/behavior_info.h +++ b/src/audio_core/renderer/behavior/behavior_info.h @@ -410,6 +410,48 @@ public: */ bool IsEffectProcessingVersion3Supported() const; + /** + * Check if audio renderer rendering time limit is supported. + * + * @return True if supported, otherwise false. + */ + bool IsAudioRendererRenderingTimeLimitSupported() const; + + /** + * Check if audio renderer voice drop parameter is supported. + * + * @return True if supported, otherwise false. + */ + bool IsAudioRendererVoiceDropParameterSupported() const; + + /** + * Check if audio renderer execution mode is supported. + * + * @return True if supported, otherwise false. + */ + bool IsAudioRendererExecutionModeSupported() const; + + /** + * Check if audio renderer rendering device is supported. + * + * @return True if supported, otherwise false. + */ + bool IsAudioRendererRenderingDeviceSupported() const; + + /** + * Check if audio renderer exclusive control leakage check is supported. + * + * @return True if supported, otherwise false. + */ + bool IsAudioRendererExclusiveControlLeakageCheckSupported() const; + + /** + * Check if audio renderer elapsed frame count is supported. + * + * @return True if supported, otherwise false. + */ + bool IsAudioRendererElapsedFrameCountSupported() const; + /// Host version u32 process_revision; /// User version