mesa: refactor _mesa_valid_prim_mode()
authorBrian Paul <brianp@vmware.com>
Thu, 2 May 2013 01:15:32 +0000 (19:15 -0600)
committerBrian Paul <brianp@vmware.com>
Thu, 2 May 2013 15:03:14 +0000 (09:03 -0600)
...in terms of new _mesa_is_valid_prim_mode().  We need a mode validater
function that doesn't depend on current state for the display list code.

Reviewed-by: Jose Fonseca <jfonseca@vmware.com>
src/mesa/main/api_validate.c
src/mesa/main/api_validate.h

index 19f5ab5592c63d25c8298a309975bc822cda73d4..30a1953505a20fd5995c739de96288b007b834e9 100644 (file)
@@ -201,12 +201,11 @@ check_index_bounds(struct gl_context *ctx, GLsizei count, GLenum type,
  * Is 'mode' a valid value for glBegin(), glDrawArrays(), glDrawElements(),
  * etc?  The set of legal values depends on whether geometry shaders/programs
  * are supported.
+ * Note: This may be called during display list compilation.
  */
-GLboolean
-_mesa_valid_prim_mode(struct gl_context *ctx, GLenum mode, const char *name)
+bool
+_mesa_is_valid_prim_mode(struct gl_context *ctx, GLenum mode)
 {
-   bool valid_enum;
-
    switch (mode) {
    case GL_POINTS:
    case GL_LINES:
@@ -215,24 +214,32 @@ _mesa_valid_prim_mode(struct gl_context *ctx, GLenum mode, const char *name)
    case GL_TRIANGLES:
    case GL_TRIANGLE_STRIP:
    case GL_TRIANGLE_FAN:
-      valid_enum = true;
-      break;
+      return true;
    case GL_QUADS:
    case GL_QUAD_STRIP:
    case GL_POLYGON:
-      valid_enum = (ctx->API == API_OPENGL_COMPAT);
-      break;
+      return (ctx->API == API_OPENGL_COMPAT);
    case GL_LINES_ADJACENCY:
    case GL_LINE_STRIP_ADJACENCY:
    case GL_TRIANGLES_ADJACENCY:
    case GL_TRIANGLE_STRIP_ADJACENCY:
-      valid_enum = _mesa_is_desktop_gl(ctx)
-         && ctx->Extensions.ARB_geometry_shader4;
-      break;
+      return _mesa_is_desktop_gl(ctx) && ctx->Extensions.ARB_geometry_shader4;
    default:
-      valid_enum = false;
-      break;
+      return false;
    }
+}
+
+
+/**
+ * Is 'mode' a valid value for glBegin(), glDrawArrays(), glDrawElements(),
+ * etc?  Also, do additional checking related to transformation feedback.
+ * Note: this function cannot be called during glNewList(GL_COMPILE) because
+ * this code depends on current transform feedback state.
+ */
+GLboolean
+_mesa_valid_prim_mode(struct gl_context *ctx, GLenum mode, const char *name)
+{
+   bool valid_enum = _mesa_is_valid_prim_mode(ctx, mode);
 
    if (!valid_enum) {
       _mesa_error(ctx, GL_INVALID_ENUM, "%s(mode=%x)", name, mode);
index b5164e8ef13128069d8adab0d87f8f439d376e9b..a5004b8a389f869b5966701648d84189559ceedb 100644 (file)
@@ -28,7 +28,7 @@
 #ifndef API_VALIDATE_H
 #define API_VALIDATE_H
 
-
+#include <stdbool.h>
 #include "glheader.h"
 
 struct gl_buffer_object;
@@ -42,6 +42,9 @@ _mesa_max_buffer_index(struct gl_context *ctx, GLuint count, GLenum type,
                        struct gl_buffer_object *elementBuf);
 
 
+extern bool
+_mesa_is_valid_prim_mode(struct gl_context *ctx, GLenum mode);
+
 extern GLboolean
 _mesa_valid_prim_mode(struct gl_context *ctx, GLenum mode, const char *name);