[Mesa-dev] [PATCH 00/23] Gallium blit rework

Marek Olšák maraeo at gmail.com
Fri Sep 14 10:09:27 PDT 2012


This series reworks blitting and MSAA resolving in Gallium as discussed here:
http://www.mail-archive.com/mesa-dev@lists.freedesktop.org/msg26592.html

I'd like to clarify some more rules for the blit function:
- Z/S blitting must always be supported regardless of shader stencil export and sampler support (like glBlitFramebuffer). r300_blit is an example of how stencil can be copied.
- The render condition has no effect.

I have tested r600g, r300g, softpipe, and llvmpipe.

The fbo-blit-stretch test started failing on softpipe. After careful examination it looks like softpipe is culling one of the two triangles of the quad u_blitter is rendering. The other tested drivers don't have this issue. I assume it's a bug in softpipe that was just uncovered.

I haven't implemented the blit in the nv50/nvc0 driver, because Christoph has already started working on his own implemention.

On the st/mesa side, I couldn't change CopyTexSubImage to use the new blit, because the blit doesn't allow the alpha channel to be forced to 1. The only way to achieve that is to set blit.src.format to an RGBX format and we don't have enough RGBX formats to be able to do that.

That's it. Please review.

Marek Olšák (23):
      draw: fix non-indexed draw calls if there's an index buffer
      softpipe: fix set_framebuffer_state with uninitialized surfaces past nr_cbufs-1
      gallium: add PIPE_CAP_TEXTURE_MULTISAMPLE
      gallium: add blit into the interface
      gallium/u_blitter: check PIPE_CAP_TEXTURE_MULTISAMPLE
      gallium/u_blitter: facilitate co-existence with the Draw module
      gallium/u_blitter: add ability to disable and restore the render condition
      gallium/u_blitter: add gallium blit implementation
      gallium/u_blitter: add helper for blitting via resource_copy_region
      gallium: add helpers for dumping pipe_box and pipe_blit_info
      gallium: implement blit in driver wrappers
      i915g: implement blit
      llvmpipe: implement blit
      nv30: use util_format_is_supported
      nv30: implement blit
      r300g: implement blit
      r600g: implement blit
      radeonsi: implement blit
      softpipe: implement blit
      svga: implement blit
      st/mesa: implement BlitFramebuffer using gallium blit
      st/mesa: implement decompress_with_blit using gallium blit
      gallium: remove resource_resolve

 src/gallium/auxiliary/draw/draw_context.c          |    2 +-
 src/gallium/auxiliary/draw/draw_private.h          |    1 +
 src/gallium/auxiliary/draw/draw_pt.c               |   11 +-
 src/gallium/auxiliary/util/u_blitter.c             |  632 +++++++++++++++-----
 src/gallium/auxiliary/util/u_blitter.h             |   84 ++-
 src/gallium/auxiliary/util/u_dump.h                |    6 +
 src/gallium/auxiliary/util/u_dump_state.c          |   73 +++
 src/gallium/auxiliary/util/u_surface.c             |   30 +-
 src/gallium/auxiliary/util/u_surface.h             |   11 +-
 src/gallium/docs/d3d11ddi.txt                      |    2 +-
 src/gallium/docs/source/context.rst                |   23 +-
 src/gallium/drivers/galahad/glhd_context.c         |   27 +-
 src/gallium/drivers/i915/i915_context.c            |   11 +-
 src/gallium/drivers/i915/i915_screen.c             |    1 +
 src/gallium/drivers/i915/i915_surface.c            |   77 ++-
 src/gallium/drivers/identity/id_context.c          |   15 +
 src/gallium/drivers/llvmpipe/lp_context.c          |   12 +
 src/gallium/drivers/llvmpipe/lp_context.h          |    3 +
 src/gallium/drivers/llvmpipe/lp_screen.c           |    5 +
 src/gallium/drivers/llvmpipe/lp_surface.c          |   61 ++
 src/gallium/drivers/noop/noop_pipe.c               |    7 +
 src/gallium/drivers/nv30/nv30_context.c            |    9 +
 src/gallium/drivers/nv30/nv30_context.h            |    5 +
 src/gallium/drivers/nv30/nv30_miptree.c            |   60 ++
 src/gallium/drivers/nv30/nv30_query.c              |    3 +
 src/gallium/drivers/nv30/nv30_resource.c           |    2 +-
 src/gallium/drivers/nv30/nv30_resource.h           |    4 +
 src/gallium/drivers/nv30/nv30_screen.c             |   14 +-
 src/gallium/drivers/nv50/nv50_screen.c             |    1 +
 src/gallium/drivers/nv50/nv50_surface.c            |    3 +-
 src/gallium/drivers/nvc0/nvc0_screen.c             |    1 +
 src/gallium/drivers/nvc0/nvc0_surface.c            |    3 +-
 src/gallium/drivers/r300/r300_blit.c               |   48 +-
 src/gallium/drivers/r300/r300_context.h            |    3 +-
 src/gallium/drivers/r300/r300_render.c             |    7 +-
 src/gallium/drivers/r300/r300_screen.c             |    1 +
 src/gallium/drivers/r600/evergreen_state.c         |    2 +
 src/gallium/drivers/r600/r600_blit.c               |  303 ++++------
 src/gallium/drivers/r600/r600_pipe.c               |    1 +
 src/gallium/drivers/r600/r600_pipe.h               |    8 +-
 src/gallium/drivers/r600/r600_state.c              |    8 +-
 src/gallium/drivers/r600/r600_state_common.c       |    4 +-
 src/gallium/drivers/radeonsi/r600_blit.c           |   32 +-
 src/gallium/drivers/softpipe/sp_context.c          |   11 +
 src/gallium/drivers/softpipe/sp_context.h          |    3 +
 src/gallium/drivers/softpipe/sp_screen.c           |    1 +
 src/gallium/drivers/softpipe/sp_state_surface.c    |    8 +-
 src/gallium/drivers/softpipe/sp_surface.c          |   55 ++
 src/gallium/drivers/svga/svga_context.c            |    2 +
 src/gallium/drivers/svga/svga_context.h            |    2 +
 src/gallium/drivers/svga/svga_pipe_blit.c          |   64 ++
 src/gallium/drivers/svga/svga_screen.c             |    1 +
 src/gallium/drivers/svga/svga_swtnl_draw.c         |   10 +
 src/gallium/drivers/trace/tr_context.c             |   23 +
 src/gallium/drivers/trace/tr_dump_state.c          |   69 ++-
 src/gallium/drivers/trace/tr_dump_state.h          |    2 +
 src/gallium/include/pipe/p_context.h               |   12 +-
 src/gallium/include/pipe/p_defines.h               |    3 +-
 src/gallium/include/pipe/p_state.h                 |   31 +-
 .../state_trackers/d3d1x/gd3d11/d3d11_context.h    |    2 +
 src/mesa/main/image.c                              |    4 +-
 src/mesa/state_tracker/st_cb_blit.c                |  326 +++++-----
 src/mesa/state_tracker/st_cb_texture.c             |   70 +--
 63 files changed, 1576 insertions(+), 739 deletions(-)

Marek


More information about the mesa-dev mailing list