sandbox
Loading...
Searching...
No Matches
physical_device.hpp
1#ifndef LIBSBX_GRAPHICS_DEVICES_PHYSICAL_DEVICE_HPP_
2#define LIBSBX_GRAPHICS_DEVICES_PHYSICAL_DEVICE_HPP_
3
4#include <vector>
5#include <cstring>
6#include <cinttypes>
7
8#include <vulkan/vulkan.hpp>
9
10#include <libsbx/utility/noncopyable.hpp>
11
12#include <libsbx/graphics/devices/instance.hpp>
13
14namespace sbx::graphics {
15
17
18public:
19
21 VkPhysicalDeviceFeatures2 core{};
22 VkPhysicalDeviceVulkan11Features vulkan11{};
23 VkPhysicalDeviceVulkan12Features vulkan12{};
24 VkPhysicalDeviceVulkan13Features vulkan13{};
25
27 vulkan13.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES;
28 vulkan13.pNext = nullptr;
29
30 vulkan12.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES;
31 vulkan12.pNext = &vulkan13;
32
33 vulkan11.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES;
34 vulkan11.pNext = &vulkan12;
35
36 core.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
37 core.pNext = &vulkan11;
38 }
39
40 }; // struct features
41
43
45
46 auto handle() const noexcept -> const VkPhysicalDevice&;
47
48 operator const VkPhysicalDevice&() const noexcept;
49
50 auto properties() const -> const VkPhysicalDeviceProperties&;
51
52 auto features() const -> const device_features&;
53
54 auto memory_properties() const -> const VkPhysicalDeviceMemoryProperties&;
55
56 auto msaa_samples() const -> const VkSampleCountFlagBits&;
57
58 auto find_memory_type(std::uint32_t typeFilter, VkMemoryPropertyFlags properties) const -> std::uint32_t;
59
60 auto find_supported_format(const std::vector<VkFormat>& candidates, VkImageTiling tiling, VkFormatFeatureFlags features) const -> VkFormat;
61
62private:
63
64 auto _choose_device(const std::vector<VkPhysicalDevice>& devices) -> VkPhysicalDevice;
65
66 auto _score_device(const VkPhysicalDevice& device) -> std::uint32_t;
67
68 auto _get_max_usable_sample_count() const -> VkSampleCountFlagBits;
69
70 VkPhysicalDevice _handle{};
71 VkPhysicalDeviceProperties _properties{};
72 // VkPhysicalDeviceFeatures2 _features{};
73 device_features _features;
74 VkPhysicalDeviceMemoryProperties _memory_properties{};
75 VkSampleCountFlagBits _msaa_samples{};
76
77}; // class physical_device
78
79} // namespace sbx::graphics
80
81#endif // LIBSBX_GRAPHICS_DEVICES_PHYSICAL_DEVICE_HPP_
82
Definition: instance.hpp:10
Definition: physical_device.hpp:16
Definition: physical_device.hpp:20
Definition: noncopyable.hpp:6