mesa: merge the prog_src_register::NegateBase and NegateAbs fields
authorBrian Paul <brianp@vmware.com>
Wed, 15 Apr 2009 04:14:30 +0000 (22:14 -0600)
committerBrian Paul <brianp@vmware.com>
Wed, 15 Apr 2009 04:14:30 +0000 (22:14 -0600)
There's really no need for two negation fields.  This came from the
GL_NV_fragment_program extension.  The new, unified Negate bitfield applies
after the absolute value step.

26 files changed:
src/mesa/drivers/dri/i915/i915_fragprog.c
src/mesa/drivers/dri/i965/brw_vs_constval.c
src/mesa/drivers/dri/i965/brw_vs_emit.c
src/mesa/drivers/dri/i965/brw_wm_fp.c
src/mesa/drivers/dri/i965/brw_wm_glsl.c
src/mesa/drivers/dri/i965/brw_wm_pass0.c
src/mesa/drivers/dri/r200/r200_vertprog.c
src/mesa/drivers/dri/r300/r300_fragprog.c
src/mesa/drivers/dri/r300/r300_fragprog_swizzle.c
src/mesa/drivers/dri/r300/r300_vertprog.c
src/mesa/drivers/dri/r300/r500_fragprog.c
src/mesa/drivers/dri/r300/radeon_nqssadce.c
src/mesa/drivers/dri/r300/radeon_program_alu.c
src/mesa/drivers/dri/r300/radeon_program_pair.c
src/mesa/main/ffvertex_prog.c
src/mesa/main/texenvprogram.c
src/mesa/shader/arbprogparse.c
src/mesa/shader/nvfragparse.c
src/mesa/shader/nvvertparse.c
src/mesa/shader/prog_execute.c
src/mesa/shader/prog_instruction.h
src/mesa/shader/prog_print.c
src/mesa/shader/programopt.c
src/mesa/shader/slang/slang_emit.c
src/mesa/state_tracker/st_cb_bitmap.c
src/mesa/state_tracker/st_mesa_to_tgsi.c

index 52f09a4b1b2f160f20673faa5761cc8901c670d8..a5158de9456f65b13a775b0bd1ecc2880ce8e1bf 100644 (file)
@@ -162,12 +162,12 @@ src_vector(struct i915_fragment_program *p,
                  GET_SWZ(source->Swizzle, 1),
                  GET_SWZ(source->Swizzle, 2), GET_SWZ(source->Swizzle, 3));
 
-   if (source->NegateBase)
+   if (source->Negate)
       src = negate(src,
-                   GET_BIT(source->NegateBase, 0),
-                   GET_BIT(source->NegateBase, 1),
-                   GET_BIT(source->NegateBase, 2),
-                   GET_BIT(source->NegateBase, 3));
+                   GET_BIT(source->Negate, 0),
+                   GET_BIT(source->Negate, 1),
+                   GET_BIT(source->Negate, 2),
+                   GET_BIT(source->Negate, 3));
 
    return src;
 }
index d29eb17f8cf875e155597d6003d83fb7fbc77d53..2637344b48248aa7ba2a0970fe8295cfab7f2702 100644 (file)
@@ -96,7 +96,7 @@ static GLubyte get_active( struct tracker *t,
                           struct prog_src_register src )
 {
    GLuint i;
-   GLubyte active = src.NegateBase; /* NOTE! */
+   GLubyte active = src.Negate; /* NOTE! */
 
    if (src.RelAddr)
       return 0xf;
index 2ee63129bc674d52435c661b7345180b416add02..42f6a991426519c85262e86f40df5b1c4914869d 100644 (file)
@@ -899,7 +899,7 @@ static struct brw_reg get_arg( struct brw_vs_compile *c,
 
    /* Note this is ok for non-swizzle instructions: 
     */
-   reg.negate = src->NegateBase ? 1 : 0;   
+   reg.negate = src->Negate ? 1 : 0;   
 
    return reg;
 }
@@ -945,7 +945,7 @@ static void emit_swz( struct brw_vs_compile *c,
    GLuint ones_mask = 0;
    GLuint src_mask = 0;
    GLubyte src_swz[4];
-   GLboolean need_tmp = (src.NegateBase &&
+   GLboolean need_tmp = (src.Negate &&
                         dst.file != BRW_GENERAL_REGISTER_FILE);
    struct brw_reg tmp = dst;
    GLuint i;
@@ -997,8 +997,8 @@ static void emit_swz( struct brw_vs_compile *c,
    if (ones_mask) 
       brw_MOV(p, brw_writemask(tmp, ones_mask), brw_imm_f(1));
 
-   if (src.NegateBase)
-      brw_MOV(p, brw_writemask(tmp, src.NegateBase), negate(tmp));
+   if (src.Negate)
+      brw_MOV(p, brw_writemask(tmp, src.Negate), negate(tmp));
    
    if (need_tmp) {
       brw_MOV(p, dst, tmp);
index a7f5f1b9a28c21d232a92adc3ca32b130ae25d70..1798d842c799ba5e4406c4b3ca483b9285529930 100644 (file)
@@ -80,9 +80,8 @@ static struct prog_src_register src_reg(GLuint file, GLuint idx)
    reg.Index = idx;
    reg.Swizzle = SWIZZLE_NOOP;
    reg.RelAddr = 0;
-   reg.NegateBase = 0;
+   reg.Negate = NEGATE_NONE;
    reg.Abs = 0;
-   reg.NegateAbs = 0;
    return reg;
 }
 
@@ -569,7 +568,7 @@ static void precalc_dst( struct brw_wm_compile *c,
                    src_undef(),
                    src_undef());
       /* Avoid letting negation flag of src0 affect our 1 constant. */
-      swz->SrcReg[0].NegateBase &= ~NEGATE_X;
+      swz->SrcReg[0].Negate &= ~NEGATE_X;
    }
    if (dst.WriteMask & WRITEMASK_W) {
       /* dst.w = mov src1.w
@@ -604,7 +603,7 @@ static void precalc_lit( struct brw_wm_compile *c,
                    src_undef(),
                    src_undef());
       /* Avoid letting the negation flag of src0 affect our 1 constant. */
-      swz->SrcReg[0].NegateBase = 0;
+      swz->SrcReg[0].Negate = NEGATE_NONE;
    }
 
    if (dst.WriteMask & WRITEMASK_YZ) {
@@ -651,7 +650,7 @@ static void precalc_tex( struct brw_wm_compile *c,
                      src0,
                      src_undef(),
                      src_undef());
-       out->SrcReg[0].NegateBase = 0;
+       out->SrcReg[0].Negate = NEGATE_NONE;
        out->SrcReg[0].Abs = 1;
 
        /* tmp0 = MAX(coord.X, coord.Y) */
@@ -1050,14 +1049,14 @@ void brw_wm_pass_fp( struct brw_wm_compile *c )
       case OPCODE_ABS:
         out = emit_insn(c, inst);
         out->Opcode = OPCODE_MOV;
-        out->SrcReg[0].NegateBase = 0;
+        out->SrcReg[0].Negate = NEGATE_NONE;
         out->SrcReg[0].Abs = 1;
         break;
 
       case OPCODE_SUB: 
         out = emit_insn(c, inst);
         out->Opcode = OPCODE_ADD;
-        out->SrcReg[1].NegateBase ^= 0xf;
+        out->SrcReg[1].Negate ^= NEGATE_XYZW;
         break;
 
       case OPCODE_SCS: 
index 49fea2e41ad740092cd0e88ba36c73de3cdcce57..385efd2dd389fcf69861750ec656263f38a336b2 100644 (file)
@@ -340,7 +340,7 @@ get_src_reg_const(struct brw_wm_compile *c,
    const_reg = stride(const_reg, 0, 1, 0);
    const_reg.subnr = component * 4;
 
-   if (src->NegateBase)
+   if (src->Negate & (1 << component))
       const_reg = negate(const_reg);
    if (src->Abs)
       const_reg = brw_abs(const_reg);
@@ -377,7 +377,7 @@ static struct brw_reg get_src_reg(struct brw_wm_compile *c,
     else {
        /* other type of source register */
        return get_reg(c, src->File, src->Index, component, nr, 
-                      src->NegateBase, src->Abs);
+                      src->Negate, src->Abs);
     }
 }
 
@@ -402,7 +402,7 @@ static struct brw_reg get_src_reg_imm(struct brw_wm_compile *c,
        const GLfloat *param =
           c->fp->program.Base.Parameters->ParameterValues[src->Index];
        GLfloat value = param[component];
-       if (src->NegateBase)
+       if (src->Negate & (1 << channel))
           value = -value;
        if (src->Abs)
           value = FABSF(value);
index 2debd0678a58cbec7c6af2f44dd30d999ff0c211..92142764f5d1d560c8e98950c916b96d06682686 100644 (file)
@@ -322,7 +322,7 @@ static struct brw_wm_ref *get_new_ref( struct brw_wm_compile *c,
       newref->value->lastuse = newref;
    }
 
-   if (src.NegateBase & (1<<i))
+   if (src.Negate & (1 << i))
       newref->hw_reg.negate ^= 1;
 
    if (src.Abs) {
index a2561df579d11acbbf1482e250365660b6b375b8..4ce93b514535c2d0249e8f744f84d5aa5685755a 100644 (file)
@@ -290,7 +290,7 @@ static unsigned long t_src(struct r200_vertex_program *vp, struct prog_src_regis
                        t_swizzle(GET_SWZ(src->Swizzle, 2)),
                        t_swizzle(GET_SWZ(src->Swizzle, 3)),
                        t_src_class(src->File),
-                       src->NegateBase) | (src->RelAddr << 4);
+                       src->Negate) | (src->RelAddr << 4);
 }
 
 static unsigned long t_src_scalar(struct r200_vertex_program *vp, struct prog_src_register *src)
@@ -302,7 +302,7 @@ static unsigned long t_src_scalar(struct r200_vertex_program *vp, struct prog_sr
                        t_swizzle(GET_SWZ(src->Swizzle, 0)),
                        t_swizzle(GET_SWZ(src->Swizzle, 0)),
                        t_src_class(src->File),
-                       src->NegateBase ? VSF_FLAG_ALL : VSF_FLAG_NONE) | (src->RelAddr << 4);
+                       src->Negate ? VSF_FLAG_ALL : VSF_FLAG_NONE) | (src->RelAddr << 4);
 }
 
 static unsigned long t_opcode(enum prog_opcode opcode)
@@ -700,7 +700,7 @@ static GLboolean r200_translate_vertex_program(GLcontext *ctx, struct r200_verte
                   t_swizzle(GET_SWZ(src[1].Swizzle, 0)),
                   SWIZZLE_ZERO,
                   t_src_class(src[0].File),
-                  src[0].NegateBase) | (src[0].RelAddr << 4);
+                  src[0].Negate) | (src[0].RelAddr << 4);
            o_inst->src1 = UNUSED_SRC_0;
            o_inst->src2 = UNUSED_SRC_0;
         }
