vulkan instance
This commit is contained in:
parent
9d4a55ddbc
commit
d6cb37383b
@ -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;
|
||||
}
|
||||
};
|
||||
@ -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*);
|
||||
};
|
||||
};
|
||||
@ -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;
|
||||
|
||||
@ -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:
|
||||
|
||||
Loading…
Reference in New Issue
Block a user