tu,freedreno: Implement LRZ feedback
What does this MR do and why?
Some draws do write depth but cannot contribute to LRZ during the BINNING
pass
e.g. when fragment shader has "discard" in it, however they can contribute to
LRZ during the RENDERING
pass via LRZ feedback mechanism. This may allow the
draws that follow to depth test against the updated LRZ, this is especially
important if such "bad" draws were at the start of the renderpass.
LRZ feedback happens during the RENDERING
pass when LRZ_FEEDBACK_ZMODE_MASK
is set, if draw has a6xx_ztest_mode
that has corresponding flag set in
LRZ_FEEDBACK_ZMODE_MASK
- its depth values would be used for feedback.
LRZ feedback alongside with LRZ testing also works during sysmem rendering.
That LRZ feedback is working could be seen via perf counters PERF_LRZ_FEEDBACK_ACCEPT
, PERF_LRZ_FEEDBACK_ACCEPT
, and PERF_LRZ_TILE_KILLED
(if testing in non-binning case).
- For Turnip I enabled LRZ feedback in gmem+hwbinning, gmem+nobinning, sysmem.
- On Freedreno for gmem+hwbinning, gmem+nobinning. To enable in in sysmem a bit more changes should be done.
Performance benefits are to be seen. I followed what I saw in the decoded traces from the latest blob @690.