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-stable@lists.freedesktop.org> Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
parent
1f61447ce1
commit
e97ac006d7
|
@ -2113,7 +2113,7 @@ static int generate_gs_copy_shader(struct r600_context *rctx,
|
||||||
*last_exp_pos = NULL, *last_exp_param = NULL;
|
*last_exp_pos = NULL, *last_exp_param = NULL;
|
||||||
int i, j, next_clip_pos = 61, next_param = 0;
|
int i, j, next_clip_pos = 61, next_param = 0;
|
||||||
int ring;
|
int ring;
|
||||||
|
bool only_ring_0 = true;
|
||||||
cshader = calloc(1, sizeof(struct r600_pipe_shader));
|
cshader = calloc(1, sizeof(struct r600_pipe_shader));
|
||||||
if (!cshader)
|
if (!cshader)
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -2186,6 +2186,8 @@ static int generate_gs_copy_shader(struct r600_context *rctx,
|
||||||
for (i = 0; i < so->num_outputs; i++) {
|
for (i = 0; i < so->num_outputs; i++) {
|
||||||
if (so->output[i].stream == ring) {
|
if (so->output[i].stream == ring) {
|
||||||
enabled = true;
|
enabled = true;
|
||||||
|
if (ring > 0)
|
||||||
|
only_ring_0 = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2220,7 +2222,7 @@ static int generate_gs_copy_shader(struct r600_context *rctx,
|
||||||
cf_jump = ctx.bc->cf_last;
|
cf_jump = ctx.bc->cf_last;
|
||||||
|
|
||||||
if (enabled)
|
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;
|
cshader->shader.ring_item_sizes[ring] = ocnt * 16;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue