Accomodate ARB_fp XPD opcode separately from NV_fp's X2D.

This commit is contained in:
Keith Whitwell 2004-03-29 16:01:18 +00:00
parent 292fa335d6
commit eeb5eeb2a6
5 changed files with 18 additions and 4 deletions

View file

@ -112,7 +112,8 @@ enum fp_opcode {
FP_OPCODE_UP2US, /* NV_f_p only */
FP_OPCODE_UP4B, /* NV_f_p only */
FP_OPCODE_UP4UB, /* NV_f_p only */
FP_OPCODE_X2D, /* XPD in ARB_f_p */
FP_OPCODE_XPD, /* ARB_f_p only - cross product */
FP_OPCODE_X2D, /* NV_f_p only - 2D matrix multiply */
FP_OPCODE_END /* private opcode */
};

View file

@ -145,7 +145,7 @@ _mesa_debug_fp_inst(GLint num, struct fp_instruction *fp)
case FP_OPCODE_TXP:
fprintf(stderr, "FP_OPCODE_TXP"); break;
case FP_OPCODE_X2D:
case FP_OPCODE_XPD:
fprintf(stderr, "FP_OPCODE_XPD"); break;
default:

View file

@ -2903,7 +2903,7 @@ parse_fp_instruction (GLcontext * ctx, GLubyte ** inst,
case OP_XPD_SAT:
fp->Saturate = 1;
case OP_XPD:
fp->Opcode = FP_OPCODE_X2D;
fp->Opcode = FP_OPCODE_XPD;
break;
}

View file

@ -112,7 +112,8 @@ enum fp_opcode {
FP_OPCODE_UP2US, /* NV_f_p only */
FP_OPCODE_UP4B, /* NV_f_p only */
FP_OPCODE_UP4UB, /* NV_f_p only */
FP_OPCODE_X2D, /* XPD in ARB_f_p */
FP_OPCODE_X2D, /* NV_f_p only - 2d mat mul */
FP_OPCODE_XPD, /* ARB_f_p only - cross product */
FP_OPCODE_END /* private opcode */
};

View file

@ -1233,6 +1233,18 @@ execute_program( GLcontext *ctx,
store_vector4( inst, machine, result );
}
break;
case FP_OPCODE_XPD: /* cross product */
{
GLfloat a[4], b[4], result[4];
fetch_vector4( ctx, &inst->SrcReg[0], machine, program, a );
fetch_vector4( ctx, &inst->SrcReg[1], machine, program, b );
result[0] = a[1] * b[2] - a[2] * b[1];
result[1] = a[2] * b[0] - a[0] * b[2];
result[2] = a[0] * b[1] - a[1] * b[0];
result[3] = 1.0;
store_vector4( inst, machine, result );
}
break;
case FP_OPCODE_X2D: /* 2-D matrix transform */
{
GLfloat a[4], b[4], c[4], result[4];