<div dir="ltr"><div class="gmail_quote"><div dir="ltr">On Tue, Jan 15, 2019 at 7:55 AM Iago Toral Quiroga <<a href="mailto:itoral@igalia.com">itoral@igalia.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Source0 and Destination extract the floating-point precision automatically<br>
from the SrcType and DstType instruction fields respectively when they are<br>
set to types :F or :HF. For Source1 and Source2 operands, we use the new<br>
1-bit fields Src1Type and Src2Type, where 0 means normal precision and 1<br>
means half-precision. Since we always use the type of the destination for<br>
all operands when we emit 3-source instructions, we only need set Src1Type<br>
and Src2Type to 1 when we are emitting a half-precision instruction.<br>
<br>
v2:<br>
 - Set the bit separately for each source based on its type so we can<br>
   do mixed floating-point mode in the future (Topi).<br>
<br>
Reviewed-by: Topi Pohjolainen <<a href="mailto:topi.pohjolainen@intel.com" target="_blank">topi.pohjolainen@intel.com</a>><br>
---<br>
 src/intel/compiler/brw_eu_emit.c | 16 ++++++++++++++++<br>
 1 file changed, 16 insertions(+)<br>
<br>
diff --git a/src/intel/compiler/brw_eu_emit.c b/src/intel/compiler/brw_eu_emit.c<br>
index a785f96b650..2fa89f8a2a3 100644<br>
--- a/src/intel/compiler/brw_eu_emit.c<br>
+++ b/src/intel/compiler/brw_eu_emit.c<br>
@@ -801,6 +801,22 @@ brw_alu3(struct brw_codegen *p, unsigned opcode, struct brw_reg dest,<br>
           */<br>
          brw_inst_set_3src_a16_src_type(devinfo, inst, dest.type);<br>
          brw_inst_set_3src_a16_dst_type(devinfo, inst, dest.type);<br>
+<br>
+         /* From the Bspec: Instruction types<br>
+          *<br>
+          * Three source instructions can use operands with mixed-mode<br>
+          * precision. When SrcType field is set to :f or :hf it defines<br>
+          * precision for source 0 only, and fields Src1Type and Src2Type<br>
+          * define precision for other source operands:<br>
+          *<br>
+          *   0b = :f. Single precision Float (32-bit).<br>
+          *   1b = :hf. Half precision Float (16-bit).<br>
+          */<br>
+         if (src1.type == BRW_REGISTER_TYPE_HF)<br>
+            brw_inst_set_3src_a16_src1_type(devinfo, inst, 1);<br></blockquote><div><br></div><div>Maybe worth throwing in an</div><div><br></div><div>assert(src0.type == BRW_REGISTER_TYPE_F || src0.type == BRW_REGISTER_TYPE_HF);</div><div><br></div><div>just to be sure?  Either way, this and patch 20 are</div><div><br></div><div>Reviewed-by: Jason Ekstrand <<a href="mailto:jason@jlekstrand.net">jason@jlekstrand.net</a>><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
+<br>
+         if (src2.type == BRW_REGISTER_TYPE_HF)<br>
+            brw_inst_set_3src_a16_src2_type(devinfo, inst, 1);<br>
       }<br>
    }<br>
<br>
-- <br>
2.17.1<br>
<br>
_______________________________________________<br>
mesa-dev mailing list<br>
<a href="mailto:mesa-dev@lists.freedesktop.org" target="_blank">mesa-dev@lists.freedesktop.org</a><br>
<a href="https://lists.freedesktop.org/mailman/listinfo/mesa-dev" rel="noreferrer" target="_blank">https://lists.freedesktop.org/mailman/listinfo/mesa-dev</a><br>
</blockquote></div></div>