Module: Mesa
Branch: main
Commit: 46bf687882ab25042b4e15edc331eb8fe32d3a21
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=46bf687882ab25042b4e15edc331eb8fe32d3a21

Author: Emma Anholt <[email protected]>
Date:   Wed Mar 22 13:03:05 2023 -0700

glsl: Move ForceGLSLAbsSqrt handling to glsl-to-nir.

Cutting more GLSL lowering pass in favor of nir builder.

Reviewed-by: Alyssa Rosenzweig <[email protected]>
Reviewed-by: Marek Olšák <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22083>

---

 src/compiler/glsl/glsl_to_nir.cpp        | 18 ++++++++++++++++--
 src/compiler/glsl/ir_optimization.h      |  2 +-
 src/compiler/glsl/lower_instructions.cpp | 19 +------------------
 src/compiler/glsl/test_optpass.cpp       |  2 +-
 src/mesa/state_tracker/st_glsl_to_ir.cpp |  1 -
 5 files changed, 19 insertions(+), 23 deletions(-)

diff --git a/src/compiler/glsl/glsl_to_nir.cpp 
b/src/compiler/glsl/glsl_to_nir.cpp
index 9032f760ec4..424e44a42f0 100644
--- a/src/compiler/glsl/glsl_to_nir.cpp
+++ b/src/compiler/glsl/glsl_to_nir.cpp
@@ -122,6 +122,8 @@ private:
 
    void adjust_sparse_variable(nir_deref_instr *var_deref, const glsl_type 
*type,
                                nir_ssa_def *dest);
