1#ifndef VULKAN_PHYSICALDEVICE
2#define VULKAN_PHYSICALDEVICE
4#include <vulkan/vulkan.h>
11namespace Vulkan {
class PhysicalDevice;
class Instance;
class WindowSurface;
enum class QueueFamily; }
26 const VkPhysicalDevice&
operator+()
const;
44 VkPhysicalDeviceProperties limits;
45 vkGetPhysicalDeviceProperties(gpu, &limits);
58 static bool isGpuSuitable(
const PhysicalDevice& gpu,
const WindowSurface& surface,
const std::vector<const char*> requiredDeviceExtensions);
66 static void extensionsSupport(
const PhysicalDevice& gpu,
const std::vector<const char*>& requiredDeviceExtensions);
70 static std::map<QueueFamily, int> chooseFewestPossible(std::map<
QueueFamily, std::vector<int>> families);
73 VkPhysicalDevice gpu = VK_NULL_HANDLE;
74 std::map<QueueFamily, int> queueFamiliesIndices;
75 const std::vector<const char*> requiredDeviceExtensions = { VK_KHR_SWAPCHAIN_EXTENSION_NAME };
Definition: Instance.h:15
Represents the GPU (or any other device) that will be used with Vulkan to perform computer graphics.
Definition: PhysicalDevice.h:17
const VkPhysicalDevice & operator+() const
Returns the underlying VkPhyisicalDevice object.
Definition: PhysicalDevice.cpp:18
std::vector< const char * > getRequiredDeviceExtensions() const
Definition: PhysicalDevice.cpp:30
std::map< QueueFamily, int > getQueueFamiliesIndices() const
Returns the indices of the graphics and presentation queue families (they can be the same family).
Definition: PhysicalDevice.cpp:24
PhysicalDevice(const Instance &vulkanInstance, const WindowSurface &surface)
Definition: PhysicalDevice.cpp:11
VkPhysicalDeviceProperties getProperties() const
Definition: PhysicalDevice.h:43
A window surface is the connection between Vulkan and the OS windows environment.
Definition: WindowSurface.h:13
Types of queue families.
Definition: Animations.h:17
QueueFamily
Definition: QueueFamily.h:8