From c55d7757f0f16d52675e9178b5fca43a5ad03f30 Mon Sep 17 00:00:00 2001
From: "Kristian H. Kristensen" <hoegsberg@google.com>
Date: Thu, 6 Aug 2020 16:45:28 -0700
Subject: [PATCH 02/11] egl/android: Look up prime fds in
 droid_create_image_from_prime_fds()

We always need to look them up before calling this function, so move
the lookup into the function to consolidate the code.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6055>
---
 src/egl/drivers/dri2/platform_android.c | 22 ++++++++++------------
 1 file changed, 10 insertions(+), 12 deletions(-)

diff --git a/src/egl/drivers/dri2/platform_android.c b/src/egl/drivers/dri2/platform_android.c
index 3814187724a..646a7333755 100644
--- a/src/egl/drivers/dri2/platform_android.c
+++ b/src/egl/drivers/dri2/platform_android.c
@@ -877,11 +877,17 @@ droid_create_image_from_prime_fds_yuv(_EGLDisplay *disp, _EGLContext *ctx,
 
 static __DRIimage *
 droid_create_image_from_prime_fds(_EGLDisplay *disp, _EGLContext *ctx,
-                                  struct ANativeWindowBuffer *buf, int num_fds, int fds[3])
+                                  struct ANativeWindowBuffer *buf)
 {
    struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp);
    int pitches[4] = { 0 }, offsets[4] = { 0 };
    unsigned error;
+   int num_fds;
+   int fds[3];
+
+   num_fds = get_native_buffer_fds(buf, fds);
+   if (num_fds == 0)
+      return NULL;
 
    if (is_yuv(buf->format)) {
       __DRIimage *image;
@@ -1005,9 +1011,6 @@ dri2_create_image_android_native_buffer(_EGLDisplay *disp,
                                         _EGLContext *ctx,
                                         struct ANativeWindowBuffer *buf)
 {
-   int fds[3];
-   unsigned num_fds;
-
    if (ctx != NULL) {
       /* From the EGL_ANDROID_image_native_buffer spec:
        *
@@ -1026,15 +1029,10 @@ dri2_create_image_android_native_buffer(_EGLDisplay *disp,
       return NULL;
    }
 
-   num_fds = get_native_buffer_fds(buf, fds);
-   if (num_fds > 0) {
-      __DRIimage *dri_image =
-         droid_create_image_from_prime_fds(disp, ctx, buf, num_fds, fds);
-      if (!dri_image)
-         return EGL_NO_IMAGE_KHR;
-
+   __DRIimage *dri_image =
+      droid_create_image_from_prime_fds(disp, ctx, buf);
+   if (dri_image)
       return dri2_create_image_from_dri(disp, dri_image);
-   }
 
 #ifdef HAVE_DRM_GRALLOC
    return droid_create_image_from_name(disp, ctx, buf);
-- 
2.29.2.684.gfbc64c5ab5-goog

