diff options
author | Brian Paul <brian.paul@tungstengraphics.com> | 2006-10-26 20:54:28 +0000 |
---|---|---|
committer | Brian Paul <brian.paul@tungstengraphics.com> | 2006-10-26 20:54:28 +0000 |
commit | db5529573f40c5ad68d589ab6a5e4e47d6743b4c (patch) | |
tree | 5464418d89f4be4d05286f1ab0e20bbc58138661 | |
parent | b55a0ab7ab02be7d6de139d8180d5f073cd871e3 (diff) |
If DEBUG, check that all array indices really do fall in [start,end] in
the DrawRangeElements() call. Warn the user if that's not true.
-rw-r--r-- | src/mesa/tnl/t_array_api.c | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/src/mesa/tnl/t_array_api.c b/src/mesa/tnl/t_array_api.c index 36ea54296c..6826cf7e24 100644 --- a/src/mesa/tnl/t_array_api.c +++ b/src/mesa/tnl/t_array_api.c @@ -1,6 +1,6 @@ /* * Mesa 3-D graphics library - * Version: 6.5 + * Version: 6.5.2 * * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. * @@ -115,6 +115,12 @@ _tnl_DrawArrays(GLenum mode, GLint start, GLsizei count) { GET_CURRENT_CONTEXT(ctx); TNLcontext *tnl = TNL_CONTEXT(ctx); + /* It's tempting to get rid of this threshold value because we take + * very different paths if 'count' is less than or greater than 'thresh'. + * I've found/fixed at least one bug which only occured for particular + * array sizes. Also, several conformance tests use very short arrays + * which means the long-array path doesn't get tested. -Brian + */ GLuint thresh = (ctx->Driver.NeedFlush & FLUSH_STORED_VERTICES) ? 30 : 10; if (MESA_VERBOSE & VERBOSE_API) @@ -289,6 +295,18 @@ _tnl_DrawRangeElements(GLenum mode, ui_indices = (GLuint *)_ac_import_elements( ctx, GL_UNSIGNED_INT, count, type, indices ); +#ifdef DEBUG + /* check that array indices really fall inside [start, end] range */ + { + GLuint i; + for (i = 0; i < count; i++) { + if (ui_indices[i] < start || ui_indices[i] > end) { + _mesa_warning(ctx, "Invalid array index in " + "glDrawRangeElements(index=%u)", ui_indices[i]); + } + } + } +#endif assert(!ctx->CompileFlag); |