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