From: Oliver McFadden <oliver.mcfad...@intel.com> http://www.khronos.org/registry/gles/extensions/ANGLE/ANGLE_texture_compression_dxt.txt
Signed-off-by: Oliver McFadden <oliver.mcfad...@intel.com> --- src/glx/glxextensions.h | 1 + src/mapi/glapi/gen/es_EXT.xml | 6 ++++++ src/mesa/drivers/dri/intel/intel_extensions.c | 5 +++++ src/mesa/main/APIspec.xml | 3 +++ src/mesa/main/extensions.c | 12 ++++++++++++ src/mesa/main/formats.c | 2 ++ src/mesa/main/glformats.c | 11 +++++++++-- src/mesa/main/glheader.h | 10 ++++++++++ src/mesa/main/mfeatures.h | 1 + src/mesa/main/mtypes.h | 1 + src/mesa/main/texcompress.c | 6 ++++++ src/mesa/main/texcompress_s3tc.c | 4 ++-- src/mesa/main/texcompress_s3tc.h | 6 +++--- src/mesa/main/texformat.c | 22 +++++++++++++++------- src/mesa/main/teximage.c | 12 ++++++++++++ src/mesa/state_tracker/st_format.c | 4 ++++ 16 files changed, 92 insertions(+), 14 deletions(-) diff --git a/src/glx/glxextensions.h b/src/glx/glxextensions.h index 90c27a7..2cbd8d4 100644 --- a/src/glx/glxextensions.h +++ b/src/glx/glxextensions.h @@ -132,6 +132,7 @@ enum GL_EXT_texture_bit, GL_EXT_texture3D_bit, GL_EXT_texture_compression_dxt1_bit, + GL_ANGLE_texture_compression_dxt_bit, GL_EXT_texture_compression_s3tc_bit, GL_EXT_texture_edge_clamp_bit, GL_EXT_texture_env_combine_bit, diff --git a/src/mapi/glapi/gen/es_EXT.xml b/src/mapi/glapi/gen/es_EXT.xml index fc2ec62..2698110 100644 --- a/src/mapi/glapi/gen/es_EXT.xml +++ b/src/mapi/glapi/gen/es_EXT.xml @@ -731,4 +731,10 @@ <enum name="RG8_EXT" value="0x822B"/> </category> +<!-- 111. GL_ANGLE_texture_compression_dxt --> +<category name="ANGLE_texture_compression_dxt" number="111"> + <enum name="COMPRESSED_RGBA_S3TC_DXT3_ANGLE" value="0x83F2"/> + <enum name="COMPRESSED_RGBA_S3TC_DXT5_ANGLE" value="0x83F3"/> +</category> + </OpenGLAPI> diff --git a/src/mesa/drivers/dri/intel/intel_extensions.c b/src/mesa/drivers/dri/intel/intel_extensions.c index 885e8a4..b8cf933 100755 --- a/src/mesa/drivers/dri/intel/intel_extensions.c +++ b/src/mesa/drivers/dri/intel/intel_extensions.c @@ -184,6 +184,11 @@ intelInitExtensions(struct gl_context *ctx) } if (intel->ctx.Mesa_DXTn) { + /* Does not require compression, but still needs the library for + * decompression! */ + ctx->Extensions.ANGLE_texture_compression_dxt = true; + + /* Requires both compression and decompression functions. */ ctx->Extensions.EXT_texture_compression_s3tc = true; ctx->Extensions.S3_s3tc = true; } diff --git a/src/mesa/main/APIspec.xml b/src/mesa/main/APIspec.xml index a65c5c5..c396952 100644 --- a/src/mesa/main/APIspec.xml +++ b/src/mesa/main/APIspec.xml @@ -2172,6 +2172,9 @@ <category name="NV_draw_buffers"/> <category name="NV_read_buffer"/> + <!-- GL_ANGLE_texture_compression_dxt --> + <category name="ANGLE_texture_compression_dxt"/> + <function name="DrawBuffersNV" template="DrawBuffers"/> <function name="ReadBufferNV" template="ReadBuffer"/> diff --git a/src/mesa/main/extensions.c b/src/mesa/main/extensions.c index 7e116bd..0469beb 100644 --- a/src/mesa/main/extensions.c +++ b/src/mesa/main/extensions.c @@ -195,6 +195,8 @@ static const struct extension extension_table[] = { { "GL_EXT_texture3D", o(EXT_texture3D), GLL, 1996 }, { "GL_EXT_texture_array", o(EXT_texture_array), GL, 2006 }, { "GL_EXT_texture_compression_dxt1", o(EXT_texture_compression_s3tc), GL | ES1 | ES2, 2004 }, + { "GL_ANGLE_texture_compression_dxt3", o(ANGLE_texture_compression_dxt), ES2, 2011 }, + { "GL_ANGLE_texture_compression_dxt5", o(ANGLE_texture_compression_dxt), ES2, 2011 }, { "GL_EXT_texture_compression_latc", o(EXT_texture_compression_latc), GL, 2006 }, { "GL_EXT_texture_compression_rgtc", o(ARB_texture_compression_rgtc), GL, 2004 }, { "GL_EXT_texture_compression_s3tc", o(EXT_texture_compression_s3tc), GL, 2000 }, @@ -531,6 +533,16 @@ _mesa_enable_sw_extensions(struct gl_context *ctx) if (ctx->Mesa_DXTn) { _mesa_enable_extension(ctx, "GL_EXT_texture_compression_s3tc"); _mesa_enable_extension(ctx, "GL_S3_s3tc"); + + /* If we can support S3TC texture compression, then we can also support + * ANGLE texture compression. However the ANGLE_texture_compression_dxt + * spec says: + * + * The extension is written against the OpenGL ES 2.0 specification. + */ + if (ctx->API == API_OPENGLES2) { + ctx->Extensions.ANGLE_texture_compression_dxt = GL_TRUE; + } } #endif } diff --git a/src/mesa/main/formats.c b/src/mesa/main/formats.c index 1fa641c..b22672e 100644 --- a/src/mesa/main/formats.c +++ b/src/mesa/main/formats.c @@ -2269,9 +2269,11 @@ _mesa_format_to_type_and_comps(gl_format format, case MESA_FORMAT_RGB_FXT1: case MESA_FORMAT_RGBA_FXT1: #endif +#if FEATURE_texture_s3tc || FEATURE_ANGLE_texture_compression_dxt #if FEATURE_texture_s3tc case MESA_FORMAT_RGB_DXT1: case MESA_FORMAT_RGBA_DXT1: +#endif case MESA_FORMAT_RGBA_DXT3: case MESA_FORMAT_RGBA_DXT5: #if FEATURE_EXT_texture_sRGB diff --git a/src/mesa/main/glformats.c b/src/mesa/main/glformats.c index 2d06cb7..01a67d6 100644 --- a/src/mesa/main/glformats.c +++ b/src/mesa/main/glformats.c @@ -793,8 +793,15 @@ _mesa_is_compressed_format(struct gl_context *ctx, GLenum format) return ctx->Extensions.EXT_texture_compression_s3tc; case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT: case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT: - return _mesa_is_desktop_gl(ctx) - && ctx->Extensions.EXT_texture_compression_s3tc; + /* case GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE: (duplicate case value) */ + /* case GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE: (duplicate case value) */ + return +#if FEATURE_ANGLE_texture_compression_dxt + (_mesa_is_gles2(ctx) + && ctx->Extensions.ANGLE_texture_compression_dxt) || +#endif + (_mesa_is_desktop_gl(ctx) + && ctx->Extensions.EXT_texture_compression_s3tc); case GL_RGB_S3TC: case GL_RGB4_S3TC: case GL_RGBA_S3TC: diff --git a/src/mesa/main/glheader.h b/src/mesa/main/glheader.h index 3152323..2c2182e 100644 --- a/src/mesa/main/glheader.h +++ b/src/mesa/main/glheader.h @@ -143,6 +143,16 @@ typedef void *GLeglImageOES; #define GL_ETC1_RGB8_OES 0x8D64 #endif +/* GL_ANGLE_texture_compression_dxt3 */ +#ifndef GL_ANGLE_texture_compression_dxt3 +#define GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE 0x83F2 +#endif + +/* GL_ANGLE_texture_compression_dxt5 */ +#ifndef GL_ANGLE_texture_compression_dxt5 +#define GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE 0x83F3 +#endif + /** * Internal token to represent a GLSL shader program (a collection of diff --git a/src/mesa/main/mfeatures.h b/src/mesa/main/mfeatures.h index b67f046..38325e8 100644 --- a/src/mesa/main/mfeatures.h +++ b/src/mesa/main/mfeatures.h @@ -105,6 +105,7 @@ #define FEATURE_rastpos FEATURE_GL #define FEATURE_texture_fxt1 FEATURE_GL #define FEATURE_texture_s3tc FEATURE_GL +#define FEATURE_ANGLE_texture_compression_dxt FEATURE_ES2 #define FEATURE_extra_context_init FEATURE_ES #define FEATURE_point_size_array FEATURE_ES diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h index ba43e57..1cf41da 100644 --- a/src/mesa/main/mtypes.h +++ b/src/mesa/main/mtypes.h @@ -3035,6 +3035,7 @@ struct gl_extensions GLboolean EXT_texture_array; GLboolean EXT_texture_compression_latc; GLboolean EXT_texture_compression_s3tc; + GLboolean ANGLE_texture_compression_dxt; GLboolean EXT_texture_env_dot3; GLboolean EXT_texture_filter_anisotropic; GLboolean EXT_texture_integer; diff --git a/src/mesa/main/texcompress.c b/src/mesa/main/texcompress.c index 846d4bb..3321b15 100644 --- a/src/mesa/main/texcompress.c +++ b/src/mesa/main/texcompress.c @@ -102,7 +102,9 @@ _mesa_gl_compressed_format_base_format(GLenum format) case GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB: case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT: case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT: + /* case GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE: (duplicate case value) */ case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT: + /* case GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE: (duplicate case value) */ case GL_COMPRESSED_RGBA_FXT1_3DFX: case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT: case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT: @@ -318,9 +320,11 @@ _mesa_glenum_to_compressed_format(GLenum format) case GL_RGB4_S3TC: return MESA_FORMAT_RGBA_DXT1; case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT: + /* case GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE: (duplicate case value) */ case GL_RGBA_S3TC: return MESA_FORMAT_RGBA_DXT3; case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT: + /* case GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE: (duplicate case value) */ case GL_RGBA4_S3TC: return MESA_FORMAT_RGBA_DXT5; @@ -381,11 +385,13 @@ _mesa_compressed_format_to_glenum(struct gl_context *ctx, gl_format mesaFormat) case MESA_FORMAT_RGBA_FXT1: return GL_COMPRESSED_RGBA_FXT1_3DFX; #endif +#if FEATURE_texture_s3tc || FEATURE_ANGLE_texture_compression_dxt #if FEATURE_texture_s3tc case MESA_FORMAT_RGB_DXT1: return GL_COMPRESSED_RGB_S3TC_DXT1_EXT; case MESA_FORMAT_RGBA_DXT1: return GL_COMPRESSED_RGBA_S3TC_DXT1_EXT; +#endif case MESA_FORMAT_RGBA_DXT3: return GL_COMPRESSED_RGBA_S3TC_DXT3_EXT; case MESA_FORMAT_RGBA_DXT5: diff --git a/src/mesa/main/texcompress_s3tc.c b/src/mesa/main/texcompress_s3tc.c index 8736e20..e0c8478 100644 --- a/src/mesa/main/texcompress_s3tc.c +++ b/src/mesa/main/texcompress_s3tc.c @@ -47,7 +47,7 @@ #include "swrast/s_context.h" -#if FEATURE_texture_s3tc +#if FEATURE_texture_s3tc || FEATURE_ANGLE_texture_compression_dxt #if defined(_WIN32) || defined(WIN32) @@ -533,4 +533,4 @@ _mesa_fetch_texel_srgba_dxt5(const struct swrast_texture_image *texImage, #endif /* FEATURE_EXT_texture_sRGB */ -#endif /* FEATURE_texture_s3tc */ +#endif /* FEATURE_texture_s3tc || FEATURE_ANGLE_texture_compression_dxt */ diff --git a/src/mesa/main/texcompress_s3tc.h b/src/mesa/main/texcompress_s3tc.h index 2c06e50..f3c42f6 100644 --- a/src/mesa/main/texcompress_s3tc.h +++ b/src/mesa/main/texcompress_s3tc.h @@ -33,7 +33,7 @@ struct gl_context; struct swrast_texture_image; -#if FEATURE_texture_s3tc +#if FEATURE_texture_s3tc || FEATURE_ANGLE_texture_compression_dxt extern GLboolean _mesa_texstore_rgb_dxt1(TEXSTORE_PARAMS); @@ -82,7 +82,7 @@ _mesa_fetch_texel_srgba_dxt5(const struct swrast_texture_image *texImage, extern void _mesa_init_texture_s3tc(struct gl_context *ctx); -#else /* FEATURE_texture_s3tc */ +#else /* FEATURE_texture_s3tc || FEATURE_ANGLE_texture_compression_dxt */ /* these are used only in texstore_funcs[] */ #define _mesa_texstore_rgb_dxt1 NULL @@ -105,6 +105,6 @@ _mesa_init_texture_s3tc(struct gl_context *ctx) { } -#endif /* FEATURE_texture_s3tc */ +#endif /* FEATURE_texture_s3tc || FEATURE_ANGLE_texture_compression_dxt */ #endif /* TEXCOMPRESS_S3TC_H */ diff --git a/src/mesa/main/texformat.c b/src/mesa/main/texformat.c index 1a318ab..38584f2 100644 --- a/src/mesa/main/texformat.c +++ b/src/mesa/main/texformat.c @@ -304,19 +304,24 @@ _mesa_choose_tex_format(struct gl_context *ctx, GLenum target, } #endif -#if FEATURE_texture_s3tc - if (ctx->Extensions.EXT_texture_compression_s3tc) { +#if FEATURE_texture_s3tc || FEATURE_ANGLE_texture_compression_dxt + if (ctx->Extensions.EXT_texture_compression_s3tc || + ctx->Extensions.ANGLE_texture_compression_dxt) { switch (internalFormat) { +#if FEATURE_texture_s3tc 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; +#endif case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT: + /* case GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE: (duplicate case value) */ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_DXT3); break; case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT: + /* case GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE: (duplicate case value) */ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_DXT5); break; default: @@ -595,14 +600,15 @@ _mesa_choose_tex_format(struct gl_context *ctx, GLenum target, RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8); break; case GL_COMPRESSED_SRGB_ALPHA_EXT: -#if FEATURE_texture_s3tc - if (ctx->Extensions.EXT_texture_compression_s3tc) +#if FEATURE_texture_s3tc || FEATURE_ANGLE_texture_compression_dxt + if (ctx->Extensions.EXT_texture_compression_s3tc || + ctx->Extensions.ANGLE_texture_compression_dxt) RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA_DXT3); /* Not srgba_dxt1, see spec */ #endif RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA8); RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8); break; -#if FEATURE_texture_s3tc +#if FEATURE_texture_s3tc || FEATURE_ANGLE_texture_compression_dxt case GL_COMPRESSED_SRGB_S3TC_DXT1_EXT: if (ctx->Extensions.EXT_texture_compression_s3tc) RETURN_IF_SUPPORTED(MESA_FORMAT_SRGB_DXT1); @@ -614,12 +620,14 @@ _mesa_choose_tex_format(struct gl_context *ctx, GLenum target, RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8); break; case GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT: - if (ctx->Extensions.EXT_texture_compression_s3tc) + if (ctx->Extensions.EXT_texture_compression_s3tc || + 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) + if (ctx->Extensions.EXT_texture_compression_s3tc || + ctx->Extensions.ANGLE_texture_compression_dxt) RETURN_IF_SUPPORTED(MESA_FORMAT_SRGBA_DXT5); RETURN_IF_SUPPORTED(MESA_FORMAT_SARGB8); break; diff --git a/src/mesa/main/teximage.c b/src/mesa/main/teximage.c index cdb0905..9f6a08c 100644 --- a/src/mesa/main/teximage.c +++ b/src/mesa/main/teximage.c @@ -209,6 +209,18 @@ _mesa_base_tex_format( struct gl_context *ctx, GLint internalFormat ) } } +#if FEATURE_ANGLE_texture_compression_dxt + if (ctx->Extensions.ANGLE_texture_compression_dxt) { + switch (internalFormat) { + case GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE: + case GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE: + return GL_RGBA; + default: + ; /* fallthrough */ + } + } +#endif + if (ctx->Extensions.S3_s3tc) { switch (internalFormat) { case GL_RGB_S3TC: diff --git a/src/mesa/state_tracker/st_format.c b/src/mesa/state_tracker/st_format.c index 302b58c..3dfb98a 100644 --- a/src/mesa/state_tracker/st_format.c +++ b/src/mesa/state_tracker/st_format.c @@ -119,11 +119,13 @@ st_mesa_format_to_pipe_format(gl_format mesaFormat) return PIPE_FORMAT_Z32_FLOAT_S8X24_UINT; case MESA_FORMAT_YCBCR: return PIPE_FORMAT_UYVY; +#if FEATURE_texture_s3tc || FEATURE_ANGLE_texture_compression_dxt #if FEATURE_texture_s3tc case MESA_FORMAT_RGB_DXT1: return PIPE_FORMAT_DXT1_RGB; case MESA_FORMAT_RGBA_DXT1: return PIPE_FORMAT_DXT1_RGBA; +#endif case MESA_FORMAT_RGBA_DXT3: return PIPE_FORMAT_DXT3_RGBA; case MESA_FORMAT_RGBA_DXT5: @@ -449,11 +451,13 @@ st_pipe_format_to_mesa_format(enum pipe_format format) case PIPE_FORMAT_YUYV: return MESA_FORMAT_YCBCR_REV; +#if FEATURE_texture_s3tc || FEATURE_ANGLE_texture_compression_dxt #if FEATURE_texture_s3tc case PIPE_FORMAT_DXT1_RGB: return MESA_FORMAT_RGB_DXT1; case PIPE_FORMAT_DXT1_RGBA: return MESA_FORMAT_RGBA_DXT1; +#endif case PIPE_FORMAT_DXT3_RGBA: return MESA_FORMAT_RGBA_DXT3; case PIPE_FORMAT_DXT5_RGBA: -- 1.7.8.6 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev