mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 07:28:11 +02:00
mesa: clean-up, simplify compressed texture size checking
This commit is contained in:
parent
d6ee86c77a
commit
54bb414e00
3 changed files with 41 additions and 56 deletions
|
|
@ -114,67 +114,42 @@ _mesa_get_compressed_formats(GLcontext *ctx, GLint *formats, GLboolean all)
|
|||
|
||||
|
||||
/**
|
||||
* As above, but format is specified by a GLenum (GL_COMPRESSED_*) token.
|
||||
*
|
||||
* Note: This function CAN NOT return a padded hardware texture size.
|
||||
* That's why we don't call the ctx->Driver.CompressedTextureSize() function.
|
||||
*
|
||||
* We use this function to validate the <imageSize> parameter
|
||||
* of glCompressedTex[Sub]Image1/2/3D(), which must be an exact match.
|
||||
* Convert a compressed MESA_FORMAT_x to a GLenum.
|
||||
*/
|
||||
GLuint
|
||||
_mesa_compressed_texture_size_glenum(GLcontext *ctx,
|
||||
GLsizei width, GLsizei height,
|
||||
GLsizei depth, GLenum glformat)
|
||||
gl_format
|
||||
_mesa_glenum_to_compressed_format(GLenum format)
|
||||
{
|
||||
gl_format mesaFormat;
|
||||
|
||||
switch (glformat) {
|
||||
#if FEATURE_texture_fxt1
|
||||
switch (format) {
|
||||
case GL_COMPRESSED_RGB_FXT1_3DFX:
|
||||
mesaFormat = MESA_FORMAT_RGB_FXT1;
|
||||
break;
|
||||
return MESA_FORMAT_RGB_FXT1;
|
||||
case GL_COMPRESSED_RGBA_FXT1_3DFX:
|
||||
mesaFormat = MESA_FORMAT_RGBA_FXT1;
|
||||
break;
|
||||
#endif
|
||||
#if FEATURE_texture_s3tc
|
||||
return MESA_FORMAT_RGBA_FXT1;
|
||||
|
||||
case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:
|
||||
case GL_RGB_S3TC:
|
||||
mesaFormat = MESA_FORMAT_RGB_DXT1;
|
||||
break;
|
||||
return MESA_FORMAT_RGB_DXT1;
|
||||
case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:
|
||||
case GL_RGB4_S3TC:
|
||||
mesaFormat = MESA_FORMAT_RGBA_DXT1;
|
||||
break;
|
||||
return MESA_FORMAT_RGBA_DXT1;
|
||||
case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT:
|
||||
case GL_RGBA_S3TC:
|
||||
mesaFormat = MESA_FORMAT_RGBA_DXT3;
|
||||
break;
|
||||
return MESA_FORMAT_RGBA_DXT3;
|
||||
case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT:
|
||||
case GL_RGBA4_S3TC:
|
||||
mesaFormat = MESA_FORMAT_RGBA_DXT5;
|
||||
break;
|
||||
#if FEATURE_EXT_texture_sRGB
|
||||
case GL_COMPRESSED_SRGB_S3TC_DXT1_EXT:
|
||||
mesaFormat = MESA_FORMAT_SRGB_DXT1;
|
||||
break;
|
||||
case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT:
|
||||
mesaFormat = MESA_FORMAT_SRGBA_DXT1;
|
||||
break;
|
||||
case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT:
|
||||
mesaFormat = MESA_FORMAT_SRGBA_DXT3;
|
||||
break;
|
||||
case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT:
|
||||
mesaFormat = MESA_FORMAT_SRGBA_DXT5;
|
||||
break;
|
||||
#endif
|
||||
#endif
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
return MESA_FORMAT_RGBA_DXT5;
|
||||
|
||||
return _mesa_format_image_size(mesaFormat, width, height, depth);
|
||||
case GL_COMPRESSED_SRGB_S3TC_DXT1_EXT:
|
||||
return MESA_FORMAT_SRGB_DXT1;
|
||||
case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT:
|
||||
return MESA_FORMAT_SRGBA_DXT1;
|
||||
case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT:
|
||||
return MESA_FORMAT_SRGBA_DXT3;
|
||||
case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT:
|
||||
return MESA_FORMAT_SRGBA_DXT5;
|
||||
|
||||
default:
|
||||
return MESA_FORMAT_NONE;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -33,10 +33,8 @@
|
|||
extern GLuint
|
||||
_mesa_get_compressed_formats(GLcontext *ctx, GLint *formats, GLboolean all);
|
||||
|
||||
extern GLuint
|
||||
_mesa_compressed_texture_size_glenum(GLcontext *ctx,
|
||||
GLsizei width, GLsizei height,
|
||||
GLsizei depth, GLenum glformat);
|
||||
extern gl_format
|
||||
_mesa_glenum_to_compressed_format(GLenum format);
|
||||
|
||||
extern GLint
|
||||
_mesa_compressed_row_stride(gl_format mesaFormat, GLsizei width);
|
||||
|
|
|
|||
|
|
@ -3034,6 +3034,20 @@ _mesa_CopyTexSubImage3D( GLenum target, GLint level,
|
|||
/**********************************************************************/
|
||||
|
||||
|
||||
/**
|
||||
* Return expected size of a compressed texture.
|
||||
*/
|
||||
static GLuint
|
||||
compressed_tex_size(GLsizei width, GLsizei height, GLsizei depth,
|
||||
GLenum glformat)
|
||||
{
|
||||
gl_format mesaFormat = _mesa_glenum_to_compressed_format(glformat);
|
||||
return _mesa_format_image_size(mesaFormat, width, height, depth);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Error checking for glCompressedTexImage[123]D().
|
||||
* \return error code or GL_NO_ERROR.
|
||||
|
|
@ -3116,8 +3130,7 @@ compressed_texture_error_check(GLcontext *ctx, GLint dimensions,
|
|||
if (level < 0 || level >= maxLevels)
|
||||
return GL_INVALID_VALUE;
|
||||
|
||||
expectedSize = _mesa_compressed_texture_size_glenum(ctx, width, height,
|
||||
depth, internalFormat);
|
||||
expectedSize = compressed_tex_size(width, height, depth, internalFormat);
|
||||
if (expectedSize != imageSize)
|
||||
return GL_INVALID_VALUE;
|
||||
|
||||
|
|
@ -3211,8 +3224,7 @@ compressed_subtexture_error_check(GLcontext *ctx, GLint dimensions,
|
|||
if ((height & 3) != 0 && height != 2 && height != 1)
|
||||
return GL_INVALID_VALUE;
|
||||
|
||||
expectedSize = _mesa_compressed_texture_size_glenum(ctx, width, height,
|
||||
depth, format);
|
||||
expectedSize = compressed_tex_size(width, height, depth, format);
|
||||
if (expectedSize != imageSize)
|
||||
return GL_INVALID_VALUE;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue