[Mesa-dev] [PATCH] mesa: do more teximage error checking for generic compressed formats

Anuj Phogat anuj.phogat at gmail.com
Wed Aug 15 13:31:42 PDT 2012


On Tue, May 1, 2012 at 2:07 PM, Brian Paul <brianp at vmware.com> wrote:

> When glTexImage or glCopyTexImage is called with internalFormat being a
> generic compressed format (like GL_COMPRESSED_RGB) we need to do the same
> error checks as for specific compressed formats.  In particular, check if
> the texture target is compatible with the format.  None of the texture
> compression formats we support so far work with GL_TEXTURE_1D, for example.
>
> See also https://bugs.freedesktop.org/show_bug.cgi?id=49124


Brian, generic texture compression formats with GL_TEXTURE_1D seem to work
fine
on i965 drivers. I verified this by allowing generic texture compression
formats for
GL_TEXTURE_1D in piglit copyteximage test case and reverting the changes
due to
this patch on mesa. Is this an issue only on swrast? Returning
GL_INVALID_ENUM
error for generic texture compression formats in glTexImage1D() and
glCopyTexImage1D() doesn't seem to follow the OpenGL specification. Spec
does allow
GL_INVALID_ENUM error for a similar scenario in case
of glCompressedTexImage1D().
Please correct me if I'm missing something.


>
> NOTE: This is a candidate for the 8.0 branch.
> ---
>  src/mesa/main/teximage.c |   32 ++++++++++++++++++++++++++++++--
>  1 files changed, 30 insertions(+), 2 deletions(-)
>
> diff --git a/src/mesa/main/teximage.c b/src/mesa/main/teximage.c
> index 50095d2..694f6fa 100644
> --- a/src/mesa/main/teximage.c
> +++ b/src/mesa/main/teximage.c
> @@ -531,6 +531,32 @@ _mesa_base_tex_format( struct gl_context *ctx, GLint
> internalFormat )
>
>
>  /**
> + * Is the given texture format a generic compressed format?
> + */
> +static GLboolean
> +is_generic_compressed_format(GLenum format)
> +{
> +   switch (format) {
> +   case GL_COMPRESSED_RED:
> +   case GL_COMPRESSED_RG:
> +   case GL_COMPRESSED_RGB:
> +   case GL_COMPRESSED_RGBA:
> +   case GL_COMPRESSED_ALPHA:
> +   case GL_COMPRESSED_LUMINANCE:
> +   case GL_COMPRESSED_LUMINANCE_ALPHA:
> +   case GL_COMPRESSED_INTENSITY:
> +   case GL_COMPRESSED_SRGB:
> +   case GL_COMPRESSED_SRGB_ALPHA:
> +   case GL_COMPRESSED_SLUMINANCE:
> +   case GL_COMPRESSED_SLUMINANCE_ALPHA:
> +      return GL_TRUE;
> +   default:
> +      return GL_FALSE;
> +   }
> +}
> +
> +
> +/**
>   * For cube map faces, return a face index in [0,5].
>   * For other targets return 0;
>   */
> @@ -1705,7 +1731,8 @@ texture_error_check( struct gl_context *ctx,
>     }
>
>     /* additional checks for compressed textures */
> -   if (_mesa_is_compressed_format(ctx, internalFormat)) {
> +   if (_mesa_is_compressed_format(ctx, internalFormat) ||
> +       is_generic_compressed_format(internalFormat)) {
>        if (!target_can_be_compressed(ctx, target, internalFormat)) {
>           if (!isProxy)
>              _mesa_error(ctx, GL_INVALID_ENUM,
> @@ -2036,7 +2063,8 @@ copytexture_error_check( struct gl_context *ctx,
> GLuint dimensions,
>        return GL_TRUE;
>     }
>
> -   if (_mesa_is_compressed_format(ctx, internalFormat)) {
> +   if (_mesa_is_compressed_format(ctx, internalFormat) ||
> +       is_generic_compressed_format(internalFormat)) {
>        if (!target_can_be_compressed(ctx, target, internalFormat)) {
>           _mesa_error(ctx, GL_INVALID_ENUM,
>                       "glCopyTexImage%dD(target)", dimensions);
> --
> 1.7.3.4
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20120815/5855c713/attachment.html>


More information about the mesa-dev mailing list