Removed duplication.

This commit is contained in:
Anish Bhobe 2024-06-27 01:34:58 +02:00
parent e120b38066
commit 8769215437
4 changed files with 38 additions and 61 deletions

View File

@ -12,7 +12,7 @@ constexpr eastl::array VALIDATION_LAYERS = {
}; };
VKAPI_ATTR b32 VKAPI_CALL VKAPI_ATTR b32 VKAPI_CALL
debugCallback(VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity, VkDebugUtilsMessageTypeFlagsEXT messageType, DebugCallback(VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity, VkDebugUtilsMessageTypeFlagsEXT messageType,
const VkDebugUtilsMessengerCallbackDataEXT *callbackData, [[maybe_unused]] void *userData) const VkDebugUtilsMessengerCallbackDataEXT *callbackData, [[maybe_unused]] void *userData)
{ {
using Severity = vk::DebugUtilsMessageSeverityFlagsEXT; using Severity = vk::DebugUtilsMessageSeverityFlagsEXT;
@ -57,7 +57,7 @@ Context::Context(cstr appName, Version version, bool enableValidation)
.messageType = vk::DebugUtilsMessageTypeFlagBitsEXT::eGeneral | .messageType = vk::DebugUtilsMessageTypeFlagBitsEXT::eGeneral |
vk::DebugUtilsMessageTypeFlagBitsEXT::ePerformance | vk::DebugUtilsMessageTypeFlagBitsEXT::ePerformance |
vk::DebugUtilsMessageTypeFlagBitsEXT::eValidation, vk::DebugUtilsMessageTypeFlagBitsEXT::eValidation,
.pfnUserCallback = debugCallback, .pfnUserCallback = DebugCallback,
.pUserData = nullptr, .pUserData = nullptr,
}; };

View File

