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