[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