VkLayer_param_checker.dll访问冲突

VkLayer_param_checker.dll Access Violation

本文关键字:访问冲突 dll param VkLayer checker      更新时间:2023-10-16

我使用 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 文件存在于显式层下的注册表中,文件本身看起来不错。

我还在视觉工作室中收到消息,表明 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 结构中的所有内容都已分配给。

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