2

我使用 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 

是否有必须加载图层的特定顺序?我确定我在某个地方读到过,但我再也找不到了。任何帮助表示赞赏。

4

1 回答 1

2

我发现了问题。我有点尴尬地承认这是一个未初始化的变量。

在我迁移到 Vulkan 1.0.8 之后,我可以找到并加载正确的 VkLayer_parameter_validation.dll,它是在调试中构建的。

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

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

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

于 2016-04-08T18:37:21.297 回答