@ -8,8 +8,20 @@
#include "context.h" #include "context.h"
#include "window.h" #include "window.h"
[[nodiscard]] vk::SurfaceCapabilitiesKHR
GetSurfaceCapabilities(const vk::PhysicalDevice physicalDevice, const vk::SurfaceKHR surface)
{
vk::SurfaceCapabilitiesKHR surfaceCapabilities;
vk::Result result = physicalDevice.getSurfaceCapabilitiesKHR(surface, &surfaceCapabilities);
ERROR_IF(failed(result), "Fetching surface capabilities failed. Cause: {}", result)
THEN_ABORT(result);
return surfaceCapabilities;
}
[[nodiscard]] eastl::vector<vk::SurfaceFormatKHR> [[nodiscard]] eastl::vector<vk::SurfaceFormatKHR>
getSurfaceFormats(const vk::SurfaceKHR surface, const vk::PhysicalDevice physicalDevice) GetSurfaceFormats(const vk::PhysicalDevice physicalDevice, const vk::SurfaceKHR surface)
{ {
// vk::Result::eIncomplete should not occur in this function. The rest are errors. Thus, abort is allowed. // vk::Result::eIncomplete should not occur in this function. The rest are errors. Thus, abort is allowed.
u32 count = 0; u32 count = 0;
@ -26,7 +38,7 @@ getSurfaceFormats(const vk::SurfaceKHR surface, const vk::PhysicalDevice physica
} }
[[nodiscard]] eastl::vector<vk::PresentModeKHR> [[nodiscard]] eastl::vector<vk::PresentModeKHR>
getSurfacePresentModes(const vk::SurfaceKHR surface, const vk::PhysicalDevice physicalDevice) GetSurfacePresentModes(const vk::PhysicalDevice physicalDevice, const vk::SurfaceKHR surface)
{ {
// vk::Result::eIncomplete should not occur in this function. The rest are errors. Thus, abort is allowed. // vk::Result::eIncomplete should not occur in this function. The rest are errors. Thus, abort is allowed.
u32 count = 0; u32 count = 0;
@ -43,7 +55,7 @@ getSurfacePresentModes(const vk::SurfaceKHR surface, const vk::PhysicalDevice ph
} }
[[nodiscard]] bool [[nodiscard]] bool
getQueuePresentSupport(const u32 queueFamilyIndex, vk::SurfaceKHR surface, const vk::PhysicalDevice physicalDevice) GetQueuePresentSupport(const u32 queueFamilyIndex, vk::SurfaceKHR surface, const vk::PhysicalDevice physicalDevice)
{ {
b32 supported = false; b32 supported = false;
const vk::Result result = physicalDevice.getSurfaceSupportKHR(queueFamilyIndex, surface, &supported); const vk::Result result = physicalDevice.getSurfaceSupportKHR(queueFamilyIndex, surface, &supported);
@ -54,7 +66,7 @@ getQueuePresentSupport(const u32 queueFamilyIndex, vk::SurfaceKHR surface, const
} }
[[nodiscard]] eastl::fixed_vector<vk::QueueFamilyProperties, 32> [[nodiscard]] eastl::fixed_vector<vk::QueueFamilyProperties, 32>
getQueueFamilyProperties(const vk::PhysicalDevice physicalDevice) GetQueueFamilyProperties(const vk::PhysicalDevice physicalDevice)
{ {
// Devices rarely have more than 32 queue families. Thus fixed vector // Devices rarely have more than 32 queue families. Thus fixed vector
u32 count = 0; u32 count = 0;
@ -68,10 +80,10 @@ getQueueFamilyProperties(const vk::PhysicalDevice physicalDevice)
// Size 384 return. // Size 384 return.
[[nodiscard]] eastl::vector<QueueFamilyInfo> [[nodiscard]] eastl::vector<QueueFamilyInfo>
getQueueFamilies(const vk::SurfaceKHR surface, const vk::PhysicalDevice physicalDevice) GetQueueFamilies(const vk::SurfaceKHR surface, const vk::PhysicalDevice physicalDevice)
{ {
auto queueFamilyProperties = getQueueFamilyProperties(physicalDevice); auto queueFamilyProperties = GetQueueFamilyProperties(physicalDevice);
eastl::vector<QueueFamilyInfo> queueFamilyInfos; eastl::vector<QueueFamilyInfo> queueFamilyInfos;
queueFamilyInfos.reserve(queueFamilyProperties.size()); queueFamilyInfos.reserve(queueFamilyProperties.size());
@ -96,7 +108,7 @@ getQueueFamilies(const vk::SurfaceKHR surface, const vk::PhysicalDevice physical
support |= QueueSupportFlagBits::eCompute; support |= QueueSupportFlagBits::eCompute;
} }
if (getQueuePresentSupport(familyIndex, surface, physicalDevice)) if (GetQueuePresentSupport(familyIndex, surface, physicalDevice))
{ {
support |= QueueSupportFlagBits::ePresent; support |= QueueSupportFlagBits::ePresent;
} }
@ -118,15 +130,15 @@ PhysicalDevice::PhysicalDevice(const vk::SurfaceKHR surface, const vk::PhysicalD
physicalDevice.getProperties(&m_DeviceProperties); physicalDevice.getProperties(&m_DeviceProperties);
physicalDevice.getFeatures(&m_DeviceFeatures); physicalDevice.getFeatures(&m_DeviceFeatures);
m_SurfaceFormats = getSurfaceFormats(surface, physicalDevice); m_SurfaceFormats = GetSurfaceFormats(physicalDevice, surface);
m_PresentModes = getSurfacePresentModes(surface, physicalDevice); m_PresentModes = GetSurfacePresentModes(physicalDevice, surface);
m_QueueFamilies = getQueueFamilies(surface, physicalDevice); m_QueueFamilies = GetQueueFamilies(surface, physicalDevice);
m_PhysicalDevice = physicalDevice; m_PhysicalDevice = physicalDevice;
} }
eastl::fixed_vector<vk::PhysicalDevice, 8> eastl::fixed_vector<vk::PhysicalDevice, 8>
enumeratePhysicalDevices(const vk::Instance instance) EnumeratePhysicalDevices(const vk::Instance instance)
{ {
u32 count = 0; u32 count = 0;
vk::Result result = instance.enumeratePhysicalDevices(&count, nullptr); vk::Result result = instance.enumeratePhysicalDevices(&count, nullptr);
@ -144,7 +156,7 @@ enumeratePhysicalDevices(const vk::Instance instance)
PhysicalDevices::PhysicalDevices(const Window *window, const Context *context) PhysicalDevices::PhysicalDevices(const Window *window, const Context *context)
{ {
auto surface = window->m_Surface; auto surface = window->m_Surface;
auto physicalDevices = enumeratePhysicalDevices(context->m_Instance); auto physicalDevices = EnumeratePhysicalDevices(context->m_Instance);
for (auto physicalDevice : physicalDevices) for (auto physicalDevice : physicalDevices)
{ {
this->emplace_back(surface, physicalDevice); this->emplace_back(surface, physicalDevice);

View File

@ -28,6 +28,15 @@ struct QueueFamilyInfo
QueueSupportFlags m_Support; QueueSupportFlags m_Support;
}; };
[[nodiscard]] vk::SurfaceCapabilitiesKHR
GetSurfaceCapabilities(vk::PhysicalDevice physicalDevice, vk::SurfaceKHR surface);
[[nodiscard]] eastl::vector<vk::SurfaceFormatKHR>
GetSurfaceFormats(vk::PhysicalDevice physicalDevice, vk::SurfaceKHR surface);
[[nodiscard]] eastl::vector<vk::PresentModeKHR>
GetSurfacePresentModes(vk::PhysicalDevice physicalDevice, vk::SurfaceKHR surface);
struct PhysicalDevice struct PhysicalDevice
{ {
vk::PhysicalDevice m_PhysicalDevice; vk::PhysicalDevice m_PhysicalDevice;

View File

@ -9,50 +9,6 @@
#include "physical_device.h" #include "physical_device.h"
#include "window.h" #include "window.h"
vk::SurfaceCapabilitiesKHR
getSurfaceCapabilities(vk::PhysicalDevice physicalDevice, const vk::SurfaceKHR surface)
{
vk::SurfaceCapabilitiesKHR surfaceCapabilities;
vk::Result result = physicalDevice.getSurfaceCapabilitiesKHR(surface, &surfaceCapabilities);
ERROR_IF(failed(result), "Fetching surface capabilities failed. Cause: {}", result)
THEN_ABORT(result);
return surfaceCapabilities;
}
eastl::vector<vk::SurfaceFormatKHR>
getSurfaceFormats(vk::PhysicalDevice physicalDevice, const vk::SurfaceKHR surface)
{
u32 count = 0;
vk::Result result = physicalDevice.getSurfaceFormatsKHR(surface, &count, nullptr);
ERROR_IF(failed(result), "Fetching surface formats failed. Cause: {}", result)
THEN_ABORT(result);
eastl::vector<vk::SurfaceFormatKHR> surfaceFormats(count);
result = physicalDevice.getSurfaceFormatsKHR(surface, &count, surfaceFormats.data());
ERROR_IF(failed(result), "Fetching surface formats failed. Cause: {}", result)
THEN_ABORT(result);
return surfaceFormats;
}
eastl::vector<vk::PresentModeKHR>
getSurfacePresentModes(vk::PhysicalDevice physicalDevice, const vk::SurfaceKHR surface)
{
u32 count = 0;
vk::Result result = physicalDevice.getSurfacePresentModesKHR(surface, &count, nullptr);
ERROR_IF(failed(result), "Fetching surface present modes failed. Cause: {}", result)
THEN_ABORT(result);
eastl::vector<vk::PresentModeKHR> surfacePresentModes(count);
result = physicalDevice.getSurfacePresentModesKHR(surface, &count, surfacePresentModes.data());
ERROR_IF(failed(result), "Fetching surface present modes failed. Cause: {}", result)
THEN_ABORT(result);
return surfacePresentModes;
}
Swapchain::Swapchain(const Window *window, const Device *device, NameString &&name) Swapchain::Swapchain(const Window *window, const Device *device, NameString &&name)
: m_Device(device) : m_Device(device)
, m_Name(std::move(name)) , m_Name(std::move(name))
@ -73,9 +29,9 @@ Swapchain::~Swapchain()
void void
Swapchain::Create(const Window *window) Swapchain::Create(const Window *window)
{ {
auto surfaceCapabilities = getSurfaceCapabilities(m_Device->m_PhysicalDevice, window->m_Surface); auto surfaceCapabilities = GetSurfaceCapabilities(m_Device->m_PhysicalDevice, window->m_Surface);
auto surfaceFormats = getSurfaceFormats(m_Device->m_PhysicalDevice, window->m_Surface); auto surfaceFormats = GetSurfaceFormats(m_Device->m_PhysicalDevice, window->m_Surface);
auto presentModes = getSurfacePresentModes(m_Device->m_PhysicalDevice, window->m_Surface); auto presentModes = GetSurfacePresentModes(m_Device->m_PhysicalDevice, window->m_Surface);
vk::Format swapchainFormat = vk::Format::eUndefined; vk::Format swapchainFormat = vk::Format::eUndefined;
vk::ColorSpaceKHR swapchainColorSpace = vk::ColorSpaceKHR::eSrgbNonlinear; vk::ColorSpaceKHR swapchainColorSpace = vk::ColorSpaceKHR::eSrgbNonlinear;