diff options
| -rw-r--r-- | src/audio_core/audio_renderer.h | 14 | ||||
| -rw-r--r-- | src/core/hle/service/audio/audren_u.cpp | 26 |
2 files changed, 21 insertions, 19 deletions
diff --git a/src/audio_core/audio_renderer.h b/src/audio_core/audio_renderer.h index 201ec7a3c..b2e5d336c 100644 --- a/src/audio_core/audio_renderer.h +++ b/src/audio_core/audio_renderer.h | |||
| @@ -46,16 +46,18 @@ struct AudioRendererParameter { | |||
| 46 | u32_le sample_rate; | 46 | u32_le sample_rate; |
| 47 | u32_le sample_count; | 47 | u32_le sample_count; |
| 48 | u32_le mix_buffer_count; | 48 | u32_le mix_buffer_count; |
| 49 | u32_le unknown_c; | 49 | u32_le submix_count; |
| 50 | u32_le voice_count; | 50 | u32_le voice_count; |
| 51 | u32_le sink_count; | 51 | u32_le sink_count; |
| 52 | u32_le effect_count; | 52 | u32_le effect_count; |
| 53 | u32_le unknown_1c; | 53 | u32_le performance_frame_count; |
| 54 | u8 unknown_20; | 54 | u8 is_voice_drop_enabled; |
| 55 | INSERT_PADDING_BYTES(3); | 55 | u8 unknown_21; |
| 56 | u8 unknown_22; | ||
| 57 | u8 execution_mode; | ||
| 56 | u32_le splitter_count; | 58 | u32_le splitter_count; |
| 57 | u32_le unknown_2c; | 59 | u32_le num_splitter_send_channels; |
| 58 | INSERT_PADDING_WORDS(1); | 60 | u32_le unknown_30; |
| 59 | u32_le revision; | 61 | u32_le revision; |
| 60 | }; | 62 | }; |
| 61 | static_assert(sizeof(AudioRendererParameter) == 52, "AudioRendererParameter is an invalid size"); | 63 | static_assert(sizeof(AudioRendererParameter) == 52, "AudioRendererParameter is an invalid size"); |
diff --git a/src/core/hle/service/audio/audren_u.cpp b/src/core/hle/service/audio/audren_u.cpp index 7e0cc64a8..49648394c 100644 --- a/src/core/hle/service/audio/audren_u.cpp +++ b/src/core/hle/service/audio/audren_u.cpp | |||
| @@ -262,20 +262,20 @@ void AudRenU::GetAudioRendererWorkBufferSize(Kernel::HLERequestContext& ctx) { | |||
| 262 | LOG_DEBUG(Service_Audio, "called"); | 262 | LOG_DEBUG(Service_Audio, "called"); |
| 263 | 263 | ||
| 264 | u64 buffer_sz = Common::AlignUp(4 * params.mix_buffer_count, 0x40); | 264 | u64 buffer_sz = Common::AlignUp(4 * params.mix_buffer_count, 0x40); |
| 265 | buffer_sz += params.unknown_c * 1024; | 265 | buffer_sz += params.submix_count * 1024; |
| 266 | buffer_sz += 0x940 * (params.unknown_c + 1); | 266 | buffer_sz += 0x940 * (params.submix_count + 1); |
| 267 | buffer_sz += 0x3F0 * params.voice_count; | 267 | buffer_sz += 0x3F0 * params.voice_count; |
| 268 | buffer_sz += Common::AlignUp(8 * (params.unknown_c + 1), 0x10); | 268 | buffer_sz += Common::AlignUp(8 * (params.submix_count + 1), 0x10); |
| 269 | buffer_sz += Common::AlignUp(8 * params.voice_count, 0x10); | 269 | buffer_sz += Common::AlignUp(8 * params.voice_count, 0x10); |
| 270 | buffer_sz += | 270 | buffer_sz += Common::AlignUp( |
| 271 | Common::AlignUp((0x3C0 * (params.sink_count + params.unknown_c) + 4 * params.sample_count) * | 271 | (0x3C0 * (params.sink_count + params.submix_count) + 4 * params.sample_count) * |
| 272 | (params.mix_buffer_count + 6), | 272 | (params.mix_buffer_count + 6), |
| 273 | 0x40); | 273 | 0x40); |
| 274 | 274 | ||
| 275 | if (IsFeatureSupported(AudioFeatures::Splitter, params.revision)) { | 275 | if (IsFeatureSupported(AudioFeatures::Splitter, params.revision)) { |
| 276 | u32 count = params.unknown_c + 1; | 276 | const u32 count = params.submix_count + 1; |
| 277 | u64 node_count = Common::AlignUp(count, 0x40); | 277 | u64 node_count = Common::AlignUp(count, 0x40); |
| 278 | u64 node_state_buffer_sz = | 278 | const u64 node_state_buffer_sz = |
| 279 | 4 * (node_count * node_count) + 0xC * node_count + 2 * (node_count / 8); | 279 | 4 * (node_count * node_count) + 0xC * node_count + 2 * (node_count / 8); |
| 280 | u64 edge_matrix_buffer_sz = 0; | 280 | u64 edge_matrix_buffer_sz = 0; |
| 281 | node_count = Common::AlignUp(count * count, 0x40); | 281 | node_count = Common::AlignUp(count * count, 0x40); |
| @@ -289,19 +289,19 @@ void AudRenU::GetAudioRendererWorkBufferSize(Kernel::HLERequestContext& ctx) { | |||
| 289 | 289 | ||
| 290 | buffer_sz += 0x20 * (params.effect_count + 4 * params.voice_count) + 0x50; | 290 | buffer_sz += 0x20 * (params.effect_count + 4 * params.voice_count) + 0x50; |
| 291 | if (IsFeatureSupported(AudioFeatures::Splitter, params.revision)) { | 291 | if (IsFeatureSupported(AudioFeatures::Splitter, params.revision)) { |
| 292 | buffer_sz += 0xE0 * params.unknown_2c; | 292 | buffer_sz += 0xE0 * params.num_splitter_send_channels; |
| 293 | buffer_sz += 0x20 * params.splitter_count; | 293 | buffer_sz += 0x20 * params.splitter_count; |
| 294 | buffer_sz += Common::AlignUp(4 * params.unknown_2c, 0x10); | 294 | buffer_sz += Common::AlignUp(4 * params.num_splitter_send_channels, 0x10); |
| 295 | } | 295 | } |
| 296 | buffer_sz = Common::AlignUp(buffer_sz, 0x40) + 0x170 * params.sink_count; | 296 | buffer_sz = Common::AlignUp(buffer_sz, 0x40) + 0x170 * params.sink_count; |
| 297 | u64 output_sz = buffer_sz + 0x280 * params.sink_count + 0x4B0 * params.effect_count + | 297 | u64 output_sz = buffer_sz + 0x280 * params.sink_count + 0x4B0 * params.effect_count + |
| 298 | ((params.voice_count * 256) | 0x40); | 298 | ((params.voice_count * 256) | 0x40); |
| 299 | 299 | ||
| 300 | if (params.unknown_1c >= 1) { | 300 | if (params.performance_frame_count >= 1) { |
| 301 | output_sz = Common::AlignUp(((16 * params.sink_count + 16 * params.effect_count + | 301 | output_sz = Common::AlignUp(((16 * params.sink_count + 16 * params.effect_count + |
| 302 | 16 * params.voice_count + 16) + | 302 | 16 * params.voice_count + 16) + |
| 303 | 0x658) * | 303 | 0x658) * |
| 304 | (params.unknown_1c + 1) + | 304 | (params.performance_frame_count + 1) + |
| 305 | 0xc0, | 305 | 0xc0, |
| 306 | 0x40) + | 306 | 0x40) + |
| 307 | output_sz; | 307 | output_sz; |