C++ Vulkan-从未调用验证层回调

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

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(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上设置的严重性标志和类型标志是什么?
?在这一点上可能存在错误,但您没有告诉我们足够的信息来帮助您隔离错误所在的位置。