[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