Revision: 16496
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=16496
Author:   erwin
Date:     2008-09-13 09:06:43 +0200 (Sat, 13 Sep 2008)

Log Message:
-----------
Upgrade to latest Bullet trunk, that is in sync with Blender/extern/bullet2. 
(except for one define 'WIN32_AVOID_SSE_WHEN_EMBEDDED_INSIDE_BLENDER')
In case someone reads those SVN logs: you can enable some extra broadphase SSE 
optimizations by replacing WIN32_AVOID_SSE_WHEN_EMBEDDED_INSIDE_BLENDER by 
WIN32 in extern/bullet2/src/BulletCollision/BroadphaseCollision/btDbvt.h

Thanks to Benoit Bolsee for the upstream patch/contribution.
Removed some obsolete files, they were just intended for comparison/testing.

Modified Paths:
--------------
    
trunk/blender/extern/bullet2/src/BulletCollision/BroadphaseCollision/btAxisSweep3.h
    
trunk/blender/extern/bullet2/src/BulletCollision/BroadphaseCollision/btDbvt.cpp
    
trunk/blender/extern/bullet2/src/BulletCollision/BroadphaseCollision/btDbvt.h
    
trunk/blender/extern/bullet2/src/BulletCollision/BroadphaseCollision/btSimpleBroadphase.cpp
    
trunk/blender/extern/bullet2/src/BulletCollision/BroadphaseCollision/btSimpleBroadphase.h
    trunk/blender/extern/bullet2/src/BulletCollision/CMakeLists.txt
    
trunk/blender/extern/bullet2/src/BulletCollision/CollisionDispatch/btBoxBoxDetector.cpp
    
trunk/blender/extern/bullet2/src/BulletCollision/CollisionDispatch/btCollisionObject.cpp
    
trunk/blender/extern/bullet2/src/BulletCollision/CollisionDispatch/btCollisionObject.h
    
trunk/blender/extern/bullet2/src/BulletCollision/CollisionDispatch/btCollisionWorld.cpp
    
trunk/blender/extern/bullet2/src/BulletCollision/CollisionDispatch/btCompoundCollisionAlgorithm.cpp
    
trunk/blender/extern/bullet2/src/BulletCollision/CollisionDispatch/btCompoundCollisionAlgorithm.h
    
trunk/blender/extern/bullet2/src/BulletCollision/CollisionDispatch/btDefaultCollisionConfiguration.cpp
    
trunk/blender/extern/bullet2/src/BulletCollision/CollisionDispatch/btDefaultCollisionConfiguration.h
    
trunk/blender/extern/bullet2/src/BulletCollision/CollisionDispatch/btSphereTriangleCollisionAlgorithm.cpp
    
trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btBoxShape.cpp
    
trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btCapsuleShape.h
    
trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btCompoundShape.cpp
    
trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btCompoundShape.h
    
trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btConvexTriangleMeshShape.cpp
    
trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btConvexTriangleMeshShape.h
    
trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btHeightfieldTerrainShape.cpp
    
trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btOptimizedBvh.cpp
    
trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btPolyhedralConvexShape.h
    
trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btTriangleMeshShape.cpp
    
trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btTriangleMeshShape.h
    trunk/blender/extern/bullet2/src/BulletDynamics/CMakeLists.txt
    
trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btConeTwistConstraint.cpp
    
trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btHingeConstraint.cpp
    
trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btSliderConstraint.cpp
    
trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btSliderConstraint.h
    
trunk/blender/extern/bullet2/src/BulletDynamics/Dynamics/btDiscreteDynamicsWorld.cpp
    
