diff --git a/example/Vulkan/VKInstance.cpp b/example/Vulkan/VKInstance.cpp index 3ccfb315..37278c4a 100644 --- a/example/Vulkan/VKInstance.cpp +++ b/example/Vulkan/VKInstance.cpp @@ -1,10 +1,108 @@ #include"VKInstance.h" #include"VKSurfaceExtensionName.h" #include +#include VK_NAMESPACE_BEGIN RenderSurface *CreateRenderSuface(VkInstance,VkPhysicalDevice,Window *); +namespace +{ + VkResult CreateDebugUtilsMessengerEXT(VkInstance instance,const VkDebugUtilsMessengerCreateInfoEXT *pCreateInfo,const VkAllocationCallbacks *pAllocator,VkDebugUtilsMessengerEXT *pDebugMessenger) + { + auto func=(PFN_vkCreateDebugUtilsMessengerEXT)vkGetInstanceProcAddr(instance,"vkCreateDebugUtilsMessengerEXT"); + if(func) + { + return func(instance,pCreateInfo,pAllocator,pDebugMessenger); + } + else + { + return VK_ERROR_EXTENSION_NOT_PRESENT; + } + } + + void DestroyDebugUtilsMessengerEXT(VkInstance instance,VkDebugUtilsMessengerEXT debugMessenger,const VkAllocationCallbacks *pAllocator) + { + auto func=(PFN_vkDestroyDebugUtilsMessengerEXT)vkGetInstanceProcAddr(instance,"vkDestroyDebugUtilsMessengerEXT"); + if(func) + { + func(instance,debugMessenger,pAllocator); + } + } + + VKAPI_ATTR VkBool32 VKAPI_CALL debugCallback(VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity,VkDebugUtilsMessageTypeFlagsEXT messageType,const VkDebugUtilsMessengerCallbackDataEXT *pCallbackData,void *pUserData) + { + std::cerr<<"validation layer: "<pMessage<layerName) + return(true); + + ++lp; + } + + return(false); +} + RenderSurface *Instance::CreateSurface(Window *win,int pd_index) { if(!win) diff --git a/example/Vulkan/VKInstance.h b/example/Vulkan/VKInstance.h index 973d6bae..d9b2b39b 100644 --- a/example/Vulkan/VKInstance.h +++ b/example/Vulkan/VKInstance.h @@ -12,6 +12,11 @@ VK_NAMESPACE_BEGIN { VkInstance inst; + List layer_properties; + + VkDebugUtilsMessengerEXT debug_messenger; + VkDebugReportCallbackEXT debug_report_callback; + CharPointerList ext_list; List physical_devices; @@ -26,16 +31,15 @@ VK_NAMESPACE_BEGIN virtual ~Instance(); - VkInstance GetVkInstance () {return inst;} + VkInstance GetVkInstance () {return inst;} - const CharPointerList & GetExtList ()const {return ext_list;} - const List &GetDeviceList ()const {return physical_devices;} - VkPhysicalDevice GetDevice (int index) - { - return GetObject(physical_devices,index); - } + const List & GetLayerProperties ()const{return layer_properties;} + const bool CheckLayerSupport (const UTF8String &)const; + const CharPointerList & GetExtList ()const {return ext_list;} + const List & GetDeviceList ()const {return physical_devices;} + VkPhysicalDevice GetDevice (int index){return GetObject(physical_devices,index);} - RenderSurface * CreateSurface (Window *,int pd_index=0); + RenderSurface * CreateSurface (Window *,int pd_index=0); };//class Instance Instance *CreateInstance(const UTF8String &); ///<创建一个Vulkan实例 diff --git a/example/Vulkan/main.cpp b/example/Vulkan/main.cpp index cbcf1cff..2098f906 100644 --- a/example/Vulkan/main.cpp +++ b/example/Vulkan/main.cpp @@ -48,6 +48,7 @@ int main(int,char **) delete cmd_buf; delete render; + delete inst; delete win; return 0;