jGL
Loading...
Searching...
No Matches
physicalDevice.h
Go to the documentation of this file.
1#ifndef PHYSICALDEVICE
2#define PHYSICALDEVICE
3
4#include <vulkan/vulkan.h>
5#include <exception>
6#include <vector>
7#include <string>
8#include <sstream>
9#include <map>
10#include <optional>
11#include <set>
12
13#include <jLog/jLog.h>
14
15namespace jGL::Vulkan
16{
17
18 const std::vector<const char *> deviceExtensions =
19 {
20 VK_KHR_SWAPCHAIN_EXTENSION_NAME
21 };
22
24 {
25 std::optional<uint32_t> graphicsFamily;
26 std::optional<uint32_t> presentFamily;
27
29 {
30 return graphicsFamily.has_value() && presentFamily.has_value();
31 }
32 };
33
35 {
36 VkSurfaceCapabilitiesKHR capabilities;
37 std::vector<VkSurfaceFormatKHR> formats;
38 std::vector<VkPresentModeKHR> presentModes;
39 };
40
42 {
43
44 public:
45
46 PhysicalDevice() = default;
47
48 PhysicalDevice(const VkInstance & instance, const VkSurfaceKHR & surface);
49
50 const VkPhysicalDevice & getVkPhysicalDevice() const { return physicalDevice; }
51 const QueueFamilyIndices & getQueueFamilyIndices() const { return queueFamilyIndices; }
52 const SwapchainSupportDetails & getSwapchainSupportDetails() const { return swapchainSupport; }
53 const VkPhysicalDeviceLimits & getLimits() const { return deviceLimits; }
54
55 const VkSampleCountFlagBits & getMaxMsaa() const { return msaaSamples; }
56
57 private:
58
59 VkPhysicalDevice physicalDevice = VK_NULL_HANDLE;
60
61 std::vector<std::pair<std::string, VkPhysicalDevice>> alternatives;
62
63 VkSampleCountFlagBits msaaSamples = VK_SAMPLE_COUNT_1_BIT;
64
65 VkPhysicalDeviceLimits deviceLimits;
66
67 QueueFamilyIndices queueFamilyIndices;
68 SwapchainSupportDetails swapchainSupport;
69
70 void pick(const VkInstance & instance, const VkSurfaceKHR & surface);
71
72 bool isDeviceSuitable(const VkPhysicalDevice device, const VkSurfaceKHR surface) const;
73 QueueFamilyIndices findQueueFamilies(const VkPhysicalDevice physicalDevice, const VkSurfaceKHR surface) const;
74 bool checkDeviceExtensionSupport(const VkPhysicalDevice physicalDevice) const;
75 SwapchainSupportDetails querySwapchainSupport(const VkPhysicalDevice physicalDevice, const VkSurfaceKHR surface) const;
76 VkSampleCountFlagBits getMaxUsableSampleCount() const;
77 };
78}
79
80#endif /* PHYSICALDEVICE */
Definition physicalDevice.h:42
const SwapchainSupportDetails & getSwapchainSupportDetails() const
Definition physicalDevice.h:52
const VkSampleCountFlagBits & getMaxMsaa() const
Definition physicalDevice.h:55
const VkPhysicalDeviceLimits & getLimits() const
Definition physicalDevice.h:53
const VkPhysicalDevice & getVkPhysicalDevice() const
Definition physicalDevice.h:50
const QueueFamilyIndices & getQueueFamilyIndices() const
Definition physicalDevice.h:51
Definition buffer.h:10
const std::vector< const char * > deviceExtensions
Definition physicalDevice.h:18
Definition physicalDevice.h:24
std::optional< uint32_t > presentFamily
Definition physicalDevice.h:26
std::optional< uint32_t > graphicsFamily
Definition physicalDevice.h:25
bool isComplete()
Definition physicalDevice.h:28
Definition physicalDevice.h:35
std::vector< VkPresentModeKHR > presentModes
Definition physicalDevice.h:38
std::vector< VkSurfaceFormatKHR > formats
Definition physicalDevice.h:37
VkSurfaceCapabilitiesKHR capabilities
Definition physicalDevice.h:36