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