Mesa (master): util: fix DXT1 RGBA texture compression if the source color is (0, 0, 0, 0)
Dave Airlie
airlied at kemper.freedesktop.org
Wed Feb 16 06:06:39 UTC 2011
Module: Mesa
Branch: master
Commit: 6e7d782da506da233b2ac695b022ac393e1c719e
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=6e7d782da506da233b2ac695b022ac393e1c719e
Author: Marek Olšák <maraeo at gmail.com>
Date: Wed Feb 16 04:18:42 2011 +0100
util: fix DXT1 RGBA texture compression if the source color is (0, 0, 0, 0)
This is a workaround for a bug in libtxc_dxtn.
Fixes:
- piglit/GL_EXT_texture_compression_s3tc/fbo-generatemipmap-formats
Signed-off-by: Dave Airlie <airlied at redhat.com>
---
src/gallium/auxiliary/util/u_format_s3tc.c | 16 ++++++++++++++--
1 files changed, 14 insertions(+), 2 deletions(-)
diff --git a/src/gallium/auxiliary/util/u_format_s3tc.c b/src/gallium/auxiliary/util/u_format_s3tc.c
index bb989c2..31288e3 100644
--- a/src/gallium/auxiliary/util/u_format_s3tc.c
+++ b/src/gallium/auxiliary/util/u_format_s3tc.c
@@ -416,8 +416,20 @@ util_format_dxt1_rgba_pack_rgba_8unorm(uint8_t *dst_row, unsigned dst_stride,
uint8_t tmp[4][4][4]; /* [bh][bw][comps] */
for(j = 0; j < bh; ++j) {
for(i = 0; i < bw; ++i) {
- for(k = 0; k < comps; ++k) {
- tmp[j][i][k] = src[(y + j)*src_stride/sizeof(*src) + (x + i)*comps + k];
+ const uint8_t *srcp = &src[(y + j)*src_stride/sizeof(*src) + (x + i)*comps];
+ /* Workaround for a bug in libtxc_dxtn.
+ * If the color is (0,0,0,0), it is compressed as (0,0,0,1),
+ * which is incorrect. Any other (x,y,z,0) color is compressed
+ * correctly as (0,0,0,0), so let's use (1,0,0,0). */
+ if (srcp[0] == 0 && srcp[1] == 0 && srcp[2] == 0 && srcp[3] == 0) {
+ tmp[j][i][0] = 255;
+ tmp[j][i][1] = 0;
+ tmp[j][i][2] = 0;
+ tmp[j][i][3] = 0;
+ } else {
+ for(k = 0; k < comps; ++k) {
+ tmp[j][i][k] = srcp[k];
+ }
}
}
}
More information about the mesa-commit
mailing list