[Mesa-dev] [PATCH] mesa: move some helper functions from fboobject.c to glformats.c

Ian Romanick idr at freedesktop.org
Wed Nov 28 16:23:23 PST 2012


On 11/28/2012 10:07 AM, Marek Olšák wrote:

It looks reasonable enough, but... why?  Is there a follow-up patch that 
uses it them in some other file?

> ---
>   src/mesa/main/fbobject.c  |  127 +++------------------------------------------
>   src/mesa/main/glformats.c |  113 ++++++++++++++++++++++++++++++++++++++++
>   src/mesa/main/glformats.h |    6 +++
>   3 files changed, 127 insertions(+), 119 deletions(-)
>
> diff --git a/src/mesa/main/fbobject.c b/src/mesa/main/fbobject.c
> index 891ec5d..22b518e 100644
> --- a/src/mesa/main/fbobject.c
> +++ b/src/mesa/main/fbobject.c
> @@ -2716,127 +2716,16 @@ compatible_color_datatypes(gl_format srcFormat, gl_format dstFormat)
>   }
>
>
> -/**
> - * Return the equivalent non-generic internal format.
> - * This is useful for comparing whether two internal formats are semantically
> - * equivalent.
> - */
> -static GLenum
> -get_nongeneric_internalformat(GLenum format)
> -{
> -   switch (format) {
> -      /* GL 1.1 formats. */
> -      case 4:
> -      case GL_RGBA:
> -         return GL_RGBA8;
> -
> -      case 3:
> -      case GL_RGB:
> -         return GL_RGB8;
> -
> -      case 2:
> -      case GL_LUMINANCE_ALPHA:
> -         return GL_LUMINANCE8_ALPHA8;
> -
> -      case 1:
> -      case GL_LUMINANCE:
> -         return GL_LUMINANCE8;
> -
> -      case GL_ALPHA:
> -         return GL_ALPHA8;
> -
> -      case GL_INTENSITY:
> -         return GL_INTENSITY8;
> -
> -      /* GL_ARB_texture_rg */
> -      case GL_RED:
> -         return GL_R8;
> -
> -      case GL_RG:
> -         return GL_RG8;
> -
> -      /* GL_EXT_texture_sRGB */
> -      case GL_SRGB:
> -         return GL_SRGB8;
> -
> -      case GL_SRGB_ALPHA:
> -         return GL_SRGB8_ALPHA8;
> -
> -      case GL_SLUMINANCE:
> -         return GL_SLUMINANCE8;
> -
> -      case GL_SLUMINANCE_ALPHA:
> -         return GL_SLUMINANCE8_ALPHA8;
> -
> -      /* GL_EXT_texture_snorm */
> -      case GL_RGBA_SNORM:
> -         return GL_RGBA8_SNORM;
> -
> -      case GL_RGB_SNORM:
> -         return GL_RGB8_SNORM;
> -
> -      case GL_RG_SNORM:
> -         return GL_RG8_SNORM;
> -
> -      case GL_RED_SNORM:
> -         return GL_R8_SNORM;
> -
> -      case GL_LUMINANCE_ALPHA_SNORM:
> -         return GL_LUMINANCE8_ALPHA8_SNORM;
> -
> -      case GL_LUMINANCE_SNORM:
> -         return GL_LUMINANCE8_SNORM;
> -
> -      case GL_ALPHA_SNORM:
> -         return GL_ALPHA8_SNORM;
> -
> -      case GL_INTENSITY_SNORM:
> -         return GL_INTENSITY8_SNORM;
> -
> -      default:
> -         return format;
> -   }
> -}
> -
> -
> -static GLenum
> -get_linear_internalformat(GLenum format)
> -{
> -   switch (format) {
> -   case GL_SRGB:
> -      return GL_RGB;
> -
> -   case GL_SRGB_ALPHA:
> -      return GL_RGBA;
> -
> -   case GL_SRGB8:
> -      return GL_RGB8;
> -
> -   case GL_SRGB8_ALPHA8:
> -      return GL_RGBA8;
> -
> -   case GL_SLUMINANCE:
> -      return GL_LUMINANCE8;
> -
> -   case GL_SLUMINANCE_ALPHA:
> -      return GL_LUMINANCE8_ALPHA8;
> -
> -   default:
> -      return format;
> -   }
> -}
> -
> -
>   static GLboolean
> -compatible_resolve_formats(const struct gl_renderbuffer *colorReadRb,
> -                           const struct gl_renderbuffer *colorDrawRb)
> +compatible_resolve_formats(const struct gl_renderbuffer *readRb,
> +                           const struct gl_renderbuffer *drawRb)
>   {
>      GLenum readFormat, drawFormat;
>
>      /* The simple case where we know the backing Mesa formats are the same.
>       */
> -   if (_mesa_get_srgb_format_linear(colorReadRb->Format) ==
> -       _mesa_get_srgb_format_linear(colorDrawRb->Format)) {
> +   if (_mesa_get_srgb_format_linear(readRb->Format) ==
> +       _mesa_get_srgb_format_linear(drawRb->Format)) {
>         return GL_TRUE;
>      }
>
> @@ -2850,10 +2739,10 @@ compatible_resolve_formats(const struct gl_renderbuffer *colorReadRb,
>       *
>       * Blits between linear and sRGB formats are also allowed.
>       */
> -   readFormat = get_nongeneric_internalformat(colorReadRb->InternalFormat);
> -   drawFormat = get_nongeneric_internalformat(colorDrawRb->InternalFormat);
> -   readFormat = get_linear_internalformat(readFormat);
> -   drawFormat = get_linear_internalformat(drawFormat);
> +   readFormat = _mesa_get_nongeneric_internalformat(readRb->InternalFormat);
> +   drawFormat = _mesa_get_nongeneric_internalformat(drawRb->InternalFormat);
> +   readFormat = _mesa_get_linear_internalformat(readFormat);
> +   drawFormat = _mesa_get_linear_internalformat(drawFormat);
>
>      if (readFormat == drawFormat) {
>         return GL_TRUE;
> diff --git a/src/mesa/main/glformats.c b/src/mesa/main/glformats.c
> index ba79f19..9089a72 100644
> --- a/src/mesa/main/glformats.c
> +++ b/src/mesa/main/glformats.c
> @@ -1008,6 +1008,119 @@ _mesa_generic_compressed_format_to_uncompressed_format(GLenum format)
>
>
>   /**
> + * Return the equivalent non-generic internal format.
> + * This is useful for comparing whether two internal formats are equivalent.
> + */
> +GLenum
> +_mesa_get_nongeneric_internalformat(GLenum format)
> +{
> +   switch (format) {
> +      /* GL 1.1 formats. */
> +      case 4:
> +      case GL_RGBA:
> +         return GL_RGBA8;
> +
> +      case 3:
> +      case GL_RGB:
> +         return GL_RGB8;
> +
> +      case 2:
> +      case GL_LUMINANCE_ALPHA:
> +         return GL_LUMINANCE8_ALPHA8;
> +
> +      case 1:
> +      case GL_LUMINANCE:
> +         return GL_LUMINANCE8;
> +
> +      case GL_ALPHA:
> +         return GL_ALPHA8;
> +
> +      case GL_INTENSITY:
> +         return GL_INTENSITY8;
> +
> +      /* GL_ARB_texture_rg */
> +      case GL_RED:
> +         return GL_R8;
> +
> +      case GL_RG:
> +         return GL_RG8;
> +
> +      /* GL_EXT_texture_sRGB */
> +      case GL_SRGB:
> +         return GL_SRGB8;
> +
> +      case GL_SRGB_ALPHA:
> +         return GL_SRGB8_ALPHA8;
> +
> +      case GL_SLUMINANCE:
> +         return GL_SLUMINANCE8;
> +
> +      case GL_SLUMINANCE_ALPHA:
> +         return GL_SLUMINANCE8_ALPHA8;
> +
> +      /* GL_EXT_texture_snorm */
> +      case GL_RGBA_SNORM:
> +         return GL_RGBA8_SNORM;
> +
> +      case GL_RGB_SNORM:
> +         return GL_RGB8_SNORM;
> +
> +      case GL_RG_SNORM:
> +         return GL_RG8_SNORM;
> +
> +      case GL_RED_SNORM:
> +         return GL_R8_SNORM;
> +
> +      case GL_LUMINANCE_ALPHA_SNORM:
> +         return GL_LUMINANCE8_ALPHA8_SNORM;
> +
> +      case GL_LUMINANCE_SNORM:
> +         return GL_LUMINANCE8_SNORM;
> +
> +      case GL_ALPHA_SNORM:
> +         return GL_ALPHA8_SNORM;
> +
> +      case GL_INTENSITY_SNORM:
> +         return GL_INTENSITY8_SNORM;
> +
> +      default:
> +         return format;
> +   }
> +}
> +
> +
> +/**
> + * Convert an sRGB internal format to linear.
> + */
> +GLenum
> +_mesa_get_linear_internalformat(GLenum format)
> +{
> +   switch (format) {
> +   case GL_SRGB:
> +      return GL_RGB;
> +
> +   case GL_SRGB_ALPHA:
> +      return GL_RGBA;
> +
> +   case GL_SRGB8:
> +      return GL_RGB8;
> +
> +   case GL_SRGB8_ALPHA8:
> +      return GL_RGBA8;
> +
> +   case GL_SLUMINANCE:
> +      return GL_LUMINANCE8;
> +
> +   case GL_SLUMINANCE_ALPHA:
> +      return GL_LUMINANCE8_ALPHA8;
> +
> +   default:
> +      return format;
> +   }
> +}
> +
> +
> +/**
>    * Do error checking of format/type combinations for glReadPixels,
>    * glDrawPixels and glTex[Sub]Image.  Note that depending on the format
>    * and type values, we may either generate GL_INVALID_OPERATION or
> diff --git a/src/mesa/main/glformats.h b/src/mesa/main/glformats.h
> index e5b63a9..5d09951 100644
> --- a/src/mesa/main/glformats.h
> +++ b/src/mesa/main/glformats.h
> @@ -95,6 +95,12 @@ extern GLenum
>   _mesa_generic_compressed_format_to_uncompressed_format(GLenum format);
>
>   extern GLenum
> +_mesa_get_nongeneric_internalformat(GLenum format);
> +
> +extern GLenum
> +_mesa_get_linear_internalformat(GLenum format);
> +
> +extern GLenum
>   _mesa_error_check_format_and_type(const struct gl_context *ctx,
>                                     GLenum format, GLenum type);
>
>



More information about the mesa-dev mailing list