[arch-commits] Commit in vulkan-icd-loader/trunk (2 files)
Laurent Carlier
lcarlier at gemini.archlinux.org
Thu Dec 9 14:50:22 UTC 2021
Date: Thursday, December 9, 2021 @ 14:50:21
Author: lcarlier
Revision: 431316
upgpkg: vulkan-icd-loader 1.2.202-1: upstream update 1.2.202
Modified:
vulkan-icd-loader/trunk/PKGBUILD
Deleted:
vulkan-icd-loader/trunk/0001-Dont-call-ToolProps-on-drivers-without-support.patch
-----------------------------------------------------------+
0001-Dont-call-ToolProps-on-drivers-without-support.patch | 126 ------------
PKGBUILD | 17 -
2 files changed, 4 insertions(+), 139 deletions(-)
Deleted: 0001-Dont-call-ToolProps-on-drivers-without-support.patch
===================================================================
--- 0001-Dont-call-ToolProps-on-drivers-without-support.patch 2021-12-09 14:37:35 UTC (rev 431315)
+++ 0001-Dont-call-ToolProps-on-drivers-without-support.patch 2021-12-09 14:50:21 UTC (rev 431316)
@@ -1,126 +0,0 @@
-From 22e9c7c538a2d2cfe2a81cb4fee6a710798b8f11 Mon Sep 17 00:00:00 2001
-From: Charles Giessen <charles at lunarg.com>
-Date: Wed, 17 Nov 2021 14:44:11 -0700
-Subject: [PATCH] Dont call ToolProps on drivers without support
-
-The loader recently added support for calling into drivers in
-vkGetPhysicalDeviceToolPropertieesEXT. However, it only used the value of
-the function pointer to determine if it was safe. It was found that Mesa
-drivers will return a non-null function pointer, even though they do not
-support the extension, and so the loader called this function pointer which
-would then segfault.
-
-The loader prevents this by first checking if the extension is supported by
-the physical device. This necessitates calling
-vkEnumerateDeviceExtensionProperties and allocating some memory on each call
-but since the number of times this function is called should be low, it is
-not an undue performance burden. In the future, the loader should cache the
-list of extensions when calling vkEnumeratePhysicalDevices so that checking if
-a extension function is supported is fast and easy.
-
-Signed-off-by: Laurent Carlier <lordheavym at gmail.com>
----
- loader/extension_manual.c | 46 ++++++++++++++++++++++++++++---
- tests/loader_regression_tests.cpp | 21 ++++++++++++--
- 2 files changed, 61 insertions(+), 6 deletions(-)
-
-diff --git a/loader/extension_manual.c b/loader/extension_manual.c
-index 415b64b74..65c573d91 100644
---- a/loader/extension_manual.c
-+++ b/loader/extension_manual.c
-@@ -305,11 +305,49 @@ VKAPI_ATTR VkResult VKAPI_CALL terminator_GetPhysicalDeviceToolPropertiesEXT(VkP
- struct loader_physical_device_term *phys_dev_term = (struct loader_physical_device_term *)physicalDevice;
- struct loader_icd_term *icd_term = phys_dev_term->this_icd_term;
-
-- if (icd_term->dispatch.GetPhysicalDeviceToolPropertiesEXT) {
-- return icd_term->dispatch.GetPhysicalDeviceToolPropertiesEXT(phys_dev_term->phys_dev, pToolCount, pToolProperties);
-+ bool tooling_info_supported = false;
-+ uint32_t ext_count = 0;
-+ VkExtensionProperties *ext_props = NULL;
-+ VkResult res = VK_SUCCESS;
-+ VkResult enumerate_res = VK_SUCCESS;
-+
-+ enumerate_res = icd_term->dispatch.EnumerateDeviceExtensionProperties(phys_dev_term->phys_dev, NULL, &ext_count, NULL);
-+ if (enumerate_res != VK_SUCCESS) {
-+ goto out;
- }
-
-+ ext_props = loader_instance_heap_alloc(icd_term->this_instance, sizeof(VkExtensionProperties) * ext_count,
-+ VK_SYSTEM_ALLOCATION_SCOPE_COMMAND);
-+ if (!ext_props) {
-+ res = VK_ERROR_OUT_OF_HOST_MEMORY;
-+ goto out;
-+ }
-+
-+ enumerate_res = icd_term->dispatch.EnumerateDeviceExtensionProperties(phys_dev_term->phys_dev, NULL, &ext_count, ext_props);
-+ if (enumerate_res != VK_SUCCESS) {
-+ goto out;
-+ }
-+
-+ for (uint32_t i = 0; i < ext_count; i++) {
-+ if (strncmp(ext_props[i].extensionName, VK_EXT_TOOLING_INFO_EXTENSION_NAME, VK_MAX_EXTENSION_NAME_SIZE) == 0) {
-+ tooling_info_supported = true;
-+ break;
-+ }
-+ }
-+
-+ if (tooling_info_supported && icd_term->dispatch.GetPhysicalDeviceToolPropertiesEXT) {
-+ res = icd_term->dispatch.GetPhysicalDeviceToolPropertiesEXT(phys_dev_term->phys_dev, pToolCount, pToolProperties);
-+ }
-+
-+out:
- // In the case the driver didn't support the extension, make sure that the first layer doesn't find the count uninitialized
-- *pToolCount = 0;
-- return VK_SUCCESS;
-+ if (!tooling_info_supported || !icd_term->dispatch.GetPhysicalDeviceToolPropertiesEXT) {
-+ *pToolCount = 0;
-+ }
-+
-+ if (ext_props) {
-+ loader_instance_heap_free(icd_term->this_instance, ext_props);
-+ }
-+
-+ return res;
- }
-diff --git a/tests/loader_regression_tests.cpp b/tests/loader_regression_tests.cpp
-index d1687a4f5..469aa8925 100644
---- a/tests/loader_regression_tests.cpp
-+++ b/tests/loader_regression_tests.cpp
-@@ -849,7 +849,24 @@ TEST(ExtensionManual, ToolingProperties) {
- VK_TOOL_PURPOSE_VALIDATION_BIT_EXT,
- "This tool does not exist",
- "No-Layer"};
-- { // extension
-+ { // No support in driver
-+ SingleICDShim env{TestICDDetails{TEST_ICD_PATH_VERSION_6}};
-+ env.get_test_icd().physical_devices.push_back({});
-+
-+ InstWrapper inst{env.vulkan_functions};
-+ inst.CheckCreate();
-+
-+ auto phys_dev = inst.GetPhysDev();
-+
-+ auto getToolProperties = reinterpret_cast<PFN_vkGetPhysicalDeviceToolPropertiesEXT>(
-+ inst.functions->vkGetInstanceProcAddr(inst, "vkGetPhysicalDeviceToolPropertiesEXT"));
-+ handle_assert_has_value(getToolProperties);
-+
-+ uint32_t tool_count = 0;
-+ ASSERT_EQ(VK_SUCCESS, getToolProperties(phys_dev, &tool_count, nullptr));
-+ ASSERT_EQ(tool_count, 0);
-+ }
-+ { // extension is supported in driver
- SingleICDShim env{TestICDDetails{TEST_ICD_PATH_VERSION_6}};
- env.get_test_icd().physical_devices.push_back({});
- env.get_test_icd().supports_tooling_info_ext = true;
-@@ -864,7 +881,7 @@ TEST(ExtensionManual, ToolingProperties) {
- auto getToolProperties = reinterpret_cast<PFN_vkGetPhysicalDeviceToolPropertiesEXT>(
- inst.functions->vkGetInstanceProcAddr(inst, "vkGetPhysicalDeviceToolPropertiesEXT"));
- handle_assert_has_value(getToolProperties);
-- uint32_t tool_count = 1;
-+ uint32_t tool_count = 0;
- ASSERT_EQ(VK_SUCCESS, getToolProperties(phys_dev, &tool_count, nullptr));
- ASSERT_EQ(tool_count, 1);
- VkPhysicalDeviceToolPropertiesEXT props{};
---
-2.34.1
-
Modified: PKGBUILD
===================================================================
--- PKGBUILD 2021-12-09 14:37:35 UTC (rev 431315)
+++ PKGBUILD 2021-12-09 14:50:21 UTC (rev 431316)
@@ -1,8 +1,8 @@
# Maintainer: Laurent Carlier <lordheavym at gmail.com>
pkgname=vulkan-icd-loader
-pkgver=1.2.199
-pkgrel=2
+pkgver=1.2.202
+pkgrel=1
arch=(x86_64)
pkgdesc="Vulkan Installable Client Driver (ICD) Loader"
url="https://www.khronos.org/vulkan/"
@@ -11,18 +11,9 @@
depends=(glibc)
optdepends=('vulkan-driver: packaged vulkan driver') # vulkan-driver: vulkan-intel/vulkan-radeon/nvidia-utils/....
provides=('libvulkan.so')
-source=("${pkgname}-${pkgver}.tar.gz::https://github.com/KhronosGroup/Vulkan-Loader/archive/v${pkgver}.tar.gz"
- 0001-Dont-call-ToolProps-on-drivers-without-support.patch)
-sha256sums=('cc496f6725c7e088510d1a5e7c6a97b61e356b147dcc3d697233ca775dd768ef'
- 'a29f06969f43bbf315ab766a212d88eccbd9921edf270ec187dd2c1d436cce12')
+source=("${pkgname}-${pkgver}.tar.gz::https://github.com/KhronosGroup/Vulkan-Loader/archive/v${pkgver}.tar.gz")
+sha256sums=('8fe23f6f9cc46176565d73e2d1746ff222dec4562f208310d489ce37e9beaf90')
-prepare() {
- cd "${srcdir}"/Vulkan-Loader*
-
- # fix segfault with mesa drivers
- patch -Np1 -i ../0001-Dont-call-ToolProps-on-drivers-without-support.patch
-}
-
build() {
cd "${srcdir}"/Vulkan-Loader*
More information about the arch-commits
mailing list