diff options
author | Dave Airlie <[email protected]> | 2015-12-07 01:36:21 +0000 |
---|---|---|
committer | Dave Airlie <[email protected]> | 2015-12-09 15:07:01 +1000 |
commit | e97ac006d77ccbc87a56e46e2f75da6511c9b9e5 (patch) | |
tree | 5de611eb99fb94903749a4e39c66c9d134b7be8c /src/gallium | |
parent | 1f61447ce13b8c60b1c1a47b4d008bcf78e22bbd (diff) |
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" <[email protected]>
Signed-off-by: Dave Airlie <[email protected]>
Diffstat (limited to 'src/gallium')
-rw-r--r-- | src/gallium/drivers/r600/r600_shader.c | 6 |
1 files 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; } |