diff options
author | R. Belmont <rb6502@users.noreply.github.com> | 2019-10-28 10:32:52 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-10-28 10:32:52 -0400 |
commit | aabfeef8e97a1fe863dfa7727751453b590a0bf6 (patch) | |
tree | 47f4f871507d18dc5ed0331a05eb4f8b7f364f2e | |
parent | 0c491e7bd7aee2c3d350d96d8689a8f39490263b (diff) | |
parent | d88a02f77633f098c3ab7a568b2d7c04399798ff (diff) |
Merge pull request #5815 from couriersud/master
Fix waitvsync for bgfx vulkan backend. [Couriersud]
-rw-r--r-- | 3rdparty/bgfx/src/renderer_vk.cpp | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/3rdparty/bgfx/src/renderer_vk.cpp b/3rdparty/bgfx/src/renderer_vk.cpp index 579b6c146b8..61ff5862d27 100644 --- a/3rdparty/bgfx/src/renderer_vk.cpp +++ b/3rdparty/bgfx/src/renderer_vk.cpp @@ -2761,6 +2761,45 @@ VK_IMPORT_DEVICE releaseSwapchainFramebuffer(); releaseSwapchain(); +#if 1 + uint32_t numPresentModes(10); + VkPresentModeKHR presentModes[10]; + vkGetPhysicalDeviceSurfacePresentModesKHR(m_physicalDevice, m_surface, &numPresentModes, presentModes); + + // find the best match... + uint32_t presentModeIdx = numPresentModes; + VkPresentModeKHR preferredPresentMode[] = { + VK_PRESENT_MODE_FIFO_KHR, + VK_PRESENT_MODE_FIFO_RELAXED_KHR, + VK_PRESENT_MODE_MAILBOX_KHR, + VK_PRESENT_MODE_IMMEDIATE_KHR, + }; + bool has_vsync[] = {true, true, true, false}; + bool vsync = (flags & BGFX_RESET_VSYNC ? true : false); + + for (uint32_t ii = 0; ii < BX_COUNTOF(preferredPresentMode); ++ii) + { + for (uint32_t jj = 0; jj < numPresentModes; ++jj) + { + if ((presentModes[jj] == preferredPresentMode[ii]) && (vsync == has_vsync[ii])) + { + presentModeIdx = jj; + BX_TRACE("present mode: %d", (int)preferredPresentMode[ii]); + break; + } + } + if (presentModeIdx < numPresentModes) + { + break; + } + } + if (presentModeIdx == numPresentModes) + { + presentModeIdx = 0; + } + m_sci.presentMode = presentModes[presentModeIdx]; + //bx::printf("%d %d %d %d %d\n", flags, BGFX_RESET_VSYNC, presentModeIdx, presentModes[presentModeIdx], numPresentModes); +#endif VkSurfaceCapabilitiesKHR surfaceCapabilities; VK_CHECK(vkGetPhysicalDeviceSurfaceCapabilitiesKHR(m_physicalDevice, m_surface, &surfaceCapabilities) ); |