C++ VkLayer_param_checker.dll访问冲突

C++ VkLayer_param_checker.dll访问冲突,c++,vulkan,C++,Vulkan,我使用LunarG安装程序设置了一个Vulkan 1.0.5.0程序,它可以在不启用任何层的情况下工作 当我尝试启用以下任一选项时: VK_LAYER_LUNARG_param_checker VK_LAYER_LUNARG_api_dump VK_LAYER_LUNARG_standard_validation 当我尝试调用vkCreateInstance时,我在VkLayer_param_checker.dll或VkLayer_api_dump.dll中遇到访问冲突 如果我尝试将任何一个

我使用LunarG安装程序设置了一个Vulkan 1.0.5.0程序,它可以在不启用任何层的情况下工作

当我尝试启用以下任一选项时:

VK_LAYER_LUNARG_param_checker
VK_LAYER_LUNARG_api_dump
VK_LAYER_LUNARG_standard_validation 
当我尝试调用vkCreateInstance时,我在VkLayer_param_checker.dll或VkLayer_api_dump.dll中遇到访问冲突

如果我尝试将任何一个单独加载为唯一层,它们也会失败

JSON文件存在于注册表中的ExplicitLayers下,文件本身看起来很好

我在VisualStudio中还收到一条消息,即DLL已加载

这些层在旧的1.0.3.1测试程序上工作,这很奇怪,我能够启用以下所有功能:

VK_LAYER_LUNARG_device_limits
VK_LAYER_LUNARG_draw_state
VK_LAYER_LUNARG_image
VK_LAYER_LUNARG_mem_tracker
VK_LAYER_LUNARG_object_tracker
VK_LAYER_LUNARG_screenshot
VK_LAYER_LUNARG_swapchain
VK_LAYER_GOOGLE_threading
VK_LAYER_GOOGLE_unique_objects
VK_LAYER_VALVE_steam_overlay 

图层是否有特定的加载顺序?我肯定我在什么地方读过,但我再也找不到了。感谢您的帮助。

我发现了问题所在。我有点不好意思承认这是一个未初始化的变量

在我转到Vulkan 1.0.8之后,我可以找到并加载在调试中构建的正确VkLayer_参数_validation.dll

问题是,在我的应用程序信息中,我未能分配PenginName。即使是分配
也会奏效。但是我没有分配任何东西。由于它是一个未分配的
常量字符*
,它会立即将我们传送到未定义的行为区域。Vulkan也不能将其分配给
nullptr
,否则该层会将其标记为这样,并实际向我提供该输出。(但我并不是把责任归咎于此)

从技术上讲,我本可以避免这种情况。这是我自己的错,因为我假设它是空的或只是
。我肯定我也读到过,你必须确保所有的Vulkan结构都被分配了


我希望这可以防止人们犯同样的错误,或者如果你有类似的问题,遇到这个问题,它会鼓励你检查你的变量

有几件事我可以提出建议,所以我将把它们作为不同的注释添加:1)当我在看一个关于这个的教程时,我得到的印象是,它确实需要按特定的顺序排列,因为它们在堆栈中工作。但是我可能错了。2)尝试将图层列表输出到命令行或其他地方,确保它们的顺序与命令行或其他地方相同,这至少会排除这种可能性。3)我非常确定标准验证只是打开了所有功能,是否有可能无法打开标准验证以及其他功能?或者可能需要先进行标准验证。如果到那时你还没有回来,我回家后会调查这件事:)谢谢你的建议。如果我查询可用的层,它们会按照上面的顺序出现(减去行为不端的层)。这就是我将它们添加到结构的
ppLayersEnabled
成员的顺序。如果标准验证确实能够实现所有这些功能,那么它就可以解释为什么它会崩溃,因为它将同时支持两个失败的功能。我只尝试了标准验证,但它仍然崩溃,事实上,我一次只尝试了上面所有失败的验证,但它们仍然崩溃。我回来后会看看我的验证代码。如果你能展示你的代码,这可能会很有用,但在我回家之前,我不太记得哪段代码会有用。