狸村 Mystic Web · 狸村
目录

本页面列出了你在开发 Vulkan 应用程序时可能遇到的常见问题及其解决方案。

核心验证层中出现访问冲突错误

请确保 MSI Afterburner / RivaTuner Statistics Server 没有运行,因为它与 Vulkan 存在一些兼容性问题。

看不到验证层的任何消息 / 验证层不可用

首先,请确保在程序退出后终端保持打开状态,以便验证层有机会打印错误信息。 在 Visual Studio 中,你可以通过按 Ctrl-F5 而不是 F5 来运行程序,在 Linux 上可以通过在终端窗口中执行程序来做到这一点。 如果仍然没有消息,并且你确信验证层已启用,那么你应该按照 此页面 上的“验证安装”说明,确保 Vulkan SDK 已正确安装。 同时确保你的 SDK 版本至少为 1.1.106.0,以支持 VK_LAYER_KHRONOS_validation 层。

vkCreateSwapchainKHR 在 SteamOverlayVulkanLayer64.dll 中触发错误

这似乎是 Steam 客户端测试版中的兼容性问题。 有几种可能的解决方法:

  • 退出 Steam 测试版计划。

  • 将环境变量 DISABLE_VK_LAYER_VALVE_steam_overlay_1 设置为 1

  • 删除注册表中 HKEY_LOCAL_MACHINE\SOFTWARE\Khronos\Vulkan\ImplicitLayers 下的 Steam 覆盖 Vulkan 层条目。

示例:

steam layers env

vkCreateInstance 失败,错误为 VK_ERROR_INCOMPATIBLE_DRIVER

如果你在 MacOS 上使用最新的 MoltenVK SDK,则 vkCreateInstance 可能会返回 VK_ERROR_INCOMPATIBLE_DRIVER 错误。 这是因为 Vulkan SDK 1.3.216 或更新版本 要求你启用 VK_KHR_PORTABILITY_subset 扩展才能使用 MoltenVK,因为它目前尚未完全符合规范。

你需要在 VkInstanceCreateInfo 中添加 VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR 标志,并将 VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME 添加到实例扩展列表中。

代码示例:

...

std::vector<const char*> requiredExtensions;

for(uint32_t i = 0; i < glfwExtensionCount; i++) {
    requiredExtensions.emplace_back(glfwExtensions[i]);
}

requiredExtensions.emplace_back(vk::KHRPortabilityEnumerationExtensionName);

vk::InstanceCreateInfo createInfo(vk::InstanceCreateFlagBits::eEnumeratePortabilityKHR, &appInfo, {}, requiredExtensions);
instance = std::make_unique<vk::raii::Instance>(context, createInfo);

Vulkan 是 Khronos Group Inc. 的注册商标

教程内容版权归原作者,遵循 CC BY-SA 4.0;本站独立代码及设计除外。