Module: Mesa Branch: 10.4 Commit: f76bcbb4cd3439d73552af9826aacf64069a564c URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=f76bcbb4cd3439d73552af9826aacf64069a564c
Author: Ilia Mirkin <imir...@alum.mit.edu> Date: Sat Feb 14 01:43:31 2015 -0500 nvc0: allow holes in xfb target lists Tested with a modified xfb-streams test which outputs to streams 0, 2, and 3. Signed-off-by: Ilia Mirkin <imir...@alum.mit.edu> Cc: "10.4 10.5" <mesa-sta...@lists.freedesktop.org> (cherry picked from commit 854eb06bee7d266fc739f984c1b4ebb54dac3b87) --- src/gallium/drivers/nouveau/nvc0/nvc0_shader_state.c | 9 ++++++++- src/gallium/drivers/nouveau/nvc0/nvc0_state.c | 8 +++++--- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_shader_state.c b/src/gallium/drivers/nouveau/nvc0/nvc0_shader_state.c index 1000d82..516b33b 100644 --- a/src/gallium/drivers/nouveau/nvc0/nvc0_shader_state.c +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_shader_state.c @@ -252,7 +252,12 @@ nvc0_tfb_validate(struct nvc0_context *nvc0) for (b = 0; b < nvc0->num_tfbbufs; ++b) { struct nvc0_so_target *targ = nvc0_so_target(nvc0->tfbbuf[b]); - struct nv04_resource *buf = nv04_resource(targ->pipe.buffer); + struct nv04_resource *buf; + + if (!targ) { + IMMED_NVC0(push, NVC0_3D(TFB_BUFFER_ENABLE(b)), 0); + continue; + } if (tfb) targ->stride = tfb->stride[b]; @@ -260,6 +265,8 @@ nvc0_tfb_validate(struct nvc0_context *nvc0) if (!(nvc0->tfbbuf_dirty & (1 << b))) continue; + buf = nv04_resource(targ->pipe.buffer); + if (!targ->clean) nvc0_query_fifo_wait(push, targ->pq); BEGIN_NVC0(push, NVC0_3D(TFB_BUFFER_ENABLE(b)), 5); diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_state.c b/src/gallium/drivers/nouveau/nvc0/nvc0_state.c index 728618f..fe35302 100644 --- a/src/gallium/drivers/nouveau/nvc0/nvc0_state.c +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_state.c @@ -1089,9 +1089,11 @@ nvc0_set_transform_feedback_targets(struct pipe_context *pipe, pipe_so_target_reference(&nvc0->tfbbuf[i], targets[i]); } for (; i < nvc0->num_tfbbufs; ++i) { - nvc0->tfbbuf_dirty |= 1 << i; - nvc0_so_target_save_offset(pipe, nvc0->tfbbuf[i], i, &serialize); - pipe_so_target_reference(&nvc0->tfbbuf[i], NULL); + if (nvc0->tfbbuf[i]) { + nvc0->tfbbuf_dirty |= 1 << i; + nvc0_so_target_save_offset(pipe, nvc0->tfbbuf[i], i, &serialize); + pipe_so_target_reference(&nvc0->tfbbuf[i], NULL); + } } nvc0->num_tfbbufs = num_targets; _______________________________________________ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit