Mesa (main): tgsi_exec: Garbage-collect the FAST_MATH path.

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri Jun 4 17:56:08 UTC 2021


Module: Mesa
Branch: main
Commit: fd3f9eedbee1697626e274ee63cb3781cdf9c84f
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=fd3f9eedbee1697626e274ee63cb3781cdf9c84f

Author: Emma Anholt <emma at anholt.net>
Date:   Thu Jun  3 12:01:01 2021 -0700

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 at collabora.com>
Reviewed-by: Adam Jackson <ajax at redhat.com>
Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig at collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11173>

---

 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.
  */



More information about the mesa-commit mailing list