[Mesa-dev] [PATCH] anv: fix enumeration of properties
Emil Velikov
emil.l.velikov at gmail.com
Thu Oct 6 13:12:27 UTC 2016
From: Emil Velikov <emil.velikov at collabora.com>
Driver should enumerate only up-to min2(num_available, num_requested)
properties and return VK_INCOMPLETE if the # of requested props is
smaller than the ones available.
Presently we assert out in such cases.
Inspired by a similar fix for RADV.
Should fix: dEQP-VK.api.info.device.extensions
Signed-off-by: Emil Velikov <emil.velikov at collabora.com>
---
src/intel/vulkan/anv_device.c | 20 ++++++++++++++------
1 file changed, 14 insertions(+), 6 deletions(-)
diff --git a/src/intel/vulkan/anv_device.c b/src/intel/vulkan/anv_device.c
index c7b9979..497bf9f 100644
--- a/src/intel/vulkan/anv_device.c
+++ b/src/intel/vulkan/anv_device.c
@@ -1003,15 +1003,19 @@ VkResult anv_EnumerateInstanceExtensionProperties(
uint32_t* pPropertyCount,
VkExtensionProperties* pProperties)
{
+ unsigned i;
+
if (pProperties == NULL) {
*pPropertyCount = ARRAY_SIZE(global_extensions);
return VK_SUCCESS;
}
- assert(*pPropertyCount >= ARRAY_SIZE(global_extensions));
+ for (i = 0; i < MIN2(*pPropertyCount, ARRAY_SIZE(global_extensions)); i++)
+ memcpy(&pProperties[i], &global_extensions[i], sizeof(VkExtensionProperties));
- *pPropertyCount = ARRAY_SIZE(global_extensions);
- memcpy(pProperties, global_extensions, sizeof(global_extensions));
+ *pPropertyCount = i;
+ if (i < ARRAY_SIZE(global_extensions))
+ return VK_INCOMPLETE;
return VK_SUCCESS;
}
@@ -1022,15 +1026,19 @@ VkResult anv_EnumerateDeviceExtensionProperties(
uint32_t* pPropertyCount,
VkExtensionProperties* pProperties)
{
+ unsigned i;
+
if (pProperties == NULL) {
*pPropertyCount = ARRAY_SIZE(device_extensions);
return VK_SUCCESS;
}
- assert(*pPropertyCount >= ARRAY_SIZE(device_extensions));
+ for (i = 0; i < MIN2(*pPropertyCount, ARRAY_SIZE(device_extensions)); i++)
+ memcpy(&pProperties[i], &device_extensions[i], sizeof(VkExtensionProperties));
- *pPropertyCount = ARRAY_SIZE(device_extensions);
- memcpy(pProperties, device_extensions, sizeof(device_extensions));
+ *pPropertyCount = i;
+ if (i < ARRAY_SIZE(device_extensions))
+ return VK_INCOMPLETE;
return VK_SUCCESS;
}
--
2.9.3
More information about the mesa-dev
mailing list