diff options
| author | hachem <im@hachem.wtf> | 2026-08-23 22:39:47 +0200 |
|---|---|---|
| committer | hachem <im@hachem.wtf> | 2026-08-23 22:39:47 +0200 |
| commit | 90ff03c2fdffc09ddb26bdc7e32c3968a6d274fb (patch) | |
| tree | 2fdb1b6f54c4e380af43c75f1051935587a87faa /src/platform/vulkan/vulkan_swapchain.cpp | |
| parent | 5ea6c14c0e14bacee766ce1280ab2c71564e05ec (diff) | |
[feat]: wire in scene into the simulation engine
Diffstat (limited to 'src/platform/vulkan/vulkan_swapchain.cpp')
| -rw-r--r-- | src/platform/vulkan/vulkan_swapchain.cpp | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/src/platform/vulkan/vulkan_swapchain.cpp b/src/platform/vulkan/vulkan_swapchain.cpp index fe5bd38..5bf2f60 100644 --- a/src/platform/vulkan/vulkan_swapchain.cpp +++ b/src/platform/vulkan/vulkan_swapchain.cpp @@ -117,7 +117,19 @@ namespace Donut::RHI sci.imageExtent = m_extent; sci.imageArrayLayers = 1; sci.imageUsage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT; sci.preTransform = caps.currentTransform; sci.compositeAlpha = VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR; - sci.presentMode = VK_PRESENT_MODE_FIFO_KHR; sci.clipped = VK_TRUE; + // FIFO is always available (vsync). With vsync off, prefer IMMEDIATE + // (uncapped, may tear) then MAILBOX, if the surface supports them. + VkPresentModeKHR present_mode = VK_PRESENT_MODE_FIFO_KHR; + if (!m_vsync) + { + uint32_t pmc = 0; vkGetPhysicalDeviceSurfacePresentModesKHR(m_physical, m_surface, &pmc, nullptr); + std::vector<VkPresentModeKHR> modes(pmc); + vkGetPhysicalDeviceSurfacePresentModesKHR(m_physical, m_surface, &pmc, modes.data()); + auto has = [&](VkPresentModeKHR m){ return std::find(modes.begin(), modes.end(), m) != modes.end(); }; + if (has(VK_PRESENT_MODE_IMMEDIATE_KHR)) present_mode = VK_PRESENT_MODE_IMMEDIATE_KHR; + else if (has(VK_PRESENT_MODE_MAILBOX_KHR)) present_mode = VK_PRESENT_MODE_MAILBOX_KHR; + } + sci.presentMode = present_mode; sci.clipped = VK_TRUE; uint32_t fam[2] = { m_graphics_family, m_present_family }; if (m_graphics_family != m_present_family) { sci.imageSharingMode = VK_SHARING_MODE_CONCURRENT; sci.queueFamilyIndexCount = 2; sci.pQueueFamilyIndices = fam; } |
