<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">2014-03-24 19:55 GMT+08:00 Ander Conselvan de Oliveira <span dir="ltr"><<a href="mailto:conselvan2@gmail.com" target="_blank">conselvan2@gmail.com</a>></span>:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="">On 03/17/2014 11:05 AM, Jammy Zhou wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi Ander,<br>
<br>
Some comments inline.<br>
<br>
And I have some further thinking about current GBM support, which is<br>
tied to specific implementation closely, although the GBM APIs are quite<br>
independent from mesa. I have some idea below to make GBM a generic<br>
solution. I'm not sure if anybody else in the community raised this<br>
before. What's your opinion?<br>
</blockquote>
<br></div>
Even though the APIs are independent from mesa, they were designed with the idea that GBM would be bundled with an EGL implementation. The logic for allocating buffers for a gbm_surface is in the EGL platform by the design. If GBM were to be split, that API would have to be changed, but in a way that would still let the EGL platform to be in control of the buffer allocation for surfaces.</blockquote>
<div> <br></div><div>Shouldn't EGL related logic be handled by different GBM backends (i.e, DRI backend and Gallium backend)? And the GBM main library can be decoupled cleanly, although it should be used together with EGL. Besides, I think the split is also beneficial for binary EGL/ES2.0 drivers, which are quite popular on ARM platforms.<br>
</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class=""><br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
- Decouple the GBM main library as standard API from mesa, and a<br>
separate repository can be maintained for this library, which defines<br>
callbacks for backend to implement. It can be packaged separately from<br>
mesa by distros.<br>
- Build the DRI backend as a separate library (i.e, gbm_dri.so) just as<br>
the gallium backend, and it should still be part of mesa.<br>
- New native backend can be implemented (i.e, gbm_intel.so), and the GBM<br>
backend can be specified in some configuration file (i.e, /etc/gbm.conf)<br>
if several backends can be used.<br>
</blockquote>
<br></div>
Choosing the backend automatically would be better, but otherwise that would be a reasonable approach if a split were to be made.<br>
<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="">
2014-03-13 22:02 GMT+08:00 Ander Conselvan de Oliveira<br></div>
<<a href="mailto:conselvan2@gmail.com" target="_blank">conselvan2@gmail.com</a> <mailto:<a href="mailto:conselvan2@gmail.com" target="_blank">conselvan2@gmail.com</a>>><u></u>:<div class=""><br>
<br>
    From: Ander Conselvan de Oliveira<br>
    <<a href="mailto:ander.conselvan.de.oliveira@intel.com" target="_blank">ander.conselvan.de.oliveira@<u></u>intel.com</a><br></div>
    <mailto:<a href="mailto:ander.conselvan.de.oliveira@intel.com" target="_blank">ander.conselvan.de.<u></u>oliveira@intel.com</a>>><div class=""><br>
<br>
    Hi,<br>
<br>
    This patch series implements an API for mapping an unapping GBM buffer<br>
    objects. The native intel backend was implemented so that the map and<br>
    unmap functionality wouldn't have to be implemented in the DRI image<br>
<br>
<br>
Can you elaborate more about why the map/unmap functionality cannot be<br>
implemented in the DRI image extension?<br>
</div></blockquote>
<br>
There is no technical limitation, but that functionality falls out of the scope of the extension, which is to allow the implementation of EGLimage and associated extensions and some level of buffer sharing. It has grown quite a bit lately and, IMHO, a bit out of control too.<div class="">
<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
    extension. A new EGL platform is necessary, since platform_drm.c<br>
    assumes it is run on top of a gbm device with the dri backend.<br>
<br>
<br>
The new gbm platform is quite similar as the existing drm platform, why<br>
not improve the drm platform to satisfy the new requirements? For<br>
example, some abstraction can be done to decouple gbm_dri backend<br>
dependency.<br>
</blockquote>
<br></div>
My approach was to duplicate first. You're right that there are code we can share between them, but I rather try to find the proper abstraction later and leave this out of the way for now.<br>
<br>
Thanks,<br>
Ander<br>
<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="">
    This new platform is written so that it could support other native<br>
    backends, not only intel.<br>
