Mesa (master): freedreno/a6xx: Don't early-z if there are stencil writes

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Jan 20 23:34:37 UTC 2021


Module: Mesa
Branch: master
Commit: c01aac141a9737e637f1e565ad68461784f58d1d
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=c01aac141a9737e637f1e565ad68461784f58d1d

Author: Rob Clark <robdclark at chromium.org>
Date:   Wed Jan 20 10:44:20 2021 -0800

freedreno/a6xx: Don't early-z if there are stencil writes

Fixes a similar stencil related misrendering in a couple "RV AppStudios"
titles.

Signed-off-by: Rob Clark <robdclark at chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8598>

---

 src/gallium/drivers/freedreno/a6xx/fd6_emit.c | 2 +-
 src/gallium/drivers/freedreno/a6xx/fd6_zsa.c  | 2 ++
 src/gallium/drivers/freedreno/a6xx/fd6_zsa.h  | 1 +
 3 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/src/gallium/drivers/freedreno/a6xx/fd6_emit.c b/src/gallium/drivers/freedreno/a6xx/fd6_emit.c
index 1b773295bae..bea8b0619b3 100644
--- a/src/gallium/drivers/freedreno/a6xx/fd6_emit.c
+++ b/src/gallium/drivers/freedreno/a6xx/fd6_emit.c
@@ -593,7 +593,7 @@ compute_ztest_mode(struct fd6_emit *emit, bool lrz_valid)
 			fs->writes_stencilref) {
 		return A6XX_LATE_Z;
 	} else if ((fs->has_kill || zsa->alpha_test) &&
-			(zsa->base.depth_writemask || !pfb->zsbuf)) {
+			(zsa->writes_zs || !pfb->zsbuf)) {
 		/* Slightly odd, but seems like the hw wants us to select
 		 * LATE_Z mode if there is no depth buffer + discard.  Either
 		 * that, or when occlusion query is enabled.  See:
diff --git a/src/gallium/drivers/freedreno/a6xx/fd6_zsa.c b/src/gallium/drivers/freedreno/a6xx/fd6_zsa.c
index 60347d0dc85..d262e2049a0 100644
--- a/src/gallium/drivers/freedreno/a6xx/fd6_zsa.c
+++ b/src/gallium/drivers/freedreno/a6xx/fd6_zsa.c
@@ -102,6 +102,8 @@ fd6_zsa_state_create(struct pipe_context *pctx,
 
 	so->base = *cso;
 
+	so->writes_zs = util_writes_depth_stencil(cso);
+
 	so->rb_depth_cntl |=
 		A6XX_RB_DEPTH_CNTL_ZFUNC(cso->depth_func); /* maps 1:1 */
 
diff --git a/src/gallium/drivers/freedreno/a6xx/fd6_zsa.h b/src/gallium/drivers/freedreno/a6xx/fd6_zsa.h
index 5cd636727b6..1ba5bc166b0 100644
--- a/src/gallium/drivers/freedreno/a6xx/fd6_zsa.h
+++ b/src/gallium/drivers/freedreno/a6xx/fd6_zsa.h
@@ -49,6 +49,7 @@ struct fd6_zsa_stateobj {
 	uint32_t rb_stencilwrmask;
 
 	struct fd6_lrz_state lrz;
+	bool writes_zs;     /* writes depth and/or stencil */
 	bool invalidate_lrz;
 	bool alpha_test;
 



More information about the mesa-commit mailing list