[Mesa-dev] [PATCH 12/12] tnl: Only map the necessary buffer range in bind_indices
Ian Romanick
idr at freedesktop.org
Mon Aug 22 00:33:04 PDT 2011
From: Ian Romanick <ian.d.romanick at intel.com>
---
src/mesa/tnl/t_draw.c | 19 ++++++++++++++-----
1 files changed, 14 insertions(+), 5 deletions(-)
diff --git a/src/mesa/tnl/t_draw.c b/src/mesa/tnl/t_draw.c
index a23d175..e67a673 100644
--- a/src/mesa/tnl/t_draw.c
+++ b/src/mesa/tnl/t_draw.c
@@ -347,16 +347,25 @@ static void bind_indices( struct gl_context *ctx,
}
if (ib->obj->Name && !ib->obj->Pointer) {
+ unsigned map_size;
+
+ switch (ib->type) {
+ case GL_UNSIGNED_BYTE: map_size = ib->count * sizeof(GLubyte); break;
+ case GL_UNSIGNED_SHORT: map_size = ib->count * sizeof(GLushort); break;
+ case GL_UNSIGNED_INT: map_size = ib->count * sizeof(GLuint); break;
+ default: assert(0); map_size = 0;
+ }
+
+ printf("%s: map_size = %u\n", __func__, map_size);
bo[*nr_bo] = ib->obj;
(*nr_bo)++;
- ctx->Driver.MapBufferRange(ctx, 0, ib->obj->Size, GL_MAP_READ_BIT,
- ib->obj);
-
+ ptr = ctx->Driver.MapBufferRange(ctx, (GLsizeiptr) ib->ptr, map_size,
+ GL_MAP_READ_BIT, ib->obj);
assert(ib->obj->Pointer);
+ } else {
+ ptr = ib->ptr;
}
- ptr = ADD_POINTERS(ib->obj->Pointer, ib->ptr);
-
if (ib->type == GL_UNSIGNED_INT && VB->Primitive[0].basevertex == 0) {
VB->Elts = (GLuint *) ptr;
}
--
1.7.4.4
More information about the mesa-dev
mailing list