tgsi_exec: Garbage-collect the FAST_MATH path.
It's disabled due to non-conformance with no configuration knob to turn it on, and if you care about swrast performance you're on llvmpipe anyway. Reviewed-by: Erik Faye-Lund <erik.faye-lund@collabora.com> Reviewed-by: Adam Jackson <ajax@redhat.com> Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11173>
This commit is contained in:
@@ -68,8 +68,6 @@
|
||||
#define DEBUG_EXECUTION 0
|
||||
|
||||
|
||||
#define FAST_MATH 0
|
||||
|
||||
#define TILE_TOP_LEFT 0
|
||||
#define TILE_TOP_RIGHT 1
|
||||
#define TILE_BOTTOM_LEFT 2
|
||||
@@ -415,12 +413,6 @@ static void
|
||||
micro_exp2(union tgsi_exec_channel *dst,
|
||||
const union tgsi_exec_channel *src)
|
||||
{
|
||||
#if FAST_MATH
|
||||
dst->f[0] = util_fast_exp2(src->f[0]);
|
||||
dst->f[1] = util_fast_exp2(src->f[1]);
|
||||
dst->f[2] = util_fast_exp2(src->f[2]);
|
||||
dst->f[3] = util_fast_exp2(src->f[3]);
|
||||
#else
|
||||
#if DEBUG
|
||||
/* Inf is okay for this instruction, so clamp it to silence assertions. */
|
||||
uint i;
|
||||
@@ -442,7 +434,6 @@ micro_exp2(union tgsi_exec_channel *dst,
|
||||
dst->f[1] = powf(2.0f, src->f[1]);
|
||||
dst->f[2] = powf(2.0f, src->f[2]);
|
||||
dst->f[3] = powf(2.0f, src->f[3]);
|
||||
#endif /* FAST_MATH */
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -509,17 +500,10 @@ static void
|
||||
micro_lg2(union tgsi_exec_channel *dst,
|
||||
const union tgsi_exec_channel *src)
|
||||
{
|
||||
#if FAST_MATH
|
||||
dst->f[0] = util_fast_log2(src->f[0]);
|
||||
dst->f[1] = util_fast_log2(src->f[1]);
|
||||
dst->f[2] = util_fast_log2(src->f[2]);
|
||||
dst->f[3] = util_fast_log2(src->f[3]);
|
||||
#else
|
||||
dst->f[0] = logf(src->f[0]) * 1.442695f;
|
||||
dst->f[1] = logf(src->f[1]) * 1.442695f;
|
||||
dst->f[2] = logf(src->f[2]) * 1.442695f;
|
||||
dst->f[3] = logf(src->f[3]) * 1.442695f;
|
||||
#endif
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -1075,9 +1059,6 @@ tgsi_exec_machine_bind_shader(
|
||||
tgsi_dump(tokens, 0);
|
||||
#endif
|
||||
|
||||
util_init_math();
|
||||
|
||||
|
||||
mach->Tokens = tokens;
|
||||
mach->Sampler = sampler;
|
||||
mach->Image = image;
|
||||
@@ -1402,17 +1383,10 @@ micro_pow(
|
||||
const union tgsi_exec_channel *src0,
|
||||
const union tgsi_exec_channel *src1 )
|
||||
{
|
||||
#if FAST_MATH
|
||||
dst->f[0] = util_fast_pow( src0->f[0], src1->f[0] );
|
||||
dst->f[1] = util_fast_pow( src0->f[1], src1->f[1] );
|
||||
dst->f[2] = util_fast_pow( src0->f[2], src1->f[2] );
|
||||
dst->f[3] = util_fast_pow( src0->f[3], src1->f[3] );
|
||||
#else
|
||||
dst->f[0] = powf( src0->f[0], src1->f[0] );
|
||||
dst->f[1] = powf( src0->f[1], src1->f[1] );
|
||||
dst->f[2] = powf( src0->f[2], src1->f[2] );
|
||||
dst->f[3] = powf( src0->f[3], src1->f[3] );
|
||||
#endif
|
||||
}
|
||||
|
||||
static void
|
||||
|
||||
@@ -41,19 +41,6 @@
|
||||
#endif
|
||||
|
||||
|
||||
/** 2^x, for x in [-1.0, 1.0) */
|
||||
float pow2_table[POW2_TABLE_SIZE];
|
||||
|
||||
|
||||
static void
|
||||
init_pow2_table(void)
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < POW2_TABLE_SIZE; i++)
|
||||
pow2_table[i] = exp2f((i - POW2_TABLE_OFFSET) / POW2_TABLE_SCALE);
|
||||
}
|
||||
|
||||
|
||||
/** log2(x), for x in [1.0, 2.0) */
|
||||
float log2_table[LOG2_TABLE_SIZE];
|
||||
|
||||
@@ -75,7 +62,6 @@ util_init_math(void)
|
||||
{
|
||||
static bool initialized = false;
|
||||
if (!initialized) {
|
||||
init_pow2_table();
|
||||
init_log2_table();
|
||||
initialized = true;
|
||||
}
|
||||
|
||||
@@ -56,12 +56,6 @@ extern "C" {
|
||||
#define M_SQRT2 1.41421356237309504880
|
||||
#endif
|
||||
|
||||
#define POW2_TABLE_SIZE_LOG2 9
|
||||
#define POW2_TABLE_SIZE (1 << POW2_TABLE_SIZE_LOG2)
|
||||
#define POW2_TABLE_OFFSET (POW2_TABLE_SIZE/2)
|
||||
#define POW2_TABLE_SCALE ((float)(POW2_TABLE_SIZE/2))
|
||||
extern float pow2_table[POW2_TABLE_SIZE];
|
||||
|
||||
|
||||
/**
|
||||
* Initialize math module. This should be called before using any
|
||||
@@ -99,54 +93,6 @@ util_get_float32_exponent(float x)
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Fast version of 2^x
|
||||
* Identity: exp2(a + b) = exp2(a) * exp2(b)
|
||||
* Let ipart = int(x)
|
||||
* Let fpart = x - ipart;
|
||||
* So, exp2(x) = exp2(ipart) * exp2(fpart)
|
||||
* Compute exp2(ipart) with i << ipart
|
||||
* Compute exp2(fpart) with lookup table.
|
||||
*/
|
||||
static inline float
|
||||
util_fast_exp2(float x)
|
||||
{
|
||||
int32_t ipart;
|
||||
float fpart, mpart;
|
||||
union fi epart;
|
||||
|
||||
if(x > 129.00000f)
|
||||
return 3.402823466e+38f;
|
||||
|
||||
if (x < -126.99999f)
|
||||
return 0.0f;
|
||||
|
||||
ipart = (int32_t) x;
|
||||
fpart = x - (float) ipart;
|
||||
|
||||
/* same as
|
||||
* epart.f = (float) (1 << ipart)
|
||||
* but faster and without integer overflow for ipart > 31
|
||||
*/
|
||||
epart.i = (ipart + 127 ) << 23;
|
||||
|
||||
mpart = pow2_table[POW2_TABLE_OFFSET + (int)(fpart * POW2_TABLE_SCALE)];
|
||||
|
||||
return epart.f * mpart;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Fast approximation to exp(x).
|
||||
*/
|
||||
static inline float
|
||||
util_fast_exp(float x)
|
||||
{
|
||||
const float k = 1.44269f; /* = log2(e) */
|
||||
return util_fast_exp2(k * x);
|
||||
}
|
||||
|
||||
|
||||
#define LOG2_TABLE_SIZE_LOG2 16
|
||||
#define LOG2_TABLE_SCALE (1 << LOG2_TABLE_SIZE_LOG2)
|
||||
#define LOG2_TABLE_SIZE (LOG2_TABLE_SCALE + 1)
|
||||
@@ -169,16 +115,6 @@ util_fast_log2(float x)
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Fast approximation to x^y.
|
||||
*/
|
||||
static inline float
|
||||
util_fast_pow(float x, float y)
|
||||
{
|
||||
return util_fast_exp2(util_fast_log2(x) * y);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Floor(x), returned as int.
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user