On Thursday, 2016-10-06 14:12:27 +0100, Emil Velikov wrote: > From: Emil Velikov <emil.veli...@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.veli...@collabora.com>
Matches the spec[1] :) Reviewed-by: Eric Engestrom <eric.engest...@imgtec.com> [1] https://www.khronos.org/registry/vulkan/specs/1.0/xhtml/vkspec.html#extended-functionality-extensions > --- > 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 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev