summaryrefslogtreecommitdiffstats
path: root/src/video_core/renderer_vulkan/vk_update_descriptor.cpp
diff options
context:
space:
mode:
authorbunnei <bunneidev@gmail.com>2023-05-03 02:54:57 +0200
committerGitHub <noreply@github.com>2023-05-03 02:54:57 +0200
commit8f43b05d6b1be260f68907c581b8e3a91cf244d8 (patch)
treebe95158c22707e828cd57be90c68f9a1f683d3f1 /src/video_core/renderer_vulkan/vk_update_descriptor.cpp
parentMerge pull request #10133 from lat9nq/clang-shadow-and-fallthrough (diff)
parentvk_present_manager: Add toggle for async presentation (diff)
downloadyuzu-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.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;
}