如何使 VK_LAYER_KHRONOS_validation 可用?

问题描述

我最近开始学习如何使用 Vulkan。我正在关注 this tutorial,但即使复制/粘贴 their code 我也遇到错误,因为当我调用 vkEnumerateInstanceLayerProperties() 时未列出 VK_LAYER_KHRONOS_validation。

在 Vulkan 配置器中,VK_LAYER_KHRONOS_validation 出现在右侧面板中,但不在底部面板中(我不确定此配置器的用途,但底部面板中有一个“可用层”类别和写在那里的名称是 vkEnumerateInstanceLayerProperties() 列出的那个。

Vulkan Development Status:
- Layers override: "Validation" configuration
- VULKAN_SDK environment variable: D:\Games\lib\Vulkan\1.2.176.1
- Vulkan Loader version: 1.2.141
- user-defined Layers Paths from VK_LAYER_PATH environment variable: None
- user-defined Layers Paths from Vulkan Configurator: None
- Available Layers:
    - VK_LAYER_NV_optimus (1.2.142)
    - VK_LAYER_VALVE_steam_overlay (1.2.136)
    - VK_LAYER_VALVE_steam_fossilize (1.2.136)
    - VK_LAYER_EOS_Overlay (1.2.136)
    - VK_LAYER_EOS_Overlay (1.2.136)
    - VK_LAYER_OBS_HOOK (1.2.131)
    - VK_LAYER_OBS_HOOK (1.2.131)
- Physical Devices:
    - GeForce GTX 950 (discrete GPU) with Vulkan 1.2.142

我发现其他教程使用 VK_LAYER_LUNARG_standard_validation 但它也不起作用并且是 Deprecated

那么我是否需要手动安装验证层,如果是,在哪里? 如果没有,为什么 VK_LAYER_KHRONOS_validation 不可用,我该如何使用它?

我确定我遗漏了一些明显的 ç_ç。


附加信息:

  • 我正在编译 x64
  • 我已经卸载/重新安装了 sdk,但它仍然无法正常工作
  • 错误信息是:validation layers requested,but not available!
  • SDK 是 2021 年 5 月 5 日的 1.2.176.1。我下载了 SDK 安装程序(.exe 第一个
  • 获取可用层,代码为:
uint32_t layerCount;
vkEnumerateInstanceLayerProperties(&layerCount,nullptr);
std::vector<VkLayerProperties> availableLayers(layerCount);
vkEnumerateInstanceLayerProperties(&layerCount,availableLayers.data());
  • 如果我跳过验证,错误消息是:(顺便说一句,为什么 Rockstar Game line 3??)
validation layer: loaderGetDeviceRegistryFiles: GUID for 23 is not SoftwareComponent skipping
validation layer: loaderGetDeviceRegistryFiles: GUID for 24 is not SoftwareComponent skipping
validation layer: loader_get_json: Failed to open JSON file C:\Program Files\Rockstar Games\Social Club\SocialClubVulkanLayer.json
validation layer: loader_get_json: Failed to open JSON file D:\Games\lib\1.2.176.1\Bin\VkLayer_api_dump.json
validation layer: loader_get_json: Failed to open JSON file D:\Games\lib\1.2.176.1\Bin\VkLayer_device_simulation.json
validation layer: loader_get_json: Failed to open JSON file D:\Games\lib\1.2.176.1\Bin\VkLayer_gfxreconstruct.json
validation layer: loader_get_json: Failed to open JSON file D:\Games\lib\1.2.176.1\Bin\VkLayer_khronos_synchronization2.json
validation layer: loader_get_json: Failed to open JSON file D:\Games\lib\1.2.176.1\Bin\VkLayer_khronos_validation.json
validation layer: loader_get_json: Failed to open JSON file D:\Games\lib\1.2.176.1\Bin\VkLayer_monitor.json
validation layer: loader_get_json: Failed to open JSON file D:\Games\lib\1.2.176.1\Bin\VkLayer_screenshot.json
validation layer: verifyMetaLayerComponentLayers: Meta-layer VK_LAYER_LUNARG_override can't find component layer VK_LAYER_KHRONOS_validation at index 0.  Skipping this layer.
validation layer: Removing Meta-layer VK_LAYER_LUNARG_override from instance layer list since it appears invalid.
validation layer: loaderValidateLayers: Layer 0 does not exist in the list of available layers
Failed to create instance!
  • 我的母语不是英语,也不是 StackOverflow 的普通用户,所以如果我犯了错误,请告诉我,以便我进步

编辑: BIN文件夹中存在VkLayer_khronos_validation.dll/.json/.pdb 所以我运行 vulkaninfoSDK.exe 并注意到它尝试文件 D:\Games\lib\1.2.176.1\Bin 加载而不是 D:\Games\lib\Vulkan\1.2.176.1\Bin 所以我想我发现了问题。但为什么?文件在这里,为什么跳过文件夹?

编辑2: 我更改了文件夹(删除了目录中的 \Vulkan\),现在错误是(使用 vulkaninfoSDK.exe):

ERROR: [Loader Message] Code 0 : loader_get_json: Failed to open JSON file C:\Program Files\Rockstar Games\Social Club\SocialClubVulkanLayer.json
WARNING: [Loader Message] Code 0 : loaderAddLayerProperties: D:\Games\lib\1.2.176.1\Bin\VkLayer_api_dump.json invalid layer manifest file version 1.2.0.  May cause errors.
WARNING: [Loader Message] Code 0 : loaderAddLayerProperties: D:\Games\lib\1.2.176.1\Bin\VkLayer_device_simulation.json invalid layer manifest file version 1.2.0.  May cause errors.
WARNING: [Loader Message] Code 0 : loaderAddLayerProperties: D:\Games\lib\1.2.176.1\Bin\VkLayer_gfxreconstruct.json invalid layer manifest file version 1.2.0.  May cause errors.
WARNING: [Loader Message] Code 0 : loaderAddLayerProperties: D:\Games\lib\1.2.176.1\Bin\VkLayer_khronos_synchronization2.json invalid layer manifest file version 1.2.0.  May cause errors.
WARNING: [Loader Message] Code 0 : loaderAddLayerProperties: D:\Games\lib\1.2.176.1\Bin\VkLayer_khronos_validation.json invalid layer manifest file version 1.2.0.  May cause errors.
WARNING: [Loader Message] Code 0 : loaderAddLayerProperties: D:\Games\lib\1.2.176.1\Bin\VkLayer_screenshot.json invalid layer manifest file version 1.2.0.  May cause errors.

使用 code 我得到:

validation layer: loaderGetDeviceRegistryFiles: GUID for 23 is not SoftwareComponent skipping
validation layer: loaderGetDeviceRegistryFiles: GUID for 24 is not SoftwareComponent skipping
validation layer: loader_get_json: Failed to open JSON file C:\Program Files\Rockstar Games\Social Club\SocialClubVulkanLayer.json
validation layer: loaderAddLayerProperties: D:\Games\lib\1.2.176.1\Bin\VkLayer_api_dump.json invalid layer manifest file version 1.2.0.  May cause errors.
validation layer: loaderAddLayerProperties: D:\Games\lib\1.2.176.1\Bin\VkLayer_device_simulation.json invalid layer manifest file version 1.2.0.  May cause errors.
validation layer: loaderAddLayerProperties: D:\Games\lib\1.2.176.1\Bin\VkLayer_gfxreconstruct.json invalid layer manifest file version 1.2.0.  May cause errors.
validation layer: loaderAddLayerProperties: D:\Games\lib\1.2.176.1\Bin\VkLayer_khronos_synchronization2.json invalid layer manifest file version 1.2.0.  May cause errors.
validation layer: loaderAddLayerProperties: D:\Games\lib\1.2.176.1\Bin\VkLayer_khronos_validation.json invalid layer manifest file version 1.2.0.  May cause errors.
validation layer: loaderAddLayerProperties: D:\Games\lib\1.2.176.1\Bin\VkLayer_screenshot.json invalid layer manifest file version 1.2.0.  May cause errors.
validation layer: Searching for ICD drivers named .\nvoglv64.dll
validation layer: Build ICD instance extension list
validation layer: Instance Extension: VK_KHR_device_group_creation (C:\WINDOWS\System32\DriverStore\FileRepository\nv_dispi.inf_amd64_60daf66a00f2e0b6\.\nvoglv64.dll) version 0.0.1
validation layer: Instance Extension: VK_KHR_external_fence_capabilities (C:\WINDOWS\System32\DriverStore\FileRepository\nv_dispi.inf_amd64_60daf66a00f2e0b6\.\nvoglv64.dll) version 0.0.1
validation layer: Instance Extension: VK_KHR_external_memory_capabilities (C:\WINDOWS\System32\DriverStore\FileRepository\nv_dispi.inf_amd64_60daf66a00f2e0b6\.\nvoglv64.dll) version 0.0.1
validation layer: Instance Extension: VK_KHR_external_semaphore_capabilities (C:\WINDOWS\System32\DriverStore\FileRepository\nv_dispi.inf_amd64_60daf66a00f2e0b6\.\nvoglv64.dll) version 0.0.1
validation layer: Instance Extension: VK_KHR_get_physical_device_properties2 (C:\WINDOWS\System32\DriverStore\FileRepository\nv_dispi.inf_amd64_60daf66a00f2e0b6\.\nvoglv64.dll) version 0.0.2
validation layer: Instance Extension: VK_KHR_get_surface_capabilities2 (C:\WINDOWS\System32\DriverStore\FileRepository\nv_dispi.inf_amd64_60daf66a00f2e0b6\.\nvoglv64.dll) version 0.0.1
validation layer: Instance Extension: VK_KHR_surface (C:\WINDOWS\System32\DriverStore\FileRepository\nv_dispi.inf_amd64_60daf66a00f2e0b6\.\nvoglv64.dll) version 0.0.25
validation layer: Instance Extension: VK_KHR_surface_protected_capabilities (C:\WINDOWS\System32\DriverStore\FileRepository\nv_dispi.inf_amd64_60daf66a00f2e0b6\.\nvoglv64.dll) version 0.0.1
validation layer: Instance Extension: VK_KHR_win32_surface (C:\WINDOWS\System32\DriverStore\FileRepository\nv_dispi.inf_amd64_60daf66a00f2e0b6\.\nvoglv64.dll) version 0.0.6
validation layer: Instance Extension: VK_EXT_debug_report (C:\WINDOWS\System32\DriverStore\FileRepository\nv_dispi.inf_amd64_60daf66a00f2e0b6\.\nvoglv64.dll) version 0.0.9
validation layer: Instance Extension: VK_EXT_debug_utils (C:\WINDOWS\System32\DriverStore\FileRepository\nv_dispi.inf_amd64_60daf66a00f2e0b6\.\nvoglv64.dll) version 0.0.2
validation layer: Instance Extension: VK_EXT_swapchain_colorspace (C:\WINDOWS\System32\DriverStore\FileRepository\nv_dispi.inf_amd64_60daf66a00f2e0b6\.\nvoglv64.dll) version 0.0.4
validation layer: Instance Extension: VK_NV_external_memory_capabilities (C:\WINDOWS\System32\DriverStore\FileRepository\nv_dispi.inf_amd64_60daf66a00f2e0b6\.\nvoglv64.dll) version 0.0.1
validation layer: Loading layer library D:\Games\lib\1.2.176.1\Bin\.\VkLayer_khronos_validation.dll
validation layer: Loading layer library C:\ProgramData\obs-studio-hook\.\graphics-hook64.dll
validation layer: Loading layer library C:\WINDOWS\System32\DriverStore\FileRepository\nv_dispi.inf_amd64_60daf66a00f2e0b6\.\nvoglv64.dll
validation layer: Build ICD instance extension list
validation layer: Instance Extension: VK_KHR_device_group_creation (C:\WINDOWS\System32\DriverStore\FileRepository\nv_dispi.inf_amd64_60daf66a00f2e0b6\.\nvoglv64.dll) version 0.0.1
validation layer: Instance Extension: VK_KHR_external_fence_capabilities (C:\WINDOWS\System32\DriverStore\FileRepository\nv_dispi.inf_amd64_60daf66a00f2e0b6\.\nvoglv64.dll) version 0.0.1
validation layer: Instance Extension: VK_KHR_external_memory_capabilities (C:\WINDOWS\System32\DriverStore\FileRepository\nv_dispi.inf_amd64_60daf66a00f2e0b6\.\nvoglv64.dll) version 0.0.1
validation layer: Instance Extension: VK_KHR_external_semaphore_capabilities (C:\WINDOWS\System32\DriverStore\FileRepository\nv_dispi.inf_amd64_60daf66a00f2e0b6\.\nvoglv64.dll) version 0.0.1
validation layer: Instance Extension: VK_KHR_get_physical_device_properties2 (C:\WINDOWS\System32\DriverStore\FileRepository\nv_dispi.inf_amd64_60daf66a00f2e0b6\.\nvoglv64.dll) version 0.0.2
validation layer: Instance Extension: VK_KHR_get_surface_capabilities2 (C:\WINDOWS\System32\DriverStore\FileRepository\nv_dispi.inf_amd64_60daf66a00f2e0b6\.\nvoglv64.dll) version 0.0.1
validation layer: Instance Extension: VK_KHR_surface (C:\WINDOWS\System32\DriverStore\FileRepository\nv_dispi.inf_amd64_60daf66a00f2e0b6\.\nvoglv64.dll) version 0.0.25
validation layer: Instance Extension: VK_KHR_surface_protected_capabilities (C:\WINDOWS\System32\DriverStore\FileRepository\nv_dispi.inf_amd64_60daf66a00f2e0b6\.\nvoglv64.dll) version 0.0.1
validation layer: Instance Extension: VK_KHR_win32_surface (C:\WINDOWS\System32\DriverStore\FileRepository\nv_dispi.inf_amd64_60daf66a00f2e0b6\.\nvoglv64.dll) version 0.0.6
validation layer: Instance Extension: VK_EXT_debug_report (C:\WINDOWS\System32\DriverStore\FileRepository\nv_dispi.inf_amd64_60daf66a00f2e0b6\.\nvoglv64.dll) version 0.0.9
validation layer: Instance Extension: VK_EXT_debug_utils (C:\WINDOWS\System32\DriverStore\FileRepository\nv_dispi.inf_amd64_60daf66a00f2e0b6\.\nvoglv64.dll) version 0.0.2
validation layer: Instance Extension: VK_EXT_swapchain_colorspace (C:\WINDOWS\System32\DriverStore\FileRepository\nv_dispi.inf_amd64_60daf66a00f2e0b6\.\nvoglv64.dll) version 0.0.4
validation layer: Instance Extension: VK_NV_external_memory_capabilities (C:\WINDOWS\System32\DriverStore\FileRepository\nv_dispi.inf_amd64_60daf66a00f2e0b6\.\nvoglv64.dll) version 0.0.1
validation layer: Unloading layer library C:\WINDOWS\System32\DriverStore\FileRepository\nv_dispi.inf_amd64_60daf66a00f2e0b6\.\nvoglv64.dll
validation layer: Unloading layer library C:\ProgramData\obs-studio-hook\.\graphics-hook64.dll
validation layer: Unloading layer library D:\Games\lib\1.2.176.1\Bin\.\VkLayer_khronos_validation.dll

那为什么是 Rockestar Game?以及为什么

层清单文件版本 1.2.0 无效。 ?

编辑: 所以我更改了文件位置,我认为它可以正常工作。

最后一个问题是:loaderAddLayerProperties: D:\Games\lib\1.2.176.1\Bin\VkLayer_api_dump.json invalid layer manifest file version 1.2.0. May cause errors. 为什么“可能会导致错误”,这很重要吗?

只是为了好玩:它为什么要尝试加载 C:\Program Files\Rockstar Games\Social Club\SocialClubVulkanLayer.json? Rockstar 是否在开发 Vulkan 或其他什么?

重新编辑: 我重新卸载/重新安装sdk和????? 这次我 100% 确定我没有移动文件,它仍然尝试从 \lib\1.2.176.1 加载并跳过 \vulkan\ ???

tbh sdk 的第一次安装在那里(没有 \vulkan)并且可能没有工作 bcs 我重命名一个文件夹但是为什么它在重新安装后保留旧路径?

但无论如何,如果我移动它以匹配这些目录,它似乎可以工作 x)

我在一个完全不同的文件夹中重新卸载/重新安装 sdk,你猜怎么着? sdk 安装在 D:\Prgm\1.2.176.1 当我运行 vulkaninfoSDK.exe 时: ERROR: [Loader Message] Code 0 : loader_get_json: Failed to open JSON file D:\Games\lib\1.2.176.1\Bin\VkLayer_api_dump.json

所以我想我被我第一次安装的路径卡住了

只是为了开玩笑:(是的,我很健谈) 我在其原始位置重新卸载/重新安装 sdk,现在它尝试从 D:\Games\lib\Vulkan\1.2.176.1\Bin\VkLayer_api_dump.json 加载文件?我可能把安装搞砸了,但该死的

在 Vulkan 安装分析工具中我找到了 duplicates。 不知道为什么,但它首先查看上一个错误的目录,但存在正确的目录

所以我想删除不必要的目录

解决方法

根据 SDK 发行说明,警告是正常的。 Rockstar 的东西是一些覆盖层或一些被不干净地卸载的东西(如果你愿意,你可以在注册表中删除它,类似于下面的说明)。

您应该检查 %VULKAN_SDK% 变量的值是否正确。

然后您应该检查 HKLM\SOFTWARE\Khronos\Vulkan\ExplicitLayersHKLM\SOFTWARE\WOW6432Node\Khronos\Vulkan\ExplicitLayers 是否正确且没有重复项。 (或者,您可以先卸载,在这种情况下,应该没有 SDK 路径留在那里)

此外,配置器应用程序允许覆盖,因此您需要检查它是工具->重置,并设置为“完全由 Vulkan 应用程序控制”。关闭时应警告没有 Vulkan 覆盖处于活动状态,您应该单击是。