gallivm: fix sampling for s3tc srgb formats when using texture cache
authorRoland Scheidegger <sroland@vmware.com>
Wed, 4 Nov 2015 13:21:43 +0000 (14:21 +0100)
committerRoland Scheidegger <sroland@vmware.com>
Wed, 4 Nov 2015 13:21:43 +0000 (14:21 +0100)
This actually stored the values as 8bit linear values in the cache,
then did another srgb->linear conversion...
We don't want to do the former (decoding 8bit srgb values to 8bit linear
completely defeats the purpose of srgb in the first place), so just decode
to 8bit srgb.
Fixes piglit.spec.ext_texture_srgb.texwrap formats-s3tc tests.

src/gallium/auxiliary/gallivm/lp_bld_format_soa.c

index 42aef8376f8e41d787996ba7231f39b67998ad65..8bae94af3d7608fe6cd99a0938caf35855d1c884 100644 (file)
@@ -492,9 +492,11 @@ lp_build_fetch_rgba_soa(struct gallivm_state *gallivm,
        (type.length == 1 || (type.length % 4 == 0)) &&
        cache) {
       const struct util_format_description *format_decompressed;
+      const struct util_format_description *flinear_desc;
       LLVMValueRef packed;
+      flinear_desc = util_format_description(util_format_linear(format_desc->format));
       packed = lp_build_fetch_cached_texels(gallivm,
-                                            format_desc,
+                                            flinear_desc,
                                             type.length,
                                             base_ptr,
                                             offset,