freedreno/a6xx: add early-lrz-late-z mode
authorRob Clark <robdclark@chromium.org>
Wed, 3 Jun 2020 17:08:55 +0000 (10:08 -0700)
committerMarge Bot <eric+marge@anholt.net>
Thu, 4 Jun 2020 02:34:54 +0000 (02:34 +0000)
commit1e3731e7119c36b759ec9492a7c9ebf90b222122
treeb9afd410e45527b65def1dc54cc43eeeec067824
parent07887c9f34c664c4e87008b9d9b76dc06a2d7c1b
freedreno/a6xx: add early-lrz-late-z mode

Now that we are doing a better job of managing LRZ, add support for the
EARLY_LRZ_LATE_Z mode.  Since we properly disable LRZ write in cases
where we don't know a fragment's z value during the binning pass (or
when blend is enabled in a later draw, meaning we will need the earlier
fragment's color), we can enable a mode that keeps the early-lrz test
when the frag shader has kill/discard.  This will only discard geometry
that is definitely not visible.

This is a pretty big win for games/benchmarks that have a lot of frag
shaders with kill/discard.  More than 10% gain for gfxbench trex/mh and
40% gain for mh31.

Signed-off-by: Rob Clark <robdclark@chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5298>
src/gallium/drivers/freedreno/a6xx/fd6_context.h
src/gallium/drivers/freedreno/a6xx/fd6_emit.c
src/gallium/drivers/freedreno/a6xx/fd6_program.c