On 04/25/2013 02:32 AM, Brian Paul wrote:
...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.
---
  src/mesa/main/api_validate.c |   31 +++++++++++++++++++------------
  src/mesa/main/api_validate.h |    3 +++
  2 files changed, 22 insertions(+), 12 deletions(-)

diff --git a/src/mesa/main/api_validate.c b/src/mesa/main/api_validate.c
index 19f5ab5..03f14f0 100644
--- a/src/mesa/main/api_validate.c
+++ b/src/mesa/main/api_validate.c
@@ -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

Maybe make this bool (and keep using true / false) since the return value is assigned to a bool in _mesa_valid_prim_mode anyway?

-_mesa_valid_prim_mode(struct gl_context *ctx, GLenum mode, const char *name)
+_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 GL_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 GL_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);
diff --git a/src/mesa/main/api_validate.h b/src/mesa/main/api_validate.h
index b5164e8..9035986 100644
--- a/src/mesa/main/api_validate.h
+++ b/src/mesa/main/api_validate.h
@@ -43,6 +43,9 @@ _mesa_max_buffer_index(struct gl_context *ctx, GLuint count, 
GLenum type,


  extern GLboolean
+_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);




_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to