C++ Vulkan-从未调用验证层回调
VK_LAYER_LUNARG_standard_验证似乎可用,VK_EXT_debug_report和VK_EXT_debug_utils被报告为可用,但即使我做了一些应该强制验证层投诉的事情,我的回调也从来没有被调用过C++ Vulkan-从未调用验证层回调,c++,vulkan,C++,Vulkan,VK_LAYER_LUNARG_standard_验证似乎可用,VK_EXT_debug_report和VK_EXT_debug_utils被报告为可用,但即使我做了一些应该强制验证层投诉的事情,我的回调也从来没有被调用过 const std::vector<const char*> validationLayers = { "VK_LAYER_LUNARG_standard_validation" }; internal void createInstance(AppWi
const std::vector<const char*> validationLayers = {
"VK_LAYER_LUNARG_standard_validation"
};
internal void createInstance(AppWindow* app, bool enableValidationLayers)
{
if (enableValidationLayers && !checkValidationLayerSupport()) {
throw std::runtime_error("validation layers requested, but not available!");
}
VkApplicationInfo appInfo = {};
appInfo.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO;
appInfo.pApplicationName = "Hello Triangle";
appInfo.applicationVersion = VK_MAKE_VERSION(1, 0, 0);
appInfo.pEngineName = "No Engine";
appInfo.engineVersion = VK_MAKE_VERSION(1, 0, 0);
appInfo.apiVersion = VK_API_VERSION_1_0;
VkInstanceCreateInfo createInfo = {};
createInfo.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO;
createInfo.pApplicationInfo = &appInfo;
auto extensions = getRequiredExtensions(enableValidationLayers);
createInfo.enabledExtensionCount = static_cast<uint32_t>(extensions.size());
createInfo.ppEnabledExtensionNames = extensions.data();
if (enableValidationLayers) {
createInfo.enabledLayerCount = static_cast<uint32_t>(validationLayers.size());
createInfo.ppEnabledLayerNames = validationLayers.data();
}
else {
createInfo.enabledLayerCount = 0;
}
if (vkCreateInstance(&createInfo, nullptr, &app->renderObjects.instance) != VK_SUCCESS) {
throw std::runtime_error("failed to create instance!");
}
}
VkResult CreateDebugUtilsMessengerEXT(VkInstance instance, const VkDebugUtilsMessengerCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDebugUtilsMessengerEXT* pCallback) {
auto func = (PFN_vkCreateDebugUtilsMessengerEXT)vkGetInstanceProcAddr(instance, "vkCreateDebugUtilsMessengerEXT");
if (func != nullptr) {
return func(instance, pCreateInfo, pAllocator, pCallback);
}
else {
return VK_ERROR_EXTENSION_NOT_PRESENT;
}
}
VKAPI_ATTR VkBool32 VKAPI_CALL debugCallback(VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity, VkDebugUtilsMessageTypeFlagsEXT messageType, const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData, void* pUserData) {
std::cerr << "validation layer: " << pCallbackData->pMessage << std::endl;
return VK_FALSE;
}
const std::vector validationLayers={
“VK\u层\u LUNARG\u标准\u验证”
};
内部void createInstance(AppWindow*app,bool enableValidationLayers)
{
如果(启用ValidationLayers&&!checkValidationLayerSupport()){
抛出std::runtime_错误(“请求验证层,但不可用!”);
}
VkApplicationInfo appInfo={};
appInfo.sType=VK_结构_类型_应用_信息;
appInfo.pApplicationName=“Hello Triangle”;
appInfo.applicationVersion=VK\u MAKE\u VERSION(1,0,0);
appInfo.penginame=“无引擎”;
appInfo.engineVersion=VK\u MAKE\u版本(1,0,0);
appInfo.apiVersion=VK_API_VERSION_1_0;
VkInstanceCreateInfo createInfo={};
createInfo.sType=VK_结构_类型_实例_创建_信息;
createInfo.pApplicationInfo=&appInfo;
自动扩展=getRequiredExtensions(enableValidationLayers);
createInfo.enabledExtensionCount=static_cast(extensions.size());
createInfo.ppEnabledExtensionNames=extensions.data();
如果(启用ValidationLayers){
createInfo.enabledLayerCount=static_cast(validationLayers.size());
createInfo.ppEnabledLayerNames=validationLayers.data();
}
否则{
createInfo.enabledLayerCount=0;
}
if(vkCreateInstance(&createInfo,nullptr,&app->renderObjects.instance)!=VK_SUCCESS){
抛出std::runtime_错误(“创建实例失败!”);
}
}
VkResult CreateDebugUtilsMessengerEXT(VkinInstance实例,常量VkDebugUtilsMessengerCreateInfoEXT*pCreateInfo,常量VkAllocationCallbacks*pAllocator,VkDebugUtilsMessengerEXT*PCCallback){
auto func=(PFN_vkCreateDebugUtilsMessengerEXT)vkGetInstanceProcAddr(实例,“vkCreateDebugUtilsMessengerEXT”);
如果(func!=nullptr){
return func(实例、pCreateInfo、pAllocator、pCallback);
}
否则{
返回VK\u错误\u扩展\u不存在;
}
}
VKAPI_ATTR VkBool32 VKAPI_CALL debugCallback(VKDebugutilsMessageSeverityFlagbitSextMessageSeverity,VKDebugutilsMessageTypeFlagsExtMessageType,const VKDebugutilsMessenger CallbackDataExt*pCallbackData,void*pUserData){
std::cerr您是否已验证扩展
包含字符串VK_EXT_debug_utils
?vkGetInstanceProcAddr(实例,“vkCreateDebugUtilsMessengerEXT”);
未返回null?在VKDebugutilsMessenger CreateInfoExt上设置的严重性标志和类型标志是什么?
?在这一点上可能存在错误,但您没有告诉我们足够的信息来帮助您隔离错误所在的位置。