[Mesa-dev] [PATCH v1 1/2] egl/android: #ifdef out flink name support

Rob Herring robh at kernel.org
Tue May 1 16:44:48 UTC 2018


On Tue, May 1, 2018 at 3:13 AM, Robert Foss <robert.foss at collabora.com> wrote:
> Hey Rob,
>
>
> On 2018-05-01 04:20, Rob Herring wrote:
>>
>> On Fri, Apr 27, 2018 at 6:57 AM, Robert Foss <robert.foss at collabora.com>
>> wrote:
>>>
>>> From: Rob Herring <robh at kernel.org>
>>>
>>> Maintaining both flink names and prime fd support which are provided by
>>> 2 different gralloc implementations is problematic because we have a
>>> dependency on a specific gralloc implementation header.
>>>
>>> This mostly disables the dependency on the gralloc implementation and
>>> headers. The dependency on GRALLOC_MODULE_PERFORM_GET_DRM_FD remains for
>>> now, but the definition is added locally to remove the header
>>> dependency.
>>>
>>> drm_gralloc support can be enabled by setting
>>> BOARD_USES_DRM_GRALLOC=true in BoardConfig.mk.
>>>
>>> Signed-off-by: Rob Herring <robh at kernel.org>
>>> Signed-off-by: Robert Foss <robert.foss at collabora.com>
>>> ---
>>> Changes since RFC:
>>>   - Rebased on newer libdrm drmHandleMatch patch
>>>   - Added support for driver probing
>>>
>>>   src/egl/Android.mk                      |  6 ++++-
>>>   src/egl/drivers/dri2/egl_dri2.h         |  2 --
>>>   src/egl/drivers/dri2/platform_android.c | 41
>>> +++++++++++++++++++++++++++++++--
>>>   3 files changed, 44 insertions(+), 5 deletions(-)
>>>
>>> diff --git a/src/egl/Android.mk b/src/egl/Android.mk
>>> index 11818694f4..8412aeb798 100644
>>> --- a/src/egl/Android.mk
>>> +++ b/src/egl/Android.mk
>>> @@ -57,9 +57,13 @@ LOCAL_SHARED_LIBRARIES := \
>>>          libhardware \
>>>          liblog \
>>>          libcutils \
>>> -       libgralloc_drm \
>>>          libsync
>>>
>>> +ifeq ($(BOARD_USES_DRM_GRALLOC),true)
>>> +       LOCAL_CFLAGS += -DHAVE_DRM_GRALLOC
>>> +       LOCAL_SHARED_LIBRARIES += libgralloc_drm
>>> +endif
>>> +
>>>   ifeq ($(filter $(MESA_ANDROID_MAJOR_VERSION), 4 5 6 7),)
>>>   LOCAL_SHARED_LIBRARIES += libnativewindow
>>>   endif
>>> diff --git a/src/egl/drivers/dri2/egl_dri2.h
>>> b/src/egl/drivers/dri2/egl_dri2.h
>>> index adabc527f8..5d8fbfa235 100644
>>> --- a/src/egl/drivers/dri2/egl_dri2.h
>>> +++ b/src/egl/drivers/dri2/egl_dri2.h
>>> @@ -67,8 +67,6 @@ struct zwp_linux_dmabuf_v1;
>>>
>>>   #include <system/window.h>
>>>   #include <hardware/gralloc.h>
>>> -#include <gralloc_drm_handle.h>
>>> -
>>>   #endif /* HAVE_ANDROID_PLATFORM */
>>>
>>>   #include "eglconfig.h"
>>> diff --git a/src/egl/drivers/dri2/platform_android.c
>>> b/src/egl/drivers/dri2/platform_android.c
>>> index 7f1a496ea2..ab1337f750 100644
>>> --- a/src/egl/drivers/dri2/platform_android.c
>>> +++ b/src/egl/drivers/dri2/platform_android.c
>>> @@ -37,7 +37,11 @@
>>>   #include "loader.h"
>>>   #include "egl_dri2.h"
>>>   #include "egl_dri2_fallbacks.h"
>>> +
>>> +#ifdef HAVE_DRM_GRALLOC
>>> +#include <gralloc_drm_handle.h>
>>>   #include "gralloc_drm.h"
>>> +#endif /* HAVE_DRM_GRALLOC */
>>>
>>>   #define ALIGN(val, align)      (((val) + (align) - 1) & ~((align) - 1))
>>>
>>> @@ -164,11 +168,13 @@ get_native_buffer_fd(struct ANativeWindowBuffer
>>> *buf)
>>>      return (handle && handle->numFds) ? handle->data[0] : -1;
>>>   }
>>>
>>> +#ifdef HAVE_DRM_GRALLOC
>>>   static int
>>>   get_native_buffer_name(struct ANativeWindowBuffer *buf)
>>>   {
>>>      return gralloc_drm_get_gem_handle(buf->handle);
>>>   }
>>> +#endif /* HAVE_DRM_GRALLOC */
>>>
>>>   static EGLBoolean
>>>   droid_window_dequeue_buffer(struct dri2_egl_surface *dri2_surf)
>>> @@ -836,6 +842,7 @@ droid_create_image_from_prime_fd(_EGLDisplay *disp,
>>> _EGLContext *ctx,
>>>      return dri2_create_image_dma_buf(disp, ctx, NULL, attr_list);
>>>   }
>>>
>>> +#ifdef HAVE_DRM_GRALLOC
>>>   static _EGLImage *
>>>   droid_create_image_from_name(_EGLDisplay *disp, _EGLContext *ctx,
>>>                                struct ANativeWindowBuffer *buf)
>>> @@ -879,6 +886,7 @@ droid_create_image_from_name(_EGLDisplay *disp,
>>> _EGLContext *ctx,
>>>
>>>      return &dri2_img->base;
>>>   }
>>> +#endif /* HAVE_DRM_GRALLOC */
>>>
>>>   static EGLBoolean
>>>   droid_query_surface(_EGLDriver *drv, _EGLDisplay *dpy, _EGLSurface
>>> *surf,
>>> @@ -935,7 +943,11 @@ dri2_create_image_android_native_buffer(_EGLDisplay
>>> *disp,
>>>      if (fd >= 0)
>>>         return droid_create_image_from_prime_fd(disp, ctx, buf, fd);
>>>
>>> +#ifdef HAVE_DRM_GRALLOC
>>>      return droid_create_image_from_name(disp, ctx, buf);
>>> +#else
>>> +   return NULL;
>>> +#endif
>>>   }
>>>
>>>   static _EGLImage *
>>> @@ -957,6 +969,7 @@ droid_flush_front_buffer(__DRIdrawable * driDrawable,
>>> void *loaderPrivate)
>>>   {
>>>   }
>>>
>>> +#ifdef HAVE_DRM_GRALLOC
>>>   static int
>>>   droid_get_buffers_parse_attachments(struct dri2_egl_surface *dri2_surf,
>>>                                       unsigned int *attachments, int
>>> count)
>>> @@ -1032,6 +1045,7 @@ droid_get_buffers_with_format(__DRIdrawable *
>>> driDrawable,
>>>
>>>      return dri2_surf->buffers;
>>>   }
>>> +#endif /* HAVE_DRM_GRALLOC */
>>>
>>>   static unsigned
>>>   droid_get_capability(void *loaderPrivate, enum dri_loader_cap cap)
>>> @@ -1114,6 +1128,14 @@ droid_add_configs_for_visuals(_EGLDriver *drv,
>>> _EGLDisplay *dpy)
>>>      return (config_count != 0);
>>>   }
>>>
>>> +enum {
>>> +        /* perform(const struct gralloc_module_t *mod,
>>> +         *         int op,
>>> +         *         int *fd);
>>> +         */
>>> +        GRALLOC_MODULE_PERFORM_GET_DRM_FD = 0x40000002,
>>> +};
>>
>>
>> Since you are keeping the header dependency, you can drop this hunk.
>
>
> I'm a bit confused by this comment, which header dependency are you thinking
> of?
>
> The gralloc_drm.h inclusion in platform_android.h is the only one I think I
> left in my patch, that you didn't have.

Yes, and since you have that header you don't need this hunk. I
removed the drm_gralloc header dependencies by adding this local
definition. Also, you may get a compiler error/warning because you
have the enum twice if you did a build with HAVE_DRM_GRALLOC defined.

However, if you remove this, you would need to add an ifdef around
where GRALLOC_MODULE_PERFORM_GET_DRM_FD is used.

Rob


More information about the mesa-dev mailing list