gallivm: handle explicit derivatives for cubemaps
authorRoland Scheidegger <sroland@vmware.com>
Sat, 5 Oct 2013 01:26:47 +0000 (03:26 +0200)
committerRoland Scheidegger <sroland@vmware.com>
Thu, 10 Oct 2013 02:32:57 +0000 (04:32 +0200)
commit47d0613eb70b2cb5d8837fe8e12325532a7918f5
tree5803f126ffac15c199ef24f232d7fa93c1ae35f9
parentce1d8634aa29810e3ec8db70b7f33a5d3f3ade25
gallivm: handle explicit derivatives for cubemaps

They need some special handling. Quite complicated.
Additionally, use the same code for implicit derivatives too if no_rho_approx
and no_quad_lod is set, because it seems while generally it should be ok
to use per quad lod for implicit derivatives there's at least some test which
insists that in case of cubemaps the shared lod value MUST come from a pixel
inside the primitive (due to the derivatives becoming different if a different
larger major axis is chosen).

v2: based on Brian's feedback, clean up code a bit.
And use sign bit of major axis instead of pre-select s/t/r sign for coord
mirroring (which should be the same in the end, saves 2 ands).
Also fix two bugs with select/mirror of derivatives, the minor axes need to
use major axis sign as well (instead of major derivative axis sign), and
don't mistakenly use absolute values of major derivative and inverse major
values.

Reviewed-by: Jose Fonseca <jfonseca@vmware.com>
src/gallium/auxiliary/gallivm/lp_bld_sample.c
src/gallium/auxiliary/gallivm/lp_bld_sample.h
src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c