Vulkan 验证层:loader_create_instance_chain:找不到 'vkGetInstanceProcAddr'
Vulkan Validation Layer: loader_create_instance_chain: Failed to find 'vkGetInstanceProcAddr'
我遵循了指南中的 this guide to create a very basic Vulkan program, and for some reason, even when completely copying the code(并没有使用我自己的版本,它略有不同并根据我的需要进行了修改)我在启动程序时仍然收到以下两个验证层错误:
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 上工作并且程序运行正常(实际 window 看起来不错,只是控制台令人担忧)。
如果有人可以帮助解决这个问题,我们将不胜感激。
此外,对 CMakeLists.txt
的任何优化都会很棒!
提前致谢!
这些错误不是由您的应用程序触发的,而是由 OBS Studio 安装的隐式层触发的。应用程序可以在全局范围内注册自己的隐式层,然后在您 运行 Vulkan 应用程序时立即加载这些层。如果其中一层存在缺陷,即使您的应用程序完全正常,您也会在自己的应用程序中遇到验证层错误。
禁用这些的最简单方法是 LunarG SDK 最近发布的 Vulkan Configurator。如果没有 SDK,您可以通过在 HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Khronos\Vulkan\ImplicitLayers
.
下的注册表中将它们的值设置为 1
来禁用隐式层
我遵循了指南中的 this guide to create a very basic Vulkan program, and for some reason, even when completely copying the code(并没有使用我自己的版本,它略有不同并根据我的需要进行了修改)我在启动程序时仍然收到以下两个验证层错误:
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 上工作并且程序运行正常(实际 window 看起来不错,只是控制台令人担忧)。
如果有人可以帮助解决这个问题,我们将不胜感激。
此外,对 CMakeLists.txt
的任何优化都会很棒!
提前致谢!
这些错误不是由您的应用程序触发的,而是由 OBS Studio 安装的隐式层触发的。应用程序可以在全局范围内注册自己的隐式层,然后在您 运行 Vulkan 应用程序时立即加载这些层。如果其中一层存在缺陷,即使您的应用程序完全正常,您也会在自己的应用程序中遇到验证层错误。
禁用这些的最简单方法是 LunarG SDK 最近发布的 Vulkan Configurator。如果没有 SDK,您可以通过在 HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Khronos\Vulkan\ImplicitLayers
.
1
来禁用隐式层