From 496fac59bd6da12caf710d8276638462fc6c0d46 Mon Sep 17 00:00:00 2001 From: David Gonzalez Martin Date: Wed, 6 Nov 2024 20:12:08 -0600 Subject: [PATCH] Minor tweaks --- bootstrap/bloat-buster/gui.c | 159 +++++++++++++++++++++++------------ 1 file changed, 107 insertions(+), 52 deletions(-) diff --git a/bootstrap/bloat-buster/gui.c b/bootstrap/bloat-buster/gui.c index 0c4541f..a1b2295 100644 --- a/bootstrap/bloat-buster/gui.c +++ b/bootstrap/bloat-buster/gui.c @@ -178,6 +178,7 @@ void run_app(Arena* arena) int initial_width = 1024; int initial_height = 768; GLFWwindow* window = glfwCreateWindow(initial_width, initial_height, "Bloat Buster", 0, 0); + if (!window) { failed_execution(); @@ -307,9 +308,9 @@ void run_app(Arena* arena) } } - VkSurfaceCapabilitiesKHR capabilities; + VkSurfaceCapabilitiesKHR original_capabilities; { - VkResult result = vkGetPhysicalDeviceSurfaceCapabilitiesKHR(physical_device, surface, &capabilities); + VkResult result = vkGetPhysicalDeviceSurfaceCapabilitiesKHR(physical_device, surface, &original_capabilities); if (result != VK_SUCCESS) { failed_execution(); @@ -317,30 +318,31 @@ void run_app(Arena* arena) } VkSwapchainKHR swapchain = 0; + VkSwapchainCreateInfoKHR swapchain_create_info = { + .sType = VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR, + .pNext = 0, + .flags = 0, + .surface = surface, + .minImageCount = original_capabilities.minImageCount, + .imageFormat = VK_FORMAT_B8G8R8A8_UNORM, + .imageColorSpace = 0, + .imageExtent = original_capabilities.currentExtent, + .imageArrayLayers = 1, + .imageUsage = VK_IMAGE_USAGE_TRANSFER_DST_BIT, + .imageSharingMode = VK_SHARING_MODE_EXCLUSIVE, + .queueFamilyIndexCount = 0, + .pQueueFamilyIndices = 0, + .preTransform = original_capabilities.currentTransform, + .compositeAlpha = VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR, + .presentMode = VK_PRESENT_MODE_FIFO_KHR, + .clipped = 0, + .oldSwapchain = swapchain, + }; + { - VkSwapchainCreateInfoKHR create_info = { - .sType = VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR, - .pNext = 0, - .flags = 0, - .surface = surface, - .minImageCount = capabilities.minImageCount, - .imageFormat = VK_FORMAT_B8G8R8A8_UNORM, - .imageColorSpace = 0, - .imageExtent = { .width = (u32)initial_width, .height = (u32)initial_height, }, - .imageArrayLayers = 1, - .imageUsage = VK_IMAGE_USAGE_TRANSFER_DST_BIT, - .imageSharingMode = VK_SHARING_MODE_EXCLUSIVE, - .queueFamilyIndexCount = 0, - .pQueueFamilyIndices = 0, - .preTransform = capabilities.currentTransform, - .compositeAlpha = VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR, - .presentMode = VK_PRESENT_MODE_FIFO_KHR, - .clipped = 0, - .oldSwapchain = swapchain, - }; VkSwapchainKHR new_swapchain; - VkResult result = vkCreateSwapchainKHR(device, &create_info, allocation_callbacks, &new_swapchain); + VkResult result = vkCreateSwapchainKHR(device, &swapchain_create_info, allocation_callbacks, &new_swapchain); if (result != VK_SUCCESS) { failed_execution(); @@ -450,37 +452,81 @@ void run_app(Arena* arena) { glfwPollEvents(); + int width; + int height; + glfwGetWindowSize(window, &width, &height); + + if (width == 0 || height == 0) + { + continue; + } + u32 frame_index = frame_number % frame_overlap; - u32 fence_count = 1; - VkBool32 wait_all = 1; - auto timeout = ~(u64)0; - - { - VkResult result = vkWaitForFences(device, fence_count, &render_fences[frame_index], wait_all, timeout); - if (result != VK_SUCCESS) - { - failed_execution(); - } - } - - { - VkResult result = vkResetFences(device, fence_count, &render_fences[frame_index]); - if (result != VK_SUCCESS) - { - failed_execution(); - } - } - u32 swapchain_image_index; + { - VkFence image_fence = 0; - VkResult result = vkAcquireNextImageKHR(device, swapchain, timeout, swapchain_semaphores[frame_index], image_fence, &swapchain_image_index); - if (result != VK_SUBOPTIMAL_KHR) + auto timeout = ~(u64)0; + { - if (result != VK_SUCCESS) + u32 fence_count = 1; + { + VkBool32 wait_all = 1; + VkResult result = vkWaitForFences(device, fence_count, &render_fences[frame_index], wait_all, timeout); + if (result != VK_SUCCESS) + { + failed_execution(); + } + } + + { + VkResult result = vkResetFences(device, fence_count, &render_fences[frame_index]); + if (result != VK_SUCCESS) + { + failed_execution(); + } + } + } + + { + VkSurfaceCapabilitiesKHR capabilities; + { + VkResult result = vkGetPhysicalDeviceSurfaceCapabilitiesKHR(physical_device, surface, &capabilities); + if (result != VK_SUCCESS) + { + failed_execution(); + } + } + + assert(capabilities.minImageCount == original_capabilities.minImageCount); + assert(capabilities.maxImageCount == original_capabilities.maxImageCount); + assert(capabilities.currentExtent.width == original_capabilities.currentExtent.width); + assert(capabilities.currentExtent.height == original_capabilities.currentExtent.height); + assert(capabilities.minImageExtent.width == original_capabilities.minImageExtent.width); + assert(capabilities.minImageExtent.height == original_capabilities.minImageExtent.height); + assert(capabilities.maxImageExtent.width == original_capabilities.maxImageExtent.width); + assert(capabilities.maxImageExtent.height == original_capabilities.maxImageExtent.height); + assert(capabilities.maxImageArrayLayers == original_capabilities.maxImageArrayLayers); + assert(capabilities.supportedTransforms == original_capabilities.supportedTransforms); + assert(capabilities.currentTransform == original_capabilities.currentTransform); + assert(capabilities.supportedCompositeAlpha ==original_capabilities.supportedCompositeAlpha); + assert(capabilities.supportedUsageFlags == original_capabilities.supportedUsageFlags) + + assert(capabilities.currentExtent.width == initial_width); + assert(capabilities.currentExtent.height == initial_height); + assert(capabilities.currentTransform == swapchain_create_info.preTransform); + + print("Window size: {u32}x{u32}\nCapabilities: {u32}x{u32}\n", width, height, capabilities.currentExtent.width, capabilities.currentExtent.height); + + VkFence image_fence = 0; + VkResult result = vkAcquireNextImageKHR(device, swapchain, timeout, swapchain_semaphores[frame_index], image_fence, &swapchain_image_index); + // if (result != VK_SUBOPTIMAL_KHR) + // { + print("Acquire result: {u32}\n", result); + if (result != VK_SUCCESS && result != VK_SUBOPTIMAL_KHR) { failed_execution(); } + // } } } @@ -598,14 +644,23 @@ void run_app(Arena* arena) }; result = vkQueuePresentKHR(graphics_queue, &present_info); - if (result != VK_SUBOPTIMAL_KHR) + print("Present result: {u32}\n", result); + if (result != VK_SUCCESS && result != VK_SUBOPTIMAL_KHR) { - if (result != VK_SUCCESS) - { - failed_execution(); - } + failed_execution(); } + // } } + + // { + // VkResult result = vkDeviceWaitIdle(device); + // if (result != VK_SUCCESS) + // { + // failed_execution(); + // } + // } + // + // vkDestroyInstance(instance, allocation_callbacks); } #endif