In OpenGL 3.1 attribute 0 becomes non-magic, just like in OpenGL ES 2.0. Earlier versions of OpenGL used attribute 0 exclusively for vertex position.
Fixes 4 Khronos OpenGL CTS failures: glGetVertexAttrib depth24_basic depth24_precision rgb8_rgba8_rgb Cc: <mesa-sta...@lists.freedesktop.org> Signed-off-by: Anuj Phogat <anuj.pho...@gmail.com> --- src/mesa/vbo/vbo_attrib_tmp.h | 50 ++++++++++++++++++++++++------------------- 1 file changed, 28 insertions(+), 22 deletions(-) diff --git a/src/mesa/vbo/vbo_attrib_tmp.h b/src/mesa/vbo/vbo_attrib_tmp.h index a2ea6d0..2865431 100644 --- a/src/mesa/vbo/vbo_attrib_tmp.h +++ b/src/mesa/vbo/vbo_attrib_tmp.h @@ -494,12 +494,18 @@ TAG(MultiTexCoord4fv)(GLenum target, const GLfloat * v) } +/* In OpenGL 3.1 attribute 0 becomes non-magic, just like in OpenGL ES 2.0. */ +static inline bool +attr_zero_specifies_vertex(struct gl_context *ctx) { + return (ctx->API != API_OPENGLES2 + && (ctx->API != API_OPENGL_CORE || ctx->Version < 31)); +} static void GLAPIENTRY TAG(VertexAttrib1fARB)(GLuint index, GLfloat x) { GET_CURRENT_CONTEXT(ctx); - if (index == 0) + if (index == 0 && attr_zero_specifies_vertex(ctx)) ATTR1F(0, x); else if (index < MAX_VERTEX_GENERIC_ATTRIBS) ATTR1F(VBO_ATTRIB_GENERIC0 + index, x); @@ -511,7 +517,7 @@ static void GLAPIENTRY TAG(VertexAttrib1fvARB)(GLuint index, const GLfloat * v) { GET_CURRENT_CONTEXT(ctx); - if (index == 0) + if (index == 0 && attr_zero_specifies_vertex(ctx)) ATTR1FV(0, v); else if (index < MAX_VERTEX_GENERIC_ATTRIBS) ATTR1FV(VBO_ATTRIB_GENERIC0 + index, v); @@ -523,7 +529,7 @@ static void GLAPIENTRY TAG(VertexAttrib2fARB)(GLuint index, GLfloat x, GLfloat y) { GET_CURRENT_CONTEXT(ctx); - if (index == 0) + if (index == 0 && attr_zero_specifies_vertex(ctx)) ATTR2F(0, x, y); else if (index < MAX_VERTEX_GENERIC_ATTRIBS) ATTR2F(VBO_ATTRIB_GENERIC0 + index, x, y); @@ -535,7 +541,7 @@ static void GLAPIENTRY TAG(VertexAttrib2fvARB)(GLuint index, const GLfloat * v) { GET_CURRENT_CONTEXT(ctx); - if (index == 0) + if (index == 0 && attr_zero_specifies_vertex(ctx)) ATTR2FV(0, v); else if (index < MAX_VERTEX_GENERIC_ATTRIBS) ATTR2FV(VBO_ATTRIB_GENERIC0 + index, v); @@ -547,7 +553,7 @@ static void GLAPIENTRY TAG(VertexAttrib3fARB)(GLuint index, GLfloat x, GLfloat y, GLfloat z) { GET_CURRENT_CONTEXT(ctx); - if (index == 0) + if (index == 0 && attr_zero_specifies_vertex(ctx)) ATTR3F(0, x, y, z); else if (index < MAX_VERTEX_GENERIC_ATTRIBS) ATTR3F(VBO_ATTRIB_GENERIC0 + index, x, y, z); @@ -559,7 +565,7 @@ static void GLAPIENTRY TAG(VertexAttrib3fvARB)(GLuint index, const GLfloat * v) { GET_CURRENT_CONTEXT(ctx); - if (index == 0) + if (index == 0 && attr_zero_specifies_vertex(ctx)) ATTR3FV(0, v); else if (index < MAX_VERTEX_GENERIC_ATTRIBS) ATTR3FV(VBO_ATTRIB_GENERIC0 + index, v); @@ -571,7 +577,7 @@ static void GLAPIENTRY TAG(VertexAttrib4fARB)(GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w) { GET_CURRENT_CONTEXT(ctx); - if (index == 0) + if (index == 0 && attr_zero_specifies_vertex(ctx)) ATTR4F(0, x, y, z, w); else if (index < MAX_VERTEX_GENERIC_ATTRIBS) ATTR4F(VBO_ATTRIB_GENERIC0 + index, x, y, z, w); @@ -583,7 +589,7 @@ static void GLAPIENTRY TAG(VertexAttrib4fvARB)(GLuint index, const GLfloat * v) { GET_CURRENT_CONTEXT(ctx); - if (index == 0) + if (index == 0 && attr_zero_specifies_vertex(ctx)) ATTR4FV(0, v); else if (index < MAX_VERTEX_GENERIC_ATTRIBS) ATTR4FV(VBO_ATTRIB_GENERIC0 + index, v); @@ -600,7 +606,7 @@ static void GLAPIENTRY TAG(VertexAttribI1i)(GLuint index, GLint x) { GET_CURRENT_CONTEXT(ctx); - if (index == 0) + if (index == 0 && attr_zero_specifies_vertex(ctx)) ATTR1I(0, x); else if (index < MAX_VERTEX_GENERIC_ATTRIBS) ATTR1I(VBO_ATTRIB_GENERIC0 + index, x); @@ -612,7 +618,7 @@ static void GLAPIENTRY TAG(VertexAttribI2i)(GLuint index, GLint x, GLint y) { GET_CURRENT_CONTEXT(ctx); - if (index == 0) + if (index == 0 && attr_zero_specifies_vertex(ctx)) ATTR2I(0, x, y); else if (index < MAX_VERTEX_GENERIC_ATTRIBS) ATTR2I(VBO_ATTRIB_GENERIC0 + index, x, y); @@ -624,7 +630,7 @@ static void GLAPIENTRY TAG(VertexAttribI3i)(GLuint index, GLint x, GLint y, GLint z) { GET_CURRENT_CONTEXT(ctx); - if (index == 0) + if (index == 0 && attr_zero_specifies_vertex(ctx)) ATTR3I(0, x, y, z); else if (index < MAX_VERTEX_GENERIC_ATTRIBS) ATTR3I(VBO_ATTRIB_GENERIC0 + index, x, y, z); @@ -636,7 +642,7 @@ static void GLAPIENTRY TAG(VertexAttribI4i)(GLuint index, GLint x, GLint y, GLint z, GLint w) { GET_CURRENT_CONTEXT(ctx); - if (index == 0) + if (index == 0 && attr_zero_specifies_vertex(ctx)) ATTR4I(0, x, y, z, w); else if (index < MAX_VERTEX_GENERIC_ATTRIBS) ATTR4I(VBO_ATTRIB_GENERIC0 + index, x, y, z, w); @@ -648,7 +654,7 @@ static void GLAPIENTRY TAG(VertexAttribI2iv)(GLuint index, const GLint *v) { GET_CURRENT_CONTEXT(ctx); - if (index == 0) + if (index == 0 && attr_zero_specifies_vertex(ctx)) ATTR2IV(0, v); else if (index < MAX_VERTEX_GENERIC_ATTRIBS) ATTR2IV(VBO_ATTRIB_GENERIC0 + index, v); @@ -660,7 +666,7 @@ static void GLAPIENTRY TAG(VertexAttribI3iv)(GLuint index, const GLint *v) { GET_CURRENT_CONTEXT(ctx); - if (index == 0) + if (index == 0 && attr_zero_specifies_vertex(ctx)) ATTR3IV(0, v); else if (index < MAX_VERTEX_GENERIC_ATTRIBS) ATTR3IV(VBO_ATTRIB_GENERIC0 + index, v); @@ -672,7 +678,7 @@ static void GLAPIENTRY TAG(VertexAttribI4iv)(GLuint index, const GLint *v) { GET_CURRENT_CONTEXT(ctx); - if (index == 0) + if (index == 0 && attr_zero_specifies_vertex(ctx)) ATTR4IV(0, v); else if (index < MAX_VERTEX_GENERIC_ATTRIBS) ATTR4IV(VBO_ATTRIB_GENERIC0 + index, v); @@ -689,7 +695,7 @@ static void GLAPIENTRY TAG(VertexAttribI1ui)(GLuint index, GLuint x) { GET_CURRENT_CONTEXT(ctx); - if (index == 0) + if (index == 0 && attr_zero_specifies_vertex(ctx)) ATTR1UI(0, x); else if (index < MAX_VERTEX_GENERIC_ATTRIBS) ATTR1UI(VBO_ATTRIB_GENERIC0 + index, x); @@ -701,7 +707,7 @@ static void GLAPIENTRY TAG(VertexAttribI2ui)(GLuint index, GLuint x, GLuint y) { GET_CURRENT_CONTEXT(ctx); - if (index == 0) + if (index == 0 && attr_zero_specifies_vertex(ctx)) ATTR2UI(0, x, y); else if (index < MAX_VERTEX_GENERIC_ATTRIBS) ATTR2UI(VBO_ATTRIB_GENERIC0 + index, x, y); @@ -713,7 +719,7 @@ static void GLAPIENTRY TAG(VertexAttribI3ui)(GLuint index, GLuint x, GLuint y, GLuint z) { GET_CURRENT_CONTEXT(ctx); - if (index == 0) + if (index == 0 && attr_zero_specifies_vertex(ctx)) ATTR3UI(0, x, y, z); else if (index < MAX_VERTEX_GENERIC_ATTRIBS) ATTR3UI(VBO_ATTRIB_GENERIC0 + index, x, y, z); @@ -725,7 +731,7 @@ static void GLAPIENTRY TAG(VertexAttribI4ui)(GLuint index, GLuint x, GLuint y, GLuint z, GLuint w) { GET_CURRENT_CONTEXT(ctx); - if (index == 0) + if (index == 0 && attr_zero_specifies_vertex(ctx)) ATTR4UI(0, x, y, z, w); else if (index < MAX_VERTEX_GENERIC_ATTRIBS) ATTR4UI(VBO_ATTRIB_GENERIC0 + index, x, y, z, w); @@ -737,7 +743,7 @@ static void GLAPIENTRY TAG(VertexAttribI2uiv)(GLuint index, const GLuint *v) { GET_CURRENT_CONTEXT(ctx); - if (index == 0) + if (index == 0 && attr_zero_specifies_vertex(ctx)) ATTR2UIV(0, v); else if (index < MAX_VERTEX_GENERIC_ATTRIBS) ATTR2UIV(VBO_ATTRIB_GENERIC0 + index, v); @@ -749,7 +755,7 @@ static void GLAPIENTRY TAG(VertexAttribI3uiv)(GLuint index, const GLuint *v) { GET_CURRENT_CONTEXT(ctx); - if (index == 0) + if (index == 0 && attr_zero_specifies_vertex(ctx)) ATTR3UIV(0, v); else if (index < MAX_VERTEX_GENERIC_ATTRIBS) ATTR3UIV(VBO_ATTRIB_GENERIC0 + index, v); @@ -761,7 +767,7 @@ static void GLAPIENTRY TAG(VertexAttribI4uiv)(GLuint index, const GLuint *v) { GET_CURRENT_CONTEXT(ctx); - if (index == 0) + if (index == 0 && attr_zero_specifies_vertex(ctx)) ATTR4UIV(0, v); else if (index < MAX_VERTEX_GENERIC_ATTRIBS) ATTR4UIV(VBO_ATTRIB_GENERIC0 + index, v); -- 1.8.3.1 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev