summaryrefslogtreecommitdiff
path: root/src/window.cpp
diff options
context:
space:
mode:
authorJonathan Bradley <jcb@pikum.xyz>2023-10-17 16:49:31 -0400
committerJonathan Bradley <jcb@pikum.xyz>2023-10-17 16:49:31 -0400
commiteff34c523b4816bb06ffbc19e6d368cac35f538c (patch)
tree26678623a8b854c99598da149e14e183087e9670 /src/window.cpp
parentf5917baf1f3f7f1766ae3730727f83f7a708439c (diff)
large refactor for tick rate and handling vkPresentMode
Diffstat (limited to 'src/window.cpp')
-rw-r--r--src/window.cpp55
1 files changed, 41 insertions, 14 deletions
diff --git a/src/window.cpp b/src/window.cpp
index 2a1b905..6655c88 100644
--- a/src/window.cpp
+++ b/src/window.cpp
@@ -51,12 +51,11 @@ unsigned int transferFamilyIndex;
bool shouldRecreateSwapchain = false;
unsigned int CURRENT_FRAME = 0;
unsigned int selectedSurfaceIndex = -1u;
-unsigned int selectedPresentIndex = -1u;
unsigned int swapchainLength = 0u;
VkSwapchainKHR vkSwapchainKHR = VK_NULL_HANDLE;
VkSurfaceFormatKHR vkSurfaceFormatKHR;
VkFormat depthFormat;
-VkPresentModeKHR vkPresentModeKHR;
+VkPresentModeKHR vkPresentModeKHR = VK_PRESENT_MODE_FIFO_KHR;
VkExtent2D extent;
VkImage *swapchainImages = nullptr;
VkImageView *swapchainImageViews = nullptr;
@@ -604,22 +603,46 @@ void CreateSwapchain() {
height = extent.height < surfaceCapabilities.minImageExtent.height ? surfaceCapabilities.minImageExtent.height : extent.height;
extent.height = height > surfaceCapabilities.maxImageExtent.height ? surfaceCapabilities.maxImageExtent.height : height;
- if (selectedPresentIndex == -1u) {
+ vkPresentModeKHR = VK_PRESENT_MODE_FIFO_KHR;
+ if (pkeSettings.graphicsSettings.isWaitingForVsync == false || pkeSettings.graphicsSettings.isFramerateUnlocked == true) {
unsigned int presentModeCount = 0;
vkGetPhysicalDeviceSurfacePresentModesKHR(vkPhysicalDevice, vkSurfaceKHR, &presentModeCount, nullptr);
VkPresentModeKHR *presentModes = Pke_New<VkPresentModeKHR>(presentModeCount);
vkGetPhysicalDeviceSurfacePresentModesKHR(vkPhysicalDevice, vkSurfaceKHR, &presentModeCount, presentModes);
- unsigned long mailboxIndex = -1;
- unsigned long fifoRelaxedIndex = -1;
+ uint32_t immediateIndex = -1;
+ uint32_t fifoRelaxedIndex = -1;
+ /*
+ uint32_t mailboxIndex = -1;
+ uint32_t fifoIndex = -1;
+ */
for (long i = 0; i < presentModeCount; ++i) {
- if (presentModes[i] != VkPresentModeKHR::VK_PRESENT_MODE_MAILBOX_KHR) {
- mailboxIndex = i;
- } else if (presentModes[i] != VkPresentModeKHR::VK_PRESENT_MODE_FIFO_RELAXED_KHR) {
+ if (presentModes[i] == VkPresentModeKHR::VK_PRESENT_MODE_IMMEDIATE_KHR) {
+ immediateIndex = i;
+ }
+ else if (presentModes[i] == VkPresentModeKHR::VK_PRESENT_MODE_FIFO_RELAXED_KHR) {
fifoRelaxedIndex = i;
}
+ /*
+ // TODO returns 5 swapchain images, which causes other unhandled issues
+ else if (presentModes[i] == VkPresentModeKHR::VK_PRESENT_MODE_MAILBOX_KHR) {
+ mailboxIndex = i;
+ }
+ else if (presentModes[i] == VkPresentModeKHR::VK_PRESENT_MODE_FIFO_KHR) {
+ fifoIndex = i;
+ }
+ */
+ }
+ if (fifoRelaxedIndex != -1) {
+ vkPresentModeKHR = VK_PRESENT_MODE_FIFO_RELAXED_KHR;
+ }
+ /*
+ if (mailboxIndex != -1) {
+ vkPresentModeKHR = VK_PRESENT_MODE_MAILBOX_KHR;
+ } else
+ */
+ if (immediateIndex != -1) {
+ vkPresentModeKHR = VK_PRESENT_MODE_IMMEDIATE_KHR;
}
- selectedPresentIndex = mailboxIndex != -1ul ? mailboxIndex : fifoRelaxedIndex;
- vkPresentModeKHR = presentModes[selectedPresentIndex];
Pke_Delete<VkPresentModeKHR>(presentModes, presentModeCount);
}
@@ -654,7 +677,8 @@ void CreateSwapchain() {
vkSwapchainCreateInfo.queueFamilyIndexCount = 0;
}
- vkCreateSwapchainKHR(vkDevice, &vkSwapchainCreateInfo, vkAllocator, &vkSwapchainKHR);
+ VkResult vkResult = vkCreateSwapchainKHR(vkDevice, &vkSwapchainCreateInfo, vkAllocator, &vkSwapchainKHR);
+ assert(vkResult == VK_SUCCESS);
VkImageSubresourceRange vkImageSubresourceRange;
vkImageSubresourceRange.aspectMask = VkImageAspectFlagBits::VK_IMAGE_ASPECT_COLOR_BIT;
@@ -686,13 +710,16 @@ void CreateSwapchain() {
assert(depthImages == nullptr || depthImages == CAFE_BABE(VkImage));
assert(depthImageViews == nullptr || depthImageViews == CAFE_BABE(VkImageView));
- vkGetSwapchainImagesKHR(vkDevice, vkSwapchainKHR, &swapchainLength, nullptr);
+ vkResult = vkGetSwapchainImagesKHR(vkDevice, vkSwapchainKHR, &swapchainLength, nullptr);
+ assert(vkResult == VK_SUCCESS);
swapchainImages = Pke_New<VkImage>(swapchainLength);
- vkGetSwapchainImagesKHR(vkDevice, vkSwapchainKHR, &swapchainLength, swapchainImages);
+ vkResult = vkGetSwapchainImagesKHR(vkDevice, vkSwapchainKHR, &swapchainLength, swapchainImages);
+ assert(vkResult == VK_SUCCESS);
swapchainImageViews = Pke_New<VkImageView>(swapchainLength);
for (long i = 0; i < swapchainLength; ++i) {
vkImageViewCreateInfo.image = swapchainImages[i];
- vkCreateImageView(vkDevice, &vkImageViewCreateInfo, vkAllocator, &swapchainImageViews[i]);
+ vkResult = vkCreateImageView(vkDevice, &vkImageViewCreateInfo, vkAllocator, &swapchainImageViews[i]);
+ assert(vkResult == VK_SUCCESS);
}
// render target items