From 43bdabd47d98975b56a759954fb5f37d2942c101 Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Wed, 18 May 2011 16:19:06 -0600 Subject: [PATCH] mesa: fix vertex array enable checking in check_valid_to_render() In particular, this fixes the case where a vertex shader only uses generic vertex attributes (non-0th). Before, we were no-op'ing the glDrawArrays/Elements(). This fixes the new piglit pos-array test. NOTE: This is a candidate for the 7.10 branch. --- src/mesa/main/api_validate.c | 34 ++++++++++++++++++++++++++++------ 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/src/mesa/main/api_validate.c b/src/mesa/main/api_validate.c index 7c4652f..993519f 100644 --- a/src/mesa/main/api_validate.c +++ b/src/mesa/main/api_validate.c @@ -116,17 +116,39 @@ check_valid_to_render(struct gl_context *ctx, const char *function) break; #endif -#if FEATURE_ES1 || FEATURE_GL +#if FEATURE_ES1 case API_OPENGLES: - case API_OPENGL: - /* For regular OpenGL, only draw if we have vertex positions - * (regardless of whether or not we have a vertex program/shader). */ - if (!ctx->Array.ArrayObj->Vertex.Enabled && - !ctx->Array.ArrayObj->VertexAttrib[0].Enabled) + /* For OpenGL ES, only draw if we have vertex positions + */ + if (!ctx->Array.ArrayObj->Vertex.Enabled) return GL_FALSE; break; #endif +#if FEATURE_GL + case API_OPENGL: + { + const struct gl_shader_program *vsProg = + ctx->Shader.CurrentVertexProgram; + GLboolean haveVertexShader = (vsProg && vsProg->LinkStatus); + GLboolean haveVertexProgram = ctx->VertexProgram._Enabled; + if (haveVertexShader || haveVertexProgram) { + /* Draw regardless of whether or not we have any vertex arrays. + * (Ex: could draw a point using a constant vertex pos) + */ + return GL_TRUE; + } + else { + /* Draw if we have vertex positions (GL_VERTEX_ARRAY or generic + * array [0]). + */ + return (ctx->Array.ArrayObj->Vertex.Enabled || + ctx->Array.ArrayObj->VertexAttrib[0].Enabled); + } + } + break; +#endif + default: ASSERT_NO_FEATURE(); } -- 2.7.4