vulkan instance

This commit is contained in:
ouczbs 2024-03-02 00:19:15 +08:00
parent 9d4a55ddbc
commit d6cb37383b
4 changed files with 53 additions and 6 deletions

View File

@ -21,9 +21,12 @@ namespace vulkanapi {
Creator.engineVersion, // uint32_t engineVersion Creator.engineVersion, // uint32_t engineVersion
Creator.apiVersion // uint32_t apiVersion Creator.apiVersion // uint32_t apiVersion
}; };
#ifdef _USE_GRAPHIC_DEBUG
Creator._AddDebugExtension();
#endif
Creator._AddWindowExtension();
auto extensions = Creator.EnabledExtensionNames(); auto extensions = Creator.EnabledExtensionNames();
auto layers = Creator.EnabledLayerNames(); auto layers = Creator.EnabledLayerNames();;
//VkDebugUtilsMessengerCreateInfoEXT createInfo = _DebugUtilsLayerNext();
VkInstanceCreateInfo instance_create_info = { VkInstanceCreateInfo instance_create_info = {
VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO, // VkStructureType sType VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO, // VkStructureType sType
nullptr, // const void * pNext nullptr, // const void * pNext
@ -34,6 +37,10 @@ namespace vulkanapi {
static_cast<uint32_t>(extensions.size()), // uint32_t enabledExtensionCount static_cast<uint32_t>(extensions.size()), // uint32_t enabledExtensionCount
extensions.data() // const char * const * ppEnabledExtensionNames extensions.data() // const char * const * ppEnabledExtensionNames
}; };
#ifdef _USE_GRAPHIC_DEBUG
VkDebugUtilsMessengerCreateInfoEXT debugInfo = Creator._DebugUtilsLayerNext();
instance_create_info.pNext = &debugInfo;
#endif
VkResult result = vkCreateInstance(&instance_create_info, nullptr, &mPtr); VkResult result = vkCreateInstance(&instance_create_info, nullptr, &mPtr);
if (result != VK_SUCCESS) { if (result != VK_SUCCESS) {
zlog::error("Failed to create instance."); zlog::error("Failed to create instance.");
@ -64,4 +71,9 @@ namespace vulkanapi {
return true; return true;
} }
VKAPI_ATTR VkBool32 VKAPI_CALL Instance::DebugCallback(VkDebugUtilsMessageSeverityFlagBitsEXT, VkDebugUtilsMessageTypeFlagsEXT, const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData, void*)
{
zlog::error("validation layer: {}", pCallbackData->pMessage);
return VK_FALSE;
}
}; };

View File

@ -16,5 +16,10 @@ namespace vulkanapi {
return mPtr; return mPtr;
} }
bool EnumerateAvailablePhysicalDevices(std::vector<VkPhysicalDevice>& available_devices); bool EnumerateAvailablePhysicalDevices(std::vector<VkPhysicalDevice>& available_devices);
static VKAPI_ATTR VkBool32 VKAPI_CALL DebugCallback(VkDebugUtilsMessageSeverityFlagBitsEXT,
VkDebugUtilsMessageTypeFlagsEXT,
const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData,
void*);
}; };
}; };

View File

@ -15,7 +15,7 @@ namespace vulkanapi {
#ifdef _USE_GRAPHIC_DEBUG #ifdef _USE_GRAPHIC_DEBUG
, messageSeverity(VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT) , messageSeverity(VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT)
, messageType(VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT) , messageType(VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT)
// , debugCallback(Instance::DebugCallback) , debugCallback(Instance::DebugCallback)
#endif #endif
{ {
@ -28,6 +28,20 @@ namespace vulkanapi {
{ {
desiredLayers.push_back(layerName); desiredLayers.push_back(layerName);
} }
void InstanceCreator::_AddWindowExtension()
{
AddExtension("VK_KHR_win32_surface");
AddExtension(VK_KHR_SURFACE_EXTENSION_NAME);
AddExtension(VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME);
AddExtension(VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME);
}
void InstanceCreator::_AddDebugExtension()
{
AddLayer("VK_LAYER_KHRONOS_validation");
AddLayer("VK_LAYER_RENDERDOC_Capture");
AddExtension(VK_EXT_DEBUG_UTILS_EXTENSION_NAME);
AddExtension(VK_EXT_DEBUG_REPORT_EXTENSION_NAME);
}
std::vector<char const*> InstanceCreator::EnabledExtensionNames() std::vector<char const*> InstanceCreator::EnabledExtensionNames()
{ {
std::vector<VkExtensionProperties> available_extensions; std::vector<VkExtensionProperties> available_extensions;
@ -64,7 +78,19 @@ namespace vulkanapi {
return _layers; return _layers;
} }
#ifdef _USE_GRAPHIC_DEBUG
VkDebugUtilsMessengerCreateInfoEXT InstanceCreator::_DebugUtilsLayerNext()
{
VkDebugUtilsMessengerCreateInfoEXT createInfo{};
createInfo.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT;
createInfo.messageSeverity =
VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT;
createInfo.messageType =
VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT;
createInfo.pfnUserCallback = debugCallback;
return createInfo;
}
#endif
bool InstanceCreator::CheckAvailableInstanceExtensions(std::vector<VkExtensionProperties>& available_extensions) bool InstanceCreator::CheckAvailableInstanceExtensions(std::vector<VkExtensionProperties>& available_extensions)
{ {
uint32_t extensions_count = 0; uint32_t extensions_count = 0;

View File

@ -16,10 +16,12 @@ namespace vulkanapi {
std::vector<std::string> desiredExtensions; std::vector<std::string> desiredExtensions;
std::vector<std::string> desiredLayers; std::vector<std::string> desiredLayers;
public: InstanceCreator(); public:
InstanceCreator();
void AddExtension(std::string extensionName); void AddExtension(std::string extensionName);
void AddLayer(std::string layerName); void AddLayer(std::string layerName);
void _AddWindowExtension();
void _AddDebugExtension();
std::vector<char const*> EnabledExtensionNames(); std::vector<char const*> EnabledExtensionNames();
std::vector<char const*> EnabledLayerNames(); std::vector<char const*> EnabledLayerNames();
@ -28,6 +30,8 @@ namespace vulkanapi {
VkDebugUtilsMessageSeverityFlagsEXT messageSeverity; VkDebugUtilsMessageSeverityFlagsEXT messageSeverity;
VkDebugUtilsMessageTypeFlagsEXT messageType; VkDebugUtilsMessageTypeFlagsEXT messageType;
PFN_vkDebugUtilsMessengerCallbackEXT debugCallback; PFN_vkDebugUtilsMessengerCallbackEXT debugCallback;
VkDebugUtilsMessengerCreateInfoEXT _DebugUtilsLayerNext();
#endif #endif
private: private: