我使用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
是否必须加载图层的特定顺序?我确定我在某个地方读到了但我再也找不到了。任何帮助表示赞赏。
答案 0 :(得分:2)
我发现了这个问题。我有点尴尬地承认它是一个未初始化的变量。
在我迁移到Vulkan 1.0.8之后,我找到并加载了在调试中构建的正确的VkLayer_parameter_validation.dll。
问题是在我的应用程序信息中,我未能分配pEngineName。即使分配""
也会奏效。但是我没有分配任何东西。鉴于它是未分配的const char*
,它会立即将我们转移到未定义的行为领域。 Vulkan也不能将它分配给nullptr
,否则该层会标记它并实际给我输出。 (但我并没有责怪它)
技术上我可以避免这种情况。假设它为空或只是""
,这是我自己的错。我确定我也读过某个地方,你必须确保所有Vulkan结构都分配了所有内容。
我希望这可能会阻止人们犯同样的错误,或者如果你有类似的东西并遇到这个问题,它会鼓励你检查你的变量!