Removed duplication.
This commit is contained in:
parent
e120b38066
commit
8769215437
|
|
@ -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,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue