From 23bda945f570b4f566ed39b4c1de89a957247df7 Mon Sep 17 00:00:00 2001 From: Francisco Jerez Date: Wed, 18 Mar 2015 21:18:08 +0200 Subject: [PATCH] i965/vec4: Remove swizzle_for_size() in favour of brw_swizzle_for_size(). It could be objected that swizzle_for_size() is "faster" than brw_swizzle_for_size(). It's not measurably better in any reasonable CPU-bound benchmark on VLV according to the Finnish benchmarking system (including the SynMark2 DrvShComp shader compilation benchmark). Reviewed-by: Matt Turner --- src/mesa/drivers/dri/i965/brw_ir_vec4.h | 3 --- src/mesa/drivers/dri/i965/brw_vec4.cpp | 22 +------------------ .../drivers/dri/i965/brw_vec4_visitor.cpp | 14 ++++++------ 3 files changed, 8 insertions(+), 31 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_ir_vec4.h b/src/mesa/drivers/dri/i965/brw_ir_vec4.h index 2ac189b1043..2b50565bced 100644 --- a/src/mesa/drivers/dri/i965/brw_ir_vec4.h +++ b/src/mesa/drivers/dri/i965/brw_ir_vec4.h @@ -32,9 +32,6 @@ namespace brw { class dst_reg; -unsigned -swizzle_for_size(int size); - class src_reg : public backend_reg { public: diff --git a/src/mesa/drivers/dri/i965/brw_vec4.cpp b/src/mesa/drivers/dri/i965/brw_vec4.cpp index 3e242e19664..4f805f3f21b 100644 --- a/src/mesa/drivers/dri/i965/brw_vec4.cpp +++ b/src/mesa/drivers/dri/i965/brw_vec4.cpp @@ -40,26 +40,6 @@ using namespace brw; namespace brw { -/** - * Common helper for constructing swizzles. When only a subset of - * channels of a vec4 are used, we don't want to reference the other - * channels, as that will tell optimization passes that those other - * channels are used. - */ -unsigned -swizzle_for_size(int size) -{ - static const unsigned size_swizzles[4] = { - BRW_SWIZZLE4(SWIZZLE_X, SWIZZLE_X, SWIZZLE_X, SWIZZLE_X), - BRW_SWIZZLE4(SWIZZLE_X, SWIZZLE_Y, SWIZZLE_Y, SWIZZLE_Y), - BRW_SWIZZLE4(SWIZZLE_X, SWIZZLE_Y, SWIZZLE_Z, SWIZZLE_Z), - BRW_SWIZZLE4(SWIZZLE_X, SWIZZLE_Y, SWIZZLE_Z, SWIZZLE_W), - }; - - assert((size >= 1) && (size <= 4)); - return size_swizzles[size - 1]; -} - void src_reg::init() { @@ -75,7 +55,7 @@ src_reg::src_reg(register_file file, int reg, const glsl_type *type) this->file = file; this->reg = reg; if (type && (type->is_scalar() || type->is_vector() || type->is_matrix())) - this->swizzle = swizzle_for_size(type->vector_elements); + this->swizzle = brw_swizzle_for_size(type->vector_elements); else this->swizzle = BRW_SWIZZLE_XYZW; } diff --git a/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp b/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp index e8dab024239..f83b8590329 100644 --- a/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp +++ b/src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp @@ -631,7 +631,7 @@ src_reg::src_reg(class vec4_visitor *v, const struct glsl_type *type) if (type->is_array() || type->is_record()) { this->swizzle = BRW_SWIZZLE_NOOP; } else { - this->swizzle = swizzle_for_size(type->vector_elements); + this->swizzle = brw_swizzle_for_size(type->vector_elements); } this->type = brw_type_for_base_type(type); @@ -1807,7 +1807,7 @@ vec4_visitor::visit(ir_expression *ir) pull->mlen = 1; } - packed_consts.swizzle = swizzle_for_size(ir->type->vector_elements); + packed_consts.swizzle = brw_swizzle_for_size(ir->type->vector_elements); packed_consts.swizzle += BRW_SWIZZLE4(const_offset % 16 / 4, const_offset % 16 / 4, const_offset % 16 / 4, @@ -1955,7 +1955,7 @@ vec4_visitor::visit(ir_dereference_variable *ir) return; if (type->is_scalar() || type->is_vector() || type->is_matrix()) - this->result.swizzle = swizzle_for_size(type->vector_elements); + this->result.swizzle = brw_swizzle_for_size(type->vector_elements); } @@ -2014,7 +2014,7 @@ vec4_visitor::visit(ir_dereference_array *ir) /* If the type is smaller than a vec4, replicate the last channel out. */ if (ir->type->is_scalar() || ir->type->is_vector() || ir->type->is_matrix()) - src.swizzle = swizzle_for_size(ir->type->vector_elements); + src.swizzle = brw_swizzle_for_size(ir->type->vector_elements); else src.swizzle = BRW_SWIZZLE_NOOP; src.type = brw_type_for_base_type(ir->type); @@ -2039,7 +2039,7 @@ vec4_visitor::visit(ir_dereference_record *ir) /* If the type is smaller than a vec4, replicate the last channel out. */ if (ir->type->is_scalar() || ir->type->is_vector() || ir->type->is_matrix()) - this->result.swizzle = swizzle_for_size(ir->type->vector_elements); + this->result.swizzle = brw_swizzle_for_size(ir->type->vector_elements); else this->result.swizzle = BRW_SWIZZLE_NOOP; this->result.type = brw_type_for_base_type(ir->type); @@ -2110,7 +2110,7 @@ vec4_visitor::emit_block_move(dst_reg *dst, src_reg *src, dst->writemask = (1 << type->vector_elements) - 1; - src->swizzle = swizzle_for_size(type->vector_elements); + src->swizzle = brw_swizzle_for_size(type->vector_elements); vec4_instruction *inst = emit(MOV(*dst, *src)); inst->predicate = predicate; @@ -2198,7 +2198,7 @@ vec4_visitor::visit(ir_assignment *ir) */ assert(src.swizzle == (ir->rhs->type->is_matrix() - ? swizzle_for_size(ir->rhs->type->vector_elements) + ? brw_swizzle_for_size(ir->rhs->type->vector_elements) : BRW_SWIZZLE_NOOP)); emit_block_move(&dst, &src, ir->rhs->type, predicate); -- 2.30.2