trunk/blender/extern/bullet2/src/BulletDynamics/Dynamics/btDiscreteDynamicsWorld.h
    trunk/blender/extern/bullet2/src/BulletDynamics/Dynamics/btDynamicsWorld.h
    trunk/blender/extern/bullet2/src/BulletSoftBody/btSoftBody.cpp
    trunk/blender/extern/bullet2/src/BulletSoftBody/btSoftBodyHelpers.cpp
    trunk/blender/extern/bullet2/src/BulletSoftBody/btSoftBodyInternals.h
    trunk/blender/extern/bullet2/src/LinearMath/CMakeLists.txt
    trunk/blender/extern/bullet2/src/LinearMath/btAabbUtil2.h
    trunk/blender/extern/bullet2/src/LinearMath/btMatrix3x3.h
    trunk/blender/extern/bullet2/src/LinearMath/btScalar.h
    trunk/blender/extern/bullet2/src/btBulletCollisionCommon.h
    trunk/blender/extern/bullet2/src/btBulletDynamicsCommon.h

Added Paths:
-----------
    
trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btScaledBvhTriangleMeshShape.cpp
    
trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btScaledBvhTriangleMeshShape.h

Removed Paths:
-------------
    
trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btOdeContactJoint.cpp
    
trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btOdeContactJoint.h
    
trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btOdeJoint.cpp
    
trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btOdeJoint.h
    
trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btOdeMacros.h
    
trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btOdeQuickstepConstraintSolver.cpp
    
trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btOdeQuickstepConstraintSolver.h
    
trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btOdeSolverBody.h
    
trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btOdeTypedJoint.cpp
    
trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btOdeTypedJoint.h
    
trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btSorLcp.cpp
    trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btSorLcp.h

Modified: 
trunk/blender/extern/bullet2/src/BulletCollision/BroadphaseCollision/btAxisSweep3.h
===================================================================
--- 
trunk/blender/extern/bullet2/src/BulletCollision/BroadphaseCollision/btAxisSweep3.h
 2008-09-13 05:24:52 UTC (rev 16495)
+++ 
trunk/blender/extern/bullet2/src/BulletCollision/BroadphaseCollision/btAxisSweep3.h
 2008-09-13 07:06:43 UTC (rev 16496)
@@ -27,6 +27,7 @@
 #include "btOverlappingPairCallback.h"
 
 //#define DEBUG_BROADPHASE 1
+#define USE_OVERLAP_TEST_ON_REMOVES 1
 
 /// The internal templace class btAxisSweep3Internal implements the sweep and 
prune broadphase.
 /// It uses quantized integers to represent the begin and end points for each 
of the 3 axis.
@@ -52,9 +53,7 @@
        };
 
 public:
