首页 > 解决方案 > Vulkan 验证层:loader_create_instance_chain:未能找到“vkGetInstanceProcAddr”

问题描述

我按照本指南创建了一个非常基本的 Vulkan 程序,出于某种原因,即使完全复制了指南中的代码(并且没有使用我自己的版本,该版本略有不同并根据我的需要进行了修改),我仍然收到以下两个验证启动程序时的层错误:

validation layer: loader_create_instance_chain: Failed to find 'vkGetInstanceProcAddr' in layer 
C:\ProgramData\obs-studio-hook\.\graphics-hook32.dll

validation layer: loader_create_device_chain: Failed to find 'vkGetInstanceProcAddr' in layer 
C:\ProgramData\obs-studio-hook\.\graphics-hook32.dll.  Skipping layer.

而且我仍然无法弄清楚这个错误是怎么回事,我也无法在网上找到关于这个特定错误的正确信息。

我有一个线索,而且很重要——我正在使用 CLion,这意味着我需要一个CMakeLists.txt文件来构建整个项目及其依赖项,并且在指南中它们没有显示如何正确执行。

现在,我的CMakeLists.txt文件如下所示:

# This CMakeLists.txt file is not optimized and is probably full of bad practices.
# But it works.
# - Need to make sure no unnecessary binaries are linked
# - Need to make sure local variables like ${PROJECT_NAME} are used wherever they can
cmake_minimum_required(VERSION 3.17)
project(Sandbox)
add_executable(Sandbox main.cpp)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /std:c++17")

set(glm_DIR "path/to/Libraries/glm/cmake/glm")
find_package(glm REQUIRED)
target_link_libraries(Sandbox glm::glm)

find_package(Vulkan)  # Probably confirmed to be elegant
target_link_libraries(Sandbox Vulkan::Vulkan)

include_directories("path/to/Libraries/stb")
include_directories("path/to/Libraries/tinyobjloader")

set(GLFW_BUILD_DOCS OFF CACHE BOOL "" FORCE)
set(GLFW_BUILD_TESTS OFF CACHE BOOL "" FORCE)
set(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
# This probably causes the glfw folder to appear in the project window
add_subdirectory("path/to/Libraries/glfw-3.3.2" build)
target_link_libraries(Sandbox glfw)

重要的是要知道我是 cmake 的新手,在 Windows 10 上工作并且程序运行正常(实际窗口看起来不错,只有控制台令人担忧)。

如果有人可以帮助解决这个问题,将不胜感激。此外,对 的任何优化CMakeLists.txt都会很棒!

提前致谢!

标签: cmakevulkanvalidation-layers

解决方案


这些错误不是由您的应用程序触发的,而是由 OBS Studio 安装的隐式层触发的。应用程序可以全局注册自己的隐式层,然后在您运行 Vulkan 应用程序时立即加载这些层。如果其中一个层有缺陷,即使您的应用程序非常好,您也会在自己的应用程序中遇到验证层错误。

禁用这些的最简单方法是最近发布的 LunarG SDK 中的Vulkan Configurator。如果没有 SDK,您可以通过1在注册表中将其值设置为HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Khronos\Vulkan\ImplicitLayers.


推荐阅读