@@ -712,12 +712,12 @@ static GLboolean r200_translate_vertex_program(GLcontext *ctx, struct r200_verte
                   t_swizzle(GET_SWZ(src[0].Swizzle, 0)),
                   SWIZZLE_ZERO, SWIZZLE_ZERO, SWIZZLE_ZERO,
                   t_src_class(src[0].File),
-                  src[0].NegateBase ? VSF_FLAG_ALL : VSF_FLAG_NONE) | (src[0].RelAddr << 4);
+                  src[0].Negate ? VSF_FLAG_ALL : VSF_FLAG_NONE) | (src[0].RelAddr << 4);
            o_inst->src1 = MAKE_VSF_SOURCE(t_src_index(vp, &src[1]),
                   SWIZZLE_ZERO, SWIZZLE_ZERO,
                   t_swizzle(GET_SWZ(src[1].Swizzle, 0)), SWIZZLE_ZERO,
                   t_src_class(src[1].File),
-                  src[1].NegateBase ? VSF_FLAG_ALL : VSF_FLAG_NONE) | (src[1].RelAddr << 4);
+                  src[1].Negate ? VSF_FLAG_ALL : VSF_FLAG_NONE) | (src[1].RelAddr << 4);
            o_inst->src2 = UNUSED_SRC_1;
            o_inst++;
 
@@ -766,11 +766,11 @@ if ((o_inst - vp->instr) == 31) {
 o_inst->src1 = MAKE_VSF_SOURCE(t_src_index(vp, &src[1]),
                        SWIZZLE_X, SWIZZLE_X, SWIZZLE_X, SWIZZLE_X,
                        t_src_class(src[1].File),
-                       src[1].NegateBase) | (src[1].RelAddr << 4);
+                       src[1].Negate) | (src[1].RelAddr << 4);
 o_inst->src2 = MAKE_VSF_SOURCE(t_src_index(vp, &src[1]),
                        SWIZZLE_Y, SWIZZLE_Y, SWIZZLE_Y, SWIZZLE_Y,
                        t_src_class(src[1].File),
-                       src[1].NegateBase) | (src[1].RelAddr << 4);
+                       src[1].Negate) | (src[1].RelAddr << 4);
 }
 else {
         o_inst->src1 = t_src(vp, &src[1]);
@@ -792,7 +792,7 @@ else {
                t_swizzle(GET_SWZ(src[0].Swizzle, 2)),
                SWIZZLE_ZERO,
                t_src_class(src[0].File),
-               src[0].NegateBase) | (src[0].RelAddr << 4);
+               src[0].Negate) | (src[0].RelAddr << 4);
 
         o_inst->src1 = MAKE_VSF_SOURCE(t_src_index(vp, &src[1]),
                t_swizzle(GET_SWZ(src[1].Swizzle, 0)),
@@ -800,7 +800,7 @@ else {
                t_swizzle(GET_SWZ(src[1].Swizzle, 2)),
                SWIZZLE_ZERO,
                t_src_class(src[1].File),
-               src[1].NegateBase) | (src[1].RelAddr << 4);
+               src[1].Negate) | (src[1].RelAddr << 4);
 
         o_inst->src2 = UNUSED_SRC_1;
         goto next;
@@ -815,7 +815,7 @@ else {
                t_swizzle(GET_SWZ(src[0].Swizzle, 2)),
                VSF_IN_COMPONENT_ONE,
                t_src_class(src[0].File),
-               src[0].NegateBase) | (src[0].RelAddr << 4);
+               src[0].Negate) | (src[0].RelAddr << 4);
         o_inst->src1 = t_src(vp, &src[1]);
         o_inst->src2 = UNUSED_SRC_1;
         goto next;
@@ -831,7 +831,7 @@ else {
                t_swizzle(GET_SWZ(src[1].Swizzle, 2)),
                t_swizzle(GET_SWZ(src[1].Swizzle, 3)),
                t_src_class(src[1].File),
-               (!src[1].NegateBase) ? VSF_FLAG_ALL : VSF_FLAG_NONE) | (src[1].RelAddr << 4);
+               (!src[1].Negate) ? VSF_FLAG_ALL : VSF_FLAG_NONE) | (src[1].RelAddr << 4);
         o_inst->src2 = UNUSED_SRC_1;
         goto next;
 
@@ -846,7 +846,7 @@ else {
                t_swizzle(GET_SWZ(src[0].Swizzle, 2)),
                t_swizzle(GET_SWZ(src[0].Swizzle, 3)),
                t_src_class(src[0].File),
-               (!src[0].NegateBase) ? VSF_FLAG_ALL : VSF_FLAG_NONE) | (src[0].RelAddr << 4);
+               (!src[0].Negate) ? VSF_FLAG_ALL : VSF_FLAG_NONE) | (src[0].RelAddr << 4);
         o_inst->src2 = UNUSED_SRC_1;
         goto next;
 
@@ -874,7 +874,7 @@ else {
                VSF_IN_COMPONENT_W,
                VSF_IN_CLASS_TMP,
                /* Not 100% sure about this */
-               (!src[0].NegateBase) ? VSF_FLAG_ALL : VSF_FLAG_NONE/*VSF_FLAG_ALL*/);
+               (!src[0].Negate) ? VSF_FLAG_ALL : VSF_FLAG_NONE/*VSF_FLAG_ALL*/);
 
         o_inst->src2 = UNUSED_SRC_0;
         u_temp_i--;
@@ -899,7 +899,7 @@ else {
                t_swizzle(GET_SWZ(src[0].Swizzle, 0)), // x
                t_swizzle(GET_SWZ(src[0].Swizzle, 3)), // w
                t_src_class(src[0].File),
-               src[0].NegateBase) | (src[0].RelAddr << 4);
+               src[0].Negate) | (src[0].RelAddr << 4);
 
         o_inst->src1 = MAKE_VSF_SOURCE(t_src_index(vp, &src[1]),
                t_swizzle(GET_SWZ(src[1].Swizzle, 2)), // z
@@ -907,7 +907,7 @@ else {
                t_swizzle(GET_SWZ(src[1].Swizzle, 1)), // y
                t_swizzle(GET_SWZ(src[1].Swizzle, 3)), // w
                t_src_class(src[1].File),
-               src[1].NegateBase) | (src[1].RelAddr << 4);
+               src[1].Negate) | (src[1].RelAddr << 4);
 
         o_inst->src2 = UNUSED_SRC_1;
         o_inst++;
