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

Author: Marek Olšák <marek.ol...@amd.com>
Date:   Fri Feb 12 09:44:04 2021 -0500

glsl: lower mediump uniforms to FP16 based on an option

Everything else is done - just allow it.

v2: update lower_precision_test.py

Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzw...@collabora.com> (v1)
Reviewed-by: Eric Anholt <e...@anholt.net> (v1)
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9050>

---

 src/compiler/glsl/lower_precision.cpp           | 7 ++++++-
 src/compiler/glsl/standalone.cpp                | 1 +
 src/compiler/glsl/tests/lower_precision_test.py | 4 ++--
 src/mesa/main/mtypes.h                          | 1 +
 4 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/src/compiler/glsl/lower_precision.cpp 
b/src/compiler/glsl/lower_precision.cpp
index df05a15deb2..38755f2b0d4 100644
--- a/src/compiler/glsl/lower_precision.cpp
+++ b/src/compiler/glsl/lower_precision.cpp
@@ -1023,7 +1023,12 @@ ir_visitor_status
 lower_variables_visitor::visit(ir_variable *var)
 {
    if ((var->data.mode != ir_var_temporary &&
-        var->data.mode != ir_var_auto) ||
+        var->data.mode != ir_var_auto &&
+        /* Lower uniforms but not UBOs. */
+        (var->data.mode != ir_var_uniform ||
+         var->is_in_buffer_block() ||
+         !(options->LowerPrecisionFloat16Uniforms &&
+           var->type->without_array()->base_type == GLSL_TYPE_FLOAT))) ||
        !var->type->without_array()->is_32bit() ||
        (var->data.precision != GLSL_PRECISION_MEDIUM &&
         var->data.precision != GLSL_PRECISION_LOW) ||
diff --git a/src/compiler/glsl/standalone.cpp b/src/compiler/glsl/standalone.cpp
index b34583e54bd..1cf6d8afad1 100644
--- a/src/compiler/glsl/standalone.cpp
+++ b/src/compiler/glsl/standalone.cpp
@@ -439,6 +439,7 @@ standalone_compile_shader(const struct standalone_options 
*_options,
          options->LowerPrecisionInt16 = true;
          options->LowerPrecisionDerivatives = true;
          options->LowerPrecisionConstants = true;
+         options->LowerPrecisionFloat16Uniforms = true;
       }
    }
 
diff --git a/src/compiler/glsl/tests/lower_precision_test.py 
b/src/compiler/glsl/tests/lower_precision_test.py
index 2878f8c6c90..0ee67e0c45b 100644
--- a/src/compiler/glsl/tests/lower_precision_test.py
+++ b/src/compiler/glsl/tests/lower_precision_test.py
@@ -689,7 +689,7 @@ TESTS = [
              gl_FragColor = vec4(b * a, 0.0, 0.0);
          }
          """,
-         r'\(expression +f16vec2 \*.*\bf16mat2\b'),
+         r'\(expression +f16vec2 \* \(var_ref b\) \(var_ref a\)'),
     Test("f32 simple struct deref",
          """
          precision mediump float;
@@ -1685,7 +1685,7 @@ TESTS = [
                     color += x;
          }
          """,
-         r'\(assign  \(x\) \(var_ref x\)  \(expression float16_t \+ \(var_ref 
x\) \(expression float16_t f2fmp \(var_ref incr'),
+         r'\(assign  \(x\) \(var_ref x\)  \(expression float16_t \+ \(var_ref 
x\) \(var_ref incr'),
     Test("i32 loop counter",
          """
          #version 310 es
diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
index 5563c26f439..8d8799102d7 100644
--- a/src/mesa/main/mtypes.h
+++ b/src/mesa/main/mtypes.h
@@ -3253,6 +3253,7 @@ struct gl_shader_compiler_options
    GLboolean LowerPrecisionFloat16;
    GLboolean LowerPrecisionInt16;
    GLboolean LowerPrecisionDerivatives;
+   GLboolean LowerPrecisionFloat16Uniforms;
 
    /**
     * This enables lowering of 16b constants.  Some drivers may not

_______________________________________________
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to