Merge branch 'register-negate'

This commit is contained in:
Brian Paul
2009-04-16 22:02:54 -06:00
26 changed files with 156 additions and 208 deletions

View File

@@ -162,12 +162,12 @@ src_vector(struct i915_fragment_program *p,
GET_SWZ(source->Swizzle, 1), GET_SWZ(source->Swizzle, 1),
GET_SWZ(source->Swizzle, 2), GET_SWZ(source->Swizzle, 3)); GET_SWZ(source->Swizzle, 2), GET_SWZ(source->Swizzle, 3));
if (source->NegateBase) if (source->Negate)
src = negate(src, src = negate(src,
GET_BIT(source->NegateBase, 0), GET_BIT(source->Negate, 0),
GET_BIT(source->NegateBase, 1), GET_BIT(source->Negate, 1),
GET_BIT(source->NegateBase, 2), GET_BIT(source->Negate, 2),
GET_BIT(source->NegateBase, 3)); GET_BIT(source->Negate, 3));
return src; return src;
} }

View File

@@ -96,7 +96,7 @@ static GLubyte get_active( struct tracker *t,
struct prog_src_register src ) struct prog_src_register src )
{ {
GLuint i; GLuint i;
GLubyte active = src.NegateBase; /* NOTE! */ GLubyte active = src.Negate; /* NOTE! */
if (src.RelAddr) if (src.RelAddr)
return 0xf; return 0xf;

View File

@@ -912,7 +912,7 @@ static struct brw_reg get_arg( struct brw_vs_compile *c,
/* Note this is ok for non-swizzle instructions: /* Note this is ok for non-swizzle instructions:
*/ */
reg.negate = src->NegateBase ? 1 : 0; reg.negate = src->Negate ? 1 : 0;
return reg; return reg;
} }
@@ -962,7 +962,7 @@ static void emit_swz( struct brw_vs_compile *c,
GLuint ones_mask = 0; GLuint ones_mask = 0;
GLuint src_mask = 0; GLuint src_mask = 0;
GLubyte src_swz[4]; GLubyte src_swz[4];
GLboolean need_tmp = (src.NegateBase && GLboolean need_tmp = (src.Negate &&
dst.file != BRW_GENERAL_REGISTER_FILE); dst.file != BRW_GENERAL_REGISTER_FILE);
struct brw_reg tmp = dst; struct brw_reg tmp = dst;
GLuint i; GLuint i;
@@ -1011,8 +1011,8 @@ static void emit_swz( struct brw_vs_compile *c,
if (ones_mask) if (ones_mask)
brw_MOV(p, brw_writemask(tmp, ones_mask), brw_imm_f(1)); brw_MOV(p, brw_writemask(tmp, ones_mask), brw_imm_f(1));
if (src.NegateBase) if (src.Negate)
brw_MOV(p, brw_writemask(tmp, src.NegateBase), negate(tmp)); brw_MOV(p, brw_writemask(tmp, src.Negate), negate(tmp));
if (need_tmp) { if (need_tmp) {
brw_MOV(p, dst, tmp); brw_MOV(p, dst, tmp);

View File

@@ -80,9 +80,8 @@ static struct prog_src_register src_reg(GLuint file, GLuint idx)
reg.Index = idx; reg.Index = idx;
reg.Swizzle = SWIZZLE_NOOP; reg.Swizzle = SWIZZLE_NOOP;
reg.RelAddr = 0; reg.RelAddr = 0;
reg.NegateBase = 0; reg.Negate = NEGATE_NONE;
reg.Abs = 0; reg.Abs = 0;
reg.NegateAbs = 0;
return reg; return reg;
} }
@@ -569,7 +568,7 @@ static void precalc_dst( struct brw_wm_compile *c,
src_undef(), src_undef(),
src_undef()); src_undef());
/* Avoid letting negation flag of src0 affect our 1 constant. */ /* 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) { if (dst.WriteMask & WRITEMASK_W) {
/* dst.w = mov src1.w /* dst.w = mov src1.w
@@ -604,7 +603,7 @@ static void precalc_lit( struct brw_wm_compile *c,
src_undef(), src_undef(),
src_undef()); src_undef());
/* Avoid letting the negation flag of src0 affect our 1 constant. */ /* 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) { if (dst.WriteMask & WRITEMASK_YZ) {
@@ -651,7 +650,7 @@ static void precalc_tex( struct brw_wm_compile *c,
src0, src0,
src_undef(), src_undef(),
src_undef()); src_undef());
out->SrcReg[0].NegateBase = 0; out->SrcReg[0].Negate = NEGATE_NONE;
out->SrcReg[0].Abs = 1; out->SrcReg[0].Abs = 1;
/* tmp0 = MAX(coord.X, coord.Y) */ /* tmp0 = MAX(coord.X, coord.Y) */
@@ -1050,14 +1049,14 @@ void brw_wm_pass_fp( struct brw_wm_compile *c )
case OPCODE_ABS: case OPCODE_ABS:
out = emit_insn(c, inst); out = emit_insn(c, inst);
out->Opcode = OPCODE_MOV; out->Opcode = OPCODE_MOV;
out->SrcReg[0].NegateBase = 0; out->SrcReg[0].Negate = NEGATE_NONE;
out->SrcReg[0].Abs = 1; out->SrcReg[0].Abs = 1;
break; break;
case OPCODE_SUB: case OPCODE_SUB:
out = emit_insn(c, inst); out = emit_insn(c, inst);
out->Opcode = OPCODE_ADD; out->Opcode = OPCODE_ADD;
out->SrcReg[1].NegateBase ^= 0xf; out->SrcReg[1].Negate ^= NEGATE_XYZW;
break; break;
case OPCODE_SCS: case OPCODE_SCS:

View File

@@ -340,7 +340,7 @@ get_src_reg_const(struct brw_wm_compile *c,
const_reg = stride(const_reg, 0, 1, 0); const_reg = stride(const_reg, 0, 1, 0);
const_reg.subnr = component * 4; const_reg.subnr = component * 4;
if (src->NegateBase) if (src->Negate & (1 << component))
const_reg = negate(const_reg); const_reg = negate(const_reg);
if (src->Abs) if (src->Abs)
const_reg = brw_abs(const_reg); const_reg = brw_abs(const_reg);
@@ -377,7 +377,7 @@ static struct brw_reg get_src_reg(struct brw_wm_compile *c,
else { else {
/* other type of source register */ /* other type of source register */
return get_reg(c, src->File, src->Index, component, nr, 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 = const GLfloat *param =
c->fp->program.Base.Parameters->ParameterValues[src->Index]; c->fp->program.Base.Parameters->ParameterValues[src->Index];
GLfloat value = param[component]; GLfloat value = param[component];
if (src->NegateBase) if (src->Negate & (1 << channel))
value = -value; value = -value;
if (src->Abs) if (src->Abs)
value = FABSF(value); value = FABSF(value);

View File

@@ -322,7 +322,7 @@ static struct brw_wm_ref *get_new_ref( struct brw_wm_compile *c,
newref->value->lastuse = newref; newref->value->lastuse = newref;
} }
if (src.NegateBase & (1<<i)) if (src.Negate & (1 << i))
newref->hw_reg.negate ^= 1; newref->hw_reg.negate ^= 1;
if (src.Abs) { if (src.Abs) {

View 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, 2)),
t_swizzle(GET_SWZ(src->Swizzle, 3)), t_swizzle(GET_SWZ(src->Swizzle, 3)),
t_src_class(src->File), 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) 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_swizzle(GET_SWZ(src->Swizzle, 0)), t_swizzle(GET_SWZ(src->Swizzle, 0)),
t_src_class(src->File), 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) 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)), t_swizzle(GET_SWZ(src[1].Swizzle, 0)),
SWIZZLE_ZERO, SWIZZLE_ZERO,
t_src_class(src[0].File), 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->src1 = UNUSED_SRC_0;
o_inst->src2 = 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)), t_swizzle(GET_SWZ(src[0].Swizzle, 0)),
SWIZZLE_ZERO, SWIZZLE_ZERO, SWIZZLE_ZERO, SWIZZLE_ZERO, SWIZZLE_ZERO, SWIZZLE_ZERO,
t_src_class(src[0].File), 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]), o_inst->src1 = MAKE_VSF_SOURCE(t_src_index(vp, &src[1]),
SWIZZLE_ZERO, SWIZZLE_ZERO, SWIZZLE_ZERO, SWIZZLE_ZERO,
t_swizzle(GET_SWZ(src[1].Swizzle, 0)), SWIZZLE_ZERO, t_swizzle(GET_SWZ(src[1].Swizzle, 0)), SWIZZLE_ZERO,
t_src_class(src[1].File), 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->src2 = UNUSED_SRC_1;
o_inst++; o_inst++;
@@ -766,11 +766,11 @@ if ((o_inst - vp->instr) == 31) {
o_inst->src1 = MAKE_VSF_SOURCE(t_src_index(vp, &src[1]), o_inst->src1 = MAKE_VSF_SOURCE(t_src_index(vp, &src[1]),
SWIZZLE_X, SWIZZLE_X, SWIZZLE_X, SWIZZLE_X, SWIZZLE_X, SWIZZLE_X, SWIZZLE_X, SWIZZLE_X,
t_src_class(src[1].File), 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]), o_inst->src2 = MAKE_VSF_SOURCE(t_src_index(vp, &src[1]),
SWIZZLE_Y, SWIZZLE_Y, SWIZZLE_Y, SWIZZLE_Y, SWIZZLE_Y, SWIZZLE_Y, SWIZZLE_Y, SWIZZLE_Y,
t_src_class(src[1].File), t_src_class(src[1].File),
src[1].NegateBase) | (src[1].RelAddr << 4); src[1].Negate) | (src[1].RelAddr << 4);
} }
else { else {
o_inst->src1 = t_src(vp, &src[1]); o_inst->src1 = t_src(vp, &src[1]);
@@ -792,7 +792,7 @@ else {
t_swizzle(GET_SWZ(src[0].Swizzle, 2)), t_swizzle(GET_SWZ(src[0].Swizzle, 2)),
SWIZZLE_ZERO, SWIZZLE_ZERO,
t_src_class(src[0].File), 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]), o_inst->src1 = MAKE_VSF_SOURCE(t_src_index(vp, &src[1]),
t_swizzle(GET_SWZ(src[1].Swizzle, 0)), t_swizzle(GET_SWZ(src[1].Swizzle, 0)),
@@ -800,7 +800,7 @@ else {
t_swizzle(GET_SWZ(src[1].Swizzle, 2)), t_swizzle(GET_SWZ(src[1].Swizzle, 2)),
SWIZZLE_ZERO, SWIZZLE_ZERO,
t_src_class(src[1].File), 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->src2 = UNUSED_SRC_1;
goto next; goto next;
@@ -815,7 +815,7 @@ else {
t_swizzle(GET_SWZ(src[0].Swizzle, 2)), t_swizzle(GET_SWZ(src[0].Swizzle, 2)),
VSF_IN_COMPONENT_ONE, VSF_IN_COMPONENT_ONE,
t_src_class(src[0].File), 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->src1 = t_src(vp, &src[1]);
o_inst->src2 = UNUSED_SRC_1; o_inst->src2 = UNUSED_SRC_1;
goto next; goto next;
@@ -831,7 +831,7 @@ else {
t_swizzle(GET_SWZ(src[1].Swizzle, 2)), t_swizzle(GET_SWZ(src[1].Swizzle, 2)),
t_swizzle(GET_SWZ(src[1].Swizzle, 3)), t_swizzle(GET_SWZ(src[1].Swizzle, 3)),
t_src_class(src[1].File), 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->src2 = UNUSED_SRC_1;
goto next; goto next;
@@ -846,7 +846,7 @@ else {
t_swizzle(GET_SWZ(src[0].Swizzle, 2)), t_swizzle(GET_SWZ(src[0].Swizzle, 2)),
t_swizzle(GET_SWZ(src[0].Swizzle, 3)), t_swizzle(GET_SWZ(src[0].Swizzle, 3)),
t_src_class(src[0].File), 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; o_inst->src2 = UNUSED_SRC_1;
goto next; goto next;
@@ -874,7 +874,7 @@ else {
VSF_IN_COMPONENT_W, VSF_IN_COMPONENT_W,
VSF_IN_CLASS_TMP, VSF_IN_CLASS_TMP,
/* Not 100% sure about this */ /* 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; o_inst->src2 = UNUSED_SRC_0;
u_temp_i--; u_temp_i--;
@@ -899,7 +899,7 @@ else {
t_swizzle(GET_SWZ(src[0].Swizzle, 0)), // x t_swizzle(GET_SWZ(src[0].Swizzle, 0)), // x
t_swizzle(GET_SWZ(src[0].Swizzle, 3)), // w t_swizzle(GET_SWZ(src[0].Swizzle, 3)), // w
t_src_class(src[0].File), 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]), o_inst->src1 = MAKE_VSF_SOURCE(t_src_index(vp, &src[1]),
t_swizzle(GET_SWZ(src[1].Swizzle, 2)), // z 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, 1)), // y
t_swizzle(GET_SWZ(src[1].Swizzle, 3)), // w t_swizzle(GET_SWZ(src[1].Swizzle, 3)), // w
t_src_class(src[1].File), 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->src2 = UNUSED_SRC_1;
o_inst++; o_inst++;
@@ -922,7 +922,7 @@ else {
t_swizzle(GET_SWZ(src[1].Swizzle, 0)), // x t_swizzle(GET_SWZ(src[1].Swizzle, 0)), // x
t_swizzle(GET_SWZ(src[1].Swizzle, 3)), // w t_swizzle(GET_SWZ(src[1].Swizzle, 3)), // w
t_src_class(src[1].File), 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]), o_inst->src1 = MAKE_VSF_SOURCE(t_src_index(vp, &src[0]),
t_swizzle(GET_SWZ(src[0].Swizzle, 2)), // z 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, 1)), // y
t_swizzle(GET_SWZ(src[0].Swizzle, 3)), // w t_swizzle(GET_SWZ(src[0].Swizzle, 3)), // w
t_src_class(src[0].File), 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, o_inst->src2 = MAKE_VSF_SOURCE(u_temp_i+1,
VSF_IN_COMPONENT_X, VSF_IN_COMPONENT_X,

View File

@@ -214,9 +214,9 @@ static GLboolean transform_TEX(
* r < tex <=> -tex+r < 0 * r < tex <=> -tex+r < 0
* r >= tex <=> not (-tex+r < 0 */ * r >= tex <=> not (-tex+r < 0 */
if (comparefunc == GL_LESS || comparefunc == GL_GEQUAL) 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 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].Opcode = OPCODE_CMP;
tgt[2].DstReg = orig_inst->DstReg; tgt[2].DstReg = orig_inst->DstReg;

View File

@@ -92,7 +92,7 @@ static const struct swizzle_data* lookup_native_swizzle(GLuint swizzle)
GLboolean r300FPIsNativeSwizzle(GLuint opcode, struct prog_src_register reg) GLboolean r300FPIsNativeSwizzle(GLuint opcode, struct prog_src_register reg)
{ {
if (reg.Abs) if (reg.Abs)
reg.NegateBase = 0; reg.Negate = NEGATE_NONE;
if (opcode == OPCODE_KIL || if (opcode == OPCODE_KIL ||
opcode == OPCODE_TEX || opcode == OPCODE_TEX ||
@@ -100,7 +100,8 @@ GLboolean r300FPIsNativeSwizzle(GLuint opcode, struct prog_src_register reg)
opcode == OPCODE_TXP) { opcode == OPCODE_TXP) {
int j; int j;
if (reg.Abs || reg.NegateBase != (15*reg.NegateAbs)) if (reg.Abs || (reg.Negate != NEGATE_XYZW &&
reg.Negate != NEGATE_NONE))
return GL_FALSE; return GL_FALSE;
for(j = 0; j < 4; ++j) { 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) if (GET_SWZ(reg.Swizzle, j) != SWIZZLE_NIL)
relevant |= 1 << j; relevant |= 1 << j;
if ((reg.NegateBase & relevant) && (reg.NegateBase & relevant) != relevant) if ((reg.Negate & relevant) && (reg.Negate & relevant) != relevant)
return GL_FALSE; return GL_FALSE;
if (!lookup_native_swizzle(reg.Swizzle)) 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) void r300FPBuildSwizzle(struct nqssadce_state *s, struct prog_dst_register dst, struct prog_src_register src)
{ {
if (src.Abs) if (src.Abs)
src.NegateBase = 0; src.Negate = NEGATE_NONE;
while(dst.WriteMask) { while(dst.WriteMask) {
const struct swizzle_data *best_swizzle = 0; 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) { if ((src.Negate & best_matchmask) != 0) {
best_matchmask &= src.NegateBase; best_matchmask &= src.Negate;
rgbnegate = !src.NegateAbs; rgbnegate = !src.Negate;
} else { } else {
rgbnegate = src.NegateAbs; rgbnegate = src.Negate;
} }
struct prog_instruction *inst; struct prog_instruction *inst;

View 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, static unsigned long t_src(struct r300_vertex_program *vp,
struct prog_src_register *src) 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. * which equal our VSF_FLAGS_ values, so it's safe to just pass it here.
*/ */
return PVS_SRC_OPERAND(t_src_index(vp, src), 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, 2)),
t_swizzle(GET_SWZ(src->Swizzle, 3)), t_swizzle(GET_SWZ(src->Swizzle, 3)),
t_src_class(src->File), 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, static unsigned long t_src_scalar(struct r300_vertex_program *vp,
struct prog_src_register *src) 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. * which equal our VSF_FLAGS_ values, so it's safe to just pass it here.
*/ */
return PVS_SRC_OPERAND(t_src_index(vp, src), 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_swizzle(GET_SWZ(src->Swizzle, 0)), t_swizzle(GET_SWZ(src->Swizzle, 0)),
t_src_class(src->File), t_src_class(src->File),
src-> src->Negate ? VSF_FLAG_ALL : VSF_FLAG_NONE) |
NegateBase ? VSF_FLAG_ALL : VSF_FLAG_NONE) |
(src->RelAddr << 4); (src->RelAddr << 4);
} }
@@ -307,7 +306,7 @@ static GLuint *r300TranslateOpcodeABS(struct r300_vertex_program *vp,
t_swizzle(GET_SWZ(src[0].Swizzle, 3)), t_swizzle(GET_SWZ(src[0].Swizzle, 3)),
t_src_class(src[0].File), t_src_class(src[0].File),
(!src[0]. (!src[0].
NegateBase) ? VSF_FLAG_ALL : VSF_FLAG_NONE) | Negate) ? VSF_FLAG_ALL : VSF_FLAG_NONE) |
(src[0].RelAddr << 4); (src[0].RelAddr << 4);
inst[3] = 0; inst[3] = 0;
@@ -369,8 +368,7 @@ static GLuint *r300TranslateOpcodeDP3(struct r300_vertex_program *vp,
t_swizzle(GET_SWZ(src[0].Swizzle, 2)), t_swizzle(GET_SWZ(src[0].Swizzle, 2)),
SWIZZLE_ZERO, SWIZZLE_ZERO,
t_src_class(src[0].File), t_src_class(src[0].File),
src[0]. src[0].Negate ? VSF_FLAG_XYZ : VSF_FLAG_NONE) |
NegateBase ? VSF_FLAG_XYZ : VSF_FLAG_NONE) |
(src[0].RelAddr << 4); (src[0].RelAddr << 4);
inst[2] = inst[2] =
PVS_SRC_OPERAND(t_src_index(vp, &src[1]), 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, 1)),
t_swizzle(GET_SWZ(src[1].Swizzle, 2)), SWIZZLE_ZERO, t_swizzle(GET_SWZ(src[1].Swizzle, 2)), SWIZZLE_ZERO,
t_src_class(src[1].File), t_src_class(src[1].File),
src[1]. src[1].Negate ? VSF_FLAG_XYZ : VSF_FLAG_NONE) |
NegateBase ? VSF_FLAG_XYZ : VSF_FLAG_NONE) |
(src[1].RelAddr << 4); (src[1].RelAddr << 4);
inst[3] = __CONST(1, SWIZZLE_ZERO); 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)), t_swizzle(GET_SWZ(src[0].Swizzle, 2)),
PVS_SRC_SELECT_FORCE_1, PVS_SRC_SELECT_FORCE_1,
t_src_class(src[0].File), t_src_class(src[0].File),
src[0]. src[0].Negate ? VSF_FLAG_XYZ : VSF_FLAG_NONE) |
NegateBase ? VSF_FLAG_XYZ : VSF_FLAG_NONE) |
(src[0].RelAddr << 4); (src[0].RelAddr << 4);
inst[2] = t_src(vp, &src[1]); inst[2] = t_src(vp, &src[1]);
inst[3] = __CONST(1, SWIZZLE_ZERO); 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, PVS_SRC_SELECT_W, PVS_SRC_REG_TEMPORARY,
/* Not 100% sure about this */ /* Not 100% sure about this */
(!src[0]. (!src[0].
NegateBase) ? VSF_FLAG_ALL : VSF_FLAG_NONE Negate) ? VSF_FLAG_ALL : VSF_FLAG_NONE
/*VSF_FLAG_ALL */ ); /*VSF_FLAG_ALL */ );
inst[3] = __CONST(0, SWIZZLE_ZERO); inst[3] = __CONST(0, SWIZZLE_ZERO);
(*u_temp_i)--; (*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_swizzle(GET_SWZ(src[0].Swizzle, 0)), t_swizzle(GET_SWZ(src[0].Swizzle, 0)),
t_src_class(src[0].File), t_src_class(src[0].File),
src[0]. src[0].Negate ? VSF_FLAG_ALL : VSF_FLAG_NONE) |
NegateBase ? VSF_FLAG_ALL : VSF_FLAG_NONE) |
(src[0].RelAddr << 4); (src[0].RelAddr << 4);
inst[2] = __CONST(0, SWIZZLE_ZERO); inst[2] = __CONST(0, SWIZZLE_ZERO);
inst[3] = __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 PVS_SRC_SELECT_FORCE_0, // Z
t_swizzle(GET_SWZ(src[0].Swizzle, 1)), // Y t_swizzle(GET_SWZ(src[0].Swizzle, 1)), // Y
t_src_class(src[0].File), t_src_class(src[0].File),
src[0]. src[0].Negate ? VSF_FLAG_ALL : VSF_FLAG_NONE) |
NegateBase ? VSF_FLAG_ALL : VSF_FLAG_NONE) |
(src[0].RelAddr << 4); (src[0].RelAddr << 4);
inst[2] = PVS_SRC_OPERAND(t_src_index(vp, &src[0]), t_swizzle(GET_SWZ(src[0].Swizzle, 1)), // Y 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 t_swizzle(GET_SWZ(src[0].Swizzle, 3)), // W
PVS_SRC_SELECT_FORCE_0, // Z PVS_SRC_SELECT_FORCE_0, // Z
t_swizzle(GET_SWZ(src[0].Swizzle, 0)), // X t_swizzle(GET_SWZ(src[0].Swizzle, 0)), // X
t_src_class(src[0].File), t_src_class(src[0].File),
src[0]. src[0].Negate ? VSF_FLAG_ALL : VSF_FLAG_NONE) |
NegateBase ? VSF_FLAG_ALL : VSF_FLAG_NONE) |
(src[0].RelAddr << 4); (src[0].RelAddr << 4);
inst[3] = PVS_SRC_OPERAND(t_src_index(vp, &src[0]), t_swizzle(GET_SWZ(src[0].Swizzle, 1)), // Y 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 t_swizzle(GET_SWZ(src[0].Swizzle, 0)), // X
PVS_SRC_SELECT_FORCE_0, // Z PVS_SRC_SELECT_FORCE_0, // Z
t_swizzle(GET_SWZ(src[0].Swizzle, 3)), // W t_swizzle(GET_SWZ(src[0].Swizzle, 3)), // W
t_src_class(src[0].File), t_src_class(src[0].File),
src[0]. src[0].Negate ? VSF_FLAG_ALL : VSF_FLAG_NONE) |
NegateBase ? VSF_FLAG_ALL : VSF_FLAG_NONE) |
(src[0].RelAddr << 4); (src[0].RelAddr << 4);
return inst; return inst;
@@ -837,7 +829,7 @@ static GLuint *r300TranslateOpcodeSUB(struct r300_vertex_program *vp,
t_swizzle(GET_SWZ(src[1].Swizzle, 3)), t_swizzle(GET_SWZ(src[1].Swizzle, 3)),
t_src_class(src[1].File), t_src_class(src[1].File),
(!src[1]. (!src[1].
NegateBase) ? VSF_FLAG_ALL : VSF_FLAG_NONE) | Negate) ? VSF_FLAG_ALL : VSF_FLAG_NONE) |
(src[1].RelAddr << 4); (src[1].RelAddr << 4);
inst[3] = 0; inst[3] = 0;
#else #else
@@ -857,7 +849,7 @@ static GLuint *r300TranslateOpcodeSUB(struct r300_vertex_program *vp,
t_swizzle(GET_SWZ(src[1].Swizzle, 3)), t_swizzle(GET_SWZ(src[1].Swizzle, 3)),
t_src_class(src[1].File), t_src_class(src[1].File),
(!src[1]. (!src[1].
NegateBase) ? VSF_FLAG_ALL : VSF_FLAG_NONE) | Negate) ? VSF_FLAG_ALL : VSF_FLAG_NONE) |
(src[1].RelAddr << 4); (src[1].RelAddr << 4);
#endif #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, 0)), // X
t_swizzle(GET_SWZ(src[0].Swizzle, 3)), // W t_swizzle(GET_SWZ(src[0].Swizzle, 3)), // W
t_src_class(src[0].File), t_src_class(src[0].File),
src[0]. src[0].Negate ? VSF_FLAG_ALL : VSF_FLAG_NONE) |
NegateBase ? VSF_FLAG_ALL : VSF_FLAG_NONE) |
(src[0].RelAddr << 4); (src[0].RelAddr << 4);
inst[2] = PVS_SRC_OPERAND(t_src_index(vp, &src[1]), t_swizzle(GET_SWZ(src[1].Swizzle, 2)), // Z 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, 0)), // X
t_swizzle(GET_SWZ(src[1].Swizzle, 1)), // Y t_swizzle(GET_SWZ(src[1].Swizzle, 1)), // Y
t_swizzle(GET_SWZ(src[1].Swizzle, 3)), // W t_swizzle(GET_SWZ(src[1].Swizzle, 3)), // W
t_src_class(src[1].File), t_src_class(src[1].File),
src[1]. src[1].Negate ? VSF_FLAG_ALL : VSF_FLAG_NONE) |
NegateBase ? VSF_FLAG_ALL : VSF_FLAG_NONE) |
(src[1].RelAddr << 4); (src[1].RelAddr << 4);
inst[3] = __CONST(1, SWIZZLE_ZERO); inst[3] = __CONST(1, SWIZZLE_ZERO);
inst += 4; inst += 4;
@@ -931,15 +921,14 @@ static GLuint *r300TranslateOpcodeXPD(struct r300_vertex_program *vp,
t_swizzle(GET_SWZ(src[1].Swizzle, 3)), // W t_swizzle(GET_SWZ(src[1].Swizzle, 3)), // W
t_src_class(src[1].File), t_src_class(src[1].File),
(!src[1]. (!src[1].
NegateBase) ? VSF_FLAG_ALL : VSF_FLAG_NONE) | Negate) ? VSF_FLAG_ALL : VSF_FLAG_NONE) |
(src[1].RelAddr << 4); (src[1].RelAddr << 4);
inst[2] = PVS_SRC_OPERAND(t_src_index(vp, &src[0]), t_swizzle(GET_SWZ(src[0].Swizzle, 2)), // Z 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, 0)), // X
t_swizzle(GET_SWZ(src[0].Swizzle, 1)), // Y t_swizzle(GET_SWZ(src[0].Swizzle, 1)), // Y
t_swizzle(GET_SWZ(src[0].Swizzle, 3)), // W t_swizzle(GET_SWZ(src[0].Swizzle, 3)), // W
t_src_class(src[0].File), t_src_class(src[0].File),
src[0]. src[0].Negate ? VSF_FLAG_ALL : VSF_FLAG_NONE) |
NegateBase ? VSF_FLAG_ALL : VSF_FLAG_NONE) |
(src[0].RelAddr << 4); (src[0].RelAddr << 4);
inst[3] = inst[3] =
PVS_SRC_OPERAND(*u_temp_i, PVS_SRC_SELECT_X, PVS_SRC_SELECT_Y, PVS_SRC_OPERAND(*u_temp_i, PVS_SRC_SELECT_X, PVS_SRC_SELECT_Y,

View File

@@ -156,9 +156,9 @@ static GLboolean transform_TEX(
* r < tex <=> -tex+r < 0 * r < tex <=> -tex+r < 0
* r >= tex <=> not (-tex+r < 0 */ * r >= tex <=> not (-tex+r < 0 */
if (comparefunc == GL_LESS || comparefunc == GL_GEQUAL) 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 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].Opcode = OPCODE_CMP;
tgt[2].DstReg = orig_inst->DstReg; 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) if (reg.Abs)
return GL_FALSE; return GL_FALSE;
if (reg.NegateAbs) if (reg.Negate)
reg.NegateBase ^= 15; reg.Negate ^= NEGATE_XYZW;
if (opcode == OPCODE_KIL) { if (opcode == OPCODE_KIL) {
if (reg.Swizzle != SWIZZLE_NOOP) 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) { for(i = 0; i < 4; ++i) {
GLuint swz = GET_SWZ(reg.Swizzle, i); GLuint swz = GET_SWZ(reg.Swizzle, i);
if (swz == SWIZZLE_NIL) { if (swz == SWIZZLE_NIL) {
reg.NegateBase &= ~(1 << i); reg.Negate &= ~(1 << i);
continue; continue;
} }
if (swz >= 4) 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_FALSE;
return GL_TRUE; return GL_TRUE;
} else if (opcode == OPCODE_DDX || opcode == OPCODE_DDY) { } else if (opcode == OPCODE_DDX || opcode == OPCODE_DDY) {
/* DDX/MDH and DDY/MDV explicitly ignore incoming swizzles; /* DDX/MDH and DDY/MDV explicitly ignore incoming swizzles;
* if it doesn't fit perfectly into a .xyzw case... */ * if it doesn't fit perfectly into a .xyzw case... */
if (reg.Swizzle == SWIZZLE_NOOP && !reg.Abs if (reg.Swizzle == SWIZZLE_NOOP && !reg.Abs && !reg.Negate)
&& !reg.NegateBase && !reg.NegateAbs)
return GL_TRUE; return GL_TRUE;
return GL_FALSE; 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) if (swz != SWIZZLE_NIL && swz != SWIZZLE_ZERO)
relevant |= 1 << i; relevant |= 1 << i;
} }
if ((reg.NegateBase & relevant) && ((reg.NegateBase & relevant) != relevant)) if ((reg.Negate & relevant) && ((reg.Negate & relevant) != relevant))
return GL_FALSE; return GL_FALSE;
return GL_TRUE; return GL_TRUE;
@@ -379,7 +378,7 @@ static void nqssadce_build_swizzle(struct nqssadce_state *s,
GLuint swz = GET_SWZ(src.Swizzle, i); GLuint swz = GET_SWZ(src.Swizzle, i);
if (swz == SWIZZLE_NIL) if (swz == SWIZZLE_NIL)
continue; 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)); _mesa_insert_instructions(s->Program, s->IP, (negatebase[0] ? 1 : 0) + (negatebase[1] ? 1 : 0));

View File

@@ -61,12 +61,12 @@ static struct prog_src_register lmul_swizzle(GLuint swizzle, struct prog_src_reg
struct prog_src_register tmp = srcreg; struct prog_src_register tmp = srcreg;
int i; int i;
tmp.Swizzle = 0; tmp.Swizzle = 0;
tmp.NegateBase = 0; tmp.Negate = NEGATE_NONE;
for(i = 0; i < 4; ++i) { for(i = 0; i < 4; ++i) {
GLuint swz = GET_SWZ(swizzle, i); GLuint swz = GET_SWZ(swizzle, i);
if (swz < 4) { if (swz < 4) {
tmp.Swizzle |= GET_SWZ(srcreg.Swizzle, swz) << (i*3); 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 { } else {
tmp.Swizzle |= swz << (i*3); 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].File = PROGRAM_TEMPORARY;
inst->SrcReg[src].Index = dstreg.Index; inst->SrcReg[src].Index = dstreg.Index;
inst->SrcReg[src].Swizzle = 0; inst->SrcReg[src].Swizzle = 0;
inst->SrcReg[src].NegateBase = 0; inst->SrcReg[src].Negate = NEGATE_NONE;
inst->SrcReg[src].Abs = 0; inst->SrcReg[src].Abs = 0;
inst->SrcReg[src].NegateAbs = 0;
for(i = 0; i < 4; ++i) { for(i = 0; i < 4; ++i) {
if (GET_BIT(sourced, i)) if (GET_BIT(sourced, i))
inst->SrcReg[src].Swizzle |= i << (3*i); inst->SrcReg[src].Swizzle |= i << (3*i);

View 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) static void set_negate_base(struct prog_src_register *SrcReg, int coordinate, int negate)
{ {
SrcReg->NegateBase &= ~(1 << coordinate); /* XXX note sure about this negation logic here */
SrcReg->NegateBase |= (negate << coordinate); SrcReg->Negate &= ~(1 << coordinate);
SrcReg->Negate |= (negate << coordinate);
} }
static struct prog_dst_register dstreg(int file, int index) 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; struct prog_src_register newreg = reg;
newreg.Abs = 1; newreg.Abs = 1;
newreg.NegateBase = 0; newreg.Negate = NEGATE_NONE;
newreg.NegateAbs = 0;
return newreg; return newreg;
} }
static struct prog_src_register negate(struct prog_src_register reg) static struct prog_src_register negate(struct prog_src_register reg)
{ {
struct prog_src_register newreg = reg; struct prog_src_register newreg = reg;
newreg.NegateAbs = !newreg.NegateAbs; newreg.Negate = newreg.Negate ^ NEGATE_XYZW;
return newreg; return newreg;
} }
@@ -189,8 +189,7 @@ static void transform_ABS(struct radeon_transform_context* t,
{ {
struct prog_src_register src = inst->SrcReg[0]; struct prog_src_register src = inst->SrcReg[0];
src.Abs = 1; src.Abs = 1;
src.NegateBase = 0; src.Negate = NEGATE_NONE;
src.NegateAbs = 0;
emit1(t->Program, OPCODE_MOV, inst->SaturateMode, inst->DstReg, src); 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_instruction* inst)
{ {
struct prog_src_register src0 = inst->SrcReg[0]; struct prog_src_register src0 = inst->SrcReg[0];
if (src0.NegateAbs) { if (src0.Negate) {
if (src0.Abs) { if (src0.Abs) {
int tempreg = radeonFindFreeTemporary(t); int tempreg = radeonFindFreeTemporary(t);
emit1(t->Program, OPCODE_MOV, 0, dstreg(PROGRAM_TEMPORARY, tempreg), src0); emit1(t->Program, OPCODE_MOV, 0, dstreg(PROGRAM_TEMPORARY, tempreg), src0);
src0 = srcreg(src0.File, src0.Index); src0 = srcreg(src0.File, src0.Index);
} else { } else {
src0.NegateAbs = 0; src0.Negate ^= NEGATE_XYZW;
src0.NegateBase ^= NEGATE_XYZW;
} }
} }
set_swizzle(&src0, 3, SWIZZLE_ONE); 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, B.Swizzle = MAKE_SWIZZLE4(SWIZZLE_ONE, SWIZZLE_ONE,
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, emit2(t->Program, inst->Opcode, inst->SaturateMode, inst->DstReg,
inst->SrcReg[0], B); inst->SrcReg[0], B);

View 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[2] = inst->SrcReg[1];
inst->SrcReg[1].File = PROGRAM_BUILTIN; inst->SrcReg[1].File = PROGRAM_BUILTIN;
inst->SrcReg[1].Swizzle = SWIZZLE_1111; inst->SrcReg[1].Swizzle = SWIZZLE_1111;
inst->SrcReg[1].NegateBase = 0; inst->SrcReg[1].Negate = NEGATE_NONE;
inst->SrcReg[1].NegateAbs = 0;
inst->Opcode = OPCODE_MAD; inst->Opcode = OPCODE_MAD;
break; break;
case OPCODE_CMP: case OPCODE_CMP:
@@ -730,7 +729,7 @@ static GLboolean fill_instruction_into_pair(struct pair_state *s, struct radeon_
srcrgb = GL_TRUE; srcrgb = GL_TRUE;
else if (swz < 4) else if (swz < 4)
srcalpha = GL_TRUE; 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; negatebase = 1;
} }
source = alloc_pair_source(s, pair, inst->SrcReg[i], srcrgb, srcalpha); 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].Source = source;
pair->RGB.Arg[i].Swizzle = inst->SrcReg[i].Swizzle & 0x1ff; pair->RGB.Arg[i].Swizzle = inst->SrcReg[i].Swizzle & 0x1ff;
pair->RGB.Arg[i].Abs = inst->SrcReg[i].Abs; 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) { if (pairinst->NeedAlpha) {
GLboolean srcrgb = GL_FALSE; GLboolean srcrgb = GL_FALSE;
GLboolean srcalpha = 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); GLuint swz = GET_SWZ(inst->SrcReg[i].Swizzle, pairinst->IsTranscendent ? 0 : 3);
if (swz < 3) if (swz < 3)
srcrgb = GL_TRUE; 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].Source = source;
pair->Alpha.Arg[i].Swizzle = swz; pair->Alpha.Arg[i].Swizzle = swz;
pair->Alpha.Arg[i].Abs = inst->SrcReg[i].Abs; 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;
} }
} }

View File

@@ -570,9 +570,8 @@ static void emit_arg( struct prog_src_register *src,
src->File = reg.file; src->File = reg.file;
src->Index = reg.idx; src->Index = reg.idx;
src->Swizzle = reg.swz; src->Swizzle = reg.swz;
src->NegateBase = reg.negate ? NEGATE_XYZW : 0; src->Negate = reg.negate ? NEGATE_XYZW : NEGATE_NONE;
src->Abs = 0; src->Abs = 0;
src->NegateAbs = 0;
src->RelAddr = 0; src->RelAddr = 0;
/* Check that bitfield sizes aren't exceeded */ /* Check that bitfield sizes aren't exceeded */
ASSERT(src->Index == reg.idx); ASSERT(src->Index == reg.idx);

View File

@@ -663,9 +663,8 @@ static void emit_arg( struct prog_src_register *reg,
reg->File = ureg.file; reg->File = ureg.file;
reg->Index = ureg.idx; reg->Index = ureg.idx;
reg->Swizzle = ureg.swz; reg->Swizzle = ureg.swz;
reg->NegateBase = ureg.negatebase ? 0xf : 0x0; reg->Negate = ureg.negatebase ? NEGATE_XYZW : NEGATE_NONE;
reg->Abs = ureg.abs; reg->Abs = ureg.abs;
reg->NegateAbs = ureg.negateabs;
} }
static void emit_dst( struct prog_dst_register *dst, static void emit_dst( struct prog_dst_register *dst,

View File

@@ -2669,7 +2669,7 @@ parse_vector_src_reg(GLcontext *ctx, const GLubyte **inst,
reg->File = file; reg->File = file;
reg->Index = index; reg->Index = index;
reg->Swizzle = MAKE_SWIZZLE4(swizzle[0], swizzle[1], swizzle[2], swizzle[3]); reg->Swizzle = MAKE_SWIZZLE4(swizzle[0], swizzle[1], swizzle[2], swizzle[3]);
reg->NegateBase = negateMask; reg->Negate = negateMask;
reg->RelAddr = isRelOffset; reg->RelAddr = isRelOffset;
return 0; return 0;
} }
@@ -2703,7 +2703,7 @@ parse_scalar_src_reg(GLcontext *ctx, const GLubyte **inst,
reg->File = file; reg->File = file;
reg->Index = index; reg->Index = index;
reg->Swizzle = (swizzle[0] << 0); reg->Swizzle = (swizzle[0] << 0);
reg->NegateBase = negateMask; reg->Negate = negateMask;
reg->RelAddr = isRelOffset; reg->RelAddr = isRelOffset;
return 0; return 0;
} }
@@ -3019,7 +3019,7 @@ parse_fp_instruction (GLcontext * ctx, const GLubyte ** inst,
parse_extended_swizzle_mask(inst, swizzle, &negateMask); parse_extended_swizzle_mask(inst, swizzle, &negateMask);
fp->SrcReg[0].File = file; fp->SrcReg[0].File = file;
fp->SrcReg[0].Index = index; fp->SrcReg[0].Index = index;
fp->SrcReg[0].NegateBase = negateMask; fp->SrcReg[0].Negate = negateMask;
fp->SrcReg[0].Swizzle = MAKE_SWIZZLE4(swizzle[0], fp->SrcReg[0].Swizzle = MAKE_SWIZZLE4(swizzle[0],
swizzle[1], swizzle[1],
swizzle[2], swizzle[2],
@@ -3363,7 +3363,7 @@ parse_vp_instruction (GLcontext * ctx, const GLubyte ** inst,
parse_extended_swizzle_mask (inst, swizzle, &negateMask); parse_extended_swizzle_mask (inst, swizzle, &negateMask);
vp->SrcReg[0].File = file; vp->SrcReg[0].File = file;
vp->SrcReg[0].Index = index; vp->SrcReg[0].Index = index;
vp->SrcReg[0].NegateBase = negateMask; vp->SrcReg[0].Negate = negateMask;
vp->SrcReg[0].Swizzle = MAKE_SWIZZLE4(swizzle[0], vp->SrcReg[0].Swizzle = MAKE_SWIZZLE4(swizzle[0],
swizzle[1], swizzle[1],
swizzle[2], swizzle[2],

View File

@@ -957,6 +957,7 @@ Parse_VectorSrc(struct parse_state *parseState,
GLfloat sign = 1.0F; GLfloat sign = 1.0F;
GLubyte token[100]; GLubyte token[100];
GLint idx; GLint idx;
GLuint negateBase, negateAbs;
/* /*
* First, take care of +/- and absolute value stuff. * First, take care of +/- and absolute value stuff.
@@ -968,21 +969,23 @@ Parse_VectorSrc(struct parse_state *parseState,
if (Parse_String(parseState, "|")) { if (Parse_String(parseState, "|")) {
srcReg->Abs = GL_TRUE; 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, "-")) if (Parse_String(parseState, "-"))
srcReg->NegateBase = NEGATE_XYZW; negateBase = NEGATE_XYZW;
else if (Parse_String(parseState, "+")) else if (Parse_String(parseState, "+"))
srcReg->NegateBase = NEGATE_NONE; negateBase = NEGATE_NONE;
else else
srcReg->NegateBase = NEGATE_NONE; negateBase = NEGATE_NONE;
} }
else { else {
srcReg->Abs = GL_FALSE; srcReg->Abs = GL_FALSE;
srcReg->NegateAbs = GL_FALSE; negateAbs = NEGATE_NONE;
srcReg->NegateBase = (sign < 0.0F) ? NEGATE_XYZW : 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 */ /* This should be the real src vector/register name */
if (!Peek_Token(parseState, token)) if (!Peek_Token(parseState, token))
RETURN_ERROR; RETURN_ERROR;
@@ -1083,6 +1086,7 @@ Parse_ScalarSrcReg(struct parse_state *parseState,
GLfloat sign = 1.0F; GLfloat sign = 1.0F;
GLboolean needSuffix = GL_TRUE; GLboolean needSuffix = GL_TRUE;
GLint idx; GLint idx;
GLuint negateBase, negateAbs;
/* /*
* First, take care of +/- and absolute value stuff. * First, take care of +/- and absolute value stuff.
@@ -1094,21 +1098,23 @@ Parse_ScalarSrcReg(struct parse_state *parseState,
if (Parse_String(parseState, "|")) { if (Parse_String(parseState, "|")) {
srcReg->Abs = GL_TRUE; 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, "-")) if (Parse_String(parseState, "-"))
srcReg->NegateBase = NEGATE_XYZW; negateBase = NEGATE_XYZW;
else if (Parse_String(parseState, "+")) else if (Parse_String(parseState, "+"))
srcReg->NegateBase = NEGATE_NONE; negateBase = NEGATE_NONE;
else else
srcReg->NegateBase = NEGATE_NONE; negateBase = NEGATE_NONE;
} }
else { else {
srcReg->Abs = GL_FALSE; srcReg->Abs = GL_FALSE;
srcReg->NegateAbs = GL_FALSE; negateAbs = NEGATE_NONE;
srcReg->NegateBase = (sign < 0.0F) ? NEGATE_XYZW : NEGATE_NONE; negateBase = (sign < 0.0F) ? NEGATE_XYZW : NEGATE_NONE;
} }
srcReg->Negate = srcReg->Abs ? negateAbs : negateBase;
if (!Peek_Token(parseState, token)) if (!Peek_Token(parseState, token))
RETURN_ERROR; RETURN_ERROR;
@@ -1247,9 +1253,8 @@ Parse_PrintInstruction(struct parse_state *parseState,
} }
inst->SrcReg[0].Swizzle = SWIZZLE_NOOP; inst->SrcReg[0].Swizzle = SWIZZLE_NOOP;
inst->SrcReg[0].NegateBase = NEGATE_NONE;
inst->SrcReg[0].Abs = GL_FALSE; inst->SrcReg[0].Abs = GL_FALSE;
inst->SrcReg[0].NegateAbs = GL_FALSE; inst->SrcReg[0].Negate = NEGATE_NONE;
return GL_TRUE; return GL_TRUE;
} }

View File

@@ -641,12 +641,12 @@ Parse_SwizzleSrcReg(struct parse_state *parseState, struct prog_src_register *sr
RETURN_ERROR; RETURN_ERROR;
if (token[0] == '-') { if (token[0] == '-') {
(void) Parse_String(parseState, "-"); (void) Parse_String(parseState, "-");
srcReg->NegateBase = NEGATE_XYZW; srcReg->Negate = NEGATE_XYZW;
if (!Peek_Token(parseState, token)) if (!Peek_Token(parseState, token))
RETURN_ERROR; RETURN_ERROR;
} }
else { 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 */ /* 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)) if (!Peek_Token(parseState, token))
RETURN_ERROR; RETURN_ERROR;
if (token[0] == '-') { if (token[0] == '-') {
srcReg->NegateBase = NEGATE_XYZW; srcReg->Negate = NEGATE_XYZW;
(void) Parse_String(parseState, "-"); /* consume '-' */ (void) Parse_String(parseState, "-"); /* consume '-' */
if (!Peek_Token(parseState, token)) if (!Peek_Token(parseState, token))
RETURN_ERROR; RETURN_ERROR;
} }
else { 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 */ /* 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; RETURN_ERROR;
srcReg->RelAddr = GL_FALSE; srcReg->RelAddr = GL_FALSE;
srcReg->NegateBase = NEGATE_NONE; srcReg->Negate = NEGATE_NONE;
srcReg->Swizzle = SWIZZLE_NOOP; srcReg->Swizzle = SWIZZLE_NOOP;
/* Register can be R<n>, c[n], c[n +/- offset], a named vertex attrib, /* Register can be R<n>, c[n], c[n +/- offset], a named vertex attrib,

View File

@@ -212,19 +212,14 @@ fetch_vector4(const struct prog_src_register *source,
result[3] = src[GET_SWZ(source->Swizzle, 3)]; 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) { if (source->Abs) {
result[0] = FABSF(result[0]); result[0] = FABSF(result[0]);
result[1] = FABSF(result[1]); result[1] = FABSF(result[1]);
result[2] = FABSF(result[2]); result[2] = FABSF(result[2]);
result[3] = FABSF(result[3]); result[3] = FABSF(result[3]);
} }
if (source->NegateAbs) { if (source->Negate) {
ASSERT(source->Negate == NEGATE_XYZW);
result[0] = -result[0]; result[0] = -result[0];
result[1] = -result[1]; result[1] = -result[1];
result[2] = -result[2]; result[2] = -result[2];
@@ -259,7 +254,7 @@ fetch_vector4ui(const struct prog_src_register *source,
result[3] = src[GET_SWZ(source->Swizzle, 3)]; 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[2] = deriv[GET_SWZ(source->Swizzle, 2)];
result[3] = deriv[GET_SWZ(source->Swizzle, 3)]; 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) { if (source->Abs) {
result[0] = FABSF(result[0]); result[0] = FABSF(result[0]);
result[1] = FABSF(result[1]); result[1] = FABSF(result[1]);
result[2] = FABSF(result[2]); result[2] = FABSF(result[2]);
result[3] = FABSF(result[3]); result[3] = FABSF(result[3]);
} }
if (source->NegateAbs) { if (source->Negate) {
ASSERT(source->Negate == NEGATE_XYZW);
result[0] = -result[0]; result[0] = -result[0];
result[1] = -result[1]; result[1] = -result[1];
result[2] = -result[2]; result[2] = -result[2];
@@ -336,13 +326,10 @@ fetch_vector1(const struct prog_src_register *source,
result[0] = src[GET_SWZ(source->Swizzle, 0)]; result[0] = src[GET_SWZ(source->Swizzle, 0)];
if (source->NegateBase) {
result[0] = -result[0];
}
if (source->Abs) { if (source->Abs) {
result[0] = FABSF(result[0]); result[0] = FABSF(result[0]);
} }
if (source->NegateAbs) { if (source->Negate) {
result[0] = -result[0]; result[0] = -result[0];
} }
} }
@@ -1514,7 +1501,7 @@ _mesa_execute_program(GLcontext * ctx,
ASSERT(swz <= 3); ASSERT(swz <= 3);
result[i] = src[swz]; result[i] = src[swz];
} }
if (source->NegateBase & (1 << i)) if (source->Negate & (1 << i))
result[i] = -result[i]; result[i] = -result[i];
} }
store_vector4(inst, machine, result); store_vector4(inst, machine, result);

View File

@@ -261,37 +261,15 @@ struct prog_src_register
GLuint Swizzle:12; GLuint Swizzle:12;
GLuint RelAddr:1; GLuint RelAddr:1;
/** /** Take the component-wise absolute value */
* \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.
*/
GLuint Abs:1; 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;
/*@}*/
}; };

View 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 * \param extended if true, also allow 0, 1 values
*/ */
const char * 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 const char swz[] = "xyzw01!?"; /* See SWIZZLE_x definitions */
static char s[20]; static char s[20];
GLuint i = 0; GLuint i = 0;
if (!extended && swizzle == SWIZZLE_NOOP && negateBase == 0) if (!extended && swizzle == SWIZZLE_NOOP && negateMask == 0)
return ""; /* no swizzle/negation */ return ""; /* no swizzle/negation */
if (!extended) if (!extended)
s[i++] = '.'; s[i++] = '.';
if (negateBase & NEGATE_X) if (negateMask & NEGATE_X)
s[i++] = '-'; s[i++] = '-';
s[i++] = swz[GET_SWZ(swizzle, 0)]; s[i++] = swz[GET_SWZ(swizzle, 0)];
@@ -345,7 +345,7 @@ _mesa_swizzle_string(GLuint swizzle, GLuint negateBase, GLboolean extended)
s[i++] = ','; s[i++] = ',';
} }
if (negateBase & NEGATE_Y) if (negateMask & NEGATE_Y)
s[i++] = '-'; s[i++] = '-';
s[i++] = swz[GET_SWZ(swizzle, 1)]; s[i++] = swz[GET_SWZ(swizzle, 1)];
@@ -353,7 +353,7 @@ _mesa_swizzle_string(GLuint swizzle, GLuint negateBase, GLboolean extended)
s[i++] = ','; s[i++] = ',';
} }
if (negateBase & NEGATE_Z) if (negateMask & NEGATE_Z)
s[i++] = '-'; s[i++] = '-';
s[i++] = swz[GET_SWZ(swizzle, 2)]; s[i++] = swz[GET_SWZ(swizzle, 2)];
@@ -361,7 +361,7 @@ _mesa_swizzle_string(GLuint swizzle, GLuint negateBase, GLboolean extended)
s[i++] = ','; s[i++] = ',';
} }
if (negateBase & NEGATE_W) if (negateMask & NEGATE_W)
s[i++] = '-'; s[i++] = '-';
s[i++] = swz[GET_SWZ(swizzle, 3)]; s[i++] = swz[GET_SWZ(swizzle, 3)];
@@ -465,14 +465,14 @@ fprint_src_reg(FILE *f,
reg_string((gl_register_file) srcReg->File, reg_string((gl_register_file) srcReg->File,
srcReg->Index, mode, srcReg->RelAddr, prog), srcReg->Index, mode, srcReg->RelAddr, prog),
_mesa_swizzle_string(srcReg->Swizzle, _mesa_swizzle_string(srcReg->Swizzle,
srcReg->NegateBase, GL_FALSE), srcReg->Negate, GL_FALSE),
abs); abs);
#if 0 #if 0
_mesa_fprintf(f, "%s[%d]%s", _mesa_fprintf(f, "%s[%d]%s",
file_string((gl_register_file) srcReg->File, mode), file_string((gl_register_file) srcReg->File, mode),
srcReg->Index, srcReg->Index,
_mesa_swizzle_string(srcReg->Swizzle, _mesa_swizzle_string(srcReg->Swizzle,
srcReg->NegateBase, GL_FALSE)); srcReg->Negate, GL_FALSE));
#endif #endif
} }
@@ -566,7 +566,7 @@ _mesa_fprint_instruction_opt(FILE *f,
mode), mode),
inst->SrcReg[0].Index, inst->SrcReg[0].Index,
_mesa_swizzle_string(inst->SrcReg[0].Swizzle, _mesa_swizzle_string(inst->SrcReg[0].Swizzle,
inst->SrcReg[0].NegateBase, GL_FALSE)); inst->SrcReg[0].Negate, GL_FALSE));
} }
if (inst->Comment) if (inst->Comment)
_mesa_fprintf(f, " # %s", inst->Comment); _mesa_fprintf(f, " # %s", inst->Comment);
@@ -583,7 +583,7 @@ _mesa_fprint_instruction_opt(FILE *f,
mode), mode),
inst->SrcReg[0].Index, inst->SrcReg[0].Index,
_mesa_swizzle_string(inst->SrcReg[0].Swizzle, _mesa_swizzle_string(inst->SrcReg[0].Swizzle,
inst->SrcReg[0].NegateBase, GL_TRUE)); inst->SrcReg[0].Negate, GL_TRUE));
fprint_comment(f, inst); fprint_comment(f, inst);
break; break;
case OPCODE_TEX: case OPCODE_TEX:

