Mesa (master): r600/sfn: Add support for cube_r600 instruction
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Fri Feb 26 15:08:14 UTC 2021
Module: Mesa
Branch: master
Commit: 66b67f43c0b8d201f78b5e0ca45dc4acd7f46f64
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=66b67f43c0b8d201f78b5e0ca45dc4acd7f46f64
Author: Gert Wollny <gert.wollny at collabora.com>
Date: Wed Dec 23 22:42:07 2020 +0100
r600/sfn: Add support for cube_r600 instruction
Signed-off-by: Gert Wollny <gert.wollny at collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9302>
---
src/gallium/drivers/r600/sfn/sfn_emitaluinstruction.cpp | 17 +++++++++++++++++
src/gallium/drivers/r600/sfn/sfn_emitaluinstruction.h | 1 +
2 files changed, 18 insertions(+)
diff --git a/src/gallium/drivers/r600/sfn/sfn_emitaluinstruction.cpp b/src/gallium/drivers/r600/sfn/sfn_emitaluinstruction.cpp
index cfd1563ff95..337c8c5819b 100644
--- a/src/gallium/drivers/r600/sfn/sfn_emitaluinstruction.cpp
+++ b/src/gallium/drivers/r600/sfn/sfn_emitaluinstruction.cpp
@@ -211,6 +211,8 @@ bool EmitAluInstruction::do_emit(nir_instr* ir)
case nir_op_umad24: return emit_alu_op3(instr, op3_muladd_uint24, {0, 1, 2});
case nir_op_umul24: return emit_alu_op2(instr, op2_mul_uint24);
+
+ case nir_op_cube_r600: return emit_cube(instr);
default:
return false;
}
@@ -263,6 +265,7 @@ unsigned EmitAluInstruction::num_src_comp(const nir_alu_instr& instr)
case nir_op_b32all_iequal3:
case nir_op_b32any_fnequal3:
case nir_op_b32all_fequal3:
+ case nir_op_cube_r600:
return 3;
case nir_op_fdot4:
@@ -288,7 +291,21 @@ unsigned EmitAluInstruction::num_src_comp(const nir_alu_instr& instr)
}
}
+bool EmitAluInstruction::emit_cube(const nir_alu_instr& instr)
+{
+ AluInstruction *ir = nullptr;
+ const uint16_t src0_chan[4] = {2, 2, 0, 1};
+ const uint16_t src1_chan[4] = {1, 0, 2, 2};
+ for (int i = 0; i < 4; ++i) {
+ ir = new AluInstruction(op2_cube, from_nir(instr.dest, i),
+ from_nir(instr.src[0], src0_chan[i]),
+ from_nir(instr.src[0], src1_chan[i]), {alu_write});
+ emit_instruction(ir);
+ }
+ ir->set_flag(alu_last_instr);
+ return true;
+}
void EmitAluInstruction::split_constants(const nir_alu_instr& instr, unsigned nsrc_comp)
{
diff --git a/src/gallium/drivers/r600/sfn/sfn_emitaluinstruction.h b/src/gallium/drivers/r600/sfn/sfn_emitaluinstruction.h
index 859d6d95a70..6a948e7dc2e 100644
--- a/src/gallium/drivers/r600/sfn/sfn_emitaluinstruction.h
+++ b/src/gallium/drivers/r600/sfn/sfn_emitaluinstruction.h
@@ -99,6 +99,7 @@ private:
bool emit_unpack_32_2x16_split_x(const nir_alu_instr& instr);
bool emit_pack_32_2x16_split(const nir_alu_instr& instr);
+ bool emit_cube(const nir_alu_instr& instr);
private:
void make_last(AluInstruction *ir) const;
void split_alu_modifiers(const nir_alu_src &src, const GPRVector::Values& v,
More information about the mesa-commit
mailing list