mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 18:18:06 +02:00
Merge commit 'origin/gallium-0.1' into gallium-0.2
This commit is contained in:
commit
18a4cdcfc0
1 changed files with 58 additions and 1 deletions
|
|
@ -2463,7 +2463,64 @@ exec_instruction(
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TGSI_OPCODE_NRM:
|
case TGSI_OPCODE_NRM:
|
||||||
assert (0);
|
/* 3-component vector normalize */
|
||||||
|
{
|
||||||
|
union tgsi_exec_channel tmp, dot;
|
||||||
|
|
||||||
|
/* tmp = dp3(src0, src0): */
|
||||||
|
FETCH( &r[0], 0, CHAN_X );
|
||||||
|
micro_mul( &tmp, &r[0], &r[0] );
|
||||||
|
|
||||||
|
FETCH( &r[1], 0, CHAN_Y );
|
||||||
|
micro_mul( &dot, &r[1], &r[1] );
|
||||||
|
micro_add( &tmp, &tmp, &dot );
|
||||||
|
|
||||||
|
FETCH( &r[2], 0, CHAN_Z );
|
||||||
|
micro_mul( &dot, &r[2], &r[2] );
|
||||||
|
micro_add( &tmp, &tmp, &dot );
|
||||||
|
|
||||||
|
/* tmp = 1 / tmp */
|
||||||
|
micro_div( &tmp, &mach->Temps[TEMP_1_I].xyzw[TEMP_1_C], &tmp );
|
||||||
|
|
||||||
|
/* note: w channel is undefined */
|
||||||
|
FOR_EACH_ENABLED_CHANNEL( *inst, chan_index ) {
|
||||||
|
/* chan = chan * tmp */
|
||||||
|
micro_mul( &r[chan_index], &tmp, &r[chan_index] );
|
||||||
|
STORE( &r[chan_index], 0, chan_index );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case TGSI_OPCODE_NRM4:
|
||||||
|
/* 4-component vector normalize */
|
||||||
|
{
|
||||||
|
union tgsi_exec_channel tmp, dot;
|
||||||
|
|
||||||
|
/* tmp = dp4(src0, src0): */
|
||||||
|
FETCH( &r[0], 0, CHAN_X );
|
||||||
|
micro_mul( &tmp, &r[0], &r[0] );
|
||||||
|
|
||||||
|
FETCH( &r[1], 0, CHAN_Y );
|
||||||
|
micro_mul( &dot, &r[1], &r[1] );
|
||||||
|
micro_add( &tmp, &tmp, &dot );
|
||||||
|
|
||||||
|
FETCH( &r[2], 0, CHAN_Z );
|
||||||
|
micro_mul( &dot, &r[2], &r[2] );
|
||||||
|
micro_add( &tmp, &tmp, &dot );
|
||||||
|
|
||||||
|
FETCH( &r[3], 0, CHAN_W );
|
||||||
|
micro_mul( &dot, &r[3], &r[3] );
|
||||||
|
micro_add( &tmp, &tmp, &dot );
|
||||||
|
|
||||||
|
/* tmp = 1 / tmp */
|
||||||
|
micro_div( &tmp, &mach->Temps[TEMP_1_I].xyzw[TEMP_1_C], &tmp );
|
||||||
|
|
||||||
|
FOR_EACH_ENABLED_CHANNEL( *inst, chan_index ) {
|
||||||
|
/* chan = chan * tmp */
|
||||||
|
micro_mul( &r[chan_index], &tmp, &r[chan_index] );
|
||||||
|
STORE( &r[chan_index], 0, chan_index );
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TGSI_OPCODE_DIV:
|
case TGSI_OPCODE_DIV:
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue