1#ifndef LIBSBX_GRAPHICS_DEVICES_PHYSICAL_DEVICE_HPP_
2#define LIBSBX_GRAPHICS_DEVICES_PHYSICAL_DEVICE_HPP_
8#include <vulkan/vulkan.hpp>
10#include <libsbx/utility/noncopyable.hpp>
12#include <libsbx/graphics/devices/instance.hpp>
14namespace sbx::graphics {
21 VkPhysicalDeviceFeatures2 core{};
22 VkPhysicalDeviceVulkan11Features vulkan11{};
23 VkPhysicalDeviceVulkan12Features vulkan12{};
24 VkPhysicalDeviceVulkan13Features vulkan13{};
27 vulkan13.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES;
28 vulkan13.pNext =
nullptr;
30 vulkan12.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES;
31 vulkan12.pNext = &vulkan13;
33 vulkan11.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES;
34 vulkan11.pNext = &vulkan12;
36 core.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
37 core.pNext = &vulkan11;
46 auto handle() const noexcept -> const VkPhysicalDevice&;
48 operator const VkPhysicalDevice&() const noexcept;
50 auto properties() const -> const VkPhysicalDeviceProperties&;
54 auto memory_properties() const -> const VkPhysicalDeviceMemoryProperties&;
56 auto msaa_samples() const -> const VkSampleCountFlagBits&;
58 auto find_memory_type(std::uint32_t typeFilter, VkMemoryPropertyFlags properties) const -> std::uint32_t;
60 auto find_supported_format(const std::vector<VkFormat>& candidates, VkImageTiling tiling, VkFormatFeatureFlags features) const -> VkFormat;
64 auto _choose_device(const std::vector<VkPhysicalDevice>& devices) -> VkPhysicalDevice;
66 auto _score_device(const VkPhysicalDevice& device) -> std::uint32_t;
68 auto _get_max_usable_sample_count() const -> VkSampleCountFlagBits;
70 VkPhysicalDevice _handle{};
71 VkPhysicalDeviceProperties _properties{};
73 device_features _features;
74 VkPhysicalDeviceMemoryProperties _memory_properties{};
75 VkSampleCountFlagBits _msaa_samples{};
Definition: instance.hpp:10
Definition: physical_device.hpp:16
Definition: physical_device.hpp:20
Definition: noncopyable.hpp:6