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