Mesa (gallium-map-range): mesa: Massage the interface to more closely resemble ARB_map_buffer_range

Jose Fonseca jrfonseca at kemper.freedesktop.org
Tue Mar 3 18:53:52 UTC 2009


Module: Mesa
Branch: gallium-map-range
Commit: 004d8f11882c6c149a395cf2e86d5d5fb3fa114b
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=004d8f11882c6c149a395cf2e86d5d5fb3fa114b

Author: José Fonseca <jfonseca at vmware.com>
Date:   Tue Mar  3 18:52:51 2009 +0000

mesa: Massage the interface to more closely resemble ARB_map_buffer_range

---

 src/mesa/state_tracker/st_cb_bufferobjects.c |    9 +++++++--
 src/mesa/vbo/vbo_exec_draw.c                 |    7 ++-----
 2 files changed, 9 insertions(+), 7 deletions(-)

diff --git a/src/mesa/state_tracker/st_cb_bufferobjects.c b/src/mesa/state_tracker/st_cb_bufferobjects.c
index 28e387c..526fc95 100644
--- a/src/mesa/state_tracker/st_cb_bufferobjects.c
+++ b/src/mesa/state_tracker/st_cb_bufferobjects.c
@@ -218,6 +218,7 @@ st_bufferobj_map_range(GLcontext *ctx, GLenum target,
    struct pipe_context *pipe = st_context(ctx)->pipe;
    struct st_buffer_object *st_obj = st_buffer_object(obj);
    GLuint flags = 0;
+   char *map;
 
    if (access & GL_MAP_WRITE_BIT)
       flags |= PIPE_BUFFER_USAGE_CPU_WRITE;
@@ -231,8 +232,12 @@ st_bufferobj_map_range(GLcontext *ctx, GLenum target,
    if (access & MESA_MAP_NOWAIT_BIT)
       flags |= PIPE_BUFFER_USAGE_DONTBLOCK;
 
-   obj->Pointer = pipe_buffer_map(pipe->screen, st_obj->buffer, flags);
-   return obj->Pointer;
+   map = pipe_buffer_map_range(pipe->screen, st_obj->buffer, offset, length, flags);
+   /* FIXME: some code expects this to point to the buffer start, which means that
+    * the range might not be respected in all circumstances
+    */
+   obj->Pointer = map ? map - offset : NULL;
+   return map;
 }
 
 
diff --git a/src/mesa/vbo/vbo_exec_draw.c b/src/mesa/vbo/vbo_exec_draw.c
index 38b6c56..b08909c 100644
--- a/src/mesa/vbo/vbo_exec_draw.c
+++ b/src/mesa/vbo/vbo_exec_draw.c
@@ -281,11 +281,8 @@ void vbo_exec_vtx_map( struct vbo_exec_context *exec )
                                                 MESA_MAP_NOWAIT_BIT),
                                                exec->vtx.bufferobj);
    }
-
-   if (exec->vtx.buffer_map) {
-      exec->vtx.buffer_map += exec->vtx.buffer_used / sizeof(float);
-   }
-   else {
+   
+   if (!exec->vtx.buffer_map) {
       exec->vtx.buffer_used = 0;
 
       ctx->Driver.BufferData(ctx, target, 




More information about the mesa-commit mailing list