diff options
Diffstat (limited to 'mesalib/src/mesa/main')
-rw-r--r-- | mesalib/src/mesa/main/APIspec.xml | 3 | ||||
-rw-r--r-- | mesalib/src/mesa/main/extensions.c | 3 | ||||
-rw-r--r-- | mesalib/src/mesa/main/glformats.c | 6 | ||||
-rw-r--r-- | mesalib/src/mesa/main/mtypes.h | 1 | ||||
-rw-r--r-- | mesalib/src/mesa/main/texformat.c | 12 | ||||
-rw-r--r-- | mesalib/src/mesa/main/teximage.c | 34 | ||||
-rw-r--r-- | mesalib/src/mesa/main/texstore.c | 6 |
7 files changed, 32 insertions, 33 deletions
diff --git a/mesalib/src/mesa/main/APIspec.xml b/mesalib/src/mesa/main/APIspec.xml index a65c5c529..c3969526f 100644 --- a/mesalib/src/mesa/main/APIspec.xml +++ b/mesalib/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/mesalib/src/mesa/main/extensions.c b/mesalib/src/mesa/main/extensions.c index bd7c7baf9..4971ebc93 100644 --- a/mesalib/src/mesa/main/extensions.c +++ b/mesalib/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/mesalib/src/mesa/main/glformats.c b/mesalib/src/mesa/main/glformats.c index 04029c07c..ccdf56b4f 100644 --- a/mesalib/src/mesa/main/glformats.c +++ b/mesalib/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/mesalib/src/mesa/main/mtypes.h b/mesalib/src/mesa/main/mtypes.h index ba43e574d..e790e18c4 100644 --- a/mesalib/src/mesa/main/mtypes.h +++ b/mesalib/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/mesalib/src/mesa/main/texformat.c b/mesalib/src/mesa/main/texformat.c index 17270ba92..f0bc7fdb9 100644 --- a/mesalib/src/mesa/main/texformat.c +++ b/mesalib/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/mesalib/src/mesa/main/teximage.c b/mesalib/src/mesa/main/teximage.c index afda0eaaf..019516f00 100644 --- a/mesalib/src/mesa/main/teximage.c +++ b/mesalib/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: @@ -2043,28 +2055,6 @@ compressed_texture_error_check(struct gl_context *ctx, GLint dimensions, goto error; } - /* check image size against compression block size */ - /* XXX possibly move this into the _mesa_legal_texture_dimensions() func */ - { - gl_format texFormat = - ctx->Driver.ChooseTextureFormat(ctx, target, proxy_format, - choose_format, choose_type); - GLuint bw, bh; - - _mesa_get_format_block_size(texFormat, &bw, &bh); - if ((width > bw && width % bw > 0) || - (height > bh && height % bh > 0)) { - /* - * Per GL_ARB_texture_compression: GL_INVALID_OPERATION is - * generated [...] if any parameter combinations are not - * supported by the specific compressed internal format. - */ - reason = "invalid width or height for compression format"; - error = GL_INVALID_OPERATION; - goto error; - } - } - /* check image size in bytes */ if (expectedSize != imageSize) { /* Per GL_ARB_texture_compression: GL_INVALID_VALUE is generated [...] diff --git a/mesalib/src/mesa/main/texstore.c b/mesalib/src/mesa/main/texstore.c index e2598a1dc..e6914553c 100644 --- a/mesalib/src/mesa/main/texstore.c +++ b/mesalib/src/mesa/main/texstore.c @@ -4476,12 +4476,6 @@ _mesa_store_compressed_texsubimage(struct gl_context *ctx, GLuint dims, _mesa_get_format_block_size(texFormat, &bw, &bh); - /* these should have been caught sooner */ - ASSERT((width % bw) == 0 || width < bw); - ASSERT((height % bh) == 0 || height < bh); - ASSERT((xoffset % bw) == 0); - ASSERT((yoffset % bh) == 0); - /* get pointer to src pixels (may be in a pbo which we'll map here) */ data = _mesa_validate_pbo_compressed_teximage(ctx, imageSize, data, &ctx->Unpack, |