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