@@ -922,7 +922,7 @@ else {
                t_swizzle(GET_SWZ(src[1].Swizzle, 0)), // x
                t_swizzle(GET_SWZ(src[1].Swizzle, 3)), // w
                t_src_class(src[1].File),
-               (!src[1].NegateBase) ? VSF_FLAG_ALL : VSF_FLAG_NONE) | (src[1].RelAddr << 4);
+               (!src[1].Negate) ? VSF_FLAG_ALL : VSF_FLAG_NONE) | (src[1].RelAddr << 4);
 
         o_inst->src1 = MAKE_VSF_SOURCE(t_src_index(vp, &src[0]),
                t_swizzle(GET_SWZ(src[0].Swizzle, 2)), // z
@@ -930,7 +930,7 @@ else {
                t_swizzle(GET_SWZ(src[0].Swizzle, 1)), // y
                t_swizzle(GET_SWZ(src[0].Swizzle, 3)), // w
                t_src_class(src[0].File),
-               src[0].NegateBase) | (src[0].RelAddr << 4);
+               src[0].Negate) | (src[0].RelAddr << 4);
 
         o_inst->src2 = MAKE_VSF_SOURCE(u_temp_i+1,
                VSF_IN_COMPONENT_X,
index 32182bb66744ea18ca219eca4749e8ce75c1d2ee..873cde44144394c361ee09f31478dd1f70277b4a 100644 (file)
@@ -214,9 +214,9 @@ static GLboolean transform_TEX(
                 *   r  < tex  <=>      -tex+r < 0
                 *   r >= tex  <=> not (-tex+r < 0 */
                if (comparefunc == GL_LESS || comparefunc == GL_GEQUAL)
-                       tgt[1].SrcReg[2].NegateBase = tgt[0].SrcReg[2].NegateBase ^ NEGATE_XYZW;
+                       tgt[1].SrcReg[2].Negate = tgt[0].SrcReg[2].Negate ^ NEGATE_XYZW;
                else
-                       tgt[1].SrcReg[0].NegateBase = tgt[0].SrcReg[0].NegateBase ^ NEGATE_XYZW;
+                       tgt[1].SrcReg[0].Negate = tgt[0].SrcReg[0].Negate ^ NEGATE_XYZW;
 
                tgt[2].Opcode = OPCODE_CMP;
                tgt[2].DstReg = orig_inst->DstReg;
index a86d2bd47128e1c2b3528a2b2cabb547b74203be..191853ac1f2848d28f5220333a571938114613ac 100644 (file)
@@ -92,7 +92,7 @@ static const struct swizzle_data* lookup_native_swizzle(GLuint swizzle)
 GLboolean r300FPIsNativeSwizzle(GLuint opcode, struct prog_src_register reg)
 {
        if (reg.Abs)
-               reg.NegateBase = 0;
+               reg.Negate = NEGATE_NONE;
 
        if (opcode == OPCODE_KIL ||
            opcode == OPCODE_TEX ||
@@ -100,7 +100,8 @@ GLboolean r300FPIsNativeSwizzle(GLuint opcode, struct prog_src_register reg)
            opcode == OPCODE_TXP) {
                int j;
 
-               if (reg.Abs || reg.NegateBase != (15*reg.NegateAbs))
+               if (reg.Abs || (reg.Negate != NEGATE_XYZW &&
+                                reg.Negate != NEGATE_NONE))
                        return GL_FALSE;
 
                for(j = 0; j < 4; ++j) {
@@ -121,7 +122,7 @@ GLboolean r300FPIsNativeSwizzle(GLuint opcode, struct prog_src_register reg)
                if (GET_SWZ(reg.Swizzle, j) != SWIZZLE_NIL)
                        relevant |= 1 << j;
 
-       if ((reg.NegateBase & relevant) && (reg.NegateBase & relevant) != relevant)
+       if ((reg.Negate & relevant) && (reg.Negate & relevant) != relevant)
                return GL_FALSE;
 
        if (!lookup_native_swizzle(reg.Swizzle))
@@ -137,7 +138,7 @@ GLboolean r300FPIsNativeSwizzle(GLuint opcode, struct prog_src_register reg)
 void r300FPBuildSwizzle(struct nqssadce_state *s, struct prog_dst_register dst, struct prog_src_register src)
 {
        if (src.Abs)
-               src.NegateBase = 0;
+               src.Negate = NEGATE_NONE;
 
        while(dst.WriteMask) {
                const struct swizzle_data *best_swizzle = 0;
@@ -170,11 +171,11 @@ void r300FPBuildSwizzle(struct nqssadce_state *s, struct prog_dst_register dst,
                        }
                }
 
-               if ((src.NegateBase & best_matchmask) != 0) {
-                       best_matchmask &= src.NegateBase;
-                       rgbnegate = !src.NegateAbs;
+               if ((src.Negate & best_matchmask) != 0) {
+                       best_matchmask &= src.Negate;
+                       rgbnegate = !src.Negate;
                } else {
-                       rgbnegate = src.NegateAbs;
+                       rgbnegate = src.Negate;
                }
 
                struct prog_instruction *inst;
index 50806575ced0a659e264543f9fecc1871ce9cb1b..146daa367cd62b226c6663ad221048370870379e 100644 (file)
@@ -245,7 +245,7 @@ static unsigned long t_src_index(struct r300_vertex_program *vp,
 static unsigned long t_src(struct r300_vertex_program *vp,
                           struct prog_src_register *src)
 {
-       /* src->NegateBase uses the NEGATE_ flags from program_instruction.h,
+       /* src->Negate uses the NEGATE_ flags from program_instruction.h,
         * which equal our VSF_FLAGS_ values, so it's safe to just pass it here.
         */
        return PVS_SRC_OPERAND(t_src_index(vp, src),
@@ -254,13 +254,13 @@ static unsigned long t_src(struct r300_vertex_program *vp,
                               t_swizzle(GET_SWZ(src->Swizzle, 2)),
                               t_swizzle(GET_SWZ(src->Swizzle, 3)),
                               t_src_class(src->File),
-                              src->NegateBase) | (src->RelAddr << 4);
+                              src->Negate) | (src->RelAddr << 4);
 }
 
 static unsigned long t_src_scalar(struct r300_vertex_program *vp,
                                  struct prog_src_register *src)
 {
-       /* src->NegateBase uses the NEGATE_ flags from program_instruction.h,
+       /* src->Negate uses the NEGATE_ flags from program_instruction.h,
         * which equal our VSF_FLAGS_ values, so it's safe to just pass it here.
         */
        return PVS_SRC_OPERAND(t_src_index(vp, src),
@@ -269,8 +269,7 @@ static unsigned long t_src_scalar(struct r300_vertex_program *vp,
                               t_swizzle(GET_SWZ(src->Swizzle, 0)),
                               t_swizzle(GET_SWZ(src->Swizzle, 0)),
                               t_src_class(src->File),
-                              src->
-                              NegateBase ? VSF_FLAG_ALL : VSF_FLAG_NONE) |
+                              src->Negate ? VSF_FLAG_ALL : VSF_FLAG_NONE) |
            (src->RelAddr << 4);
 }
 
@@ -307,7 +306,7 @@ static GLuint *r300TranslateOpcodeABS(struct r300_vertex_program *vp,
                                  t_swizzle(GET_SWZ(src[0].Swizzle, 3)),
                                  t_src_class(src[0].File),
                                  (!src[0].
-                                  NegateBase) ? VSF_FLAG_ALL : VSF_FLAG_NONE) |
+                                  Negate) ? VSF_FLAG_ALL : VSF_FLAG_NONE) |
            (src[0].RelAddr << 4);
        inst[3] = 0;
 
@@ -369,8 +368,7 @@ static GLuint *r300TranslateOpcodeDP3(struct r300_vertex_program *vp,
                                  t_swizzle(GET_SWZ(src[0].Swizzle, 2)),
                                  SWIZZLE_ZERO,
                                  t_src_class(src[0].File),
-                                 src[0].
-                                 NegateBase ? VSF_FLAG_XYZ : VSF_FLAG_NONE) |
+                                 src[0].Negate ? VSF_FLAG_XYZ : VSF_FLAG_NONE) |
            (src[0].RelAddr << 4);
        inst[2] =
            PVS_SRC_OPERAND(t_src_index(vp, &src[1]),
@@ -378,8 +376,7 @@ static GLuint *r300TranslateOpcodeDP3(struct r300_vertex_program *vp,
                            t_swizzle(GET_SWZ(src[1].Swizzle, 1)),
                            t_swizzle(GET_SWZ(src[1].Swizzle, 2)), SWIZZLE_ZERO,
                            t_src_class(src[1].File),
-                           src[1].
-                           NegateBase ? VSF_FLAG_XYZ : VSF_FLAG_NONE) |
+                           src[1].Negate ? VSF_FLAG_XYZ : VSF_FLAG_NONE) |
            (src[1].RelAddr << 4);
        inst[3] = __CONST(1, SWIZZLE_ZERO);
 
@@ -422,8 +419,7 @@ static GLuint *r300TranslateOpcodeDPH(struct r300_vertex_program *vp,
                                  t_swizzle(GET_SWZ(src[0].Swizzle, 2)),
                                  PVS_SRC_SELECT_FORCE_1,
                                  t_src_class(src[0].File),
-                                 src[0].
-                                 NegateBase ? VSF_FLAG_XYZ : VSF_FLAG_NONE) |
+                                 src[0].Negate ? VSF_FLAG_XYZ : VSF_FLAG_NONE) |
            (src[0].RelAddr << 4);
        inst[2] = t_src(vp, &src[1]);
        inst[3] = __CONST(1, SWIZZLE_ZERO);
@@ -519,7 +515,7 @@ static GLuint *r300TranslateOpcodeFLR(struct r300_vertex_program *vp,
                                  PVS_SRC_SELECT_W, PVS_SRC_REG_TEMPORARY,
                                  /* Not 100% sure about this */
                                  (!src[0].
-                                  NegateBase) ? VSF_FLAG_ALL : VSF_FLAG_NONE
+                                  Negate) ? VSF_FLAG_ALL : VSF_FLAG_NONE
                                  /*VSF_FLAG_ALL */ );
        inst[3] = __CONST(0, SWIZZLE_ZERO);
        (*u_temp_i)--;
@@ -564,8 +560,7 @@ static GLuint *r300TranslateOpcodeLG2(struct r300_vertex_program *vp,
                                  t_swizzle(GET_SWZ(src[0].Swizzle, 0)),
                                  t_swizzle(GET_SWZ(src[0].Swizzle, 0)),
                                  t_src_class(src[0].File),
-                                 src[0].
-                                 NegateBase ? VSF_FLAG_ALL : VSF_FLAG_NONE) |
+                                 src[0].Negate ? VSF_FLAG_ALL : VSF_FLAG_NONE) |
            (src[0].RelAddr << 4);
        inst[2] = __CONST(0, SWIZZLE_ZERO);
        inst[3] = __CONST(0, SWIZZLE_ZERO);
@@ -592,24 +587,21 @@ static GLuint *r300TranslateOpcodeLIT(struct r300_vertex_program *vp,
                                  PVS_SRC_SELECT_FORCE_0,       // Z
                                  t_swizzle(GET_SWZ(src[0].Swizzle, 1)),        // Y
                                  t_src_class(src[0].File),
-                                 src[0].
-                                 NegateBase ? VSF_FLAG_ALL : VSF_FLAG_NONE) |
+                                 src[0].Negate ? VSF_FLAG_ALL : VSF_FLAG_NONE) |
            (src[0].RelAddr << 4);
        inst[2] = PVS_SRC_OPERAND(t_src_index(vp, &src[0]), t_swizzle(GET_SWZ(src[0].Swizzle, 1)),      // Y
                                  t_swizzle(GET_SWZ(src[0].Swizzle, 3)),        // W
                                  PVS_SRC_SELECT_FORCE_0,       // Z
                                  t_swizzle(GET_SWZ(src[0].Swizzle, 0)),        // X
                                  t_src_class(src[0].File),
-                                 src[0].
-                                 NegateBase ? VSF_FLAG_ALL : VSF_FLAG_NONE) |
+                                 src[0].Negate ? VSF_FLAG_ALL : VSF_FLAG_NONE) |
            (src[0].RelAddr << 4);
        inst[3] = PVS_SRC_OPERAND(t_src_index(vp, &src[0]), t_swizzle(GET_SWZ(src[0].Swizzle, 1)),      // Y
                                  t_swizzle(GET_SWZ(src[0].Swizzle, 0)),        // X
                                  PVS_SRC_SELECT_FORCE_0,       // Z
                                  t_swizzle(GET_SWZ(src[0].Swizzle, 3)),        // W
                                  t_src_class(src[0].File),
-                                 src[0].
-                                 NegateBase ? VSF_FLAG_ALL : VSF_FLAG_NONE) |
+                                 src[0].Negate ? VSF_FLAG_ALL : VSF_FLAG_NONE) |
            (src[0].RelAddr << 4);
 
        return inst;
