diff options
-rw-r--r-- | src/mesa/main/glformats.c | 39 | ||||
-rw-r--r-- | src/mesa/main/glformats.h | 3 |
2 files changed, 42 insertions, 0 deletions
diff --git a/src/mesa/main/glformats.c b/src/mesa/main/glformats.c index b6f9e94f5f5..2d06cb7151b 100644 --- a/src/mesa/main/glformats.c +++ b/src/mesa/main/glformats.c @@ -971,6 +971,45 @@ _mesa_base_format_has_channel(GLenum base_format, GLenum pname) /** + * If format is a generic compressed format, return the corresponding + * non-compressed format. For other formats, return the format as-is. + */ +GLenum +_mesa_generic_compressed_format_to_uncompressed_format(GLenum format) +{ + switch (format) { + case GL_COMPRESSED_RED: + return GL_RED; + case GL_COMPRESSED_RG: + return GL_RG; + case GL_COMPRESSED_RGB: + return GL_RGB; + case GL_COMPRESSED_RGBA: + return GL_RGBA; + case GL_COMPRESSED_ALPHA: + return GL_ALPHA; + case GL_COMPRESSED_LUMINANCE: + return GL_LUMINANCE; + case GL_COMPRESSED_LUMINANCE_ALPHA: + return GL_LUMINANCE_ALPHA; + case GL_COMPRESSED_INTENSITY: + return GL_INTENSITY; + /* sRGB formats */ + case GL_COMPRESSED_SRGB: + return GL_SRGB; + case GL_COMPRESSED_SRGB_ALPHA: + return GL_SRGB_ALPHA; + case GL_COMPRESSED_SLUMINANCE: + return GL_SLUMINANCE; + case GL_COMPRESSED_SLUMINANCE_ALPHA: + return GL_SLUMINANCE_ALPHA; + 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 d553eae0a0a..24fbda99137 100644 --- a/src/mesa/main/glformats.h +++ b/src/mesa/main/glformats.h @@ -92,6 +92,9 @@ extern GLboolean _mesa_base_format_has_channel(GLenum base_format, GLenum pname); extern GLenum +_mesa_generic_compressed_format_to_uncompressed_format(GLenum format); + +extern GLenum _mesa_error_check_format_and_type(const struct gl_context *ctx, GLenum format, GLenum type); |