Mesa (main): glsl: Stop lowering ir_quadop_vector.

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Mon May 9 23:02:12 UTC 2022


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

Author: Emma Anholt <emma at anholt.net>
Date:   Wed Apr 20 16:37:46 2022 -0700

glsl: Stop lowering ir_quadop_vector.

Now that everybody goes through NIR, glsl_to_nir is happy to handle the
instruction and turn it into nir_op_vec4 instead of going to a temp
variable and back.

No changes on freedreno shader-db.

Reviewed-by: Rob Clark <robdclark at chromium.org>
Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig at collabora.com>
Reviewed-by: Timothy Arceri <tarceri at itsqueeze.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16363>

---

 src/compiler/glsl/ir_optimization.h      |   1 -
 src/compiler/glsl/lower_vector.cpp       | 155 -------------------------------
 src/compiler/glsl/meson.build            |   1 -
 src/compiler/glsl/test_optpass.cpp       |   2 -
 src/mesa/state_tracker/st_glsl_to_ir.cpp |   1 -
 5 files changed, 160 deletions(-)

diff --git a/src/compiler/glsl/ir_optimization.h b/src/compiler/glsl/ir_optimization.h
index e1bb1da6a2f..5551d950cbc 100644
--- a/src/compiler/glsl/ir_optimization.h
+++ b/src/compiler/glsl/ir_optimization.h
@@ -127,7 +127,6 @@ bool do_vec_index_to_swizzle(exec_list *instructions);
 bool lower_discard(exec_list *instructions);
 void lower_discard_flow(exec_list *instructions);
 bool lower_instructions(exec_list *instructions, unsigned what_to_lower);
-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
deleted file mode 100644
index 7b0883fdfc2..00000000000
--- a/src/compiler/glsl/lower_vector.cpp
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
- * Copyright © 2010 Intel Corporation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
-
-/**
- * \file lower_vector.cpp
- * IR lowering pass to remove some types of ir_quadop_vector
- *
- * \author Ian Romanick <ian.d.romanick at intel.com>
- */
-
-#include "ir.h"
-#include "ir_rvalue_visitor.h"
-
-namespace {
-
-class lower_vector_visitor : public ir_rvalue_visitor {
-public:
-   lower_vector_visitor() : progress(false)
-   {
-      /* empty */
-   }
-
-   void handle_rvalue(ir_rvalue **rvalue);
-
-   bool progress;
-};
-
-} /* anonymous namespace */
-
-void
-lower_vector_visitor::handle_rvalue(ir_rvalue **rvalue)
-{
-   if (!*rvalue)
-      return;
-
-   ir_expression *expr = (*rvalue)->as_expression();
-   if ((expr == NULL) || (expr->operation != ir_quadop_vector))
-      return;
-
-   /* FINISHME: Is this the right thing to use for the ralloc context?
-    */
-   void *const mem_ctx = expr;
-
-   assert(expr->type->vector_elements == expr->num_operands);
-
-   /* Generate a temporary with the same type as the ir_quadop_operation.
-    */
-   ir_variable *const temp =
-      new(mem_ctx) ir_variable(expr->type, "vecop_tmp", ir_var_temporary);
-
-   this->base_ir->insert_before(temp);
-
-   /* Counter of the number of components collected so far.
-    */
-   unsigned assigned;
-
-   /* Write-mask in the destination that receives counted by 'assigned'.
-    */
-   unsigned write_mask;
-
-
-   /* Generate upto four assignments to that variable.  Try to group component
-    * assignments together:
-    *
-    * - All constant components can be assigned at once.
-    * - All assigments of components from a single variable with the same
-    *   unary operator can be assigned at once.
-    */
-   ir_constant_data d = { { 0 } };
-
-   assigned = 0;
-   write_mask = 0;
-   for (unsigned i = 0; i < expr->type->vector_elements; i++) {
-      const ir_constant *const c = expr->operands[i]->as_constant();
-
-      if (c == NULL)
-	 continue;
-
-      switch (expr->type->base_type) {
-      case GLSL_TYPE_UINT:  d.u[assigned] = c->value.u[0]; break;
-      case GLSL_TYPE_INT:   d.i[assigned] = c->value.i[0]; break;
-      case GLSL_TYPE_FLOAT: d.f[assigned] = c->value.f[0]; break;
-      case GLSL_TYPE_BOOL:  d.b[assigned] = c->value.b[0]; break;
-      default:              assert(!"Should not get here."); break;
-      }
-
-      write_mask |= (1U << i);
-      assigned++;
-   }
-
-   assert((write_mask == 0) == (assigned == 0));
-
-   /* If there were constant values, generate an assignment.
-    */
-   if (assigned > 0) {
-      ir_constant *const c =
-	 new(mem_ctx) ir_constant(glsl_type::get_instance(expr->type->base_type,
-							  assigned, 1),
-				  &d);
-      ir_dereference *const lhs = new(mem_ctx) ir_dereference_variable(temp);
-      ir_assignment *const assign =
-	 new(mem_ctx) ir_assignment(lhs, c, write_mask);
-
-      this->base_ir->insert_before(assign);
-   }
-
-   /* FINISHME: This should try to coalesce assignments.
-    */
-   for (unsigned i = 0; i < expr->type->vector_elements; i++) {
-      if (expr->operands[i]->ir_type == ir_type_constant)
-	 continue;
-
-      ir_dereference *const lhs = new(mem_ctx) ir_dereference_variable(temp);
-      ir_assignment *const assign =
-	 new(mem_ctx) ir_assignment(lhs, expr->operands[i], 1U << i);
-
-      this->base_ir->insert_before(assign);
-      assigned++;
-   }
-
-   assert(assigned == expr->type->vector_elements);
-
-   *rvalue = new(mem_ctx) ir_dereference_variable(temp);
-   this->progress = true;
-}
-
-bool
-lower_quadop_vector(exec_list *instructions)
-{
-   lower_vector_visitor v;
-
-   visit_list_elements(&v, instructions);
-
-   return v.progress;
-}
diff --git a/src/compiler/glsl/meson.build b/src/compiler/glsl/meson.build
index 3a4ca70e65e..4ed9e999dda 100644
--- a/src/compiler/glsl/meson.build
+++ b/src/compiler/glsl/meson.build
@@ -174,7 +174,6 @@ files_libglsl = files(
   'lower_tess_level.cpp',
   'lower_vec_index_to_cond_assign.cpp',
   'lower_vec_index_to_swizzle.cpp',
-  'lower_vector.cpp',
   'lower_vector_derefs.cpp',
   'lower_vector_insert.cpp',
   'lower_vertex_id.cpp',
diff --git a/src/compiler/glsl/test_optpass.cpp b/src/compiler/glsl/test_optpass.cpp
index 3d34a6ddebe..0575484c868 100644
--- a/src/compiler/glsl/test_optpass.cpp
+++ b/src/compiler/glsl/test_optpass.cpp
@@ -110,8 +110,6 @@ do_optimization(struct exec_list *ir, const char *optimization,
    } else if (sscanf(optimization, "lower_instructions ( %d ) ",
                      &int_0) == 1) {
       return lower_instructions(ir, int_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 37cf1c8d74e..b1424b0e00f 100644
--- a/src/mesa/state_tracker/st_glsl_to_ir.cpp
+++ b/src/mesa/state_tracker/st_glsl_to_ir.cpp
@@ -132,7 +132,6 @@ 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);
       if (options->MaxIfDepth == 0) {
          lower_discard(ir);
       }



More information about the mesa-commit mailing list