[Mesa-dev] [PATCH] i965: implement (un)mapImage

Julien Isorce julien.isorce at gmail.com
Tue Nov 14 09:41:09 UTC 2017


Thx for pointing that.

Gentle ping, anyone wants to mark 'reviewed' this patch ?

On 10 November 2017 at 16:18, Rafael Antognolli <rafael.antognolli at intel.com
> wrote:

> On Fri, Nov 10, 2017 at 10:46:03AM +0000, Julien Isorce wrote:
> > Thx for the suggestions.
> >
> > Anyone familiar with _mesa_get_format_block_size and
> _mesa_get_format_bytes
> > wants to review this patch ?
> >
> > On 9 November 2017 at 17:10, Eric Engestrom <eric.engestrom at imgtec.com>
> wrote:
> >
> >     On Thursday, 2017-11-09 17:03:13 +0000, Julien Isorce wrote:
> >     > v2: add early return if (flag & MAP_INTERNAL_MASK)
> >     > v3: take input rect into account and test with kmscube and piglit.
> >     > v4: handle wraparound and bo reference.
>
> Just nitpick, but in case you need to respin a new version of this
> patch, please consider adding the changelog (v2-n) after the commit
> description. See other commits for some examples.
>
> Rafael
>
> >     > Already implemented for Gallium drivers.
> >     >
> >     > Useful for gbm_bo_(un)map.
> >     >
> >     > Tests:
> >     >   By porting wayland/weston/clients/simple-dmabuf-drm.c to GBM.
> >     >   kmscube --mode=rgba
> >     >   kmscube --mode=nv12-1img
> >     >   kmscube --mode=nv12-2img
> >     >   piglit ext_image_dma_buf_import-refcount -auto
> >     >   piglit ext_image_dma_buf_import-transcode-nv12-as-r8-gr88 -auto
> >     >   piglit ext_image_dma_buf_import-sample_rgb -fmt=AR24 -alpha-one
> -auto
> >     >   piglit ext_image_dma_buf_import-sample_rgb -fmt=XR24 -auto
> >     >   piglit ext_image_dma_buf_import-sample_yuv -fmt=NV12 -auto
> >     >   piglit ext_image_dma_buf_import-sample_yuv -fmt=YU12 -auto
> >     >   piglit ext_image_dma_buf_import-sample_yuv -fmt=YV12 -auto
> >     >
> >     > Signed-off-by: Julien Isorce <jisorce at oblong.com>
> >     > ---
> >     >  src/mesa/drivers/dri/i965/intel_screen.c | 75
> >     +++++++++++++++++++++++++++++++-
> >     >  1 file changed, 73 insertions(+), 2 deletions(-)
> >     >
> >     > diff --git a/src/mesa/drivers/dri/i965/intel_screen.c
> b/src/mesa/drivers/
> >     dri/i965/intel_screen.c
> >     > index cdc36ad..6074ee8 100644
> >     > --- a/src/mesa/drivers/dri/i965/intel_screen.c
> >     > +++ b/src/mesa/drivers/dri/i965/intel_screen.c
> >     > @@ -755,6 +755,77 @@ intel_create_image(__DRIscreen *dri_screen,
> >     >                                 loaderPrivate);
> >     >  }
> >     >
> >     > +static void *
> >     > +intel_map_image(__DRIcontext *context, __DRIimage *image,
> >     > +                int x0, int y0, int width, int height,
> >     > +                unsigned int flags, int *stride, void **map_info)
> >     > +{
> >     > +   struct brw_context *brw = NULL;
> >     > +   struct brw_bo *bo = NULL;
> >     > +   void *raw_data = NULL;
> >     > +
> >     > +   if (!context || !image || !stride || !map_info || *map_info)
> >     > +      return NULL;
> >     > +
> >     > +   if (x0 < 0 || x0 > image->width || width > image->width - x0)
> >     > +      return NULL;
> >     > +
> >     > +   if (y0 < 0 || y0 > image->height || height > image->height -
> y0)
> >     > +        return NULL;
> >     > +
> >     > +   if (flags & MAP_INTERNAL_MASK)
> >     > +      return NULL;
> >     > +
> >     > +   brw = context->driverPrivate;
> >     > +   bo = image->bo;
> >     > +
> >     > +   assert(brw);
> >     > +   assert(bo);
> >     > +
> >     > +   brw_bo_reference(bo);
> >     > +
> >     > +   /* DRI flags and GL_MAP.*_BIT flags are the same, so just pass
> them
> >     on. */
> >     > +   raw_data = brw_bo_map(brw, bo, flags);
> >     > +
> >     > +   if (raw_data) {
> >     > +      GLuint pix_w = 1;
> >     > +      GLuint pix_h = 1;
> >     > +      GLint pix_bytes = 1;
> >     > +
> >     > +      *map_info = raw_data;
> >     > +      *stride = image->pitch;
> >     > +
> >     > +      _mesa_get_format_block_size(image->format, &pix_w, &pix_h);
> >     > +      pix_bytes = _mesa_get_format_bytes(image->format);
> >     > +
> >     > +      assert(pix_w);
> >     > +      assert(pix_h);
> >     > +      assert(pix_bytes > 0);
> >     > +
> >     > +      raw_data += ((x0 / pix_w) * pix_bytes) + (y0 / pix_h) *
> image->
> >     pitch;
> >     > +   } else {
> >     > +      brw_bo_unreference(bo);
> >     > +   }
> >
> >     Feels really nit-picky, so don't send a new rev just for that, but:
> >
> >        if (!raw_data) {
> >           brw_bo_unreference(bo);
> >           return NULL;
> >        }
> >
> >        /* code from the `if (raw_data)` branch */
> >
> >     that way you don't have to carry around the indentation :)
> >
> >     > +
> >     > +   return raw_data;
> >     > +}
> >     > +
> >     > +static void
> >     > +intel_unmap_image(__DRIcontext *context, __DRIimage *image, void
> >     *map_info)
> >     > +{
> >     > +   struct brw_bo *bo = NULL;
> >     > +
> >     > +   if (!context || !image || !map_info)
> >     > +      return;
> >     > +
> >     > +   bo = image->bo;
> >     > +
> >     > +   assert(bo);
> >     > +
> >     > +   brw_bo_unmap(bo);
> >     > +   brw_bo_unreference(bo);
> >     > +}
> >     > +
> >     >  static __DRIimage *
> >     >  intel_create_image_with_modifiers(__DRIscreen *dri_screen,
> >     >                                    int width, int height, int
> format,
> >     > @@ -1305,8 +1376,8 @@ static const __DRIimageExtension
> >     intelImageExtension = {
> >     >      .createImageFromDmaBufs             =
> intel_create_image_from_dma_
> >     bufs,
> >     >      .blitImage                          = NULL,
> >     >      .getCapabilities                    = NULL,
> >     > -    .mapImage                           = NULL,
> >     > -    .unmapImage                         = NULL,
> >     > +    .mapImage                           = intel_map_image,
> >     > +    .unmapImage                         = intel_unmap_image,
> >     >      .createImageWithModifiers           = intel_create_image_with_
> >     modifiers,
> >     >      .createImageFromDmaBufs2            =
> intel_create_image_from_dma_
> >     bufs2,
> >     >      .queryDmaBufFormats                 =
> intel_query_dma_buf_formats,
> >     > --
> >     > 2.7.4
> >     >
> >
> >
>
> > _______________________________________________
> > mesa-dev mailing list
> > mesa-dev at lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20171114/4aaa5dfb/attachment-0001.html>


More information about the mesa-dev mailing list