diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/mesa/main/fbobject.c | 127 | ||||
-rw-r--r-- | src/mesa/main/glformats.c | 113 | ||||
-rw-r--r-- | 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 891ec5dcefb..22b518e8694 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 ba79f193b3f..9089a725c32 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 e5b63a9636d..5d099514010 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); |