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

Robert Foss robert.foss at collabora.com
Wed May 2 08:21:04 UTC 2018


Heya,

On 2018-05-01 18:44, Rob Herring wrote:
> 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.

Thanks for the explanation. The source of my confusion was that the
two drm_gralloc/gralloc_drm.h implementations I looked at all lacked
that enum definition. However the android-x86 one seems to have it.

Anyway, removing the include in v2.


thatfossguy.


More information about the mesa-dev mailing list