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

Iago Toral itoral at igalia.com
Wed Nov 23 07:51:07 UTC 2016


Hey Emil,

On Thu, 2016-10-06 at 14:12 +0100, Emil Velikov 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.
> 
> 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>
> 

this obtained the Rb but I think you never landed it in master. Is
there any problem with it or you simply forgot? If there is no
impediment for this to land I'd like to push it, since it fixes some
CTS tests.

Iago

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


More information about the mesa-dev mailing list