From 070072ad43bb41624d271f10697ea21a776b1ec1 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Sun, 2 Apr 2017 19:07:49 +0200 Subject: [PATCH] mesa: replace _mesa_index_buffer::type with index_size This avoids repeated translations of the enum. Reviewed-by: Ilia Mirkin Reviewed-by: Kenneth Graunke --- src/mesa/drivers/dri/i965/brw_context.h | 21 ++++---------- src/mesa/drivers/dri/i965/brw_draw_upload.c | 8 +++--- src/mesa/drivers/dri/i965/brw_primitive_restart.c | 10 +++---- src/mesa/drivers/dri/i965/gen8_draw_upload.c | 2 +- src/mesa/drivers/dri/i965/genX_blorp_exec.c | 2 +- src/mesa/drivers/dri/i965/intel_batchbuffer.c | 2 +- src/mesa/drivers/dri/nouveau/nouveau_render_t.c | 8 +++--- src/mesa/drivers/dri/nouveau/nouveau_vbo_t.c | 14 +++++++-- src/mesa/main/varray.c | 13 +++++---- src/mesa/main/varray.h | 3 +- src/mesa/state_tracker/st_draw.c | 18 ++++++------ src/mesa/state_tracker/st_draw_feedback.c | 2 +- src/mesa/tnl/t_draw.c | 8 +++--- src/mesa/vbo/vbo.h | 2 +- src/mesa/vbo/vbo_exec_array.c | 12 ++++---- src/mesa/vbo/vbo_minmax_index.c | 35 ++++++++++++----------- src/mesa/vbo/vbo_primitive_restart.c | 4 +-- src/mesa/vbo/vbo_rebase.c | 10 +++---- src/mesa/vbo/vbo_split_copy.c | 10 +++---- src/mesa/vbo/vbo_split_inplace.c | 4 +-- 20 files changed, 94 insertions(+), 94 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_context.h b/src/mesa/drivers/dri/i965/brw_context.h index 7b354c4..c7d6e49 100644 --- a/src/mesa/drivers/dri/i965/brw_context.h +++ b/src/mesa/drivers/dri/i965/brw_context.h @@ -885,7 +885,7 @@ struct brw_context /* Updates are signaled by BRW_NEW_INDEX_BUFFER. */ struct brw_bo *bo; uint32_t size; - GLuint type; + unsigned index_size; /* Offset to index buffer index to use in CMD_3D_PRIM so that we can * avoid re-uploading the IB packet over and over if we're actually @@ -1401,23 +1401,12 @@ unsigned brw_get_vertex_surface_type(struct brw_context *brw, const struct gl_vertex_array *glarray); static inline unsigned -brw_get_index_type(GLenum type) +brw_get_index_type(unsigned index_size) { - assert((type == GL_UNSIGNED_BYTE) - || (type == GL_UNSIGNED_SHORT) - || (type == GL_UNSIGNED_INT)); - - /* The possible values for type are GL_UNSIGNED_BYTE (0x1401), - * GL_UNSIGNED_SHORT (0x1403), and GL_UNSIGNED_INT (0x1405) which we want - * to map to scale factors of 0, 1, and 2, respectively. These scale - * factors are then left-shfited by 8 to be in the correct position in the - * CMD_INDEX_BUFFER packet. - * - * Subtracting 0x1401 gives 0, 2, and 4. Shifting left by 7 afterwards - * gives 0x00000000, 0x00000100, and 0x00000200. These just happen to be - * the values the need to be written in the CMD_INDEX_BUFFER packet. + /* The hw needs 0x00000000, 0x00000100, and 0x00000200 for ubyte, ushort, + * and uint, respectively. */ - return (type - 0x1401) << 7; + return (index_size >> 1) << 8; } void brw_prepare_vertices(struct brw_context *brw); diff --git a/src/mesa/drivers/dri/i965/brw_draw_upload.c b/src/mesa/drivers/dri/i965/brw_draw_upload.c index 14b60a9..7846293 100644 --- a/src/mesa/drivers/dri/i965/brw_draw_upload.c +++ b/src/mesa/drivers/dri/i965/brw_draw_upload.c @@ -1174,7 +1174,7 @@ brw_upload_indices(struct brw_context *brw) if (index_buffer == NULL) return; - ib_type_size = _mesa_sizeof_type(index_buffer->type); + ib_type_size = index_buffer->index_size; ib_size = index_buffer->count ? ib_type_size * index_buffer->count : index_buffer->obj->Size; bufferobj = index_buffer->obj; @@ -1231,8 +1231,8 @@ brw_upload_indices(struct brw_context *brw) if (brw->ib.bo != old_bo) brw->ctx.NewDriverState |= BRW_NEW_INDEX_BUFFER; - if (index_buffer->type != brw->ib.type) { - brw->ib.type = index_buffer->type; + if (index_buffer->index_size != brw->ib.index_size) { + brw->ib.index_size = index_buffer->index_size; brw->ctx.NewDriverState |= BRW_NEW_INDEX_BUFFER; } } @@ -1264,7 +1264,7 @@ brw_emit_index_buffer(struct brw_context *brw) BEGIN_BATCH(3); OUT_BATCH(CMD_INDEX_BUFFER << 16 | cut_index_setting | - brw_get_index_type(index_buffer->type) | + brw_get_index_type(index_buffer->index_size) | 1); OUT_RELOC(brw->ib.bo, I915_GEM_DOMAIN_VERTEX, 0, diff --git a/src/mesa/drivers/dri/i965/brw_primitive_restart.c b/src/mesa/drivers/dri/i965/brw_primitive_restart.c index e329cc7..8e5a58a 100644 --- a/src/mesa/drivers/dri/i965/brw_primitive_restart.c +++ b/src/mesa/drivers/dri/i965/brw_primitive_restart.c @@ -52,14 +52,14 @@ can_cut_index_handle_restart_index(struct gl_context *ctx, bool cut_index_will_work; - switch (ib->type) { - case GL_UNSIGNED_BYTE: + switch (ib->index_size) { + case 1: cut_index_will_work = ctx->Array.RestartIndex == 0xff; break; - case GL_UNSIGNED_SHORT: + case 2: cut_index_will_work = ctx->Array.RestartIndex == 0xffff; break; - case GL_UNSIGNED_INT: + case 4: cut_index_will_work = ctx->Array.RestartIndex == 0xffffffff; break; default: @@ -193,7 +193,7 @@ haswell_upload_cut_index(struct brw_context *brw) /* BRW_NEW_INDEX_BUFFER */ unsigned cut_index; if (brw->ib.ib) { - cut_index = _mesa_primitive_restart_index(ctx, brw->ib.type); + cut_index = _mesa_primitive_restart_index(ctx, brw->ib.index_size); } else { /* There's no index buffer, but primitive restart may still apply * to glDrawArrays and such. FIXED_INDEX mode only applies to drawing diff --git a/src/mesa/drivers/dri/i965/gen8_draw_upload.c b/src/mesa/drivers/dri/i965/gen8_draw_upload.c index 32e1447..e81cca9 100644 --- a/src/mesa/drivers/dri/i965/gen8_draw_upload.c +++ b/src/mesa/drivers/dri/i965/gen8_draw_upload.c @@ -375,7 +375,7 @@ gen8_emit_index_buffer(struct brw_context *brw) BEGIN_BATCH(5); OUT_BATCH(CMD_INDEX_BUFFER << 16 | (5 - 2)); - OUT_BATCH(brw_get_index_type(index_buffer->type) | mocs_wb); + OUT_BATCH(brw_get_index_type(index_buffer->index_size) | mocs_wb); OUT_RELOC64(brw->ib.bo, I915_GEM_DOMAIN_VERTEX, 0, 0); OUT_BATCH(brw->ib.size); ADVANCE_BATCH(); diff --git a/src/mesa/drivers/dri/i965/genX_blorp_exec.c b/src/mesa/drivers/dri/i965/genX_blorp_exec.c index 3931b8c..7157420 100644 --- a/src/mesa/drivers/dri/i965/genX_blorp_exec.c +++ b/src/mesa/drivers/dri/i965/genX_blorp_exec.c @@ -264,7 +264,7 @@ retry: */ brw->ctx.NewDriverState |= BRW_NEW_BLORP; brw->no_depth_or_stencil = false; - brw->ib.type = -1; + brw->ib.index_size = -1; if (params->dst.enabled) brw_render_cache_set_add_bo(brw, params->dst.addr.buffer); diff --git a/src/mesa/drivers/dri/i965/intel_batchbuffer.c b/src/mesa/drivers/dri/i965/intel_batchbuffer.c index 6e4b55c..154c095 100644 --- a/src/mesa/drivers/dri/i965/intel_batchbuffer.c +++ b/src/mesa/drivers/dri/i965/intel_batchbuffer.c @@ -389,7 +389,7 @@ brw_new_batch(struct brw_context *brw) brw->ctx.NewDriverState |= BRW_NEW_BATCH; - brw->ib.type = -1; + brw->ib.index_size = -1; /* We need to periodically reap the shader time results, because rollover * happens every few seconds. We also want to see results every once in a diff --git a/src/mesa/drivers/dri/nouveau/nouveau_render_t.c b/src/mesa/drivers/dri/nouveau/nouveau_render_t.c index 1625a87..db60b59 100644 --- a/src/mesa/drivers/dri/nouveau/nouveau_render_t.c +++ b/src/mesa/drivers/dri/nouveau/nouveau_render_t.c @@ -158,16 +158,16 @@ get_max_vertices(struct gl_context *ctx, const struct _mesa_index_buffer *ib, unsigned max_out; if (ib) { - switch (ib->type) { - case GL_UNSIGNED_INT: + switch (ib->index_size) { + case 4: max_out = MAX_OUT_I32; break; - case GL_UNSIGNED_SHORT: + case 2: max_out = MAX_OUT_I16; break; - case GL_UNSIGNED_BYTE: + case 1: max_out = MAX_OUT_I16; break; diff --git a/src/mesa/drivers/dri/nouveau/nouveau_vbo_t.c b/src/mesa/drivers/dri/nouveau/nouveau_vbo_t.c index 51ffd5a..fdd135c 100644 --- a/src/mesa/drivers/dri/nouveau/nouveau_vbo_t.c +++ b/src/mesa/drivers/dri/nouveau/nouveau_vbo_t.c @@ -59,9 +59,19 @@ vbo_init_arrays(struct gl_context *ctx, const struct _mesa_index_buffer *ib, GLboolean imm = (render->mode == IMM); int i, attr; - if (ib) - nouveau_init_array(&render->ib, 0, 0, ib->count, ib->type, + if (ib) { + GLenum ib_type; + + if (ib->index_size == 4) + ib_type = GL_UNSIGNED_INT; + else if (ib->index_size == 2) + ib_type = GL_UNSIGNED_SHORT; + else + ib_type = GL_UNSIGNED_BYTE; + + nouveau_init_array(&render->ib, 0, 0, ib->count, ib_type, ib->obj, ib->ptr, GL_TRUE, ctx); + } FOR_EACH_BOUND_ATTR(render, i, attr) { const struct gl_vertex_array *array = arrays[attr]; diff --git a/src/mesa/main/varray.c b/src/mesa/main/varray.c index e1d6bc6..78dc004 100644 --- a/src/mesa/main/varray.c +++ b/src/mesa/main/varray.c @@ -1804,7 +1804,8 @@ _mesa_VertexAttribDivisor(GLuint index, GLuint divisor) unsigned -_mesa_primitive_restart_index(const struct gl_context *ctx, GLenum ib_type) +_mesa_primitive_restart_index(const struct gl_context *ctx, + unsigned index_size) { /* From the OpenGL 4.3 core specification, page 302: * "If both PRIMITIVE_RESTART and PRIMITIVE_RESTART_FIXED_INDEX are @@ -1812,15 +1813,15 @@ _mesa_primitive_restart_index(const struct gl_context *ctx, GLenum ib_type) * is used." */ if (ctx->Array.PrimitiveRestartFixedIndex) { - switch (ib_type) { - case GL_UNSIGNED_BYTE: + switch (index_size) { + case 1: return 0xff; - case GL_UNSIGNED_SHORT: + case 2: return 0xffff; - case GL_UNSIGNED_INT: + case 4: return 0xffffffff; default: - assert(!"_mesa_primitive_restart_index: Invalid index buffer type."); + assert(!"_mesa_primitive_restart_index: Invalid index size."); } } diff --git a/src/mesa/main/varray.h b/src/mesa/main/varray.h index 9216571..d274ec5 100644 --- a/src/mesa/main/varray.h +++ b/src/mesa/main/varray.h @@ -312,7 +312,8 @@ extern void GLAPIENTRY _mesa_VertexAttribDivisor(GLuint index, GLuint divisor); extern unsigned -_mesa_primitive_restart_index(const struct gl_context *ctx, GLenum ib_type); +_mesa_primitive_restart_index(const struct gl_context *ctx, + unsigned index_size); extern void GLAPIENTRY _mesa_BindVertexBuffer(GLuint bindingIndex, GLuint buffer, GLintptr offset, diff --git a/src/mesa/state_tracker/st_draw.c b/src/mesa/state_tracker/st_draw.c index d16160b..d710284 100644 --- a/src/mesa/state_tracker/st_draw.c +++ b/src/mesa/state_tracker/st_draw.c @@ -96,7 +96,7 @@ setup_index_buffer(struct st_context *st, struct pipe_index_buffer ibuffer; struct gl_buffer_object *bufobj = ib->obj; - ibuffer.index_size = vbo_sizeof_ib_type(ib->type); + ibuffer.index_size = ib->index_size; /* get/create the index buffer object */ if (_mesa_is_bufferobj(bufobj)) { @@ -120,21 +120,19 @@ setup_index_buffer(struct st_context *st, * Set the restart index. */ static void -setup_primitive_restart(struct gl_context *ctx, - const struct _mesa_index_buffer *ib, - struct pipe_draw_info *info) +setup_primitive_restart(struct gl_context *ctx, struct pipe_draw_info *info, + unsigned index_size) { if (ctx->Array._PrimitiveRestart) { - info->restart_index = _mesa_primitive_restart_index(ctx, ib->type); + info->restart_index = + _mesa_primitive_restart_index(ctx, index_size); /* Enable primitive restart only when the restart index can have an * effect. This is required for correctness in radeonsi VI support. * Other hardware may also benefit from taking a faster, non-restart path * when possible. */ - if ((ib->type == GL_UNSIGNED_INT) || - (ib->type == GL_UNSIGNED_SHORT && info->restart_index <= 0xffff) || - (ib->type == GL_UNSIGNED_BYTE && info->restart_index <= 0xff)) + if (index_size == 4 || info->restart_index < (1 << (index_size * 8))) info->primitive_restart = true; } } @@ -217,7 +215,7 @@ st_draw_vbo(struct gl_context *ctx, /* The VBO module handles restart for the non-indexed GLDrawArrays * so we only set these fields for indexed drawing: */ - setup_primitive_restart(ctx, ib, &info); + setup_primitive_restart(ctx, &info, ib->index_size); } else { /* Transform feedback drawing is always non-indexed. */ @@ -296,7 +294,7 @@ st_indirect_draw_vbo(struct gl_context *ctx, info.indexed = TRUE; /* Primitive restart is not handled by the VBO module in this case. */ - setup_primitive_restart(ctx, ib, &info); + setup_primitive_restart(ctx, &info, ib->index_size); } info.mode = translate_prim(ctx, mode); diff --git a/src/mesa/state_tracker/st_draw_feedback.c b/src/mesa/state_tracker/st_draw_feedback.c index fac83b9..9d68777 100644 --- a/src/mesa/state_tracker/st_draw_feedback.c +++ b/src/mesa/state_tracker/st_draw_feedback.c @@ -242,7 +242,7 @@ st_feedback_draw_vbo(struct gl_context *ctx, if (ib) { struct gl_buffer_object *bufobj = ib->obj; - ibuffer.index_size = vbo_sizeof_ib_type(ib->type); + ibuffer.index_size = ib->index_size; if (ibuffer.index_size == 0) goto out_unref_vertex; diff --git a/src/mesa/tnl/t_draw.c b/src/mesa/tnl/t_draw.c index 24d74c0..9fca4da 100644 --- a/src/mesa/tnl/t_draw.c +++ b/src/mesa/tnl/t_draw.c @@ -358,7 +358,7 @@ static void bind_indices( struct gl_context *ctx, bo[*nr_bo] = ib->obj; (*nr_bo)++; ptr = ctx->Driver.MapBufferRange(ctx, (GLsizeiptr) ib->ptr, - ib->count * vbo_sizeof_ib_type(ib->type), + ib->count * ib->index_size, GL_MAP_READ_BIT, ib->obj, MAP_INTERNAL); assert(ib->obj->Mappings[MAP_INTERNAL].Pointer); @@ -367,19 +367,19 @@ static void bind_indices( struct gl_context *ctx, ptr = ADD_POINTERS(ib->obj->Mappings[MAP_INTERNAL].Pointer, ib->ptr); } - if (ib->type == GL_UNSIGNED_INT && VB->Primitive[0].basevertex == 0) { + if (ib->index_size == 4 && VB->Primitive[0].basevertex == 0) { VB->Elts = (GLuint *) ptr; } else { GLuint *elts = (GLuint *)get_space(ctx, ib->count * sizeof(GLuint)); VB->Elts = elts; - if (ib->type == GL_UNSIGNED_INT) { + if (ib->index_size == 4) { const GLuint *in = (GLuint *)ptr; for (i = 0; i < ib->count; i++) *elts++ = (GLuint)(*in++) + VB->Primitive[0].basevertex; } - else if (ib->type == GL_UNSIGNED_SHORT) { + else if (ib->index_size == 2) { const GLushort *in = (GLushort *)ptr; for (i = 0; i < ib->count; i++) *elts++ = (GLuint)(*in++) + VB->Primitive[0].basevertex; diff --git a/src/mesa/vbo/vbo.h b/src/mesa/vbo/vbo.h index d62ab4e..79f7538 100644 --- a/src/mesa/vbo/vbo.h +++ b/src/mesa/vbo/vbo.h @@ -69,7 +69,7 @@ struct _mesa_prim { */ struct _mesa_index_buffer { GLuint count; - GLenum type; + unsigned index_size; struct gl_buffer_object *obj; const void *ptr; }; diff --git a/src/mesa/vbo/vbo_exec_array.c b/src/mesa/vbo/vbo_exec_array.c index 1bf4b11..aecfad0 100644 --- a/src/mesa/vbo/vbo_exec_array.c +++ b/src/mesa/vbo/vbo_exec_array.c @@ -861,7 +861,7 @@ vbo_validated_drawrangeelements(struct gl_context *ctx, GLenum mode, vbo_bind_arrays(ctx); ib.count = count; - ib.type = type; + ib.index_size = vbo_sizeof_ib_type(type); ib.obj = ctx->Array.VAO->IndexBufferObj; ib.ptr = indices; @@ -1297,7 +1297,7 @@ vbo_validated_multidrawelements(struct gl_context *ctx, GLenum mode, if (!fallback) { ib.count = (max_index_ptr - min_index_ptr) / index_type_size; - ib.type = type; + ib.index_size = vbo_sizeof_ib_type(type); ib.obj = ctx->Array.VAO->IndexBufferObj; ib.ptr = (void *) min_index_ptr; @@ -1330,7 +1330,7 @@ vbo_validated_multidrawelements(struct gl_context *ctx, GLenum mode, if (count[i] == 0) continue; ib.count = count[i]; - ib.type = type; + ib.index_size = vbo_sizeof_ib_type(type); ib.obj = ctx->Array.VAO->IndexBufferObj; ib.ptr = indices[i]; @@ -1574,7 +1574,7 @@ vbo_validated_drawelementsindirect(struct gl_context *ctx, vbo_bind_arrays(ctx); ib.count = 0; /* unknown */ - ib.type = type; + ib.index_size = vbo_sizeof_ib_type(type); ib.obj = ctx->Array.VAO->IndexBufferObj; ib.ptr = NULL; @@ -1606,7 +1606,7 @@ vbo_validated_multidrawelementsindirect(struct gl_context *ctx, /* NOTE: IndexBufferObj is guaranteed to be a VBO. */ ib.count = 0; /* unknown */ - ib.type = type; + ib.index_size = vbo_sizeof_ib_type(type); ib.obj = ctx->Array.VAO->IndexBufferObj; ib.ptr = NULL; @@ -1776,7 +1776,7 @@ vbo_validated_multidrawelementsindirectcount(struct gl_context *ctx, /* NOTE: IndexBufferObj is guaranteed to be a VBO. */ ib.count = 0; /* unknown */ - ib.type = type; + ib.index_size = vbo_sizeof_ib_type(type); ib.obj = ctx->Array.VAO->IndexBufferObj; ib.ptr = NULL; diff --git a/src/mesa/vbo/vbo_minmax_index.c b/src/mesa/vbo/vbo_minmax_index.c index 0f75a87..4c17a08 100644 --- a/src/mesa/vbo/vbo_minmax_index.c +++ b/src/mesa/vbo/vbo_minmax_index.c @@ -38,7 +38,7 @@ struct minmax_cache_key { GLintptr offset; GLuint count; - GLenum type; + unsigned index_size; }; @@ -60,7 +60,8 @@ static bool vbo_minmax_cache_key_equal(const struct minmax_cache_key *a, const struct minmax_cache_key *b) { - return (a->offset == b->offset) && (a->count == b->count) && (a->type == b->type); + return (a->offset == b->offset) && (a->count == b->count) && + (a->index_size == b->index_size); } @@ -101,7 +102,7 @@ vbo_delete_minmax_cache(struct gl_buffer_object *bufferObj) static GLboolean vbo_get_minmax_cached(struct gl_buffer_object *bufferObj, - GLenum type, GLintptr offset, GLuint count, + unsigned index_size, GLintptr offset, GLuint count, GLuint *min_index, GLuint *max_index) { GLboolean found = GL_FALSE; @@ -137,7 +138,7 @@ vbo_get_minmax_cached(struct gl_buffer_object *bufferObj, goto out_invalidate; } - key.type = type; + key.index_size = index_size; key.offset = offset; key.count = count; hash = vbo_minmax_cache_hash(&key); @@ -173,7 +174,7 @@ out_disable: static void vbo_minmax_cache_store(struct gl_context *ctx, struct gl_buffer_object *bufferObj, - GLenum type, GLintptr offset, GLuint count, + unsigned index_size, GLintptr offset, GLuint count, GLuint min, GLuint max) { struct minmax_cache_entry *entry; @@ -200,7 +201,7 @@ vbo_minmax_cache_store(struct gl_context *ctx, entry->key.offset = offset; entry->key.count = count; - entry->key.type = type; + entry->key.index_size = index_size; entry->min = min; entry->max = max; hash = vbo_minmax_cache_hash(&entry->key); @@ -240,17 +241,17 @@ vbo_get_minmax_index(struct gl_context *ctx, const GLuint count) { const GLboolean restart = ctx->Array._PrimitiveRestart; - const GLuint restartIndex = _mesa_primitive_restart_index(ctx, ib->type); - const int index_size = vbo_sizeof_ib_type(ib->type); + const GLuint restartIndex = + _mesa_primitive_restart_index(ctx, ib->index_size); const char *indices; GLuint i; - indices = (char *) ib->ptr + prim->start * index_size; + indices = (char *) ib->ptr + prim->start * ib->index_size; if (_mesa_is_bufferobj(ib->obj)) { - GLsizeiptr size = MIN2(count * index_size, ib->obj->Size); + GLsizeiptr size = MIN2(count * ib->index_size, ib->obj->Size); - if (vbo_get_minmax_cached(ib->obj, ib->type, (GLintptr) indices, count, - min_index, max_index)) + if (vbo_get_minmax_cached(ib->obj, ib->index_size, (GLintptr) indices, + count, min_index, max_index)) return; indices = ctx->Driver.MapBufferRange(ctx, (GLintptr) indices, size, @@ -258,8 +259,8 @@ vbo_get_minmax_index(struct gl_context *ctx, MAP_INTERNAL); } - switch (ib->type) { - case GL_UNSIGNED_INT: { + switch (ib->index_size) { + case 4: { const GLuint *ui_indices = (const GLuint *)indices; GLuint max_ui = 0; GLuint min_ui = ~0U; @@ -287,7 +288,7 @@ vbo_get_minmax_index(struct gl_context *ctx, *max_index = max_ui; break; } - case GL_UNSIGNED_SHORT: { + case 2: { const GLushort *us_indices = (const GLushort *)indices; GLuint max_us = 0; GLuint min_us = ~0U; @@ -309,7 +310,7 @@ vbo_get_minmax_index(struct gl_context *ctx, *max_index = max_us; break; } - case GL_UNSIGNED_BYTE: { + case 1: { const GLubyte *ub_indices = (const GLubyte *)indices; GLuint max_ub = 0; GLuint min_ub = ~0U; @@ -336,7 +337,7 @@ vbo_get_minmax_index(struct gl_context *ctx, } if (_mesa_is_bufferobj(ib->obj)) { - vbo_minmax_cache_store(ctx, ib->obj, ib->type, prim->start, count, + vbo_minmax_cache_store(ctx, ib->obj, ib->index_size, prim->start, count, *min_index, *max_index); ctx->Driver.UnmapBuffer(ctx, ib->obj, MAP_INTERNAL); } diff --git a/src/mesa/vbo/vbo_primitive_restart.c b/src/mesa/vbo/vbo_primitive_restart.c index 0662c5c..8f04def 100644 --- a/src/mesa/vbo/vbo_primitive_restart.c +++ b/src/mesa/vbo/vbo_primitive_restart.c @@ -175,7 +175,7 @@ vbo_sw_primitive_restart(struct gl_context *ctx, GLuint sub_prim_num; GLuint end_index; GLuint sub_end_index; - GLuint restart_index = _mesa_primitive_restart_index(ctx, ib->type); + GLuint restart_index = _mesa_primitive_restart_index(ctx, ib->index_size); struct _mesa_prim temp_prim; struct vbo_context *vbo = vbo_context(ctx); vbo_draw_func draw_prims_func = vbo->draw_prims; @@ -226,7 +226,7 @@ vbo_sw_primitive_restart(struct gl_context *ctx, ptr = ADD_POINTERS(ib->obj->Mappings[MAP_INTERNAL].Pointer, ib->ptr); - sub_prims = find_sub_primitives(ptr, vbo_sizeof_ib_type(ib->type), + sub_prims = find_sub_primitives(ptr, ib->index_size, 0, ib->count, restart_index, &num_sub_prims); diff --git a/src/mesa/vbo/vbo_rebase.c b/src/mesa/vbo/vbo_rebase.c index f40c59f..9f5dc46 100644 --- a/src/mesa/vbo/vbo_rebase.c +++ b/src/mesa/vbo/vbo_rebase.c @@ -182,14 +182,14 @@ void vbo_rebase_prims( struct gl_context *ctx, /* Some users might prefer it if we translated elements to * GLuints here. Others wouldn't... */ - switch (ib->type) { - case GL_UNSIGNED_INT: + switch (ib->index_size) { + case 4: tmp_indices = rebase_GLuint( ptr, ib->count, min_index ); break; - case GL_UNSIGNED_SHORT: + case 2: tmp_indices = rebase_GLushort( ptr, ib->count, min_index ); break; - case GL_UNSIGNED_BYTE: + case 1: tmp_indices = rebase_GLubyte( ptr, ib->count, min_index ); break; } @@ -204,7 +204,7 @@ void vbo_rebase_prims( struct gl_context *ctx, tmp_ib.obj = ctx->Shared->NullBufferObj; tmp_ib.ptr = tmp_indices; tmp_ib.count = ib->count; - tmp_ib.type = ib->type; + tmp_ib.index_size = ib->index_size; ib = &tmp_ib; } diff --git a/src/mesa/vbo/vbo_split_copy.c b/src/mesa/vbo/vbo_split_copy.c index ce8831d..8e35e44 100644 --- a/src/mesa/vbo/vbo_split_copy.c +++ b/src/mesa/vbo/vbo_split_copy.c @@ -479,8 +479,8 @@ replay_init( struct copy_context *copy ) ADD_POINTERS(copy->ib->obj->Mappings[MAP_INTERNAL].Pointer, copy->ib->ptr); - switch (copy->ib->type) { - case GL_UNSIGNED_BYTE: + switch (copy->ib->index_size) { + case 1: copy->translated_elt_buf = malloc(sizeof(GLuint) * copy->ib->count); copy->srcelt = copy->translated_elt_buf; @@ -488,7 +488,7 @@ replay_init( struct copy_context *copy ) copy->translated_elt_buf[i] = ((const GLubyte *)srcptr)[i]; break; - case GL_UNSIGNED_SHORT: + case 2: copy->translated_elt_buf = malloc(sizeof(GLuint) * copy->ib->count); copy->srcelt = copy->translated_elt_buf; @@ -496,7 +496,7 @@ replay_init( struct copy_context *copy ) copy->translated_elt_buf[i] = ((const GLushort *)srcptr)[i]; break; - case GL_UNSIGNED_INT: + case 4: copy->translated_elt_buf = NULL; copy->srcelt = (const GLuint *)srcptr; break; @@ -551,7 +551,7 @@ replay_init( struct copy_context *copy ) * list: */ copy->dstib.count = 0; /* duplicates dstelt_nr */ - copy->dstib.type = GL_UNSIGNED_INT; + copy->dstib.index_size = 4; copy->dstib.obj = ctx->Shared->NullBufferObj; copy->dstib.ptr = copy->dstelt; } diff --git a/src/mesa/vbo/vbo_split_inplace.c b/src/mesa/vbo/vbo_split_inplace.c index 1430ac9..9c5c288 100644 --- a/src/mesa/vbo/vbo_split_inplace.c +++ b/src/mesa/vbo/vbo_split_inplace.c @@ -75,7 +75,7 @@ static void flush_vertex( struct split_context *split ) ib.count = split->max_index - split->min_index + 1; ib.ptr = (const void *)((const char *)ib.ptr + - split->min_index * _mesa_sizeof_type(ib.type)); + split->min_index * ib.index_size); /* Rebase the primitives to save index buffer entries. */ for (i = 0; i < split->dstprim_nr; i++) @@ -223,7 +223,7 @@ static void split_prims( struct split_context *split) elts[j] = prim->start + j; ib.count = count; - ib.type = GL_UNSIGNED_INT; + ib.index_size = 4; ib.obj = split->ctx->Shared->NullBufferObj; ib.ptr = elts; -- 2.7.4