<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Jan 13, 2015 at 10:28 AM, Jason Ekstrand <span dir="ltr"><<a href="mailto:jason@jlekstrand.net" target="_blank">jason@jlekstrand.net</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">This series adds support for doing texture up/downloads using the render<br>
pipeline instead of the blitter.  There are a number of good reasons for<br>
doing so.<br>
<br>
 1) The blitter is commonly thought to be slower than the render pipeline<br>
    in terms of its access to memory.<br>
<br>
 2) The blitter is on a different ringbuffer so using it incurs incurs a<br>
    ring-switching penalty.<br>
<br>
 3) The blitter is incapable of doing format conversion while we get it<br>
    almost for free with the render pipeline.<br>
<br>
This last point is probably the most important one.  In some<br>
micro-benchmarks I did, the render pipeline is somewhere between 5 and 40x<br>
as fast as the CPU for doing format conversion operations.  It's even<br>
faster than CPU-tiling memcpy path when the texture is reasonably large<br>
(1024 square is big enough) and already in a PBO.  </blockquote><div><br></div><div>Actually, it looks like 256x256 is about the tipping point on HSW for whatever it's worth.<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Since the meta paths are<br>
strictly better than the blitter paths, the old blitter paths are removed.<br>
<br>
As a side-effect of these patches, the meta PBO path is tried before the<br>
tiled_memcpy path when the source is already a PBO.  Previously, we weren't<br>
doing this and anything that hit the tiled_memcpy path on an in-use texture<br>
would cause a pipeline stall.<br>
<br>
Jason Ekstrand (10):<br>
  mesa/dd: Add a function for creating a texture from a buffer object<br>
  i965/mipmap_tree: Add a depth parameter to create_for_bo<br>
  i965: Apply the miptree offset to surface state for renderbuffers<br>
  i965: Implement SetTextureStorageForBufferObject<br>
  formats: Use a hash table for _mesa_format_from_array_format<br>
  meta: Add a BlitFramebuffers-based implementation of TexSubImage<br>
  meta: Add an implementation of GetTexSubImage for PBOs<br>
  i965/pixel_read: Use meta_pbo_GetTexSubImage for PBO ReadPixels<br>
  i965/tex_image: Use meta for instead of the blitter PBO TexImage and<br>
    GetTexImage<br>
  i965/tex_subimage: use meta instead of the blitter for PBO TexSubImage<br>
<br>
 src/mesa/Makefile.sources                         |   1 +<br>
 src/mesa/drivers/common/meta.h                    |  17 ++<br>
 src/mesa/drivers/common/meta_tex_subimage.c       | 355 ++++++++++++++++++++++<br>
 src/mesa/drivers/dri/i965/brw_wm_surface_state.c  |   3 +-<br>
 src/mesa/drivers/dri/i965/gen6_surface_state.c    |   3 +-<br>
 src/mesa/drivers/dri/i965/gen7_wm_surface_state.c |   3 +-<br>
 src/mesa/drivers/dri/i965/gen8_surface_state.c    |   3 +-<br>
 src/mesa/drivers/dri/i965/intel_fbo.c             |   1 +<br>
 src/mesa/drivers/dri/i965/intel_mipmap_tree.c     |   9 +-<br>
 src/mesa/drivers/dri/i965/intel_mipmap_tree.h     |   1 +<br>
 src/mesa/drivers/dri/i965/intel_pixel_draw.c      |   2 +-<br>
 src/mesa/drivers/dri/i965/intel_pixel_read.c      | 130 +-------<br>
 src/mesa/drivers/dri/i965/intel_tex.c             |  57 ++++<br>
 src/mesa/drivers/dri/i965/intel_tex_image.c       | 205 ++-----------<br>
 src/mesa/drivers/dri/i965/intel_tex_subimage.c    | 115 +------<br>
 src/mesa/main/dd.h                                |  15 +<br>
 src/mesa/main/formats.c                           |  67 +++-<br>
 17 files changed, 561 insertions(+), 426 deletions(-)<br>
 create mode 100644 src/mesa/drivers/common/meta_tex_subimage.c<br>
<span class="HOEnZb"><font color="#888888"><br>
--<br>
2.2.0<br>
<br>
</font></span></blockquote></div><br></div></div>