mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-09 14:50:11 +01:00
vbo: fix parameter validation for saving dlist glDraw* functions
The _save_OBE_DrawArrays/Elements/RangeElements() functions are called when building a display list and we know we're outside glBegin/End. We shouldn't call the normal _mesa_validate_DrawArrays/Elements() functions here because those functions only work properly in immediate mode or during dlist execution. At dlist compile time, we can't call _mesa_update_state(), etc. and examine the current state since it won't apply when the list is executed later. Fixes several failures in piglit's gl-1.0-beginend-coverage test. Reviewed-by: Jose Fonseca <jfonseca@vmware.com>
This commit is contained in:
parent
94c7caf406
commit
d6f3ef92d7
1 changed files with 39 additions and 4 deletions
|
|
@ -1232,8 +1232,14 @@ _save_OBE_DrawArrays(GLenum mode, GLint start, GLsizei count)
|
|||
struct vbo_save_context *save = &vbo_context(ctx)->save;
|
||||
GLint i;
|
||||
|
||||
if (!_mesa_validate_DrawArrays(ctx, mode, start, count))
|
||||
if (!_mesa_is_valid_prim_mode(ctx, mode)) {
|
||||
_mesa_compile_error(ctx, GL_INVALID_ENUM, "glDrawArrays(mode)");
|
||||
return;
|
||||
}
|
||||
if (count < 0) {
|
||||
_mesa_compile_error(ctx, GL_INVALID_VALUE, "glDrawArrays(count<0)");
|
||||
return;
|
||||
}
|
||||
|
||||
if (save->out_of_memory)
|
||||
return;
|
||||
|
|
@ -1262,8 +1268,20 @@ _save_OBE_DrawElements(GLenum mode, GLsizei count, GLenum type,
|
|||
struct vbo_save_context *save = &vbo_context(ctx)->save;
|
||||
GLint i;
|
||||
|
||||
if (!_mesa_validate_DrawElements(ctx, mode, count, type, indices, 0))
|
||||
if (!_mesa_is_valid_prim_mode(ctx, mode)) {
|
||||
_mesa_compile_error(ctx, GL_INVALID_ENUM, "glDrawElements(mode)");
|
||||
return;
|
||||
}
|
||||
if (count < 0) {
|
||||
_mesa_compile_error(ctx, GL_INVALID_VALUE, "glDrawElements(count<0)");
|
||||
return;
|
||||
}
|
||||
if (type != GL_UNSIGNED_BYTE &&
|
||||
type != GL_UNSIGNED_SHORT &&
|
||||
type != GL_UNSIGNED_INT) {
|
||||
_mesa_compile_error(ctx, GL_INVALID_VALUE, "glDrawElements(count<0)");
|
||||
return;
|
||||
}
|
||||
|
||||
if (save->out_of_memory)
|
||||
return;
|
||||
|
|
@ -1309,9 +1327,26 @@ _save_OBE_DrawRangeElements(GLenum mode, GLuint start, GLuint end,
|
|||
GET_CURRENT_CONTEXT(ctx);
|
||||
struct vbo_save_context *save = &vbo_context(ctx)->save;
|
||||
|
||||
if (!_mesa_validate_DrawRangeElements(ctx, mode,
|
||||
start, end, count, type, indices, 0))
|
||||
if (!_mesa_is_valid_prim_mode(ctx, mode)) {
|
||||
_mesa_compile_error(ctx, GL_INVALID_ENUM, "glDrawRangeElements(mode)");
|
||||
return;
|
||||
}
|
||||
if (count < 0) {
|
||||
_mesa_compile_error(ctx, GL_INVALID_VALUE,
|
||||
"glDrawRangeElements(count<0)");
|
||||
return;
|
||||
}
|
||||
if (type != GL_UNSIGNED_BYTE &&
|
||||
type != GL_UNSIGNED_SHORT &&
|
||||
type != GL_UNSIGNED_INT) {
|
||||
_mesa_compile_error(ctx, GL_INVALID_ENUM, "glDrawRangeElements(type)");
|
||||
return;
|
||||
}
|
||||
if (end < start) {
|
||||
_mesa_compile_error(ctx, GL_INVALID_VALUE,
|
||||
"glDrawRangeElements(end < start)");
|
||||
return;
|
||||
}
|
||||
|
||||
if (save->out_of_memory)
|
||||
return;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue