[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [16496] trunk/blender/extern/bullet2/src: Upgrade to latest Bullet trunk, that is in sync with Blender/extern/ bullet2.

Erwin Coumans blender at erwincoumans.com
Sat Sep 13 09:06:44 CEST 2008


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. @@




More information about the Bf-blender-cvs mailing list