Mesa (master): glsl: lower mediump partial derivatives

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue Jun 2 20:25:46 UTC 2020


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

Author: Marek Olšák <marek.olsak at amd.com>
Date:   Sat May  9 21:38:34 2020 -0400

glsl: lower mediump partial derivatives

Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig at collabora.com>
Reviewed-by: Rob Clark <robdclark at chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5002>

---

 src/compiler/glsl/lower_precision.cpp           | 13 ++++++------
 src/compiler/glsl/standalone.cpp                |  1 +
 src/compiler/glsl/tests/lower_precision_test.py | 28 +++++++++++++++++++++++++
 src/mesa/main/mtypes.h                          |  1 +
 4 files changed, 37 insertions(+), 6 deletions(-)

diff --git a/src/compiler/glsl/lower_precision.cpp b/src/compiler/glsl/lower_precision.cpp
index 44cc7969204..b410e3290a2 100644
--- a/src/compiler/glsl/lower_precision.cpp
+++ b/src/compiler/glsl/lower_precision.cpp
@@ -399,12 +399,13 @@ find_lowerable_rvalues_visitor::visit_enter(ir_expression *ir)
       stack.back().state = CANT_LOWER;
 
    /* Don't lower precision for derivative calculations */
-   if (ir->operation == ir_unop_dFdx ||
-         ir->operation == ir_unop_dFdx_coarse ||
-         ir->operation == ir_unop_dFdx_fine ||
-         ir->operation == ir_unop_dFdy ||
-         ir->operation == ir_unop_dFdy_coarse ||
-         ir->operation == ir_unop_dFdy_fine) {
+   if (!options->LowerPrecisionDerivatives &&
+       (ir->operation == ir_unop_dFdx ||
+        ir->operation == ir_unop_dFdx_coarse ||
+        ir->operation == ir_unop_dFdx_fine ||
+        ir->operation == ir_unop_dFdy ||
+        ir->operation == ir_unop_dFdy_coarse ||
+        ir->operation == ir_unop_dFdy_fine)) {
       stack.back().state = CANT_LOWER;
    }
 
diff --git a/src/compiler/glsl/standalone.cpp b/src/compiler/glsl/standalone.cpp
index 02f019e0bde..5b34297df59 100644
--- a/src/compiler/glsl/standalone.cpp
+++ b/src/compiler/glsl/standalone.cpp
@@ -440,6 +440,7 @@ standalone_compile_shader(const struct standalone_options *_options,
             &ctx->Const.ShaderCompilerOptions[i];
          options->LowerPrecisionFloat16 = true;
          options->LowerPrecisionInt16 = true;
+         options->LowerPrecisionDerivatives = true;
       }
    }
 
diff --git a/src/compiler/glsl/tests/lower_precision_test.py b/src/compiler/glsl/tests/lower_precision_test.py
index 0934e61e4ab..3626d8d2a4b 100644
--- a/src/compiler/glsl/tests/lower_precision_test.py
+++ b/src/compiler/glsl/tests/lower_precision_test.py
@@ -1035,6 +1035,34 @@ TESTS = [
          }
          """,
          r'\(expression +uint16_t min'),
+    Test("dFdx",
+         """
+         #version 300 es
+         precision mediump float;
+
+         in vec4 var;
+         out vec4 color;
+
+         void main()
+         {
+                 color = dFdx(var);
+         }
+         """,
+         r'\(expression +f16vec4 +dFdx +\(expression +f16vec4'),
+    Test("dFdy",
+         """
+         #version 300 es
+         precision mediump float;
+
+         in vec4 var;
+         out vec4 color;
+
+         void main()
+         {
+                 color = dFdy(var);
+         }
+         """,
+         r'\(expression +f16vec4 +dFdy +\(expression +f16vec4'),
 ]
 
 
diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
index 5eb4ba625d4..eff6f496eb6 100644
--- a/src/mesa/main/mtypes.h
+++ b/src/mesa/main/mtypes.h
@@ -3208,6 +3208,7 @@ struct gl_shader_compiler_options
     */
    GLboolean LowerPrecisionFloat16;
    GLboolean LowerPrecisionInt16;
+   GLboolean LowerPrecisionDerivatives;
 
    /**
     * \name Forms of indirect addressing the driver cannot do.



More information about the mesa-commit mailing list