On 18 July 2016 at 13:02, Tomasz Figa <tf...@chromium.org> wrote:
> On Mon, Jul 18, 2016 at 7:28 PM, Emil Velikov <emil.l.veli...@gmail.com> 
> wrote:
>> Hi Tomasz,
>>
>> On 15 July 2016 at 08:53, Tomasz Figa <tf...@chromium.org> wrote:
>>> We can support render nodes alone without any private headers, so let's
>>> make support for control nodes depend on presence of private drm_gralloc
>>> headers.
>>>
>>> Signed-off-by: Tomasz Figa <tf...@chromium.org>
>>> ---
>>>  src/egl/Android.mk                      |   1 +
>>>  src/egl/drivers/dri2/egl_dri2.h         |   2 +
>>>  src/egl/drivers/dri2/platform_android.c | 194 
>>> ++++++++++++++++++++++----------
>>>  3 files changed, 138 insertions(+), 59 deletions(-)
>>>
>>> diff --git a/src/egl/Android.mk b/src/egl/Android.mk
>>> index bfd56a7..72ec02a 100644
>>> --- a/src/egl/Android.mk
>>> +++ b/src/egl/Android.mk
>>> @@ -41,6 +41,7 @@ LOCAL_SRC_FILES := \
>>>  LOCAL_CFLAGS := \
>>>         -D_EGL_NATIVE_PLATFORM=_EGL_PLATFORM_ANDROID \
>>>         -D_EGL_BUILT_IN_DRIVER_DRI2 \
>>> +       -DHAS_GRALLOC_DRM_HEADERS \
>>>         -DHAVE_ANDROID_PLATFORM
>>>
>>>  LOCAL_C_INCLUDES := \
>>> diff --git a/src/egl/drivers/dri2/egl_dri2.h 
>>> b/src/egl/drivers/dri2/egl_dri2.h
>>> index 3ffc177..6f9623b 100644
>>> --- a/src/egl/drivers/dri2/egl_dri2.h
>>> +++ b/src/egl/drivers/dri2/egl_dri2.h
>>> @@ -65,7 +65,9 @@
>>>  #endif
>>>
>>>  #include <hardware/gralloc.h>
>>> +#ifdef HAS_GRALLOC_DRM_HEADERS
>>>  #include <gralloc_drm_handle.h>
>>> +#endif
>> All of this/these can be simplified, by using a local header which
>> includes gralloc_drm_handle.h (if possible) and alternatively
>> providing dummy defines and static inline function(s).
>
> Sounds good to me. I'll give it a try.
>
My grammar is a bit off so here and example of what I meant, just in case:

cat local_header.h
#ifdef HAS_GRALLOC_DRM_HEADERS
#include <gralloc_drm_handle.h>
#include <gralloc_drm.h>
#else
#define FOO
static inline bar(...)
#endif

>>
>>
>>> @@ -509,53 +516,43 @@ droid_swap_buffers(_EGLDriver *drv, _EGLDisplay 
>>> *disp, _EGLSurface *draw)
>>>  }
>>>
>>>  static _EGLImage *
>>> -dri2_create_image_android_native_buffer(_EGLDisplay *disp,
>>> -                                        _EGLContext *ctx,
>>> -                                        struct ANativeWindowBuffer *buf)
>>> +droid_create_image_from_prime_fd(_EGLDisplay *disp, _EGLContext *ctx,
>>> +                                 struct ANativeWindowBuffer *buf)
>> Please keep have this as a separate patch - "factorise
>> dri2_create_image_android_native_buffer"
>
> Okay.
>
>>
>>
>>> +   _eglError(EGL_BAD_PARAMETER, "eglCreateEGLImageKHR: Only PRIME buffers 
>>> are supported");
>>> +   return NULL;
>> This (s/NULL/0/) can live in as the static inline
>> gralloc_drm_get_gem_handle() in our local header.
>
> Okay.
>
>>
>>
>>> +#define DRM_RENDER_DEV_NAME  "%s/renderD%d"
>>> +
>>> +static int
>>> +droid_open_device(_EGLDisplay *dpy)
>>> +{
>>> +   struct dri2_egl_display *dri2_dpy = dpy->DriverData;
>>> +   const int limit = 64;
>>> +   const int base = 128;
>>> +   int fd;
>>> +   int i;
>>> +
>>> +   for (i = 0; i < limit; ++i) {
>>> +      char *card_path;
>>> +      if (asprintf(&card_path, DRM_RENDER_DEV_NAME, DRM_DIR_NAME, base + 
>>> i) < 0)
>> Why do we need any of this ? What gralloc implementation are you guys using ?
>
> We are using our heavily rewritten fork of some old drm_gralloc
> release. It supports only render nodes and PRIME FDs and doesn't
> export the DRI device FD outside of its internals (which isn't
> actually even fully correct, at least for PRIME and render nodes, see
> my reply to Rob's comments).
>
That explain it, since https://chromium.googlesource.com/ does not
have gralloc, and
https://android.googlesource.com/platform/external/drm_gralloc/ has
both the DRM_FD define and the gem/flink function(s)?

Can I suggest porting the fd drm_gralloc/gbm_gralloc patches to your
private copy/repo. This way we'll have some consistency throughout
gralloc implementations and you can use gbm_gralloc directly in the
(hopefully) not too distant future.

>>
>> Afaict the latter must provide reasonable result for
>> hw_get_module(GRALLOC_HARDWARE_MODULE_ID...) and as it's missing the
>> perform hook existing code should work just fine. Right ?
>
> Existing code would fail with -1 as file descriptor, wouldn't it? Or
> I'm failing to see something?
>
Nope you're spot on - I had a dull moment. May I suggest revering the
patch which removed the GRALLOC_MODULE_PERFORM_GET_DRM_FD handling in
your gralloc ? Reason being is that the proposed code is very 'flaky'
and can open the wrong render node on systems which have more than
one.

Regards,
Emil
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to