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