* INPUT[attr] = MAD INPUT[attr], COEF_DADY[attr], INPUT_WPOS.yyyy
*/
static INLINE void
-linterp_z(const struct tgsi_interp_coef *coef,
- struct tgsi_exec_vector *pos)
+linterp(const struct tgsi_interp_coef *coef,
+ struct tgsi_exec_vector *pos, uint ch)
{
- uint ch = 2;
uint j;
for (j = 0; j < QUAD_SIZE; j++) {
const float x = pos->xyzw[0].f[j];
}
-
/* This should be done by the fragment shader execution unit (code
* generated from the decl instructions). Do it here for now.
*/
machine.Inputs[0].xyzw[1].f[3] = fy + 1.0f;
/* interp Z */
- linterp_z(&quad->coef[0], &machine.Inputs[0]);
+ linterp(&quad->coef[0], &machine.Inputs[0], 2); /* Z */
+ linterp(&quad->coef[0], &machine.Inputs[0], 3); /* 1/W */
/* run shader */
tgsi_exec_machine_run( &machine );
const float y = mach->Inputs[0].xyzw[1].f[i];
// WPOS.w here is really 1/w
const float w = 1.0f / mach->Inputs[0].xyzw[3].f[i];
+ assert(mach->Inputs[0].xyzw[3].f[i] != 0.0);
mach->Inputs[attrib].xyzw[chan].f[i] =
(mach->InterpCoefs[attrib].a0[chan] +
fulldecl = make_frag_input_decl(\r
1,\r
1 + count - 1,\r
- TGSI_INTERPOLATE_LINEAR,\r
+ TGSI_INTERPOLATE_PERSPECTIVE,\r
TGSI_WRITEMASK_XYZW );\r
ti += tgsi_build_full_declaration(\r
&fulldecl,\r