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
debugCallback(VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity, VkDebugUtilsMessageTypeFlagsEXT messageType,
DebugCallback(VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity, VkDebugUtilsMessageTypeFlagsEXT messageType,
const VkDebugUtilsMessengerCallbackDataEXT *callbackData, [[maybe_unused]] void *userData)
{
using Severity = vk::DebugUtilsMessageSeverityFlagsEXT;
@ -57,7 +57,7 @@ Context::Context(cstr appName, Version version, bool enableValidation)
.messageType = vk::DebugUtilsMessageTypeFlagBitsEXT::eGeneral |
vk::DebugUtilsMessageTypeFlagBitsEXT::ePerformance |
vk::DebugUtilsMessageTypeFlagBitsEXT::eValidation,
.pfnUserCallback = debugCallback,
.pfnUserCallback = DebugCallback,
.pUserData = nullptr,
};

View File

@ -8,8 +8,20 @@
#include "context.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>
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.
u32 count = 0;
@ -26,7 +38,7 @@ getSurfaceFormats(const vk::SurfaceKHR surface, const vk::PhysicalDevice physica
}
[[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.
u32 count = 0;
@ -43,7 +55,7 @@ getSurfacePresentModes(const vk::SurfaceKHR surface, const vk::PhysicalDevice ph
}
[[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;
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>
getQueueFamilyProperties(const vk::PhysicalDevice physicalDevice)
GetQueueFamilyProperties(const vk::PhysicalDevice physicalDevice)
{
// Devices rarely have more than 32 queue families. Thus fixed vector
u32 count = 0;
@ -68,10 +80,10 @@ getQueueFamilyProperties(const vk::PhysicalDevice physicalDevice)
// Size 384 return.
[[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;
queueFamilyInfos.reserve(queueFamilyProperties.size());
@ -96,7 +108,7 @@ getQueueFamilies(const vk::SurfaceKHR surface, const vk::PhysicalDevice physical
support |= QueueSupportFlagBits::eCompute;
}
if (getQueuePresentSupport(familyIndex, surface, physicalDevice))
if (GetQueuePresentSupport(familyIndex, surface, physicalDevice))
{
support |= QueueSupportFlagBits::ePresent;
}
@ -118,15 +130,15 @@ PhysicalDevice::PhysicalDevice(const vk::SurfaceKHR surface, const vk::PhysicalD
physicalDevice.getProperties(&m_DeviceProperties);
physicalDevice.getFeatures(&m_DeviceFeatures);
m_SurfaceFormats = getSurfaceFormats(surface, physicalDevice);
m_PresentModes = getSurfacePresentModes(surface, physicalDevice);
m_QueueFamilies = getQueueFamilies(surface, physicalDevice);
m_SurfaceFormats = GetSurfaceFormats(physicalDevice, surface);
m_PresentModes = GetSurfacePresentModes(physicalDevice, surface);
m_QueueFamilies = GetQueueFamilies(surface, physicalDevice);
m_PhysicalDevice = physicalDevice;
}
eastl::fixed_vector<vk::PhysicalDevice, 8>
enumeratePhysicalDevices(const vk::Instance instance)
EnumeratePhysicalDevices(const vk::Instance instance)
{
u32 count = 0;
vk::Result result = instance.enumeratePhysicalDevices(&count, nullptr);
@ -144,7 +156,7 @@ enumeratePhysicalDevices(const vk::Instance instance)
PhysicalDevices::PhysicalDevices(const Window *window, const Context *context)
{
auto surface = window->m_Surface;
auto physicalDevices = enumeratePhysicalDevices(context->m_Instance);
auto physicalDevices = EnumeratePhysicalDevices(context->m_Instance);
for (auto physicalDevice : physicalDevices)
{
this->emplace_back(surface, physicalDevice);

View File

@ -28,6 +28,15 @@ struct QueueFamilyInfo
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
{
vk::PhysicalDevice m_PhysicalDevice;

View File

@ -9,50 +9,6 @@
#include "physical_device.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)
: m_Device(device)
, m_Name(std::move(name))
@ -73,9 +29,9 @@ Swapchain::~Swapchain()
void
Swapchain::Create(const Window *window)
{
auto surfaceCapabilities = getSurfaceCapabilities(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 surfaceCapabilities = GetSurfaceCapabilities(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);
vk::Format swapchainFormat = vk::Format::eUndefined;
vk::ColorSpaceKHR swapchainColorSpace = vk::ColorSpaceKHR::eSrgbNonlinear;