From 9545d9611fd983fd63960de787dff51aedd4a7f9 Mon Sep 17 00:00:00 2001 From: Oliver McFadden Date: Wed, 26 Sep 2012 20:59:50 +0300 Subject: [PATCH] intel: add support for ANGLE_texture_compression_dxt. Signed-off-by: Oliver McFadden Reviewed-by: Brian Paul --- src/mapi/glapi/gen/es_EXT.xml | 6 ++++++ src/mesa/drivers/dri/intel/intel_extensions.c | 1 + src/mesa/main/APIspec.xml | 3 +++ src/mesa/main/extensions.c | 3 +++ src/mesa/main/glformats.c | 6 ++++-- src/mesa/main/mtypes.h | 1 + src/mesa/main/texformat.c | 12 +++++++++--- src/mesa/main/teximage.c | 12 ++++++++++++ 8 files changed, 39 insertions(+), 5 deletions(-) diff --git a/src/mapi/glapi/gen/es_EXT.xml b/src/mapi/glapi/gen/es_EXT.xml index c38e65a24f3..9e735834df6 100644 --- a/src/mapi/glapi/gen/es_EXT.xml +++ b/src/mapi/glapi/gen/es_EXT.xml @@ -731,4 +731,10 @@ + + + + + + diff --git a/src/mesa/drivers/dri/intel/intel_extensions.c b/src/mesa/drivers/dri/intel/intel_extensions.c index 89f6c1ec5c5..8a4648816eb 100755 --- a/src/mesa/drivers/dri/intel/intel_extensions.c +++ b/src/mesa/drivers/dri/intel/intel_extensions.c @@ -182,6 +182,7 @@ intelInitExtensions(struct gl_context *ctx) } if (intel->ctx.Mesa_DXTn) { + ctx->Extensions.ANGLE_texture_compression_dxt = true; 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 a65c5c5297f..c3969526f3a 100644 --- a/src/mesa/main/APIspec.xml +++ b/src/mesa/main/APIspec.xml @@ -2172,6 +2172,9 @@ + + + diff --git a/src/mesa/main/extensions.c b/src/mesa/main/extensions.c index bd7c7baf912..4971ebc930d 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 }, @@ -480,6 +482,7 @@ _mesa_enable_sw_extensions(struct gl_context *ctx) ctx->Extensions.EXT_gpu_program_parameters = GL_TRUE; _mesa_enable_extension(ctx, "GL_3DFX_texture_compression_FXT1"); if (ctx->Mesa_DXTn) { + ctx->Extensions.ANGLE_texture_compression_dxt = GL_TRUE; _mesa_enable_extension(ctx, "GL_EXT_texture_compression_s3tc"); _mesa_enable_extension(ctx, "GL_S3_s3tc"); } diff --git a/src/mesa/main/glformats.c b/src/mesa/main/glformats.c index 04029c07c49..ccdf56b4f6e 100644 --- a/src/mesa/main/glformats.c +++ b/src/mesa/main/glformats.c @@ -791,8 +791,10 @@ _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; + return (_mesa_is_desktop_gl(ctx) && + ctx->Extensions.EXT_texture_compression_s3tc) || + (ctx->API == API_OPENGLES2 && + ctx->Extensions.ANGLE_texture_compression_dxt); case GL_RGB_S3TC: case GL_RGB4_S3TC: case GL_RGBA_S3TC: diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h index ba43e574dc0..e790e18c4a5 100644 --- a/src/mesa/main/mtypes.h +++ b/src/mesa/main/mtypes.h @@ -2946,6 +2946,7 @@ struct gl_extensions GLboolean dummy; /* don't remove this! */ GLboolean dummy_true; /* Set true by _mesa_init_extensions(). */ GLboolean dummy_false; /* Set false by _mesa_init_extensions(). */ + GLboolean ANGLE_texture_compression_dxt; GLboolean ARB_ES2_compatibility; GLboolean ARB_base_instance; GLboolean ARB_blend_func_extended; diff --git a/src/mesa/main/texformat.c b/src/mesa/main/texformat.c index 17270ba9248..f0bc7fdb93b 100644 --- a/src/mesa/main/texformat.c +++ b/src/mesa/main/texformat.c @@ -302,7 +302,9 @@ _mesa_choose_tex_format(struct gl_context *ctx, GLenum target, } } - if (ctx->Extensions.EXT_texture_compression_s3tc) { + 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); @@ -604,12 +606,16 @@ _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->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) + 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; diff --git a/src/mesa/main/teximage.c b/src/mesa/main/teximage.c index afda0eaafbf..8e1e601da7c 100644 --- a/src/mesa/main/teximage.c +++ b/src/mesa/main/teximage.c @@ -203,6 +203,18 @@ _mesa_base_tex_format( struct gl_context *ctx, GLint internalFormat ) } } + /* GL_COMPRESSED_RGBA_S3TC_DXT3_ANGLE && GL_COMPRESSED_RGBA_S3TC_DXT5_ANGLE */ + if (ctx->API == API_OPENGLES2 && + ctx->Extensions.ANGLE_texture_compression_dxt) { + switch (internalFormat) { + case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT: + case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT: + return GL_RGBA; + default: + ; /* fallthrough */ + } + } + if (ctx->Extensions.S3_s3tc) { switch (internalFormat) { case GL_RGB_S3TC: -- 2.30.2