[Mesa-dev] [PATCH 04/14] mesa: refactor _mesa_valid_prim_mode()

Ian Romanick idr at freedesktop.org
Wed Apr 24 23:42:33 PDT 2013


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);
>
>
>



More information about the mesa-dev mailing list