[Mesa-dev] [PATCH] anv: fix enumeration of properties

Jason Ekstrand jason at jlekstrand.net
Fri Nov 11 05:03:03 UTC 2016


On Thu, Oct 6, 2016 at 6:12 AM, Emil Velikov <emil.l.velikov at gmail.com>
wrote:

> 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.
>

Thanks for fixing this!


> 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));
>

We can do this a bit easier using type typed_memcpy helper.  Perhaps
something like this:

*pPropertyCount = MIN2(*pPropertyCount, ARRAY_SIZE(global_extensions));
typed_memcpy(pProperties, global_extensions, *pPropertyCount);

if (*pPropertyCount < ARRAY_SIZE(global_extensions))
   return VK_INCOMPLETE;

I don't know.  Maybe that's not any better.  Either way,

Reviewed-by: Jason Ekstrand <jason at jlekstrand.net>
Cc: "13.0" <mesa-stable at lists.freedesktop.org>


>
> -   *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
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20161110/fcbd7d8d/attachment.html>


More information about the mesa-dev mailing list