diff options
| author | Keith Whitwell <keithw@vmware.com> | 2009-03-04 17:01:47 +0000 | 
|---|---|---|
| committer | Keith Whitwell <keithw@vmware.com> | 2009-03-04 17:01:47 +0000 | 
| commit | 368ca83a3fdfbe8dfe591ab73d29c500d1a91c0a (patch) | |
| tree | 8110070eeb63858e4f916bdbf3da63cfb24da939 | |
| parent | 89f1f8f0b8fb684a7b1fce5bfbb961e4521745d7 (diff) | |
vbo: second attempt - avoid getting buffer_ptr and buffer_map out of sync
| -rw-r--r-- | src/mesa/vbo/vbo_exec_api.c | 3 | ||||
| -rw-r--r-- | src/mesa/vbo/vbo_exec_draw.c | 8 | 
2 files changed, 10 insertions, 1 deletions
diff --git a/src/mesa/vbo/vbo_exec_api.c b/src/mesa/vbo/vbo_exec_api.c index 9c2d065913..a1e66aec63 100644 --- a/src/mesa/vbo/vbo_exec_api.c +++ b/src/mesa/vbo/vbo_exec_api.c @@ -675,6 +675,7 @@ void vbo_use_buffer_objects(GLcontext *ctx)     if (exec->vtx.buffer_map) {        _mesa_align_free(exec->vtx.buffer_map);        exec->vtx.buffer_map = NULL; +      exec->vtx.buffer_ptr = NULL;     }     /* Allocate a real buffer object now */ @@ -700,6 +701,7 @@ void vbo_exec_vtx_init( struct vbo_exec_context *exec )     ASSERT(!exec->vtx.buffer_map);     exec->vtx.buffer_map = (GLfloat *)ALIGN_MALLOC(VBO_VERT_BUFFER_SIZE, 64); +   exec->vtx.buffer_ptr = exec->vtx.buffer_map;     vbo_exec_vtxfmt_init( exec ); @@ -735,6 +737,7 @@ void vbo_exec_vtx_destroy( struct vbo_exec_context *exec )        if (exec->vtx.buffer_map) {           ALIGN_FREE(exec->vtx.buffer_map);           exec->vtx.buffer_map = NULL; +         exec->vtx.buffer_ptr = NULL;        }     }  } diff --git a/src/mesa/vbo/vbo_exec_draw.c b/src/mesa/vbo/vbo_exec_draw.c index 38b6c56f47..59e176b837 100644 --- a/src/mesa/vbo/vbo_exec_draw.c +++ b/src/mesa/vbo/vbo_exec_draw.c @@ -243,7 +243,10 @@ static void vbo_exec_vtx_unmap( struct vbo_exec_context *exec )        exec->vtx.buffer_used += (exec->vtx.buffer_ptr -                                  exec->vtx.buffer_map) * sizeof(float); -             + +      assert(exec->vtx.buffer_used <= VBO_VERT_BUFFER_SIZE); +      assert(exec->vtx.buffer_ptr != NULL); +              ctx->Driver.UnmapBuffer(ctx, target, exec->vtx.bufferobj);        exec->vtx.buffer_map = NULL;        exec->vtx.buffer_ptr = NULL; @@ -264,6 +267,7 @@ void vbo_exec_vtx_map( struct vbo_exec_context *exec )     if (exec->vtx.buffer_map != NULL) {        assert(0);        exec->vtx.buffer_map = NULL; +      exec->vtx.buffer_ptr = NULL;     }     if (VBO_VERT_BUFFER_SIZE > exec->vtx.buffer_used + 1024 && @@ -280,6 +284,7 @@ void vbo_exec_vtx_map( struct vbo_exec_context *exec )                                                  GL_MAP_UNSYNCHRONIZED_BIT |                                                   MESA_MAP_NOWAIT_BIT),                                                 exec->vtx.bufferobj); +      exec->vtx.buffer_ptr = exec->vtx.buffer_map;     }     if (exec->vtx.buffer_map) { @@ -294,6 +299,7 @@ void vbo_exec_vtx_map( struct vbo_exec_context *exec )        exec->vtx.buffer_map =            (GLfloat *)ctx->Driver.MapBuffer(ctx, target, access, exec->vtx.bufferobj); +      exec->vtx.buffer_ptr = exec->vtx.buffer_map;     }     if (0) _mesa_printf("map %d..\n", exec->vtx.buffer_used);  | 
