Mesa (master): vulkan: Add a common helper for enumerating instance extension properties

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu Feb 4 20:15:26 UTC 2021


Module: Mesa
Branch: master
Commit: 0260b4a7e74c4ef3aa64a9dfe37895654584bd86
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=0260b4a7e74c4ef3aa64a9dfe37895654584bd86

Author: Jason Ekstrand <jason.ekstrand at intel.com>
Date:   Sat Jan 30 11:03:27 2021 -0600

vulkan: Add a common helper for enumerating instance extension properties

Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
Reviewed-by: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>
Tested-by: Tapani Pälli <tapani.palli at intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8792>

---

 src/amd/vulkan/radv_device.c                | 16 +++++-----------
 src/broadcom/vulkan/v3dv_device.c           | 13 ++-----------
 src/freedreno/vulkan/tu_device.c            | 12 ++----------
 src/gallium/frontends/lavapipe/lvp_device.c | 14 ++++----------
 src/intel/vulkan/anv_device.c               | 14 ++++----------
 src/vulkan/util/vk_instance.c               | 21 +++++++++++++++++++++
 src/vulkan/util/vk_instance.h               |  6 ++++++
 7 files changed, 44 insertions(+), 52 deletions(-)

diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c
index 73e1797ea29..15a509af261 100644
--- a/src/amd/vulkan/radv_device.c
+++ b/src/amd/vulkan/radv_device.c
@@ -5106,18 +5106,12 @@ VkResult radv_EnumerateInstanceExtensionProperties(
     uint32_t*                                   pPropertyCount,
     VkExtensionProperties*                      pProperties)
 {
-	VK_OUTARRAY_MAKE_TYPED(VkExtensionProperties, out, pProperties,
-			       pPropertyCount);
+	if (pLayerName)
+		return vk_error(NULL, VK_ERROR_LAYER_NOT_PRESENT);
 
-	for (int i = 0; i < VK_INSTANCE_EXTENSION_COUNT; i++) {
-		if (radv_instance_extensions_supported.extensions[i]) {
-			vk_outarray_append_typed(VkExtensionProperties, &out, prop) {
-				*prop = vk_instance_extensions[i];
-			}
-		}
-	}
-
-	return vk_outarray_status(&out);
+	return vk_enumerate_instance_extension_properties(
+		&radv_instance_extensions_supported,
+		pPropertyCount, pProperties);
 }
 
 PFN_vkVoidFunction radv_GetInstanceProcAddr(
diff --git a/src/broadcom/vulkan/v3dv_device.c b/src/broadcom/vulkan/v3dv_device.c
index 9cc5b190454..6cc52d68baf 100644
--- a/src/broadcom/vulkan/v3dv_device.c
+++ b/src/broadcom/vulkan/v3dv_device.c
@@ -97,17 +97,8 @@ v3dv_EnumerateInstanceExtensionProperties(const char *pLayerName,
    if (pLayerName)
       return vk_error(NULL, VK_ERROR_LAYER_NOT_PRESENT);
 
-   VK_OUTARRAY_MAKE(out, pProperties, pPropertyCount);
-
-   for (int i = 0; i < VK_INSTANCE_EXTENSION_COUNT; i++) {
-      if (v3dv_instance_extensions_supported.extensions[i]) {
-         vk_outarray_append(&out, prop) {
-            *prop = vk_instance_extensions[i];
-         }
-      }
-   }
-
-   return vk_outarray_status(&out);
+   return vk_enumerate_instance_extension_properties(
+      &v3dv_instance_extensions_supported, pPropertyCount, pProperties);
 }
 
 VkResult
diff --git a/src/freedreno/vulkan/tu_device.c b/src/freedreno/vulkan/tu_device.c
index df13ab0514f..0f7ef2a31aa 100644
--- a/src/freedreno/vulkan/tu_device.c
+++ b/src/freedreno/vulkan/tu_device.c
@@ -1380,19 +1380,11 @@ tu_EnumerateInstanceExtensionProperties(const char *pLayerName,
                                         uint32_t *pPropertyCount,
                                         VkExtensionProperties *pProperties)
 {
-   VK_OUTARRAY_MAKE(out, pProperties, pPropertyCount);
-
-   /* We spport no lyaers */
    if (pLayerName)
       return vk_error(NULL, VK_ERROR_LAYER_NOT_PRESENT);
 
-   for (int i = 0; i < VK_INSTANCE_EXTENSION_COUNT; i++) {
-      if (tu_instance_extensions_supported.extensions[i]) {
-         vk_outarray_append(&out, prop) { *prop = vk_instance_extensions[i]; }
-      }
-   }
-
-   return vk_outarray_status(&out);
+   return vk_enumerate_instance_extension_properties(
+      &tu_instance_extensions_supported, pPropertyCount, pProperties);
 }
 
 PFN_vkVoidFunction
diff --git a/src/gallium/frontends/lavapipe/lvp_device.c b/src/gallium/frontends/lavapipe/lvp_device.c
index 09f3cded595..5458f19c1dc 100644
--- a/src/gallium/frontends/lavapipe/lvp_device.c
+++ b/src/gallium/frontends/lavapipe/lvp_device.c
@@ -846,17 +846,11 @@ VkResult lvp_EnumerateInstanceExtensionProperties(
    uint32_t*                                   pPropertyCount,
    VkExtensionProperties*                      pProperties)
 {
-   VK_OUTARRAY_MAKE(out, pProperties, pPropertyCount);
+   if (pLayerName)
+      return vk_error(NULL, VK_ERROR_LAYER_NOT_PRESENT);
 
-   for (int i = 0; i < VK_INSTANCE_EXTENSION_COUNT; i++) {
-      if (lvp_instance_extensions_supported.extensions[i]) {
-         vk_outarray_append(&out, prop) {
-            *prop = vk_instance_extensions[i];
-         }
-      }
-   }
-
-   return vk_outarray_status(&out);
+   return vk_enumerate_instance_extension_properties(
+      &lvp_instance_extensions_supported, pPropertyCount, pProperties);
 }
 
 VkResult lvp_EnumerateInstanceLayerProperties(
diff --git a/src/intel/vulkan/anv_device.c b/src/intel/vulkan/anv_device.c
index 356d5f8ed55..4349f8f79ea 100644
--- a/src/intel/vulkan/anv_device.c
+++ b/src/intel/vulkan/anv_device.c
@@ -681,17 +681,11 @@ VkResult anv_EnumerateInstanceExtensionProperties(
     uint32_t*                                   pPropertyCount,
     VkExtensionProperties*                      pProperties)
 {
-   VK_OUTARRAY_MAKE(out, pProperties, pPropertyCount);
+   if (pLayerName)
+      return vk_error(VK_ERROR_LAYER_NOT_PRESENT);
 
-   for (int i = 0; i < VK_INSTANCE_EXTENSION_COUNT; i++) {
-      if (anv_instance_extensions_supported.extensions[i]) {
-         vk_outarray_append(&out, prop) {
-            *prop = vk_instance_extensions[i];
-         }
-      }
-   }
-
-   return vk_outarray_status(&out);
+   return vk_enumerate_instance_extension_properties(
+      &anv_instance_extensions_supported, pPropertyCount, pProperties);
 }
 
 static void
diff --git a/src/vulkan/util/vk_instance.c b/src/vulkan/util/vk_instance.c
index 952deed5156..8978f55c6d7 100644
--- a/src/vulkan/util/vk_instance.c
+++ b/src/vulkan/util/vk_instance.c
@@ -25,6 +25,7 @@
 
 #include "vk_alloc.h"
 #include "vk_common_entrypoints.h"
+#include "vk_util.h"
 
 VkResult
 vk_instance_init(struct vk_instance *instance,
@@ -97,6 +98,26 @@ vk_instance_finish(struct vk_instance *instance)
    vk_object_base_finish(&instance->base);
 }
 
+VkResult
+vk_enumerate_instance_extension_properties(
+    const struct vk_instance_extension_table *supported_extensions,
+    uint32_t *pPropertyCount,
+    VkExtensionProperties *pProperties)
+{
+   VK_OUTARRAY_MAKE(out, pProperties, pPropertyCount);
+
+   for (int i = 0; i < VK_INSTANCE_EXTENSION_COUNT; i++) {
+      if (!supported_extensions->extensions[i])
+         continue;
+
+      vk_outarray_append(&out, prop) {
+         *prop = vk_instance_extensions[i];
+      }
+   }
+
+   return vk_outarray_status(&out);
+}
+
 PFN_vkVoidFunction
 vk_instance_get_proc_addr(const struct vk_instance *instance,
                           const struct vk_instance_entrypoint_table *entrypoints,
diff --git a/src/vulkan/util/vk_instance.h b/src/vulkan/util/vk_instance.h
index cbea4489383..5f195ca0d8e 100644
--- a/src/vulkan/util/vk_instance.h
+++ b/src/vulkan/util/vk_instance.h
@@ -71,6 +71,12 @@ vk_instance_init(struct vk_instance *instance,
 void
 vk_instance_finish(struct vk_instance *instance);
 
+VkResult
+vk_enumerate_instance_extension_properties(
+    const struct vk_instance_extension_table *supported_extensions,
+    uint32_t *pPropertyCount,
+    VkExtensionProperties *pProperties);
+
 PFN_vkVoidFunction
 vk_instance_get_proc_addr(const struct vk_instance *instance,
                           const struct vk_instance_entrypoint_table *entrypoints,



More information about the mesa-commit mailing list