projects
/
platform
/
upstream
/
mesa.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
41482a6
)
mesa: added a simple bounds checker to glMap/UnmapBuffer() (disabled)
author
Brian Paul
<brianp@vmware.com>
Tue, 9 Jun 2009 17:53:19 +0000
(11:53 -0600)
committer
Brian Paul
<brianp@vmware.com>
Tue, 9 Jun 2009 20:05:17 +0000
(14:05 -0600)
src/mesa/main/bufferobj.c
patch
|
blob
|
history
diff --git
a/src/mesa/main/bufferobj.c
b/src/mesa/main/bufferobj.c
index
3e011ef
..
a49da3d
100644
(file)
--- a/
src/mesa/main/bufferobj.c
+++ b/
src/mesa/main/bufferobj.c
@@
-39,6
+39,11
@@
#include "bufferobj.h"
#include "bufferobj.h"
+/* Debug flags */
+/*#define VBO_DEBUG*/
+/*#define BOUNDS_CHECK*/
+
+
#ifdef FEATURE_OES_mapbuffer
#define DEFAULT_ACCESS GL_WRITE_ONLY;
#else
#ifdef FEATURE_OES_mapbuffer
#define DEFAULT_ACCESS GL_WRITE_ONLY;
#else
@@
-1019,6
+1024,9
@@
_mesa_BufferDataARB(GLenum target, GLsizeiptrARB size,
bufObj->Name, size, data, usage);
#endif
bufObj->Name, size, data, usage);
#endif
+#ifdef BOUNDS_CHECK
+ size += 100;
+#endif
/* Give the buffer object to the driver! <data> may be null! */
ctx->Driver.BufferData( ctx, target, size, data, usage, bufObj );
}
/* Give the buffer object to the driver! <data> may be null! */
ctx->Driver.BufferData( ctx, target, size, data, usage, bufObj );
}
@@
-1119,6
+1127,17
@@
_mesa_MapBufferARB(GLenum target, GLenum access)
}
#endif
}
#endif
+#ifdef BOUNDS_CHECK
+ {
+ GLubyte *buf = (GLubyte *) bufObj->Pointer;
+ GLuint i;
+ /* buffer is 100 bytes larger than requested, fill with magic value */
+ for (i = 0; i < 100; i++) {
+ buf[bufObj->Size - i - 1] = 123;
+ }
+ }
+#endif
+
return bufObj->Pointer;
}
return bufObj->Pointer;
}
@@
-1145,6
+1164,22
@@
_mesa_UnmapBufferARB(GLenum target)
return GL_FALSE;
}
return GL_FALSE;
}
+#ifdef BOUNDS_CHECK
+ if (bufObj->Access != GL_READ_ONLY_ARB) {
+ GLubyte *buf = (GLubyte *) bufObj->Pointer;
+ GLuint i;
+ /* check that last 100 bytes are still = magic value */
+ for (i = 0; i < 100; i++) {
+ GLuint pos = bufObj->Size - i - 1;
+ if (buf[pos] != 123) {
+ _mesa_warning(ctx, "Out of bounds buffer object write detected"
+ " at position %d (value = %u)\n",
+ pos, buf[pos]);
+ }
+ }
+ }
+#endif
+
#ifdef VBO_DEBUG
if (bufObj->Access == GL_WRITE_ONLY_ARB) {
GLuint i, unchanged = 0;
#ifdef VBO_DEBUG
if (bufObj->Access == GL_WRITE_ONLY_ARB) {
GLuint i, unchanged = 0;