i965: Add Gen8 assembly support for DP Scratch messages.
authorKenneth Graunke <kenneth@whitecape.org>
Mon, 27 Jan 2014 23:44:18 +0000 (15:44 -0800)
committerKenneth Graunke <kenneth@whitecape.org>
Thu, 20 Feb 2014 23:50:08 +0000 (15:50 -0800)
The new accessors will make it easy to do Gen7-style scratch messages.

v2: Move num_regs assertion from gen8_fs_generator into
    gen8_set_dp_scratch_message() (suggested by Eric).

Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Eric Anholt <eric@anholt.net>
src/mesa/drivers/dri/i965/gen8_instruction.c
src/mesa/drivers/dri/i965/gen8_instruction.h

index 476b3a91130cb4dc1719c68531b5059dcf85326c..c9cbab639fef0292e42d5fb4cf1ca67e451e2f08 100644 (file)
@@ -431,3 +431,27 @@ gen8_set_dp_message(const struct brw_context *brw,
    gen8_set_dp_message_type(inst, msg_type);
    gen8_set_dp_message_control(inst, msg_control);
 }
+
+void
+gen8_set_dp_scratch_message(const struct brw_context *brw,
+                            struct gen8_instruction *inst,
+                            bool write,
+                            bool dword,
+                            bool invalidate_after_read,
+                            unsigned num_regs,
+                            unsigned addr_offset,
+                            unsigned mlen,
+                            unsigned rlen,
+                            bool header_present,
+                            bool end_of_thread)
+{
+   assert(num_regs == 1 || num_regs == 2 || num_regs == 4 || num_regs == 8);
+   gen8_set_message_descriptor(brw, inst, GEN7_SFID_DATAPORT_DATA_CACHE,
+                               mlen, rlen, header_present, end_of_thread);
+   gen8_set_dp_category(inst, 1); /* Scratch Block Read/Write messages */
+   gen8_set_scratch_read_write(inst, write);
+   gen8_set_scratch_type(inst, dword);
+   gen8_set_scratch_invalidate_after_read(inst, invalidate_after_read);
+   gen8_set_scratch_block_size(inst, ffs(num_regs) - 1);
+   gen8_set_scratch_addr_offset(inst, addr_offset);
+}
index 7d8b60549665cb05f69431db5ff0835c8d841677..89f23644e27be9ce11088a162f8161aa62824c5a 100644 (file)
@@ -203,6 +203,17 @@ MD(dp_message_type,     17,  14)
 MD(dp_message_control,  13,   8)
 /** @} */
 
+/**
+ * Scratch message bits:
+ *  @{
+ */
+MD(scratch_read_write,  17,  17) /* 0 = read,  1 = write */
+MD(scratch_type,        16,  16) /* 0 = OWord, 1 = DWord */
+MD(scratch_invalidate_after_read, 15, 15)
+MD(scratch_block_size,  13,  12)
+MD(scratch_addr_offset, 11,   0)
+/** @} */
+
 /**
  * Render Target message function control bits:
  *  @{
@@ -343,6 +354,18 @@ void gen8_set_dp_message(const struct brw_context *brw,
                          bool header_present,
                          bool end_of_thread);
 
+void gen8_set_dp_scratch_message(const struct brw_context *brw,
+                                 struct gen8_instruction *inst,
+                                 bool write,
+                                 bool dword,
+                                 bool invalidate_after_read,
+                                 unsigned num_regs,
+                                 unsigned addr_offset,
+                                 unsigned msg_length,
+                                 unsigned response_length,
+                                 bool header_present,
+                                 bool end_of_thread);
+
 /** Disassemble the instruction. */
 int gen8_disassemble(FILE *file, struct gen8_instruction *inst, int gen);