11#include " frame/vulkan/sdl_vulkan_none.h"
22
3- #include < SDL3/SDL.h>
4- #include < SDL3/SDL_vulkan.h>
5- #include < cstring>
3+ #include < SDL3/SDL.h>
4+ #include < SDL3/SDL_vulkan.h>
65#include < format>
76#include < string>
87#include < vector>
98
10- #include " absl/flags/flag.h"
11-
129#include " frame/common/application.h"
13- #include " frame/vulkan/debug_callback.h"
14-
10+
1511namespace frame ::vulkan
1612{
1713namespace
1814{
19- constexpr const char * kValidationLayerName = " VK_LAYER_KHRONOS_validation" ;
20-
21- bool HasExtension (
22- const std::vector<vk::ExtensionProperties>& extensions,
23- const char * name)
24- {
25- for (const auto & ext : extensions)
26- {
27- if (std::strcmp (ext.extensionName , name) == 0 )
28- {
29- return true ;
30- }
31- }
32- return false ;
33- }
34-
35- bool HasLayer (
36- const std::vector<vk::LayerProperties>& layers,
37- const char * name)
38- {
39- for (const auto & layer : layers)
40- {
41- if (std::strcmp (layer.layerName , name) == 0 )
42- {
43- return true ;
44- }
45- }
46- return false ;
47- }
48-
49- bool IsValidationEnabled ()
50- {
51- #if defined(_DEBUG)
52- bool enabled = true ;
53- #else
54- bool enabled = false ;
55- #endif
56- enabled = absl::GetFlag (FLAGS_vk_validation);
57- return enabled;
58- }
5915} // namespace
60-
61- SDLVulkanNone::SDLVulkanNone (glm::uvec2 size) : size_(size)
16+
17+ SDLVulkanNone::SDLVulkanNone (glm::uvec2 size) : size_(size)
6218{
6319 if (!SDL_Init (SDL_INIT_VIDEO ))
6420 {
@@ -101,34 +57,11 @@ SDLVulkanNone::SDLVulkanNone(glm::uvec2 size) : size_(size)
10157 extensions.reserve (static_cast <std::size_t >(extension_count) + 1 );
10258 extensions.insert (
10359 extensions.end (), extension_names, extension_names + extension_count);
104- const auto available_extensions =
105- vk::enumerateInstanceExtensionProperties ();
106- const bool want_validation = IsValidationEnabled ();
107- const bool has_debug_utils =
108- HasExtension (available_extensions, VK_EXT_DEBUG_UTILS_EXTENSION_NAME );
109- if (want_validation && has_debug_utils)
110- {
111- extensions.push_back (VK_EXT_DEBUG_UTILS_EXTENSION_NAME );
112- }
11360 for (const auto & extension : extensions)
11461 {
11562 logger_->info (" Extension: {}" , extension);
11663 }
11764
118- std::vector<const char *> layers;
119- if (want_validation)
120- {
121- const auto available_layers = vk::enumerateInstanceLayerProperties ();
122- if (HasLayer (available_layers, kValidationLayerName ))
123- {
124- layers.push_back (kValidationLayerName );
125- }
126- else
127- {
128- logger_->warn (" Vulkan validation layer not found." );
129- }
130- }
131-
13265 vk::ApplicationInfo application_info (
13366 " Frame" ,
13467 VK_MAKE_VERSION (0 , 5 , 1 ),
@@ -138,35 +71,13 @@ SDLVulkanNone::SDLVulkanNone(glm::uvec2 size) : size_(size)
13871 vk::InstanceCreateInfo instance_create_info (
13972 {},
14073 &application_info,
141- static_cast <std:: uint32_t >(layers. size ()) ,
142- layers. data () ,
74+ 0 ,
75+ nullptr ,
14376 static_cast <std::uint32_t >(extensions.size ()),
14477 extensions.data ());
14578
146- vk::DebugUtilsMessengerCreateInfoEXT debug_info{};
147- if (want_validation && has_debug_utils)
148- {
149- debug_info.messageSeverity =
150- vk::DebugUtilsMessageSeverityFlagBitsEXT::eWarning |
151- vk::DebugUtilsMessageSeverityFlagBitsEXT::eError |
152- vk::DebugUtilsMessageSeverityFlagBitsEXT::eInfo;
153- debug_info.messageType =
154- vk::DebugUtilsMessageTypeFlagBitsEXT::eGeneral |
155- vk::DebugUtilsMessageTypeFlagBitsEXT::eValidation |
156- vk::DebugUtilsMessageTypeFlagBitsEXT::ePerformance;
157- debug_info.pfnUserCallback =
158- reinterpret_cast <vk::PFN_DebugUtilsMessengerCallbackEXT>(
159- DebugCallback);
160- instance_create_info.setPNext (&debug_info);
161- }
162-
16379 vk_unique_instance_ = vk::createInstanceUnique (instance_create_info);
16480 VULKAN_HPP_DEFAULT_DISPATCHER .init (*vk_unique_instance_, vk_get_instance_proc_addr);
165- if (want_validation && has_debug_utils)
166- {
167- debug_messenger_ =
168- vk_unique_instance_->createDebugUtilsMessengerEXTUnique (debug_info);
169- }
17081
17182 VkSurfaceKHR surface = VK_NULL_HANDLE ;
17283 if (!SDL_Vulkan_CreateSurface (
0 commit comments