[Mesa-dev] [PATCH 0/6] Custom u_blitter clear

Rob Clark robdclark at gmail.com
Sat Aug 13 18:23:47 UTC 2016


So, for adreno, clears are basically just normal draws.  So I've been
meaning to get rid of a bunch of generation specific hand-rolled clear
draw code.  I got more motivated when I realized a bunch more stuff
would need to be fixed up to make MSAA work if I kept the hand-rolled
clear path.

The problem with using u_blitter's clear path as-is is that it is
measurably slower on adreno.  We *really* want to use a uniform for
the clear color and pre-baked VBOs.  Versus passing everything thru
the VS.

I thought about changing u_blitter (but apparently that might be
slower on other hw), or making u_blitter support both cases.  But
instead went the route of exposing more of the u_blitter internal
APIs so they could be re-used from driver specific blit code.  This
lets me re-use the shaders and pre-baked VBOs that I also use for
GMEM->MEM blits (which could not reasonably re-use a generic
u_blitter path).

So I end up re-using u_blitter's state restore and some of the common
clear state setup, but doing the VBO/shader/etc state setup myself in
terms of the pipe_context API (so that it is generation independent).

Rob Clark (6):
  gallium/u_blitter: export some functions
  gallium/u_blitter: add helper to save FS const buffer state
  gallium/u_blitter: split out a helper for common clear state
  freedreno: support for using generic clear path
  freedreno/a3xx: use generic clear path
  freedreno/a4xx: use generic clear path

 src/gallium/auxiliary/util/u_blitter.c             | 193 ++++++++++--------
 src/gallium/auxiliary/util/u_blitter.h             |  29 +++
 src/gallium/drivers/freedreno/a3xx/fd3_context.c   |   3 +-
 src/gallium/drivers/freedreno/a3xx/fd3_draw.c      | 201 +------------------
 src/gallium/drivers/freedreno/a4xx/fd4_context.c   |   3 +-
 src/gallium/drivers/freedreno/a4xx/fd4_draw.c      | 216 +--------------------
 src/gallium/drivers/freedreno/freedreno_draw.c     |  62 ++++++
 src/gallium/drivers/freedreno/freedreno_resource.c |  20 +-
 src/gallium/drivers/freedreno/freedreno_resource.h |   4 +
 9 files changed, 223 insertions(+), 508 deletions(-)

-- 
2.7.4



More information about the mesa-dev mailing list