Manta Interactive Ray Tracer Development Mailing List

Text archives Help


[MANTA] r1488 - trunk/Model/Primitives


Chronological Thread 
  • From: boulos@sci.utah.edu
  • To: manta@sci.utah.edu
  • Subject: [MANTA] r1488 - trunk/Model/Primitives
  • Date: Tue, 17 Jul 2007 17:19:54 -0600 (MDT)

Author: boulos
Date: Tue Jul 17 17:19:54 2007
New Revision: 1488

Modified:
   trunk/Model/Primitives/Parallelogram.cc
Log:
Model/Primitives/Parallelogram.cc
  Adding an SSE version of the Parallelogram sampling methods.


Modified: trunk/Model/Primitives/Parallelogram.cc
==============================================================================
--- trunk/Model/Primitives/Parallelogram.cc     (original)
+++ trunk/Model/Primitives/Parallelogram.cc     Tue Jul 17 17:19:54 2007
@@ -564,6 +564,37 @@
   context.rng->nextPacket(r1);
   context.rng->nextPacket(r2);
 
+#ifdef MANTA_SSE
+  for (int i = 0; i < Packet<Vector>::MaxSize; i+=4) {
+    _mm_store_ps(&points.vectordata[0][i],
+                 _mm_add_ps(_mm_set1_ps(anchor[0]),
+                            _mm_add_ps(_mm_mul_ps(_mm_load_ps(&r1.data[i]),
+                                                  
_mm_set1_ps(v1_unscaled[0])),
+                                       _mm_mul_ps(_mm_load_ps(&r2.data[i]),
+                                                  
_mm_set1_ps(v2_unscaled[0])))));
+    _mm_store_ps(&points.vectordata[1][i],
+                 _mm_add_ps(_mm_set1_ps(anchor[1]),
+                            _mm_add_ps(_mm_mul_ps(_mm_load_ps(&r1.data[i]),
+                                                  
_mm_set1_ps(v1_unscaled[1])),
+                                       _mm_mul_ps(_mm_load_ps(&r2.data[i]),
+                                                  
_mm_set1_ps(v2_unscaled[1])))));
+    _mm_store_ps(&points.vectordata[2][i],
+                 _mm_add_ps(_mm_set1_ps(anchor[2]),
+                            _mm_add_ps(_mm_mul_ps(_mm_load_ps(&r1.data[i]),
+                                                  
_mm_set1_ps(v1_unscaled[2])),
+                                       _mm_mul_ps(_mm_load_ps(&r2.data[i]),
+                                                  
_mm_set1_ps(v2_unscaled[2])))));
+
+    _mm_store_ps(&normals.vectordata[0][i],
+                 _mm_set1_ps(this->normal[0]));
+    _mm_store_ps(&normals.vectordata[1][i],
+                 _mm_set1_ps(this->normal[1]));
+    _mm_store_ps(&normals.vectordata[2][i],
+                 _mm_set1_ps(this->normal[2]));
+
+    _mm_store_ps(&pdfs.data[i], _mm_set1_ps(inv_area));
+  }
+#else
   for (int i = 0; i < Packet<Vector>::MaxSize; i++) {
     points.set(i, anchor + r1.get(i) * v1_unscaled + r2.get(i) * 
v2_unscaled);
   }
@@ -573,4 +604,5 @@
   for (int i = 0; i < Packet<Real>::MaxSize; i++) {
     pdfs.set(i, inv_area);
   }
+#endif
 }




  • [MANTA] r1488 - trunk/Model/Primitives, boulos, 07/17/2007

Archive powered by MHonArc 2.6.16.

Top of page