summaryrefslogtreecommitdiffstats
path: root/src/mesa/main/texformat.c
diff options
context:
space:
mode:
authorBrian Paul <brianp@vmware.com>2012-08-24 08:38:46 -0600
committerBrian Paul <brianp@vmware.com>2012-08-24 14:09:03 -0600
commit13d0bb21a9ba04424019df25d6757e77304a1f9a (patch)
tree48382cbeb1418eb7844d613cd691e78cf1e3ad6e /src/mesa/main/texformat.c
parentd47a6ada9ca9670c60fc141fabadf40c63031c08 (diff)
downloadexternal_mesa3d-13d0bb21a9ba04424019df25d6757e77304a1f9a.zip
external_mesa3d-13d0bb21a9ba04424019df25d6757e77304a1f9a.tar.gz
external_mesa3d-13d0bb21a9ba04424019df25d6757e77304a1f9a.tar.bz2
mesa: don't try (generic) compression of 1D and 1D_ARRAY textures
See comments in the code for details. Note: we only need to special-case the generic compressed formats since specific texture formats are error-checked earlier to see if the compression format is compatible with the texture type. Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com>
Diffstat (limited to 'src/mesa/main/texformat.c')
-rw-r--r--src/mesa/main/texformat.c38
1 files changed, 26 insertions, 12 deletions
diff --git a/src/mesa/main/texformat.c b/src/mesa/main/texformat.c
index 57f5352..1a318ab 100644
--- a/src/mesa/main/texformat.c
+++ b/src/mesa/main/texformat.c
@@ -236,21 +236,33 @@ _mesa_choose_tex_format(struct gl_context *ctx, GLenum target,
RETURN_IF_SUPPORTED(MESA_FORMAT_I8);
break;
case GL_COMPRESSED_RGB_ARB:
- if (ctx->Extensions.EXT_texture_compression_s3tc ||
- ctx->Extensions.S3_s3tc)
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_DXT1);
- if (ctx->Extensions.TDFX_texture_compression_FXT1)
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_FXT1);
+ /* We don't use texture compression for 1D and 1D array textures.
+ * For 1D textures, compressions doesn't buy us much.
+ * For 1D ARRAY textures, there's complicated issues with updating
+ * sub-regions on non-block boundaries with glCopyTexSubImage, among
+ * other issues. FWIW, the GL_EXT_texture_array extension prohibits
+ * 1D ARRAY textures in S3TC format.
+ */
+ if (target != GL_TEXTURE_1D && target != GL_TEXTURE_1D_ARRAY) {
+ if (ctx->Extensions.EXT_texture_compression_s3tc ||
+ ctx->Extensions.S3_s3tc)
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_DXT1);
+ if (ctx->Extensions.TDFX_texture_compression_FXT1)
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGB_FXT1);
+ }
RETURN_IF_SUPPORTED(MESA_FORMAT_RGB888);
RETURN_IF_SUPPORTED(MESA_FORMAT_XRGB8888);
RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888);
break;
case GL_COMPRESSED_RGBA_ARB:
- if (ctx->Extensions.EXT_texture_compression_s3tc ||
- ctx->Extensions.S3_s3tc)
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_DXT3); /* Not rgba_dxt1, see spec */
- if (ctx->Extensions.TDFX_texture_compression_FXT1)
- RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FXT1);
+ /* We don't use texture compression for 1D and 1D array textures. */
+ if (target != GL_TEXTURE_1D && target != GL_TEXTURE_1D_ARRAY) {
+ if (ctx->Extensions.EXT_texture_compression_s3tc ||
+ ctx->Extensions.S3_s3tc)
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_DXT3); /* Not rgba_dxt1, see spec */
+ if (ctx->Extensions.TDFX_texture_compression_FXT1)
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA_FXT1);
+ }
RETURN_IF_SUPPORTED(MESA_FORMAT_RGBA8888);
RETURN_IF_SUPPORTED(MESA_FORMAT_ARGB8888);
break;
@@ -775,7 +787,8 @@ _mesa_choose_tex_format(struct gl_context *ctx, GLenum target,
break;
case GL_COMPRESSED_RED:
- RETURN_IF_SUPPORTED(MESA_FORMAT_RED_RGTC1);
+ if (target != GL_TEXTURE_1D && target != GL_TEXTURE_1D_ARRAY)
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RED_RGTC1);
RETURN_IF_SUPPORTED(MESA_FORMAT_R8);
break;
@@ -789,7 +802,8 @@ _mesa_choose_tex_format(struct gl_context *ctx, GLenum target,
break;
case GL_COMPRESSED_RG:
- RETURN_IF_SUPPORTED(MESA_FORMAT_RG_RGTC2);
+ if (target != GL_TEXTURE_1D && target != GL_TEXTURE_1D_ARRAY)
+ RETURN_IF_SUPPORTED(MESA_FORMAT_RG_RGTC2);
RETURN_IF_SUPPORTED(MESA_FORMAT_GR88);
break;