gallivm: Fix mipfiltering with negative lod bias.
authorJosé Fonseca <jfonseca@vmware.com>
Sat, 8 May 2010 22:16:38 +0000 (23:16 +0100)
committerJosé Fonseca <jfonseca@vmware.com>
Sat, 8 May 2010 22:29:05 +0000 (23:29 +0100)
In particular, don't use the clamped lod to compute level + 1, or
lod in [-1, 0] range will actually interpolate with level 1.

This makes Mipfilter DCT pass 100%.

src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c

index dd0053f212dad089baf77f9c43b0c715c8b2942b..3b1e6df4ec3e1d3590036e4c299ba3048dc5a301 100644 (file)
@@ -1046,8 +1046,10 @@ lp_build_linear_mip_levels(struct lp_build_sample_context *bld,
                                 int_bld->zero,
                                 last_level);
    /* compute level 1 and clamp to legal range of levels */
-   *level1_out = lp_build_add(int_bld, *level0_out, int_bld->one);
-   *level1_out = lp_build_min(int_bld, *level1_out, last_level);
+   level = lp_build_add(int_bld, level, int_bld->one);
+   *level1_out = lp_build_clamp(int_bld, level,
+                                int_bld->zero,
+                                last_level);
 
    *weight_out = lp_build_fract(float_bld, lod);
 }