[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