[Mesa-dev] [PATCH] i965: Drop index buffer re-alignment code.

Ian Romanick idr at freedesktop.org
Thu Jun 22 23:10:39 UTC 2017


That's weird... I wonder why this code was ever added.  Regardless,

Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>

On 06/22/2017 11:16 AM, Kenneth Graunke wrote:
> This shouldn't ever happen - GL requires it to be aligned:
> 
>    "Clients must align data elements consistent with the requirements
>     of the client platform, with an additional base-level requirement
>     that an offset within a buffer to a datum comprising N basic
>     machine units be a multiple of N."
> 
> Mesa should reject unaligned index buffers for us - we shouldn't have
> to handle them in the driver.
> 
> Note that Gallium already makes this assumption.
> ---
>  src/mesa/drivers/dri/i965/brw_draw_upload.c | 38 ++++++-----------------------
>  1 file changed, 8 insertions(+), 30 deletions(-)
> 
> diff --git a/src/mesa/drivers/dri/i965/brw_draw_upload.c b/src/mesa/drivers/dri/i965/brw_draw_upload.c
> index 05b6b1a50f1..baa1de353b4 100644
> --- a/src/mesa/drivers/dri/i965/brw_draw_upload.c
> +++ b/src/mesa/drivers/dri/i965/brw_draw_upload.c
> @@ -711,7 +711,6 @@ brw_prepare_shader_draw_parameters(struct brw_context *brw)
>  static void
>  brw_upload_indices(struct brw_context *brw)
>  {
> -   struct gl_context *ctx = &brw->ctx;
>     const struct _mesa_index_buffer *index_buffer = brw->ib.ib;
>     GLuint ib_size;
>     struct brw_bo *old_bo = brw->ib.bo;
> @@ -738,35 +737,14 @@ brw_upload_indices(struct brw_context *brw)
>     } else {
>        offset = (GLuint) (unsigned long) index_buffer->ptr;
>  
> -      /* If the index buffer isn't aligned to its element size, we have to
> -       * rebase it into a temporary.
> -       */
> -      if ((ib_type_size - 1) & offset) {
> -         perf_debug("copying index buffer to a temporary to work around "
> -                    "misaligned offset %d\n", offset);
> -
> -         GLubyte *map = ctx->Driver.MapBufferRange(ctx,
> -                                                   offset,
> -                                                   ib_size,
> -                                                   GL_MAP_READ_BIT,
> -                                                   bufferobj,
> -                                                   MAP_INTERNAL);
> -
> -         intel_upload_data(brw, map, ib_size, ib_type_size,
> -                           &brw->ib.bo, &offset);
> -         brw->ib.size = brw->ib.bo->size;
> -
> -         ctx->Driver.UnmapBuffer(ctx, bufferobj, MAP_INTERNAL);
> -      } else {
> -         struct brw_bo *bo =
> -            intel_bufferobj_buffer(brw, intel_buffer_object(bufferobj),
> -                                   offset, ib_size);
> -         if (bo != brw->ib.bo) {
> -            brw_bo_unreference(brw->ib.bo);
> -            brw->ib.bo = bo;
> -            brw->ib.size = bufferobj->Size;
> -            brw_bo_reference(bo);
> -         }
> +      struct brw_bo *bo =
> +         intel_bufferobj_buffer(brw, intel_buffer_object(bufferobj),
> +                                offset, ib_size);
> +      if (bo != brw->ib.bo) {
> +         brw_bo_unreference(brw->ib.bo);
> +         brw->ib.bo = bo;
> +         brw->ib.size = bufferobj->Size;
> +         brw_bo_reference(bo);
>        }
>     }
>  
> 



More information about the mesa-dev mailing list