@@ -837,7 +829,7 @@ static GLuint *r300TranslateOpcodeSUB(struct r300_vertex_program *vp,
                                  t_swizzle(GET_SWZ(src[1].Swizzle, 3)),
                                  t_src_class(src[1].File),
                                  (!src[1].
-                                  NegateBase) ? VSF_FLAG_ALL : VSF_FLAG_NONE) |
+                                  Negate) ? VSF_FLAG_ALL : VSF_FLAG_NONE) |
            (src[1].RelAddr << 4);
        inst[3] = 0;
 #else
@@ -857,7 +849,7 @@ static GLuint *r300TranslateOpcodeSUB(struct r300_vertex_program *vp,
                                  t_swizzle(GET_SWZ(src[1].Swizzle, 3)),
                                  t_src_class(src[1].File),
                                  (!src[1].
-                                  NegateBase) ? VSF_FLAG_ALL : VSF_FLAG_NONE) |
+                                  Negate) ? VSF_FLAG_ALL : VSF_FLAG_NONE) |
            (src[1].RelAddr << 4);
 #endif
 
@@ -905,16 +897,14 @@ static GLuint *r300TranslateOpcodeXPD(struct r300_vertex_program *vp,
                                  t_swizzle(GET_SWZ(src[0].Swizzle, 0)),        // X
                                  t_swizzle(GET_SWZ(src[0].Swizzle, 3)),        // W
                                  t_src_class(src[0].File),
-                                 src[0].
-                                 NegateBase ? VSF_FLAG_ALL : VSF_FLAG_NONE) |
+                                 src[0].Negate ? VSF_FLAG_ALL : VSF_FLAG_NONE) |
            (src[0].RelAddr << 4);
        inst[2] = PVS_SRC_OPERAND(t_src_index(vp, &src[1]), t_swizzle(GET_SWZ(src[1].Swizzle, 2)),      // Z
                                  t_swizzle(GET_SWZ(src[1].Swizzle, 0)),        // X
                                  t_swizzle(GET_SWZ(src[1].Swizzle, 1)),        // Y
                                  t_swizzle(GET_SWZ(src[1].Swizzle, 3)),        // W
                                  t_src_class(src[1].File),
-                                 src[1].
-                                 NegateBase ? VSF_FLAG_ALL : VSF_FLAG_NONE) |
+                                 src[1].Negate ? VSF_FLAG_ALL : VSF_FLAG_NONE) |
            (src[1].RelAddr << 4);
        inst[3] = __CONST(1, SWIZZLE_ZERO);
        inst += 4;
