mirror of
https://github.com/MobileGL-Dev/MobileGL
synced 2026-09-12 14:18:31 +09:00
[Misc] (MG_Backend/DirectVulkan): Prioritize MAILBOX/IMMEDIATE present modes.
This commit is contained in:
@@ -47,6 +47,29 @@ namespace MobileGL::MG_Backend::DirectVulkan {
|
|||||||
Framebuffers = std::move(fbs);
|
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() {
|
void SwapchainManager::CreateSwapchainInternal() {
|
||||||
VkSurfaceCapabilitiesKHR caps;
|
VkSurfaceCapabilitiesKHR caps;
|
||||||
ThrowIfFailed(vkGetPhysicalDeviceSurfaceCapabilitiesKHR(Ctx.GetPhysicalDevice(), Ctx.GetSurface(), &caps),
|
ThrowIfFailed(vkGetPhysicalDeviceSurfaceCapabilitiesKHR(Ctx.GetPhysicalDevice(), Ctx.GetSurface(), &caps),
|
||||||
@@ -66,7 +89,7 @@ namespace MobileGL::MG_Backend::DirectVulkan {
|
|||||||
sci.imageSharingMode = VK_SHARING_MODE_EXCLUSIVE;
|
sci.imageSharingMode = VK_SHARING_MODE_EXCLUSIVE;
|
||||||
sci.preTransform = caps.currentTransform;
|
sci.preTransform = caps.currentTransform;
|
||||||
sci.compositeAlpha = VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR;
|
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");
|
ThrowIfFailed(vkCreateSwapchainKHR(Ctx.GetDevice(), &sci, nullptr, &Swapchain), "vkCreateSwapchainKHR");
|
||||||
|
|
||||||
|
|||||||
@@ -41,5 +41,6 @@ namespace MobileGL::MG_Backend::DirectVulkan {
|
|||||||
void CreateSwapchainInternal();
|
void CreateSwapchainInternal();
|
||||||
void CreateImageViews();
|
void CreateImageViews();
|
||||||
void DestroyImageViews();
|
void DestroyImageViews();
|
||||||
|
VkPresentModeKHR QueryPossiblePresentMode();
|
||||||
};
|
};
|
||||||
} // namespace MobileGL::MG_Backend::DirectVulkan
|
} // namespace MobileGL::MG_Backend::DirectVulkan
|
||||||
Reference in New Issue
Block a user