Looks like the patch is based on your bindless branch. :)

Reviewed-by: Samuel Pitoiset <samuel.pitoi...@gmail.com>

On 06/24/2017 07:24 PM, Ilia Mirkin wrote:
The idxbuf could linger, and when a clear happened, which also uses the
3d bufctx, we could get an error trying to access it.

This fixes spurious crashes/errors in CTS tests.

Fixes: 61d8f3387d ("nv50,nvc0: clear index buffer bufctx bin unconditionally")
Signed-off-by: Ilia Mirkin <imir...@alum.mit.edu>
Cc: mesa-sta...@lists.freedesktop.org
---
  src/gallium/drivers/nouveau/nv50/nv50_vbo.c | 9 +++++----
  src/gallium/drivers/nouveau/nvc0/nvc0_vbo.c | 9 +++++----
  2 files changed, 10 insertions(+), 8 deletions(-)

diff --git a/src/gallium/drivers/nouveau/nv50/nv50_vbo.c 
b/src/gallium/drivers/nouveau/nv50/nv50_vbo.c
index ac7d8267861..ed041121a26 100644
--- a/src/gallium/drivers/nouveau/nv50/nv50_vbo.c
+++ b/src/gallium/drivers/nouveau/nv50/nv50_vbo.c
@@ -770,7 +770,6 @@ nv50_draw_vbo(struct pipe_context *pipe, const struct 
pipe_draw_info *info)
     bool tex_dirty = false;
     int s;
- nouveau_bufctx_reset(nv50->bufctx_3d, NV50_BIND_3D_INDEX);
     if (info->index_size && !info->has_user_indices)
        BCTX_REFN(nv50->bufctx_3d, 3D_INDEX, 
nv04_resource(info->index.resource), RD);
@@ -838,9 +837,7 @@ nv50_draw_vbo(struct pipe_context *pipe, const struct pipe_draw_info *info) if (nv50->vbo_fifo) {
        nv50_push_vbo(nv50, info);
-      push->kick_notify = nv50_default_kick_notify;
-      nouveau_pushbuf_bufctx(push, NULL);
-      return;
+      goto cleanup;
     }
if (nv50->state.instance_base != info->start_instance) {
@@ -894,9 +891,13 @@ nv50_draw_vbo(struct pipe_context *pipe, const struct 
pipe_draw_info *info)
                         info->mode, info->start, info->count,
                         info->instance_count);
     }
+
+cleanup:
     push->kick_notify = nv50_default_kick_notify;
nv50_release_user_vbufs(nv50); nouveau_pushbuf_bufctx(push, NULL);
+
+   nouveau_bufctx_reset(nv50->bufctx_3d, NV50_BIND_3D_INDEX);
  }
diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_vbo.c 
b/src/gallium/drivers/nouveau/nvc0/nvc0_vbo.c
index 2856b4c6096..a5671ca09ac 100644
--- a/src/gallium/drivers/nouveau/nvc0/nvc0_vbo.c
+++ b/src/gallium/drivers/nouveau/nvc0/nvc0_vbo.c
@@ -921,7 +921,6 @@ nvc0_draw_vbo(struct pipe_context *pipe, const struct 
pipe_draw_info *info)
     struct nvc0_screen *screen = nvc0->screen;
     int s;
- nouveau_bufctx_reset(nvc0->bufctx_3d, NVC0_BIND_3D_IDX);
     nouveau_bufctx_reset(nvc0->bufctx_3d, NVC0_BIND_3D_BINDLESS);
/* NOTE: caller must ensure that (min_index + index_bias) is >= 0 */
@@ -1040,9 +1039,7 @@ nvc0_draw_vbo(struct pipe_context *pipe, const struct 
pipe_draw_info *info)
if (nvc0->state.vbo_mode) {
        nvc0_push_vbo(nvc0, info);
-      push->kick_notify = nvc0_default_kick_notify;
-      nouveau_pushbuf_bufctx(push, NULL);
-      return;
+      goto cleanup;
     }
/* space for base instance, flush, and prim restart */
@@ -1089,9 +1086,13 @@ nvc0_draw_vbo(struct pipe_context *pipe, const struct 
pipe_draw_info *info)
                         info->mode, info->start, info->count,
                         info->instance_count);
     }
+
+cleanup:
     push->kick_notify = nvc0_default_kick_notify;
nvc0_release_user_vbufs(nvc0); nouveau_pushbuf_bufctx(push, NULL);
+
+   nouveau_bufctx_reset(nvc0->bufctx_3d, NVC0_BIND_3D_IDX);
  }

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to