2#ifndef LIBSBX_GRAPHICS_DEVICES_PHYSICAL_DEVICE_HPP_
3#define LIBSBX_GRAPHICS_DEVICES_PHYSICAL_DEVICE_HPP_
9#include <vulkan/vulkan.hpp>
11#include <libsbx/utility/noncopyable.hpp>
13#include <libsbx/graphics/devices/instance.hpp>
15namespace sbx::graphics {
22 VkPhysicalDeviceFeatures2 core{};
23 VkPhysicalDeviceVulkan11Features vulkan11{};
24 VkPhysicalDeviceVulkan12Features vulkan12{};
25 VkPhysicalDeviceVulkan13Features vulkan13{};
26 VkPhysicalDeviceComputeShaderDerivativesFeaturesKHR compute_shader_derivatives{};
29 compute_shader_derivatives.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_KHR;
30 compute_shader_derivatives.pNext =
nullptr;
32 vulkan13.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES;
33 vulkan13.pNext = &compute_shader_derivatives;
35 vulkan12.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES;
36 vulkan12.pNext = &vulkan13;
38 vulkan11.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES;
39 vulkan11.pNext = &vulkan12;
41 core.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2;
42 core.pNext = &vulkan11;
51 auto handle() const noexcept -> const VkPhysicalDevice&;
53 operator const VkPhysicalDevice&() const noexcept;
55 auto properties() const -> const VkPhysicalDeviceProperties&;
59 auto memory_properties() const -> const VkPhysicalDeviceMemoryProperties&;
61 auto msaa_samples() const -> const VkSampleCountFlagBits&;
63 auto find_memory_type(std::uint32_t typeFilter, VkMemoryPropertyFlags properties) const -> std::uint32_t;
65 auto find_supported_format(const std::vector<VkFormat>& candidates, VkImageTiling tiling, VkFormatFeatureFlags features) const -> VkFormat;
69 auto _choose_device(const std::vector<VkPhysicalDevice>& devices) -> VkPhysicalDevice;
71 auto _score_device(const VkPhysicalDevice& device) -> std::uint32_t;
73 auto _get_max_usable_sample_count() const -> VkSampleCountFlagBits;
75 VkPhysicalDevice _handle{};
76 VkPhysicalDeviceProperties _properties{};
78 device_features _features;
79 VkPhysicalDeviceMemoryProperties _memory_properties{};
80 VkSampleCountFlagBits _msaa_samples{};
Definition: instance.hpp:11
Definition: physical_device.hpp:17
Definition: physical_device.hpp:21
Definition: noncopyable.hpp:7