summaryrefslogtreecommitdiffstats
path: root/src/video_core/renderer_vulkan/vk_update_descriptor.cpp
diff options
context:
space:
mode:
authorGPUCode <geoster3d@gmail.com>2023-04-08 20:53:13 +0200
committerGPUCode <geoster3d@gmail.com>2023-05-01 22:13:24 +0200
commit50791cb974e462c97dc133a619ddc2066961b526 (patch)
treebf385acd61178b4f07dd220077c8a3ef528a9203 /src/video_core/renderer_vulkan/vk_update_descriptor.cpp
parentrenderer_vulkan: Async presentation (diff)
downloadyuzu-50791cb974e462c97dc133a619ddc2066961b526.tar
yuzu-50791cb974e462c97dc133a619ddc2066961b526.tar.gz
yuzu-50791cb974e462c97dc133a619ddc2066961b526.tar.bz2
yuzu-50791cb974e462c97dc133a619ddc2066961b526.tar.lz
yuzu-50791cb974e462c97dc133a619ddc2066961b526.tar.xz
yuzu-50791cb974e462c97dc133a619ddc2066961b526.tar.zst
yuzu-50791cb974e462c97dc133a619ddc2066961b526.zip
Diffstat (limited to 'src/video_core/renderer_vulkan/vk_update_descriptor.cpp')
-rw-r--r--src/video_core/renderer_vulkan/vk_update_descriptor.cpp11
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;
}