驱动程序表示它支持接口版本 6 但仍导出核心入口点
Driver says it supports interface version 6 but still exports core entrypoints
我有 OpenGL 的经验,我开始学习 Vulkan,从 this tutorial, and I am onto the testing 部分开始。
然而,而不是预期的输出:
我得到的是以下输出:
[vlk] Searching for ICD drivers named /usr/lib32/amdvlkpro32.so
[vlk] Searching for ICD drivers named /usr/lib/amdvlkpro64.so
[vlk] loader_scanned_icd_add: Driver /usr/lib/amdvlkpro64.so says it supports interface version 6 but still exports core entrypoints (Policy #LDP_DRIVER_6)
[vlk] Searching for ICD drivers named /usr/lib32/libvulkan_radeon.so
[vlk] Searching for ICD drivers named /usr/lib/libvulkan_radeon.so
[vlk] Build ICD instance extension list
[vlk] Build ICD instance extension list
[vlk] Build ICD instance extension list
validation layer:
和 vlk
前缀之间的区别只是我在回调中显示消息的方式不同,没有其他改变。作为记录,我确实按照教程中的说明删除了对 DestroyDebugUtilsMessengerEXT()
的调用。
对不起;因为我是 Vulkan 的新手,所以我不知道该放什么代码,但我可以添加任何必要的。
我正在使用 Radeon RX 480。我在 Arch Linux 上 运行,这是 lspci -v
的驱动程序相关输出:
01:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Ellesmere [Radeon RX 470/480/570/570X/580/580X/590] (rev c7) (prog-if 00 [VGA controller])
...
Kernel driver in use: amdgpu
Kernel modules: amdgpu
查看输出,Vulkan 似乎正在搜索专有驱动程序 (amdvlkpro
) 和开源 (mesa) 驱动程序 (libvulkan_radeon
) - 至少我是这样认为的这些可执行文件是什么。
在我看来,这是专有 AMD 驱动程序的问题,所以 - 如果确实如此 - 我该如何防止这种情况发生?有没有办法强制 Vulkan 使用开源驱动程序而不卸载专有驱动程序?
更新
回答我之前的问题,是 - amd-vulkan-prefixes。我现在已经在所有 AMD 驱动程序上测试了该程序,但它没有按预期工作。
以下是各个驱动下运行时程序的输出。这是从头到尾的整个输出。
使用 RADV (vulkan-radeon
)
[vlk] Searching for ICD drivers named /usr/lib32/libvulkan_radeon.so
[vlk] Searching for ICD drivers named /usr/lib/libvulkan_radeon.so
[vlk] Build ICD instance extension list
[vlk] Build ICD instance extension list
即使没有 LDP_DRIVER_6 消息,仍然没有达到预期的输出。
打开 AMDVLK (amdvlk
)
[vlk] Searching for ICD drivers named /usr/lib32/amdvlk32.so
[vlk] Searching for ICD drivers named /usr/lib/amdvlk64.so
[vlk] loader_scanned_icd_add: Driver /usr/lib/amdvlk64.so says it supports interface version 6 but still exports core entrypoints (Policy #LDP_DRIVER_6)
[vlk] Build ICD instance extension list
[vlk] Build ICD instance extension list
关闭 AMDVLK (vulkan-amdgpu-pro
)
[vlk] Searching for ICD drivers named /usr/lib32/amdvlkpro32.so
[vlk] Searching for ICD drivers named /usr/lib/amdvlkpro64.so
[vlk] loader_scanned_icd_add: Driver /usr/lib/amdvlkpro64.so says it supports interface version 6 but still exports core entrypoints (Policy #LDP_DRIVER_6)
[vlk] Build ICD instance extension list
[vlk] Build ICD instance extension list
LDP_DRIVER_6 已从错误列表中删除。在加载程序的第一个版本中,drivers 会导出基本的 vulkan 函数,然后他们更改了规范,以便 drivers 导出具有 vk_icd[= 的不同函数30=] 前缀。由于担心某些平台如何处理来自动态库的导入,他们随后添加了策略 LDP_DRIVER_6;实际上,这并不是真正的问题,主要供应商继续支持加载程序的所有版本,因此策略 LDP_DRIVER_6 已被删除。您可以在 Loader-Driver Interface Spec archive.
中查看更多详细信息
如果您真的想使用另一个 driver 也是可以的。这是通过将环境变量 VK_ICD_FILENAMES 设置为 driver 的 JSON 清单文件的完整路径的冒号分隔列表来完成的,通常在与 actaul driver 相同的位置。这将导致仅加载 VK_ICD_FILENAMES 列表中指定的 driver。执行此操作的最新方法 - 尽管您的 vulkan 加载程序可能不支持它,因为实现它的版本已弃用 LDP_DRIVER_6 - 是使用 VK_DRIVER_FILES 与 VK_ICD_FILENAMES 的行为完全相同(最新版本都支持,但它更喜欢 VK_DRIVER_FILES),此外还有 VK_ADD_DRIVER_FILES,其中包含要在默认列表之前加载的 driver 列表。如果 VK_ICD_FILENAMES 或 VK_DRIVER_FILES 设置 VK_ADD_DRIVER_FILES 将被忽略。目前的做法可以阅读 here archive, though given you're getting an LDP_DRIVER_6 error you likely need to use the older method described here archive.
我有 OpenGL 的经验,我开始学习 Vulkan,从 this tutorial, and I am onto the testing 部分开始。
然而,而不是预期的输出:
我得到的是以下输出:
[vlk] Searching for ICD drivers named /usr/lib32/amdvlkpro32.so
[vlk] Searching for ICD drivers named /usr/lib/amdvlkpro64.so
[vlk] loader_scanned_icd_add: Driver /usr/lib/amdvlkpro64.so says it supports interface version 6 but still exports core entrypoints (Policy #LDP_DRIVER_6)
[vlk] Searching for ICD drivers named /usr/lib32/libvulkan_radeon.so
[vlk] Searching for ICD drivers named /usr/lib/libvulkan_radeon.so
[vlk] Build ICD instance extension list
[vlk] Build ICD instance extension list
[vlk] Build ICD instance extension list
validation layer:
和 vlk
前缀之间的区别只是我在回调中显示消息的方式不同,没有其他改变。作为记录,我确实按照教程中的说明删除了对 DestroyDebugUtilsMessengerEXT()
的调用。
对不起;因为我是 Vulkan 的新手,所以我不知道该放什么代码,但我可以添加任何必要的。
我正在使用 Radeon RX 480。我在 Arch Linux 上 运行,这是 lspci -v
的驱动程序相关输出:
01:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Ellesmere [Radeon RX 470/480/570/570X/580/580X/590] (rev c7) (prog-if 00 [VGA controller])
...
Kernel driver in use: amdgpu
Kernel modules: amdgpu
查看输出,Vulkan 似乎正在搜索专有驱动程序 (amdvlkpro
) 和开源 (mesa) 驱动程序 (libvulkan_radeon
) - 至少我是这样认为的这些可执行文件是什么。
在我看来,这是专有 AMD 驱动程序的问题,所以 - 如果确实如此 - 我该如何防止这种情况发生?有没有办法强制 Vulkan 使用开源驱动程序而不卸载专有驱动程序?
更新
回答我之前的问题,是 - amd-vulkan-prefixes。我现在已经在所有 AMD 驱动程序上测试了该程序,但它没有按预期工作。
以下是各个驱动下运行时程序的输出。这是从头到尾的整个输出。
使用 RADV (vulkan-radeon
)
[vlk] Searching for ICD drivers named /usr/lib32/libvulkan_radeon.so
[vlk] Searching for ICD drivers named /usr/lib/libvulkan_radeon.so
[vlk] Build ICD instance extension list
[vlk] Build ICD instance extension list
即使没有 LDP_DRIVER_6 消息,仍然没有达到预期的输出。
打开 AMDVLK (amdvlk
)
[vlk] Searching for ICD drivers named /usr/lib32/amdvlk32.so
[vlk] Searching for ICD drivers named /usr/lib/amdvlk64.so
[vlk] loader_scanned_icd_add: Driver /usr/lib/amdvlk64.so says it supports interface version 6 but still exports core entrypoints (Policy #LDP_DRIVER_6)
[vlk] Build ICD instance extension list
[vlk] Build ICD instance extension list
关闭 AMDVLK (vulkan-amdgpu-pro
)
[vlk] Searching for ICD drivers named /usr/lib32/amdvlkpro32.so
[vlk] Searching for ICD drivers named /usr/lib/amdvlkpro64.so
[vlk] loader_scanned_icd_add: Driver /usr/lib/amdvlkpro64.so says it supports interface version 6 but still exports core entrypoints (Policy #LDP_DRIVER_6)
[vlk] Build ICD instance extension list
[vlk] Build ICD instance extension list
LDP_DRIVER_6 已从错误列表中删除。在加载程序的第一个版本中,drivers 会导出基本的 vulkan 函数,然后他们更改了规范,以便 drivers 导出具有 vk_icd[= 的不同函数30=] 前缀。由于担心某些平台如何处理来自动态库的导入,他们随后添加了策略 LDP_DRIVER_6;实际上,这并不是真正的问题,主要供应商继续支持加载程序的所有版本,因此策略 LDP_DRIVER_6 已被删除。您可以在 Loader-Driver Interface Spec archive.
中查看更多详细信息如果您真的想使用另一个 driver 也是可以的。这是通过将环境变量 VK_ICD_FILENAMES 设置为 driver 的 JSON 清单文件的完整路径的冒号分隔列表来完成的,通常在与 actaul driver 相同的位置。这将导致仅加载 VK_ICD_FILENAMES 列表中指定的 driver。执行此操作的最新方法 - 尽管您的 vulkan 加载程序可能不支持它,因为实现它的版本已弃用 LDP_DRIVER_6 - 是使用 VK_DRIVER_FILES 与 VK_ICD_FILENAMES 的行为完全相同(最新版本都支持,但它更喜欢 VK_DRIVER_FILES),此外还有 VK_ADD_DRIVER_FILES,其中包含要在默认列表之前加载的 driver 列表。如果 VK_ICD_FILENAMES 或 VK_DRIVER_FILES 设置 VK_ADD_DRIVER_FILES 将被忽略。目前的做法可以阅读 here archive, though given you're getting an LDP_DRIVER_6 error you likely need to use the older method described here archive.