VkLayer_param_checker.dll 访问冲突

VkLayer_param_checker.dll Access Violation

我使用 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 下的注册表中,文件本身看起来很好。

我还在 visual studio 中收到消息,指出 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_parameter_validation.dll。

问题是在我的应用程序信息中我未能分配 pEngineName。即使分配 "" 也会起作用。但是我没有分配任何东西。鉴于它是一个未分配的 const char*,它立即将我们传送到未定义的行为领域。 Vulkan 也不能将它分配给 nullptr,否则该层会这样标记它并实际给了我那个输出。 (但我并没有责怪它)

从技术上讲,我本可以避免这种情况。假设它为空或只是 "" 是我自己的错。我确定我还在某处读到,您必须确保所有 Vulkan 结构中的所有内容都已分配。

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