View File

@@ -241,7 +241,7 @@ _mesa_append_fog_code(GLcontext *ctx, struct gl_fragment_program *fprog)
inst->DstReg.WriteMask = WRITEMASK_X; inst->DstReg.WriteMask = WRITEMASK_X;
inst->SrcReg[0].File = PROGRAM_TEMPORARY; inst->SrcReg[0].File = PROGRAM_TEMPORARY;
inst->SrcReg[0].Index = fogFactorTemp; inst->SrcReg[0].Index = fogFactorTemp;
inst->SrcReg[0].NegateBase = NEGATE_XYZW; inst->SrcReg[0].Negate = NEGATE_XYZW;
inst->SrcReg[0].Swizzle = SWIZZLE_XXXX; inst->SrcReg[0].Swizzle = SWIZZLE_XXXX;
inst->SaturateMode = SATURATE_ZERO_ONE; inst->SaturateMode = SATURATE_ZERO_ONE;
inst++; inst++;

View File

@@ -1135,7 +1135,7 @@ emit_negation(slang_emit_info *emitInfo, slang_ir_node *n)
n->Children[0]->Store, n->Children[0]->Store,
NULL, NULL,
NULL); NULL);
inst->SrcReg[0].NegateBase = NEGATE_XYZW; inst->SrcReg[0].Negate = NEGATE_XYZW;
return inst; return inst;
} }