<br>
    Comments are really welcome.<br>
<br>
    Thanks,<br>
    Ander<br>
<br>
    Ander Conselvan de Oliveira (8):<br>
       egl/drm: Rename dri2_egl_surface field gbm_surf to gbm_dri_surf<br>
       egl: Protect use of gbm_dri with ifdef HAVE_DRM_PLATFORM<br>
       gbm: Add a native intel backend<br>
       gbm_drm: Keep a reference to drm native objects<br>
       dri, i965: Add an extension for sharing the drm bufmgr<br>
       dri, i965: Add entry point for creating image from native handle<br>
       egl/dri: Add gbm platform<br>
       gbm: Add entry points for mapping and unmapping bos<br>
<br></div>
    <a href="http://configure.ac" target="_blank">configure.ac</a> <<a href="http://configure.ac" target="_blank">http://configure.ac</a>>                              |   7 +-<div><div class="h5"><br>
      include/GL/internal/dri_<u></u>interface.h       |  24 +-<br>
      src/egl/drivers/dri2/Makefile.<u></u>am          |   5 +<br>
      src/egl/drivers/dri2/egl_dri2.<u></u>c           |   8 +<br>
      src/egl/drivers/dri2/egl_dri2.<u></u>h           |  16 +-<br>
      src/egl/drivers/dri2/platform_<u></u>drm.c       |   6 +-<br>
      src/egl/drivers/dri2/platform_<u></u>gbm.c       | 486<br>
    ++++++++++++++++++++++++++++++<br>
      src/egl/main/Makefile.am                  |   5 +<br>
      src/egl/main/egldisplay.c                 |   3 +-<br>
      src/egl/main/egldisplay.h                 |   1 +<br>
      src/gbm/Makefile.am                       |  14 +-<br>
      src/gbm/backends/dri/gbm_dri.c            |   3 +<br>
      src/gbm/backends/intel/gbm_<u></u>intel.c        | 270 +++++++++++++++++<br>
      src/gbm/backends/intel/gbm_<u></u>intel.h        |  76 +++++<br>
      src/gbm/main/backend.c                    |   2 +<br>
      src/gbm/main/common_drm.h                 |  13 +<br>
      src/gbm/main/gbm.c                        |  25 ++<br>
      src/gbm/main/gbm.h                        |  10 +<br>
      src/gbm/main/gbmint.h                     |   4 +<br>
      src/mesa/drivers/dri/common/<u></u>dri_util.c    |   2 +<br>
      src/mesa/drivers/dri/common/<u></u>dri_util.h    |   1 +<br>
      src/mesa/drivers/dri/i965/<u></u>intel_regions.c |  50 +--<br>
      src/mesa/drivers/dri/i965/<u></u>intel_regions.h |   6 +<br>
      src/mesa/drivers/dri/i965/<u></u>intel_screen.c  |  46 ++-<br>
      24 files changed, 1044 insertions(+), 39 deletions(-)<br>
      create mode 100644 src/egl/drivers/dri2/platform_<u></u>gbm.c<br>
      create mode 100644 src/gbm/backends/intel/gbm_<u></u>intel.c<br>
      create mode 100644 src/gbm/backends/intel/gbm_<u></u>intel.h<br>
<br>
    --<br>
    1.8.3.2<br>
<br>
    ______________________________<u></u>_________________<br>
    mesa-dev mailing list<br></div></div>
    <a href="mailto:mesa-dev@lists.freedesktop.org" target="_blank">mesa-dev@lists.freedesktop.org</a> <mailto:<a href="mailto:mesa-dev@lists.freedesktop.org" target="_blank">mesa-dev@lists.<u></u>freedesktop.org</a>><br>

    <a href="http://lists.freedesktop.org/mailman/listinfo/mesa-dev" target="_blank">http://lists.freedesktop.org/<u></u>mailman/listinfo/mesa-dev</a><br>
<br>
<br>
</blockquote>
<br>
</blockquote></div><br></div></div>