diff options
author | michal <michal@quad.(none)> | 2008-11-05 11:48:56 +0100 |
---|---|---|
committer | michal <michal@quad.(none)> | 2008-11-05 11:59:33 +0100 |
commit | 502974b345dae8a3ca641083b4df5183b04ca825 (patch) | |
tree | 71fb78ec07c7eff749ae1edca1c6b09643f887ab /src/gallium/auxiliary/tgsi | |
parent | f16f53ae3d7328f156c91ed0a13ec21afb1210fb (diff) |
tgsi: Implement OPCODE_TRUNC.
Diffstat (limited to 'src/gallium/auxiliary/tgsi')
-rw-r--r-- | src/gallium/auxiliary/tgsi/tgsi_sse2.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/src/gallium/auxiliary/tgsi/tgsi_sse2.c b/src/gallium/auxiliary/tgsi/tgsi_sse2.c index 4681b29f52b..c115956c5d7 100644 --- a/src/gallium/auxiliary/tgsi/tgsi_sse2.c +++ b/src/gallium/auxiliary/tgsi/tgsi_sse2.c @@ -657,6 +657,17 @@ emit_f2it( make_xmm( xmm ) ); } +static void +emit_i2f( + struct x86_function *func, + unsigned xmm ) +{ + sse2_cvtdq2ps( + func, + make_xmm( xmm ), + make_xmm( xmm ) ); +} + static void PIPE_CDECL flr4f( float *store ) @@ -1967,7 +1978,12 @@ emit_instruction( break; case TGSI_OPCODE_TRUNC: - return 0; + FOR_EACH_DST0_ENABLED_CHANNEL( *inst, chan_index ) { + FETCH( func, *inst, 0, 0, chan_index ); + emit_f2it( func, 0 ); + emit_i2f( func, 0 ); + STORE( func, *inst, 0, 0, chan_index ); + } break; case TGSI_OPCODE_SHL: |