[Mesa-dev] [PATCH kmscube v2] Detect gst_bo_map/_unmap and use it (or avoid it)

Rob Clark robdclark at gmail.com
Sat Mar 3 11:31:28 UTC 2018


On Fri, Mar 2, 2018 at 7:55 PM, Daniel Díaz Rodríguez
<daniel.diaz at linaro.org> wrote:
> Hello, Rob!
>
>
> On 14 July 2017 at 10:29, Daniel Díaz <daniel.diaz at linaro.org> wrote:
>> Those functions are not available on libMali, thus breaking
>> builds and creating havoc.
>>
>> Removing the specific parts of the code that deal with
>> gbm_bo_map() and gbm_bo_unmap() renders the kmscube utility
>> a little less useful, but still valuable.
>
> Last time we talked about this patch you mentioned you were hesitant
> and deciding whether to do this using this approach or at run time.
> Have you, by any chance, had any thoughts on this recently?

Hmm, would it work instead for kmscube to provide __weak versions of
those fxns that just return NULL?  (or exit(-1) or whatever?)

That way it is at least a runtime thing instead of a compile-time thing..

BR,
-R

> Greetings! See you soon.
>
> Daniel Díaz
> daniel.diaz at linaro.org
>
>
>
>> Signed-off-by: Daniel Díaz <daniel.diaz at linaro.org>
>> Cc: Rob Clark <robdclark at gmail.com>
>> Reviewed-by: Eric Engestrom <eric.engestrom at imgtec.com>
>>
>> ---
>> v2: Formatting, add informational message.
>>
>>  Makefile.am   | 5 ++++-
>>  configure.ac  | 3 +++
>>  gst-decoder.c | 7 ++++++-
>>  kmscube.c     | 4 ++++
>>  4 files changed, 17 insertions(+), 2 deletions(-)
>>
>> diff --git a/Makefile.am b/Makefile.am
>> index a36087d..ab4adbf 100644
>> --- a/Makefile.am
>> +++ b/Makefile.am
>> @@ -43,7 +43,6 @@ kmscube_SOURCES = \
>>         common.c \
>>         common.h \
>>         cube-smooth.c \
>> -       cube-tex.c \
>>         drm-atomic.c \
>>         drm-common.c \
>>         drm-common.h \
>> @@ -59,3 +58,7 @@ kmscube_LDADD += $(GST_LIBS)
>>  kmscube_CFLAGS += $(GST_CFLAGS)
>>  kmscube_SOURCES += cube-video.c gst-decoder.c
>>  endif
>> +
>> +if ENABLE_GBM_MAP
>> +kmscube_SOURCES += cube-tex.c
>> +endif
>> diff --git a/configure.ac b/configure.ac
>> index 8397f7b..c7f1f4d 100644
>> --- a/configure.ac
>> +++ b/configure.ac
>> @@ -65,5 +65,8 @@ if test "x$enable_gbm_modifiers" = xyes; then
>>         AC_DEFINE(HAVE_GBM_MODIFIERS, 1, [Define if you can use GBM properties.])
>>  fi
>>
>> +AC_CHECK_LIB([gbm], [gbm_bo_map], [HAVE_GBM_BO_MAP=yes], [])
>> +AM_CONDITIONAL(ENABLE_GBM_MAP, [test "x$HAVE_GBM_BO_MAP" = "xyes"])
>> +
>>  AC_CONFIG_FILES([Makefile])
>>  AC_OUTPUT
>> diff --git a/gst-decoder.c b/gst-decoder.c
>> index 2d6d581..b84980e 100644
>> --- a/gst-decoder.c
>> +++ b/gst-decoder.c
>> @@ -332,6 +332,7 @@ set_last_frame(struct decoder *dec, EGLImage frame, GstSample *samp)
>>         dec->last_samp = samp;
>>  }
>>
>> +#if HAVE_GBM_BO_MAP
>>  // TODO this could probably be a helper re-used by cube-tex:
>>  static int
>>  buf_to_fd(const struct gbm *gbm, int size, void *ptr)
>> @@ -357,6 +358,7 @@ buf_to_fd(const struct gbm *gbm, int size, void *ptr)
>>
>>         return fd;
>>  }
>> +#endif
>>
>>  static EGLImage
>>  buffer_to_image(struct decoder *dec, GstBuffer *buf)
>> @@ -410,12 +412,15 @@ buffer_to_image(struct decoder *dec, GstBuffer *buf)
>>
>>         if (is_dmabuf_mem) {
>>                 dmabuf_fd = dup(gst_dmabuf_memory_get_fd(mem));
>> -       } else {
>> +       }
>> +#if HAVE_GBM_BO_MAP
>> +       else {
>>                 GstMapInfo map_info;
>>                 gst_buffer_map(buf, &map_info, GST_MAP_READ);
>>                 dmabuf_fd = buf_to_fd(dec->gbm, map_info.size, map_info.data);
>>                 gst_buffer_unmap(buf, &map_info);
>>         }
>> +#endif
>>
>>         if (dmabuf_fd < 0) {
>>                 GST_ERROR("could not obtain DMABUF FD");
>> diff --git a/kmscube.c b/kmscube.c
>> index 3a2c4dd..276dc55 100644
>> --- a/kmscube.c
>> +++ b/kmscube.c
>> @@ -142,7 +142,11 @@ int main(int argc, char *argv[])
>>         else if (mode == VIDEO)
>>                 egl = init_cube_video(gbm, video);
>>         else
>> +#if HAVE_GBM_BO_MAP
>>                 egl = init_cube_tex(gbm, mode);
>> +#else
>> +               printf("gbm_bo_map() support missing\n");
>> +#endif
>>
>>         if (!egl) {
>>                 printf("failed to initialize EGL\n");
>> --
>> 2.7.4


More information about the mesa-dev mailing list