Mesa (master): i965: Add Gen8 assembly support for DP Scratch messages.

Kenneth Graunke kwg at kemper.freedesktop.org
Thu Feb 20 23:51:23 UTC 2014


Module: Mesa
Branch: master
Commit: 29a69744034c37ebe1ba088fbc8bbd39b7a17875
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=29a69744034c37ebe1ba088fbc8bbd39b7a17875

Author: Kenneth Graunke <kenneth at whitecape.org>
Date:   Mon Jan 27 15:44:18 2014 -0800

i965: Add Gen8 assembly support for DP Scratch messages.

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 at whitecape.org>
Reviewed-by: Eric Anholt <eric at anholt.net>

---

 src/mesa/drivers/dri/i965/gen8_instruction.c |   24 ++++++++++++++++++++++++
 src/mesa/drivers/dri/i965/gen8_instruction.h |   23 +++++++++++++++++++++++
 2 files changed, 47 insertions(+)

diff --git a/src/mesa/drivers/dri/i965/gen8_instruction.c b/src/mesa/drivers/dri/i965/gen8_instruction.c
index 476b3a9..c9cbab6 100644
--- a/src/mesa/drivers/dri/i965/gen8_instruction.c
+++ b/src/mesa/drivers/dri/i965/gen8_instruction.c
@@ -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);
+}
diff --git a/src/mesa/drivers/dri/i965/gen8_instruction.h b/src/mesa/drivers/dri/i965/gen8_instruction.h
index 7d8b605..89f2364 100644
--- a/src/mesa/drivers/dri/i965/gen8_instruction.h
+++ b/src/mesa/drivers/dri/i965/gen8_instruction.h
@@ -204,6 +204,17 @@ 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);
 




More information about the mesa-commit mailing list