Module: Mesa
Branch: master
Commit: 0c94b3f55bc5f1db5aba3b294317b97241bfd9a0
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=0c94b3f55bc5f1db5aba3b294317b97241bfd9a0

Author: Yiwei Zhang <[email protected]>
Date:   Tue May  4 23:35:06 2021 +0000

venus: populate VK_ERROR_OUT_OF_HOST_MEMORY if applied

Fix dEQP-VK.wsi.android.swapchain.simulate_oom.* failures.

Signed-off-by: Yiwei Zhang <[email protected]>
Reviewed-by: Chia-I Wu <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10639>

---

 src/virtio/vulkan/vn_android.c | 21 ++++++++++++---------
 1 file changed, 12 insertions(+), 9 deletions(-)

diff --git a/src/virtio/vulkan/vn_android.c b/src/virtio/vulkan/vn_android.c
index 8bd4d99994b..e9c40912d28 100644
--- a/src/virtio/vulkan/vn_android.c
+++ b/src/virtio/vulkan/vn_android.c
@@ -164,11 +164,12 @@ vn_get_gralloc_buffer_info(buffer_handle_t handle,
    return true;
 }
 
-static uint32_t
+static VkResult
 vn_num_planes_from_format_and_modifier(VkPhysicalDevice physical_device,
                                        VkFormat format,
                                        uint64_t modifier,
-                                       const VkAllocationCallbacks *alloc)
+                                       const VkAllocationCallbacks *alloc,
+                                       uint32_t *out_num_planes)
 {
    VkDrmFormatModifierPropertiesListEXT mod_prop_list = {
       .sType = VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT,
@@ -184,7 +185,7 @@ vn_num_planes_from_format_and_modifier(VkPhysicalDevice 
physical_device,
                                          &format_prop);
 
    if (!mod_prop_list.drmFormatModifierCount)
-      return 0;
+      return VK_ERROR_INVALID_EXTERNAL_HANDLE;
 
    VkDrmFormatModifierPropertiesEXT *mod_props =
       vk_zalloc(alloc,
@@ -192,22 +193,21 @@ vn_num_planes_from_format_and_modifier(VkPhysicalDevice 
physical_device,
                    mod_prop_list.drmFormatModifierCount,
                 VN_DEFAULT_ALIGN, VK_SYSTEM_ALLOCATION_SCOPE_COMMAND);
    if (!mod_props)
-      return 0;
+      return VK_ERROR_OUT_OF_HOST_MEMORY;
 
    mod_prop_list.pDrmFormatModifierProperties = mod_props;
    vn_GetPhysicalDeviceFormatProperties2(physical_device, format,
                                          &format_prop);
 
-   uint32_t num_planes = 0;
    for (uint32_t i = 0; i < mod_prop_list.drmFormatModifierCount; i++) {
       if (mod_props[i].drmFormatModifier == modifier) {
-         num_planes = mod_props[i].drmFormatModifierPlaneCount;
+         *out_num_planes = mod_props[i].drmFormatModifierPlaneCount;
          break;
       }
    }
 
    vk_free(alloc, mod_props);
-   return num_planes;
+   return VK_SUCCESS;
 }
 
 VkResult
@@ -262,8 +262,11 @@ vn_image_from_anb(struct vn_device *dev,
       goto fail;
    }
 
-   num_planes = vn_num_planes_from_format_and_modifier(
-      physical_device, image_info->format, format_modifier, alloc);
+   result = vn_num_planes_from_format_and_modifier(
+      physical_device, image_info->format, format_modifier, alloc,
+      &num_planes);
+   if (result != VK_SUCCESS)
+      goto fail;
 
    /* TODO support multi-planar format */
    if (num_planes != 1) {

_______________________________________________
mesa-commit mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to