[Misc] (MG_Backend/DirectVulkan): Prioritize MAILBOX/IMMEDIATE present modes.

This commit is contained in:
BZLZHH
2026-02-08 01:09:12 +08:00
parent 6eeb67f08b
commit 56c98041e3
2 changed files with 25 additions and 1 deletions
@@ -47,6 +47,29 @@ namespace MobileGL::MG_Backend::DirectVulkan {
Framebuffers = std::move(fbs);
}
VkPresentModeKHR SwapchainManager::QueryPossiblePresentMode() {
const auto& surface = Ctx.GetSurface();
const auto& phys = Ctx.GetPhysicalDevice();
Uint32 modeCount;
vkGetPhysicalDeviceSurfacePresentModesKHR(phys, surface, &modeCount, NULL);
Vector<VkPresentModeKHR> modes(modeCount);
vkGetPhysicalDeviceSurfacePresentModesKHR(phys, surface, &modeCount, modes.data());
VkPresentModeKHR presentMode = VK_PRESENT_MODE_FIFO_KHR;
for (auto m : modes) {
if (m == VK_PRESENT_MODE_MAILBOX_KHR) {
presentMode = m;
break;
}
if (m == VK_PRESENT_MODE_IMMEDIATE_KHR) {
presentMode = m;
}
}
return presentMode;
}
void SwapchainManager::CreateSwapchainInternal() {
VkSurfaceCapabilitiesKHR caps;
ThrowIfFailed(vkGetPhysicalDeviceSurfaceCapabilitiesKHR(Ctx.GetPhysicalDevice(), Ctx.GetSurface(), &caps),
@@ -66,7 +89,7 @@ namespace MobileGL::MG_Backend::DirectVulkan {
sci.imageSharingMode = VK_SHARING_MODE_EXCLUSIVE;
sci.preTransform = caps.currentTransform;
sci.compositeAlpha = VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR;
sci.presentMode = VK_PRESENT_MODE_FIFO_KHR;
sci.presentMode = QueryPossiblePresentMode();
ThrowIfFailed(vkCreateSwapchainKHR(Ctx.GetDevice(), &sci, nullptr, &Swapchain), "vkCreateSwapchainKHR");
@@ -41,5 +41,6 @@ namespace MobileGL::MG_Backend::DirectVulkan {
void CreateSwapchainInternal();
void CreateImageViews();
void DestroyImageViews();
VkPresentModeKHR QueryPossiblePresentMode();
};
} // namespace MobileGL::MG_Backend::DirectVulkan