16#include "VulkanUtilities.hpp"
30 return "VK_NOT_READY";
34 return "VK_EVENT_SET";
36 return "VK_EVENT_RESET";
38 return "VK_INCOMPLETE";
39 case VK_ERROR_OUT_OF_HOST_MEMORY:
40 return "VK_ERROR_OUT_OF_HOST_MEMORY";
41 case VK_ERROR_OUT_OF_DEVICE_MEMORY:
42 return "VK_ERROR_OUT_OF_DEVICE_MEMORY";
43 case VK_ERROR_INITIALIZATION_FAILED:
44 return "VK_ERROR_INITIALIZATION_FAILED";
45 case VK_ERROR_DEVICE_LOST:
46 return "VK_ERROR_DEVICE_LOST";
47 case VK_ERROR_MEMORY_MAP_FAILED:
48 return "VK_ERROR_MEMORY_MAP_FAILED";
49 case VK_ERROR_LAYER_NOT_PRESENT:
50 return "VK_ERROR_LAYER_NOT_PRESENT";
51 case VK_ERROR_EXTENSION_NOT_PRESENT:
52 return "VK_ERROR_EXTENSION_NOT_PRESENT";
53 case VK_ERROR_FEATURE_NOT_PRESENT:
54 return "VK_ERROR_FEATURE_NOT_PRESENT";
55 case VK_ERROR_INCOMPATIBLE_DRIVER:
56 return "VK_ERROR_INCOMPATIBLE_DRIVER";
57 case VK_ERROR_TOO_MANY_OBJECTS:
58 return "VK_ERROR_TOO_MANY_OBJECTS";
59 case VK_ERROR_FORMAT_NOT_SUPPORTED:
60 return "VK_ERROR_FORMAT_NOT_SUPPORTED";
61 case VK_ERROR_SURFACE_LOST_KHR:
62 return "VK_ERROR_SURFACE_LOST_KHR";
63 case VK_ERROR_NATIVE_WINDOW_IN_USE_KHR:
64 return "VK_ERROR_NATIVE_WINDOW_IN_USE_KHR";
65 case VK_SUBOPTIMAL_KHR:
66 return "VK_SUBOPTIMAL_KHR";
67 case VK_ERROR_OUT_OF_DATE_KHR:
68 return "VK_ERROR_OUT_OF_DATE_KHR";
69 case VK_ERROR_INCOMPATIBLE_DISPLAY_KHR:
70 return "VK_ERROR_INCOMPATIBLE_DISPLAY_KHR";
71 case VK_ERROR_VALIDATION_FAILED_EXT:
72 return "VK_ERROR_VALIDATION_FAILED_EXT";
73 case VK_ERROR_INVALID_SHADER_NV:
74 return "VK_ERROR_INVALID_SHADER_NV";
75 case VK_ERROR_OUT_OF_POOL_MEMORY_KHR:
76 return "VK_ERROR_OUT_OF_POOL_MEMORY_KHR";
78 return "Unknown Result";
89 VKAPI_ATTR VkBool32 VKAPI_CALL
92 VkDebugUtilsMessageSeverityFlagBitsEXT aMessageSeverity,
93 VkDebugUtilsMessageTypeFlagsEXT aMessageTypes,
94 const VkDebugUtilsMessengerCallbackDataEXT* aCallbackData,
99 if ( aMessageSeverity & VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT )
103 if ( aMessageSeverity & VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT )
108 if ( aMessageSeverity & VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT )
113 if ( aMessageSeverity & VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT )
117 if ( aMessageSeverity & VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT )
121 std::cout << aCallbackData->pMessageIdName <<
": " << aCallbackData->pMessage << std::endl;
126 VkDescriptorPool
CreateDescriptorPool (
const VkDevice& aVkDevice,
const std::vector<VkDescriptorPoolSize>& aVkDescriptorPoolSizes )
128 VkDescriptorPool descriptor_pool{VK_NULL_HANDLE};
129 VkDescriptorPoolCreateInfo descriptor_pool_create_info{};
130 descriptor_pool_create_info.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO;
131 descriptor_pool_create_info.pNext =
nullptr;
132 descriptor_pool_create_info.flags = 0;
133 descriptor_pool_create_info.maxSets =
static_cast<uint32_t
> ( aVkDescriptorPoolSizes.size() );
134 descriptor_pool_create_info.poolSizeCount =
static_cast<uint32_t
> ( aVkDescriptorPoolSizes.size() );
135 descriptor_pool_create_info.pPoolSizes = aVkDescriptorPoolSizes.data();
136 if ( VkResult result = vkCreateDescriptorPool ( aVkDevice, &descriptor_pool_create_info,
nullptr, &descriptor_pool ) )
138 std::ostringstream stream;
139 stream <<
"vkCreateDescriptorPool failed. error code: ( " <<
GetVulkanResultString ( result ) <<
" )";
141 throw std::runtime_error ( stream.str().c_str() );
143 return descriptor_pool;
149 vkDestroyDescriptorPool ( aVkDevice, aVkDescriptorPool,
nullptr );
153 VkDescriptorSet
CreateDescriptorSet (
const VkDevice& aVkDevice,
const VkDescriptorPool& aVkDescriptorPool,
const VkDescriptorSetLayout& aVkDescriptorSetLayout, uint32_t aDescriptorSetCount )
155 VkDescriptorSet descriptor_set{VK_NULL_HANDLE};
156 VkDescriptorSetAllocateInfo descriptor_set_allocate_info{};
157 descriptor_set_allocate_info.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO;
158 descriptor_set_allocate_info.descriptorPool = aVkDescriptorPool;
159 descriptor_set_allocate_info.descriptorSetCount = aDescriptorSetCount;
160 descriptor_set_allocate_info.pSetLayouts = &aVkDescriptorSetLayout;
161 if ( VkResult result = vkAllocateDescriptorSets ( aVkDevice, &descriptor_set_allocate_info, &descriptor_set ) )
163 std::ostringstream stream;
166 throw std::runtime_error ( stream.str().c_str() );
168 return descriptor_set;
Defines log severity levels and stream output for the AeonGames engine.
<- This is here just for the literals
VKAPI_ATTR VkBool32 VKAPI_CALL DebugCallback(VkDebugUtilsMessageSeverityFlagBitsEXT aMessageSeverity, VkDebugUtilsMessageTypeFlagsEXT aMessageTypes, const VkDebugUtilsMessengerCallbackDataEXT *aCallbackData, void *aUserData)
Vulkan debug messenger callback.
VkDescriptorPool CreateDescriptorPool(const VkDevice &aVkDevice, const std::vector< VkDescriptorPoolSize > &aVkDescriptorPoolSizes)
Create a Vulkan descriptor pool from the given pool sizes.
void DestroyDescriptorPool(const VkDevice &aVkDevice, VkDescriptorPool aVkDescriptorPool)
Destroy a Vulkan descriptor pool.
const char * GetVulkanResultString(VkResult aResult)
Convert a VkResult code to a human-readable string.
@ Warning
Potential issues that may need attention.
@ Info
General informational messages.
@ Performance
Performance-related metrics.
@ Debug
Detailed diagnostic information.
VkDescriptorSet CreateDescriptorSet(const VkDevice &aVkDevice, const VkDescriptorPool &aVkDescriptorPool, const VkDescriptorSetLayout &aVkDescriptorSetLayout, uint32_t aDescriptorSetCount)
Allocate a Vulkan descriptor set from the given pool and layout.