[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