From e97ac006d77ccbc87a56e46e2f75da6511c9b9e5 Mon Sep 17 00:00:00 2001 From: Dave Airlie Date: Mon, 7 Dec 2015 01:36:21 +0000 Subject: [PATCH] r600g: fix outputing to non-0 buffers for stream 0. This fixes: arb_transform_feedback3-ext_interleaved_two_bufs_gs arb_transform_feedback3-ext_interleaved_two_bufs_gs_max transform-feedback-builtins If we are only emitting one ring, then emit all output buffers on it. Cc: "11.0 11.1" Signed-off-by: Dave Airlie --- src/gallium/drivers/r600/r600_shader.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/gallium/drivers/r600/r600_shader.c b/src/gallium/drivers/r600/r600_shader.c index fd3cb3edd21..d0665b1c2aa 100644 --- a/src/gallium/drivers/r600/r600_shader.c +++ b/src/gallium/drivers/r600/r600_shader.c @@ -2113,7 +2113,7 @@ static int generate_gs_copy_shader(struct r600_context *rctx, *last_exp_pos = NULL, *last_exp_param = NULL; int i, j, next_clip_pos = 61, next_param = 0; int ring; - + bool only_ring_0 = true; cshader = calloc(1, sizeof(struct r600_pipe_shader)); if (!cshader) return 0; @@ -2186,6 +2186,8 @@ static int generate_gs_copy_shader(struct r600_context *rctx, for (i = 0; i < so->num_outputs; i++) { if (so->output[i].stream == ring) { enabled = true; + if (ring > 0) + only_ring_0 = false; break; } } @@ -2220,7 +2222,7 @@ static int generate_gs_copy_shader(struct r600_context *rctx, cf_jump = ctx.bc->cf_last; if (enabled) - emit_streamout(&ctx, so, ring, &cshader->shader.ring_item_sizes[ring]); + emit_streamout(&ctx, so, only_ring_0 ? -1 : ring, &cshader->shader.ring_item_sizes[ring]); cshader->shader.ring_item_sizes[ring] = ocnt * 16; } -- 2.30.2