Make SGE, SGT, SLE working.
This commit is contained in:
@@ -357,6 +357,20 @@ micro_frc(
|
||||
dst->f[3] = src->f[3] - (GLfloat) floor( (GLdouble) src->f[3] );
|
||||
}
|
||||
|
||||
static void
|
||||
micro_ge(
|
||||
union tgsi_exec_channel *dst,
|
||||
const union tgsi_exec_channel *src0,
|
||||
const union tgsi_exec_channel *src1,
|
||||
const union tgsi_exec_channel *src2,
|
||||
const union tgsi_exec_channel *src3 )
|
||||
{
|
||||
dst->f[0] = src0->f[0] >= src1->f[0] ? src2->f[0] : src3->f[0];
|
||||
dst->f[1] = src0->f[1] >= src1->f[1] ? src2->f[1] : src3->f[1];
|
||||
dst->f[2] = src0->f[2] >= src1->f[2] ? src2->f[2] : src3->f[2];
|
||||
dst->f[3] = src0->f[3] >= src1->f[3] ? src2->f[3] : src3->f[3];
|
||||
}
|
||||
|
||||
static void
|
||||
micro_i2f(
|
||||
union tgsi_exec_channel *dst,
|
||||
@@ -1508,12 +1522,10 @@ exec_instruction(
|
||||
case TGSI_OPCODE_SGE:
|
||||
/* TGSI_OPCODE_SETGE */
|
||||
FOR_EACH_ENABLED_CHANNEL( *inst, chan_index ) {
|
||||
FETCH(&r[0], 0, chan_index);
|
||||
FETCH(&r[1], 1, chan_index);
|
||||
|
||||
micro_lt( &r[0], &r[0], &r[1], &mach->Temps[TEMP_0_I].xyzw[TEMP_0_C], &mach->Temps[TEMP_1_I].xyzw[TEMP_1_C] );
|
||||
|
||||
STORE(&r[0], 0, chan_index);
|
||||
FETCH( &r[0], 0, chan_index );
|
||||
FETCH( &r[1], 1, chan_index );
|
||||
micro_ge( &r[0], &r[0], &r[1], &mach->Temps[TEMP_1_I].xyzw[TEMP_1_C], &mach->Temps[TEMP_0_I].xyzw[TEMP_0_C] );
|
||||
STORE( &r[0], 0, chan_index );
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -1785,21 +1797,29 @@ exec_instruction(
|
||||
break;
|
||||
|
||||
case TGSI_OPCODE_SGT:
|
||||
assert (0);
|
||||
FOR_EACH_ENABLED_CHANNEL( *inst, chan_index ) {
|
||||
FETCH( &r[0], 0, chan_index );
|
||||
FETCH( &r[1], 1, chan_index );
|
||||
micro_lt( &r[0], &r[0], &r[1], &mach->Temps[TEMP_0_I].xyzw[TEMP_0_C], &mach->Temps[TEMP_1_I].xyzw[TEMP_1_C] );
|
||||
STORE( &r[0], 0, chan_index );
|
||||
}
|
||||
break;
|
||||
|
||||
case TGSI_OPCODE_SIN:
|
||||
FETCH(&r[0], 0, CHAN_X);
|
||||
|
||||
FETCH( &r[0], 0, CHAN_X );
|
||||
micro_sin( &r[0], &r[0] );
|
||||
|
||||
FOR_EACH_ENABLED_CHANNEL( *inst, chan_index ) {
|
||||
STORE( &r[0], 0, chan_index );
|
||||
STORE( &r[0], 0, chan_index );
|
||||
}
|
||||
break;
|
||||
|
||||
case TGSI_OPCODE_SLE:
|
||||
assert (0);
|
||||
FOR_EACH_ENABLED_CHANNEL( *inst, chan_index ) {
|
||||
FETCH( &r[0], 0, chan_index );
|
||||
FETCH( &r[1], 1, chan_index );
|
||||
micro_ge( &r[0], &r[0], &r[1], &mach->Temps[TEMP_0_I].xyzw[TEMP_0_C], &mach->Temps[TEMP_1_I].xyzw[TEMP_1_C] );
|
||||
STORE( &r[0], 0, chan_index );
|
||||
}
|
||||
break;
|
||||
|
||||
case TGSI_OPCODE_SNE:
|
||||
|
||||
Reference in New Issue
Block a user