From b38640082cdf0d271c7d3da83d45dfa5f3a7b8d3 Mon Sep 17 00:00:00 2001 From: Anuj Phogat Date: Wed, 25 Jan 2012 19:05:45 -0800 Subject: [PATCH] mesa: fix maximum allowed proxy texture size condition width, height parameter in glTexImage2D() includes: texture image width + 2 * border (if any). So when doing the texture size check in _mesa_test_proxy_teximage() width and height should not exceed maximum supported size for target texture type. i.e. 1 << (ctx->Const.MaxTextureLevels - 1) Texture border is anyway stripped out before it is given to intel or gallium drivers. This patch fixes Intel oglconform test case: max_values Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=44970 Note: This is a candidate for mesa 8.0 branch. Signed-off-by: Anuj Phogat Reviewed-by: Ian Romanick Reviewed-by: Jose Fonseca (cherry picked from commit 15986d21ebaaeedb234b066edba5cf7f6ea87a3c) --- src/mesa/main/teximage.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/mesa/main/teximage.c b/src/mesa/main/teximage.c index 53fd241ca0b..111e4bf1602 100644 --- a/src/mesa/main/teximage.c +++ b/src/mesa/main/teximage.c @@ -1173,7 +1173,7 @@ _mesa_test_proxy_teximage(struct gl_context *ctx, GLenum target, GLint level, switch (target) { case GL_PROXY_TEXTURE_1D: maxSize = 1 << (ctx->Const.MaxTextureLevels - 1); - if (width < 2 * border || width > 2 + maxSize) + if (width < 2 * border || width > maxSize) return GL_FALSE; if (level >= ctx->Const.MaxTextureLevels) return GL_FALSE; @@ -1185,9 +1185,9 @@ _mesa_test_proxy_teximage(struct gl_context *ctx, GLenum target, GLint level, case GL_PROXY_TEXTURE_2D: maxSize = 1 << (ctx->Const.MaxTextureLevels - 1); - if (width < 2 * border || width > 2 + maxSize) + if (width < 2 * border || width > maxSize) return GL_FALSE; - if (height < 2 * border || height > 2 + maxSize) + if (height < 2 * border || height > maxSize) return GL_FALSE; if (level >= ctx->Const.MaxTextureLevels) return GL_FALSE; @@ -1201,11 +1201,11 @@ _mesa_test_proxy_teximage(struct gl_context *ctx, GLenum target, GLint level, case GL_PROXY_TEXTURE_3D: maxSize = 1 << (ctx->Const.Max3DTextureLevels - 1); - if (width < 2 * border || width > 2 + maxSize) + if (width < 2 * border || width > maxSize) return GL_FALSE; - if (height < 2 * border || height > 2 + maxSize) + if (height < 2 * border || height > maxSize) return GL_FALSE; - if (depth < 2 * border || depth > 2 + maxSize) + if (depth < 2 * border || depth > maxSize) return GL_FALSE; if (level >= ctx->Const.Max3DTextureLevels) return GL_FALSE; @@ -1231,9 +1231,9 @@ _mesa_test_proxy_teximage(struct gl_context *ctx, GLenum target, GLint level, case GL_PROXY_TEXTURE_CUBE_MAP_ARB: maxSize = 1 << (ctx->Const.MaxCubeTextureLevels - 1); - if (width < 2 * border || width > 2 + maxSize) + if (width < 2 * border || width > maxSize) return GL_FALSE; - if (height < 2 * border || height > 2 + maxSize) + if (height < 2 * border || height > maxSize) return GL_FALSE; if (level >= ctx->Const.MaxCubeTextureLevels) return GL_FALSE; @@ -1247,7 +1247,7 @@ _mesa_test_proxy_teximage(struct gl_context *ctx, GLenum target, GLint level, case GL_PROXY_TEXTURE_1D_ARRAY_EXT: maxSize = 1 << (ctx->Const.MaxTextureLevels - 1); - if (width < 2 * border || width > 2 + maxSize) + if (width < 2 * border || width > maxSize) return GL_FALSE; if (height < 1 || height > ctx->Const.MaxArrayTextureLayers) return GL_FALSE; @@ -1261,9 +1261,9 @@ _mesa_test_proxy_teximage(struct gl_context *ctx, GLenum target, GLint level, case GL_PROXY_TEXTURE_2D_ARRAY_EXT: maxSize = 1 << (ctx->Const.MaxTextureLevels - 1); - if (width < 2 * border || width > 2 + maxSize) + if (width < 2 * border || width > maxSize) return GL_FALSE; - if (height < 2 * border || height > 2 + maxSize) + if (height < 2 * border || height > maxSize) return GL_FALSE; if (depth < 1 || depth > ctx->Const.MaxArrayTextureLayers) return GL_FALSE;