diff --git a/src/core/hle/service/audio/audren_u.cpp b/src/core/hle/service/audio/audren_u.cpp index b44c6a2214..6e8002bc9d 100644 --- a/src/core/hle/service/audio/audren_u.cpp +++ b/src/core/hle/service/audio/audren_u.cpp @@ -2,6 +2,7 @@ // Licensed under GPLv2 or any later version // Refer to the license.txt file included. +#include "common/alignment.h" #include "common/logging/log.h" #include "core/core_timing.h" #include "core/hle/ipc_helpers.h" @@ -259,52 +260,52 @@ void AudRenU::GetAudioRendererWorkBufferSize(Kernel::HLERequestContext& ctx) { IPC::RequestParser rp{ctx}; auto params = rp.PopRaw(); - u64 buffer_sz = ((4 * params.unknown8 + 0x3f) & ~0x3f); - buffer_sz += (params.unknownC * 1024); + u64 buffer_sz = Common::AlignUp(4 * params.unknown8, 0x40); + buffer_sz += params.unknownC * 1024; buffer_sz += 0x940 * (params.unknownC + 1); buffer_sz += 0x3F0 * params.voice_count; - buffer_sz += (8 * params.unknownC + 0x17) & ~0xF; - buffer_sz += (8 * params.voice_count + 0xF) & ~0xF; - buffer_sz += ((0x3C0 * (params.sink_count + params.unknownC) + 4 * params.sample_count) * - (params.unknown8 + 6) + - 0x3F) & - ~0x3f; + buffer_sz += Common::AlignUp(8 * (params.unknownC + 1), 0x10); + buffer_sz += Common::AlignUp(8 * params.voice_count, 0x10); + buffer_sz += + Common::AlignUp((0x3C0 * (params.sink_count + params.unknownC) + 4 * params.sample_count) * + (params.unknown8 + 6), + 0x40); if (IsFeatureSupported(AudioFeatures::Splitter, params.magic)) { u32 count = params.unknownC + 1; - u64 node_count = (count + 0x3f) & ~0x3f; + u64 node_count = Common::AlignUp(count, 0x40); u64 node_state_buffer_sz = 4 * (node_count * node_count) + 0xC * node_count + 2 * (node_count / 8); u64 edge_matrix_buffer_sz = 0; - node_count = (count * count + 0x3f) & ~0x3f; + node_count = Common::AlignUp(count * count, 0x40); if (node_count >> 31 != 0) { edge_matrix_buffer_sz = (node_count | 7) / 8; } else { edge_matrix_buffer_sz = node_count / 8; } - buffer_sz += (node_state_buffer_sz + edge_matrix_buffer_sz + 0xF) & ~0xF; + buffer_sz += Common::AlignUp(node_state_buffer_sz + edge_matrix_buffer_sz, 0x10); } buffer_sz += 0x20 * (params.effect_count + 4 * params.voice_count) + 0x50; if (IsFeatureSupported(AudioFeatures::Splitter, params.magic)) { buffer_sz += 0xE0 * params.unknown2c; buffer_sz += 0x20 * params.splitter_count; - buffer_sz += ((4 * params.unknown2c + 0xF) & ~0xF); + buffer_sz += Common::AlignUp(4 * params.unknown2c, 0x10); } - buffer_sz = ((buffer_sz + 0x3F) & ~0x3F) + 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 + ((params.voice_count * 256) | 0x40); if (params.unknown1c >= 1) { - output_sz = - ((((16 * params.sink_count + 16 * params.effect_count + 16 * params.voice_count + 16) + - 0x658) * - (params.unknown1c + 1) + - 0xFF) & - ~0x3f) + - output_sz; + output_sz = Common::AlignUp(((16 * params.sink_count + 16 * params.effect_count + + 16 * params.voice_count + 16) + + 0x658) * + (params.unknown1c + 1) + + 0xc0, + 0x40) + + output_sz; } - output_sz = (output_sz + 0x1907d) & ~0xFFF; + output_sz = Common::AlignUp(output_sz + 0x1807e, 0x1000); IPC::ResponseBuilder rb{ctx, 4};