|
|
@@ -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;
|
|
|
}
|