asahi: gracefully handle allocating linear images
authorKarol Herbst <git@karolherbst.de>
Fri, 1 Sep 2023 09:52:50 +0000 (11:52 +0200)
committerMarge Bot <emma+marge@anholt.net>
Tue, 5 Sep 2023 18:50:33 +0000 (18:50 +0000)
Frontends might try to allocate linear textures or images, we  should
gracefully return NULL so frontends can do fallback paths.

Signed-off-by: Karol Herbst <git@karolherbst.de>
Reviewed-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25052>

src/gallium/drivers/asahi/agx_pipe.c

index 162bb54..8fa5006 100644 (file)
@@ -499,8 +499,10 @@ agx_select_best_modifier(const struct agx_resource *pres)
          return DRM_FORMAT_MOD_APPLE_TWIDDLED;
    }
 
-   assert(agx_linear_allowed(pres));
-   return DRM_FORMAT_MOD_LINEAR;
+   if (agx_linear_allowed(pres))
+      return DRM_FORMAT_MOD_LINEAR;
+   else
+      return DRM_FORMAT_MOD_INVALID;
 }
 
 static struct pipe_resource *
@@ -521,16 +523,14 @@ agx_resource_create_with_modifiers(struct pipe_screen *screen,
    if (modifiers) {
       nresource->modifier =
          agx_select_modifier_from_list(nresource, modifiers, count);
-
-      /* There may not be a matching modifier, bail if so */
-      if (nresource->modifier == DRM_FORMAT_MOD_INVALID) {
-         free(nresource);
-         return NULL;
-      }
    } else {
       nresource->modifier = agx_select_best_modifier(nresource);
+   }
 
-      assert(nresource->modifier != DRM_FORMAT_MOD_INVALID);
+   /* There may not be a matching modifier, bail if so */
+   if (nresource->modifier == DRM_FORMAT_MOD_INVALID) {
+      free(nresource);
+      return NULL;
    }
 
    /* If there's only 1 layer and there's no compression, there's no harm in