diff options
author | Ian Romanick <[email protected]> | 2013-01-22 04:24:24 -0500 |
---|---|---|
committer | Ian Romanick <[email protected]> | 2013-01-23 23:38:04 -0500 |
commit | d45c6c817df5c00ec12d46bd07fc7735e2c2cd5a (patch) | |
tree | 1c188bec91ff5304acb439652ca0b41911f8a5e0 | |
parent | a021881ccdaf1d81fb7c8bef4b58b4c037dc4f44 (diff) |
mesa: Simplify _mesa_choose_tex_format handling of compressed formats
For non-generic compressed format we assert two things:
1. The format has already been validated against the set of available
extensions.
2. The driver only enables the extension if it supports all of the
formats that are part of that extension.
Signed-off-by: Ian Romanick <[email protected]>
Reviewed-by: Eric Anholt <[email protected]>
-rw-r--r-- | src/mesa/main/texformat.c | 242 |
1 files changed, 75 insertions, 167 deletions
diff --git a/src/mesa/main/texformat.c b/src/mesa/main/texformat.c index b0ff6ec73c3..75b1021d44a 100644 --- a/src/mesa/main/texformat.c +++ b/src/mesa/main/texformat.c @@ -295,54 +295,81 @@ _mesa_choose_tex_format(struct gl_context *ctx, GLenum target, } } - if (ctx->Extensions.TDFX_texture_compression_FXT1) { - switch (internalFormat) { - case GL_COMPRESSED_RGB_FXT1_3DFX: - RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_FXT1); - break; - case GL_COMPRESSED_RGBA_FXT1_3DFX: - RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FXT1); - break; - default: - ; /* fallthrough */ - } - } - - if (ctx->Extensions.EXT_texture_compression_s3tc || - (ctx->API == API_OPENGLES2 && - ctx->Extensions.ANGLE_texture_compression_dxt)) { - switch (internalFormat) { - case GL_COMPRESSED_RGB_S3TC_DXT1_EXT: - RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_DXT1); - break; - case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT: - RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_DXT1); - break; - case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT: - RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_DXT3); - break; - case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT: - RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_DXT5); - break; - default: - ; /* fallthrough */ - } - } - - if (_mesa_is_desktop_gl(ctx) - && ctx->Extensions.ANGLE_texture_compression_dxt) { - switch (internalFormat) { - case GL_RGB_S3TC: - case GL_RGB4_S3TC: - RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_DXT1); - break; - case GL_RGBA_S3TC: - case GL_RGBA4_S3TC: - RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_DXT3); - break; - default: - ; /* fallthrough */ - } + /* For non-generic compressed format we assert two things: + * + * 1. The format has already been validated against the set of available + * extensions. + * + * 2. The driver only enables the extension if it supports all of the + * formats that are part of that extension. + */ + switch (internalFormat) { + case GL_COMPRESSED_RGB_FXT1_3DFX: + return MESA_FORMAT_RGB_FXT1; + case GL_COMPRESSED_RGBA_FXT1_3DFX: + return MESA_FORMAT_RGBA_FXT1; + case GL_COMPRESSED_RGB_S3TC_DXT1_EXT: + case GL_RGB_S3TC: + case GL_RGB4_S3TC: + return MESA_FORMAT_RGB_DXT1; + case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT: + return MESA_FORMAT_RGBA_DXT1; + case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT: + case GL_RGBA_S3TC: + case GL_RGBA4_S3TC: + return MESA_FORMAT_RGBA_DXT3; + case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT: + return MESA_FORMAT_RGBA_DXT5; + case GL_COMPRESSED_RED_RGTC1: + return MESA_FORMAT_RED_RGTC1; + case GL_COMPRESSED_SIGNED_RED_RGTC1: + return MESA_FORMAT_SIGNED_RED_RGTC1; + case GL_COMPRESSED_RG_RGTC2: + return MESA_FORMAT_RG_RGTC2; + case GL_COMPRESSED_SIGNED_RG_RGTC2: + return MESA_FORMAT_SIGNED_RG_RGTC2; + case GL_COMPRESSED_LUMINANCE_LATC1_EXT: + return MESA_FORMAT_L_LATC1; + case GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT: + return MESA_FORMAT_SIGNED_L_LATC1; + case GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT: + return MESA_FORMAT_LA_LATC2; + case GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT: + return MESA_FORMAT_SIGNED_LA_LATC2; + case GL_COMPRESSED_LUMINANCE_ALPHA_3DC_ATI: + return MESA_FORMAT_LA_LATC2; + case GL_ETC1_RGB8_OES: + return MESA_FORMAT_ETC1_RGB8; + case GL_COMPRESSED_RGB8_ETC2: + return MESA_FORMAT_ETC2_RGB8; + case GL_COMPRESSED_SRGB8_ETC2: + return MESA_FORMAT_ETC2_SRGB8; + case GL_COMPRESSED_RGBA8_ETC2_EAC: + return MESA_FORMAT_ETC2_RGBA8_EAC; + case GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC: + return MESA_FORMAT_ETC2_SRGB8_ALPHA8_EAC; + case GL_COMPRESSED_R11_EAC: + return MESA_FORMAT_ETC2_R11_EAC; + case GL_COMPRESSED_RG11_EAC: + return MESA_FORMAT_ETC2_RG11_EAC; + case GL_COMPRESSED_SIGNED_R11_EAC: + return MESA_FORMAT_ETC2_SIGNED_R11_EAC; + case GL_COMPRESSED_SIGNED_RG11_EAC: + return MESA_FORMAT_ETC2_SIGNED_RG11_EAC; + case GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2: + return MESA_FORMAT_ETC2_RGB8_PUNCHTHROUGH_ALPHA1; + case GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2: + return MESA_FORMAT_ETC2_SRGB8_PUNCHTHROUGH_ALPHA1; + case GL_COMPRESSED_SRGB_S3TC_DXT1_EXT: + return MESA_FORMAT_SRGB_DXT1; + case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT: + return MESA_FORMAT_SRGBA_DXT1; + case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT: + return MESA_FORMAT_SRGBA_DXT3; + case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT: + return MESA_FORMAT_SRGBA_DXT5; + default: + ; /* fallthrough */ } if (ctx->Extensions.ARB_texture_float) { @@ -602,30 +629,6 @@ _mesa_choose_tex_format(struct gl_context *ctx, GLenum target, RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA8); RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8); break; - case GL_COMPRESSED_SRGB_S3TC_DXT1_EXT: - if (ctx->Extensions.EXT_texture_compression_s3tc) - RETURN_IF_SUPPORTED(MESA_FORMAT_SRGB_DXT1); - RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8); - break; - case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT: - if (ctx->Extensions.EXT_texture_compression_s3tc) - RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA_DXT1); - RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8); - break; - case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT: - if (ctx->Extensions.EXT_texture_compression_s3tc || - (ctx->API == API_OPENGLES2 && - ctx->Extensions.ANGLE_texture_compression_dxt)) - RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA_DXT3); - RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8); - break; - case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT: - if (ctx->Extensions.EXT_texture_compression_s3tc || - (ctx->API == API_OPENGLES2 && - ctx->Extensions.ANGLE_texture_compression_dxt)) - RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA_DXT5); - RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8); - break; default: ; /* fallthrough */ } @@ -921,101 +924,6 @@ _mesa_choose_tex_format(struct gl_context *ctx, GLenum target, } } - if (ctx->Extensions.ARB_texture_compression_rgtc) { - switch (internalFormat) { - case GL_COMPRESSED_RED_RGTC1: - RETURN_IF_SUPPORTED(MESA_FORMAT_RED_RGTC1); - break; - case GL_COMPRESSED_SIGNED_RED_RGTC1: - RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RED_RGTC1); - break; - case GL_COMPRESSED_RG_RGTC2: - RETURN_IF_SUPPORTED(MESA_FORMAT_RG_RGTC2); - break; - case GL_COMPRESSED_SIGNED_RG_RGTC2: - RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RG_RGTC2); - break; - default: - ; /* fallthrough */ - } - } - - if (ctx->Extensions.EXT_texture_compression_latc) { - switch (internalFormat) { - case GL_COMPRESSED_LUMINANCE_LATC1_EXT: - RETURN_IF_SUPPORTED(MESA_FORMAT_L_LATC1); - break; - case GL_COMPRESSED_SIGNED_LUMINANCE_LATC1_EXT: - RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_L_LATC1); - break; - case GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT: - RETURN_IF_SUPPORTED(MESA_FORMAT_LA_LATC2); - break; - case GL_COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2_EXT: - RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_LA_LATC2); - break; - default: - ; /* fallthrough */ - } - } - - if (ctx->Extensions.ATI_texture_compression_3dc) { - switch (internalFormat) { - case GL_COMPRESSED_LUMINANCE_ALPHA_3DC_ATI: - RETURN_IF_SUPPORTED(MESA_FORMAT_LA_LATC2); - break; - default: - ; /* fallthrough */ - } - } - - if (ctx->Extensions.OES_compressed_ETC1_RGB8_texture) { - switch (internalFormat) { - case GL_ETC1_RGB8_OES: - RETURN_IF_SUPPORTED(MESA_FORMAT_ETC1_RGB8); - break; - default: - ; /* fallthrough */ - } - } - - if (_mesa_is_gles3(ctx)) { - switch (internalFormat) { - case GL_COMPRESSED_RGB8_ETC2: - RETURN_IF_SUPPORTED(MESA_FORMAT_ETC2_RGB8); - break; - case GL_COMPRESSED_SRGB8_ETC2: - RETURN_IF_SUPPORTED(MESA_FORMAT_ETC2_SRGB8); - break; - case GL_COMPRESSED_RGBA8_ETC2_EAC: - RETURN_IF_SUPPORTED(MESA_FORMAT_ETC2_RGBA8_EAC); - break; - case GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC: - RETURN_IF_SUPPORTED(MESA_FORMAT_ETC2_SRGB8_ALPHA8_EAC); - break; - case GL_COMPRESSED_R11_EAC: - RETURN_IF_SUPPORTED(MESA_FORMAT_ETC2_R11_EAC); - break; - case GL_COMPRESSED_RG11_EAC: - RETURN_IF_SUPPORTED(MESA_FORMAT_ETC2_RG11_EAC); - break; - case GL_COMPRESSED_SIGNED_R11_EAC: - RETURN_IF_SUPPORTED(MESA_FORMAT_ETC2_SIGNED_R11_EAC); - break; - case GL_COMPRESSED_SIGNED_RG11_EAC: - RETURN_IF_SUPPORTED(MESA_FORMAT_ETC2_SIGNED_RG11_EAC); - break; - case GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2: - RETURN_IF_SUPPORTED(MESA_FORMAT_ETC2_RGB8_PUNCHTHROUGH_ALPHA1); - break; - case GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2: - RETURN_IF_SUPPORTED(MESA_FORMAT_ETC2_SRGB8_PUNCHTHROUGH_ALPHA1); - break; - default: - ; /* fallthrough */ - } - } - _mesa_problem(ctx, "unexpected format %s in _mesa_choose_tex_format()", _mesa_lookup_enum_by_nr(internalFormat)); return MESA_FORMAT_NONE; |