Mesa (staging/20.0): freedreno/a6xx: use nonbinning VS when GS is used

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue Jun 9 18:01:50 UTC 2020


Module: Mesa
Branch: staging/20.0
Commit: 90b30fb32f7ad01b061a2eb7fb4343a3a83cdd0c
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=90b30fb32f7ad01b061a2eb7fb4343a3a83cdd0c

Author: Jonathan Marek <jonathan at marek.ca>
Date:   Sat Jun  6 11:16:16 2020 -0400

freedreno/a6xx: use nonbinning VS when GS is used

The current "ds = state->bs" seems broken, and the "vs = state->bs" is
unnecessary (already set above). Since it was added as part of a GS-related
patch, I think this is what was intended.

Note: tesselation disables GMEM rendering so we shouldn't have to worry
about hs/ds + binning interaction.

Fixes: 0eebedb6190fdab8956769 ("freedreno/a6xx: Emit program state for GS")

Signed-off-by: Jonathan Marek <jonathan at marek.ca>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5370>
(cherry picked from commit 6cc95abb273a130fb396f4f0dd2b233c534fd008)

---

 .pick_status.json                                | 2 +-
 src/gallium/drivers/freedreno/a6xx/fd6_program.c | 9 +++++----
 2 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/.pick_status.json b/.pick_status.json
index 0f80b1f31e6..59d49738288 100644
--- a/.pick_status.json
+++ b/.pick_status.json
@@ -292,7 +292,7 @@
         "description": "freedreno/a6xx: use nonbinning VS when GS is used",
         "nominated": true,
         "nomination_type": 1,
-        "resolution": 0,
+        "resolution": 1,
         "master_sha": null,
         "because_sha": "0eebedb6190fdab8956769b2485180cc4a07119a"
     },
diff --git a/src/gallium/drivers/freedreno/a6xx/fd6_program.c b/src/gallium/drivers/freedreno/a6xx/fd6_program.c
index 4411357ffa2..d2c827d8d5b 100644
--- a/src/gallium/drivers/freedreno/a6xx/fd6_program.c
+++ b/src/gallium/drivers/freedreno/a6xx/fd6_program.c
@@ -289,10 +289,11 @@ setup_stateobj(struct fd_ringbuffer *ring, struct fd_screen *screen,
 	const struct ir3_shader_variant *gs = state->gs;
 	const struct ir3_shader_variant *fs = binning_pass ? &dummy_fs : state->fs;
 
-	if (binning_pass && state->ds)
-		ds = state->bs;
-	else if (binning_pass)
-		vs = state->bs;
+	/* binning VS is wrong when GS is present, so use nonbinning VS
+	 * TODO: compile both binning VS/GS variants correctly
+	 */
+	if (binning_pass && state->gs)
+		vs = state->vs;
 
 	bool sample_shading = fs->per_samp | key->sample_shading;
 



More information about the mesa-commit mailing list