freedreno/a6xx: disable LRZ when color channels are masked
From the PoV of early-z tests, having masked color channels is basically like blend, ie. we do actually care about the fragments (or at least parts of them) from previous draws. Signed-off-by: Rob Clark <robdclark@chromium.org> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6409>
This commit is contained in:
parent
4de027d6bf
commit
6a8aaf7c00
|
@ -166,7 +166,20 @@ fd6_blend_state_create(struct pipe_context *pctx,
|
|||
const struct pipe_rt_blend_state *rt = &cso->rt[i];
|
||||
|
||||
so->reads_dest |= rt->blend_enable;
|
||||
if (rt->blend_enable) {
|
||||
|
||||
/* From the PoV of LRZ, having masked color channels is
|
||||
* the same as having blend enabled, in that the draw will
|
||||
* care about the fragments from an earlier draw.
|
||||
*
|
||||
* NOTE we actually don't care about masked color channels
|
||||
* that don't actually exist in the render target, but we
|
||||
* don't know the render target format here to determine
|
||||
* that. It is probably not worth worrying about, but if
|
||||
* we find a game/benchmark that goes out of it's way to
|
||||
* mask off non-existent channels, we should fixup the
|
||||
* pipe_blend_state to give us more info.
|
||||
*/
|
||||
if (rt->blend_enable || (rt->colormask != 0xf)) {
|
||||
so->reads_dest = true;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue