Files
UwU-Engine/UwURenderEngine/RenderEngine/VkObjects/PhysicalDevice.hpp
T

38 lines
1.4 KiB
C++

#pragma once
#include <vulkan/vulkan_core.h>
#include <vector>
namespace VkObjects
{
class Surface;
class Instance;
class PhysicalDevice
{
public:
struct QueueFamilyIndices
{
uint32_t graphics_family = 0;
uint32_t present_family = 0;
uint32_t transfer_family = 0;
};
QueueFamilyIndices queue_family_indices_{};
private:
VkPhysicalDevice physical_device_ = nullptr;
// Выбрасывает исключение если не подходит
static QueueFamilyIndices is_device_suitable(VkPhysicalDevice device, VkSurfaceKHR surface, const std::vector<const char*>& device_extensions);
static bool check_device_extensions_support(VkPhysicalDevice device, const std::vector<const char*>& device_extensions);
static QueueFamilyIndices find_queue_family_indices(VkPhysicalDevice physical_device,
VkSurfaceKHR surface);
public:
explicit PhysicalDevice(const Instance& instance, const Surface& surface, const std::vector<const char*>& device_extensions);
inline VkPhysicalDevice get_native() const { return physical_device_; }
inline QueueFamilyIndices get_queue_family_indices() const { return queue_family_indices_; }
std::vector<uint32_t> get_unique_family_indices() const;
};
}