Mesa (master): nir: Conditionalize the POW reconstruction on shader compiler options.

Eric Anholt anholt at kemper.freedesktop.org
Wed Feb 18 22:57:23 UTC 2015


Module: Mesa
Branch: master
Commit: 8e9dbfff17f29533ad03f3afd25ada8cb6bf1e2b
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=8e9dbfff17f29533ad03f3afd25ada8cb6bf1e2b

Author: Eric Anholt <eric at anholt.net>
Date:   Tue Jan 27 16:22:54 2015 -0800

nir: Conditionalize the POW reconstruction on shader compiler options.

Mesa has a shader compiler struct flagging whether GLSL IR's opt_algebraic
and other passes should try and generate certain types of opcodes or
patterns.  Extend that to NIR by defining our own struct, which is
automatically generated from the Mesa struct in glsl_to_nir and provided
directly by the driver in TGSI-to-NIR.

v2: Split out the previous two prep patches.
v3: Rebase to master (no TGSI->NIR present)

Reviewed-by: Kenneth Graunke <kenneth at whitecape.org> (v2)

---

 src/glsl/nir/glsl_to_nir.cpp      |    3 +++
 src/glsl/nir/nir.h                |    1 +
 src/glsl/nir/nir_opt_algebraic.py |    4 ++--
 3 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/src/glsl/nir/glsl_to_nir.cpp b/src/glsl/nir/glsl_to_nir.cpp
index bc43a75..544d0d9 100644
--- a/src/glsl/nir/glsl_to_nir.cpp
+++ b/src/glsl/nir/glsl_to_nir.cpp
@@ -142,6 +142,9 @@ glsl_to_nir(exec_list *ir, _mesa_glsl_parse_state *state,
          nir_shader_compiler_options *new_options =
             rzalloc(ctx, nir_shader_compiler_options);
          options = gl_options->NirOptions = new_options;
+
+         if (gl_options->EmitNoPow)
+            new_options->lower_fpow = true;
       } else {
          options = gl_options->NirOptions;
       }
diff --git a/src/glsl/nir/nir.h b/src/glsl/nir/nir.h
index d5253c4..bcc51e8 100644
--- a/src/glsl/nir/nir.h
+++ b/src/glsl/nir/nir.h
@@ -1327,6 +1327,7 @@ typedef struct nir_function {
                   exec_list_get_head(&(func)->overload_list), node)
 
 typedef struct nir_shader_compiler_options {
+   bool lower_fpow;
 } nir_shader_compiler_options;
 
 typedef struct nir_shader {
diff --git a/src/glsl/nir/nir_opt_algebraic.py b/src/glsl/nir/nir_opt_algebraic.py
index 83223f7..76917f5 100644
--- a/src/glsl/nir/nir_opt_algebraic.py
+++ b/src/glsl/nir/nir_opt_algebraic.py
@@ -118,8 +118,8 @@ optimizations = [
    (('fexp',  ('flog',  a)), a), # e^ln(a)  = a
    (('flog2', ('fexp2', a)), a), # lg2(2^a) = a
    (('flog',  ('fexp',  a)), a), # ln(e^a)  = a
-   (('fexp2', ('fmul', ('flog2', a), b)), ('fpow', a, b)), # 2^(lg2(a)*b) = a^b
-   (('fexp',  ('fmul', ('flog', a), b)),  ('fpow', a, b)), # e^(ln(a)*b) = a^b
+   (('fexp2', ('fmul', ('flog2', a), b)), ('fpow', a, b), '!options->lower_fpow'), # 2^(lg2(a)*b) = a^b
+   (('fexp',  ('fmul', ('flog', a), b)),  ('fpow', a, b), '!options->lower_fpow'), # e^(ln(a)*b) = a^b
    (('fpow', a, 1.0), a),
    (('fpow', a, 2.0), ('fmul', a, a)),
    (('fpow', 2.0, a), ('fexp2', a)),




More information about the mesa-commit mailing list