summaryrefslogtreecommitdiff
path: root/src/audio_core/info_updater.cpp
diff options
context:
space:
mode:
authorGravatar Levi2021-01-10 22:09:56 -0700
committerGravatar Levi2021-01-10 22:09:56 -0700
commit7a3c884e39fccfbb498b855080bffabc9ce2e7f1 (patch)
tree5056f9406dec188439cb0deb87603498243a9412 /src/audio_core/info_updater.cpp
parentMore forgetting... duh (diff)
parentMerge pull request #5229 from Morph1984/fullscreen-opt (diff)
downloadyuzu-7a3c884e39fccfbb498b855080bffabc9ce2e7f1.tar.gz
yuzu-7a3c884e39fccfbb498b855080bffabc9ce2e7f1.tar.xz
yuzu-7a3c884e39fccfbb498b855080bffabc9ce2e7f1.zip
Merge remote-tracking branch 'upstream/master' into int-flags
Diffstat (limited to 'src/audio_core/info_updater.cpp')
-rw-r--r--src/audio_core/info_updater.cpp37
1 files changed, 18 insertions, 19 deletions
diff --git a/src/audio_core/info_updater.cpp b/src/audio_core/info_updater.cpp
index f53ce21a5..d3ac90827 100644
--- a/src/audio_core/info_updater.cpp
+++ b/src/audio_core/info_updater.cpp
@@ -14,9 +14,9 @@
14 14
15namespace AudioCore { 15namespace AudioCore {
16 16
17InfoUpdater::InfoUpdater(const std::vector<u8>& in_params, std::vector<u8>& out_params, 17InfoUpdater::InfoUpdater(const std::vector<u8>& in_params_, std::vector<u8>& out_params_,
18 BehaviorInfo& behavior_info) 18 BehaviorInfo& behavior_info_)
19 : in_params(in_params), out_params(out_params), behavior_info(behavior_info) { 19 : in_params(in_params_), out_params(out_params_), behavior_info(behavior_info_) {
20 ASSERT( 20 ASSERT(
21 AudioCommon::CanConsumeBuffer(in_params.size(), 0, sizeof(AudioCommon::UpdateDataHeader))); 21 AudioCommon::CanConsumeBuffer(in_params.size(), 0, sizeof(AudioCommon::UpdateDataHeader)));
22 std::memcpy(&input_header, in_params.data(), sizeof(AudioCommon::UpdateDataHeader)); 22 std::memcpy(&input_header, in_params.data(), sizeof(AudioCommon::UpdateDataHeader));
@@ -64,7 +64,6 @@ bool InfoUpdater::UpdateBehaviorInfo(BehaviorInfo& in_behavior_info) {
64} 64}
65 65
66bool InfoUpdater::UpdateMemoryPools(std::vector<ServerMemoryPoolInfo>& memory_pool_info) { 66bool InfoUpdater::UpdateMemoryPools(std::vector<ServerMemoryPoolInfo>& memory_pool_info) {
67 const auto force_mapping = behavior_info.IsMemoryPoolForceMappingEnabled();
68 const auto memory_pool_count = memory_pool_info.size(); 67 const auto memory_pool_count = memory_pool_info.size();
69 const auto total_memory_pool_in = sizeof(ServerMemoryPoolInfo::InParams) * memory_pool_count; 68 const auto total_memory_pool_in = sizeof(ServerMemoryPoolInfo::InParams) * memory_pool_count;
70 const auto total_memory_pool_out = sizeof(ServerMemoryPoolInfo::OutParams) * memory_pool_count; 69 const auto total_memory_pool_out = sizeof(ServerMemoryPoolInfo::OutParams) * memory_pool_count;
@@ -136,8 +135,8 @@ bool InfoUpdater::UpdateVoiceChannelResources(VoiceContext& voice_context) {
136} 135}
137 136
138bool InfoUpdater::UpdateVoices(VoiceContext& voice_context, 137bool InfoUpdater::UpdateVoices(VoiceContext& voice_context,
139 std::vector<ServerMemoryPoolInfo>& memory_pool_info, 138 [[maybe_unused]] std::vector<ServerMemoryPoolInfo>& memory_pool_info,
140 VAddr audio_codec_dsp_addr) { 139 [[maybe_unused]] VAddr audio_codec_dsp_addr) {
141 const auto voice_count = voice_context.GetVoiceCount(); 140 const auto voice_count = voice_context.GetVoiceCount();
142 std::vector<VoiceInfo::InParams> voice_in(voice_count); 141 std::vector<VoiceInfo::InParams> voice_in(voice_count);
143 std::vector<VoiceInfo::OutParams> voice_out(voice_count); 142 std::vector<VoiceInfo::OutParams> voice_out(voice_count);
@@ -166,28 +165,28 @@ bool InfoUpdater::UpdateVoices(VoiceContext& voice_context,
166 165
167 // Update our voices 166 // Update our voices
168 for (std::size_t i = 0; i < voice_count; i++) { 167 for (std::size_t i = 0; i < voice_count; i++) {
169 auto& in_params = voice_in[i]; 168 auto& voice_in_params = voice_in[i];
170 const auto channel_count = static_cast<std::size_t>(in_params.channel_count); 169 const auto channel_count = static_cast<std::size_t>(voice_in_params.channel_count);
171 // Skip if it's not currently in use 170 // Skip if it's not currently in use
172 if (!in_params.is_in_use) { 171 if (!voice_in_params.is_in_use) {
173 continue; 172 continue;
174 } 173 }
175 // Voice states for each channel 174 // Voice states for each channel
176 std::array<VoiceState*, AudioCommon::MAX_CHANNEL_COUNT> voice_states{}; 175 std::array<VoiceState*, AudioCommon::MAX_CHANNEL_COUNT> voice_states{};
177 ASSERT(in_params.id < voice_count); 176 ASSERT(static_cast<std::size_t>(voice_in_params.id) < voice_count);
178 177
179 // Grab our current voice info 178 // Grab our current voice info
180 auto& voice_info = voice_context.GetInfo(static_cast<std::size_t>(in_params.id)); 179 auto& voice_info = voice_context.GetInfo(static_cast<std::size_t>(voice_in_params.id));
181 180
182 ASSERT(channel_count <= AudioCommon::MAX_CHANNEL_COUNT); 181 ASSERT(channel_count <= AudioCommon::MAX_CHANNEL_COUNT);
183 182
184 // Get all our channel voice states 183 // Get all our channel voice states
185 for (std::size_t channel = 0; channel < channel_count; channel++) { 184 for (std::size_t channel = 0; channel < channel_count; channel++) {
186 voice_states[channel] = 185 voice_states[channel] =
187 &voice_context.GetState(in_params.voice_channel_resource_ids[channel]); 186 &voice_context.GetState(voice_in_params.voice_channel_resource_ids[channel]);
188 } 187 }
189 188
190 if (in_params.is_new) { 189 if (voice_in_params.is_new) {
191 // Default our values for our voice 190 // Default our values for our voice
192 voice_info.Initialize(); 191 voice_info.Initialize();
193 if (channel_count == 0 || channel_count > AudioCommon::MAX_CHANNEL_COUNT) { 192 if (channel_count == 0 || channel_count > AudioCommon::MAX_CHANNEL_COUNT) {
@@ -201,12 +200,12 @@ bool InfoUpdater::UpdateVoices(VoiceContext& voice_context,
201 } 200 }
202 201
203 // Update our voice 202 // Update our voice
204 voice_info.UpdateParameters(in_params, behavior_info); 203 voice_info.UpdateParameters(voice_in_params, behavior_info);
205 // TODO(ogniK): Handle mapping errors with behavior info based on in params response 204 // TODO(ogniK): Handle mapping errors with behavior info based on in params response
206 205
207 // Update our wave buffers 206 // Update our wave buffers
208 voice_info.UpdateWaveBuffers(in_params, voice_states, behavior_info); 207 voice_info.UpdateWaveBuffers(voice_in_params, voice_states, behavior_info);
209 voice_info.WriteOutStatus(voice_out[i], in_params, voice_states); 208 voice_info.WriteOutStatus(voice_out[i], voice_in_params, voice_states);
210 } 209 }
211 210
212 if (!AudioCommon::CanConsumeBuffer(out_params.size(), output_offset, voice_out_size)) { 211 if (!AudioCommon::CanConsumeBuffer(out_params.size(), output_offset, voice_out_size)) {
@@ -352,8 +351,8 @@ ResultCode InfoUpdater::UpdateMixes(MixContext& mix_context, std::size_t mix_buf
352 for (std::size_t i = 0; i < mix_count; i++) { 351 for (std::size_t i = 0; i < mix_count; i++) {
353 const auto& in = mix_in_params[i]; 352 const auto& in = mix_in_params[i];
354 total_buffer_count += in.buffer_count; 353 total_buffer_count += in.buffer_count;
355 if (in.dest_mix_id > mix_count && in.dest_mix_id != AudioCommon::NO_MIX && 354 if (static_cast<std::size_t>(in.dest_mix_id) > mix_count &&
356 in.mix_id != AudioCommon::FINAL_MIX) { 355 in.dest_mix_id != AudioCommon::NO_MIX && in.mix_id != AudioCommon::FINAL_MIX) {
357 LOG_ERROR( 356 LOG_ERROR(
358 Audio, 357 Audio,
359 "Invalid mix destination, mix_id={:X}, dest_mix_id={:X}, mix_buffer_count={:X}", 358 "Invalid mix destination, mix_id={:X}, dest_mix_id={:X}, mix_buffer_count={:X}",
@@ -446,7 +445,7 @@ bool InfoUpdater::UpdatePerformanceBuffer() {
446 return true; 445 return true;
447} 446}
448 447
449bool InfoUpdater::UpdateErrorInfo(BehaviorInfo& in_behavior_info) { 448bool InfoUpdater::UpdateErrorInfo([[maybe_unused]] BehaviorInfo& in_behavior_info) {
450 const auto total_beahvior_info_out = sizeof(BehaviorInfo::OutParams); 449 const auto total_beahvior_info_out = sizeof(BehaviorInfo::OutParams);
451 450
452 if (!AudioCommon::CanConsumeBuffer(out_params.size(), output_offset, total_beahvior_info_out)) { 451 if (!AudioCommon::CanConsumeBuffer(out_params.size(), output_offset, total_beahvior_info_out)) {