<div dir="ltr">Ah yes you are right, my mistake. I will update the patch after some more testing. Thx.</div><div class="gmail_extra"><br><div class="gmail_quote">On 8 November 2017 at 17:21, Chris Wilson <span dir="ltr"><<a href="mailto:chris@chris-wilson.co.uk" target="_blank">chris@chris-wilson.co.uk</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Quoting Julien Isorce (2017-11-08 16:55:05)<br>
<div><div class="h5">> v2: add early return if (flag & MAP_INTERNAL_MASK)<br>
><br>
> Already implemented for Gallium drivers.<br>
><br>
> Useful for gbm_bo_(un)map.<br>
><br>
> Tested by porting wayland/weston/clients/simple-<wbr>dmabuf-drm.c to GBM.<br>
><br>
> Signed-off-by: Julien Isorce <<a href="mailto:jisorce@oblong.com">jisorce@oblong.com</a>><br>
> ---<br>
>  src/mesa/drivers/dri/i965/<wbr>intel_screen.c | 51 ++++++++++++++++++++++++++++++<wbr>--<br>
>  1 file changed, 49 insertions(+), 2 deletions(-)<br>
><br>
> diff --git a/src/mesa/drivers/dri/i965/<wbr>intel_screen.c b/src/mesa/drivers/dri/i965/<wbr>intel_screen.c<br>
> index cdc36ad..b7b0e25 100644<br>
> --- a/src/mesa/drivers/dri/i965/<wbr>intel_screen.c<br>
> +++ b/src/mesa/drivers/dri/i965/<wbr>intel_screen.c<br>
> @@ -755,6 +755,53 @@ intel_create_image(__DRIscreen *dri_screen,<br>
>                                 loaderPrivate);<br>
>  }<br>
><br>
> +static void *<br>
> +intel_map_image(__DRIcontext *context, __DRIimage *image,<br>
> +                int x0, int y0, int width, int height,<br>
> +                unsigned int flags, int *stride, void **map_info)<br>
> +{<br>
> +  struct brw_context *brw = NULL;<br>
> +  struct brw_bo *bo = NULL;<br>
> +  void *raw_data = NULL;<br>
> +<br>
> +  if (!context || !image || !stride || !map_info || *map_info)<br>
> +     return NULL;<br>
> +<br>
> +  if (flags & MAP_INTERNAL_MASK)<br>
> +     return NULL;<br>
> +<br>
> +  brw = context->driverPrivate;<br>
> +  bo = image->bo;<br>
> +<br>
> +  assert(brw);<br>
> +  assert(bo);<br>
> +<br>
> +  /* DRI flags and GL_MAP.*_BIT flags are the same, so just pass them on. */<br>
> +  raw_data = brw_bo_map(brw, bo, flags);<br>
> +<br>
> +  if (raw_data) {<br>
> +    *map_info = raw_data;<br>
> +    *stride = image->pitch;<br>
> +  }<br>
> +<br>
> +  return raw_data;<br>
<br>
</div></div>Did you not say the returned address is to pixel0 of the (x,y)x(w,h) rect<br>
within the image? So raw_data + y0*image->pitch + x0*image->cpp?<br>
Or something more like raw_data + y0/util_format_get_<wbr>blockheight(image->format) * image->pitch +<br>
x0/util_format_get_blockwidth(<wbr>image->format) * util_format_get_blocksize(<wbr>image->format);<br>
-Chris<br>
<br>
</blockquote></div><br></div>