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.apiVersion // uint32_t apiVersion
};
#ifdef _USE_GRAPHIC_DEBUG
Creator._AddDebugExtension();
#endif
Creator._AddWindowExtension();
auto extensions = Creator.EnabledExtensionNames();
auto layers = Creator.EnabledLayerNames();
//VkDebugUtilsMessengerCreateInfoEXT createInfo = _DebugUtilsLayerNext();
auto layers = Creator.EnabledLayerNames();;
VkInstanceCreateInfo instance_create_info = {
VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO, // VkStructureType sType
nullptr, // const void * pNext
@ -34,6 +37,10 @@ namespace vulkanapi {
static_cast<uint32_t>(extensions.size()), // uint32_t enabledExtensionCount
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);
if (result != VK_SUCCESS) {
zlog::error("Failed to create instance.");
@ -64,4 +71,9 @@ namespace vulkanapi {
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;
}
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
, 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)
// , debugCallback(Instance::DebugCallback)
, debugCallback(Instance::DebugCallback)
#endif
{
@ -28,6 +28,20 @@ namespace vulkanapi {
{
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<VkExtensionProperties> available_extensions;
@ -64,7 +78,19 @@ namespace vulkanapi {
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)
{
uint32_t extensions_count = 0;

View File

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