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