nvc0: disable xfb's which don't have a stride
authorIlia Mirkin <imirkin@alum.mit.edu>
Thu, 16 Jan 2020 00:46:59 +0000 (19:46 -0500)
committerIlia Mirkin <imirkin@alum.mit.edu>
Thu, 16 Jan 2020 00:53:18 +0000 (19:53 -0500)
No stride / no attributes means that nothing is being written to the
buffer. However it might still prevent primitives from being written out
to the other buffers. Disabling it entirely seems to fix it.

Fixes GTF-GL45.gtf30.GL3Tests.transform_feedback.transform_feedback_overflow

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
src/gallium/drivers/nouveau/nvc0/nvc0_shader_state.c

index 697bf491a01523bc9f84638aea95d2a1f95100a2..774c564811387f7209c67f60e264cc7b8f81e327 100644 (file)
@@ -315,14 +315,14 @@ nvc0_tfb_validate(struct nvc0_context *nvc0)
       struct nvc0_so_target *targ = nvc0_so_target(nvc0->tfbbuf[b]);
       struct nv04_resource *buf;
 
-      if (!targ) {
+      if (targ && tfb)
+         targ->stride = tfb->stride[b];
+
+      if (!targ || !targ->stride) {
          IMMED_NVC0(push, NVC0_3D(TFB_BUFFER_ENABLE(b)), 0);
          continue;
       }
 
-      if (tfb)
-         targ->stride = tfb->stride[b];
-
       buf = nv04_resource(targ->pipe.buffer);
 
       BCTX_REFN(nvc0->bufctx_3d, 3D_TFB, buf, WR);