Text archives Help
- From: sparker@sci.utah.edu
- To: manta@sci.utah.edu
- Subject: [Manta] r1957 - trunk/Model/Groups
- Date: Sun, 30 Dec 2007 23:54:44 -0700 (MST)
Author: sparker
Date: Sun Dec 30 23:54:40 2007
New Revision: 1957
Modified:
trunk/Model/Groups/DynBVH.cc
Log:
10-15% speedup by using scalar sse for firstHit
Modified: trunk/Model/Groups/DynBVH.cc
==============================================================================
--- trunk/Model/Groups/DynBVH.cc (original)
+++ trunk/Model/Groups/DynBVH.cc Sun Dec 30 23:54:40 2007
@@ -144,6 +144,7 @@
{
// Try first hit as scalar
+#if 0
float tmin = 1e-5f;
float tmax = rays.getMinT(i);
@@ -160,6 +161,36 @@
*out_tmin = tmin;
return i;
}
+#else
+ __m128 t00 = _mm_mul_ss(_mm_sub_ss(_mm_set_ss(box[0][0]),
_mm_set_ss(rays.getOrigin(i, 0))),
+ _mm_set_ss(rays.getInverseDirection(i, 0)));
+ __m128 t01 = _mm_mul_ss(_mm_sub_ss(_mm_set_ss(box[1][0]),
_mm_set_ss(rays.getOrigin(i, 0))),
+ _mm_set_ss(rays.getInverseDirection(i, 0)));
+ __m128 tmin0 = _mm_max_ss(_mm_min_ss(t00, t01), _mm_set_ss(T_EPSILON));
+ __m128 tmax0 = _mm_min_ss(_mm_max_ss(t00, t01),
_mm_set_ss(rays.getMinT(i)));
+
+ __m128 t10 = _mm_mul_ss(_mm_sub_ss(_mm_set_ss(box[0][1]),
_mm_set_ss(rays.getOrigin(i, 1))),
+ _mm_set_ss(rays.getInverseDirection(i, 1)));
+ __m128 t11 = _mm_mul_ss(_mm_sub_ss(_mm_set_ss(box[1][1]),
_mm_set_ss(rays.getOrigin(i, 1))),
+ _mm_set_ss(rays.getInverseDirection(i, 1)));
+ __m128 tmin1 = _mm_max_ss(_mm_min_ss(t10, t11), tmin0);
+ __m128 tmax1 = _mm_min_ss(_mm_max_ss(t10, t11), tmax0);
+
+ __m128 t20 = _mm_mul_ss(_mm_sub_ss(_mm_set_ss(box[0][2]),
_mm_set_ss(rays.getOrigin(i, 2))),
+ _mm_set_ss(rays.getInverseDirection(i, 2)));
+ __m128 t21 = _mm_mul_ss(_mm_sub_ss(_mm_set_ss(box[1][2]),
_mm_set_ss(rays.getOrigin(i, 2))),
+ _mm_set_ss(rays.getInverseDirection(i, 2)));
+ __m128 tmin2 = _mm_max_ss(_mm_min_ss(t20, t21), tmin1);
+ __m128 tmax2 = _mm_min_ss(_mm_max_ss(t20, t21), tmax1);
+
+ float tmin, tmax;
+ _mm_store_ss(&tmin, tmin2);
+ _mm_store_ss(&tmax, tmax2);
+ if(tmin < tmax){
+ *out_tmin = tmin;
+ return i;
+ }
+#endif
}
// try a frustum miss
- [Manta] r1957 - trunk/Model/Groups, sparker, 12/31/2007
Archive powered by MHonArc 2.6.16.