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 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev