Quoting Julien Isorce (2017-11-08 16:55:05)
> v2: add early return if (flag & MAP_INTERNAL_MASK)
> 
> Already implemented for Gallium drivers.
> 
> Useful for gbm_bo_(un)map.
> 
> Tested by porting wayland/weston/clients/simple-dmabuf-drm.c to GBM.
> 
> Signed-off-by: Julien Isorce <jiso...@oblong.com>
> ---
>  src/mesa/drivers/dri/i965/intel_screen.c | 51 
> ++++++++++++++++++++++++++++++--
>  1 file changed, 49 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..b7b0e25 100644
> --- a/src/mesa/drivers/dri/i965/intel_screen.c
> +++ b/src/mesa/drivers/dri/i965/intel_screen.c
> @@ -755,6 +755,53 @@ 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 (flags & MAP_INTERNAL_MASK)
> +     return NULL;
> +
> +  brw = context->driverPrivate;
> +  bo = image->bo;
> +
> +  assert(brw);
> +  assert(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) {
> +    *map_info = raw_data;
> +    *stride = image->pitch;
> +  }
> +
> +  return raw_data;

Did you not say the returned address is to pixel0 of the (x,y)x(w,h) rect
within the image? So raw_data + y0*image->pitch + x0*image->cpp?
Or something more like raw_data + y0/util_format_get_blockheight(image->format) 
* image->pitch +
x0/util_format_get_blockwidth(image->format) * 
util_format_get_blocksize(image->format);
-Chris
 
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to