1#ifndef LIBSBX_GRAPHICS_DEVICES_EXTENSIONS_HPP_
2#define LIBSBX_GRAPHICS_DEVICES_EXTENSIONS_HPP_
8#include <vulkan/vulkan.hpp>
10#include <libsbx/core/engine.hpp>
12#include <libsbx/utility/target.hpp>
14#include <libsbx/devices/devices_module.hpp>
16namespace sbx::graphics {
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
27 static auto instance() -> std::vector<const char*> {
28 auto& devices_module = core::engine::get_module<devices::devices_module>();
30 auto required_extensions = devices_module.required_instance_extensions();
32 required_extensions.push_back(VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME);
34 if constexpr (utility::build_configuration_v == utility::build_configuration::debug) {
35 required_extensions.push_back(VK_EXT_DEBUG_UTILS_EXTENSION_NAME);
38 auto available_extention_count = std::uint32_t{0};
39 auto available_extensions = std::vector<VkExtensionProperties>{};
41 vkEnumerateInstanceExtensionProperties(
nullptr, &available_extention_count,
nullptr);
43 available_extensions.resize(available_extention_count);
45 vkEnumerateInstanceExtensionProperties(
nullptr, &available_extention_count, available_extensions.data());
47 for (
const auto* extension : required_extensions) {
50 for (
const auto& available_extension : available_extensions) {
51 if (std::strcmp(extension, available_extension.extensionName) == 0) {
58 throw std::runtime_error{fmt::format(
"Required extension not available: {}", extension)};
62 return required_extensions;
Definition: instance.hpp:10
Definition: extensions.hpp:18