dst->f[3] = (GLfloat) cos( (GLdouble) src->f[3] );
}
+static void
+micro_ddx(
+ union tgsi_exec_channel *dst,
+ const union tgsi_exec_channel *src )
+{
+ dst->f[0] =
+ dst->f[1] =
+ dst->f[2] =
+ dst->f[3] = src->f[TILE_BOTTOM_RIGHT] - src->f[TILE_BOTTOM_LEFT];
+}
+
+static void
+micro_ddy(
+ union tgsi_exec_channel *dst,
+ const union tgsi_exec_channel *src )
+{
+ dst->f[0] =
+ dst->f[1] =
+ dst->f[2] =
+ dst->f[3] = src->f[TILE_TOP_LEFT] - src->f[TILE_BOTTOM_LEFT];
+}
+
static void
micro_div(
union tgsi_exec_channel *dst,
break;
case TGSI_OPCODE_DDX:
- assert (0);
+ FOR_EACH_ENABLED_CHANNEL( *inst, chan_index ) {
+ FETCH( &r[0], 0, chan_index );
+ micro_ddx( &r[0], &r[0] );
+ STORE( &r[0], 0, chan_index );
+ }
break;
case TGSI_OPCODE_DDY:
- assert (0);
+ FOR_EACH_ENABLED_CHANNEL( *inst, chan_index ) {
+ FETCH( &r[0], 0, chan_index );
+ micro_ddy( &r[0], &r[0] );
+ STORE( &r[0], 0, chan_index );
+ }
break;
case TGSI_OPCODE_KIL:
case OPCODE_DP3:\r
fullinst->Instruction.Opcode = TGSI_OPCODE_DP3;\r
break;\r
+ case OPCODE_DDX:\r
+ fullinst->Instruction.Opcode = TGSI_OPCODE_DDX;\r
+ break;\r
+ case OPCODE_DDY:\r
+ fullinst->Instruction.Opcode = TGSI_OPCODE_DDY;\r
+ break;\r
case OPCODE_DP4:\r
fullinst->Instruction.Opcode = TGSI_OPCODE_DP4;\r
break;\r