mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-25 08:00:25 +01:00
llvmpipe: Translate more TGSI opcodes.
Basically cover all low hanging fruit, and mark the still missing opcodes as "fixme" or deprecated.
This commit is contained in:
parent
00dd0156e0
commit
873773ee2b
1 changed files with 116 additions and 23 deletions
|
|
@ -680,8 +680,15 @@ emit_instruction(
|
|||
break;
|
||||
|
||||
case TGSI_OPCODE_CND:
|
||||
/* FIXME */
|
||||
return 0;
|
||||
FOR_EACH_DST0_ENABLED_CHANNEL( inst, chan_index ) {
|
||||
src0 = emit_fetch( bld, inst, 0, chan_index );
|
||||
src1 = emit_fetch( bld, inst, 1, chan_index );
|
||||
src2 = emit_fetch( bld, inst, 2, chan_index );
|
||||
tmp1 = lp_build_const_scalar(bld->base.type, 0.5);
|
||||
tmp0 = lp_build_cmp( &bld->base, PIPE_FUNC_GREATER, src2, tmp1);
|
||||
dst0 = lp_build_select( &bld->base, tmp0, src0, src1 );
|
||||
emit_store( bld, inst, 0, chan_index, dst0);
|
||||
}
|
||||
break;
|
||||
|
||||
case TGSI_OPCODE_DP2A:
|
||||
|
|
@ -699,23 +706,30 @@ emit_instruction(
|
|||
}
|
||||
break;
|
||||
|
||||
#if 0
|
||||
case TGSI_OPCODE_FRC:
|
||||
FOR_EACH_DST0_ENABLED_CHANNEL( inst, chan_index ) {
|
||||
tmp0 = emit_fetch( bld, inst, 0, chan_index );
|
||||
emit_frc( bld, 0, 0 );
|
||||
src0 = emit_fetch( bld, inst, 0, chan_index );
|
||||
tmp0 = lp_build_floor(&bld->base, src0);
|
||||
tmp0 = lp_build_sub(&bld->base, tmp0, src0);
|
||||
emit_store( bld, inst, 0, chan_index, tmp0);
|
||||
}
|
||||
break;
|
||||
|
||||
case TGSI_OPCODE_CLAMP:
|
||||
return 0;
|
||||
FOR_EACH_DST0_ENABLED_CHANNEL( inst, chan_index ) {
|
||||
tmp0 = emit_fetch( bld, inst, 0, chan_index );
|
||||
src1 = emit_fetch( bld, inst, 1, chan_index );
|
||||
src2 = emit_fetch( bld, inst, 2, chan_index );
|
||||
tmp0 = lp_build_max(&bld->base, tmp0, src1);
|
||||
tmp0 = lp_build_min(&bld->base, tmp0, src2);
|
||||
emit_store( bld, inst, 0, chan_index, tmp0);
|
||||
}
|
||||
break;
|
||||
|
||||
case TGSI_OPCODE_FLR:
|
||||
FOR_EACH_DST0_ENABLED_CHANNEL( inst, chan_index ) {
|
||||
tmp0 = emit_fetch( bld, inst, 0, chan_index );
|
||||
emit_flr( bld, 0, 0 );
|
||||
tmp0 = lp_build_floor(&bld->base, tmp0);
|
||||
emit_store( bld, inst, 0, chan_index, tmp0);
|
||||
}
|
||||
break;
|
||||
|
|
@ -723,11 +737,10 @@ emit_instruction(
|
|||
case TGSI_OPCODE_ROUND:
|
||||
FOR_EACH_DST0_ENABLED_CHANNEL( inst, chan_index ) {
|
||||
tmp0 = emit_fetch( bld, inst, 0, chan_index );
|
||||
emit_rnd( bld, 0, 0 );
|
||||
tmp0 = lp_build_round(&bld->base, tmp0);
|
||||
emit_store( bld, inst, 0, chan_index, tmp0);
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
|
||||
case TGSI_OPCODE_EX2: {
|
||||
tmp0 = emit_fetch( bld, inst, 0, CHAN_X );
|
||||
|
|
@ -806,8 +819,9 @@ emit_instruction(
|
|||
break;
|
||||
|
||||
case TGSI_OPCODE_RCC:
|
||||
/* deprecated? */
|
||||
assert(0);
|
||||
return 0;
|
||||
break;
|
||||
|
||||
case TGSI_OPCODE_DPH:
|
||||
tmp0 = emit_fetch( bld, inst, 0, CHAN_X );
|
||||
|
|
@ -837,10 +851,12 @@ emit_instruction(
|
|||
break;
|
||||
|
||||
case TGSI_OPCODE_DDX:
|
||||
/* FIXME */
|
||||
return 0;
|
||||
break;
|
||||
|
||||
case TGSI_OPCODE_DDY:
|
||||
/* FIXME */
|
||||
return 0;
|
||||
break;
|
||||
|
||||
|
|
@ -886,7 +902,10 @@ emit_instruction(
|
|||
break;
|
||||
|
||||
case TGSI_OPCODE_SFL:
|
||||
return 0;
|
||||
FOR_EACH_DST0_ENABLED_CHANNEL( inst, chan_index ) {
|
||||
dst0 = bld->base.zero;
|
||||
emit_store( bld, inst, 0, chan_index, dst0);
|
||||
}
|
||||
break;
|
||||
|
||||
case TGSI_OPCODE_SGT:
|
||||
|
|
@ -928,7 +947,10 @@ emit_instruction(
|
|||
break;
|
||||
|
||||
case TGSI_OPCODE_STR:
|
||||
return 0;
|
||||
FOR_EACH_DST0_ENABLED_CHANNEL( inst, chan_index ) {
|
||||
dst0 = bld->base.one;
|
||||
emit_store( bld, inst, 0, chan_index, dst0);
|
||||
}
|
||||
break;
|
||||
|
||||
case TGSI_OPCODE_TEX:
|
||||
|
|
@ -936,35 +958,49 @@ emit_instruction(
|
|||
break;
|
||||
|
||||
case TGSI_OPCODE_TXD:
|
||||
/* FIXME */
|
||||
return 0;
|
||||
break;
|
||||
|
||||
case TGSI_OPCODE_UP2H:
|
||||
/* deprecated */
|
||||
assert (0);
|
||||
return 0;
|
||||
break;
|
||||
|
||||
case TGSI_OPCODE_UP2US:
|
||||
/* deprecated */
|
||||
assert(0);
|
||||
return 0;
|
||||
break;
|
||||
|
||||
case TGSI_OPCODE_UP4B:
|
||||
/* deprecated */
|
||||
assert(0);
|
||||
return 0;
|
||||
break;
|
||||
|
||||
case TGSI_OPCODE_UP4UB:
|
||||
/* deprecated */
|
||||
assert(0);
|
||||
return 0;
|
||||
break;
|
||||
|
||||
case TGSI_OPCODE_X2D:
|
||||
/* deprecated? */
|
||||
assert(0);
|
||||
return 0;
|
||||
break;
|
||||
|
||||
case TGSI_OPCODE_ARA:
|
||||
/* deprecated */
|
||||
assert(0);
|
||||
return 0;
|
||||
break;
|
||||
|
||||
#if 0
|
||||
case TGSI_OPCODE_ARR:
|
||||
/* FIXME */
|
||||
FOR_EACH_DST0_ENABLED_CHANNEL( inst, chan_index ) {
|
||||
tmp0 = emit_fetch( bld, inst, 0, chan_index );
|
||||
emit_rnd( bld, 0, 0 );
|
||||
|
|
@ -975,32 +1011,33 @@ emit_instruction(
|
|||
#endif
|
||||
|
||||
case TGSI_OPCODE_BRA:
|
||||
/* deprecated */
|
||||
assert(0);
|
||||
return 0;
|
||||
break;
|
||||
|
||||
case TGSI_OPCODE_CAL:
|
||||
/* FIXME */
|
||||
return 0;
|
||||
break;
|
||||
|
||||
#if 0
|
||||
case TGSI_OPCODE_RET:
|
||||
emit_ret( bld );
|
||||
/* FIXME */
|
||||
return 0;
|
||||
break;
|
||||
#endif
|
||||
|
||||
case TGSI_OPCODE_END:
|
||||
break;
|
||||
|
||||
#if 0
|
||||
case TGSI_OPCODE_SSG:
|
||||
/* TGSI_OPCODE_SGN */
|
||||
FOR_EACH_DST0_ENABLED_CHANNEL( inst, chan_index ) {
|
||||
tmp0 = emit_fetch( bld, inst, 0, chan_index );
|
||||
emit_sgn( bld, 0, 0 );
|
||||
tmp0 = emit_fetch( bld, inst, 0, CHAN_X );
|
||||
tmp0 = lp_build_sgn( &bld->base, tmp0 );
|
||||
emit_store( bld, inst, 0, chan_index, tmp0);
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
|
||||
case TGSI_OPCODE_CMP:
|
||||
FOR_EACH_DST0_ENABLED_CHANNEL( inst, chan_index ) {
|
||||
|
|
@ -1126,6 +1163,8 @@ emit_instruction(
|
|||
break;
|
||||
|
||||
case TGSI_OPCODE_DIV:
|
||||
/* deprecated */
|
||||
assert( 0 );
|
||||
return 0;
|
||||
break;
|
||||
|
||||
|
|
@ -1151,105 +1190,146 @@ emit_instruction(
|
|||
break;
|
||||
|
||||
case TGSI_OPCODE_BRK:
|
||||
/* FIXME */
|
||||
return 0;
|
||||
break;
|
||||
|
||||
case TGSI_OPCODE_IF:
|
||||
/* FIXME */
|
||||
return 0;
|
||||
break;
|
||||
|
||||
case TGSI_OPCODE_BGNFOR:
|
||||
/* deprecated */
|
||||
assert(0);
|
||||
return 0;
|
||||
break;
|
||||
|
||||
case TGSI_OPCODE_REP:
|
||||
/* deprecated */
|
||||
assert(0);
|
||||
return 0;
|
||||
break;
|
||||
|
||||
case TGSI_OPCODE_ELSE:
|
||||
/* FIXME */
|
||||
return 0;
|
||||
break;
|
||||
|
||||
case TGSI_OPCODE_ENDIF:
|
||||
/* FIXME */
|
||||
return 0;
|
||||
break;
|
||||
|
||||
case TGSI_OPCODE_ENDFOR:
|
||||
/* deprecated */
|
||||
assert(0);
|
||||
return 0;
|
||||
break;
|
||||
|
||||
case TGSI_OPCODE_ENDREP:
|
||||
/* deprecated */
|
||||
assert(0);
|
||||
return 0;
|
||||
break;
|
||||
|
||||
case TGSI_OPCODE_PUSHA:
|
||||
/* deprecated? */
|
||||
assert(0);
|
||||
return 0;
|
||||
break;
|
||||
|
||||
case TGSI_OPCODE_POPA:
|
||||
/* deprecated? */
|
||||
assert(0);
|
||||
return 0;
|
||||
break;
|
||||
|
||||
case TGSI_OPCODE_CEIL:
|
||||
return 0;
|
||||
FOR_EACH_DST0_ENABLED_CHANNEL( inst, chan_index ) {
|
||||
tmp0 = emit_fetch( bld, inst, 0, chan_index );
|
||||
tmp0 = lp_build_ceil(&bld->base, tmp0);
|
||||
emit_store( bld, inst, 0, chan_index, tmp0);
|
||||
}
|
||||
break;
|
||||
|
||||
case TGSI_OPCODE_I2F:
|
||||
/* deprecated? */
|
||||
assert(0);
|
||||
return 0;
|
||||
break;
|
||||
|
||||
case TGSI_OPCODE_NOT:
|
||||
/* deprecated? */
|
||||
assert(0);
|
||||
return 0;
|
||||
break;
|
||||
|
||||
#if 0
|
||||
case TGSI_OPCODE_TRUNC:
|
||||
FOR_EACH_DST0_ENABLED_CHANNEL( inst, chan_index ) {
|
||||
tmp0 = emit_fetch( bld, inst, 0, chan_index );
|
||||
emit_f2it( bld, 0 );
|
||||
emit_i2f( bld, 0 );
|
||||
tmp0 = lp_build_trunc(&bld->base, tmp0);
|
||||
emit_store( bld, inst, 0, chan_index, tmp0);
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
|
||||
case TGSI_OPCODE_SHL:
|
||||
/* deprecated? */
|
||||
assert(0);
|
||||
return 0;
|
||||
break;
|
||||
|
||||
case TGSI_OPCODE_SHR:
|
||||
/* deprecated? */
|
||||
assert(0);
|
||||
return 0;
|
||||
break;
|
||||
|
||||
case TGSI_OPCODE_AND:
|
||||
/* deprecated? */
|
||||
assert(0);
|
||||
return 0;
|
||||
break;
|
||||
|
||||
case TGSI_OPCODE_OR:
|
||||
/* deprecated? */
|
||||
assert(0);
|
||||
return 0;
|
||||
break;
|
||||
|
||||
case TGSI_OPCODE_MOD:
|
||||
/* deprecated? */
|
||||
assert(0);
|
||||
return 0;
|
||||
break;
|
||||
|
||||
case TGSI_OPCODE_XOR:
|
||||
/* deprecated? */
|
||||
assert(0);
|
||||
return 0;
|
||||
break;
|
||||
|
||||
case TGSI_OPCODE_SAD:
|
||||
/* deprecated? */
|
||||
assert(0);
|
||||
return 0;
|
||||
break;
|
||||
|
||||
case TGSI_OPCODE_TXF:
|
||||
/* deprecated? */
|
||||
assert(0);
|
||||
return 0;
|
||||
break;
|
||||
|
||||
case TGSI_OPCODE_TXQ:
|
||||
/* deprecated? */
|
||||
assert(0);
|
||||
return 0;
|
||||
break;
|
||||
|
||||
case TGSI_OPCODE_CONT:
|
||||
/* deprecated? */
|
||||
assert(0);
|
||||
return 0;
|
||||
break;
|
||||
|
||||
|
|
@ -1261,6 +1341,19 @@ emit_instruction(
|
|||
return 0;
|
||||
break;
|
||||
|
||||
case TGSI_OPCODE_NOISE1:
|
||||
case TGSI_OPCODE_NOISE2:
|
||||
case TGSI_OPCODE_NOISE3:
|
||||
case TGSI_OPCODE_NOISE4:
|
||||
FOR_EACH_DST0_ENABLED_CHANNEL( inst, chan_index ) {
|
||||
tmp0 = bld->base.zero;
|
||||
emit_store( bld, inst, 0, chan_index, tmp0);
|
||||
}
|
||||
break;
|
||||
|
||||
case TGSI_OPCODE_NOP:
|
||||
break;
|
||||
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue