38 lines
1.4 KiB
C++
38 lines
1.4 KiB
C++
#pragma once
|
|
|
|
#include <vulkan/vulkan_core.h>
|
|
|
|
#include <vector>
|
|
|
|
namespace VkObjects
|
|
{
|
|
class Surface;
|
|
class Instance;
|
|
|
|
class PhysicalDevice final
|
|
{
|
|
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;
|
|
};
|
|
} |