Mesa (master): freedreno/a6xx: fix binning pass vs. xfb

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Mon Sep 23 20:03:56 UTC 2019


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

Author: Rob Clark <robdclark at chromium.org>
Date:   Fri Sep 20 13:50:21 2019 -0700

freedreno/a6xx: fix binning pass vs. xfb

We could bit doing streamout from binning pass.  In this case we want to
use the full VS which doesn't have (potentially streamed out) varyings
stripped out.

Signed-off-by: Rob Clark <robdclark at chromium.org>
Reviewed-by: Eric Anholt <eric at anholt.net>
Reviewed-by: Kristian H. Kristensen <hoegsberg at google.com>

---

 src/gallium/drivers/freedreno/a6xx/fd6_program.c | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/src/gallium/drivers/freedreno/a6xx/fd6_program.c b/src/gallium/drivers/freedreno/a6xx/fd6_program.c
index 08c264b4f11..6f29775d9aa 100644
--- a/src/gallium/drivers/freedreno/a6xx/fd6_program.c
+++ b/src/gallium/drivers/freedreno/a6xx/fd6_program.c
@@ -321,7 +321,7 @@ setup_stateobj(struct fd_ringbuffer *ring, struct fd_screen *screen,
 	struct ir3_shader_linkage l = {0};
 	ir3_link_shaders(&l, vs, fs);
 
-	if ((vs->shader->stream_output.num_outputs > 0) && !binning_pass)
+	if (vs->shader->stream_output.num_outputs > 0)
 		link_stream_out(&l, vs);
 
 	BITSET_DECLARE(varbs, 128) = {0};
@@ -348,7 +348,7 @@ setup_stateobj(struct fd_ringbuffer *ring, struct fd_screen *screen,
 		ir3_link_add(&l, psize_regid, 0x1, l.max_loc);
 	}
 
-	if ((vs->shader->stream_output.num_outputs > 0) && !binning_pass) {
+	if (vs->shader->stream_output.num_outputs > 0) {
 		setup_stream_out(state, vs, &l);
 	}
 
@@ -656,7 +656,11 @@ fd6_program_create(void *data, struct ir3_shader_variant *bs,
 	struct fd_context *ctx = data;
 	struct fd6_program_state *state = CALLOC_STRUCT(fd6_program_state);
 
-	state->bs = bs;
+	/* if we have streamout, use full VS in binning pass, as the
+	 * binning pass VS will have outputs on other than position/psize
+	 * stripped out:
+	 */
+	state->bs = vs->shader->stream_output.num_outputs ? vs : bs;
 	state->vs = vs;
 	state->fs = fs;
 	state->config_stateobj = fd_ringbuffer_new_object(ctx->pipe, 0x1000);




More information about the mesa-commit mailing list