Ilia, this patch tries to fix 61d8f3387d which, in turn, tried to fix 330d0607e.
None of them did it for 17.1 so I suppose we should leave this out, then. Let me know if you think otherwise. On Sat, 2017-06-24 at 13:24 -0400, 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); > } -- Br, Andres _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev