|
|
|
@@ -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; |