diff options
author | Timothy Arceri <[email protected]> | 2017-03-31 15:26:34 +1100 |
---|---|---|
committer | Timothy Arceri <[email protected]> | 2017-04-19 16:53:25 +1000 |
commit | d86dd5963efb05ffb250c669ab047ab6825d0923 (patch) | |
tree | 5b308803c04f52eb05fd1dbc248976278c6bf95b /src/mesa/main/varray.c | |
parent | c495c2398ca69e3dde6010398e5dcc64a316c3a9 (diff) |
mesa/varray: add KHR_no_error support to some callers of validate_array_format()
The only caller we don't update is update_arrays(), we leave that to the
following commit.
Reviewed-by: Nicolai Hähnle <[email protected]>
Diffstat (limited to 'src/mesa/main/varray.c')
-rw-r--r-- | src/mesa/main/varray.c | 136 |
1 files changed, 73 insertions, 63 deletions
diff --git a/src/mesa/main/varray.c b/src/mesa/main/varray.c index 9d3fe136605..906b953ac20 100644 --- a/src/mesa/main/varray.c +++ b/src/mesa/main/varray.c @@ -2016,48 +2016,51 @@ vertex_attrib_format(GLuint attribIndex, GLint size, GLenum type, GLenum format = get_array_format(ctx, sizeMax, &size); - /* The ARB_vertex_attrib_binding spec says: - * - * "An INVALID_OPERATION error is generated under any of the following - * conditions: - * - if no vertex array object is currently bound (see section 2.10); - * - ..." - * - * This error condition only applies to VertexAttribFormat and - * VertexAttribIFormat in the extension spec, but we assume that this - * is an oversight. In the OpenGL 4.3 (Core Profile) spec, it applies - * to all three functions. - */ - if ((ctx->API == API_OPENGL_CORE || _mesa_is_gles31(ctx)) && - ctx->Array.VAO == ctx->Array.DefaultVAO) { - _mesa_error(ctx, GL_INVALID_OPERATION, - "%s(No array object bound)", func); - return; - } + if (!_mesa_is_no_error_enabled(ctx)) { + /* The ARB_vertex_attrib_binding spec says: + * + * "An INVALID_OPERATION error is generated under any of the + * following conditions: + * - if no vertex array object is currently bound (see section + * 2.10); + * - ..." + * + * This error condition only applies to VertexAttribFormat and + * VertexAttribIFormat in the extension spec, but we assume that this + * is an oversight. In the OpenGL 4.3 (Core Profile) spec, it applies + * to all three functions. + */ + if ((ctx->API == API_OPENGL_CORE || _mesa_is_gles31(ctx)) && + ctx->Array.VAO == ctx->Array.DefaultVAO) { + _mesa_error(ctx, GL_INVALID_OPERATION, + "%s(No array object bound)", func); + return; + } - /* The ARB_vertex_attrib_binding spec says: - * - * "The error INVALID_VALUE is generated if index is greater than or equal - * to the value of MAX_VERTEX_ATTRIBS." - */ - if (attribIndex >= ctx->Const.Program[MESA_SHADER_VERTEX].MaxAttribs) { - _mesa_error(ctx, GL_INVALID_VALUE, - "%s(attribindex=%u > " - "GL_MAX_VERTEX_ATTRIBS)", - func, attribIndex); - return; + /* The ARB_vertex_attrib_binding spec says: + * + * "The error INVALID_VALUE is generated if index is greater than or + * equal to the value of MAX_VERTEX_ATTRIBS." + */ + if (attribIndex >= ctx->Const.Program[MESA_SHADER_VERTEX].MaxAttribs) { + _mesa_error(ctx, GL_INVALID_VALUE, + "%s(attribindex=%u > " + "GL_MAX_VERTEX_ATTRIBS)", + func, attribIndex); + return; + } + + if (!validate_array_format(ctx, func, ctx->Array.VAO, + VERT_ATTRIB_GENERIC(attribIndex), + legalTypes, 1, sizeMax, size, type, + normalized, integer, doubles, relativeOffset, + format)) { + return; + } } FLUSH_VERTICES(ctx, 0); - if (!validate_array_format(ctx, func, ctx->Array.VAO, - VERT_ATTRIB_GENERIC(attribIndex), - legalTypes, 1, sizeMax, size, type, - normalized, integer, doubles, relativeOffset, - format)) { - return; - } - _mesa_update_array_format(ctx, ctx->Array.VAO, VERT_ATTRIB_GENERIC(attribIndex), size, type, format, normalized, integer, doubles, @@ -2110,37 +2113,44 @@ vertex_array_attrib_format(GLuint vaobj, GLuint attribIndex, GLint size, GLenum format = get_array_format(ctx, sizeMax, &size); - /* The ARB_direct_state_access spec says: - * - * "An INVALID_OPERATION error is generated by VertexArrayAttrib*Format - * if <vaobj> is not [compatibility profile: zero or] the name of an - * existing vertex array object." - */ - vao = _mesa_lookup_vao_err(ctx, vaobj, func); - if (!vao) - return; + if (_mesa_is_no_error_enabled(ctx)) { + vao = _mesa_lookup_vao(ctx, vaobj); + if (!vao) + return; + } else { + /* The ARB_direct_state_access spec says: + * + * "An INVALID_OPERATION error is generated by + * VertexArrayAttrib*Format if <vaobj> is not [compatibility profile: + * zero or] the name of an existing vertex array object." + */ + vao = _mesa_lookup_vao_err(ctx, vaobj, func); + if (!vao) + return; - /* The ARB_vertex_attrib_binding spec says: - * - * "The error INVALID_VALUE is generated if index is greater than or equal - * to the value of MAX_VERTEX_ATTRIBS." - */ - if (attribIndex >= ctx->Const.Program[MESA_SHADER_VERTEX].MaxAttribs) { - _mesa_error(ctx, GL_INVALID_VALUE, - "%s(attribindex=%u > GL_MAX_VERTEX_ATTRIBS)", - func, attribIndex); - return; + /* The ARB_vertex_attrib_binding spec says: + * + * "The error INVALID_VALUE is generated if index is greater than or + * equal to the value of MAX_VERTEX_ATTRIBS." + */ + if (attribIndex >= ctx->Const.Program[MESA_SHADER_VERTEX].MaxAttribs) { + _mesa_error(ctx, GL_INVALID_VALUE, + "%s(attribindex=%u > GL_MAX_VERTEX_ATTRIBS)", + func, attribIndex); + return; + } + + if (!validate_array_format(ctx, func, vao, + VERT_ATTRIB_GENERIC(attribIndex), + legalTypes, 1, sizeMax, size, type, + normalized, integer, doubles, relativeOffset, + format)) { + return; + } } FLUSH_VERTICES(ctx, 0); - if (!validate_array_format(ctx, func, vao, - VERT_ATTRIB_GENERIC(attribIndex), - legalTypes, 1, sizeMax, size, type, normalized, - integer, doubles, relativeOffset, format)) { - return; - } - _mesa_update_array_format(ctx, vao, VERT_ATTRIB_GENERIC(attribIndex), size, type, format, normalized, integer, doubles, relativeOffset); |