Mesa (7.10): r300/compiler: Use a 4-bit writemask in pair instructions

Tom Stellard tstellar at kemper.freedesktop.org
Sat Mar 19 03:35:32 UTC 2011


Module: Mesa
Branch: 7.10
Commit: d525a1b4686cf81eeab79c2fda78e756394d8e47
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=d525a1b4686cf81eeab79c2fda78e756394d8e47

Author: Tom Stellard <tstellar at gmail.com>
Date:   Fri Mar 18 11:06:47 2011 -0700

r300/compiler: Use a 4-bit writemask in pair instructions

We now use a 4-bit writemask for all instruction types, which makes it
easier to write generic helper functions to manipulte writemasks.

(cherry picked from commit 9d2ef284bb3ec419b8f53f56bff7f6dd5492ee4c)

---

 .../drivers/dri/r300/compiler/r500_fragprog_emit.c |    3 ++-
 .../dri/r300/compiler/radeon_pair_translate.c      |    2 +-
 .../dri/r300/compiler/radeon_program_pair.h        |    2 +-
 3 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/src/mesa/drivers/dri/r300/compiler/r500_fragprog_emit.c b/src/mesa/drivers/dri/r300/compiler/r500_fragprog_emit.c
index 5e13d30..d1086dd 100644
--- a/src/mesa/drivers/dri/r300/compiler/r500_fragprog_emit.c
+++ b/src/mesa/drivers/dri/r300/compiler/r500_fragprog_emit.c
@@ -259,7 +259,8 @@ static void emit_paired(struct r300_fragment_program_compiler *c, struct rc_pair
 	}
 	code->inst[ip].inst0 |= R500_INST_TEX_SEM_WAIT;
 
-	code->inst[ip].inst0 |= (inst->RGB.WriteMask << 11) | (inst->Alpha.WriteMask << 14);
+	code->inst[ip].inst0 |= (inst->RGB.WriteMask << 11);
+	code->inst[ip].inst0 |= inst->Alpha.WriteMask ? 1 << 14 : 0;
 	code->inst[ip].inst0 |= (inst->RGB.OutputWriteMask << 15) | (inst->Alpha.OutputWriteMask << 18);
 	if (inst->Nop) {
 		code->inst[ip].inst0 |= R500_INST_NOP;
diff --git a/src/mesa/drivers/dri/r300/compiler/radeon_pair_translate.c b/src/mesa/drivers/dri/r300/compiler/radeon_pair_translate.c
index 5126821..e6acea6 100644
--- a/src/mesa/drivers/dri/r300/compiler/radeon_pair_translate.c
+++ b/src/mesa/drivers/dri/r300/compiler/radeon_pair_translate.c
@@ -287,7 +287,7 @@ static void set_pair_instruction(struct r300_fragment_program_compiler *c,
 		}
 
 		if (needalpha) {
-			pair->Alpha.WriteMask |= GET_BIT(inst->DstReg.WriteMask, 3);
+			pair->Alpha.WriteMask |= (GET_BIT(inst->DstReg.WriteMask, 3) << 3);
 			if (pair->Alpha.WriteMask) {
 				pair->Alpha.DestIndex = inst->DstReg.Index;
 			}
diff --git a/src/mesa/drivers/dri/r300/compiler/radeon_program_pair.h b/src/mesa/drivers/dri/r300/compiler/radeon_program_pair.h
index ccf7a00..b9ec0e4 100644
--- a/src/mesa/drivers/dri/r300/compiler/radeon_program_pair.h
+++ b/src/mesa/drivers/dri/r300/compiler/radeon_program_pair.h
@@ -71,7 +71,7 @@ struct rc_pair_instruction_arg {
 struct rc_pair_sub_instruction {
 	unsigned int Opcode:8;
 	unsigned int DestIndex:RC_REGISTER_INDEX_BITS;
-	unsigned int WriteMask:3;
+	unsigned int WriteMask:4;
 	unsigned int Target:2;
 	unsigned int OutputWriteMask:3;
 	unsigned int DepthWriteMask:1;




More information about the mesa-commit mailing list