From: Kenneth Graunke Date: Mon, 27 Jan 2014 23:44:18 +0000 (-0800) Subject: i965: Add Gen8 assembly support for DP Scratch messages. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=29a69744034c37ebe1ba088fbc8bbd39b7a17875;p=mesa.git 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 Reviewed-by: Eric Anholt --- diff --git a/src/mesa/drivers/dri/i965/gen8_instruction.c b/src/mesa/drivers/dri/i965/gen8_instruction.c index 476b3a91130..c9cbab639fe 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 7d8b6054966..89f23644e27 100644 --- a/src/mesa/drivers/dri/i965/gen8_instruction.h +++ b/src/mesa/drivers/dri/i965/gen8_instruction.h @@ -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);