View 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].Swizzle = SWIZZLE_XXXX;
p->Instructions[ic].SrcReg[0].Index = 0; p->Instructions[ic].SrcReg[0].Index = 0;
p->Instructions[ic].SrcReg[0].NegateBase = NEGATE_XYZW; p->Instructions[ic].SrcReg[0].Negate = NEGATE_XYZW;
ic++; ic++;
/* END; */ /* END; */

View File

@@ -275,8 +275,8 @@ compile_instruction(
/* swizzle (ext swizzle also depends on negation) */ /* swizzle (ext swizzle also depends on negation) */
{ {
GLuint swz[4]; GLuint swz[4];
GLboolean extended = (inst->SrcReg[i].NegateBase != NEGATE_NONE && GLboolean extended = (inst->SrcReg[i].Negate != NEGATE_NONE &&
inst->SrcReg[i].NegateBase != NEGATE_XYZW); inst->SrcReg[i].Negate != NEGATE_XYZW);
for( j = 0; j < 4; j++ ) { for( j = 0; j < 4; j++ ) {
swz[j] = GET_SWZ( inst->SrcReg[i].Swizzle, j ); swz[j] = GET_SWZ( inst->SrcReg[i].Swizzle, j );
if (swz[j] > SWIZZLE_W) 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; fullsrc->SrcRegister.Negate = 1;
} }
else if( inst->SrcReg[i].NegateBase != NEGATE_NONE ) { else if( inst->SrcReg[i].Negate != NEGATE_NONE ) {
if( inst->SrcReg[i].NegateBase & NEGATE_X ) { if( inst->SrcReg[i].Negate & NEGATE_X ) {
fullsrc->SrcRegisterExtSwz.NegateX = 1; fullsrc->SrcRegisterExtSwz.NegateX = 1;
} }
if( inst->SrcReg[i].NegateBase & NEGATE_Y ) { if( inst->SrcReg[i].Negate & NEGATE_Y ) {
fullsrc->SrcRegisterExtSwz.NegateY = 1; fullsrc->SrcRegisterExtSwz.NegateY = 1;
} }
if( inst->SrcReg[i].NegateBase & NEGATE_Z ) { if( inst->SrcReg[i].Negate & NEGATE_Z ) {
fullsrc->SrcRegisterExtSwz.NegateZ = 1; fullsrc->SrcRegisterExtSwz.NegateZ = 1;
} }
if( inst->SrcReg[i].NegateBase & NEGATE_W ) { if( inst->SrcReg[i].Negate & NEGATE_W ) {
fullsrc->SrcRegisterExtSwz.NegateW = 1; fullsrc->SrcRegisterExtSwz.NegateW = 1;
} }
} }
@@ -318,10 +318,6 @@ compile_instruction(
fullsrc->SrcRegisterExtMod.Absolute = 1; fullsrc->SrcRegisterExtMod.Absolute = 1;
} }
if( inst->SrcReg[i].NegateAbs ) {
fullsrc->SrcRegisterExtMod.Negate = 1;
}
if( inst->SrcReg[i].RelAddr ) { if( inst->SrcReg[i].RelAddr ) {
fullsrc->SrcRegister.Indirect = 1; fullsrc->SrcRegister.Indirect = 1;