mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 09:38:07 +02:00
Fix size test bug in _mesa_test_proxy_teximage().
width/height/depth == 0 is a legal texture size (no error generated). Later, the texture will be considered incomplete, however, and texturing will effectively be disabled. See bug 11309.
This commit is contained in:
parent
37ece4df7c
commit
aa328291c5
1 changed files with 17 additions and 13 deletions
|
|
@ -1264,6 +1264,10 @@ _mesa_init_teximage_fields(GLcontext *ctx, GLenum target,
|
|||
* A hardware driver might override this function if, for example, the
|
||||
* max 3D texture size is 512x512x64 (i.e. not a cube).
|
||||
*
|
||||
* Note that width, height, depth == 0 is not an error. However, a
|
||||
* texture with zero width/height/depth will be considered "incomplete"
|
||||
* and texturing will effectively be disabled.
|
||||
*
|
||||
* \param target one of GL_PROXY_TEXTURE_1D, GL_PROXY_TEXTURE_2D,
|
||||
* GL_PROXY_TEXTURE_3D, GL_PROXY_TEXTURE_RECTANGLE_NV,
|
||||
* GL_PROXY_TEXTURE_CUBE_MAP_ARB.
|
||||
|
|
@ -1293,7 +1297,7 @@ _mesa_test_proxy_teximage(GLcontext *ctx, GLenum target, GLint level,
|
|||
maxSize = 1 << (ctx->Const.MaxTextureLevels - 1);
|
||||
if (width < 2 * border || width > 2 + maxSize ||
|
||||
(!ctx->Extensions.ARB_texture_non_power_of_two &&
|
||||
_mesa_bitcount(width - 2 * border) != 1) ||
|
||||
width >0 && _mesa_bitcount(width - 2 * border) != 1) ||
|
||||
level >= ctx->Const.MaxTextureLevels) {
|
||||
/* bad width or level */
|
||||
return GL_FALSE;
|
||||
|
|
@ -1303,10 +1307,10 @@ _mesa_test_proxy_teximage(GLcontext *ctx, GLenum target, GLint level,
|
|||
maxSize = 1 << (ctx->Const.MaxTextureLevels - 1);
|
||||
if (width < 2 * border || width > 2 + maxSize ||
|
||||
(!ctx->Extensions.ARB_texture_non_power_of_two &&
|
||||
_mesa_bitcount(width - 2 * border) != 1) ||
|
||||
width > 0 && _mesa_bitcount(width - 2 * border) != 1) ||
|
||||
height < 2 * border || height > 2 + maxSize ||
|
||||
(!ctx->Extensions.ARB_texture_non_power_of_two &&
|
||||
_mesa_bitcount(height - 2 * border) != 1) ||
|
||||
height > 0 && _mesa_bitcount(height - 2 * border) != 1) ||
|
||||
level >= ctx->Const.MaxTextureLevels) {
|
||||
/* bad width or height or level */
|
||||
return GL_FALSE;
|
||||
|
|
@ -1316,21 +1320,21 @@ _mesa_test_proxy_teximage(GLcontext *ctx, GLenum target, GLint level,
|
|||
maxSize = 1 << (ctx->Const.Max3DTextureLevels - 1);
|
||||
if (width < 2 * border || width > 2 + maxSize ||
|
||||
(!ctx->Extensions.ARB_texture_non_power_of_two &&
|
||||
_mesa_bitcount(width - 2 * border) != 1) ||
|
||||
width > 0 && _mesa_bitcount(width - 2 * border) != 1) ||
|
||||
height < 2 * border || height > 2 + maxSize ||
|
||||
(!ctx->Extensions.ARB_texture_non_power_of_two &&
|
||||
_mesa_bitcount(height - 2 * border) != 1) ||
|
||||
height > 0 && _mesa_bitcount(height - 2 * border) != 1) ||
|
||||
depth < 2 * border || depth > 2 + maxSize ||
|
||||
(!ctx->Extensions.ARB_texture_non_power_of_two &&
|
||||
_mesa_bitcount(depth - 2 * border) != 1) ||
|
||||
depth > 0 && _mesa_bitcount(depth - 2 * border) != 1) ||
|
||||
level >= ctx->Const.Max3DTextureLevels) {
|
||||
/* bad width or height or depth or level */
|
||||
return GL_FALSE;
|
||||
}
|
||||
return GL_TRUE;
|
||||
case GL_PROXY_TEXTURE_RECTANGLE_NV:
|
||||
if (width < 1 || width > ctx->Const.MaxTextureRectSize ||
|
||||
height < 1 || height > ctx->Const.MaxTextureRectSize ||
|
||||
if (width < 0 || width > ctx->Const.MaxTextureRectSize ||
|
||||
height < 0 || height > ctx->Const.MaxTextureRectSize ||
|
||||
level != 0) {
|
||||
/* bad width or height or level */
|
||||
return GL_FALSE;
|
||||
|
|
@ -1340,10 +1344,10 @@ _mesa_test_proxy_teximage(GLcontext *ctx, GLenum target, GLint level,
|
|||
maxSize = 1 << (ctx->Const.MaxCubeTextureLevels - 1);
|
||||
if (width < 2 * border || width > 2 + maxSize ||
|
||||
(!ctx->Extensions.ARB_texture_non_power_of_two &&
|
||||
_mesa_bitcount(width - 2 * border) != 1) ||
|
||||
width > 0 && _mesa_bitcount(width - 2 * border) != 1) ||
|
||||
height < 2 * border || height > 2 + maxSize ||
|
||||
(!ctx->Extensions.ARB_texture_non_power_of_two &&
|
||||
_mesa_bitcount(height - 2 * border) != 1) ||
|
||||
height > 0 && _mesa_bitcount(height - 2 * border) != 1) ||
|
||||
level >= ctx->Const.MaxCubeTextureLevels) {
|
||||
/* bad width or height */
|
||||
return GL_FALSE;
|
||||
|
|
@ -1353,7 +1357,7 @@ _mesa_test_proxy_teximage(GLcontext *ctx, GLenum target, GLint level,
|
|||
maxSize = 1 << (ctx->Const.MaxTextureLevels - 1);
|
||||
if (width < 2 * border || width > 2 + maxSize ||
|
||||
(!ctx->Extensions.ARB_texture_non_power_of_two &&
|
||||
_mesa_bitcount(width - 2 * border) != 1) ||
|
||||
width > 0 && _mesa_bitcount(width - 2 * border) != 1) ||
|
||||
level >= ctx->Const.MaxTextureLevels) {
|
||||
/* bad width or level */
|
||||
return GL_FALSE;
|
||||
|
|
@ -1367,10 +1371,10 @@ _mesa_test_proxy_teximage(GLcontext *ctx, GLenum target, GLint level,
|
|||
maxSize = 1 << (ctx->Const.MaxTextureLevels - 1);
|
||||
if (width < 2 * border || width > 2 + maxSize ||
|
||||
(!ctx->Extensions.ARB_texture_non_power_of_two &&
|
||||
_mesa_bitcount(width - 2 * border) != 1) ||
|
||||
width > 0 && _mesa_bitcount(width - 2 * border) != 1) ||
|
||||
height < 2 * border || height > 2 + maxSize ||
|
||||
(!ctx->Extensions.ARB_texture_non_power_of_two &&
|
||||
_mesa_bitcount(height - 2 * border) != 1) ||
|
||||
height > 0 && _mesa_bitcount(height - 2 * border) != 1) ||
|
||||
level >= ctx->Const.MaxTextureLevels) {
|
||||
/* bad width or height or level */
|
||||
return GL_FALSE;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue