Text archives Help
- From: bigler@sci.utah.edu
- To: manta@sci.utah.edu
- Subject: [MANTA] r1265 - in trunk: Engine/Shadows Interface Model/Instances SCIRun/Core
- Date: Fri, 22 Dec 2006 07:57:04 -0700 (MST)
Author: bigler
Date: Fri Dec 22 07:57:02 2006
New Revision: 1265
Modified:
trunk/Engine/Shadows/HardShadows.cc
trunk/Interface/RayPacket.cc
trunk/Interface/RayPacket.h
trunk/Model/Instances/InstanceRT.cc
trunk/SCIRun/Core/CMakeLists.txt
Log:
Engine/Shadows/HardShadows.cc
Interface/RayPacket.cc
Interface/RayPacket.h
Got rid of RayPacket::HaveHitRecords. It is no longer used. It
wasn't being maintained as a feature of the RayPacket, hense its
removal.
Model/Instances/InstanceRT.cc
If the instance_rays directions were normalize, we need to normalize
our own rays to make t values consistent. This needs to be thought
about a bit more as there are other issues with instances such as
primitives that copy texture values during intersection.
SCIRun/Core/CMakeLists.txt
Turn off forced verbose makefiles. This one got missed from an
earlier checkin. Use "make VERBOSE=1" to see verbose output.
Modified: trunk/Engine/Shadows/HardShadows.cc
==============================================================================
--- trunk/Engine/Shadows/HardShadows.cc (original)
+++ trunk/Engine/Shadows/HardShadows.cc Fri Dec 22 07:57:02 2006
@@ -172,7 +172,7 @@
} while(last == -1 && j < nlights);
// Send the shadow rays.
- shadowRays.setFlag(
RayPacket::NormalizedDirections|RayPacket::HaveHitRecords );
+ shadowRays.setFlag( RayPacket::NormalizedDirections );
shadowRays.resize ( last + 1);
context.scene->getObject()->intersect(context, shadowRays);
Modified: trunk/Interface/RayPacket.cc
==============================================================================
--- trunk/Interface/RayPacket.cc (original)
+++ trunk/Interface/RayPacket.cc Fri Dec 22 07:57:02 2006
@@ -6,62 +6,10 @@
void RayPacket::actualNormalizeDirections()
{
- if(flags & HaveHitRecords || 1){
#ifdef MANTA_SSE
- int b = (rayBegin + 3) & (~3);
- int e = rayEnd & (~3);
- if(b == e){
- for(int i=rayBegin;i<rayEnd;i++){
- Real sum = 0;
- for(int j=0;j<3;j++)
- sum += data->direction[j][i] * data->direction[j][i];
- Real length = SCIRun::Sqrt(sum);
- if(data->hitMatl[i] != 0)
- data->minT[i] *= length;
- Real scale = 1/length;
- for(int j=0;j<3;j++)
- data->direction[j][i] *= scale;
- }
- } else {
- int i = rayBegin;
- for(;i<b;i++){
- Real sum = 0;
- for(int j=0;j<3;j++)
- sum += data->direction[j][i] * data->direction[j][i];
- Real length = SCIRun::Sqrt(sum);
- if(data->hitMatl[i] != 0)
- data->minT[i] *= length;
- Real scale = 1/length;
- for(int j=0;j<3;j++)
- data->direction[j][i] *= scale;
- }
- for(;i<e;i+=4){
- __m128 xd = _mm_load_ps(&data->direction[0][i]);
- __m128 yd = _mm_load_ps(&data->direction[1][i]);
- __m128 zd = _mm_load_ps(&data->direction[2][i]);
- __m128 sum = _mm_add_ps(_mm_add_ps(_mm_mul_ps(xd, xd),
_mm_mul_ps(yd, yd)), _mm_mul_ps(zd, zd));
- __m128 scale = _mm_rsqrt_ps(sum);
- // Do one newton-raphson iteration to get the accuracy we need
- scale = _mm_mul_ps(_mm_mul_ps(scale, _mm_sub_ps(_mm_set1_ps(3.f),
_mm_mul_ps(sum, _mm_mul_ps(scale, scale)))), _mm_set1_ps(0.5f));
- _mm_store_ps(&data->direction[0][i], _mm_mul_ps(xd, scale));
- _mm_store_ps(&data->direction[1][i], _mm_mul_ps(yd, scale));
- _mm_store_ps(&data->direction[2][i], _mm_mul_ps(zd, scale));
-
- _mm_store_ps(&data->minT[i], _mm_div_ps(_mm_load_ps(&data->minT[i]),
scale));
- }
- for(;i<rayEnd;i++){
- Real sum = 0;
- for(int j=0;j<3;j++)
- sum += data->direction[j][i] * data->direction[j][i];
- Real length = SCIRun::Sqrt(sum);
- if(data->hitMatl[i] != 0)
- data->minT[i] *= length;
- Real scale = 1/length;
- for(int j=0;j<3;j++)
- data->direction[j][i] *= scale;
- }
- }
-#else
+ int b = (rayBegin + 3) & (~3);
+ int e = rayEnd & (~3);
+ if(b == e){
for(int i=rayBegin;i<rayEnd;i++){
Real sum = 0;
for(int j=0;j<3;j++)
@@ -73,62 +21,60 @@
for(int j=0;j<3;j++)
data->direction[j][i] *= scale;
}
-#endif
} else {
-#ifdef MANTA_SSE
- int b = (rayBegin + 3) & (~3);
- int e = rayEnd & (~3);
- if(b == e){
- for(int i=rayBegin;i<rayEnd;i++){
- Real sum = 0;
- for(int j=0;j<3;j++)
- sum += data->direction[j][i] * data->direction[j][i];
- Real scale = 1/SCIRun::Sqrt(sum);
- for(int j=0;j<3;j++)
- data->direction[j][i] *= scale;
- }
- } else {
- int i = rayBegin;
- for(;i<b;i++){
- Real sum = 0;
- for(int j=0;j<3;j++)
- sum += data->direction[j][i] * data->direction[j][i];
- Real scale = 1/SCIRun::Sqrt(sum);
- for(int j=0;j<3;j++)
- data->direction[j][i] *= scale;
- }
- for(;i<e;i+=4){
- __m128 xd = _mm_load_ps(&data->direction[0][i]);
- __m128 yd = _mm_load_ps(&data->direction[1][i]);
- __m128 zd = _mm_load_ps(&data->direction[2][i]);
- __m128 sum = _mm_add_ps(_mm_add_ps(_mm_mul_ps(xd, xd),
_mm_mul_ps(yd, yd)), _mm_mul_ps(zd, zd));
- __m128 scale = _mm_rsqrt_ps(sum);
- // Do one newton-raphson iteration to get the accuracy we need
- scale = _mm_mul_ps(_mm_mul_ps(scale, _mm_sub_ps(_mm_set1_ps(3.f),
_mm_mul_ps(sum, _mm_mul_ps(scale, scale)))), _mm_set1_ps(0.5f));
- _mm_store_ps(&data->direction[0][i], _mm_mul_ps(xd, scale));
- _mm_store_ps(&data->direction[1][i], _mm_mul_ps(yd, scale));
- _mm_store_ps(&data->direction[2][i], _mm_mul_ps(zd, scale));
- }
- for(;i<rayEnd;i++){
- Real sum = 0;
- for(int j=0;j<3;j++)
- sum += data->direction[j][i] * data->direction[j][i];
- Real scale = 1/SCIRun::Sqrt(sum);
- for(int j=0;j<3;j++)
- data->direction[j][i] *= scale;
- }
+ int i = rayBegin;
+ for(;i<b;i++){
+ Real sum = 0;
+ for(int j=0;j<3;j++)
+ sum += data->direction[j][i] * data->direction[j][i];
+ Real length = SCIRun::Sqrt(sum);
+ if(data->hitMatl[i] != 0)
+ data->minT[i] *= length;
+ Real scale = 1/length;
+ for(int j=0;j<3;j++)
+ data->direction[j][i] *= scale;
}
-#else
- for(int i=rayBegin;i<rayEnd;i++){
+ for(;i<e;i+=4){
+ __m128 xd = _mm_load_ps(&data->direction[0][i]);
+ __m128 yd = _mm_load_ps(&data->direction[1][i]);
+ __m128 zd = _mm_load_ps(&data->direction[2][i]);
+ __m128 sum = _mm_add_ps(_mm_add_ps(_mm_mul_ps(xd, xd), _mm_mul_ps(yd,
yd)), _mm_mul_ps(zd, zd));
+ __m128 scale = _mm_rsqrt_ps(sum);
+ // Do one newton-raphson iteration to get the accuracy we need
+ scale = _mm_mul_ps(_mm_mul_ps(scale, _mm_sub_ps(_mm_set1_ps(3.f),
_mm_mul_ps(sum, _mm_mul_ps(scale, scale)))), _mm_set1_ps(0.5f));
+ _mm_store_ps(&data->direction[0][i], _mm_mul_ps(xd, scale));
+ _mm_store_ps(&data->direction[1][i], _mm_mul_ps(yd, scale));
+ _mm_store_ps(&data->direction[2][i], _mm_mul_ps(zd, scale));
+
+ _mm_store_ps(&data->minT[i], _mm_div_ps(_mm_load_ps(&data->minT[i]),
scale));
+ }
+ for(;i<rayEnd;i++){
Real sum = 0;
for(int j=0;j<3;j++)
sum += data->direction[j][i] * data->direction[j][i];
- Real scale = 1/SCIRun::Sqrt(sum);
+ Real length = SCIRun::Sqrt(sum);
+ if(data->hitMatl[i] != 0)
+ data->minT[i] *= length;
+ Real scale = 1/length;
for(int j=0;j<3;j++)
data->direction[j][i] *= scale;
}
-#endif
}
+#else
+ for(int i=rayBegin;i<rayEnd;i++){
+ Real sum = 0;
+ for(int j=0;j<3;j++)
+ sum += data->direction[j][i] * data->direction[j][i];
+ Real length = SCIRun::Sqrt(sum);
+ if(data->hitMatl[i] != 0) {
+ data->minT[i] *= length;
+ }
+ Real scale = 1/length;
+ for(int j=0;j<3;j++)
+ data->direction[j][i] *= scale;
+ }
+#endif
+
flags |= NormalizedDirections;
if (flags & HaveInverseDirections)
Modified: trunk/Interface/RayPacket.h
==============================================================================
--- trunk/Interface/RayPacket.h (original)
+++ trunk/Interface/RayPacket.h Fri Dec 22 07:57:02 2006
@@ -137,7 +137,7 @@
HaveImageCoordinates = 0x0004,
NormalizedDirections = 0x0008,
HaveHitPositions = 0x0010,
- HaveHitRecords = 0x0020,
+ // HaveHitRecords = 0x0020, Don't use this flag anymore
HaveTexture3 = 0x0040,
HaveTexture2 = 0x0080,
HaveUnitNormals = 0x0100, // Used by prims that set
@@ -408,7 +408,6 @@
data->minT[i] = MAXT;
}
#endif
- flags |= HaveHitRecords;
}
void resetHit(int which) {
data->hitMatl[which] = 0;
Modified: trunk/Model/Instances/InstanceRT.cc
==============================================================================
--- trunk/Model/Instances/InstanceRT.cc (original)
+++ trunk/Model/Instances/InstanceRT.cc Fri Dec 22 07:57:02 2006
@@ -113,6 +113,10 @@
}
}
instance->intersect(context, instance_rays);
+ // Now if our instance rays were rescaled by a primitive (call to
+ // normalizeDirections), we need to scale our rays too.
+ if (instance_rays.getFlag(RayPacket::NormalizedDirections))
+ rays.normalizeDirections();
for(int i=rays.begin();i<rays.end();i++){
if(instance_rays.wasHit(i)){
// Instance was hit
Modified: trunk/SCIRun/Core/CMakeLists.txt
==============================================================================
--- trunk/SCIRun/Core/CMakeLists.txt (original)
+++ trunk/SCIRun/Core/CMakeLists.txt Fri Dec 22 07:57:02 2006
@@ -1,6 +1,3 @@
-
-SET (CMAKE_VERBOSE_MAKEFILE TRUE)
-
SET (SCIRUN_SOURCES)
SET (SCIRUN_SOURCES ${SCIRUN_SOURCES}
Containers/StringUtil.cc
- [MANTA] r1265 - in trunk: Engine/Shadows Interface Model/Instances SCIRun/Core, bigler, 12/22/2006
Archive powered by MHonArc 2.6.16.