yuzu-emu
/
yuzu
Archived
1
0
Fork 0

audio_core/audio_renderer: Name previously unknown parameters of AudioRendererParameter

Provides names for previously unknown entries (aside from the two u8
that appear to be padding bytes, and a single word that also appears
to be reserved or padding).

This will be useful in subsequent changes when unstubbing behavior related
to the audio renderer services.
This commit is contained in:
Lioncash 2019-02-27 05:50:40 -05:00
parent 10d1d58390
commit 0e1b5acc6a
2 changed files with 21 additions and 19 deletions

View File

@ -46,16 +46,18 @@ struct AudioRendererParameter {
u32_le sample_rate; u32_le sample_rate;
u32_le sample_count; u32_le sample_count;
u32_le mix_buffer_count; u32_le mix_buffer_count;
u32_le unknown_c; u32_le submix_count;
u32_le voice_count; u32_le voice_count;
u32_le sink_count; u32_le sink_count;
u32_le effect_count; u32_le effect_count;
u32_le unknown_1c; u32_le performance_frame_count;
u8 unknown_20; u8 is_voice_drop_enabled;
INSERT_PADDING_BYTES(3); u8 unknown_21;
u8 unknown_22;
u8 execution_mode;
u32_le splitter_count; u32_le splitter_count;
u32_le unknown_2c; u32_le num_splitter_send_channels;
INSERT_PADDING_WORDS(1); u32_le unknown_30;
u32_le revision; u32_le revision;
}; };
static_assert(sizeof(AudioRendererParameter) == 52, "AudioRendererParameter is an invalid size"); static_assert(sizeof(AudioRendererParameter) == 52, "AudioRendererParameter is an invalid size");

View File

@ -262,20 +262,20 @@ void AudRenU::GetAudioRendererWorkBufferSize(Kernel::HLERequestContext& ctx) {
LOG_DEBUG(Service_Audio, "called"); LOG_DEBUG(Service_Audio, "called");
u64 buffer_sz = Common::AlignUp(4 * params.mix_buffer_count, 0x40); u64 buffer_sz = Common::AlignUp(4 * params.mix_buffer_count, 0x40);
buffer_sz += params.unknown_c * 1024; buffer_sz += params.submix_count * 1024;
buffer_sz += 0x940 * (params.unknown_c + 1); buffer_sz += 0x940 * (params.submix_count + 1);
buffer_sz += 0x3F0 * params.voice_count; buffer_sz += 0x3F0 * params.voice_count;
buffer_sz += Common::AlignUp(8 * (params.unknown_c + 1), 0x10); buffer_sz += Common::AlignUp(8 * (params.submix_count + 1), 0x10);
buffer_sz += Common::AlignUp(8 * params.voice_count, 0x10); buffer_sz += Common::AlignUp(8 * params.voice_count, 0x10);
buffer_sz += buffer_sz += Common::AlignUp(
Common::AlignUp((0x3C0 * (params.sink_count + params.unknown_c) + 4 * params.sample_count) * (0x3C0 * (params.sink_count + params.submix_count) + 4 * params.sample_count) *
(params.mix_buffer_count + 6), (params.mix_buffer_count + 6),
0x40); 0x40);
if (IsFeatureSupported(AudioFeatures::Splitter, params.revision)) { if (IsFeatureSupported(AudioFeatures::Splitter, params.revision)) {
u32 count = params.unknown_c + 1; const u32 count = params.submix_count + 1;
u64 node_count = Common::AlignUp(count, 0x40); u64 node_count = Common::AlignUp(count, 0x40);
u64 node_state_buffer_sz = const u64 node_state_buffer_sz =
4 * (node_count * node_count) + 0xC * node_count + 2 * (node_count / 8); 4 * (node_count * node_count) + 0xC * node_count + 2 * (node_count / 8);
u64 edge_matrix_buffer_sz = 0; u64 edge_matrix_buffer_sz = 0;
node_count = Common::AlignUp(count * count, 0x40); node_count = Common::AlignUp(count * count, 0x40);
@ -289,19 +289,19 @@ void AudRenU::GetAudioRendererWorkBufferSize(Kernel::HLERequestContext& ctx) {
buffer_sz += 0x20 * (params.effect_count + 4 * params.voice_count) + 0x50; buffer_sz += 0x20 * (params.effect_count + 4 * params.voice_count) + 0x50;
if (IsFeatureSupported(AudioFeatures::Splitter, params.revision)) { if (IsFeatureSupported(AudioFeatures::Splitter, params.revision)) {
buffer_sz += 0xE0 * params.unknown_2c; buffer_sz += 0xE0 * params.num_splitter_send_channels;
buffer_sz += 0x20 * params.splitter_count; buffer_sz += 0x20 * params.splitter_count;
buffer_sz += Common::AlignUp(4 * params.unknown_2c, 0x10); buffer_sz += Common::AlignUp(4 * params.num_splitter_send_channels, 0x10);
} }
buffer_sz = Common::AlignUp(buffer_sz, 0x40) + 0x170 * params.sink_count; buffer_sz = Common::AlignUp(buffer_sz, 0x40) + 0x170 * params.sink_count;
u64 output_sz = buffer_sz + 0x280 * params.sink_count + 0x4B0 * params.effect_count + u64 output_sz = buffer_sz + 0x280 * params.sink_count + 0x4B0 * params.effect_count +
((params.voice_count * 256) | 0x40); ((params.voice_count * 256) | 0x40);
if (params.unknown_1c >= 1) { if (params.performance_frame_count >= 1) {
output_sz = Common::AlignUp(((16 * params.sink_count + 16 * params.effect_count + output_sz = Common::AlignUp(((16 * params.sink_count + 16 * params.effect_count +
16 * params.voice_count + 16) + 16 * params.voice_count + 16) +
0x658) * 0x658) *
(params.unknown_1c + 1) + (params.performance_frame_count + 1) +
0xc0, 0xc0,
0x40) + 0x40) +
output_sz; output_sz;