summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbunnei <bunneidev@gmail.com>2022-08-24 20:45:56 +0200
committerGitHub <noreply@github.com>2022-08-24 20:45:56 +0200
commita07502a6381ce1e84d7690693d595026c4844854 (patch)
tree3dbeced18c60c7fa87def44608a3c10c78d492fd
parentMerge pull request #8804 from vonchenplus/speed_up_idirectory_services (diff)
parentImplement AudRenU:RequestUpdateAuto, and use C descriptors when B reports as empty. (diff)
downloadyuzu-a07502a6381ce1e84d7690693d595026c4844854.tar
yuzu-a07502a6381ce1e84d7690693d595026c4844854.tar.gz
yuzu-a07502a6381ce1e84d7690693d595026c4844854.tar.bz2
yuzu-a07502a6381ce1e84d7690693d595026c4844854.tar.lz
yuzu-a07502a6381ce1e84d7690693d595026c4844854.tar.xz
yuzu-a07502a6381ce1e84d7690693d595026c4844854.tar.zst
yuzu-a07502a6381ce1e84d7690693d595026c4844854.zip
-rw-r--r--src/core/hle/service/audio/audren_u.cpp27
1 files changed, 21 insertions, 6 deletions
diff --git a/src/core/hle/service/audio/audren_u.cpp b/src/core/hle/service/audio/audren_u.cpp
index 381a66ba5..bc69117c6 100644
--- a/src/core/hle/service/audio/audren_u.cpp
+++ b/src/core/hle/service/audio/audren_u.cpp
@@ -50,7 +50,7 @@ public:
{7, &IAudioRenderer::QuerySystemEvent, "QuerySystemEvent"},
{8, &IAudioRenderer::SetRenderingTimeLimit, "SetRenderingTimeLimit"},
{9, &IAudioRenderer::GetRenderingTimeLimit, "GetRenderingTimeLimit"},
- {10, nullptr, "RequestUpdateAuto"},
+ {10, &IAudioRenderer::RequestUpdate, "RequestUpdateAuto"},
{11, nullptr, "ExecuteAudioRendererRendering"},
};
// clang-format on
@@ -113,15 +113,30 @@ private:
// These buffers are written manually to avoid an issue with WriteBuffer throwing errors for
// checking size 0. Performance size is 0 for most games.
- const auto buffers{ctx.BufferDescriptorB()};
- std::vector<u8> output(buffers[0].Size(), 0);
- std::vector<u8> performance(buffers[1].Size(), 0);
+
+ std::vector<u8> output{};
+ std::vector<u8> performance{};
+ auto is_buffer_b{ctx.BufferDescriptorB()[0].Size() != 0};
+ if (is_buffer_b) {
+ const auto buffersB{ctx.BufferDescriptorB()};
+ output.resize(buffersB[0].Size(), 0);
+ performance.resize(buffersB[1].Size(), 0);
+ } else {
+ const auto buffersC{ctx.BufferDescriptorC()};
+ output.resize(buffersC[0].Size(), 0);
+ performance.resize(buffersC[1].Size(), 0);
+ }
auto result = impl->RequestUpdate(input, performance, output);
if (result.IsSuccess()) {
- ctx.WriteBufferB(output.data(), output.size(), 0);
- ctx.WriteBufferB(performance.data(), performance.size(), 1);
+ if (is_buffer_b) {
+ ctx.WriteBufferB(output.data(), output.size(), 0);
+ ctx.WriteBufferB(performance.data(), performance.size(), 1);
+ } else {
+ ctx.WriteBufferC(output.data(), output.size(), 0);
+ ctx.WriteBufferC(performance.data(), performance.size(), 1);
+ }
} else {
LOG_ERROR(Service_Audio, "RequestUpdate failed error 0x{:02X}!", result.description);
}