[Mesa-stable] [Mesa-dev] [PATCH v2] nv50, nvc0: fix push hint logic in presence of a start offset

Samuel Pitoiset samuel.pitoiset at gmail.com
Wed Oct 11 07:49:47 UTC 2017


Reviewed-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>

On 10/11/2017 06:00 AM, Ilia Mirkin wrote:
> Previously buffer offsets were passed in explicitly as an offset, which
> had to be added to the resource address. Now they are passed in via an
> increased 'start' parameter. As a result, we were double-adding the
> start offset in this kind of situation.
> 
> This condition was triggered by piglit's draw-elements test which has a
> requisite glMultiDrawElements in combination with a small enough number
> of vertices to go through the immediate push path.
> 
> Reported-by: Karol Herbst <karolherbst at gmail.com>
> Fixes: 330d0607ed6 ("gallium: remove pipe_index_buffer and set_index_buffer")
> Cc: mesa-stable at lists.freedesktop.org
> ---
> 
> v1 -> v2: also do it for nv50
> 
>   src/gallium/drivers/nouveau/nv50/nv50_push.c          | 3 +--
>   src/gallium/drivers/nouveau/nvc0/nvc0_vbo_translate.c | 9 ++++-----
>   2 files changed, 5 insertions(+), 7 deletions(-)
> 
> diff --git a/src/gallium/drivers/nouveau/nv50/nv50_push.c b/src/gallium/drivers/nouveau/nv50/nv50_push.c
> index 9ee9a8eed19..bec2d42e037 100644
> --- a/src/gallium/drivers/nouveau/nv50/nv50_push.c
> +++ b/src/gallium/drivers/nouveau/nv50/nv50_push.c
> @@ -279,8 +279,7 @@ nv50_push_vbo(struct nv50_context *nv50, const struct pipe_draw_info *info)
>      if (info->index_size) {
>         if (!info->has_user_indices) {
>            ctx.idxbuf = nouveau_resource_map_offset(&nv50->base,
> -            nv04_resource(info->index.resource), info->start * info->index_size,
> -            NOUVEAU_BO_RD);
> +            nv04_resource(info->index.resource), 0, NOUVEAU_BO_RD);
>         } else {
>            ctx.idxbuf = info->index.user;
>         }
> diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_vbo_translate.c b/src/gallium/drivers/nouveau/nvc0/nvc0_vbo_translate.c
> index f05618f6596..256e20df2e4 100644
> --- a/src/gallium/drivers/nouveau/nvc0/nvc0_vbo_translate.c
> +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_vbo_translate.c
> @@ -84,13 +84,12 @@ nvc0_vertex_configure_translate(struct nvc0_context *nvc0, int32_t index_bias)
>   
>   static inline void
>   nvc0_push_map_idxbuf(struct push_context *ctx, struct nvc0_context *nvc0,
> -                     const struct pipe_draw_info *info,
> -                     unsigned offset)
> +                     const struct pipe_draw_info *info)
>   {
>      if (!info->has_user_indices) {
>         struct nv04_resource *buf = nv04_resource(info->index.resource);
> -      ctx->idxbuf = nouveau_resource_map_offset(&nvc0->base,
> -         buf, offset, NOUVEAU_BO_RD);
> +      ctx->idxbuf = nouveau_resource_map_offset(
> +            &nvc0->base, buf, 0, NOUVEAU_BO_RD);
>      } else {
>         ctx->idxbuf = info->index.user;
>      }
> @@ -509,7 +508,7 @@ nvc0_push_vbo(struct nvc0_context *nvc0, const struct pipe_draw_info *info)
>      nvc0->state.prim_restart = info->primitive_restart;
>   
>      if (info->index_size) {
> -      nvc0_push_map_idxbuf(&ctx, nvc0, info, info->start * info->index_size);
> +      nvc0_push_map_idxbuf(&ctx, nvc0, info);
>         index_size = info->index_size;
>      } else {
>         if (unlikely(info->count_from_stream_output)) {
> 


More information about the mesa-stable mailing list