Manta Interactive Ray Tracer Development Mailing List

Text archives Help


[MANTA] r1049 - trunk/Model/Primitives


Chronological Thread 
  • From: sparker@sci.utah.edu
  • To: manta@sci.utah.edu
  • Subject: [MANTA] r1049 - trunk/Model/Primitives
  • Date: Mon, 8 May 2006 18:00:30 -0600 (MDT)

Author: sparker
Date: Mon May  8 18:00:28 2006
New Revision: 1049

Modified:
   trunk/Model/Primitives/Parallelogram.cc
Log:
Almost a 10% performance improvement by avoiding masked stores where possible


Modified: trunk/Model/Primitives/Parallelogram.cc
==============================================================================
--- trunk/Model/Primitives/Parallelogram.cc     (original)
+++ trunk/Model/Primitives/Parallelogram.cc     Mon May  8 18:00:28 2006
@@ -133,10 +133,17 @@
         if(_mm_movemask_ps(hit) == 0)
           continue;
 
-        _mm_maskmoveu_si128((__m128i)t, (__m128i)hit, (char*)&data->minT[i]);
-        _mm_maskmoveu_si128(_mm_set1_epi32((int)getMaterial()), 
(__m128i)hit, (char*)&data->hitMatl[i]);
-        _mm_maskmoveu_si128(_mm_set1_epi32((int)this), (__m128i)hit, 
(char*)&data->hitPrim[i]);
-        _mm_maskmoveu_si128(_mm_set1_epi32((int)getTexCoordMapper()), 
(__m128i)hit, (char*)&data->hitTex[i]);
+        if(_mm_movemask_ps(hit) == 15){
+          _mm_store_ps(&data->minT[i], t);
+          _mm_store_si128((__m128i*)&data->hitMatl[i], 
_mm_set1_epi32((int)getMaterial()));
+          _mm_store_si128((__m128i*)&data->hitPrim[i], 
_mm_set1_epi32((int)this));
+          _mm_store_si128((__m128i*)&data->hitTex[i], 
_mm_set1_epi32((int)getTexCoordMapper()));
+        } else {
+          _mm_maskmoveu_si128((__m128i)t, (__m128i)hit, 
(char*)&data->minT[i]);
+          _mm_maskmoveu_si128(_mm_set1_epi32((int)getMaterial()), 
(__m128i)hit, (char*)&data->hitMatl[i]);
+          _mm_maskmoveu_si128(_mm_set1_epi32((int)this), (__m128i)hit, 
(char*)&data->hitPrim[i]);
+          _mm_maskmoveu_si128(_mm_set1_epi32((int)getTexCoordMapper()), 
(__m128i)hit, (char*)&data->hitTex[i]);
+        }
       }
       for(;i<rays.rayEnd;i++){
         Real dt=Dot(rays.getDirection(i), normal);




  • [MANTA] r1049 - trunk/Model/Primitives, sparker, 05/08/2006

Archive powered by MHonArc 2.6.16.

Top of page