r300/compiler: Use a 4-bit writemask in pair instructions
authorTom Stellard <tstellar@gmail.com>
Fri, 18 Mar 2011 18:06:47 +0000 (11:06 -0700)
committerTom Stellard <tstellar@gmail.com>
Fri, 18 Mar 2011 19:04:20 +0000 (12:04 -0700)
We now use a 4-bit writemask for all instruction types, which makes it
easier to write generic helper functions to manipulte writemasks.

NOTE: This is a candidate for the 7.10 branch.

src/mesa/drivers/dri/r300/compiler/r500_fragprog_emit.c
src/mesa/drivers/dri/r300/compiler/radeon_pair_translate.c
src/mesa/drivers/dri/r300/compiler/radeon_program_pair.h

index 301b444..2f8d6e4 100644 (file)
@@ -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;
index 9e03eb1..fed3a3f 100644 (file)
@@ -289,7 +289,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;
                        }
index 6708b16..d1a435f 100644 (file)
@@ -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;