-       //This breaks the Intel compiler, see 
http://softwarecommunity.intel.com/isn/Community/en-US/forums/thread/30253577.aspx
-       class Handle : public btBroadphaseProxy
-       //ATTRIBUTE_ALIGNED16(class) Handle : public btBroadphaseProxy
+       class   Handle : public btBroadphaseProxy
        {
        public:
        BT_DECLARE_ALIGNED_ALLOCATOR();
@@ -80,7 +79,7 @@
        BP_FP_INT_TYPE m_numHandles;                                            
// number of active handles
        BP_FP_INT_TYPE m_maxHandles;                                            
// max number of handles
        Handle* m_pHandles;                                             // 
handles pool
-       void* m_pHandlesRawPtr;
+       
        BP_FP_INT_TYPE m_firstFreeHandle;               // free handles list
 
        Edge* m_pEdges[3];                                              // edge 
arrays for the 3 axes (each array has m_maxHandles * 2 + 2 sentinel entries)
@@ -100,7 +99,7 @@
        void freeHandle(BP_FP_INT_TYPE handle);
        
 
-       bool testOverlap(int ignoreAxis,const Handle* pHandleA, const Handle* 
pHandleB);
+       bool testOverlap2D(const Handle* pHandleA, const Handle* pHandleB,int 
axis0,int axis1);
 
 #ifdef DEBUG_BROADPHASE
        void debugPrintAxis(int axis,bool checkCardinality=true);
@@ -273,10 +272,9 @@
 
        m_quantize = 
btVector3(btScalar(maxInt),btScalar(maxInt),btScalar(maxInt)) / aabbSize;
 
-       // allocate handles buffer and put all handles on free list
-       m_pHandlesRawPtr = btAlignedAlloc(sizeof(Handle)*maxHandles,16);
-       m_pHandles = new(m_pHandlesRawPtr) Handle[maxHandles];
-
+       // allocate handles buffer, using btAlignedAlloc, and put all handles 
on free list
+       m_pHandles = new Handle[maxHandles];
+       
        m_maxHandles = maxHandles;
        m_numHandles = 0;
 
@@ -327,7 +325,7 @@
        {
                btAlignedFree(m_pEdgesRawPtr[i]);
        }
-       btAlignedFree(m_pHandlesRawPtr);
+       delete [] m_pHandles;
 
        if (m_ownsPairCache)
        {
@@ -603,34 +601,17 @@
 }
 
 template <typename BP_FP_INT_TYPE>
-bool btAxisSweep3Internal<BP_FP_INT_TYPE>::testOverlap(int ignoreAxis,const 
Handle* pHandleA, const Handle* pHandleB)
+bool btAxisSweep3Internal<BP_FP_INT_TYPE>::testOverlap2D(const Handle* 
pHandleA, const Handle* pHandleB,int axis0,int axis1)
 {
        //optimization 1: check the array index (memory address), instead of 
the m_pos
 
-       for (int axis = 0; axis < 3; axis++)
+       if (pHandleA->m_maxEdges[axis0] < pHandleB->m_minEdges[axis0] || 
+               pHandleB->m_maxEdges[axis0] < pHandleA->m_minEdges[axis0] ||
+               pHandleA->m_maxEdges[axis1] < pHandleB->m_minEdges[axis1] ||
+               pHandleB->m_maxEdges[axis1] < pHandleA->m_minEdges[axis1]) 
        { 
-               if (axis != ignoreAxis)
-               {
-                       if (pHandleA->m_maxEdges[axis] < 
pHandleB->m_minEdges[axis] || 
-                               pHandleB->m_maxEdges[axis] < 
pHandleA->m_minEdges[axis]) 
-                       { 
-                               return false; 
-                       } 
-               }
+               return false; 
        } 
-
-       //optimization 2: only 2 axis need to be tested (conflicts with 
'delayed removal' optimization)
-
-       /*for (int axis = 0; axis < 3; axis++)
-       {
-               if (m_pEdges[axis][pHandleA->m_maxEdges[axis]].m_pos < 
m_pEdges[axis][pHandleB->m_minEdges[axis]].m_pos ||
-                       m_pEdges[axis][pHandleB->m_maxEdges[axis]].m_pos < 
m_pEdges[axis][pHandleA->m_minEdges[axis]].m_pos)
-               {
-                       return false;
-               }
-       }
-       */
-
        return true;
 }
 
