Mesa (master): nir: fix lower_mediump_outputs to not require variables

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu Sep 10 20:10:22 UTC 2020


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

Author: Marek Olšák <marek.olsak at amd.com>
Date:   Sun Sep  6 00:25:05 2020 -0400

nir: fix lower_mediump_outputs to not require variables

If IO is lowered, NIR doesn't have to contain any IO variables
(and in fact radeonsi removes them and other drivers should too).

This makes the pass work without variables.

Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig at collabora.com>
Reviewed-by: Eric Anholt <eric at anholt.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6621>

---

 src/compiler/nir/nir_lower_mediump_outputs.c | 54 ++++++++++++----------------
 1 file changed, 22 insertions(+), 32 deletions(-)

diff --git a/src/compiler/nir/nir_lower_mediump_outputs.c b/src/compiler/nir/nir_lower_mediump_outputs.c
index eabdcbd8dd0..09f1637ac7e 100644
--- a/src/compiler/nir/nir_lower_mediump_outputs.c
+++ b/src/compiler/nir/nir_lower_mediump_outputs.c
@@ -47,42 +47,32 @@ nir_lower_mediump_outputs(nir_shader *nir)
          if (intr->intrinsic != nir_intrinsic_store_output)
             continue;
 
-         nir_foreach_shader_out_variable(var, nir) {
-            if (var->data.driver_location != nir_intrinsic_base(intr))
-               continue; /* not found yet */
+         if (!nir_intrinsic_io_semantics(intr).medium_precision)
+            break; /* can't lower */
 
-            if (var->data.precision != GLSL_PRECISION_MEDIUM &&
-                var->data.precision != GLSL_PRECISION_LOW)
-               break; /* can't lower */
-
-            switch (glsl_get_base_type(var->type)) {
-            case GLSL_TYPE_FLOAT:
-               var->type = glsl_float16_type(var->type);
-               b.cursor = nir_before_instr(&intr->instr);
-               nir_instr_rewrite_src(&intr->instr, &intr->src[0],
-                     nir_src_for_ssa(nir_f2f16(&b, intr->src[0].ssa)));
-               nir_intrinsic_set_type(intr, nir_type_float16);
-               break;
-
-            case GLSL_TYPE_INT:
-               var->type = glsl_int16_type(var->type);
-               b.cursor = nir_before_instr(&intr->instr);
-               nir_instr_rewrite_src(&intr->instr, &intr->src[0],
-                     nir_src_for_ssa(nir_i2i16(&b, intr->src[0].ssa)));
-               nir_intrinsic_set_type(intr, nir_type_int16);
-               break;
+         switch (nir_intrinsic_type(intr)) {
+         case nir_type_float32:
+            b.cursor = nir_before_instr(&intr->instr);
+            nir_instr_rewrite_src(&intr->instr, &intr->src[0],
+                  nir_src_for_ssa(nir_f2f16(&b, intr->src[0].ssa)));
+            nir_intrinsic_set_type(intr, nir_type_float16);
+            break;
 
-            case GLSL_TYPE_UINT:
-               var->type = glsl_uint16_type(var->type);
-               b.cursor = nir_before_instr(&intr->instr);
-               nir_instr_rewrite_src(&intr->instr, &intr->src[0],
-                     nir_src_for_ssa(nir_u2u16(&b, intr->src[0].ssa)));
-               nir_intrinsic_set_type(intr, nir_type_uint16);
-               break;
+         case nir_type_int32:
+            b.cursor = nir_before_instr(&intr->instr);
+            nir_instr_rewrite_src(&intr->instr, &intr->src[0],
+                  nir_src_for_ssa(nir_i2i16(&b, intr->src[0].ssa)));
+            nir_intrinsic_set_type(intr, nir_type_int16);
+            break;
 
-            default:;
-            }
+         case nir_type_uint32:
+            b.cursor = nir_before_instr(&intr->instr);
+            nir_instr_rewrite_src(&intr->instr, &intr->src[0],
+                  nir_src_for_ssa(nir_u2u16(&b, intr->src[0].ssa)));
+            nir_intrinsic_set_type(intr, nir_type_uint16);
             break;
+
+         default:;
          }
       }
    }



More information about the mesa-commit mailing list