summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTimothy Arceri <[email protected]>2017-03-31 15:26:34 +1100
committerTimothy Arceri <[email protected]>2017-04-19 16:53:25 +1000
commitd86dd5963efb05ffb250c669ab047ab6825d0923 (patch)
tree5b308803c04f52eb05fd1dbc248976278c6bf95b /src
parentc495c2398ca69e3dde6010398e5dcc64a316c3a9 (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')
-rw-r--r--src/mesa/main/varray.c136
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);