sandbox
Loading...
Searching...
No Matches
extensions.hpp
1#ifndef LIBSBX_GRAPHICS_DEVICES_EXTENSIONS_HPP_
2#define LIBSBX_GRAPHICS_DEVICES_EXTENSIONS_HPP_
3
4#include <vector>
5
6#include <fmt/format.h>
7
8#include <vulkan/vulkan.hpp>
9
10#include <libsbx/core/engine.hpp>
11
12#include <libsbx/utility/target.hpp>
13
14#include <libsbx/devices/devices_module.hpp>
15
16namespace sbx::graphics {
17
18struct extensions {
19
20 static auto device() -> std::vector<const char*> {
21 return std::vector<const char*>{
22 VK_KHR_SWAPCHAIN_EXTENSION_NAME,
23 VK_KHR_PUSH_DESCRIPTOR_EXTENSION_NAME
24 };
25 }
26
27 static auto instance() -> std::vector<const char*> {
28 auto& devices_module = core::engine::get_module<devices::devices_module>();
29
30 auto required_extensions = devices_module.required_instance_extensions();
31
32 required_extensions.push_back(VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME);
33
34 if constexpr (utility::build_configuration_v == utility::build_configuration::debug) {
35 required_extensions.push_back(VK_EXT_DEBUG_UTILS_EXTENSION_NAME);
36 }
37
38 auto available_extention_count = std::uint32_t{0};
39 auto available_extensions = std::vector<VkExtensionProperties>{};
40
41 vkEnumerateInstanceExtensionProperties(nullptr, &available_extention_count, nullptr);
42
43 available_extensions.resize(available_extention_count);
44
45 vkEnumerateInstanceExtensionProperties(nullptr, &available_extention_count, available_extensions.data());
46
47 for (const auto* extension : required_extensions) {
48 bool found = false;
49
50 for (const auto& available_extension : available_extensions) {
51 if (std::strcmp(extension, available_extension.extensionName) == 0) {
52 found = true;
53 break;
54 }
55 }
56
57 if (!found) {
58 throw std::runtime_error{fmt::format("Required extension not available: {}", extension)};
59 }
60 }
61
62 return required_extensions;
63 }
64
65}; // struct extensions
66
67} // namespace sbx::graphics
68
69#endif // LIBSBX_GRAPHICS_DEVICES_EXTENSIONS_HPP_
Definition: instance.hpp:10
Definition: extensions.hpp:18