i965: Factor out oword block read and write message control calculation.
authorFrancisco Jerez <currojerez@riseup.net>
Fri, 9 Dec 2016 03:58:25 +0000 (19:58 -0800)
committerFrancisco Jerez <currojerez@riseup.net>
Thu, 15 Dec 2016 00:50:26 +0000 (16:50 -0800)
We'll need roughly the same logic in other places and it would be
annoying to duplicate it.  Instead factor it out into a function-like
macro that takes the number of dwords per block (which will prove more
convenient than taking the same value in owords or some other unit).

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/mesa/drivers/dri/i965/brw_defines.h
src/mesa/drivers/dri/i965/brw_eu_emit.c

index b1b6248446d5eb0712300e7c4ae255eba355827a..187538091ce1fc702191714bd81ccbdd3d61d702 100644 (file)
@@ -1669,6 +1669,12 @@ enum brw_message_target {
 #define BRW_DATAPORT_OWORD_BLOCK_2_OWORDS     2
 #define BRW_DATAPORT_OWORD_BLOCK_4_OWORDS     3
 #define BRW_DATAPORT_OWORD_BLOCK_8_OWORDS     4
+#define BRW_DATAPORT_OWORD_BLOCK_DWORDS(n)              \
+   ((n) == 4 ? BRW_DATAPORT_OWORD_BLOCK_1_OWORDLOW :    \
+    (n) == 8 ? BRW_DATAPORT_OWORD_BLOCK_2_OWORDS :      \
+    (n) == 16 ? BRW_DATAPORT_OWORD_BLOCK_4_OWORDS :     \
+    (n) == 32 ? BRW_DATAPORT_OWORD_BLOCK_8_OWORDS :     \
+    (abort(), ~0))
 
 #define BRW_DATAPORT_OWORD_DUAL_BLOCK_1OWORD     0
 #define BRW_DATAPORT_OWORD_DUAL_BLOCK_4OWORDS    2
index 341f543dbdb2123d3de10c291e30231c9d9affe9..6141bfb99eaae7a164c3eaf38549dc9136ae4522 100644 (file)
@@ -2056,11 +2056,6 @@ void brw_oword_block_write_scratch(struct brw_codegen *p,
    mrf = retype(mrf, BRW_REGISTER_TYPE_UD);
 
    const unsigned mlen = 1 + num_regs;
-   const unsigned msg_control =
-      (num_regs == 1 ? BRW_DATAPORT_OWORD_BLOCK_2_OWORDS :
-       num_regs == 2 ? BRW_DATAPORT_OWORD_BLOCK_4_OWORDS :
-       num_regs == 4 ? BRW_DATAPORT_OWORD_BLOCK_8_OWORDS : 0);
-   assert(msg_control);
 
    /* Set up the message header.  This is g0, with g0.2 filled with
     * the offset.  We don't want to leave our offset around in g0 or
@@ -2134,7 +2129,7 @@ void brw_oword_block_write_scratch(struct brw_codegen *p,
       brw_set_dp_write_message(p,
                               insn,
                                brw_scratch_surface_idx(p),
-                              msg_control,
+                              BRW_DATAPORT_OWORD_BLOCK_DWORDS(num_regs * 8),
                               msg_type,
                                target_cache,
                               mlen,
@@ -2181,11 +2176,6 @@ brw_oword_block_read_scratch(struct brw_codegen *p,
    dest = retype(dest, BRW_REGISTER_TYPE_UW);
 
    const unsigned rlen = num_regs;
-   const unsigned msg_control =
-      (num_regs == 1 ? BRW_DATAPORT_OWORD_BLOCK_2_OWORDS :
-       num_regs == 2 ? BRW_DATAPORT_OWORD_BLOCK_4_OWORDS :
-       num_regs == 4 ? BRW_DATAPORT_OWORD_BLOCK_8_OWORDS : 0);
-   assert(msg_control);
    const unsigned target_cache =
       (devinfo->gen >= 7 ? GEN7_SFID_DATAPORT_DATA_CACHE :
        devinfo->gen >= 6 ? GEN6_SFID_DATAPORT_RENDER_CACHE :
@@ -2222,7 +2212,7 @@ brw_oword_block_read_scratch(struct brw_codegen *p,
       brw_set_dp_read_message(p,
                              insn,
                               brw_scratch_surface_idx(p),
-                             msg_control,
+                             BRW_DATAPORT_OWORD_BLOCK_DWORDS(num_regs * 8),
                              BRW_DATAPORT_READ_MESSAGE_OWORD_BLOCK_READ, /* msg_type */
                              target_cache,
                              1, /* msg_length */