[Mesa-dev] [PATCH v2 26/78] i965/nir/vec4: Prepare source and destination registers for ALU operations
Eduardo Lima Mitev
elima at igalia.com
Thu Jul 23 03:17:06 PDT 2015
From: Antia Puentes <apuentes at igalia.com>
This patch resolves and initializes the destination and the source
registers that are common to most ALU operations.
---
src/mesa/drivers/dri/i965/brw_vec4_nir.cpp | 19 ++++++++++++++++++-
1 file changed, 18 insertions(+), 1 deletion(-)
diff --git a/src/mesa/drivers/dri/i965/brw_vec4_nir.cpp b/src/mesa/drivers/dri/i965/brw_vec4_nir.cpp
index 1ce3d17..26bd996 100644
--- a/src/mesa/drivers/dri/i965/brw_vec4_nir.cpp
+++ b/src/mesa/drivers/dri/i965/brw_vec4_nir.cpp
@@ -649,10 +649,27 @@ vec4_visitor::nir_emit_intrinsic(nir_intrinsic_instr *instr)
}
}
+static unsigned
+brw_swizzle_for_nir_swizzle(uint8_t swizzle[4])
+{
+ return BRW_SWIZZLE4(swizzle[0], swizzle[1], swizzle[2], swizzle[3]);
+}
+
void
vec4_visitor::nir_emit_alu(nir_alu_instr *instr)
{
- /* @TODO: Not yet implemented */
+ dst_reg dst = get_nir_dest(instr->dest.dest,
+ nir_op_infos[instr->op].output_type);
+ dst.writemask = instr->dest.write_mask;
+
+ src_reg op[4];
+ for (unsigned i = 0; i < nir_op_infos[instr->op].num_inputs; i++) {
+ op[i] = get_nir_src(instr->src[i].src,
+ nir_op_infos[instr->op].input_types[i], 4);
+ op[i].swizzle = brw_swizzle_for_nir_swizzle(instr->src[i].swizzle);
+ op[i].abs = instr->src[i].abs;
+ op[i].negate = instr->src[i].negate;
+ }
}
void
--
2.1.4
More information about the mesa-dev
mailing list