gallivm: fix cube map LOD computation
authorBrian Paul <brianp@vmware.com>
Wed, 7 Jul 2010 23:27:10 +0000 (17:27 -0600)
committerBrian Paul <brianp@vmware.com>
Wed, 7 Jul 2010 23:33:43 +0000 (17:33 -0600)
commitb17fba92dbee3a91c7854cb2935fa1e6be81982d
treee0585c337626c3449a264158367b2b3b921bcba6
parent9755539116fd0b818cc0636a6d6ed10b19b639be
gallivm: fix cube map LOD computation

First, this undoes commit e503af4baa2c709ae5743bb278b277d3faaba076
so we use iround() in lp_build_nearest_mip_level().

Second, in lp_build_sample_general() we need to check if we're sampling
a cube map before anything else.  Choose the cube face and then recompute
the partial derivatives of (S,T) with respect to the chosen cube face.
Before, we were using the directional (S,T,R) derivatives to compute
the LOD.

Third, work around an apparent bug in LLVM 2.7 where setting the lod
variable to a const(0) value results in bad x86 code.  See comments in
the code.
src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c