From fd3f9eedbee1697626e274ee63cb3781cdf9c84f Mon Sep 17 00:00:00 2001 From: Emma Anholt Date: Thu, 3 Jun 2021 12:01:01 -0700 Subject: [PATCH] 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 Reviewed-by: Adam Jackson Reviewed-by: Alyssa Rosenzweig Part-of: --- src/gallium/auxiliary/tgsi/tgsi_exec.c | 26 ----------- src/util/u_math.c | 14 ------ src/util/u_math.h | 64 -------------------------- 3 files changed, 104 deletions(-) diff --git a/src/gallium/auxiliary/tgsi/tgsi_exec.c b/src/gallium/auxiliary/tgsi/tgsi_exec.c index 28e0b66f2be..a8446ff2735 100644 --- a/src/gallium/auxiliary/tgsi/tgsi_exec.c +++ b/src/gallium/auxiliary/tgsi/tgsi_exec.c @@ -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 diff --git a/src/util/u_math.c b/src/util/u_math.c index 41e7f599eb0..278a93736bc 100644 --- a/src/util/u_math.c +++ b/src/util/u_math.c @@ -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; } diff --git a/src/util/u_math.h b/src/util/u_math.h index 11ee275617c..ec1314ef0a0 100644 --- a/src/util/u_math.h +++ b/src/util/u_math.h @@ -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. */