Despite that negative values aren't sensible here, making this unsigned is dangerous. Consider get_pointer_generic, which computes a value of the form:
void *base + (int x * int stride + int y) * unsigned bpp The usual arithmetic conversions will coerce the (x*stride + y) subexpression to unsigned. Since stride can be negative, this is disastrous. Fixes at least the following piglit tests on Ironlake: fbo/fbo-blit-d24s8 spec/ARB_depth_texture/fbo-clear-formats spec/EXT_packed_depth_stencil/fbo-clear-formats Signed-off-by: Adam Jackson <a...@redhat.com> --- src/mesa/main/formats.c | 2 +- src/mesa/main/formats.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/mesa/main/formats.c b/src/mesa/main/formats.c index 60e8ae3..a46633b 100644 --- a/src/mesa/main/formats.c +++ b/src/mesa/main/formats.c @@ -1119,7 +1119,7 @@ _mesa_get_format_name(gl_format format) * Normally, a block is 1x1 (a single pixel). But for compressed formats * a block may be 4x4 or 8x4, etc. */ -GLuint +GLint _mesa_get_format_bytes(gl_format format) { const struct gl_format_info *info = _mesa_get_format_info(format); diff --git a/src/mesa/main/formats.h b/src/mesa/main/formats.h index df9ed70..0640bbc 100644 --- a/src/mesa/main/formats.h +++ b/src/mesa/main/formats.h @@ -216,7 +216,7 @@ typedef enum extern const char * _mesa_get_format_name(gl_format format); -extern GLuint +extern GLint _mesa_get_format_bytes(gl_format format); extern GLint -- 1.7.5.1 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev