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

Author: Emma Anholt <[email protected]>
Date:   Mon Mar 28 16:04:57 2022 -0700

glsl: Delete dont_lower_swz path of lower_quadop_vector.

This was last used with Mesa classic, in _mesa_ir_link_shader().

Reviewed-by: Alyssa Rosenzweig <[email protected]>
Reviewed-by: Timothy Arceri <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15623>

---

 src/compiler/glsl/ir_optimization.h      |  2 +-
 src/compiler/glsl/lower_vector.cpp       | 77 +-------------------------------
 src/compiler/glsl/test_optpass.cpp       |  5 +--
 src/mesa/state_tracker/st_glsl_to_ir.cpp |  2 +-
 4 files changed, 6 insertions(+), 80 deletions(-)

diff --git a/src/compiler/glsl/ir_optimization.h 
b/src/compiler/glsl/ir_optimization.h
index b883c12bb18..85d32ad1841 100644
--- a/src/compiler/glsl/ir_optimization.h
+++ b/src/compiler/glsl/ir_optimization.h
@@ -133,7 +133,7 @@ bool lower_instructions(exec_list *instructions, unsigned 
what_to_lower);
 bool lower_variable_index_to_cond_assign(gl_shader_stage stage,
     exec_list *instructions, bool lower_input, bool lower_output,
     bool lower_temp, bool lower_uniform);
-bool lower_quadop_vector(exec_list *instructions, bool dont_lower_swz);
+bool lower_quadop_vector(exec_list *instructions);
 bool lower_const_arrays_to_uniforms(exec_list *instructions, unsigned stage, 
unsigned max_uniform_components);
 bool lower_clip_cull_distance(struct gl_shader_program *prog,
                               gl_linked_shader *shader);
diff --git a/src/compiler/glsl/lower_vector.cpp 
b/src/compiler/glsl/lower_vector.cpp
index fc5a6f2aa72..7b0883fdfc2 100644
--- a/src/compiler/glsl/lower_vector.cpp
+++ b/src/compiler/glsl/lower_vector.cpp
@@ -35,87 +35,18 @@ namespace {
 
 class lower_vector_visitor : public ir_rvalue_visitor {
 public:
-   lower_vector_visitor() : dont_lower_swz(false), progress(false)
+   lower_vector_visitor() : progress(false)
    {
       /* empty */
    }
 
    void handle_rvalue(ir_rvalue **rvalue);
 
-   /**
-    * Should SWZ-like expressions be lowered?
-    */
-   bool dont_lower_swz;
-
    bool progress;
 };
 
 } /* anonymous namespace */
 
-/**
- * Determine if an IR expression tree looks like an extended swizzle
- *
- * Extended swizzles consist of access of a single vector source (with possible
- * per component negation) and the constants -1, 0, or 1.
- */
-static bool
-is_extended_swizzle(ir_expression *ir)
-{
-   /* Track any variables that are accessed by this expression.
-    */
-   ir_variable *var = NULL;
-
-   assert(ir->operation == ir_quadop_vector);
-
-   for (unsigned i = 0; i < ir->type->vector_elements; i++) {
-      ir_rvalue *op = ir->operands[i];
-
-      while (op != NULL) {
-        switch (op->ir_type) {
-        case ir_type_constant: {
-           const ir_constant *const c = op->as_constant();
-
-           if (!c->is_one() && !c->is_zero() && !c->is_negative_one())
-              return false;
-
-           op = NULL;
-           break;
-        }
-
-        case ir_type_dereference_variable: {
-           ir_dereference_variable *const d = (ir_dereference_variable *) op;
-
-           if ((var != NULL) && (var != d->var))
-              return false;
-
-           var = d->var;
-           op = NULL;
-           break;
-        }
-
-        case ir_type_expression: {
-           ir_expression *const ex = (ir_expression *) op;
-
-           if (ex->operation != ir_unop_neg)
-              return false;
-
-           op = ex->operands[0];
-           break;
-        }
-
-        case ir_type_swizzle:
-           op = ((ir_swizzle *) op)->val;
-           break;
-
-        default:
-           return false;
-        }
-      }
-   }
-
-   return true;
-}
-
 void
 lower_vector_visitor::handle_rvalue(ir_rvalue **rvalue)
 {
@@ -126,9 +57,6 @@ lower_vector_visitor::handle_rvalue(ir_rvalue **rvalue)
    if ((expr == NULL) || (expr->operation != ir_quadop_vector))
       return;
 
-   if (this->dont_lower_swz && is_extended_swizzle(expr))
-      return;
-
    /* FINISHME: Is this the right thing to use for the ralloc context?
     */
    void *const mem_ctx = expr;
@@ -217,11 +145,10 @@ lower_vector_visitor::handle_rvalue(ir_rvalue **rvalue)
 }
 
 bool
-lower_quadop_vector(exec_list *instructions, bool dont_lower_swz)
+lower_quadop_vector(exec_list *instructions)
 {
    lower_vector_visitor v;
 
-   v.dont_lower_swz = dont_lower_swz;
    visit_list_elements(&v, instructions);
 
    return v.progress;
diff --git a/src/compiler/glsl/test_optpass.cpp 
b/src/compiler/glsl/test_optpass.cpp
index e3209e54f8e..9e21a646cfb 100644
--- a/src/compiler/glsl/test_optpass.cpp
+++ b/src/compiler/glsl/test_optpass.cpp
@@ -120,9 +120,8 @@ do_optimization(struct exec_list *ir, const char 
*optimization,
       return lower_variable_index_to_cond_assign(MESA_SHADER_VERTEX, ir,
                                                  int_0 != 0, int_1 != 0,
                                                  int_2 != 0, int_3 != 0);
-   } else if (sscanf(optimization, "lower_quadop_vector ( %d ) ",
-                     &int_0) == 1) {
-      return lower_quadop_vector(ir, int_0 != 0);
+   } else if (sscanf(optimization, "lower_quadop_vector") == 1) {
+      return lower_quadop_vector(ir);
    } 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 28c6de56de8..2c4d2ce8a53 100644
--- a/src/mesa/state_tracker/st_glsl_to_ir.cpp
+++ b/src/mesa/state_tracker/st_glsl_to_ir.cpp
@@ -161,7 +161,7 @@ st_link_shader(struct gl_context *ctx, struct 
gl_shader_program *prog)
 
       do_vec_index_to_cond_assign(ir);
       lower_vector_insert(ir, true);
-      lower_quadop_vector(ir, false);
+      lower_quadop_vector(ir);
       if (options->MaxIfDepth == 0) {
          lower_discard(ir);
       }

Reply via email to