egl/android: Respect buffer mask in droid_image_get_buffers (v2)
authorTomasz Figa <tfiga@chromium.org>
Tue, 2 Aug 2016 11:07:50 +0000 (20:07 +0900)
committerChad Versace <chad@kiwitree.net>
Mon, 8 Aug 2016 18:40:31 +0000 (11:40 -0700)
Drivers can request different set of buffers depending on the buffer
mask they pass to the get_buffers callback. This patch makes
droid_image_get_buffers() respect this mask.

v2: Return error only in case of real error condition and ignore requests
    of unavailable buffers.

Signed-off-by: Tomasz Figa <tfiga@chromium.org>
Tested-by: Rob Herring <rob@kernel.org>
Reviewed-by: Chad Versace <chad@kiwitree.net>
Change-Id: I6c3c4eca90f4c618579f6725dec323c004cb44ba

src/egl/drivers/dri2/platform_android.c

index 124a30c..d78c06d 100644 (file)
@@ -434,16 +434,26 @@ droid_image_get_buffers(__DRIdrawable *driDrawable,
 {
    struct dri2_egl_surface *dri2_surf = loaderPrivate;
 
+   images->image_mask = 0;
+
    if (update_buffers(dri2_surf) < 0)
       return 0;
 
-   if (get_back_bo(dri2_surf) < 0) {
-      _eglError(EGL_BAD_PARAMETER, "get_back_bo");
-      return 0;
+   if (buffer_mask & __DRI_IMAGE_BUFFER_FRONT) {
+      /*
+       * We don't support front buffers and GLES doesn't require them for
+       * window surfaces, but some DRI drivers will request them anyway.
+       * We just ignore such request as other platforms backends do.
+       */
    }
 
-   images->image_mask = __DRI_IMAGE_BUFFER_BACK;
-   images->back = dri2_surf->dri_image;
+   if (buffer_mask & __DRI_IMAGE_BUFFER_BACK) {
+      if (get_back_bo(dri2_surf) < 0)
+         return 0;
+
+      images->back = dri2_surf->dri_image;
+      images->image_mask |= __DRI_IMAGE_BUFFER_BACK;
+   }
 
    return 1;
 }