gallivm: don't apply zero lod_bias
authorKeith Whitwell <keithw@vmware.com>
Thu, 30 Sep 2010 15:43:56 +0000 (16:43 +0100)
committerJosé Fonseca <jfonseca@vmware.com>
Wed, 6 Oct 2010 17:49:32 +0000 (18:49 +0100)
src/gallium/auxiliary/gallivm/lp_bld_sample.c
src/gallium/auxiliary/gallivm/lp_bld_sample.h

index acd9974..2227a06 100644 (file)
@@ -132,6 +132,10 @@ lp_sampler_static_state(struct lp_sampler_static_state *state,
       state->min_mip_filter = PIPE_TEX_MIPFILTER_NONE;
    }
 
+   if (sampler->lod_bias != 0.0) {
+      state->lod_bias_non_zero = 1;
+   }
+
    /* If min_lod == max_lod we can greatly simplify mipmap selection.
     * This is a case that occurs during automatic mipmap generation.
     */
@@ -258,7 +262,8 @@ lp_build_lod_selector(struct lp_build_sample_context *bld,
       }
 
       /* add sampler lod bias */
-      lod = LLVMBuildFAdd(bld->builder, lod, sampler_lod_bias, "sampler_lod_bias");
+      if (bld->static_state->lod_bias_non_zero)
+         lod = LLVMBuildFAdd(bld->builder, lod, sampler_lod_bias, "sampler_lod_bias");
 
       /* clamp lod */
       lod = lp_build_clamp(float_bld, lod, min_lod, max_lod);
index 4d2eeaa..bb1c8c8 100644 (file)
@@ -83,6 +83,7 @@ struct lp_sampler_static_state
    unsigned compare_func:3;
    unsigned normalized_coords:1;
    unsigned min_max_lod_equal:1;  /**< min_lod == max_lod ? */
+   unsigned lod_bias_non_zero:1;
 };