Browse Source

Refactor GPU tick waiting and barrier handling

pull/3524/head
MaranBr 4 weeks ago
committed by crueter
parent
commit
50b35fbeed
  1. 2
      src/video_core/renderer_vulkan/vk_scheduler.cpp
  2. 2
      src/video_core/renderer_vulkan/vk_scheduler.h
  3. 5
      src/video_core/renderer_vulkan/vk_swapchain.cpp

2
src/video_core/renderer_vulkan/vk_scheduler.cpp

@ -347,7 +347,7 @@ void Scheduler::EndRenderPass()
Record([num_images = num_renderpass_images, Record([num_images = num_renderpass_images,
images = renderpass_images, images = renderpass_images,
ranges = renderpass_image_ranges](vk::CommandBuffer cmdbuf) { ranges = renderpass_image_ranges](vk::CommandBuffer cmdbuf) {
std::array<VkImageMemoryBarrier, 9> barriers;
std::vector<VkImageMemoryBarrier> barriers(num_images);
VkPipelineStageFlags src_stages = 0; VkPipelineStageFlags src_stages = 0;
for (size_t i = 0; i < num_images; ++i) { for (size_t i = 0; i < num_images; ++i) {
const VkImageSubresourceRange& range = ranges[i]; const VkImageSubresourceRange& range = ranges[i];

2
src/video_core/renderer_vulkan/vk_scheduler.h

@ -113,7 +113,7 @@ public:
/// Waits for the given tick to trigger on the GPU. /// Waits for the given tick to trigger on the GPU.
void Wait(u64 tick) { void Wait(u64 tick) {
if (tick >= master_semaphore->CurrentTick()) {
if (tick > master_semaphore->CurrentTick() && !chunk->Empty()) {
// Make sure we are not waiting for the current tick without signalling // Make sure we are not waiting for the current tick without signalling
Flush(); Flush();
} }

5
src/video_core/renderer_vulkan/vk_swapchain.cpp

@ -194,7 +194,10 @@ bool Swapchain::AcquireNextImage() {
break; break;
} }
scheduler.Wait(resource_ticks[image_index]);
if (resource_ticks[image_index] != 0 && !scheduler.IsFree(resource_ticks[image_index])) {
scheduler.Wait(resource_ticks[image_index]);
}
resource_ticks[image_index] = scheduler.CurrentTick(); resource_ticks[image_index] = scheduler.CurrentTick();
return is_suboptimal || is_outdated; return is_suboptimal || is_outdated;

Loading…
Cancel
Save