idk why there didnt commit
This commit is contained in:
@@ -1,11 +1,12 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include "vulkan_swapchain_support.h"
|
#include "core/presentation_queue/gryphn_presentation_queue.h"
|
||||||
|
#include <vulkan/vulkan.h>
|
||||||
|
|
||||||
struct gnPlatformPresentationQueue {
|
typedef struct gnPlatformPresentationQueue_t {
|
||||||
VkSwapchainKHR swapChain;
|
VkSwapchainKHR swapChain;
|
||||||
VkDevice* device;
|
// VkDevice* device;
|
||||||
gnOutputDevice* outputDevice;
|
// gnOutputDevice* outputDevice;
|
||||||
|
|
||||||
vulkanSwapchainDetails swapchainDetails;
|
// vulkanSwapchainDetails swapchainDetails;
|
||||||
VkResult result;
|
// VkResult result;
|
||||||
};
|
} gnPlatformPresentationQueue;
|
||||||
|
@@ -1,99 +1,99 @@
|
|||||||
#pragma once
|
// #pragma once
|
||||||
#include <vulkan/vulkan.h>
|
// #include <vulkan/vulkan.h>
|
||||||
#include <gryphn/gryphn_utils.h>
|
// #include <gryphn/gryphn_utils.h>
|
||||||
#include <cstdint> // Necessary for uint32_t
|
// #include <cstdint> // Necessary for uint32_t
|
||||||
#include <limits> // Necessary for std::numeric_limits
|
// #include <limits> // Necessary for std::numeric_limits
|
||||||
#include <algorithm> // Necessary for std::clamp
|
// #include <algorithm> // Necessary for std::clamp
|
||||||
#include "vector"
|
// #include "vector"
|
||||||
#include "set"
|
// #include "set"
|
||||||
#include <iostream>
|
// #include <iostream>
|
||||||
|
|
||||||
const std::vector<const char*> deviceExtensions = {
|
// const std::vector<const char*> deviceExtensions = {
|
||||||
VK_KHR_SWAPCHAIN_EXTENSION_NAME,
|
// VK_KHR_SWAPCHAIN_EXTENSION_NAME,
|
||||||
"VK_KHR_portability_subset"
|
// "VK_KHR_portability_subset"
|
||||||
};
|
// };
|
||||||
|
|
||||||
static VkSurfaceFormatKHR chooseSwapSurfaceFormat(const std::vector<VkSurfaceFormatKHR>& availableFormats) {
|
// static VkSurfaceFormatKHR chooseSwapSurfaceFormat(const std::vector<VkSurfaceFormatKHR>& availableFormats) {
|
||||||
for (const auto& availableFormat : availableFormats) {
|
// for (const auto& availableFormat : availableFormats) {
|
||||||
if (availableFormat.format == VK_FORMAT_B8G8R8A8_SRGB && availableFormat.colorSpace == VK_COLOR_SPACE_SRGB_NONLINEAR_KHR) {
|
// if (availableFormat.format == VK_FORMAT_B8G8R8A8_SRGB && availableFormat.colorSpace == VK_COLOR_SPACE_SRGB_NONLINEAR_KHR) {
|
||||||
return availableFormat;
|
// return availableFormat;
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
return availableFormats[0];
|
// return availableFormats[0];
|
||||||
}
|
// }
|
||||||
|
|
||||||
static VkPresentModeKHR chooseSwapPresentMode(const std::vector<VkPresentModeKHR>& availablePresentModes) {
|
// static VkPresentModeKHR chooseSwapPresentMode(const std::vector<VkPresentModeKHR>& availablePresentModes) {
|
||||||
for (const auto& availablePresentMode : availablePresentModes) {
|
// for (const auto& availablePresentMode : availablePresentModes) {
|
||||||
if (availablePresentMode == VK_PRESENT_MODE_MAILBOX_KHR) {
|
// if (availablePresentMode == VK_PRESENT_MODE_MAILBOX_KHR) {
|
||||||
return availablePresentMode;
|
// return availablePresentMode;
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
return VK_PRESENT_MODE_FIFO_KHR;
|
// return VK_PRESENT_MODE_FIFO_KHR;
|
||||||
}
|
// }
|
||||||
|
|
||||||
static VkExtent2D chooseSwapExtent(gnVec2 size, const VkSurfaceCapabilitiesKHR& capabilities) {
|
// static VkExtent2D chooseSwapExtent(gnVec2 size, const VkSurfaceCapabilitiesKHR& capabilities) {
|
||||||
if (capabilities.currentExtent.width != std::numeric_limits<uint32_t>::max()) {
|
// if (capabilities.currentExtent.width != std::numeric_limits<uint32_t>::max()) {
|
||||||
return capabilities.currentExtent;
|
// return capabilities.currentExtent;
|
||||||
} else {
|
// } else {
|
||||||
// int width, height;
|
// // int width, height;
|
||||||
// glfwGetFramebufferSize(window, &width, &height);
|
// // glfwGetFramebufferSize(window, &width, &height);
|
||||||
|
|
||||||
VkExtent2D actualExtent = {
|
// VkExtent2D actualExtent = {
|
||||||
static_cast<uint32_t>(size.x),
|
// static_cast<uint32_t>(size.x),
|
||||||
static_cast<uint32_t>(size.y)
|
// static_cast<uint32_t>(size.y)
|
||||||
};
|
// };
|
||||||
|
|
||||||
actualExtent.width = std::clamp(actualExtent.width, capabilities.minImageExtent.width, capabilities.maxImageExtent.width);
|
// actualExtent.width = std::clamp(actualExtent.width, capabilities.minImageExtent.width, capabilities.maxImageExtent.width);
|
||||||
actualExtent.height = std::clamp(actualExtent.height, capabilities.minImageExtent.height, capabilities.maxImageExtent.height);
|
// actualExtent.height = std::clamp(actualExtent.height, capabilities.minImageExtent.height, capabilities.maxImageExtent.height);
|
||||||
|
|
||||||
return actualExtent;
|
// return actualExtent;
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
static bool checkDeviceExtensionSupport(std::vector<const char*> deviceExtensions, const VkPhysicalDevice& device) {
|
// static bool checkDeviceExtensionSupport(std::vector<const char*> deviceExtensions, const VkPhysicalDevice& device) {
|
||||||
uint32_t extensionCount;
|
// uint32_t extensionCount;
|
||||||
vkEnumerateDeviceExtensionProperties(device, nullptr, &extensionCount, nullptr);
|
// vkEnumerateDeviceExtensionProperties(device, nullptr, &extensionCount, nullptr);
|
||||||
|
|
||||||
std::vector<VkExtensionProperties> availableExtensions(extensionCount);
|
// std::vector<VkExtensionProperties> availableExtensions(extensionCount);
|
||||||
vkEnumerateDeviceExtensionProperties(device, nullptr, &extensionCount, availableExtensions.data());
|
// vkEnumerateDeviceExtensionProperties(device, nullptr, &extensionCount, availableExtensions.data());
|
||||||
|
|
||||||
std::set<std::string> requiredExtensions(deviceExtensions.begin(), deviceExtensions.end());
|
// std::set<std::string> requiredExtensions(deviceExtensions.begin(), deviceExtensions.end());
|
||||||
|
|
||||||
for (const auto& extension : availableExtensions) {
|
// for (const auto& extension : availableExtensions) {
|
||||||
requiredExtensions.erase(extension.extensionName);
|
// requiredExtensions.erase(extension.extensionName);
|
||||||
}
|
// }
|
||||||
|
|
||||||
return requiredExtensions.empty();
|
// return requiredExtensions.empty();
|
||||||
}
|
// }
|
||||||
|
|
||||||
struct SwapChainSupportDetails {
|
// struct SwapChainSupportDetails {
|
||||||
VkSurfaceCapabilitiesKHR capabilities;
|
// VkSurfaceCapabilitiesKHR capabilities;
|
||||||
std::vector<VkSurfaceFormatKHR> formats;
|
// std::vector<VkSurfaceFormatKHR> formats;
|
||||||
std::vector<VkPresentModeKHR> presentModes;
|
// std::vector<VkPresentModeKHR> presentModes;
|
||||||
};
|
// };
|
||||||
|
|
||||||
static SwapChainSupportDetails querySwapChainSupport(const VkSurfaceKHR& surface, const VkPhysicalDevice& device) {
|
// static SwapChainSupportDetails querySwapChainSupport(const VkSurfaceKHR& surface, const VkPhysicalDevice& device) {
|
||||||
SwapChainSupportDetails details;
|
// SwapChainSupportDetails details;
|
||||||
|
|
||||||
vkGetPhysicalDeviceSurfaceCapabilitiesKHR(device, surface, &details.capabilities);
|
// vkGetPhysicalDeviceSurfaceCapabilitiesKHR(device, surface, &details.capabilities);
|
||||||
|
|
||||||
uint32_t formatCount;
|
// uint32_t formatCount;
|
||||||
vkGetPhysicalDeviceSurfaceFormatsKHR(device, surface, &formatCount, nullptr);
|
// vkGetPhysicalDeviceSurfaceFormatsKHR(device, surface, &formatCount, nullptr);
|
||||||
|
|
||||||
if (formatCount != 0) {
|
// if (formatCount != 0) {
|
||||||
details.formats.resize(formatCount);
|
// details.formats.resize(formatCount);
|
||||||
vkGetPhysicalDeviceSurfaceFormatsKHR(device, surface, &formatCount, details.formats.data());
|
// vkGetPhysicalDeviceSurfaceFormatsKHR(device, surface, &formatCount, details.formats.data());
|
||||||
}
|
// }
|
||||||
|
|
||||||
uint32_t presentModeCount;
|
// uint32_t presentModeCount;
|
||||||
vkGetPhysicalDeviceSurfacePresentModesKHR(device, surface, &presentModeCount, nullptr);
|
// vkGetPhysicalDeviceSurfacePresentModesKHR(device, surface, &presentModeCount, nullptr);
|
||||||
|
|
||||||
if (presentModeCount != 0) {
|
// if (presentModeCount != 0) {
|
||||||
details.presentModes.resize(presentModeCount);
|
// details.presentModes.resize(presentModeCount);
|
||||||
vkGetPhysicalDeviceSurfacePresentModesKHR(device, surface, &presentModeCount, details.presentModes.data());
|
// vkGetPhysicalDeviceSurfacePresentModesKHR(device, surface, &presentModeCount, details.presentModes.data());
|
||||||
}
|
// }
|
||||||
|
|
||||||
return details;
|
// return details;
|
||||||
}
|
// }
|
||||||
|
@@ -1,24 +1,24 @@
|
|||||||
#pragma once
|
// #pragma once
|
||||||
#include "vulkan/vulkan.h"
|
// #include "vulkan/vulkan.h"
|
||||||
#include "vulkan_swapchain.h"
|
// #include "vulkan_swapchain.h"
|
||||||
#include "../output_device/vulkan_output_devices.h"
|
// #include "../output_device/vulkan_output_devices.h"
|
||||||
|
|
||||||
struct vulkanSwapchainDetails {
|
// struct vulkanSwapchainDetails {
|
||||||
VkSurfaceFormatKHR surfaceFormat;
|
// VkSurfaceFormatKHR surfaceFormat;
|
||||||
VkPresentModeKHR presentMode;
|
// VkPresentModeKHR presentMode;
|
||||||
VkExtent2D extent;
|
// VkExtent2D extent;
|
||||||
|
|
||||||
SwapChainSupportDetails swapChainSupport;
|
// SwapChainSupportDetails swapChainSupport;
|
||||||
};
|
// };
|
||||||
|
|
||||||
static vulkanSwapchainDetails vulkanGetSwapchainDetails(gnVec2 size, const VkSurfaceKHR& surface, const VkPhysicalDevice& physicalDevice) {
|
// static vulkanSwapchainDetails vulkanGetSwapchainDetails(gnVec2 size, const VkSurfaceKHR& surface, const VkPhysicalDevice& physicalDevice) {
|
||||||
SwapChainSupportDetails swapChainSupport = querySwapChainSupport(surface, physicalDevice);
|
// SwapChainSupportDetails swapChainSupport = querySwapChainSupport(surface, physicalDevice);
|
||||||
|
|
||||||
VkSurfaceFormatKHR surfaceFormat = chooseSwapSurfaceFormat(swapChainSupport.formats);
|
// VkSurfaceFormatKHR surfaceFormat = chooseSwapSurfaceFormat(swapChainSupport.formats);
|
||||||
VkPresentModeKHR presentMode = chooseSwapPresentMode(swapChainSupport.presentModes);
|
// VkPresentModeKHR presentMode = chooseSwapPresentMode(swapChainSupport.presentModes);
|
||||||
VkExtent2D extent = chooseSwapExtent(size, swapChainSupport.capabilities);
|
// VkExtent2D extent = chooseSwapExtent(size, swapChainSupport.capabilities);
|
||||||
|
|
||||||
return {
|
// return {
|
||||||
surfaceFormat, presentMode, extent, swapChainSupport
|
// surfaceFormat, presentMode, extent, swapChainSupport
|
||||||
};
|
// };
|
||||||
}
|
// }
|
||||||
|
Reference in New Issue
Block a user