1#ifndef LIBSBX_GRAPHICS_DEVICES_LOGICAL_DEVICE_HPP_
2#define LIBSBX_GRAPHICS_DEVICES_LOGICAL_DEVICE_HPP_
4#include <unordered_map>
8#include <vulkan/vulkan.hpp>
10#include <libsbx/utility/noncopyable.hpp>
12#include <libsbx/graphics/devices/instance.hpp>
13#include <libsbx/graphics/devices/physical_device.hpp>
15namespace sbx::graphics {
23 enum class type : std::uint32_t {
34 auto operator=(
queue&& other)
noexcept ->
queue& =
default;
36 auto handle()
const noexcept ->
const VkQueue&;
38 operator const VkQueue&()
const noexcept;
40 auto family()
const noexcept -> std::uint32_t;
42 auto wait_idle()
const -> void;
46 queue(
const VkQueue& handle, std::uint32_t family)
51 std::uint32_t _family{};
63 auto handle()
const noexcept ->
const VkDevice&;
65 operator const VkDevice&()
const noexcept;
67 auto enabled_features()
const ->
const VkPhysicalDeviceFeatures&;
69 template<queue::type Type>
71 return _queues.at(Type);
74 auto wait_idle()
const -> void;
78 struct queue_family_indices {
79 std::optional<std::uint32_t> graphics{};
80 std::optional<std::uint32_t> present{};
81 std::optional<std::uint32_t> compute{};
82 std::optional<std::uint32_t> transfer{};
92 VkPhysicalDeviceFeatures _enabled_features{};
93 std::unordered_map<queue::type, graphics::queue> _queues{};
Definition: logical_device.hpp:55
Definition: physical_device.hpp:16
Definition: logical_device.hpp:17
Definition: noncopyable.hpp:6