diff options
| author | 2020-06-13 14:04:28 +1000 | |
|---|---|---|
| committer | 2020-06-13 14:04:28 +1000 | |
| commit | 42250427c5ebd8591aa9fd65a98fd77501cb3008 (patch) | |
| tree | 8e63f635bdf4b715616887c5361b97989ebc5c29 /src/audio_core/audio_renderer.cpp | |
| parent | Merge pull request #3986 from ReinUsesLisp/shader-cache (diff) | |
| download | yuzu-42250427c5ebd8591aa9fd65a98fd77501cb3008.tar.gz yuzu-42250427c5ebd8591aa9fd65a98fd77501cb3008.tar.xz yuzu-42250427c5ebd8591aa9fd65a98fd77501cb3008.zip | |
audren: Implement RendererInfo
Fixes ZLA softlock
Diffstat (limited to 'src/audio_core/audio_renderer.cpp')
| -rw-r--r-- | src/audio_core/audio_renderer.cpp | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/src/audio_core/audio_renderer.cpp b/src/audio_core/audio_renderer.cpp index 50846a854..d64452617 100644 --- a/src/audio_core/audio_renderer.cpp +++ b/src/audio_core/audio_renderer.cpp | |||
| @@ -180,11 +180,12 @@ ResultVal<std::vector<u8>> AudioRenderer::UpdateAudioRenderer(const std::vector< | |||
| 180 | 180 | ||
| 181 | // Copy output header | 181 | // Copy output header |
| 182 | UpdateDataHeader response_data{worker_params}; | 182 | UpdateDataHeader response_data{worker_params}; |
| 183 | std::vector<u8> output_params(response_data.total_size); | ||
| 184 | if (behavior_info.IsElapsedFrameCountSupported()) { | 183 | if (behavior_info.IsElapsedFrameCountSupported()) { |
| 185 | response_data.frame_count = 0x10; | 184 | response_data.render_info = sizeof(RendererInfo); |
| 186 | response_data.total_size += 0x10; | 185 | response_data.total_size += sizeof(RendererInfo); |
| 187 | } | 186 | } |
| 187 | |||
| 188 | std::vector<u8> output_params(response_data.total_size); | ||
| 188 | std::memcpy(output_params.data(), &response_data, sizeof(UpdateDataHeader)); | 189 | std::memcpy(output_params.data(), &response_data, sizeof(UpdateDataHeader)); |
| 189 | 190 | ||
| 190 | // Copy output memory pool entries | 191 | // Copy output memory pool entries |
| @@ -219,6 +220,17 @@ ResultVal<std::vector<u8>> AudioRenderer::UpdateAudioRenderer(const std::vector< | |||
| 219 | return Audren::ERR_INVALID_PARAMETERS; | 220 | return Audren::ERR_INVALID_PARAMETERS; |
| 220 | } | 221 | } |
| 221 | 222 | ||
| 223 | if (behavior_info.IsElapsedFrameCountSupported()) { | ||
| 224 | const std::size_t renderer_info_offset{ | ||
| 225 | sizeof(UpdateDataHeader) + response_data.memory_pools_size + response_data.voices_size + | ||
| 226 | response_data.effects_size + response_data.sinks_size + | ||
| 227 | response_data.performance_manager_size + response_data.behavior_size}; | ||
| 228 | RendererInfo renderer_info{}; | ||
| 229 | renderer_info.elasped_frame_count = elapsed_frame_count; | ||
| 230 | std::memcpy(output_params.data() + renderer_info_offset, &renderer_info, | ||
| 231 | sizeof(RendererInfo)); | ||
| 232 | } | ||
| 233 | |||
| 222 | return MakeResult(output_params); | 234 | return MakeResult(output_params); |
| 223 | } | 235 | } |
| 224 | 236 | ||
| @@ -447,6 +459,7 @@ void AudioRenderer::QueueMixedBuffer(Buffer::Tag tag) { | |||
| 447 | } | 459 | } |
| 448 | } | 460 | } |
| 449 | audio_out->QueueBuffer(stream, tag, std::move(buffer)); | 461 | audio_out->QueueBuffer(stream, tag, std::move(buffer)); |
| 462 | elapsed_frame_count++; | ||
| 450 | } | 463 | } |
| 451 | 464 | ||
| 452 | void AudioRenderer::ReleaseAndQueueBuffers() { | 465 | void AudioRenderer::ReleaseAndQueueBuffers() { |