Mesa (gallium-0.1): tgsi: Implement OPCODE_ROUND for SSE2 backend.
MichaŠKról
michal at kemper.freedesktop.org
Wed Nov 26 16:20:27 UTC 2008
Module: Mesa
Branch: gallium-0.1
Commit: 972922b1bf28346568bedfadc2198ed93230f5d7
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=972922b1bf28346568bedfadc2198ed93230f5d7
Author: Michal Krol <michal at tungstengraphics.com>
Date: Wed Nov 26 12:56:23 2008 +0100
tgsi: Implement OPCODE_ROUND for SSE2 backend.
---
src/gallium/auxiliary/tgsi/tgsi_sse2.c | 29 ++++++++++++++++++++++++++++-
1 files changed, 28 insertions(+), 1 deletions(-)
diff --git a/src/gallium/auxiliary/tgsi/tgsi_sse2.c b/src/gallium/auxiliary/tgsi/tgsi_sse2.c
index 499d865..31480c4 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_sse2.c
+++ b/src/gallium/auxiliary/tgsi/tgsi_sse2.c
@@ -842,6 +842,29 @@ emit_rcp (
make_xmm( xmm_src ) );
}
+static void PIPE_CDECL
+rnd4f(
+ float *store )
+{
+ store[0] = floorf( store[0] + 0.5f );
+ store[1] = floorf( store[1] + 0.5f );
+ store[2] = floorf( store[2] + 0.5f );
+ store[3] = floorf( store[3] + 0.5f );
+}
+
+static void
+emit_rnd(
+ struct x86_function *func,
+ unsigned xmm_save,
+ unsigned xmm_dst )
+{
+ emit_func_call_dst(
+ func,
+ xmm_save,
+ xmm_dst,
+ rnd4f );
+}
+
static void
emit_rsqrt(
struct x86_function *func,
@@ -1662,7 +1685,11 @@ emit_instruction(
break;
case TGSI_OPCODE_ROUND:
- return 0;
+ FOR_EACH_DST0_ENABLED_CHANNEL( *inst, chan_index ) {
+ FETCH( func, *inst, 0, 0, chan_index );
+ emit_rnd( func, 0, 0 );
+ STORE( func, *inst, 0, 0, chan_index );
+ }
break;
case TGSI_OPCODE_EXPBASE2:
More information about the mesa-commit
mailing list