<div dir="ltr">Reviewed-by: Jason Ekstrand <<a href="mailto:jason.ekstrand@intel.com">jason.ekstrand@intel.com</a>><br></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Jan 5, 2016 at 4:25 PM, Kenneth Graunke <span dir="ltr"><<a href="mailto:kenneth@whitecape.org" target="_blank">kenneth@whitecape.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">The nir_opt_algebraic rule<br>
<br>
(('fadd', ('flog2', a), ('fneg', ('flog2', b))), ('flog2', ('fdiv', a, b))),<br>
<br>
can produce new fdiv operations, which need to be lowered on i965,<br>
as we don't actually implement fdiv.  (Normally, we handle this in<br>
GLSL IR's lower_instructions pass, but in the above case we introduce<br>
an fdiv after that point.  So, make NIR do it for us.)<br>
<br>
Signed-off-by: Kenneth Graunke <<a href="mailto:kenneth@whitecape.org">kenneth@whitecape.org</a>><br>
Cc: <a href="mailto:mesa-stable@lists.freedesktop.org">mesa-stable@lists.freedesktop.org</a><br>
---<br>
 src/glsl/nir/nir.h                       | 1 +<br>
 src/glsl/nir/nir_opt_algebraic.py        | 1 +<br>
 src/mesa/drivers/dri/i965/brw_shader.cpp | 1 +<br>
 3 files changed, 3 insertions(+)<br>
<br>
diff --git a/src/glsl/nir/nir.h b/src/glsl/nir/nir.h<br>
index 4286738..fed8a97 100644<br>
--- a/src/glsl/nir/nir.h<br>
+++ b/src/glsl/nir/nir.h<br>
@@ -1440,6 +1440,7 @@ typedef struct nir_function {<br>
 } nir_function;<br>
<br>
 typedef struct nir_shader_compiler_options {<br>
+   bool lower_fdiv;<br>
    bool lower_ffma;<br>
    bool lower_flrp;<br>
    bool lower_fpow;<br>
diff --git a/src/glsl/nir/nir_opt_algebraic.py b/src/glsl/nir/nir_opt_algebraic.py<br>
index 1fdad3d..c553de5 100644<br>
--- a/src/glsl/nir/nir_opt_algebraic.py<br>
+++ b/src/glsl/nir/nir_opt_algebraic.py<br>
@@ -183,6 +183,7 @@ optimizations = [<br>
    (('fmul', ('fexp2', a), ('fexp2', b)), ('fexp2', ('fadd', a, b))),<br>
    # Division and reciprocal<br>
    (('fdiv', 1.0, a), ('frcp', a)),<br>
+   (('fdiv', a, b), ('fmul', a, ('frcp', b)), 'options->lower_fdiv'),<br>
    (('frcp', ('frcp', a)), a),<br>
    (('frcp', ('fsqrt', a)), ('frsq', a)),<br>
    (('fsqrt', a), ('frcp', ('frsq', a)), 'options->lower_fsqrt'),<br>
diff --git a/src/mesa/drivers/dri/i965/brw_shader.cpp b/src/mesa/drivers/dri/i965/brw_shader.cpp<br>
index d4b6410..4bd24a7 100644<br>
--- a/src/mesa/drivers/dri/i965/brw_shader.cpp<br>
+++ b/src/mesa/drivers/dri/i965/brw_shader.cpp<br>
@@ -97,6 +97,7 @@ brw_compiler_create(void *mem_ctx, const struct brw_device_info *devinfo)<br>
    nir_shader_compiler_options *nir_options =<br>
       rzalloc(compiler, nir_shader_compiler_options);<br>
    nir_options->native_integers = true;<br>
+   nir_options->lower_fdiv = true;<br>
    /* In order to help allow for better CSE at the NIR level we tell NIR<br>
     * to split all ffma instructions during opt_algebraic and we then<br>
     * re-combine them as a later step.<br>
<span class="HOEnZb"><font color="#888888">--<br>
2.6.4<br>
<br>
_______________________________________________<br>
mesa-dev mailing list<br>
<a href="mailto:mesa-dev@lists.freedesktop.org">mesa-dev@lists.freedesktop.org</a><br>
<a href="http://lists.freedesktop.org/mailman/listinfo/mesa-dev" rel="noreferrer" target="_blank">http://lists.freedesktop.org/mailman/listinfo/mesa-dev</a><br>
</font></span></blockquote></div><br></div>