work towards re-enabling GPU grid broadphase (in addition to GPU sap bp)

This commit is contained in:
erwin coumans
2013-11-10 23:19:51 -08:00
parent b0c43520e3
commit d13de109a5
4 changed files with 33 additions and 11 deletions

View File

@@ -115,7 +115,7 @@ void GpuRigidBodyDemo::initPhysics(const ConstructionInfo& ci)
m_data->m_config.m_maxConvexBodies = b3Max(m_data->m_config.m_maxConvexBodies,ci.arraySizeX*ci.arraySizeY*ci.arraySizeZ+10); m_data->m_config.m_maxConvexBodies = b3Max(m_data->m_config.m_maxConvexBodies,ci.arraySizeX*ci.arraySizeY*ci.arraySizeZ+10);
m_data->m_config.m_maxConvexShapes = m_data->m_config.m_maxConvexBodies; m_data->m_config.m_maxConvexShapes = m_data->m_config.m_maxConvexBodies;
int maxPairsPerBody = 128; int maxPairsPerBody = 16;
m_data->m_config.m_maxBroadphasePairs = maxPairsPerBody*m_data->m_config.m_maxConvexBodies; m_data->m_config.m_maxBroadphasePairs = maxPairsPerBody*m_data->m_config.m_maxConvexBodies;
m_data->m_config.m_maxContactCapacity = m_data->m_config.m_maxBroadphasePairs; m_data->m_config.m_maxContactCapacity = m_data->m_config.m_maxBroadphasePairs;

View File

@@ -115,8 +115,21 @@ void b3GpuGridBroadphase::createLargeProxy(const b3Vector3& aabbMin, const b3Ve
void b3GpuGridBroadphase::calculateOverlappingPairs(int maxPairs) void b3GpuGridBroadphase::calculateOverlappingPairs(int maxPairs)
{ {
B3_PROFILE("b3GpuGridBroadphase::calculateOverlappingPairs");
/*
calculateOverlappingPairsHost(maxPairs); calculateOverlappingPairsHost(maxPairs);
return; {
b3AlignedObjectArray<b3Int4> cpuPairs;
m_gpuPairs.copyToHost(cpuPairs);
printf("host m_gpuPairs.size()=%d\n",m_gpuPairs.size());
for (int i=0;i<m_gpuPairs.size();i++)
{
printf("host pair %d = %d,%d\n",i,cpuPairs[i].x,cpuPairs[i].y);
}
}
*/
//return;
int numAabbs = m_allAabbsGPU.size(); int numAabbs = m_allAabbsGPU.size();
if (numAabbs) if (numAabbs)
{ {
@@ -204,11 +217,19 @@ void b3GpuGridBroadphase::calculateOverlappingPairs(int maxPairs)
int actualCount = pairCount.at(0); int actualCount = pairCount.at(0);
//b3AlignedObjectArray<b3Int4> pairsCpu;
m_gpuPairs.resize(actualCount); m_gpuPairs.resize(actualCount);
//m_gpuPairs.copyToHost(pairsCpu); /*
//printf("?!?\n"); b3AlignedObjectArray<b3Int4> pairsCpu;
m_gpuPairs.copyToHost(pairsCpu);
printf("m_gpuPairs.size()=%d\n",m_gpuPairs.size());
for (int i=0;i<m_gpuPairs.size();i++)
{
printf("pair %d = %d,%d\n",i,pairsCpu[i].x,pairsCpu[i].y);
}
printf("?!?\n");
*/
} }

View File

@@ -150,12 +150,12 @@ void findPairsInCell( int numObjects,
if (pairCount) if (pairCount)
{ {
int handleIndex2 = as_int(min1.w); int handleIndex2 = as_int(min1.w);
//if (handleIndex<handleIndex2) if (handleIndex<handleIndex2)
{ {
int curPair = atomic_add(pairCount,1); int curPair = atomic_add(pairCount,1);
int4 newpair; int4 newpair;
newpair.x = handleIndex2; newpair.x = handleIndex;
newpair.y = handleIndex; newpair.y = handleIndex2;
newpair.z = -1; newpair.z = -1;
newpair.w = -1; newpair.w = -1;
pPairBuff2[curPair] = newpair; pPairBuff2[curPair] = newpair;
@@ -226,13 +226,13 @@ __kernel void kFindOverlappingPairs( int numObjects,
int4 gridPosA = getGridPos(pos, pParams); int4 gridPosA = getGridPos(pos, pParams);
int4 gridPosB; int4 gridPosB;
// examine only neighbouring cells // examine only neighbouring cells
for(int z=0; z<=1; z++) for(int z=-1; z<=1; z++)
{ {
gridPosB.z = gridPosA.z + z; gridPosB.z = gridPosA.z + z;
for(int y=0; y<=1; y++) for(int y=-1; y<=1; y++)
{ {
gridPosB.y = gridPosA.y + y; gridPosB.y = gridPosA.y + y;
for(int x=0; x<=1; x++) for(int x=-1; x<=1; x++)
{ {
gridPosB.x = gridPosA.x + x; gridPosB.x = gridPosA.x + x;
findPairsInCell(numObjects, gridPosB, index, pHash, pCellStart, pAABB, pPairBuff, pPairBuffStartCurr, pParams, pairCount,pPairBuff2); findPairsInCell(numObjects, gridPosB, index, pHash, pCellStart, pAABB, pPairBuff, pPairBuffStartCurr, pParams, pairCount,pPairBuff2);

View File

@@ -14,6 +14,7 @@ subject to the following restrictions:
*/ */
//Originally written by Erwin Coumans //Originally written by Erwin Coumans
bool useGpuInitSolverBodies = true; bool useGpuInitSolverBodies = true;
bool useGpuInfo1 = true; bool useGpuInfo1 = true;
bool useGpuInfo2= true; bool useGpuInfo2= true;