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

Author: Dave Airlie <airl...@redhat.com>
Date:   Mon Dec  7 01:36:21 2015 +0000

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" <mesa-sta...@lists.freedesktop.org>
Signed-off-by: Dave Airlie <airl...@redhat.com>

---

 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 fd3cb3e..d0665b1 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;
        }
 

_______________________________________________
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to