glsl: lower mediump uniforms to FP16 based on an option
authorMarek Olšák <marek.olsak@amd.com>
Fri, 12 Feb 2021 14:44:04 +0000 (09:44 -0500)
committerMarge Bot <eric+marge@anholt.net>
Tue, 13 Apr 2021 05:07:42 +0000 (05:07 +0000)
Everything else is done - just allow it.

v2: update lower_precision_test.py

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

src/compiler/glsl/lower_precision.cpp
src/compiler/glsl/standalone.cpp
src/compiler/glsl/tests/lower_precision_test.py
src/mesa/main/mtypes.h

index df05a15..38755f2 100644 (file)
@@ -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) ||
index b34583e..1cf6d8a 100644 (file)
@@ -439,6 +439,7 @@ standalone_compile_shader(const struct standalone_options *_options,
          options->LowerPrecisionInt16 = true;
          options->LowerPrecisionDerivatives = true;
          options->LowerPrecisionConstants = true;
+         options->LowerPrecisionFloat16Uniforms = true;
       }
    }
 
index 2878f8c..0ee67e0 100644 (file)
@@ -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
index 5563c26..8d87991 100644 (file)
@@ -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