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
23 explicit VulkanContext(const GlfwContext& glfw_ctx);
24 void init(const Window& window);
26
27 vk::UniqueInstance& get_instance();
28 std::vector<const char*>& get_device_extensions();
29 vk::PhysicalDevice& get_physical_device();
30 vk::UniqueDevice& get_vulkan_device();
31 vk::PhysicalDeviceFeatures2& get_features2();
32 vk::PhysicalDeviceVulkan12Features& get_features12();
33 vk::PhysicalDeviceVulkan13Features& get_features13();
34 VmaAllocator get_vma_allocator() const { return m_allocator; }
35
36 [[nodiscard]] U32 get_graphics_family_index() const;
37 [[nodiscard]] vk::Queue get_graphics_queue() const;
38 [[nodiscard]] vk::SurfaceFormatKHR get_surface_format() const { return m_surface_format; }
39 bool is_initialized() { return m_instance.get() && m_vulkan_device && m_phys_dev; }
40
41
42 vk::UniqueInstance create_vulkan_application_instance();
43 void setup_queues(vk::SurfaceKHR surface);
44 void setup_device_extensions();
45 void create_vulkan_device();
46
47
49 vk::UniqueInstance m_instance;
50 vk::PhysicalDevice m_phys_dev;
51 vk::UniqueDevice m_vulkan_device;
52
54 U32 m_graphics_family_index{};
55 vk::SurfaceFormatKHR m_surface_format;
56
57
58 std::vector<const char*> m_device_exts;
59#ifdef SD_DEBUG
60 vk::UniqueDebugUtilsMessengerEXT m_debug_messenger;
61#endif
62
63 PFN_vkGetInstanceProcAddr m_vk_get_instance_proc_addr = nullptr;
64 PFN_vkGetDeviceProcAddr m_vk_get_device_proc_addr = nullptr;
66 vk::PhysicalDeviceFeatures2 m_features2;
67 vk::PhysicalDeviceVulkan12Features m_features12;
68 vk::PhysicalDeviceVulkan13Features m_features13;
69};
70} // namespace sd
Definition Application.hpp:22
RAII wrapper for initializing and terminating Glfw. Also sets a glfwErrorCallback.
Definition GlfwContext.hpp:25
Definition VulkanContext.hpp:22
std::vector< const char * > m_device_exts
Definition VulkanContext.hpp:58
vk::PhysicalDeviceFeatures2 m_features2
Definition VulkanContext.hpp:66
vk::PhysicalDeviceVulkan12Features m_features12
Definition VulkanContext.hpp:67
vk::UniqueInstance m_instance
Definition VulkanContext.hpp:49
vk::SurfaceFormatKHR get_surface_format() const
Definition VulkanContext.hpp:38
bool is_initialized()
Definition VulkanContext.hpp:39
const GlfwContext & m_glfw_ctx
Definition VulkanContext.hpp:48
vk::Queue m_graphics_queue
Definition VulkanContext.hpp:53
vk::PhysicalDevice m_phys_dev
Definition VulkanContext.hpp:50
vk::PhysicalDeviceVulkan13Features m_features13
Definition VulkanContext.hpp:68
vk::UniqueDevice m_vulkan_device
Definition VulkanContext.hpp:51
vk::SurfaceFormatKHR m_surface_format
Definition VulkanContext.hpp:55
VmaAllocator get_vma_allocator() const
Definition VulkanContext.hpp:34
Definition Window.hpp:49
consteval U64 type_id_of()
Definition type_id.hpp:6
std::uint32_t U32
Definition types.hpp:15