@@ -931,15 +921,14 @@ static GLuint *r300TranslateOpcodeXPD(struct r300_vertex_program *vp,
                                  t_swizzle(GET_SWZ(src[1].Swizzle, 3)),        // W
                                  t_src_class(src[1].File),
                                  (!src[1].
-                                  NegateBase) ? VSF_FLAG_ALL : VSF_FLAG_NONE) |
+                                  Negate) ? VSF_FLAG_ALL : VSF_FLAG_NONE) |
            (src[1].RelAddr << 4);
        inst[2] = PVS_SRC_OPERAND(t_src_index(vp, &src[0]), t_swizzle(GET_SWZ(src[0].Swizzle, 2)),      // Z
                                  t_swizzle(GET_SWZ(src[0].Swizzle, 0)),        // X
                                  t_swizzle(GET_SWZ(src[0].Swizzle, 1)),        // Y
                                  t_swizzle(GET_SWZ(src[0].Swizzle, 3)),        // W
                                  t_src_class(src[0].File),
-                                 src[0].
-                                 NegateBase ? VSF_FLAG_ALL : VSF_FLAG_NONE) |
+                                 src[0].Negate ? VSF_FLAG_ALL : VSF_FLAG_NONE) |
            (src[0].RelAddr << 4);
        inst[3] =
            PVS_SRC_OPERAND(*u_temp_i, PVS_SRC_SELECT_X, PVS_SRC_SELECT_Y,
index 07a2a7b17ce5ca3b102460e2d5989ef0131e6d94..292573de893e4282d12c702ca390c5b4598d797d 100644 (file)
@@ -156,9 +156,9 @@ static GLboolean transform_TEX(
                 *   r  < tex  <=>      -tex+r < 0
                 *   r >= tex  <=> not (-tex+r < 0 */
                if (comparefunc == GL_LESS || comparefunc == GL_GEQUAL)
-                       tgt[1].SrcReg[2].NegateBase = tgt[0].SrcReg[2].NegateBase ^ NEGATE_XYZW;
+                       tgt[1].SrcReg[2].Negate = tgt[0].SrcReg[2].Negate ^ NEGATE_XYZW;
                else
-                       tgt[1].SrcReg[0].NegateBase = tgt[0].SrcReg[0].NegateBase ^ NEGATE_XYZW;
+                       tgt[1].SrcReg[0].Negate = tgt[0].SrcReg[0].Negate ^ NEGATE_XYZW;
 
                tgt[2].Opcode = OPCODE_CMP;
                tgt[2].DstReg = orig_inst->DstReg;
@@ -314,8 +314,8 @@ static GLboolean is_native_swizzle(GLuint opcode, struct prog_src_register reg)
                if (reg.Abs)
                        return GL_FALSE;
 
-               if (reg.NegateAbs)
-                       reg.NegateBase ^= 15;
+               if (reg.Negate)
+                       reg.Negate ^= NEGATE_XYZW;
 
                if (opcode == OPCODE_KIL) {
                        if (reg.Swizzle != SWIZZLE_NOOP)
@@ -324,7 +324,7 @@ static GLboolean is_native_swizzle(GLuint opcode, struct prog_src_register reg)
                        for(i = 0; i < 4; ++i) {
                                GLuint swz = GET_SWZ(reg.Swizzle, i);
                                if (swz == SWIZZLE_NIL) {
-                                       reg.NegateBase &= ~(1 << i);
+                                       reg.Negate &= ~(1 << i);
                                        continue;
                                }
                                if (swz >= 4)
@@ -332,15 +332,14 @@ static GLboolean is_native_swizzle(GLuint opcode, struct prog_src_register reg)
                        }
                }
 
-               if (reg.NegateBase)
+               if (reg.Negate)
                        return GL_FALSE;
 
                return GL_TRUE;
        } else if (opcode == OPCODE_DDX || opcode == OPCODE_DDY) {
                /* DDX/MDH and DDY/MDV explicitly ignore incoming swizzles;
                 * if it doesn't fit perfectly into a .xyzw case... */
-               if (reg.Swizzle == SWIZZLE_NOOP && !reg.Abs
-                               && !reg.NegateBase && !reg.NegateAbs)
+               if (reg.Swizzle == SWIZZLE_NOOP && !reg.Abs && !reg.Negate)
                        return GL_TRUE;
 
                return GL_FALSE;
@@ -355,7 +354,7 @@ static GLboolean is_native_swizzle(GLuint opcode, struct prog_src_register reg)
                        if (swz != SWIZZLE_NIL && swz != SWIZZLE_ZERO)
                                relevant |= 1 << i;
                }
-               if ((reg.NegateBase & relevant) && ((reg.NegateBase & relevant) != relevant))
+               if ((reg.Negate & relevant) && ((reg.Negate & relevant) != relevant))
                        return GL_FALSE;
 
                return GL_TRUE;
@@ -379,7 +378,7 @@ static void nqssadce_build_swizzle(struct nqssadce_state *s,
                GLuint swz = GET_SWZ(src.Swizzle, i);
                if (swz == SWIZZLE_NIL)
                        continue;
-               negatebase[GET_BIT(src.NegateBase, i)] |= 1 << i;
+               negatebase[GET_BIT(src.Negate, i)] |= 1 << i;
        }
 
        _mesa_insert_instructions(s->Program, s->IP, (negatebase[0] ? 1 : 0) + (negatebase[1] ? 1 : 0));
index a083c3d2436321b1f2a49ee40fb8f7deb325b37d..4a2e1cba402b9a845937fa087e4b68f024a888ea 100644 (file)
@@ -61,12 +61,12 @@ static struct prog_src_register lmul_swizzle(GLuint swizzle, struct prog_src_reg
        struct prog_src_register tmp = srcreg;
        int i;
        tmp.Swizzle = 0;
-       tmp.NegateBase = 0;
+       tmp.Negate = NEGATE_NONE;
        for(i = 0; i < 4; ++i) {
                GLuint swz = GET_SWZ(swizzle, i);
                if (swz < 4) {
                        tmp.Swizzle |= GET_SWZ(srcreg.Swizzle, swz) << (i*3);
-                       tmp.NegateBase |= GET_BIT(srcreg.NegateBase, swz) << i;
+                       tmp.Negate |= GET_BIT(srcreg.Negate, swz) << i;
                } else {
                        tmp.Swizzle |= swz << (i*3);
                }
@@ -103,9 +103,8 @@ static struct prog_instruction* track_used_srcreg(struct nqssadce_state* s,
                inst->SrcReg[src].File = PROGRAM_TEMPORARY;
                inst->SrcReg[src].Index = dstreg.Index;
                inst->SrcReg[src].Swizzle = 0;
-               inst->SrcReg[src].NegateBase = 0;
+               inst->SrcReg[src].Negate = NEGATE_NONE;
                inst->SrcReg[src].Abs = 0;
-               inst->SrcReg[src].NegateAbs = 0;
                for(i = 0; i < 4; ++i) {
                        if (GET_BIT(sourced, i))
                                inst->SrcReg[src].Swizzle |= i << (3*i);
index 1ef71e74dcf27c4c956d7b06cae73a1b8231985d..ebc5c913b25c8e263dab6dbd3a2a26253e135b5f 100644 (file)
@@ -89,8 +89,9 @@ static void set_swizzle(struct prog_src_register *SrcReg, int coordinate, int sw
 
 static void set_negate_base(struct prog_src_register *SrcReg, int coordinate, int negate)
 {
-       SrcReg->NegateBase &= ~(1 << coordinate);
-       SrcReg->NegateBase |= (negate << coordinate);
+       /* XXX note sure about this negation logic here */
+       SrcReg->Negate &= ~(1 << coordinate);
+       SrcReg->Negate |= (negate << coordinate);
 }
 
 static struct prog_dst_register dstreg(int file, int index)
@@ -156,15 +157,14 @@ static struct prog_src_register absolute(struct prog_src_register reg)
 {
        struct prog_src_register newreg = reg;
        newreg.Abs = 1;
-       newreg.NegateBase = 0;
-       newreg.NegateAbs = 0;
+       newreg.Negate = NEGATE_NONE;
        return newreg;
 }
 
 static struct prog_src_register negate(struct prog_src_register reg)
 {
        struct prog_src_register newreg = reg;
-       newreg.NegateAbs = !newreg.NegateAbs;
+       newreg.Negate = newreg.Negate ^ NEGATE_XYZW;
        return newreg;
 }
 
@@ -189,8 +189,7 @@ static void transform_ABS(struct radeon_transform_context* t,
 {
        struct prog_src_register src = inst->SrcReg[0];
        src.Abs = 1;
-       src.NegateBase = 0;
-       src.NegateAbs = 0;
+       src.Negate = NEGATE_NONE;
        emit1(t->Program, OPCODE_MOV, inst->SaturateMode, inst->DstReg, src);
 }
 
@@ -198,14 +197,13 @@ static void transform_DPH(struct radeon_transform_context* t,
        struct prog_instruction* inst)
 {
        struct prog_src_register src0 = inst->SrcReg[0];
-       if (src0.NegateAbs) {
+       if (src0.Negate) {
                if (src0.Abs) {
                        int tempreg = radeonFindFreeTemporary(t);
                        emit1(t->Program, OPCODE_MOV, 0, dstreg(PROGRAM_TEMPORARY, tempreg), src0);
                        src0 = srcreg(src0.File, src0.Index);
                } else {
-                       src0.NegateAbs = 0;
-                       src0.NegateBase ^= NEGATE_XYZW;
+                       src0.Negate ^= NEGATE_XYZW;
                }
        }
        set_swizzle(&src0, 3, SWIZZLE_ONE);
@@ -649,7 +647,7 @@ GLboolean radeonTransformDeriv(struct radeon_transform_context* t,
 
        B.Swizzle = MAKE_SWIZZLE4(SWIZZLE_ONE, SWIZZLE_ONE,
                                                SWIZZLE_ONE, SWIZZLE_ONE);
-       B.NegateBase = NEGATE_XYZW;
+       B.Negate = NEGATE_XYZW;
 
        emit2(t->Program, inst->Opcode, inst->SaturateMode, inst->DstReg,
                inst->SrcReg[0], B);
index f398404f9f5083ea3811df251dc2232af3fec1a9..ecc82ff8a81db441a9c3f06d952e1fe5ab49bd83 100644 (file)
@@ -255,8 +255,7 @@ static void final_rewrite(struct pair_state *s, struct prog_instruction *inst)
                inst->SrcReg[2] = inst->SrcReg[1];
                inst->SrcReg[1].File = PROGRAM_BUILTIN;
                inst->SrcReg[1].Swizzle = SWIZZLE_1111;
-               inst->SrcReg[1].NegateBase = 0;
-               inst->SrcReg[1].NegateAbs = 0;
+               inst->SrcReg[1].Negate = NEGATE_NONE;
                inst->Opcode = OPCODE_MAD;
                break;
        case OPCODE_CMP:
@@ -730,7 +729,7 @@ static GLboolean fill_instruction_into_pair(struct pair_state *s, struct radeon_
                                        srcrgb = GL_TRUE;
                                else if (swz < 4)
                                        srcalpha = GL_TRUE;
-                               if (swz != SWIZZLE_NIL && GET_BIT(inst->SrcReg[i].NegateBase, j))
+                               if (swz != SWIZZLE_NIL && GET_BIT(inst->SrcReg[i].Negate, j))
                                        negatebase = 1;
                        }
                        source = alloc_pair_source(s, pair, inst->SrcReg[i], srcrgb, srcalpha);
@@ -739,12 +738,12 @@ static GLboolean fill_instruction_into_pair(struct pair_state *s, struct radeon_
                        pair->RGB.Arg[i].Source = source;
                        pair->RGB.Arg[i].Swizzle = inst->SrcReg[i].Swizzle & 0x1ff;
                        pair->RGB.Arg[i].Abs = inst->SrcReg[i].Abs;
-                       pair->RGB.Arg[i].Negate = (negatebase & ~pair->RGB.Arg[i].Abs) ^ inst->SrcReg[i].NegateAbs;
+                       pair->RGB.Arg[i].Negate = (negatebase & ~pair->RGB.Arg[i].Abs) ^ inst->SrcReg[i].Negate;
                }
                if (pairinst->NeedAlpha) {
                        GLboolean srcrgb = GL_FALSE;
                        GLboolean srcalpha = GL_FALSE;
-                       GLuint negatebase = GET_BIT(inst->SrcReg[i].NegateBase, pairinst->IsTranscendent ? 0 : 3);
+                       GLuint negatebase = GET_BIT(inst->SrcReg[i].Negate, pairinst->IsTranscendent ? 0 : 3);
                        GLuint swz = GET_SWZ(inst->SrcReg[i].Swizzle, pairinst->IsTranscendent ? 0 : 3);
                        if (swz < 3)
                                srcrgb = GL_TRUE;
@@ -756,7 +755,7 @@ static GLboolean fill_instruction_into_pair(struct pair_state *s, struct radeon_
                        pair->Alpha.Arg[i].Source = source;
                        pair->Alpha.Arg[i].Swizzle = swz;
                        pair->Alpha.Arg[i].Abs = inst->SrcReg[i].Abs;
-                       pair->Alpha.Arg[i].Negate = (negatebase & ~pair->RGB.Arg[i].Abs) ^ inst->SrcReg[i].NegateAbs;
+                       pair->Alpha.Arg[i].Negate = (negatebase & ~pair->RGB.Arg[i].Abs) ^ inst->SrcReg[i].Negate;
                }
        }
 
index 03f42704a7d3a2719ff791ffee8fab5d6d5e446e..1ce5685af45ebda2f1c3d87f992748af77ba80ae 100644 (file)
@@ -570,9 +570,8 @@ static void emit_arg( struct prog_src_register *src,
    src->File = reg.file;
    src->Index = reg.idx;
    src->Swizzle = reg.swz;
-   src->NegateBase = reg.negate ? NEGATE_XYZW : 0;
+   src->Negate = reg.negate ? NEGATE_XYZW : NEGATE_NONE;
    src->Abs = 0;
-   src->NegateAbs = 0;
    src->RelAddr = 0;
    /* Check that bitfield sizes aren't exceeded */
    ASSERT(src->Index == reg.idx);
index 4a124bf27e2e4a3ec401db13168abb270b49f27d..a70d069bd9c05c8be47a5a0bfaa31a3789a4c909 100644 (file)
@@ -663,9 +663,8 @@ static void emit_arg( struct prog_src_register *reg,
    reg->File = ureg.file;
    reg->Index = ureg.idx;
    reg->Swizzle = ureg.swz;
-   reg->NegateBase = ureg.negatebase ? 0xf : 0x0;
+   reg->Negate = ureg.negatebase ? NEGATE_XYZW : NEGATE_NONE;
    reg->Abs = ureg.abs;
-   reg->NegateAbs = ureg.negateabs;
 }
 
 static void emit_dst( struct prog_dst_register *dst,
index 35253daa2e6563360bd0b7c0469bd877ee4e45de..b47bf360cf561d6ca0f4ef263992d039b4266c2a 100644 (file)
@@ -2669,7 +2669,7 @@ parse_vector_src_reg(GLcontext *ctx, const GLubyte **inst,
    reg->File = file;
    reg->Index = index;
    reg->Swizzle = MAKE_SWIZZLE4(swizzle[0], swizzle[1], swizzle[2], swizzle[3]);
-   reg->NegateBase = negateMask;
+   reg->Negate = negateMask;
    reg->RelAddr = isRelOffset;
    return 0;
 }
@@ -2703,7 +2703,7 @@ parse_scalar_src_reg(GLcontext *ctx, const GLubyte **inst,
    reg->File = file;
    reg->Index = index;
    reg->Swizzle = (swizzle[0] << 0);
-   reg->NegateBase = negateMask;
+   reg->Negate = negateMask;
    reg->RelAddr = isRelOffset;
    return 0;
 }
@@ -3019,7 +3019,7 @@ parse_fp_instruction (GLcontext * ctx, const GLubyte ** inst,
            parse_extended_swizzle_mask(inst, swizzle, &negateMask);
            fp->SrcReg[0].File = file;
            fp->SrcReg[0].Index = index;
-           fp->SrcReg[0].NegateBase = negateMask;
+           fp->SrcReg[0].Negate = negateMask;
            fp->SrcReg[0].Swizzle = MAKE_SWIZZLE4(swizzle[0],
                                                   swizzle[1],
                                                   swizzle[2],
@@ -3363,7 +3363,7 @@ parse_vp_instruction (GLcontext * ctx, const GLubyte ** inst,
            parse_extended_swizzle_mask (inst, swizzle, &negateMask);
            vp->SrcReg[0].File = file;
            vp->SrcReg[0].Index = index;
-           vp->SrcReg[0].NegateBase = negateMask;
+           vp->SrcReg[0].Negate = negateMask;
            vp->SrcReg[0].Swizzle = MAKE_SWIZZLE4(swizzle[0],
                                                   swizzle[1],
                                                   swizzle[2],
index 56b7c29bea3f0d4a46669a92786e55c76f4733f8..0fd55524abf19e03807a5342f12491ed4ddd55ae 100644 (file)
@@ -957,6 +957,7 @@ Parse_VectorSrc(struct parse_state *parseState,
    GLfloat sign = 1.0F;
    GLubyte token[100];
    GLint idx;
+   GLuint negateBase, negateAbs;
 
    /*
     * First, take care of +/- and absolute value stuff.
@@ -968,21 +969,23 @@ Parse_VectorSrc(struct parse_state *parseState,
 
    if (Parse_String(parseState, "|")) {
       srcReg->Abs = GL_TRUE;
-      srcReg->NegateAbs = (sign < 0.0F) ? GL_TRUE : GL_FALSE;
+      negateAbs = (sign < 0.0F) ? NEGATE_XYZW : NEGATE_NONE;
 
       if (Parse_String(parseState, "-"))
-         srcReg->NegateBase = NEGATE_XYZW;
+         negateBase = NEGATE_XYZW;
       else if (Parse_String(parseState, "+"))
-         srcReg->NegateBase = NEGATE_NONE;
+         negateBase = NEGATE_NONE;
       else
-         srcReg->NegateBase = NEGATE_NONE;
+         negateBase = NEGATE_NONE;
    }
    else {
       srcReg->Abs = GL_FALSE;
-      srcReg->NegateAbs = GL_FALSE;
-      srcReg->NegateBase = (sign < 0.0F) ? NEGATE_XYZW : NEGATE_NONE;
+      negateAbs = NEGATE_NONE;
+      negateBase = (sign < 0.0F) ? NEGATE_XYZW : NEGATE_NONE;
    }
 
+   srcReg->Negate = srcReg->Abs ? negateAbs : negateBase;
+
    /* This should be the real src vector/register name */
    if (!Peek_Token(parseState, token))
       RETURN_ERROR;
@@ -1083,6 +1086,7 @@ Parse_ScalarSrcReg(struct parse_state *parseState,
    GLfloat sign = 1.0F;
    GLboolean needSuffix = GL_TRUE;
    GLint idx;
+   GLuint negateBase, negateAbs;
 
    /*
     * First, take care of +/- and absolute value stuff.
@@ -1094,21 +1098,23 @@ Parse_ScalarSrcReg(struct parse_state *parseState,
 
    if (Parse_String(parseState, "|")) {
       srcReg->Abs = GL_TRUE;
-      srcReg->NegateAbs = (sign < 0.0F) ? GL_TRUE : GL_FALSE;
+      negateAbs = (sign < 0.0F) ? NEGATE_XYZW : NEGATE_NONE;
 
       if (Parse_String(parseState, "-"))
-         srcReg->NegateBase = NEGATE_XYZW;
+         negateBase = NEGATE_XYZW;
       else if (Parse_String(parseState, "+"))
-         srcReg->NegateBase = NEGATE_NONE;
+         negateBase = NEGATE_NONE;
       else
-         srcReg->NegateBase = NEGATE_NONE;
+         negateBase = NEGATE_NONE;
    }
    else {
       srcReg->Abs = GL_FALSE;
-      srcReg->NegateAbs = GL_FALSE;
-      srcReg->NegateBase = (sign < 0.0F) ? NEGATE_XYZW : NEGATE_NONE;
+      negateAbs = NEGATE_NONE;
+      negateBase = (sign < 0.0F) ? NEGATE_XYZW : NEGATE_NONE;
    }
 
+   srcReg->Negate = srcReg->Abs ? negateAbs : negateBase;
+
    if (!Peek_Token(parseState, token))
       RETURN_ERROR;
 
@@ -1247,9 +1253,8 @@ Parse_PrintInstruction(struct parse_state *parseState,
    }
 
    inst->SrcReg[0].Swizzle = SWIZZLE_NOOP;
-   inst->SrcReg[0].NegateBase = NEGATE_NONE;
    inst->SrcReg[0].Abs = GL_FALSE;
-   inst->SrcReg[0].NegateAbs = GL_FALSE;
+   inst->SrcReg[0].Negate = NEGATE_NONE;
 
    return GL_TRUE;
 }
index 624262395b0f922860b60cbc63eb34723059696b..f5e2df267081dbe2cc41cbe4e2c22c1142b9298b 100644 (file)
@@ -641,12 +641,12 @@ Parse_SwizzleSrcReg(struct parse_state *parseState, struct prog_src_register *sr
       RETURN_ERROR;
    if (token[0] == '-') {
       (void) Parse_String(parseState, "-");
-      srcReg->NegateBase = NEGATE_XYZW;
+      srcReg->Negate = NEGATE_XYZW;
       if (!Peek_Token(parseState, token))
          RETURN_ERROR;
    }
    else {
-      srcReg->NegateBase = NEGATE_NONE;
+      srcReg->Negate = NEGATE_NONE;
    }
 
    /* Src reg can be R<n>, c[n], c[n +/- offset], or a named vertex attrib */
@@ -734,13 +734,13 @@ Parse_ScalarSrcReg(struct parse_state *parseState, struct prog_src_register *src
    if (!Peek_Token(parseState, token))
       RETURN_ERROR;
    if (token[0] == '-') {
-      srcReg->NegateBase = NEGATE_XYZW;
+      srcReg->Negate = NEGATE_XYZW;
       (void) Parse_String(parseState, "-"); /* consume '-' */
       if (!Peek_Token(parseState, token))
          RETURN_ERROR;
    }
    else {
-      srcReg->NegateBase = NEGATE_NONE;
+      srcReg->Negate = NEGATE_NONE;
    }
 
    /* Src reg can be R<n>, c[n], c[n +/- offset], or a named vertex attrib */
@@ -1062,7 +1062,7 @@ Parse_PrintInstruction(struct parse_state *parseState, struct prog_instruction *
          RETURN_ERROR;
 
       srcReg->RelAddr = GL_FALSE;
-      srcReg->NegateBase = NEGATE_NONE;
+      srcReg->Negate = NEGATE_NONE;
       srcReg->Swizzle = SWIZZLE_NOOP;
 
       /* Register can be R<n>, c[n], c[n +/- offset], a named vertex attrib,
index bdac1d4f8a64312f19c9630a01a596ce116118d3..68a59350a1388b3b735d16d7429fc853ae7fee1d 100644 (file)
@@ -212,19 +212,14 @@ fetch_vector4(const struct prog_src_register *source,
       result[3] = src[GET_SWZ(source->Swizzle, 3)];
    }
 
-   if (source->NegateBase) {
-      result[0] = -result[0];
-      result[1] = -result[1];
-      result[2] = -result[2];
-      result[3] = -result[3];
-   }
    if (source->Abs) {
       result[0] = FABSF(result[0]);
       result[1] = FABSF(result[1]);
       result[2] = FABSF(result[2]);
       result[3] = FABSF(result[3]);
    }
-   if (source->NegateAbs) {
+   if (source->Negate) {
+      ASSERT(source->Negate == NEGATE_XYZW);
       result[0] = -result[0];
       result[1] = -result[1];
       result[2] = -result[2];
@@ -259,7 +254,7 @@ fetch_vector4ui(const struct prog_src_register *source,
       result[3] = src[GET_SWZ(source->Swizzle, 3)];
    }
 
-   /* Note: no NegateBase, Abs, NegateAbs here */
+   /* Note: no Negate or Abs here */
 }
 
 
@@ -299,19 +294,14 @@ fetch_vector4_deriv(GLcontext * ctx,
       result[2] = deriv[GET_SWZ(source->Swizzle, 2)];
       result[3] = deriv[GET_SWZ(source->Swizzle, 3)];
       
-      if (source->NegateBase) {
-         result[0] = -result[0];
-         result[1] = -result[1];
-         result[2] = -result[2];
-         result[3] = -result[3];
-      }
       if (source->Abs) {
          result[0] = FABSF(result[0]);
          result[1] = FABSF(result[1]);
          result[2] = FABSF(result[2]);
          result[3] = FABSF(result[3]);
       }
-      if (source->NegateAbs) {
+      if (source->Negate) {
+         ASSERT(source->Negate == NEGATE_XYZW);
          result[0] = -result[0];
          result[1] = -result[1];
          result[2] = -result[2];
@@ -336,13 +326,10 @@ fetch_vector1(const struct prog_src_register *source,
 
    result[0] = src[GET_SWZ(source->Swizzle, 0)];
 
-   if (source->NegateBase) {
-      result[0] = -result[0];
-   }
    if (source->Abs) {
       result[0] = FABSF(result[0]);
    }
-   if (source->NegateAbs) {
+   if (source->Negate) {
       result[0] = -result[0];
    }
 }
@@ -1514,7 +1501,7 @@ _mesa_execute_program(GLcontext * ctx,
                   ASSERT(swz <= 3);
                   result[i] = src[swz];
                }
-               if (source->NegateBase & (1 << i))
+               if (source->Negate & (1 << i))
                   result[i] = -result[i];
             }
             store_vector4(inst, machine, result);
index 4adce11f957ab86191fc36b2fd55391ec86346b4..3109f6cbae5af4903293e4d173c9015fb09e893a 100644 (file)
@@ -261,37 +261,15 @@ struct prog_src_register
    GLuint Swizzle:12;
    GLuint RelAddr:1;
 
-   /**
-    * \name Source register "sign" control.
-    *
-    * The ARB and NV extensions allow varrying degrees of control over the
-    * sign of the source vector components.  These values allow enough control
-    * for all flavors of the extensions.
-    */
-   /*@{*/
-   /**
-    * Per-component negation for the SWZ instruction.  For non-SWZ
-    * instructions the only possible values are NEGATE_XYZW and NEGATE_NONE.
-    *
-    * \since
-    * ARB_vertex_program, ARB_fragment_program
-    */
-   GLuint NegateBase:4;
-
-   /**
-    * Take the component-wise absolute value.
-    *
-    * \since
-    * NV_fragment_program, NV_fragment_program_option, NV_vertex_program2,
-    * NV_vertex_program2_option.
-    */
+   /** Take the component-wise absolute value */
    GLuint Abs:1;
 
    /**
-    * Post-absolute value negation (all components).
+    * Post-Abs negation.
+    * This will either be NEGATE_NONE or NEGATE_XYZW, except for the SWZ
+    * instruction which allows per-component negation.
     */
-   GLuint NegateAbs:1;
-   /*@}*/
+   GLuint Negate:4;
 };
 
 
index b832ddb4774de9bef0db1d3be133edf39564d4f7..d73c619fea0fbcdc18b891a113b3a393dffd6cb7 100644 (file)
@@ -325,19 +325,19 @@ reg_string(gl_register_file f, GLint index, gl_prog_print_mode mode,
  * \param extended  if true, also allow 0, 1 values
  */
 const char *
-_mesa_swizzle_string(GLuint swizzle, GLuint negateBase, GLboolean extended)
+_mesa_swizzle_string(GLuint swizzle, GLuint negateMask, GLboolean extended)
 {
    static const char swz[] = "xyzw01!?";  /* See SWIZZLE_x definitions */
    static char s[20];
    GLuint i = 0;
 
-   if (!extended && swizzle == SWIZZLE_NOOP && negateBase == 0)
+   if (!extended && swizzle == SWIZZLE_NOOP && negateMask == 0)
       return ""; /* no swizzle/negation */
 
    if (!extended)
       s[i++] = '.';
 
-   if (negateBase & NEGATE_X)
+   if (negateMask & NEGATE_X)
       s[i++] = '-';
    s[i++] = swz[GET_SWZ(swizzle, 0)];
 
@@ -345,7 +345,7 @@ _mesa_swizzle_string(GLuint swizzle, GLuint negateBase, GLboolean extended)
       s[i++] = ',';
    }
 
-   if (negateBase & NEGATE_Y)
+   if (negateMask & NEGATE_Y)
       s[i++] = '-';
    s[i++] = swz[GET_SWZ(swizzle, 1)];
 
@@ -353,7 +353,7 @@ _mesa_swizzle_string(GLuint swizzle, GLuint negateBase, GLboolean extended)
       s[i++] = ',';
    }
 
-   if (negateBase & NEGATE_Z)
+   if (negateMask & NEGATE_Z)
       s[i++] = '-';
    s[i++] = swz[GET_SWZ(swizzle, 2)];
 
@@ -361,7 +361,7 @@ _mesa_swizzle_string(GLuint swizzle, GLuint negateBase, GLboolean extended)
       s[i++] = ',';
    }
 
-   if (negateBase & NEGATE_W)
+   if (negateMask & NEGATE_W)
       s[i++] = '-';
    s[i++] = swz[GET_SWZ(swizzle, 3)];
 
@@ -465,14 +465,14 @@ fprint_src_reg(FILE *f,
                  reg_string((gl_register_file) srcReg->File,
                             srcReg->Index, mode, srcReg->RelAddr, prog),
                  _mesa_swizzle_string(srcReg->Swizzle,
-                                      srcReg->NegateBase, GL_FALSE),
+                                      srcReg->Negate, GL_FALSE),
                  abs);
 #if 0
    _mesa_fprintf(f, "%s[%d]%s",
                  file_string((gl_register_file) srcReg->File, mode),
                  srcReg->Index,
                  _mesa_swizzle_string(srcReg->Swizzle,
-                                      srcReg->NegateBase, GL_FALSE));
+                                      srcReg->Negate, GL_FALSE));
 #endif
 }
 
@@ -566,7 +566,7 @@ _mesa_fprint_instruction_opt(FILE *f,
                                   mode),
                       inst->SrcReg[0].Index,
                       _mesa_swizzle_string(inst->SrcReg[0].Swizzle,
-                                           inst->SrcReg[0].NegateBase, GL_FALSE));
+                                           inst->SrcReg[0].Negate, GL_FALSE));
       }
       if (inst->Comment)
          _mesa_fprintf(f, "  # %s", inst->Comment);
@@ -583,7 +583,7 @@ _mesa_fprint_instruction_opt(FILE *f,
                                mode),
                    inst->SrcReg[0].Index,
                    _mesa_swizzle_string(inst->SrcReg[0].Swizzle,
-                                        inst->SrcReg[0].NegateBase, GL_TRUE));
+                                        inst->SrcReg[0].Negate, GL_TRUE));
       fprint_comment(f, inst);
       break;
    case OPCODE_TEX:
index e283f8933b21df76f3f8f6042fa660d75df7098b..ecd98dc85c5490079c8b9762f6e38b7afcec63f4 100644 (file)
@@ -241,7 +241,7 @@ _mesa_append_fog_code(GLcontext *ctx, struct gl_fragment_program *fprog)
       inst->DstReg.WriteMask = WRITEMASK_X;
       inst->SrcReg[0].File = PROGRAM_TEMPORARY;
       inst->SrcReg[0].Index = fogFactorTemp;
-      inst->SrcReg[0].NegateBase = NEGATE_XYZW;
+      inst->SrcReg[0].Negate = NEGATE_XYZW;
       inst->SrcReg[0].Swizzle = SWIZZLE_XXXX;
       inst->SaturateMode = SATURATE_ZERO_ONE;
       inst++;
index 8493c490fbc358841b34680a4aeb69013044dd2a..3f455e0640b6f377d8c26a0db5e593177304c9fe 100644 (file)
@@ -1135,7 +1135,7 @@ emit_negation(slang_emit_info *emitInfo, slang_ir_node *n)
                            n->Children[0]->Store,
                            NULL,
                            NULL);
-   inst->SrcReg[0].NegateBase = NEGATE_XYZW;
+   inst->SrcReg[0].Negate = NEGATE_XYZW;
    return inst;
 }
 
index 3b2ad00f5cee928614ab31286d34e3f6077f9bf0..fa4f4082a78f9adc4ade9855ab7642da5a35452b 100644 (file)
@@ -147,7 +147,7 @@ make_bitmap_fragment_program(GLcontext *ctx, GLuint samplerIndex)
       p->Instructions[ic].SrcReg[0].Swizzle = SWIZZLE_XXXX;
 
    p->Instructions[ic].SrcReg[0].Index = 0;
-   p->Instructions[ic].SrcReg[0].NegateBase = NEGATE_XYZW;
+   p->Instructions[ic].SrcReg[0].Negate = NEGATE_XYZW;
    ic++;
 
    /* END; */
index ffa607dd87c858b3e748906535c195a4206b35c5..43c9afccc3b355bd7124758fada492783d93ffc1 100644 (file)
@@ -275,8 +275,8 @@ compile_instruction(
       /* swizzle (ext swizzle also depends on negation) */
       {
          GLuint swz[4];
-         GLboolean extended = (inst->SrcReg[i].NegateBase != NEGATE_NONE &&
-                               inst->SrcReg[i].NegateBase != NEGATE_XYZW);
+         GLboolean extended = (inst->SrcReg[i].Negate != NEGATE_NONE &&
+                               inst->SrcReg[i].Negate != NEGATE_XYZW);
          for( j = 0; j < 4; j++ ) {
             swz[j] = GET_SWZ( inst->SrcReg[i].Swizzle, j );
             if (swz[j] > SWIZZLE_W)
@@ -296,20 +296,20 @@ compile_instruction(
          }
       }
 
-      if( inst->SrcReg[i].NegateBase == NEGATE_XYZW ) {
+      if( inst->SrcReg[i].Negate == NEGATE_XYZW ) {
          fullsrc->SrcRegister.Negate = 1;
       }
-      else if( inst->SrcReg[i].NegateBase != NEGATE_NONE ) {
-         if( inst->SrcReg[i].NegateBase & NEGATE_X ) {
+      else if( inst->SrcReg[i].Negate != NEGATE_NONE ) {
+         if( inst->SrcReg[i].Negate & NEGATE_X ) {
             fullsrc->SrcRegisterExtSwz.NegateX = 1;
          }
-         if( inst->SrcReg[i].NegateBase & NEGATE_Y ) {
+         if( inst->SrcReg[i].Negate & NEGATE_Y ) {
             fullsrc->SrcRegisterExtSwz.NegateY = 1;
          }
-         if( inst->SrcReg[i].NegateBase & NEGATE_Z ) {
+         if( inst->SrcReg[i].Negate & NEGATE_Z ) {
             fullsrc->SrcRegisterExtSwz.NegateZ = 1;
          }
-         if( inst->SrcReg[i].NegateBase & NEGATE_W ) {
+         if( inst->SrcReg[i].Negate & NEGATE_W ) {
             fullsrc->SrcRegisterExtSwz.NegateW = 1;
          }
       }
@@ -318,10 +318,6 @@ compile_instruction(
          fullsrc->SrcRegisterExtMod.Absolute = 1;
       }
 
-      if( inst->SrcReg[i].NegateAbs ) {
-         fullsrc->SrcRegisterExtMod.Negate = 1;
-      }
-
       if( inst->SrcReg[i].RelAddr ) {
          fullsrc->SrcRegister.Indirect = 1;