replace LOG2 with util_fast_log2
authorDylan Baker <dylan@pnwbakers.com>
Thu, 6 Sep 2018 22:26:19 +0000 (15:26 -0700)
committerDylan Baker <dylan@pnwbakers.com>
Tue, 21 Apr 2020 18:09:03 +0000 (11:09 -0700)
The implementation is somewhat different, although if you go back in
time far enough they're the same, but the one in u_math was changed a
long time back to be faster.

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Reviewed-by: Kristian H. Kristensen <hoegsberg@google.com>
Reviewed-by: Matt Turner <mattst88@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/3024>

src/mesa/swrast/s_span.c
src/mesa/swrast/s_texfilter.c
src/util/imports.h

index c5bb058a3b898edc53df36faaaff484d1a88fa8c..cd97d0416e54f561a2657a522c319bbd298e8064 100644 (file)
@@ -426,7 +426,7 @@ _swrast_compute_lambda(GLfloat dsdx, GLfloat dsdy, GLfloat dtdx, GLfloat dtdy,
    GLfloat x = sqrtf(dudx * dudx + dvdx * dvdx);
    GLfloat y = sqrtf(dudy * dudy + dvdy * dvdy);
    GLfloat rho = MAX2(x, y);
-   GLfloat lambda = LOG2(rho);
+   GLfloat lambda = util_fast_log2(rho);
    return lambda;
 }
 
@@ -453,7 +453,7 @@ _swrast_compute_lambda(GLfloat dsdx, GLfloat dsdy, GLfloat dtdx, GLfloat dtdy,
    maxU = MAX2(dsdx2, dsdy2) * texW;
    maxV = MAX2(dtdx2, dtdy2) * texH;
    rho = MAX2(maxU, maxV);
-   lambda = LOG2(rho);
+   lambda = util_fast_log2(rho);
    return lambda;
 }
 #endif
index cb91b81260e88d3f4b4237e31512778bfbf4cb4d..13d517b626135ec233839d932f70cb3811e36698 100644 (file)
@@ -1961,7 +1961,7 @@ sample_lambda_2d_aniso(struct gl_context *ctx,
       /* note: we need to have Pmin=sqrt(Pmin2) here, but we can avoid
        * this since 0.5*log(x) = log(sqrt(x))
        */
-      lod = 0.5f * LOG2(Pmin2);
+      lod = 0.5f * util_fast_log2(Pmin2);
       
       if (adjustLOD) {
          /* from swrast/s_texcombine.c _swrast_texture_span */
index 67254a030a8e8bf5f4f1f04a1356ec93e39fd0b1..385b37c81b57e13bc87044ac97306e963d7d1d10 100644 (file)
@@ -73,36 +73,6 @@ typedef union { float f; int i; unsigned u; } fi_type;
 /*@}*/
 
 
-/***
- *** LOG2: Log base 2 of float
- ***/
-static inline float LOG2(float x)
-{
-#if 0
-   /* This is pretty fast, but not accurate enough (only 2 fractional bits).
-    * Based on code from http://www.stereopsis.com/log2.html
-    */
-   const float y = x * x * x * x;
-   const unsigned ix = *((unsigned *) &y);
-   const unsigned exp = (ix >> 23) & 0xFF;
-   const int log2 = ((int) exp) - 127;
-   return (float) log2 * (1.0 / 4.0);  /* 4, because of x^4 above */
-#endif
-   /* Pretty fast, and accurate.
-    * Based on code from http://www.flipcode.com/totd/
-    */
-   fi_type num;
-   int log_2;
-   num.f = x;
-   log_2 = ((num.i >> 23) & 255) - 128;
-   num.i &= ~(255 << 23);
-   num.i += 127 << 23;
-   num.f = ((-1.0f/3) * num.f + 2) * num.f - 2.0f/3;
-   return num.f + log_2;
-}
-
-
-
 /**
  * finite macro.
  */