+
+   const struct gl_constants *consts;
 };
 
 /*
@@ -283,6 +285,7 @@ glsl_to_nir(const struct gl_constants *consts,
 
 nir_visitor::nir_visitor(const struct gl_constants *consts, nir_shader *shader)
 {
+   this->consts = consts;
    this->supports_std430 = consts->UseSTD430AsDefaultPacking;
    this->shader = shader;
    this->is_global = true;
@@ -2034,8 +2037,19 @@ nir_visitor::visit(ir_expression *ir)
                                        : nir_isign(&b, srcs[0]);
       break;
    case ir_unop_rcp:  result = nir_frcp(&b, srcs[0]);  break;
-   case ir_unop_rsq:  result = nir_frsq(&b, srcs[0]);  break;
-   case ir_unop_sqrt: result = nir_fsqrt(&b, srcs[0]); break;
+
+   case ir_unop_rsq:
+      if (consts->ForceGLSLAbsSqrt)
+         srcs[0] = nir_fabs(&b, srcs[0]);
+      result = nir_frsq(&b, srcs[0]);
+      break;
+
+   case ir_unop_sqrt:
+      if (consts->ForceGLSLAbsSqrt)
+         srcs[0] = nir_fabs(&b, srcs[0]);
+      result = nir_fsqrt(&b, srcs[0]);
+      break;
+
    case ir_unop_exp:  result = nir_fexp2(&b, nir_fmul_imm(&b, srcs[0], 
M_LOG2E)); break;
    case ir_unop_log:  result = nir_fmul_imm(&b, nir_flog2(&b, srcs[0]), 1.0 / 
M_LOG2E); break;
    case ir_unop_exp2: result = nir_fexp2(&b, srcs[0]); break;
diff --git a/src/compiler/glsl/ir_optimization.h 
b/src/compiler/glsl/ir_optimization.h
index e46d038fd50..f895f1c997a 100644
--- a/src/compiler/glsl/ir_optimization.h
+++ b/src/compiler/glsl/ir_optimization.h
@@ -61,7 +61,7 @@ bool lower_discard(exec_list *instructions);
 void lower_discard_flow(exec_list *instructions);
 bool lower_instructions(exec_list *instructions, bool have_ldexp,
                         bool have_dfrexp, bool have_dround,
-                        bool force_abs_sqrt, bool have_gpu_shader5);
+                        bool have_gpu_shader5);
 bool lower_clip_cull_distance(struct gl_shader_program *prog,
                               gl_linked_shader *shader);
 bool lower_packing_builtins(exec_list *instructions,
diff --git a/src/compiler/glsl/lower_instructions.cpp 
b/src/compiler/glsl/lower_instructions.cpp
index c22a40b3f7f..7e47dfc6e8d 100644
--- a/src/compiler/glsl/lower_instructions.cpp
+++ b/src/compiler/glsl/lower_instructions.cpp
@@ -63,7 +63,6 @@
 #define FIND_LSB_TO_FLOAT_CAST    0x20000
 #define FIND_MSB_TO_FLOAT_CAST    0x40000
 #define IMUL_HIGH_TO_MUL          0x80000
-#define SQRT_TO_ABS_SQRT          0x200000
 
 using namespace ir_builder;
 
@@ -95,7 +94,6 @@ private:
    void find_lsb_to_float_cast(ir_expression *ir);
    void find_msb_to_float_cast(ir_expression *ir);
    void imul_high_to_mul(ir_expression *ir);
-   void sqrt_to_abs_sqrt(ir_expression *ir);
 
    ir_expression *_carry(operand a, operand b);
 
@@ -114,14 +112,12 @@ private:
 
 bool
 lower_instructions(exec_list *instructions, bool have_ldexp, bool have_dfrexp,
-                   bool have_dround, bool force_abs_sqrt,
-                   bool have_gpu_shader5)
+                   bool have_dround, bool have_gpu_shader5)
 {
    unsigned what_to_lower =
       (have_ldexp ? 0 : LDEXP_TO_ARITH) |
       (have_dfrexp ? 0 : DFREXP_DLDEXP_TO_ARITH) |
       (have_dround ? 0 : DOPS_TO_DFRAC) |
-      (force_abs_sqrt ? SQRT_TO_ABS_SQRT : 0) |
       /* Assume that if ARB_gpu_shader5 is not supported then all of the
        * extended integer functions need lowering.  It may be necessary to add
        * some caps for individual instructions.
@@ -1090,13 +1086,6 @@ 
lower_instructions_visitor::imul_high_to_mul(ir_expression *ir)
    }
 }
 
-void
-lower_instructions_visitor::sqrt_to_abs_sqrt(ir_expression *ir)
-{
-   ir->operands[0] = new(ir) ir_expression(ir_unop_abs, ir->operands[0]);
-   this->progress = true;
-}
-
 ir_visitor_status
 lower_instructions_visitor::visit_leave(ir_expression *ir)
 {
@@ -1167,12 +1156,6 @@ lower_instructions_visitor::visit_leave(ir_expression 
*ir)
          imul_high_to_mul(ir);
       break;
 
-   case ir_unop_rsq:
-   case ir_unop_sqrt:
-      if (lowering(SQRT_TO_ABS_SQRT))
-         sqrt_to_abs_sqrt(ir);
-      break;
-
    default:
       return visit_continue;
    }
diff --git a/src/compiler/glsl/test_optpass.cpp 
b/src/compiler/glsl/test_optpass.cpp
index 6920a1ca52d..fc289ae95d6 100644
--- a/src/compiler/glsl/test_optpass.cpp
+++ b/src/compiler/glsl/test_optpass.cpp
@@ -93,7 +93,7 @@ do_optimization(struct exec_list *ir, const char 
*optimization,
       return lower_discard(ir);
    } else if (sscanf(optimization, "lower_instructions ( %d ) ",
                      &int_0) == 1) {
-      return lower_instructions(ir, false, false, false, false, false);
+      return lower_instructions(ir, false, false, false, false);
    } else {
       printf("Unrecognized optimization %s\n", optimization);
       exit(EXIT_FAILURE);
diff --git a/src/mesa/state_tracker/st_glsl_to_ir.cpp 
b/src/mesa/state_tracker/st_glsl_to_ir.cpp
index 93a4ee204a6..3d564105a70 100644
--- a/src/mesa/state_tracker/st_glsl_to_ir.cpp
+++ b/src/mesa/state_tracker/st_glsl_to_ir.cpp
@@ -82,7 +82,6 @@ link_shader(struct gl_context *ctx, struct gl_shader_program 
*prog)
             shader, ctx->Extensions.KHR_blend_equation_advanced_coherent);
 
       lower_instructions(ir, have_ldexp, have_dfrexp, have_dround,
-                         ctx->Const.ForceGLSLAbsSqrt,
                          ctx->Extensions.ARB_gpu_shader5);
 
       do_vec_index_to_cond_assign(ir);

Reply via email to