diff options
author | bunnei <bunneidev@gmail.com> | 2023-05-03 02:54:57 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-05-03 02:54:57 +0200 |
commit | 8f43b05d6b1be260f68907c581b8e3a91cf244d8 (patch) | |
tree | be95158c22707e828cd57be90c68f9a1f683d3f1 /src/video_core/renderer_vulkan/vk_update_descriptor.cpp | |
parent | Merge pull request #10133 from lat9nq/clang-shadow-and-fallthrough (diff) | |
parent | vk_present_manager: Add toggle for async presentation (diff) | |
download | yuzu-8f43b05d6b1be260f68907c581b8e3a91cf244d8.tar yuzu-8f43b05d6b1be260f68907c581b8e3a91cf244d8.tar.gz yuzu-8f43b05d6b1be260f68907c581b8e3a91cf244d8.tar.bz2 yuzu-8f43b05d6b1be260f68907c581b8e3a91cf244d8.tar.lz yuzu-8f43b05d6b1be260f68907c581b8e3a91cf244d8.tar.xz yuzu-8f43b05d6b1be260f68907c581b8e3a91cf244d8.tar.zst yuzu-8f43b05d6b1be260f68907c581b8e3a91cf244d8.zip |
Diffstat (limited to '')
-rw-r--r-- | src/video_core/renderer_vulkan/vk_update_descriptor.cpp | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/src/video_core/renderer_vulkan/vk_update_descriptor.cpp b/src/video_core/renderer_vulkan/vk_update_descriptor.cpp index 009dab0b6..0630ebda5 100644 --- a/src/video_core/renderer_vulkan/vk_update_descriptor.cpp +++ b/src/video_core/renderer_vulkan/vk_update_descriptor.cpp @@ -14,13 +14,18 @@ namespace Vulkan { UpdateDescriptorQueue::UpdateDescriptorQueue(const Device& device_, Scheduler& scheduler_) : device{device_}, scheduler{scheduler_} { + payload_start = payload.data(); payload_cursor = payload.data(); } UpdateDescriptorQueue::~UpdateDescriptorQueue() = default; void UpdateDescriptorQueue::TickFrame() { - payload_cursor = payload.data(); + if (++frame_index >= FRAMES_IN_FLIGHT) { + frame_index = 0; + } + payload_start = payload.data() + frame_index * FRAME_PAYLOAD_SIZE; + payload_cursor = payload_start; } void UpdateDescriptorQueue::Acquire() { @@ -28,10 +33,10 @@ void UpdateDescriptorQueue::Acquire() { // This is the maximum number of entries a single draw call might use. static constexpr size_t MIN_ENTRIES = 0x400; - if (std::distance(payload.data(), payload_cursor) + MIN_ENTRIES >= payload.max_size()) { + if (std::distance(payload_start, payload_cursor) + MIN_ENTRIES >= FRAME_PAYLOAD_SIZE) { LOG_WARNING(Render_Vulkan, "Payload overflow, waiting for worker thread"); scheduler.WaitWorker(); - payload_cursor = payload.data(); + payload_cursor = payload_start; } upload_start = payload_cursor; } |