[Mesa-stable] [PATCH] nv50, nvc0: remove IDX from bufctx immediately, to avoid conflicts with clear

Ilia Mirkin imirkin at alum.mit.edu
Tue Jun 27 15:43:37 UTC 2017


Indeed you are quite right. My apologies for the incorrect tag. My
internal timer said "it's been a while", but I didn't check if it was
in the last release.

On Tue, Jun 27, 2017 at 11:34 AM, Andres Gomez <agomez at igalia.com> wrote:
> 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 <imirkin at alum.mit.edu>
>> Cc: mesa-stable at 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


More information about the mesa-stable mailing list