<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Jan 5, 2015 at 3:47 PM, Matt Turner <span dir="ltr"><<a href="mailto:mattst88@gmail.com" target="_blank">mattst88@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5">On Mon, Jan 5, 2015 at 3:27 PM, Jason Ekstrand <<a href="mailto:jason@jlekstrand.net">jason@jlekstrand.net</a>> wrote:<br>
> From: Sisinty Sasmita Patra <<a href="mailto:sisinty.patra@intel.com">sisinty.patra@intel.com</a>><br>
><br>
> Added intel_readpixels_tiled_mempcpy and intel_gettexsubimage_tiled_mempcpy<br>
> functions. These are the fast paths for glReadPixels and glGetTexImage.<br>
><br>
> On chrome, using the RoboHornet 2D Canvas toDataURL test, this patch cuts<br>
> amount of time spent in glReadPixels by more than half and reduces the time<br>
> of the entire test by 10%.<br>
><br>
> v2: Jason Ekstrand <<a href="mailto:jason.ekstrand@intel.com">jason.ekstrand@intel.com</a>><br>
>    - Refactor to make the functions look more like the old<br>
>      intel_tex_subimage_tiled_memcpy<br>
>    - Don't export the readpixels_tiled_memcpy function<br>
>    - Fix some pointer arithmatic bugs in partial image downloads (using<br>
>      ReadPixels with a non-zero x or y offset)<br>
>    - Fix a bug when ReadPixels is performed on an FBO wrapping a texture<br>
>      miplevel other than zero.<br>
><br>
> v3: Jason Ekstrand <<a href="mailto:jason.ekstrand@intel.com">jason.ekstrand@intel.com</a>><br>
>    - Better documentation fot the *_tiled_memcpy functions<br>
>    - Add target restrictions for renderbuffers wrapping textures<br>
> ---<br>
>  src/mesa/drivers/dri/i965/intel_pixel_read.c | 142 ++++++++++++++++++++++++++-<br>
>  src/mesa/drivers/dri/i965/intel_tex.h        |   9 ++<br>
>  src/mesa/drivers/dri/i965/intel_tex_image.c  | 139 +++++++++++++++++++++++++-<br>
>  3 files changed, 287 insertions(+), 3 deletions(-)<br>
><br>
> diff --git a/src/mesa/drivers/dri/i965/intel_pixel_read.c b/src/mesa/drivers/dri/i965/intel_pixel_read.c<br>
> index beb3152..5aa06c2 100644<br>
> --- a/src/mesa/drivers/dri/i965/intel_pixel_read.c<br>
> +++ b/src/mesa/drivers/dri/i965/intel_pixel_read.c<br>
> @@ -38,14 +38,16 @@<br>
><br>
>  #include "brw_context.h"<br>
>  #include "intel_screen.h"<br>
> +#include "intel_batchbuffer.h"<br>
>  #include "intel_blit.h"<br>
>  #include "intel_buffers.h"<br>
>  #include "intel_fbo.h"<br>
>  #include "intel_mipmap_tree.h"<br>
>  #include "intel_pixel.h"<br>
>  #include "intel_buffer_objects.h"<br>
> +#include "intel_tiled_memcpy.h"<br>
><br>
> -#define FILE_DEBUG_FLAG DEBUG_PIXEL<br>
> +#define FILE_DEBUG_FLAG DEBUG_TEXTURE<br>
><br>
>  /* For many applications, the new ability to pull the source buffers<br>
>   * back out of the GTT and then do the packing/conversion operations<br>
> @@ -161,17 +163,155 @@ do_blit_readpixels(struct gl_context * ctx,<br>
>     return true;<br>
>  }<br>
><br>
> +/**<br>
> + * \brief A fast path for glReadPixels<br>
> + *<br>
> + * This fast path is taken when the source format is BGRA, RGBA,<br>
> + * A or L and when the texture memory is X- or Y-tiled.  It downloads<br>
> + * the source data by directly mapping the memory without a GTT fence.<br>
> + * This then needs to be de-tiled on the CPU before presenting the data to<br>
> + * the user in the linear fasion.<br>
> + *<br>
> + * This is a performance win over the conventional texture download path.<br>
> + * In the conventional texture download path, the texture is either mapped<br>
> + * through the GTT or copied to a linear buffer with the blitter before<br>
> + * handing off to a software path.  This allows us to avoid round-tripping<br>
> + * throug the GPU (in the case where we would be blitting) and do only a<br>
<br>
</div></div>typo: through. (occurs in the comment later as well)<br></blockquote><div><br></div><div>Fixed locally. <br></div></div><br></div></div>