work towards re-enabling GPU grid broadphase (in addition to GPU sap bp)
This commit is contained in:
@@ -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;
|
||||||
|
|
||||||
|
|||||||
@@ -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");
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user