add broadphase demo (empty skeleton)
This commit is contained in:
79
demo/gpudemo/GpuDemo.cpp
Normal file
79
demo/gpudemo/GpuDemo.cpp
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
#include "GpuDemo.h"
|
||||||
|
#include "GpuDemoInternalData.h"
|
||||||
|
#include "BulletCommon/btScalar.h"
|
||||||
|
#include "basic_initialize/btOpenCLUtils.h"
|
||||||
|
|
||||||
|
|
||||||
|
GpuDemo::GpuDemo()
|
||||||
|
:m_clData(0)
|
||||||
|
{
|
||||||
|
m_clData = new GpuDemoInternalData();
|
||||||
|
}
|
||||||
|
|
||||||
|
GpuDemo::~GpuDemo()
|
||||||
|
{
|
||||||
|
if (m_clData)
|
||||||
|
{
|
||||||
|
btAssert(m_clData->m_clInitialized==false);
|
||||||
|
|
||||||
|
delete m_clData;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void GpuDemo::exitCL()
|
||||||
|
{
|
||||||
|
if (m_clData->m_clInitialized)
|
||||||
|
{
|
||||||
|
clReleaseCommandQueue(m_clData->m_clQueue);
|
||||||
|
clReleaseContext(m_clData->m_clContext);
|
||||||
|
m_clData->m_clInitialized = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void GpuDemo::initCL(int preferredDeviceIndex, int preferredPlatformIndex)
|
||||||
|
{
|
||||||
|
void* glCtx=0;
|
||||||
|
void* glDC = 0;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int ciErrNum = 0;
|
||||||
|
//#ifdef CL_PLATFORM_INTEL
|
||||||
|
// cl_device_type deviceType = CL_DEVICE_TYPE_ALL;
|
||||||
|
//#else
|
||||||
|
cl_device_type deviceType = CL_DEVICE_TYPE_GPU;
|
||||||
|
//#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// if (useInterop)
|
||||||
|
// {
|
||||||
|
// m_data->m_clContext = btOpenCLUtils::createContextFromType(deviceType, &ciErrNum, glCtx, glDC);
|
||||||
|
// } else
|
||||||
|
{
|
||||||
|
m_clData->m_clContext = btOpenCLUtils::createContextFromType(deviceType, &ciErrNum, 0,0,preferredDeviceIndex, preferredPlatformIndex);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
oclCHECKERROR(ciErrNum, CL_SUCCESS);
|
||||||
|
|
||||||
|
int numDev = btOpenCLUtils::getNumDevices(m_clData->m_clContext);
|
||||||
|
|
||||||
|
if (numDev>0)
|
||||||
|
{
|
||||||
|
m_clData->m_clDevice= btOpenCLUtils::getDevice(m_clData->m_clContext,0);
|
||||||
|
m_clData->m_clQueue = clCreateCommandQueue(m_clData->m_clContext, m_clData->m_clDevice, 0, &ciErrNum);
|
||||||
|
oclCHECKERROR(ciErrNum, CL_SUCCESS);
|
||||||
|
|
||||||
|
btOpenCLUtils::printDeviceInfo(m_clData->m_clDevice);
|
||||||
|
btOpenCLDeviceInfo info;
|
||||||
|
btOpenCLUtils::getDeviceInfo(m_clData->m_clDevice,&info);
|
||||||
|
m_clData->m_clDeviceName = info.m_deviceName;
|
||||||
|
m_clData->m_clInitialized = true;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
64
demo/gpudemo/GpuDemo.h
Normal file
64
demo/gpudemo/GpuDemo.h
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
#ifndef GPU_DEMO_H
|
||||||
|
#define GPU_DEMO_H
|
||||||
|
class GLInstancingRenderer;
|
||||||
|
|
||||||
|
class GpuDemo
|
||||||
|
{
|
||||||
|
protected:
|
||||||
|
|
||||||
|
struct GpuDemoInternalData* m_clData;
|
||||||
|
|
||||||
|
|
||||||
|
virtual void initCL(int preferredDeviceIndex, int preferredPlatformIndex);
|
||||||
|
virtual void exitCL();
|
||||||
|
public:
|
||||||
|
|
||||||
|
typedef class GpuDemo* (CreateFunc)();
|
||||||
|
|
||||||
|
struct ConstructionInfo
|
||||||
|
{
|
||||||
|
bool useOpenCL;
|
||||||
|
int preferredOpenCLPlatformIndex;
|
||||||
|
int preferredOpenCLDeviceIndex;
|
||||||
|
int arraySizeX;
|
||||||
|
int arraySizeY;
|
||||||
|
int arraySizeZ;
|
||||||
|
bool m_useConcaveMesh;
|
||||||
|
float gapX;
|
||||||
|
float gapY;
|
||||||
|
float gapZ;
|
||||||
|
GLInstancingRenderer* m_instancingRenderer;
|
||||||
|
ConstructionInfo()
|
||||||
|
:useOpenCL(false),//true),
|
||||||
|
preferredOpenCLPlatformIndex(-1),
|
||||||
|
preferredOpenCLDeviceIndex(-1),
|
||||||
|
arraySizeX(10),
|
||||||
|
arraySizeY(10 ),
|
||||||
|
arraySizeZ(10),
|
||||||
|
m_useConcaveMesh(false),
|
||||||
|
gapX(4.3),
|
||||||
|
gapY(4.0),
|
||||||
|
gapZ(4.3),
|
||||||
|
m_instancingRenderer(0)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
GpuDemo();
|
||||||
|
virtual ~GpuDemo();
|
||||||
|
|
||||||
|
virtual const char* getName()=0;
|
||||||
|
|
||||||
|
virtual void initPhysics(const ConstructionInfo& ci)=0;
|
||||||
|
|
||||||
|
virtual void exitPhysics()=0;
|
||||||
|
|
||||||
|
virtual void renderScene()=0;
|
||||||
|
|
||||||
|
virtual void clientMoveAndDisplay()=0;
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
22
demo/gpudemo/GpuDemoInternalData.h
Normal file
22
demo/gpudemo/GpuDemoInternalData.h
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
#ifndef GPU_DEMO_INTERNAL_DATA_H
|
||||||
|
#define GPU_DEMO_INTERNAL_DATA_H
|
||||||
|
|
||||||
|
#include "basic_initialize/btOpenCLInclude.h"
|
||||||
|
|
||||||
|
struct GpuDemoInternalData
|
||||||
|
{
|
||||||
|
cl_context m_clContext;
|
||||||
|
cl_device_id m_clDevice;
|
||||||
|
cl_command_queue m_clQueue;
|
||||||
|
bool m_clInitialized;
|
||||||
|
char* m_clDeviceName;
|
||||||
|
|
||||||
|
GpuDemoInternalData()
|
||||||
|
:m_clInitialized(false),
|
||||||
|
m_clDeviceName(0)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -16,7 +16,7 @@ static char* particleKernelsString =
|
|||||||
//#include "../../opencl/primitives/AdlPrimitives/Math/Math.h"
|
//#include "../../opencl/primitives/AdlPrimitives/Math/Math.h"
|
||||||
//#include "../../opencl/broadphase_benchmark/btGridBroadphaseCL.h"
|
//#include "../../opencl/broadphase_benchmark/btGridBroadphaseCL.h"
|
||||||
#include "gpu_broadphase/host/btGpuSapBroadphase.h"
|
#include "gpu_broadphase/host/btGpuSapBroadphase.h"
|
||||||
|
#include "GpuDemoInternalData.h"
|
||||||
|
|
||||||
|
|
||||||
#include "BulletCommon/btQuickprof.h"
|
#include "BulletCommon/btQuickprof.h"
|
||||||
@@ -84,9 +84,7 @@ ATTRIBUTE_ALIGNED16(struct) btSimParams
|
|||||||
|
|
||||||
struct ParticleInternalData
|
struct ParticleInternalData
|
||||||
{
|
{
|
||||||
cl_context m_clContext;
|
|
||||||
cl_device_id m_clDevice;
|
|
||||||
cl_command_queue m_clQueue;
|
|
||||||
cl_kernel m_updatePositionsKernel;
|
cl_kernel m_updatePositionsKernel;
|
||||||
cl_kernel m_updatePositionsKernel2;
|
cl_kernel m_updatePositionsKernel2;
|
||||||
|
|
||||||
@@ -105,10 +103,10 @@ struct ParticleInternalData
|
|||||||
btAlignedObjectArray<btSimParams> m_simParamCPU;
|
btAlignedObjectArray<btSimParams> m_simParamCPU;
|
||||||
btOpenCLArray<btSimParams>* m_simParamGPU;
|
btOpenCLArray<btSimParams>* m_simParamGPU;
|
||||||
|
|
||||||
bool m_clInitialized;
|
|
||||||
|
|
||||||
ParticleInternalData()
|
ParticleInternalData()
|
||||||
:m_clInitialized(false),
|
:
|
||||||
m_clPositionBuffer(0),
|
m_clPositionBuffer(0),
|
||||||
m_velocitiesGPU(0),
|
m_velocitiesGPU(0),
|
||||||
m_simParamGPU(0),
|
m_simParamGPU(0),
|
||||||
@@ -120,7 +118,6 @@ struct ParticleInternalData
|
|||||||
m_simParamCPU.resize(1);
|
m_simParamCPU.resize(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
char* m_clDeviceName;
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -141,62 +138,20 @@ ParticleDemo::~ParticleDemo()
|
|||||||
|
|
||||||
void ParticleDemo::exitCL()
|
void ParticleDemo::exitCL()
|
||||||
{
|
{
|
||||||
if (m_data->m_clInitialized)
|
if (m_clData->m_clInitialized)
|
||||||
{
|
{
|
||||||
m_data->m_clInitialized = false;
|
|
||||||
clReleaseCommandQueue(m_data->m_clQueue);
|
|
||||||
clReleaseKernel(m_data->m_updatePositionsKernel);
|
clReleaseKernel(m_data->m_updatePositionsKernel);
|
||||||
clReleaseKernel(m_data->m_updatePositionsKernel2);
|
clReleaseKernel(m_data->m_updatePositionsKernel2);
|
||||||
clReleaseKernel(m_data->m_updateAabbsKernel);
|
clReleaseKernel(m_data->m_updateAabbsKernel);
|
||||||
clReleaseKernel(m_data->m_collideParticlesKernel);
|
clReleaseKernel(m_data->m_collideParticlesKernel);
|
||||||
|
|
||||||
clReleaseContext(m_data->m_clContext);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GpuDemo::exitCL();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ParticleDemo::initCL(int preferredDeviceIndex, int preferredPlatformIndex)
|
void ParticleDemo::initCL(int preferredDeviceIndex, int preferredPlatformIndex)
|
||||||
{
|
{
|
||||||
void* glCtx=0;
|
GpuDemo::initCL(preferredDeviceIndex,preferredPlatformIndex);
|
||||||
void* glDC = 0;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int ciErrNum = 0;
|
|
||||||
//#ifdef CL_PLATFORM_INTEL
|
|
||||||
// cl_device_type deviceType = CL_DEVICE_TYPE_ALL;
|
|
||||||
//#else
|
|
||||||
cl_device_type deviceType = CL_DEVICE_TYPE_GPU;
|
|
||||||
//#endif
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// if (useInterop)
|
|
||||||
// {
|
|
||||||
// m_data->m_clContext = btOpenCLUtils::createContextFromType(deviceType, &ciErrNum, glCtx, glDC);
|
|
||||||
// } else
|
|
||||||
{
|
|
||||||
m_data->m_clContext = btOpenCLUtils::createContextFromType(deviceType, &ciErrNum, 0,0,preferredDeviceIndex, preferredPlatformIndex);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
oclCHECKERROR(ciErrNum, CL_SUCCESS);
|
|
||||||
|
|
||||||
int numDev = btOpenCLUtils::getNumDevices(m_data->m_clContext);
|
|
||||||
|
|
||||||
if (numDev>0)
|
|
||||||
{
|
|
||||||
m_data->m_clDevice= btOpenCLUtils::getDevice(m_data->m_clContext,0);
|
|
||||||
m_data->m_clQueue = clCreateCommandQueue(m_data->m_clContext, m_data->m_clDevice, 0, &ciErrNum);
|
|
||||||
oclCHECKERROR(ciErrNum, CL_SUCCESS);
|
|
||||||
|
|
||||||
btOpenCLUtils::printDeviceInfo(m_data->m_clDevice);
|
|
||||||
btOpenCLDeviceInfo info;
|
|
||||||
btOpenCLUtils::getDeviceInfo(m_data->m_clDevice,&info);
|
|
||||||
m_data->m_clDeviceName = info.m_deviceName;
|
|
||||||
m_data->m_clInitialized = true;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -213,14 +168,14 @@ void ParticleDemo::setupScene(const ConstructionInfo& ci)
|
|||||||
int maxPairsSmallProxy = 32;
|
int maxPairsSmallProxy = 32;
|
||||||
float radius = 3.f*m_data->m_simParamCPU[0].m_particleRad;
|
float radius = 3.f*m_data->m_simParamCPU[0].m_particleRad;
|
||||||
|
|
||||||
m_data->m_broadphaseGPU = new btGpuSapBroadphase(m_data->m_clContext ,m_data->m_clDevice,m_data->m_clQueue);//overlappingPairCache,btVector3(4.f, 4.f, 4.f), 128, 128, 128,maxObjects, maxObjects, maxPairsSmallProxy, 100.f, 128,
|
m_data->m_broadphaseGPU = new btGpuSapBroadphase(m_clData->m_clContext ,m_clData->m_clDevice,m_clData->m_clQueue);//overlappingPairCache,btVector3(4.f, 4.f, 4.f), 128, 128, 128,maxObjects, maxObjects, maxPairsSmallProxy, 100.f, 128,
|
||||||
|
|
||||||
/*m_data->m_broadphaseGPU = new btGridBroadphaseCl(overlappingPairCache,btVector3(radius,radius,radius), 128, 128, 128,
|
/*m_data->m_broadphaseGPU = new btGridBroadphaseCl(overlappingPairCache,btVector3(radius,radius,radius), 128, 128, 128,
|
||||||
maxObjects, maxObjects, maxPairsSmallProxy, 100.f, 128,
|
maxObjects, maxObjects, maxPairsSmallProxy, 100.f, 128,
|
||||||
m_data->m_clContext ,m_data->m_clDevice,m_data->m_clQueue);
|
m_clData->m_clContext ,m_clData->m_clDevice,m_clData->m_clQueue);
|
||||||
*/
|
*/
|
||||||
|
|
||||||
m_data->m_velocitiesGPU = new btOpenCLArray<btVector3>(m_data->m_clContext,m_data->m_clQueue,numParticles);
|
m_data->m_velocitiesGPU = new btOpenCLArray<btVector3>(m_clData->m_clContext,m_clData->m_clQueue,numParticles);
|
||||||
m_data->m_velocitiesCPU.resize(numParticles);
|
m_data->m_velocitiesCPU.resize(numParticles);
|
||||||
for (int i=0;i<numParticles;i++)
|
for (int i=0;i<numParticles;i++)
|
||||||
{
|
{
|
||||||
@@ -228,21 +183,21 @@ void ParticleDemo::setupScene(const ConstructionInfo& ci)
|
|||||||
}
|
}
|
||||||
m_data->m_velocitiesGPU->copyFromHost(m_data->m_velocitiesCPU);
|
m_data->m_velocitiesGPU->copyFromHost(m_data->m_velocitiesCPU);
|
||||||
|
|
||||||
m_data->m_simParamGPU = new btOpenCLArray<btSimParams>(m_data->m_clContext,m_data->m_clQueue,1,false);
|
m_data->m_simParamGPU = new btOpenCLArray<btSimParams>(m_clData->m_clContext,m_clData->m_clQueue,1,false);
|
||||||
m_data->m_simParamGPU->copyFromHost(m_data->m_simParamCPU);
|
m_data->m_simParamGPU->copyFromHost(m_data->m_simParamCPU);
|
||||||
|
|
||||||
cl_int pErrNum;
|
cl_int pErrNum;
|
||||||
|
|
||||||
cl_program prog = btOpenCLUtils::compileCLProgramFromString(m_data->m_clContext,m_data->m_clDevice,particleKernelsString,0,"",INTEROPKERNEL_SRC_PATH);
|
cl_program prog = btOpenCLUtils::compileCLProgramFromString(m_clData->m_clContext,m_clData->m_clDevice,particleKernelsString,0,"",INTEROPKERNEL_SRC_PATH);
|
||||||
m_data->m_updatePositionsKernel = btOpenCLUtils::compileCLKernelFromString(m_data->m_clContext, m_data->m_clDevice,particleKernelsString, "updatePositionsKernel" ,&pErrNum,prog);
|
m_data->m_updatePositionsKernel = btOpenCLUtils::compileCLKernelFromString(m_clData->m_clContext, m_clData->m_clDevice,particleKernelsString, "updatePositionsKernel" ,&pErrNum,prog);
|
||||||
oclCHECKERROR(pErrNum, CL_SUCCESS);
|
oclCHECKERROR(pErrNum, CL_SUCCESS);
|
||||||
m_data->m_updatePositionsKernel2 = btOpenCLUtils::compileCLKernelFromString(m_data->m_clContext, m_data->m_clDevice,particleKernelsString, "integrateMotionKernel" ,&pErrNum,prog);
|
m_data->m_updatePositionsKernel2 = btOpenCLUtils::compileCLKernelFromString(m_clData->m_clContext, m_clData->m_clDevice,particleKernelsString, "integrateMotionKernel" ,&pErrNum,prog);
|
||||||
oclCHECKERROR(pErrNum, CL_SUCCESS);
|
oclCHECKERROR(pErrNum, CL_SUCCESS);
|
||||||
|
|
||||||
m_data->m_updateAabbsKernel= btOpenCLUtils::compileCLKernelFromString(m_data->m_clContext, m_data->m_clDevice,particleKernelsString, "updateAabbsKernel" ,&pErrNum,prog);
|
m_data->m_updateAabbsKernel= btOpenCLUtils::compileCLKernelFromString(m_clData->m_clContext, m_clData->m_clDevice,particleKernelsString, "updateAabbsKernel" ,&pErrNum,prog);
|
||||||
oclCHECKERROR(pErrNum, CL_SUCCESS);
|
oclCHECKERROR(pErrNum, CL_SUCCESS);
|
||||||
|
|
||||||
m_data->m_collideParticlesKernel = btOpenCLUtils::compileCLKernelFromString(m_data->m_clContext, m_data->m_clDevice,particleKernelsString, "collideParticlesKernel" ,&pErrNum,prog);
|
m_data->m_collideParticlesKernel = btOpenCLUtils::compileCLKernelFromString(m_clData->m_clContext, m_clData->m_clDevice,particleKernelsString, "collideParticlesKernel" ,&pErrNum,prog);
|
||||||
oclCHECKERROR(pErrNum, CL_SUCCESS);
|
oclCHECKERROR(pErrNum, CL_SUCCESS);
|
||||||
|
|
||||||
m_instancingRenderer = ci.m_instancingRenderer;
|
m_instancingRenderer = ci.m_instancingRenderer;
|
||||||
@@ -368,15 +323,15 @@ void ParticleDemo::clientMoveAndDisplay()
|
|||||||
cl_int ciErrNum;
|
cl_int ciErrNum;
|
||||||
if (!m_data->m_clPositionBuffer)
|
if (!m_data->m_clPositionBuffer)
|
||||||
{
|
{
|
||||||
m_data->m_clPositionBuffer = clCreateBuffer(m_data->m_clContext, CL_MEM_READ_WRITE,
|
m_data->m_clPositionBuffer = clCreateBuffer(m_clData->m_clContext, CL_MEM_READ_WRITE,
|
||||||
posArraySize, 0, &ciErrNum);
|
posArraySize, 0, &ciErrNum);
|
||||||
|
|
||||||
clFinish(m_data->m_clQueue);
|
clFinish(m_clData->m_clQueue);
|
||||||
oclCHECKERROR(ciErrNum, CL_SUCCESS);
|
oclCHECKERROR(ciErrNum, CL_SUCCESS);
|
||||||
ciErrNum = clEnqueueWriteBuffer ( m_data->m_clQueue,m_data->m_clPositionBuffer,
|
ciErrNum = clEnqueueWriteBuffer ( m_clData->m_clQueue,m_data->m_clPositionBuffer,
|
||||||
blocking,0,posArraySize,hostPtr,0,0,0
|
blocking,0,posArraySize,hostPtr,0,0,0
|
||||||
);
|
);
|
||||||
clFinish(m_data->m_clQueue);
|
clFinish(m_clData->m_clQueue);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -391,13 +346,13 @@ void ParticleDemo::clientMoveAndDisplay()
|
|||||||
btBufferInfoCL( m_data->m_clPositionBuffer)
|
btBufferInfoCL( m_data->m_clPositionBuffer)
|
||||||
};
|
};
|
||||||
|
|
||||||
btLauncherCL launcher(m_data->m_clQueue, m_data->m_updatePositionsKernel );
|
btLauncherCL launcher(m_clData->m_clQueue, m_data->m_updatePositionsKernel );
|
||||||
|
|
||||||
launcher.setBuffers( bInfo, sizeof(bInfo)/sizeof(btBufferInfoCL) );
|
launcher.setBuffers( bInfo, sizeof(bInfo)/sizeof(btBufferInfoCL) );
|
||||||
launcher.setConst( numParticles);
|
launcher.setConst( numParticles);
|
||||||
|
|
||||||
launcher.launch1D( numParticles);
|
launcher.launch1D( numParticles);
|
||||||
clFinish(m_data->m_clQueue);
|
clFinish(m_clData->m_clQueue);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -410,7 +365,7 @@ void ParticleDemo::clientMoveAndDisplay()
|
|||||||
btBufferInfoCL( m_data->m_simParamGPU->getBufferCL(),true)
|
btBufferInfoCL( m_data->m_simParamGPU->getBufferCL(),true)
|
||||||
};
|
};
|
||||||
|
|
||||||
btLauncherCL launcher(m_data->m_clQueue, m_data->m_updatePositionsKernel2 );
|
btLauncherCL launcher(m_clData->m_clQueue, m_data->m_updatePositionsKernel2 );
|
||||||
|
|
||||||
launcher.setConst( numParticles);
|
launcher.setConst( numParticles);
|
||||||
launcher.setBuffers( bInfo, sizeof(bInfo)/sizeof(btBufferInfoCL) );
|
launcher.setBuffers( bInfo, sizeof(bInfo)/sizeof(btBufferInfoCL) );
|
||||||
@@ -418,7 +373,7 @@ void ParticleDemo::clientMoveAndDisplay()
|
|||||||
launcher.setConst( timeStep);
|
launcher.setConst( timeStep);
|
||||||
|
|
||||||
launcher.launch1D( numParticles);
|
launcher.launch1D( numParticles);
|
||||||
clFinish(m_data->m_clQueue);
|
clFinish(m_clData->m_clQueue);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -428,13 +383,13 @@ void ParticleDemo::clientMoveAndDisplay()
|
|||||||
btBufferInfoCL( m_data->m_broadphaseGPU->getAabbBuffer()),
|
btBufferInfoCL( m_data->m_broadphaseGPU->getAabbBuffer()),
|
||||||
};
|
};
|
||||||
|
|
||||||
btLauncherCL launcher(m_data->m_clQueue, m_data->m_updateAabbsKernel );
|
btLauncherCL launcher(m_clData->m_clQueue, m_data->m_updateAabbsKernel );
|
||||||
launcher.setBuffers( bInfo, sizeof(bInfo)/sizeof(btBufferInfoCL) );
|
launcher.setBuffers( bInfo, sizeof(bInfo)/sizeof(btBufferInfoCL) );
|
||||||
launcher.setConst( m_data->m_simParamCPU[0].m_particleRad);
|
launcher.setConst( m_data->m_simParamCPU[0].m_particleRad);
|
||||||
launcher.setConst( numParticles);
|
launcher.setConst( numParticles);
|
||||||
|
|
||||||
launcher.launch1D( numParticles);
|
launcher.launch1D( numParticles);
|
||||||
clFinish(m_data->m_clQueue);
|
clFinish(m_clData->m_clQueue);
|
||||||
}
|
}
|
||||||
|
|
||||||
//broadphase
|
//broadphase
|
||||||
@@ -455,11 +410,11 @@ void ParticleDemo::clientMoveAndDisplay()
|
|||||||
btBufferInfoCL( m_data->m_broadphaseGPU->getOverlappingPairBuffer(),true),
|
btBufferInfoCL( m_data->m_broadphaseGPU->getOverlappingPairBuffer(),true),
|
||||||
};
|
};
|
||||||
|
|
||||||
btLauncherCL launcher(m_data->m_clQueue, m_data->m_collideParticlesKernel);
|
btLauncherCL launcher(m_clData->m_clQueue, m_data->m_collideParticlesKernel);
|
||||||
launcher.setBuffers( bInfo, sizeof(bInfo)/sizeof(btBufferInfoCL) );
|
launcher.setBuffers( bInfo, sizeof(bInfo)/sizeof(btBufferInfoCL) );
|
||||||
launcher.setConst( numPairsGPU);
|
launcher.setConst( numPairsGPU);
|
||||||
launcher.launch1D( numPairsGPU);
|
launcher.launch1D( numPairsGPU);
|
||||||
clFinish(m_data->m_clQueue);
|
clFinish(m_clData->m_clQueue);
|
||||||
|
|
||||||
//__kernel void collideParticlesKernel( __global float4* pPos, __global float4* pVel, __global int2* pairs, const int numPairs)
|
//__kernel void collideParticlesKernel( __global float4* pPos, __global float4* pVel, __global int2* pairs, const int numPairs)
|
||||||
}
|
}
|
||||||
@@ -467,7 +422,7 @@ void ParticleDemo::clientMoveAndDisplay()
|
|||||||
|
|
||||||
if (1)
|
if (1)
|
||||||
{
|
{
|
||||||
ciErrNum = clEnqueueReadBuffer ( m_data->m_clQueue,
|
ciErrNum = clEnqueueReadBuffer ( m_clData->m_clQueue,
|
||||||
m_data->m_clPositionBuffer,
|
m_data->m_clPositionBuffer,
|
||||||
blocking,
|
blocking,
|
||||||
0,
|
0,
|
||||||
@@ -475,7 +430,7 @@ void ParticleDemo::clientMoveAndDisplay()
|
|||||||
hostPtr,0,0,0);
|
hostPtr,0,0,0);
|
||||||
|
|
||||||
//clReleaseMemObject(clBuffer);
|
//clReleaseMemObject(clBuffer);
|
||||||
clFinish(m_data->m_clQueue);
|
clFinish(m_clData->m_clQueue);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,55 +1,21 @@
|
|||||||
#ifndef PARTICLE_DEMO_H
|
#ifndef PARTICLE_DEMO_H
|
||||||
#define PARTICLE_DEMO_H
|
#define PARTICLE_DEMO_H
|
||||||
|
|
||||||
//#include "GpuDemo.h"
|
#include "GpuDemo.h"
|
||||||
struct GLInstancingRenderer;
|
struct GLInstancingRenderer;
|
||||||
class ParticleDemo;
|
|
||||||
|
|
||||||
class ParticleDemo //: public GpuDemo
|
class ParticleDemo : public GpuDemo
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
typedef class ParticleDemo* (CreateFunc)();
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
struct ConstructionInfo
|
|
||||||
{
|
|
||||||
bool useOpenCL;
|
|
||||||
int preferredOpenCLPlatformIndex;
|
|
||||||
int preferredOpenCLDeviceIndex;
|
|
||||||
int arraySizeX;
|
|
||||||
int arraySizeY;
|
|
||||||
int arraySizeZ;
|
|
||||||
bool m_useConcaveMesh;
|
|
||||||
float gapX;
|
|
||||||
float gapY;
|
|
||||||
float gapZ;
|
|
||||||
GLInstancingRenderer* m_instancingRenderer;
|
|
||||||
ConstructionInfo()
|
|
||||||
:useOpenCL(false),//true),
|
|
||||||
preferredOpenCLPlatformIndex(-1),
|
|
||||||
preferredOpenCLDeviceIndex(-1),
|
|
||||||
arraySizeX(10),
|
|
||||||
arraySizeY(10 ),
|
|
||||||
arraySizeZ(10),
|
|
||||||
m_useConcaveMesh(false),
|
|
||||||
gapX(4.3),
|
|
||||||
gapY(4.0),
|
|
||||||
gapZ(4.3),
|
|
||||||
m_instancingRenderer(0)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
struct ParticleInternalData* m_data;
|
struct ParticleInternalData* m_data;
|
||||||
|
|
||||||
GLInstancingRenderer* m_instancingRenderer;
|
GLInstancingRenderer* m_instancingRenderer;
|
||||||
|
|
||||||
void initCL(int preferredDeviceIndex, int preferredPlatformIndex);
|
virtual void initCL(int preferredDeviceIndex, int preferredPlatformIndex);
|
||||||
void exitCL();
|
virtual void exitCL();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
@@ -67,9 +33,9 @@ public:
|
|||||||
{
|
{
|
||||||
return "ParticleDemo";
|
return "ParticleDemo";
|
||||||
}
|
}
|
||||||
static ParticleDemo* MyCreateFunc()
|
static GpuDemo* MyCreateFunc()
|
||||||
{
|
{
|
||||||
ParticleDemo* demo = new ParticleDemo;
|
GpuDemo* demo = new ParticleDemo;
|
||||||
return demo;
|
return demo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
23
demo/gpudemo/broadphase/PairBench.cpp
Normal file
23
demo/gpudemo/broadphase/PairBench.cpp
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
#include "PairBench.h"
|
||||||
|
#include "BulletCommon/btQuickprof.h"
|
||||||
|
|
||||||
|
void PairBench::initPhysics(const ConstructionInfo& ci)
|
||||||
|
{
|
||||||
|
CProfileManager::CleanupMemory();
|
||||||
|
}
|
||||||
|
|
||||||
|
void PairBench::exitPhysics()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void PairBench::renderScene()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void PairBench::clientMoveAndDisplay()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
34
demo/gpudemo/broadphase/PairBench.h
Normal file
34
demo/gpudemo/broadphase/PairBench.h
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
#ifndef PAIR_BENCH_H
|
||||||
|
#define PAIR_BENCH_H
|
||||||
|
|
||||||
|
#include "../GpuDemo.h"
|
||||||
|
|
||||||
|
class PairBench : public GpuDemo
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
virtual void initPhysics(const ConstructionInfo& ci);
|
||||||
|
|
||||||
|
virtual void exitPhysics();
|
||||||
|
|
||||||
|
virtual const char* getName()
|
||||||
|
{
|
||||||
|
return "PairBench";
|
||||||
|
}
|
||||||
|
static GpuDemo* MyCreateFunc()
|
||||||
|
{
|
||||||
|
GpuDemo* demo = new PairBench;
|
||||||
|
return demo;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
virtual void renderScene();
|
||||||
|
|
||||||
|
virtual void clientMoveAndDisplay();
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
@@ -24,6 +24,8 @@
|
|||||||
#include "OpenGLTrueTypeFont/opengl_fontstashcallbacks.h"
|
#include "OpenGLTrueTypeFont/opengl_fontstashcallbacks.h"
|
||||||
#include "gwenUserInterface.h"
|
#include "gwenUserInterface.h"
|
||||||
#include "ParticleDemo.h"
|
#include "ParticleDemo.h"
|
||||||
|
#include "broadphase/PairBench.h"
|
||||||
|
|
||||||
//#include "BroadphaseBenchmark.h"
|
//#include "BroadphaseBenchmark.h"
|
||||||
|
|
||||||
int g_OpenGLWidth=1024;
|
int g_OpenGLWidth=1024;
|
||||||
@@ -56,11 +58,12 @@ enum
|
|||||||
|
|
||||||
btAlignedObjectArray<const char*> demoNames;
|
btAlignedObjectArray<const char*> demoNames;
|
||||||
int selectedDemo = 0;
|
int selectedDemo = 0;
|
||||||
ParticleDemo::CreateFunc* allDemos[]=
|
GpuDemo::CreateFunc* allDemos[]=
|
||||||
{
|
{
|
||||||
//BroadphaseBenchmark::CreateFunc,
|
//BroadphaseBenchmark::CreateFunc,
|
||||||
//GpuBoxDemo::CreateFunc,
|
//GpuBoxDemo::CreateFunc,
|
||||||
ParticleDemo::MyCreateFunc,
|
ParticleDemo::MyCreateFunc,
|
||||||
|
PairBench::MyCreateFunc,
|
||||||
//SpheresDemo::CreateFunc,
|
//SpheresDemo::CreateFunc,
|
||||||
//GpuCompoundDemo::CreateFunc,
|
//GpuCompoundDemo::CreateFunc,
|
||||||
//EmptyDemo::CreateFunc,
|
//EmptyDemo::CreateFunc,
|
||||||
@@ -434,7 +437,7 @@ int main(int argc, char* argv[])
|
|||||||
demoNames.clear();
|
demoNames.clear();
|
||||||
for (int i=0;i<numItems;i++)
|
for (int i=0;i<numItems;i++)
|
||||||
{
|
{
|
||||||
ParticleDemo* demo = allDemos[i]();
|
GpuDemo* demo = allDemos[i]();
|
||||||
demoNames.push_back(demo->getName());
|
demoNames.push_back(demo->getName());
|
||||||
delete demo;
|
delete demo;
|
||||||
}
|
}
|
||||||
@@ -526,7 +529,7 @@ int main(int argc, char* argv[])
|
|||||||
|
|
||||||
|
|
||||||
{
|
{
|
||||||
ParticleDemo* demo = allDemos[selectedDemo]();
|
GpuDemo* demo = allDemos[selectedDemo]();
|
||||||
// demo->myinit();
|
// demo->myinit();
|
||||||
bool useGpu = false;
|
bool useGpu = false;
|
||||||
|
|
||||||
|
|||||||
@@ -29,11 +29,8 @@ function createProject(vendor)
|
|||||||
}
|
}
|
||||||
|
|
||||||
files {
|
files {
|
||||||
"main_opengl3core.cpp",
|
"**.cpp",
|
||||||
"gwenUserInterface.cpp",
|
"**.h",
|
||||||
"gwenUserInterface.h",
|
|
||||||
"ParticleDemo.cpp",
|
|
||||||
"ParticleDemo.h",
|
|
||||||
"../../src/BulletCommon/btAlignedAllocator.cpp",
|
"../../src/BulletCommon/btAlignedAllocator.cpp",
|
||||||
"../../src/BulletCommon/btAlignedAllocator.h",
|
"../../src/BulletCommon/btAlignedAllocator.h",
|
||||||
"../../src/BulletCommon/btQuickprof.cpp",
|
"../../src/BulletCommon/btQuickprof.cpp",
|
||||||
|
|||||||
Reference in New Issue
Block a user