Define new NEGATE_* tokens for setting the src register's NegateBase field.

Before, we were using GL_TRUE/GL_FALSE in a few places.
Note: only the SWZ instruction can negate individual components.
This commit is contained in:
Brian Paul 2006-05-30 22:17:35 +00:00
parent e4cb9cd167
commit a8c4242395
3 changed files with 30 additions and 17 deletions

View file

@ -983,16 +983,16 @@ Parse_VectorSrc(struct parse_state *parseState,
srcReg->NegateAbs = (sign < 0.0F) ? GL_TRUE : GL_FALSE;
if (Parse_String(parseState, "-"))
srcReg->NegateBase = 0xf;
srcReg->NegateBase = NEGATE_XYZW;
else if (Parse_String(parseState, "+"))
srcReg->NegateBase = 0;
srcReg->NegateBase = NEGATE_NONE;
else
srcReg->NegateBase = 0;
srcReg->NegateBase = NEGATE_NONE;
}
else {
srcReg->Abs = GL_FALSE;
srcReg->NegateAbs = GL_FALSE;
srcReg->NegateBase = (sign < 0.0F) ? 0xf : 0x0;
srcReg->NegateBase = (sign < 0.0F) ? NEGATE_XYZW : NEGATE_NONE;
}
/* This should be the real src vector/register name */
@ -1107,16 +1107,16 @@ Parse_ScalarSrcReg(struct parse_state *parseState,
srcReg->NegateAbs = (sign < 0.0F) ? GL_TRUE : GL_FALSE;
if (Parse_String(parseState, "-"))
srcReg->NegateBase = 0xf;
srcReg->NegateBase = NEGATE_XYZW;
else if (Parse_String(parseState, "+"))
srcReg->NegateBase = 0x0;
srcReg->NegateBase = NEGATE_NONE;
else
srcReg->NegateBase = 0x0;
srcReg->NegateBase = NEGATE_NONE;
}
else {
srcReg->Abs = GL_FALSE;
srcReg->NegateAbs = GL_FALSE;
srcReg->NegateBase = (sign < 0.0F) ? 0xf : 0x0;
srcReg->NegateBase = (sign < 0.0F) ? NEGATE_XYZW : NEGATE_NONE;
}
if (!Peek_Token(parseState, token))
@ -1241,7 +1241,7 @@ Parse_PrintInstruction(struct parse_state *parseState,
}
inst->SrcReg[0].Swizzle = SWIZZLE_NOOP;
inst->SrcReg[0].NegateBase = 0x0;
inst->SrcReg[0].NegateBase = NEGATE_NONE;
inst->SrcReg[0].Abs = GL_FALSE;
inst->SrcReg[0].NegateAbs = GL_FALSE;

View file

@ -642,12 +642,12 @@ Parse_SwizzleSrcReg(struct parse_state *parseState, struct prog_src_register *sr
RETURN_ERROR;
if (token[0] == '-') {
(void) Parse_String(parseState, "-");
srcReg->NegateBase = GL_TRUE;
srcReg->NegateBase = NEGATE_XYZW;
if (!Peek_Token(parseState, token))
RETURN_ERROR;
}
else {
srcReg->NegateBase = GL_FALSE;
srcReg->NegateBase = NEGATE_NONE;
}
/* Src reg can be R<n>, c[n], c[n +/- offset], or a named vertex attrib */
@ -735,13 +735,13 @@ Parse_ScalarSrcReg(struct parse_state *parseState, struct prog_src_register *src
if (!Peek_Token(parseState, token))
RETURN_ERROR;
if (token[0] == '-') {
srcReg->NegateBase = GL_TRUE;
srcReg->NegateBase = NEGATE_XYZW;
(void) Parse_String(parseState, "-"); /* consume '-' */
if (!Peek_Token(parseState, token))
RETURN_ERROR;
}
else {
srcReg->NegateBase = GL_FALSE;
srcReg->NegateBase = NEGATE_NONE;
}
/* Src reg can be R<n>, c[n], c[n +/- offset], or a named vertex attrib */
@ -1070,7 +1070,7 @@ Parse_PrintInstruction(struct parse_state *parseState, struct prog_instruction *
RETURN_ERROR;
srcReg->RelAddr = GL_FALSE;
srcReg->NegateBase = GL_FALSE;
srcReg->NegateBase = NEGATE_NONE;
srcReg->Swizzle = SWIZZLE_NOOP;
/* Register can be R<n>, c[n], c[n +/- offset], a named vertex attrib,

View file

@ -74,6 +74,19 @@
/*@}*/
/**
* Per-component negation masks
*/
/*@{*/
#define NEGATE_X 0x1
#define NEGATE_Y 0x2
#define NEGATE_Z 0x4
#define NEGATE_W 0x8
#define NEGATE_XYZW 0xf
#define NEGATE_NONE 0x0
/*@}*/
/**
* Program instruction opcodes, for both vertex and fragment programs.
* \note changes to this opcode list must be reflected in t_vb_arbprogram.c
@ -173,7 +186,8 @@ struct prog_src_register
*/
/*@{*/
/**
* Per-component negation for the SWZ instruction.
* 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
@ -190,8 +204,7 @@ struct prog_src_register
GLuint Abs:1;
/**
* Take the component-wise negation. The negation occurs \b after the
* (optional) absolute value operation.
* Post-absolute value negation (all components).
*/
GLuint NegateAbs:1;
/*@}*/