From bb459f6295736d55ab5855d7b19e5e49aaf9af41 Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Wed, 1 May 2013 19:15:32 -0600 Subject: mesa: refactor _mesa_valid_prim_mode() ...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 --- src/mesa/main/api_validate.c | 33 ++++++++++++++++++++------------- src/mesa/main/api_validate.h | 5 ++++- 2 files changed, 24 insertions(+), 14 deletions(-) (limited to 'src') diff --git a/src/mesa/main/api_validate.c b/src/mesa/main/api_validate.c index 19f5ab5..30a1953 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 -_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); diff --git a/src/mesa/main/api_validate.h b/src/mesa/main/api_validate.h index b5164e8..a5004b8 100644 --- a/src/mesa/main/api_validate.h +++ b/src/mesa/main/api_validate.h @@ -28,7 +28,7 @@ #ifndef API_VALIDATE_H #define API_VALIDATE_H - +#include #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); -- cgit v1.1