Mesa (master): mesa: Add BeginVertices driver call
Keith Whitwell
keithw at kemper.freedesktop.org
Tue Mar 3 03:55:34 PST 2009
Module: Mesa
Branch: master
Commit: c64a2b708944ec671b1104067245500fcfc6ed94
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=c64a2b708944ec671b1104067245500fcfc6ed94
Author: Keith Whitwell <keithw at vmware.com>
Date: Tue Mar 3 10:41:57 2009 +0000
mesa: Add BeginVertices driver call
Provides notification to the VBO modules prior to the first immediate call.
Pairs with FlushVertices()
---
src/mesa/main/dd.h | 6 ++++++
src/mesa/main/vtxfmt.c | 9 ++++++---
src/mesa/vbo/vbo_exec.c | 1 +
src/mesa/vbo/vbo_exec.h | 2 ++
src/mesa/vbo/vbo_exec_api.c | 10 ++++++++++
5 files changed, 25 insertions(+), 3 deletions(-)
diff --git a/src/mesa/main/dd.h b/src/mesa/main/dd.h
index 7fb0a21..b1e0069 100644
--- a/src/mesa/main/dd.h
+++ b/src/mesa/main/dd.h
@@ -947,6 +947,12 @@ struct dd_function_table {
GLuint NeedFlush;
GLuint SaveNeedFlush;
+
+ /* Called prior to any of the GLvertexformat functions being
+ * called. Paired with Driver.FlushVertices().
+ */
+ void (*BeginVertices)( GLcontext *ctx );
+
/**
* If inside glBegin()/glEnd(), it should ASSERT(0). Otherwise, if
* FLUSH_STORED_VERTICES bit in \p flags is set flushes any buffered
diff --git a/src/mesa/main/vtxfmt.c b/src/mesa/main/vtxfmt.c
index 0204979..1f807dc 100644
--- a/src/mesa/main/vtxfmt.c
+++ b/src/mesa/main/vtxfmt.c
@@ -54,9 +54,12 @@
ASSERT( tnl->Current ); \
ASSERT( tnl->SwapCount < NUM_VERTEX_FORMAT_ENTRIES ); \
ASSERT( tmp_offset >= 0 ); \
- \
- /* Save the swapped function's dispatch entry so it can be */ \
- /* restored later. */ \
+ \
+ if (tnl->SwapCount == 0) \
+ ctx->Driver.BeginVertices( ctx ); \
+ \
+ /* Save the swapped function's dispatch entry so it can be */ \
+ /* restored later. */ \
tnl->Swapped[tnl->SwapCount].location = & (((_glapi_proc *)ctx->Exec)[tmp_offset]); \
tnl->Swapped[tnl->SwapCount].function = (_glapi_proc)TAG(FUNC); \
tnl->SwapCount++; \
diff --git a/src/mesa/vbo/vbo_exec.c b/src/mesa/vbo/vbo_exec.c
index 635f239..e168a89 100644
--- a/src/mesa/vbo/vbo_exec.c
+++ b/src/mesa/vbo/vbo_exec.c
@@ -57,6 +57,7 @@ void vbo_exec_init( GLcontext *ctx )
ctx->Driver.NeedFlush = 0;
ctx->Driver.CurrentExecPrimitive = PRIM_OUTSIDE_BEGIN_END;
+ ctx->Driver.BeginVertices = vbo_exec_BeginVertices;
ctx->Driver.FlushVertices = vbo_exec_FlushVertices;
vbo_exec_invalidate_state( ctx, ~0 );
diff --git a/src/mesa/vbo/vbo_exec.h b/src/mesa/vbo/vbo_exec.h
index ddbcbe1..3ce3665 100644
--- a/src/mesa/vbo/vbo_exec.h
+++ b/src/mesa/vbo/vbo_exec.h
@@ -140,6 +140,8 @@ struct vbo_exec_context
void vbo_exec_init( GLcontext *ctx );
void vbo_exec_destroy( GLcontext *ctx );
void vbo_exec_invalidate_state( GLcontext *ctx, GLuint new_state );
+
+void vbo_exec_BeginVertices( GLcontext *ctx );
void vbo_exec_FlushVertices( GLcontext *ctx, GLuint flags );
diff --git a/src/mesa/vbo/vbo_exec_api.c b/src/mesa/vbo/vbo_exec_api.c
index 23f4f83..093e3d2 100644
--- a/src/mesa/vbo/vbo_exec_api.c
+++ b/src/mesa/vbo/vbo_exec_api.c
@@ -748,6 +748,12 @@ void vbo_exec_vtx_destroy( struct vbo_exec_context *exec )
}
}
+void vbo_exec_BeginVertices( GLcontext *ctx )
+{
+ struct vbo_exec_context *exec = &vbo_context(ctx)->exec;
+ if (0) _mesa_printf("%s\n", __FUNCTION__);
+// vbo_exec_vtx_map( exec );
+}
void vbo_exec_FlushVertices( GLcontext *ctx, GLuint flags )
{
@@ -765,6 +771,10 @@ void vbo_exec_FlushVertices( GLcontext *ctx, GLuint flags )
reset_attrfv( exec );
}
+ /* Need to do this to ensure BeginVertices gets called again:
+ */
+ _mesa_restore_exec_vtxfmt( ctx );
+
exec->ctx->Driver.NeedFlush = 0;
}
More information about the mesa-commit
mailing list