summaryrefslogtreecommitdiff
path: root/src/mesa/vbo
diff options
context:
space:
mode:
authorBrian Paul <brianp@vmware.com>2013-05-01 19:15:33 -0600
committerBrian Paul <brianp@vmware.com>2013-05-02 09:03:15 -0600
commit79679e258b7aa4b1dc672c03795d47456893f881 (patch)
treec6996e1d6784534b7d87548a18272996c85c4b3d /src/mesa/vbo
parentd0102500bdc123984a2cfc95d4f2710f8c90e898 (diff)
vbo: add new vbo_initialize_exec_dispatch(), vbo_initialize_save_dispatch()
First step in simplifying the vertex array / glDraw dispatch code. Reviewed-by: Jose Fonseca <jfonseca@vmware.com>
Diffstat (limited to 'src/mesa/vbo')
-rw-r--r--src/mesa/vbo/vbo.h9
-rw-r--r--src/mesa/vbo/vbo_exec_array.c41
-rw-r--r--src/mesa/vbo/vbo_save_api.c18
3 files changed, 68 insertions, 0 deletions
diff --git a/src/mesa/vbo/vbo.h b/src/mesa/vbo/vbo.h
index 56392720bdc..9f800d87ad5 100644
--- a/src/mesa/vbo/vbo.h
+++ b/src/mesa/vbo/vbo.h
@@ -73,6 +73,15 @@ void _vbo_DestroyContext( struct gl_context *ctx );
void _vbo_InvalidateState( struct gl_context *ctx, GLuint new_state );
+void
+vbo_initialize_exec_dispatch(const struct gl_context *ctx,
+ struct _glapi_table *exec);
+
+void
+vbo_initialize_save_dispatch(const struct gl_context *ctx,
+ struct _glapi_table *exec);
+
+
typedef void (*vbo_draw_func)( struct gl_context *ctx,
const struct _mesa_prim *prims,
GLuint nr_prims,
diff --git a/src/mesa/vbo/vbo_exec_array.c b/src/mesa/vbo/vbo_exec_array.c
index 1bf3af47b8b..875c203ac6e 100644
--- a/src/mesa/vbo/vbo_exec_array.c
+++ b/src/mesa/vbo/vbo_exec_array.c
@@ -30,6 +30,7 @@
#include "main/context.h"
#include "main/state.h"
#include "main/api_validate.h"
+#include "main/dispatch.h"
#include "main/varray.h"
#include "main/bufferobj.h"
#include "main/enums.h"
@@ -1400,6 +1401,46 @@ vbo_exec_array_destroy( struct vbo_exec_context *exec )
}
+/**
+ * Initialize the dispatch table with the VBO functions for drawing.
+ */
+void
+vbo_initialize_exec_dispatch(const struct gl_context *ctx,
+ struct _glapi_table *exec)
+{
+ SET_DrawArrays(exec, vbo_exec_DrawArrays);
+ SET_DrawElements(exec, vbo_exec_DrawElements);
+
+ if (_mesa_is_desktop_gl(ctx) || _mesa_is_gles3(ctx)) {
+ SET_DrawRangeElements(exec, vbo_exec_DrawRangeElements);
+ }
+
+ SET_MultiDrawElementsEXT(exec, vbo_exec_MultiDrawElements);
+
+ if (_mesa_is_desktop_gl(ctx)) {
+ SET_DrawElementsBaseVertex(exec, vbo_exec_DrawElementsBaseVertex);
+ SET_DrawRangeElementsBaseVertex(exec, vbo_exec_DrawRangeElementsBaseVertex);
+ SET_MultiDrawElementsBaseVertex(exec, vbo_exec_MultiDrawElementsBaseVertex);
+ SET_DrawArraysInstancedBaseInstance(exec, vbo_exec_DrawArraysInstancedBaseInstance);
+ SET_DrawElementsInstancedBaseInstance(exec, vbo_exec_DrawElementsInstancedBaseInstance);
+ SET_DrawElementsInstancedBaseVertex(exec, vbo_exec_DrawElementsInstancedBaseVertex);
+ SET_DrawElementsInstancedBaseVertexBaseInstance(exec, vbo_exec_DrawElementsInstancedBaseVertexBaseInstance);
+ }
+
+ if (_mesa_is_desktop_gl(ctx) || _mesa_is_gles3(ctx)) {
+ SET_DrawArraysInstancedARB(exec, vbo_exec_DrawArraysInstanced);
+ SET_DrawElementsInstancedARB(exec, vbo_exec_DrawElementsInstanced);
+ }
+
+ if (_mesa_is_desktop_gl(ctx)) {
+ SET_DrawTransformFeedback(exec, vbo_exec_DrawTransformFeedback);
+ SET_DrawTransformFeedbackStream(exec, vbo_exec_DrawTransformFeedbackStream);
+ SET_DrawTransformFeedbackInstanced(exec, vbo_exec_DrawTransformFeedbackInstanced);
+ SET_DrawTransformFeedbackStreamInstanced(exec, vbo_exec_DrawTransformFeedbackStreamInstanced);
+ }
+}
+
+
/**
* The following functions are only used for OpenGL ES 1/2 support.
diff --git a/src/mesa/vbo/vbo_save_api.c b/src/mesa/vbo/vbo_save_api.c
index f7beab79727..8644df828d4 100644
--- a/src/mesa/vbo/vbo_save_api.c
+++ b/src/mesa/vbo/vbo_save_api.c
@@ -1550,6 +1550,24 @@ _save_vtxfmt_init(struct gl_context *ctx)
}
+/**
+ * Initialize the dispatch table with the VBO functions for display
+ * list compilation.
+ */
+void
+vbo_initialize_save_dispatch(const struct gl_context *ctx,
+ struct _glapi_table *exec)
+{
+ SET_DrawArrays(exec, _save_OBE_DrawArrays);
+ SET_DrawElements(exec, _save_OBE_DrawElements);
+ SET_DrawRangeElements(exec, _save_OBE_DrawRangeElements);
+ SET_MultiDrawElementsEXT(exec, _save_OBE_MultiDrawElements);
+ SET_MultiDrawElementsBaseVertex(exec, _save_OBE_MultiDrawElementsBaseVertex);
+ /* Note: other glDraw functins aren't compiled into display lists */
+}
+
+
+
void
vbo_save_SaveFlushVertices(struct gl_context *ctx)
{