service/audren_u: Handle version 2 of performance frame info in GetWorkBufferSize()
Introduced in REV5. This is trivial to add support for, now that everything isn't a mess of random magic constant values. All this is, is a change in data type sizes as far as this function cares.
This commit is contained in:
		| @@ -426,15 +426,19 @@ void AudRenU::GetAudioRendererWorkBufferSize(Kernel::HLERequestContext& ctx) { | ||||
|     }; | ||||
|  | ||||
|     // Calculates the part of the size related to performance statistics. | ||||
|     const auto calculate_performance_size = [](const AudioCore::AudioRendererParameter& params) { | ||||
|     const auto calculate_perf_size = [this](const AudioCore::AudioRendererParameter& params) { | ||||
|         // Extra size value appended to the end of the calculation. | ||||
|         constexpr u64 appended = 128; | ||||
|  | ||||
|         // Whether or not we assume the newer version of performance metrics data structures. | ||||
|         const bool is_v2 = | ||||
|             IsFeatureSupported(AudioFeatures::PerformanceMetricsVersion2, params.revision); | ||||
|  | ||||
|         // Data structure sizes | ||||
|         constexpr u64 perf_statistics_size = 0x0C; | ||||
|         constexpr u64 header_size = 0x18; | ||||
|         constexpr u64 entry_size = 0x10; | ||||
|         constexpr u64 detail_size = 0x10; | ||||
|         const u64 header_size = is_v2 ? 0x30 : 0x18; | ||||
|         const u64 entry_size = is_v2 ? 0x18 : 0x10; | ||||
|         const u64 detail_size = is_v2 ? 0x18 : 0x10; | ||||
|  | ||||
|         constexpr u64 max_detail_entries = 100; | ||||
|  | ||||
| @@ -474,7 +478,7 @@ void AudRenU::GetAudioRendererWorkBufferSize(Kernel::HLERequestContext& ctx) { | ||||
|     size += calculate_effect_info_size(params); | ||||
|     size += calculate_sink_info_size(params); | ||||
|     size += calculate_voice_state_size(params); | ||||
|     size += calculate_performance_size(params); | ||||
|     size += calculate_perf_size(params); | ||||
|     size += calculate_command_buffer_size(); | ||||
|  | ||||
|     // finally, 4KB page align the size, and we're done. | ||||
| @@ -525,7 +529,9 @@ bool AudRenU::IsFeatureSupported(AudioFeatures feature, u32_le revision) const { | ||||
|     u32_be version_num = (revision - Common::MakeMagic('R', 'E', 'V', '0')); // Byte swap | ||||
|     switch (feature) { | ||||
|     case AudioFeatures::Splitter: | ||||
|         return version_num >= 2u; | ||||
|         return version_num >= 2U; | ||||
|     case AudioFeatures::PerformanceMetricsVersion2: | ||||
|         return version_num >= 5U; | ||||
|     default: | ||||
|         return false; | ||||
|     } | ||||
|   | ||||
| @@ -28,6 +28,7 @@ private: | ||||
|  | ||||
|     enum class AudioFeatures : u32 { | ||||
|         Splitter, | ||||
|         PerformanceMetricsVersion2, | ||||
|     }; | ||||
|  | ||||
|     bool IsFeatureSupported(AudioFeatures feature, u32_le revision) const; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Lioncash
					Lioncash