intel/eu: Use descriptor constructors for pixel interpolator messages.
authorFrancisco Jerez <currojerez@riseup.net>
Mon, 9 Jul 2018 23:16:16 +0000 (16:16 -0700)
committerFrancisco Jerez <currojerez@riseup.net>
Tue, 10 Jul 2018 06:46:58 +0000 (23:46 -0700)
v2: Use SET_BITS macro instead of left shift (Ken).

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/intel/compiler/brw_eu.h
src/intel/compiler/brw_eu_emit.c

index e963d95a478dfd90a900f603efef5206d121cbfd..2ea9749070c197a1739bdd97e4c83f2fc2301381 100644 (file)
@@ -350,6 +350,23 @@ brw_dp_write_desc(const struct gen_device_info *devinfo,
               SET_BITS(send_commit_msg, 15, 15));
 }
 
+/**
+ * Construct a message descriptor immediate with the specified pixel
+ * interpolator function controls.
+ */
+static inline uint32_t
+brw_pixel_interp_desc(const struct gen_device_info *devinfo,
+                      unsigned msg_type,
+                      bool noperspective,
+                      unsigned simd_mode,
+                      unsigned slot_group)
+{
+   return (SET_BITS(slot_group, 11, 11) |
+           SET_BITS(msg_type, 13, 12) |
+           SET_BITS(!!noperspective, 14, 14) |
+           SET_BITS(simd_mode, 16, 16));
+}
+
 void brw_urb_WRITE(struct brw_codegen *p,
                   struct brw_reg dest,
                   unsigned msg_reg_nr,
index 97202c7e39b6155fffb9d97120a20da05d4d810c..a77fbb3ac35d5ba1d0309586f9691232c829f5a5 100644 (file)
@@ -3255,25 +3255,23 @@ brw_pixel_interpolator_query(struct brw_codegen *p,
                              unsigned response_length)
 {
    const struct gen_device_info *devinfo = p->devinfo;
-   struct brw_inst *insn;
    const uint16_t exec_size = brw_get_default_exec_size(p);
-   const uint16_t qtr_ctrl = brw_get_default_group(p) / 8;
+   const unsigned slot_group = brw_get_default_group(p) / 16;
+   const unsigned simd_mode = (exec_size == BRW_EXECUTE_16);
+   const unsigned desc =
+      brw_message_desc(devinfo, msg_length, response_length, false) |
+      brw_pixel_interp_desc(devinfo, mode, noperspective, simd_mode,
+                            slot_group);
 
    /* brw_send_indirect_message will automatically use a direct send message
     * if data is actually immediate.
     */
-   insn = brw_send_indirect_message(p,
-                                    GEN7_SFID_PIXEL_INTERPOLATOR,
-                                    dest,
-                                    mrf,
-                                    vec1(data), 0);
-   brw_inst_set_mlen(devinfo, insn, msg_length);
-   brw_inst_set_rlen(devinfo, insn, response_length);
-
-   brw_inst_set_pi_simd_mode(devinfo, insn, exec_size == BRW_EXECUTE_16);
-   brw_inst_set_pi_slot_group(devinfo, insn, qtr_ctrl / 2);
-   brw_inst_set_pi_nopersp(devinfo, insn, noperspective);
-   brw_inst_set_pi_message_type(devinfo, insn, mode);
+   brw_send_indirect_message(p,
+                             GEN7_SFID_PIXEL_INTERPOLATOR,
+                             dest,
+                             mrf,
+                             vec1(data),
+                             desc);
 }
 
 void