summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
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
commitaabfeef8e97a1fe863dfa7727751453b590a0bf6 (patch)
tree47f4f871507d18dc5ed0331a05eb4f8b7f364f2e
parent0c491e7bd7aee2c3d350d96d8689a8f39490263b (diff)
parentd88a02f77633f098c3ab7a568b2d7c04399798ff (diff)
Merge pull request #5815 from couriersud/master
Fix waitvsync for bgfx vulkan backend. [Couriersud]
-rw-r--r--3rdparty/bgfx/src/renderer_vk.cpp39
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) );