mesa: use new _mesa_inside_begin_end() function
authorBrian Paul <brianp@vmware.com>
Tue, 23 Apr 2013 16:53:00 +0000 (10:53 -0600)
committerBrian Paul <brianp@vmware.com>
Wed, 24 Apr 2013 03:09:17 +0000 (21:09 -0600)
Reviewed-by: Eric Anholt <eric@anholt.net>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/mesa/main/context.h
src/mesa/vbo/vbo_exec_api.c
src/mesa/vbo/vbo_save_draw.c
src/mesa/vbo/vbo_save_loopback.c

index 1b881f3f337a6804058f08a96fbcfee5035d445d..05251849b575156761b2fbf853724e7bb3f3b8e0 100644 (file)
@@ -189,6 +189,17 @@ _mesa_Flush( void );
 /*@}*/
 
 
+/**
+ * Are we currently between glBegin and glEnd?
+ * During execution, not display list compilation.
+ */
+static inline GLboolean
+_mesa_inside_begin_end(const struct gl_context *ctx)
+{
+   return ctx->Driver.CurrentExecPrimitive != PRIM_OUTSIDE_BEGIN_END;
+}
+
+
 /**
  * \name Macros for flushing buffered rendering commands before state changes,
  * checking if inside glBegin/glEnd, etc.
@@ -242,7 +253,7 @@ do {                                                                \
  */
 #define ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, retval)              \
 do {                                                                   \
-   if (ctx->Driver.CurrentExecPrimitive != PRIM_OUTSIDE_BEGIN_END) {   \
+   if (_mesa_inside_begin_end(ctx)) {                                  \
       _mesa_error(ctx, GL_INVALID_OPERATION, "Inside glBegin/glEnd");  \
       return retval;                                                   \
    }                                                                   \
@@ -256,7 +267,7 @@ do {                                                                        \
  */
 #define ASSERT_OUTSIDE_BEGIN_END(ctx)                                  \
 do {                                                                   \
-   if (ctx->Driver.CurrentExecPrimitive != PRIM_OUTSIDE_BEGIN_END) {   \
+   if (_mesa_inside_begin_end(ctx)) {                                  \
       _mesa_error(ctx, GL_INVALID_OPERATION, "Inside glBegin/glEnd");  \
       return;                                                          \
    }                                                                   \
index c06e4642a69bd5d889fb225c790e41ffdd8e55b0..53889d082b341d5b44ba49f77519bdc061957122 100644 (file)
@@ -74,7 +74,7 @@ static void vbo_exec_wrap_buffers( struct vbo_exec_context *exec )
       GLuint last_begin = exec->vtx.prim[exec->vtx.prim_count-1].begin;
       GLuint last_count;
 
-      if (exec->ctx->Driver.CurrentExecPrimitive != PRIM_OUTSIDE_BEGIN_END) {
+      if (_mesa_inside_begin_end(exec->ctx)) {
         GLint i = exec->vtx.prim_count - 1;
         assert(i >= 0);
         exec->vtx.prim[i].count = (exec->vtx.vert_count - 
@@ -96,7 +96,7 @@ static void vbo_exec_wrap_buffers( struct vbo_exec_context *exec )
        */
       assert(exec->vtx.prim_count == 0);
 
-      if (exec->ctx->Driver.CurrentExecPrimitive != PRIM_OUTSIDE_BEGIN_END) {
+      if (_mesa_inside_begin_end(exec->ctx)) {
         exec->vtx.prim[0].mode = exec->ctx->Driver.CurrentExecPrimitive;
         exec->vtx.prim[0].start = 0;
         exec->vtx.prim[0].count = 0;
@@ -269,7 +269,7 @@ vbo_exec_wrap_upgrade_vertex(struct vbo_exec_context *exec,
    /* Heuristic: Attempt to isolate attributes received outside
     * begin/end so that they don't bloat the vertices.
     */
-   if (ctx->Driver.CurrentExecPrimitive == PRIM_OUTSIDE_BEGIN_END &&
+   if (!_mesa_inside_begin_end(ctx) &&
        !oldSize && lastcount > 8 && exec->vtx.vertex_size) {
       vbo_exec_copy_to_current( exec );
       reset_attrfv( exec );
@@ -789,7 +789,7 @@ static void GLAPIENTRY vbo_exec_Begin( GLenum mode )
    struct vbo_exec_context *exec = &vbo_context(ctx)->exec;
    int i;
 
-   if (ctx->Driver.CurrentExecPrimitive != PRIM_OUTSIDE_BEGIN_END) {
+   if (_mesa_inside_begin_end(ctx)) {
       _mesa_error(ctx, GL_INVALID_OPERATION, "glBegin");
       return;
    }
@@ -852,7 +852,7 @@ static void GLAPIENTRY vbo_exec_End( void )
    GET_CURRENT_CONTEXT( ctx ); 
    struct vbo_exec_context *exec = &vbo_context(ctx)->exec;
 
-   if (ctx->Driver.CurrentExecPrimitive == PRIM_OUTSIDE_BEGIN_END) {
+   if (!_mesa_inside_begin_end(ctx)) {
       _mesa_error(ctx, GL_INVALID_OPERATION, "glEnd");
       return;
    }
@@ -1242,7 +1242,7 @@ void vbo_exec_FlushVertices( struct gl_context *ctx, GLuint flags )
    assert(exec->flush_call_depth == 1);
 #endif
 
-   if (ctx->Driver.CurrentExecPrimitive != PRIM_OUTSIDE_BEGIN_END) {
+   if (_mesa_inside_begin_end(ctx)) {
       /* We've had glBegin but not glEnd! */
 #ifdef DEBUG
       exec->flush_call_depth--;
index bd1c0de98f66b1d01ab17f900dc38fca3e9c413d..2e468375f4db19cafac2228f8b18bb6e309dc211 100644 (file)
@@ -268,7 +268,7 @@ vbo_save_playback_vertex_list(struct gl_context *ctx, void *data)
 
    if (node->prim_count > 0) {
 
-      if (ctx->Driver.CurrentExecPrimitive != PRIM_OUTSIDE_BEGIN_END &&
+      if (_mesa_inside_begin_end(ctx) &&
          node->prim[0].begin) {
 
         /* Degenerate case: list is called inside begin/end pair and
index 25d4c51b1d90e5db379fbd1a8534cef7e5e3462c..31343cd67a93aa9d5ce88c7bfac189a6aa359ab0 100644 (file)
@@ -177,7 +177,7 @@ void vbo_loopback_vertex_list( struct gl_context *ctx,
 
    for (i = 0 ; i < prim_count ; i++) {
       if ((prim[i].mode & VBO_SAVE_PRIM_WEAK) &&
-         (ctx->Driver.CurrentExecPrimitive != PRIM_OUTSIDE_BEGIN_END))
+          _mesa_inside_begin_end(ctx))
       {
         loopback_weak_prim( ctx, &prim[i] );
       }