gallivm: don't calculate square root of rho if we use accurate rho method
authorRoland Scheidegger <sroland@vmware.com>
Thu, 29 Aug 2013 01:58:18 +0000 (03:58 +0200)
committerRoland Scheidegger <sroland@vmware.com>
Fri, 30 Aug 2013 00:16:45 +0000 (02:16 +0200)
commit81cfcdbd87940914fc3c59acd0e43c4f6efb3bb7
treed2dfec96dd8e5cd436a09fd5751fd4af8bbe6d82
parent10e40ad11d5ed7f2d286837f92f8b63547f3db0b
gallivm: don't calculate square root of rho if we use accurate rho method

While a sqrt here and there shouldn't hurt much (depending on the cpu) it is
possible to completely omit it since rho is only used for calculating lod and
there log2(x) == 0.5*log2(x^2). Depending on the exact path taken for
calculating lod this means we get a simple mul instead of sqrt (in case of
nearest mip filter in fact we don't need to replace the sqrt with something
else at all), only in some not very useful path this doesn't work (combined
brilinear calculation of int level and fractional lod, accurate rho calc but
brilinear filtering seems odd).
Apart from being faster as an added bonus this should increase our crappy
fractional accuracy of lod, since fast_log2 is only good for ~3bits and this
should increase accuracy by one bit (though not used if dimension is just one
as we'd need an extra mul there as we never had the squared rho in the first
place).

v2: use separate ilog2_sqrt function if we have squared rho.

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