SDEngine
Game Engine
Loading...
Searching...
No Matches
VulkanContext.hpp
Go to the documentation of this file.
1// TODO(docs): Add file-level Doxygen header
2// - @file VulkanContext.hpp
3// - @brief Vulkan device and instance management
4// - Note about class being too large - refactoring planned
5// - Relationship to VulkanWindow and VulkanRenderer
6#pragma once
7
8#include <vector>
9#include <vk_mem_alloc.h>
10
12#include "SD/core/Window.hpp"
13
14namespace sd {
15// TODO(docs): Document VulkanContext class thoroughly
16// - Purpose: Manages Vulkan instance, physical device, logical device, and VMA allocator
17// - Initialization order and dependencies
18// - Feature enablement (Vulkan 1.2, 1.3 features)
19// - Queue setup and family indices
20// - Memory management with VMA
21// - Note about refactoring into smaller classes
23public:
24 explicit VulkanContext(const GlfwContext& glfw_ctx);
25 void init(const Window& window);
27
28 vk::UniqueInstance& get_instance();
29 std::vector<const char*>& get_device_extensions();
30 vk::PhysicalDevice& get_physical_device();
31 vk::UniqueDevice& get_vulkan_device();
32 vk::PhysicalDeviceFeatures2& get_features2();
33 vk::PhysicalDeviceVulkan12Features& get_features12();
34 vk::PhysicalDeviceVulkan13Features& get_features13();
35 VmaAllocator get_vma_allocator() const { return m_allocator; }
36
37 [[nodiscard]] u32 get_graphics_family_index() const;
38 [[nodiscard]] vk::Queue get_graphics_queue() const;
39 [[nodiscard]] vk::SurfaceFormatKHR get_surface_format() const { return m_surface_format; }
40 bool is_initialized() { return m_instance.get() && m_vulkan_device && m_phys_dev; }
41
42
43private:
44 vk::UniqueInstance create_vulkan_application_instance();
45 void setup_queues(vk::SurfaceKHR surface);
46 void setup_device_extensions();
47 void create_vulkan_device();
48
49
51 vk::UniqueInstance m_instance;
52 vk::PhysicalDevice m_phys_dev;
53 vk::UniqueDevice m_vulkan_device;
54
56 u32 m_graphics_family_index{};
57 vk::SurfaceFormatKHR m_surface_format;
58
59
60 std::vector<const char*> m_device_exts;
61 PFN_vkGetInstanceProcAddr m_vk_get_instance_proc_addr = nullptr;
62 PFN_vkGetDeviceProcAddr m_vk_get_device_proc_addr = nullptr;
64 vk::PhysicalDeviceFeatures2 m_features2;
65 vk::PhysicalDeviceVulkan12Features m_features12;
66 vk::PhysicalDeviceVulkan13Features m_features13;
67};
68} // namespace sd
RAII wrapper for initializing and terminating Glfw. Also sets a glfwErrorCallback.
Definition GlfwContext.hpp:24
Definition VulkanContext.hpp:22
std::vector< const char * > m_device_exts
Definition VulkanContext.hpp:60
vk::PhysicalDeviceFeatures2 m_features2
Definition VulkanContext.hpp:64
vk::PhysicalDeviceVulkan12Features m_features12
Definition VulkanContext.hpp:65
vk::UniqueInstance m_instance
Definition VulkanContext.hpp:51
vk::SurfaceFormatKHR get_surface_format() const
Definition VulkanContext.hpp:39
bool is_initialized()
Definition VulkanContext.hpp:40
const GlfwContext & m_glfw_ctx
Definition VulkanContext.hpp:50
vk::Queue m_graphics_queue
Definition VulkanContext.hpp:55
vk::PhysicalDevice m_phys_dev
Definition VulkanContext.hpp:52
vk::PhysicalDeviceVulkan13Features m_features13
Definition VulkanContext.hpp:66
vk::UniqueDevice m_vulkan_device
Definition VulkanContext.hpp:53
vk::SurfaceFormatKHR m_surface_format
Definition VulkanContext.hpp:57
VmaAllocator get_vma_allocator() const
Definition VulkanContext.hpp:35
Definition Window.hpp:49
Definition Application.hpp:28
std::uint32_t u32
Definition types.hpp:15
constexpr T g_type_max
Definition types.hpp:21