mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-27 23:30:10 +01:00
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 <nicolai.haehnle@amd.com>
This commit is contained in:
parent
c495c2398c
commit
d86dd5963e
1 changed files with 73 additions and 63 deletions
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue