Manta Interactive Ray Tracer Development Mailing List

Text archives Help


[Manta] r2068 - in trunk: Core/Math Model/Primitives


Chronological Thread 
  • From: "Thiago Ize" <thiago@sci.utah.edu>
  • To: manta@sci.utah.edu
  • Subject: [Manta] r2068 - in trunk: Core/Math Model/Primitives
  • Date: Thu, 14 Feb 2008 13:33:25 -0700 (MST)

Author: thiago
Date: Thu Feb 14 13:33:25 2008
New Revision: 2068

Modified:
   trunk/Core/Math/SSEDefs.h
   trunk/Model/Primitives/SphereRTSL.cc
Log:
Core/Math/SSEDefs.h
  -Moving include of iostream to outside of MANTA_SSE ifdef. This
   should hopefully prevent many of the build breaks on non-sse
   code. Perhaps Vector.h and vecdefs.h should also be moved out?

Model/Primitives/SphereRTSL.cc
  -Made floats Reals so sphere can do doubles. Also got the non-sse
   code to compile.


Modified: trunk/Core/Math/SSEDefs.h
==============================================================================
--- trunk/Core/Math/SSEDefs.h   (original)
+++ trunk/Core/Math/SSEDefs.h   Thu Feb 14 13:33:25 2008
@@ -6,13 +6,16 @@
 
 #include <MantaSSE.h>
 
+//Placing this before MANTA_SSE ifdef so that non-sse code
+//doesn't break when iostream isn't included.
+#include <iostream>
+
 #ifdef MANTA_SSE
 #include <xmmintrin.h>
 #include <emmintrin.h>
 #include <Core/Util/Align.h>
 #include <Core/Geometry/vecdefs.h>
 #include <Core/Geometry/Vector.h>
-#include <iostream>
 
 typedef __m128 sse_t;
 typedef __m128i sse_int_t;

Modified: trunk/Model/Primitives/SphereRTSL.cc
==============================================================================
--- trunk/Model/Primitives/SphereRTSL.cc        (original)
+++ trunk/Model/Primitives/SphereRTSL.cc        Thu Feb 14 13:33:25 2008
@@ -8,10 +8,10 @@
 
       // Begin loop invariant setup code
       Vector rtsl_O = (rays.getOrigin(0) - center);
-      float rtsl_A = 1.f;
-      float rtsl_A_inv = (1 / rtsl_A);
-      float rtsl_C = (Dot(rtsl_O, rtsl_O) - (radius * radius));
-      float rtsl_invariant0 = (radius * radius);
+      Real rtsl_A = 1.f;
+      Real rtsl_A_inv = (1 / rtsl_A);
+      Real rtsl_C = (Dot(rtsl_O, rtsl_O) - (radius * radius));
+      Real rtsl_invariant0 = (radius * radius);
       // End loop invariant setup
 
       RayPacketData* data = rays.data;
@@ -511,7 +511,7 @@
         {
           // Section 0: BEGIN Loading variables from previous sections
 
-            Vector rtsl_O(s_O_x[i], s_O_y[i], s_O_z[i]);
+          Vector rtsl_O(rays.getOrigin(i)-center);
           // Section 0:   END Loading variables from previous sections
 
           // Section 0: BEGIN Declaring variables that were written but not 
read yet
@@ -520,17 +520,17 @@
           // Section 0:   END Declaring variables that were written but not 
read yet
 
             Vector rtsl_D = rays.getDirection(i);
-            float rtsl_B = Dot(rtsl_O, rtsl_D);
-            float rtsl_disc = ((rtsl_B * rtsl_B) - rtsl_C);
+            Real rtsl_B = Dot(rtsl_O, rtsl_D);
+            Real rtsl_disc = ((rtsl_B * rtsl_B) - rtsl_C);
             if((rtsl_disc >= 0.f)){
-              float rtsl_t = ((-(rtsl_B)) * rtsl_A_inv);
+              Real rtsl_t = ((-(rtsl_B)) * rtsl_A_inv);
               rtsl_O += (rtsl_D * rtsl_t);
-              float rtsl_B = Dot(rtsl_O, rtsl_D);
-              float rtsl_C = (Dot(rtsl_O, rtsl_O) - rtsl_invariant0);
+              Real rtsl_B = Dot(rtsl_O, rtsl_D);
+              Real rtsl_C = (Dot(rtsl_O, rtsl_O) - rtsl_invariant0);
               rtsl_disc = ((rtsl_B * rtsl_B) - rtsl_C);
               if((rtsl_disc >= 0.f)){
-                float rtsl_r = Sqrt(rtsl_disc);
-                float rtsl_t1 = (rtsl_t + ((-((rtsl_r + rtsl_B))) * 
rtsl_A_inv));
+                Real rtsl_r = Sqrt(rtsl_disc);
+                Real rtsl_t1 = (rtsl_t + ((-((rtsl_r + rtsl_B))) * 
rtsl_A_inv));
                 if((rtsl_t1 <= T_EPSILON)){
                   rtsl_t += ((rtsl_r - rtsl_B) * rtsl_A_inv);
                 } else {
@@ -551,10 +551,10 @@
       // Special case: unit directions
 
       // Begin loop invariant setup code
-      float rtsl_A = 1.f;
-      float rtsl_A_inv = (1 / rtsl_A);
-      float rtsl_invariant0 = (radius * radius);
-      float rtsl_invariant1 = (radius * radius);
+      Real rtsl_A = 1.f;
+      Real rtsl_A_inv = (1 / rtsl_A);
+      Real rtsl_invariant0 = (radius * radius);
+      Real rtsl_invariant1 = (radius * radius);
       // End loop invariant setup
 
       RayPacketData* data = rays.data;
@@ -1066,18 +1066,18 @@
 
             Vector rtsl_O = (rays.getOrigin(i) - center);
             Vector rtsl_D = rays.getDirection(i);
-            float rtsl_B = Dot(rtsl_O, rtsl_D);
-            float rtsl_C = (Dot(rtsl_O, rtsl_O) - rtsl_invariant0);
-            float rtsl_disc = ((rtsl_B * rtsl_B) - rtsl_C);
+            Real rtsl_B = Dot(rtsl_O, rtsl_D);
+            Real rtsl_C = (Dot(rtsl_O, rtsl_O) - rtsl_invariant0);
+            Real rtsl_disc = ((rtsl_B * rtsl_B) - rtsl_C);
             if((rtsl_disc >= 0.f)){
-              float rtsl_t = ((-(rtsl_B)) * rtsl_A_inv);
+              Real rtsl_t = ((-(rtsl_B)) * rtsl_A_inv);
               rtsl_O += (rtsl_D * rtsl_t);
-              float rtsl_B = Dot(rtsl_O, rtsl_D);
-              float rtsl_C = (Dot(rtsl_O, rtsl_O) - rtsl_invariant1);
+              Real rtsl_B = Dot(rtsl_O, rtsl_D);
+              Real rtsl_C = (Dot(rtsl_O, rtsl_O) - rtsl_invariant1);
               rtsl_disc = ((rtsl_B * rtsl_B) - rtsl_C);
               if((rtsl_disc >= 0.f)){
-                float rtsl_r = Sqrt(rtsl_disc);
-                float rtsl_t1 = (rtsl_t + ((-((rtsl_r + rtsl_B))) * 
rtsl_A_inv));
+                Real rtsl_r = Sqrt(rtsl_disc);
+                Real rtsl_t1 = (rtsl_t + ((-((rtsl_r + rtsl_B))) * 
rtsl_A_inv));
                 if((rtsl_t1 <= T_EPSILON)){
                   rtsl_t += ((rtsl_r - rtsl_B) * rtsl_A_inv);
                 } else {
@@ -1102,8 +1102,8 @@
 
       // Begin loop invariant setup code
       Vector rtsl_O = (rays.getOrigin(0) - center);
-      float rtsl_C = (Dot(rtsl_O, rtsl_O) - (radius * radius));
-      float rtsl_invariant0 = (radius * radius);
+      Real rtsl_C = (Dot(rtsl_O, rtsl_O) - (radius * radius));
+      Real rtsl_invariant0 = (radius * radius);
       // End loop invariant setup
 
       RayPacketData* data = rays.data;
@@ -1651,7 +1651,7 @@
         {
           // Section 0: BEGIN Loading variables from previous sections
 
-            Vector rtsl_O(s_O_x[i], s_O_y[i], s_O_z[i]);
+          Vector rtsl_O(rays.getOrigin(i)-center);
           // Section 0:   END Loading variables from previous sections
 
           // Section 0: BEGIN Declaring variables that were written but not 
read yet
@@ -1660,19 +1660,19 @@
           // Section 0:   END Declaring variables that were written but not 
read yet
 
             Vector rtsl_D = rays.getDirection(i);
-            float rtsl_A = Dot(rtsl_D, rtsl_D);
-            float rtsl_A_inv = (1 / rtsl_A);
-            float rtsl_B = Dot(rtsl_O, rtsl_D);
-            float rtsl_disc = ((rtsl_B * rtsl_B) - (rtsl_A * rtsl_C));
+            Real rtsl_A = Dot(rtsl_D, rtsl_D);
+            Real rtsl_A_inv = (1 / rtsl_A);
+            Real rtsl_B = Dot(rtsl_O, rtsl_D);
+            Real rtsl_disc = ((rtsl_B * rtsl_B) - (rtsl_A * rtsl_C));
             if((rtsl_disc >= 0.f)){
-              float rtsl_t = ((-(rtsl_B)) * rtsl_A_inv);
+              Real rtsl_t = ((-(rtsl_B)) * rtsl_A_inv);
               rtsl_O += (rtsl_D * rtsl_t);
-              float rtsl_B = Dot(rtsl_O, rtsl_D);
-              float rtsl_C = (Dot(rtsl_O, rtsl_O) - rtsl_invariant0);
+              Real rtsl_B = Dot(rtsl_O, rtsl_D);
+              Real rtsl_C = (Dot(rtsl_O, rtsl_O) - rtsl_invariant0);
               rtsl_disc = ((rtsl_B * rtsl_B) - (rtsl_A * rtsl_C));
               if((rtsl_disc >= 0.f)){
-                float rtsl_r = Sqrt(rtsl_disc);
-                float rtsl_t1 = (rtsl_t + ((-((rtsl_r + rtsl_B))) * 
rtsl_A_inv));
+                Real rtsl_r = Sqrt(rtsl_disc);
+                Real rtsl_t1 = (rtsl_t + ((-((rtsl_r + rtsl_B))) * 
rtsl_A_inv));
                 if((rtsl_t1 <= T_EPSILON)){
                   rtsl_t += ((rtsl_r - rtsl_B) * rtsl_A_inv);
                 } else {
@@ -1693,8 +1693,8 @@
       // General case:
 
       // Begin loop invariant setup code
-      float rtsl_invariant0 = (radius * radius);
-      float rtsl_invariant1 = (radius * radius);
+      Real rtsl_invariant0 = (radius * radius);
+      Real rtsl_invariant1 = (radius * radius);
       // End loop invariant setup
 
       RayPacketData* data = rays.data;
@@ -2254,20 +2254,20 @@
 
             Vector rtsl_O = (rays.getOrigin(i) - center);
             Vector rtsl_D = rays.getDirection(i);
-            float rtsl_A = Dot(rtsl_D, rtsl_D);
-            float rtsl_A_inv = (1 / rtsl_A);
-            float rtsl_B = Dot(rtsl_O, rtsl_D);
-            float rtsl_C = (Dot(rtsl_O, rtsl_O) - rtsl_invariant0);
-            float rtsl_disc = ((rtsl_B * rtsl_B) - (rtsl_A * rtsl_C));
+            Real rtsl_A = Dot(rtsl_D, rtsl_D);
+            Real rtsl_A_inv = (1 / rtsl_A);
+            Real rtsl_B = Dot(rtsl_O, rtsl_D);
+            Real rtsl_C = (Dot(rtsl_O, rtsl_O) - rtsl_invariant0);
+            Real rtsl_disc = ((rtsl_B * rtsl_B) - (rtsl_A * rtsl_C));
             if((rtsl_disc >= 0.f)){
-              float rtsl_t = ((-(rtsl_B)) * rtsl_A_inv);
+              Real rtsl_t = ((-(rtsl_B)) * rtsl_A_inv);
               rtsl_O += (rtsl_D * rtsl_t);
-              float rtsl_B = Dot(rtsl_O, rtsl_D);
-              float rtsl_C = (Dot(rtsl_O, rtsl_O) - rtsl_invariant1);
+              Real rtsl_B = Dot(rtsl_O, rtsl_D);
+              Real rtsl_C = (Dot(rtsl_O, rtsl_O) - rtsl_invariant1);
               rtsl_disc = ((rtsl_B * rtsl_B) - (rtsl_A * rtsl_C));
               if((rtsl_disc >= 0.f)){
-                float rtsl_r = Sqrt(rtsl_disc);
-                float rtsl_t1 = (rtsl_t + ((-((rtsl_r + rtsl_B))) * 
rtsl_A_inv));
+                Real rtsl_r = Sqrt(rtsl_disc);
+                Real rtsl_t1 = (rtsl_t + ((-((rtsl_r + rtsl_B))) * 
rtsl_A_inv));
                 if((rtsl_t1 <= T_EPSILON)){
                   rtsl_t += ((rtsl_r - rtsl_B) * rtsl_A_inv);
                 } else {




  • [Manta] r2068 - in trunk: Core/Math Model/Primitives, Thiago Ize, 02/14/2008

Archive powered by MHonArc 2.6.16.

Top of page