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 - */ - -#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); }