@@ -700,7 +681,9 @@
                if (pPrev->IsMax())
                {
                        // if previous edge is a maximum check the bounds and 
add an overlap if necessary
-                       if (updateOverlaps && testOverlap(axis,pHandleEdge, 
pHandlePrev))
+                       const int axis1 = (1  << axis) & 3;
+                       const int axis2 = (1  << axis1) & 3;
+                       if (updateOverlaps && testOverlap2D(pHandleEdge, 
pHandlePrev,axis1,axis2))
                        {
                                
m_pairCache->addOverlappingPair(pHandleEdge,pHandlePrev);
                                if (m_userPairCallback)
@@ -748,12 +731,19 @@
 
                if (pNext->IsMax())
                {
-
+                       Handle* handle0 = getHandle(pEdge->m_handle);
+                       Handle* handle1 = getHandle(pNext->m_handle);
+                       const int axis1 = (1  << axis) & 3;
+                       const int axis2 = (1  << axis1) & 3;
+                       
                        // if next edge is maximum remove any overlap between 
the two handles
-                       if (updateOverlaps)
+                       if (updateOverlaps 
+#ifdef USE_OVERLAP_TEST_ON_REMOVES
+                               && testOverlap2D(handle0,handle1,axis1,axis2)
+#endif //USE_OVERLAP_TEST_ON_REMOVES
+                               )
                        {
-                               Handle* handle0 = getHandle(pEdge->m_handle);
-                               Handle* handle1 = getHandle(pNext->m_handle);
+                               
 
                                
m_pairCache->removeOverlappingPair(handle0,handle1,dispatcher); 
                                if (m_userPairCallback)
@@ -799,12 +789,20 @@
                if (!pPrev->IsMax())
                {
                        // if previous edge was a minimum remove any overlap 
between the two handles
-                       if (updateOverlaps)
+                       Handle* handle0 = getHandle(pEdge->m_handle);
+                       Handle* handle1 = getHandle(pPrev->m_handle);
+                       const int axis1 = (1  << axis) & 3;
+                       const int axis2 = (1  << axis1) & 3;
+
+                       if (updateOverlaps  
+#ifdef USE_OVERLAP_TEST_ON_REMOVES
+                               && testOverlap2D(handle0,handle1,axis1,axis2)
+#endif //USE_OVERLAP_TEST_ON_REMOVES
+                               )
                        {
                                //this is done during the overlappingpairarray 
iteration/narrowphase collision
 
-                               Handle* handle0 = getHandle(pEdge->m_handle);
-                               Handle* handle1 = getHandle(pPrev->m_handle);
+                               
                                
m_pairCache->removeOverlappingPair(handle0,handle1,dispatcher);
                                if (m_userPairCallback)
                                        
m_userPairCallback->removeOverlappingPair(handle0,handle1,dispatcher);
@@ -850,10 +848,13 @@
        {
                Handle* pHandleNext = getHandle(pNext->m_handle);
 
+               const int axis1 = (1  << axis) & 3;
+               const int axis2 = (1  << axis1) & 3;
+
                if (!pNext->IsMax())
                {
                        // if next edge is a minimum check the bounds and add 
an overlap if necessary
-                       if (updateOverlaps && testOverlap(axis, pHandleEdge, 
pHandleNext))
+                       if (updateOverlaps && testOverlap2D(pHandleEdge, 
pHandleNext,axis1,axis2))
                        {
                                Handle* handle0 = getHandle(pEdge->m_handle);
                                Handle* handle1 = getHandle(pNext->m_handle);

Modified: 
trunk/blender/extern/bullet2/src/BulletCollision/BroadphaseCollision/btDbvt.cpp
===================================================================
--- 
trunk/blender/extern/bullet2/src/BulletCollision/BroadphaseCollision/btDbvt.cpp 
    2008-09-13 05:24:52 UTC (rev 16495)
+++ 
trunk/blender/extern/bullet2/src/BulletCollision/BroadphaseCollision/btDbvt.cpp 
    2008-09-13 07:06:43 UTC (rev 16496)
@@ -663,24 +663,23 @@
         Leaves: 8192
         sizeof(btDbvtVolume): 32 bytes
         sizeof(btDbvtNode):   44 bytes
-[1] btDbvtVolume intersections: 3537 ms (0%)
-[2] btDbvtVolume merges: 1945 ms (0%)
-[3] btDbvt::collideTT: 6646 ms (0%)
-[4] btDbvt::collideTT self: 3389 ms (0%)
-[5] btDbvt::collideTT xform: 7505 ms (0%)
-[6] btDbvt::collideTT xform,self: 7480 ms (0%)
-[7] btDbvt::collideRAY: 6307 ms (0%),(332511 r/s)
-[8] insert/remove: 2105 ms (-3%),(996271 ir/s)
-[9] updates (teleport): 1943 ms (0%),(1079337 u/s)
-[10] updates (jitter): 1301 ms (0%),(1611953 u/s)
-[11] optimize (incremental): 2510 ms (0%),(1671000 o/s)
-[12] btDbvtVolume notequal: 3677 ms (0%)
-[13] culling(OCL+fullsort): 2231 ms (0%),(458 t/s)
-[14] culling(OCL+qsort): 3500 ms (0%),(2340 t/s)
-[15] culling(KDOP+qsort): 1151 ms (0%),(7117 t/s)
-[16] insert/remove batch(256): 5138 ms (0%),(816330 bir/s)
-[17] btDbvtVolume proximity: 2842 ms (0%)
-[18] btDbvtVolume select: 3390 ms (0%)
+[1] btDbvtVolume intersections: 3499 ms (-1%)
+[2] btDbvtVolume merges: 1934 ms (0%)
+[3] btDbvt::collideTT: 5485 ms (-21%)
+[4] btDbvt::collideTT self: 2814 ms (-20%)
+[5] btDbvt::collideTT xform: 7379 ms (-1%)
+[6] btDbvt::collideTT xform,self: 7270 ms (-2%)
+[7] btDbvt::collideRAY: 6314 ms (0%),(332143 r/s)
+[8] insert/remove: 2093 ms (0%),(1001983 ir/s)
+[9] updates (teleport): 1879 ms (-3%),(1116100 u/s)
+[10] updates (jitter): 1244 ms (-4%),(1685813 u/s)
+[11] optimize (incremental): 2514 ms (0%),(1668000 o/s)
+[12] btDbvtVolume notequal: 3659 ms (0%)
+[13] culling(OCL+fullsort): 2218 ms (0%),(461 t/s)
+[14] culling(OCL+qsort): 3688 ms (5%),(2221 t/s)
+[15] culling(KDOP+qsort): 1139 ms (-1%),(7192 t/s)
+[16] insert/remove batch(256): 5092 ms (0%),(823704 bir/s)
+[17] btDbvtVolume select: 3419 ms (0%)
 */
 
 struct btDbvtBenchmark
@@ -787,7 +786,7 @@
 //[1] btDbvtVolume intersections
 bool                                   cfgBenchmark1_Enable            =       
cfgEnable;
 static const int               cfgBenchmark1_Iterations        =       8;
-static const int               cfgBenchmark1_Reference         =       3537;
+static const int               cfgBenchmark1_Reference         =       3499;
 //[2] btDbvtVolume merges
 bool                                   cfgBenchmark2_Enable            =       
cfgEnable;
 static const int               cfgBenchmark2_Iterations        =       4;
@@ -795,21 +794,21 @@
 //[3] btDbvt::collideTT
 bool                                   cfgBenchmark3_Enable            =       
cfgEnable;
 static const int               cfgBenchmark3_Iterations        =       512;
-static const int               cfgBenchmark3_Reference         =       6646;
+static const int               cfgBenchmark3_Reference         =       5485;
 //[4] btDbvt::collideTT self
 bool                                   cfgBenchmark4_Enable            =       
cfgEnable;
 static const int               cfgBenchmark4_Iterations        =       512;
-static const int               cfgBenchmark4_Reference         =       3389;
+static const int               cfgBenchmark4_Reference         =       2814;
 //[5] btDbvt::collideTT xform
 bool                                   cfgBenchmark5_Enable            =       
cfgEnable;
 static const int               cfgBenchmark5_Iterations        =       512;
 static const btScalar  cfgBenchmark5_OffsetScale       =       2;
-static const int               cfgBenchmark5_Reference         =       7505;
+static const int               cfgBenchmark5_Reference         =       7379;
 //[6] btDbvt::collideTT xform,self
 bool                                   cfgBenchmark6_Enable            =       
cfgEnable;
 static const int               cfgBenchmark6_Iterations        =       512;
 static const btScalar  cfgBenchmark6_OffsetScale       =       2;
-static const int               cfgBenchmark6_Reference         =       7480;
+static const int               cfgBenchmark6_Reference         =       7270;
 //[7] btDbvt::collideRAY
 bool                                   cfgBenchmark7_Enable            =       
cfgEnable;
 static const int               cfgBenchmark7_Passes            =       32;
@@ -824,13 +823,13 @@
 bool                                   cfgBenchmark9_Enable            =       
cfgEnable;
 static const int               cfgBenchmark9_Passes            =       32;
 static const int               cfgBenchmark9_Iterations        =       65536;
-static const int               cfgBenchmark9_Reference         =       1943;
+static const int               cfgBenchmark9_Reference         =       1879;
 //[10] updates (jitter)
 bool                                   cfgBenchmark10_Enable           =       
cfgEnable;

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to