mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-07-13 23:54:35 +00:00
* Adjustment: Update Bullet version to 3.24.
This commit is contained in:
parent
35de012ee7
commit
4a3f31df2a
6148 changed files with 2112532 additions and 56873 deletions
68
Engine/lib/bullet/test/OpenCL/AllBullet3Kernels/initCL.h
Normal file
68
Engine/lib/bullet/test/OpenCL/AllBullet3Kernels/initCL.h
Normal file
|
|
@ -0,0 +1,68 @@
|
|||
|
||||
#ifndef INIT_CL_H
|
||||
#define INIT_CL_H
|
||||
|
||||
void initCL()
|
||||
{
|
||||
int preferredDeviceIndex = -1;
|
||||
int preferredPlatformIndex = -1;
|
||||
bool allowCpuOpenCL = false;
|
||||
|
||||
b3CommandLineArgs args(gArgc, gArgv);
|
||||
args.GetCmdLineArgument("cl_device", preferredDeviceIndex);
|
||||
args.GetCmdLineArgument("cl_platform", preferredPlatformIndex);
|
||||
allowCpuOpenCL = args.CheckCmdLineFlag("allow_opencl_cpu");
|
||||
|
||||
void* glCtx = 0;
|
||||
void* glDC = 0;
|
||||
|
||||
int ciErrNum = 0;
|
||||
|
||||
cl_device_type deviceType = CL_DEVICE_TYPE_GPU;
|
||||
if (allowCpuOpenCL)
|
||||
deviceType = CL_DEVICE_TYPE_ALL;
|
||||
|
||||
// if (useInterop)
|
||||
// {
|
||||
// m_data->m_clContext = b3OpenCLUtils::createContextFromType(deviceType, &ciErrNum, glCtx, glDC);
|
||||
// } else
|
||||
{
|
||||
m_clContext = b3OpenCLUtils::createContextFromType(deviceType, &ciErrNum, 0, 0, preferredDeviceIndex, preferredPlatformIndex, &m_platformId);
|
||||
ASSERT_FALSE(m_clContext == 0);
|
||||
}
|
||||
|
||||
b3OpenCLPlatformInfo platformInfo;
|
||||
b3OpenCLUtils::getPlatformInfo(m_platformId, &platformInfo);
|
||||
b3Printf("OpenCL Platform Name %s\n", platformInfo.m_platformName);
|
||||
b3Printf("OpenCL Platform Vendor %s\n", platformInfo.m_platformVendor);
|
||||
b3Printf("OpenCL Platform Version %s\n", platformInfo.m_platformVersion);
|
||||
|
||||
ASSERT_EQ(ciErrNum, CL_SUCCESS);
|
||||
|
||||
int numDev = b3OpenCLUtils::getNumDevices(m_clContext);
|
||||
EXPECT_GT(numDev, 0);
|
||||
|
||||
if (numDev > 0)
|
||||
{
|
||||
m_clDevice = b3OpenCLUtils::getDevice(m_clContext, 0);
|
||||
ASSERT_FALSE(m_clDevice == 0);
|
||||
|
||||
m_clQueue = clCreateCommandQueue(m_clContext, m_clDevice, 0, &ciErrNum);
|
||||
ASSERT_FALSE(m_clQueue == 0);
|
||||
|
||||
ASSERT_EQ(ciErrNum, CL_SUCCESS);
|
||||
|
||||
b3OpenCLDeviceInfo info;
|
||||
b3OpenCLUtils::getDeviceInfo(m_clDevice, &info);
|
||||
b3OpenCLUtils::printDeviceInfo(m_clDevice);
|
||||
m_clDeviceName = info.m_deviceName;
|
||||
}
|
||||
}
|
||||
|
||||
void exitCL()
|
||||
{
|
||||
clReleaseCommandQueue(m_clQueue);
|
||||
clReleaseContext(m_clContext);
|
||||
}
|
||||
|
||||
#endif //INIT_CL_H
|
||||
|
|
@ -0,0 +1,157 @@
|
|||
|
||||
#include <gtest/gtest.h>
|
||||
#include "Bullet3Common/b3Logging.h"
|
||||
#include "Bullet3Common/b3CommandLineArgs.h"
|
||||
#include "Bullet3OpenCL/Initialize/b3OpenCLUtils.h"
|
||||
#include "Bullet3OpenCL/BroadphaseCollision/kernels/sapKernels.h"
|
||||
#include "Bullet3OpenCL/BroadphaseCollision/kernels/gridBroadphaseKernels.h"
|
||||
|
||||
extern int gArgc;
|
||||
extern char** gArgv;
|
||||
|
||||
namespace
|
||||
{
|
||||
struct CompileBullet3BroadphaseKernels : public ::testing::Test
|
||||
{
|
||||
cl_context m_clContext;
|
||||
cl_device_id m_clDevice;
|
||||
cl_command_queue m_clQueue;
|
||||
char* m_clDeviceName;
|
||||
cl_platform_id m_platformId;
|
||||
|
||||
CompileBullet3BroadphaseKernels()
|
||||
: m_clDeviceName(0),
|
||||
m_clContext(0),
|
||||
m_clDevice(0),
|
||||
m_clQueue(0),
|
||||
m_platformId(0)
|
||||
{
|
||||
// You can do set-up work for each test here.
|
||||
b3CommandLineArgs args(gArgc, gArgv);
|
||||
int preferredDeviceIndex = -1;
|
||||
int preferredPlatformIndex = -1;
|
||||
bool allowCpuOpenCL = false;
|
||||
|
||||
initCL();
|
||||
}
|
||||
|
||||
virtual ~CompileBullet3BroadphaseKernels()
|
||||
{
|
||||
// You can do clean-up work that doesn't throw exceptions here.
|
||||
exitCL();
|
||||
}
|
||||
|
||||
// If the constructor and destructor are not enough for setting up
|
||||
// and cleaning up each test, you can define the following methods:
|
||||
|
||||
#include "initCL.h"
|
||||
|
||||
virtual void SetUp()
|
||||
{
|
||||
// Code here will be called immediately after the constructor (right
|
||||
// before each test).
|
||||
}
|
||||
|
||||
virtual void TearDown()
|
||||
{
|
||||
// Code here will be called immediately after each test (right
|
||||
// before the destructor).
|
||||
}
|
||||
};
|
||||
|
||||
TEST_F(CompileBullet3BroadphaseKernels, sapKernels)
|
||||
{
|
||||
cl_int errNum = 0;
|
||||
cl_program sapProg = b3OpenCLUtils::compileCLProgramFromString(m_clContext, m_clDevice, sapCL, &errNum, "", 0, true);
|
||||
{
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
cl_kernel copyAabbsKernel = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice, sapCL, "copyAabbsKernel", &errNum, sapProg);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
ASSERT_FALSE(copyAabbsKernel == 0);
|
||||
clReleaseKernel(copyAabbsKernel);
|
||||
}
|
||||
{
|
||||
cl_kernel sap2Kernel = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice, sapCL, "computePairsKernelTwoArrays", &errNum, sapProg);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
ASSERT_FALSE(sap2Kernel == 0);
|
||||
clReleaseKernel(sap2Kernel);
|
||||
}
|
||||
{
|
||||
cl_kernel sapKernelBruteForce = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice, sapCL, "computePairsKernelBruteForce", &errNum, sapProg);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
ASSERT_FALSE(sapKernelBruteForce == 0);
|
||||
clReleaseKernel(sapKernelBruteForce);
|
||||
}
|
||||
{
|
||||
cl_kernel sapKernelOriginal = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice, sapCL, "computePairsKernelOriginal", &errNum, sapProg);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
ASSERT_FALSE(sapKernelOriginal == 0);
|
||||
clReleaseKernel(sapKernelOriginal);
|
||||
}
|
||||
|
||||
{
|
||||
cl_kernel sapKernelBarrier = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice, sapCL, "computePairsKernelBarrier", &errNum, sapProg);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
ASSERT_FALSE(sapKernelBarrier == 0);
|
||||
clReleaseKernel(sapKernelBarrier);
|
||||
}
|
||||
{
|
||||
cl_kernel sapKernelLocalShared = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice, sapCL, "computePairsKernelLocalSharedMemory", &errNum, sapProg);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
ASSERT_FALSE(sapKernelLocalShared == 0);
|
||||
clReleaseKernel(sapKernelLocalShared);
|
||||
}
|
||||
{
|
||||
cl_kernel prepareSumVarianceKernel = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice, sapCL, "prepareSumVarianceKernel", &errNum, sapProg);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
ASSERT_FALSE(prepareSumVarianceKernel == 0);
|
||||
clReleaseKernel(prepareSumVarianceKernel);
|
||||
}
|
||||
{
|
||||
cl_kernel k = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice, sapCL, "flipFloatKernel", &errNum, sapProg);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
ASSERT_FALSE(k == 0);
|
||||
clReleaseKernel(k);
|
||||
}
|
||||
{
|
||||
cl_kernel k = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice, sapCL, "scatterKernel", &errNum, sapProg);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
ASSERT_FALSE(k == 0);
|
||||
clReleaseKernel(k);
|
||||
}
|
||||
|
||||
clReleaseProgram(sapProg);
|
||||
};
|
||||
|
||||
TEST_F(CompileBullet3BroadphaseKernels, gridBroadphaseKernels)
|
||||
{
|
||||
cl_int errNum = 0;
|
||||
cl_program gridProg = b3OpenCLUtils::compileCLProgramFromString(m_clContext, m_clDevice, gridBroadphaseCL, &errNum, "", 0, true);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
|
||||
{
|
||||
cl_kernel k = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice, gridBroadphaseCL, "kCalcHashAABB", &errNum, gridProg);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
clReleaseKernel(k);
|
||||
}
|
||||
{
|
||||
cl_kernel k = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice, gridBroadphaseCL, "kClearCellStart", &errNum, gridProg);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
clReleaseKernel(k);
|
||||
}
|
||||
|
||||
{
|
||||
cl_kernel k = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice, gridBroadphaseCL, "kFindCellStart", &errNum, gridProg);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
clReleaseKernel(k);
|
||||
}
|
||||
|
||||
{
|
||||
cl_kernel k = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice, gridBroadphaseCL, "kFindOverlappingPairs", &errNum, gridProg);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
clReleaseKernel(k);
|
||||
}
|
||||
|
||||
clReleaseProgram(gridProg);
|
||||
}
|
||||
}; // namespace
|
||||
|
|
@ -0,0 +1,102 @@
|
|||
|
||||
#include <gtest/gtest.h>
|
||||
#include "Bullet3Common/b3Logging.h"
|
||||
#include "Bullet3Common/b3CommandLineArgs.h"
|
||||
#include "Bullet3OpenCL/Initialize/b3OpenCLUtils.h"
|
||||
|
||||
#include "Bullet3OpenCL/RigidBody/kernels/integrateKernel.h"
|
||||
#include "Bullet3OpenCL/RigidBody/kernels/updateAabbsKernel.h"
|
||||
|
||||
extern int gArgc;
|
||||
extern char** gArgv;
|
||||
|
||||
namespace
|
||||
{
|
||||
struct testCompileBullet3IntegrateUpdateAabbKernels : public ::testing::Test
|
||||
{
|
||||
cl_context m_clContext;
|
||||
cl_device_id m_clDevice;
|
||||
cl_command_queue m_clQueue;
|
||||
char* m_clDeviceName;
|
||||
cl_platform_id m_platformId;
|
||||
|
||||
testCompileBullet3IntegrateUpdateAabbKernels()
|
||||
: m_clDeviceName(0),
|
||||
m_clContext(0),
|
||||
m_clDevice(0),
|
||||
m_clQueue(0),
|
||||
m_platformId(0)
|
||||
{
|
||||
// You can do set-up work for each test here.
|
||||
b3CommandLineArgs args(gArgc, gArgv);
|
||||
int preferredDeviceIndex = -1;
|
||||
int preferredPlatformIndex = -1;
|
||||
bool allowCpuOpenCL = false;
|
||||
|
||||
initCL();
|
||||
}
|
||||
|
||||
virtual ~testCompileBullet3IntegrateUpdateAabbKernels()
|
||||
{
|
||||
// You can do clean-up work that doesn't throw exceptions here.
|
||||
exitCL();
|
||||
}
|
||||
|
||||
// If the constructor and destructor are not enough for setting up
|
||||
// and cleaning up each test, you can define the following methods:
|
||||
|
||||
#include "initCL.h"
|
||||
|
||||
virtual void SetUp()
|
||||
{
|
||||
// Code here will be called immediately after the constructor (right
|
||||
// before each test).
|
||||
}
|
||||
|
||||
virtual void TearDown()
|
||||
{
|
||||
// Code here will be called immediately after each test (right
|
||||
// before the destructor).
|
||||
}
|
||||
};
|
||||
|
||||
TEST_F(testCompileBullet3IntegrateUpdateAabbKernels, integrateKernelCL)
|
||||
{
|
||||
cl_int errNum = 0;
|
||||
|
||||
cl_program prog = b3OpenCLUtils::compileCLProgramFromString(m_clContext, m_clDevice, integrateKernelCL, &errNum, "", 0, true);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
|
||||
{
|
||||
cl_kernel k = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice, integrateKernelCL, "integrateTransformsKernel", &errNum, prog);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
ASSERT_FALSE(k == 0);
|
||||
clReleaseKernel(k);
|
||||
}
|
||||
clReleaseProgram(prog);
|
||||
}
|
||||
|
||||
TEST_F(testCompileBullet3IntegrateUpdateAabbKernels, updateAabbsKernelCL)
|
||||
{
|
||||
cl_int errNum = 0;
|
||||
cl_program prog = b3OpenCLUtils::compileCLProgramFromString(m_clContext, m_clDevice, updateAabbsKernelCL, &errNum, "", 0, true);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
|
||||
{
|
||||
cl_kernel k = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice, updateAabbsKernelCL, "initializeGpuAabbsFull", &errNum, prog);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
ASSERT_FALSE(k == 0);
|
||||
clReleaseKernel(k);
|
||||
}
|
||||
|
||||
{
|
||||
cl_kernel k = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice, updateAabbsKernelCL, "clearOverlappingPairsKernel", &errNum, prog);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
ASSERT_FALSE(k == 0);
|
||||
clReleaseKernel(k);
|
||||
}
|
||||
|
||||
clReleaseProgram(prog);
|
||||
}
|
||||
|
||||
}; // namespace
|
||||
|
|
@ -0,0 +1,120 @@
|
|||
|
||||
#include <gtest/gtest.h>
|
||||
#include "Bullet3Common/b3Logging.h"
|
||||
#include "Bullet3Common/b3CommandLineArgs.h"
|
||||
#include "Bullet3OpenCL/Initialize/b3OpenCLUtils.h"
|
||||
|
||||
#include "Bullet3OpenCL/RigidBody/kernels/solverUtils.h"
|
||||
|
||||
extern int gArgc;
|
||||
extern char** gArgv;
|
||||
|
||||
namespace
|
||||
{
|
||||
struct CompileBullet3JacobiContactSolverKernels : public ::testing::Test
|
||||
{
|
||||
cl_context m_clContext;
|
||||
cl_device_id m_clDevice;
|
||||
cl_command_queue m_clQueue;
|
||||
char* m_clDeviceName;
|
||||
cl_platform_id m_platformId;
|
||||
|
||||
CompileBullet3JacobiContactSolverKernels()
|
||||
: m_clDeviceName(0),
|
||||
m_clContext(0),
|
||||
m_clDevice(0),
|
||||
m_clQueue(0),
|
||||
m_platformId(0)
|
||||
{
|
||||
// You can do set-up work for each test here.
|
||||
b3CommandLineArgs args(gArgc, gArgv);
|
||||
int preferredDeviceIndex = -1;
|
||||
int preferredPlatformIndex = -1;
|
||||
bool allowCpuOpenCL = false;
|
||||
|
||||
initCL();
|
||||
}
|
||||
|
||||
virtual ~CompileBullet3JacobiContactSolverKernels()
|
||||
{
|
||||
// You can do clean-up work that doesn't throw exceptions here.
|
||||
exitCL();
|
||||
}
|
||||
|
||||
// If the constructor and destructor are not enough for setting up
|
||||
// and cleaning up each test, you can define the following methods:
|
||||
|
||||
#include "initCL.h"
|
||||
|
||||
virtual void SetUp()
|
||||
{
|
||||
// Code here will be called immediately after the constructor (right
|
||||
// before each test).
|
||||
}
|
||||
|
||||
virtual void TearDown()
|
||||
{
|
||||
// Code here will be called immediately after each test (right
|
||||
// before the destructor).
|
||||
}
|
||||
};
|
||||
|
||||
TEST_F(CompileBullet3JacobiContactSolverKernels, jacobiContactKernels)
|
||||
{
|
||||
cl_int errNum = 0;
|
||||
const char* additionalMacros = "";
|
||||
|
||||
cl_program solverUtilsProg = b3OpenCLUtils::compileCLProgramFromString(m_clContext, m_clDevice, solverUtilsCL, &errNum, additionalMacros, 0, true);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
|
||||
{
|
||||
cl_kernel k = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice, solverUtilsCL, "CountBodiesKernel", &errNum, solverUtilsProg, additionalMacros);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
ASSERT_FALSE(k == 0);
|
||||
clReleaseKernel(k);
|
||||
}
|
||||
|
||||
{
|
||||
cl_kernel k = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice, solverUtilsCL, "ContactToConstraintSplitKernel", &errNum, solverUtilsProg, additionalMacros);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
ASSERT_FALSE(k == 0);
|
||||
clReleaseKernel(k);
|
||||
}
|
||||
|
||||
{
|
||||
cl_kernel k = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice, solverUtilsCL, "ClearVelocitiesKernel", &errNum, solverUtilsProg, additionalMacros);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
ASSERT_FALSE(k == 0);
|
||||
clReleaseKernel(k);
|
||||
}
|
||||
|
||||
{
|
||||
cl_kernel k = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice, solverUtilsCL, "AverageVelocitiesKernel", &errNum, solverUtilsProg, additionalMacros);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
ASSERT_FALSE(k == 0);
|
||||
clReleaseKernel(k);
|
||||
}
|
||||
|
||||
{
|
||||
cl_kernel k = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice, solverUtilsCL, "UpdateBodyVelocitiesKernel", &errNum, solverUtilsProg, additionalMacros);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
ASSERT_FALSE(k == 0);
|
||||
clReleaseKernel(k);
|
||||
}
|
||||
|
||||
{
|
||||
cl_kernel k = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice, solverUtilsCL, "SolveContactJacobiKernel", &errNum, solverUtilsProg, additionalMacros);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
ASSERT_FALSE(k == 0);
|
||||
clReleaseKernel(k);
|
||||
}
|
||||
|
||||
{
|
||||
cl_kernel k = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice, solverUtilsCL, "SolveFrictionJacobiKernel", &errNum, solverUtilsProg, additionalMacros);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
ASSERT_FALSE(k == 0);
|
||||
clReleaseKernel(k);
|
||||
}
|
||||
clReleaseProgram(solverUtilsProg);
|
||||
}
|
||||
}; // namespace
|
||||
|
|
@ -0,0 +1,254 @@
|
|||
|
||||
#include <gtest/gtest.h>
|
||||
#include "Bullet3Common/b3Logging.h"
|
||||
#include "Bullet3Common/b3CommandLineArgs.h"
|
||||
#include "Bullet3OpenCL/Initialize/b3OpenCLUtils.h"
|
||||
|
||||
#include "Bullet3OpenCL/NarrowphaseCollision/kernels/satKernels.h"
|
||||
#include "Bullet3OpenCL/NarrowphaseCollision/kernels/mprKernels.h"
|
||||
#include "Bullet3OpenCL/NarrowphaseCollision/kernels/satConcaveKernels.h"
|
||||
#include "Bullet3OpenCL/NarrowphaseCollision/kernels/satClipHullContacts.h"
|
||||
#include "Bullet3OpenCL/NarrowphaseCollision/kernels/bvhTraversal.h"
|
||||
#include "Bullet3OpenCL/NarrowphaseCollision/kernels/primitiveContacts.h"
|
||||
|
||||
extern int gArgc;
|
||||
extern char** gArgv;
|
||||
|
||||
namespace
|
||||
{
|
||||
struct CompileBullet3NarrowphaseKernels : public ::testing::Test
|
||||
{
|
||||
cl_context m_clContext;
|
||||
cl_device_id m_clDevice;
|
||||
cl_command_queue m_clQueue;
|
||||
char* m_clDeviceName;
|
||||
cl_platform_id m_platformId;
|
||||
|
||||
CompileBullet3NarrowphaseKernels()
|
||||
: m_clDeviceName(0),
|
||||
m_clContext(0),
|
||||
m_clDevice(0),
|
||||
m_clQueue(0),
|
||||
m_platformId(0)
|
||||
{
|
||||
// You can do set-up work for each test here.
|
||||
b3CommandLineArgs args(gArgc, gArgv);
|
||||
int preferredDeviceIndex = -1;
|
||||
int preferredPlatformIndex = -1;
|
||||
bool allowCpuOpenCL = false;
|
||||
|
||||
initCL();
|
||||
}
|
||||
|
||||
virtual ~CompileBullet3NarrowphaseKernels()
|
||||
{
|
||||
// You can do clean-up work that doesn't throw exceptions here.
|
||||
exitCL();
|
||||
}
|
||||
|
||||
// If the constructor and destructor are not enough for setting up
|
||||
// and cleaning up each test, you can define the following methods:
|
||||
|
||||
#include "initCL.h"
|
||||
|
||||
virtual void SetUp()
|
||||
{
|
||||
// Code here will be called immediately after the constructor (right
|
||||
// before each test).
|
||||
}
|
||||
|
||||
virtual void TearDown()
|
||||
{
|
||||
// Code here will be called immediately after each test (right
|
||||
// before the destructor).
|
||||
}
|
||||
};
|
||||
|
||||
TEST_F(CompileBullet3NarrowphaseKernels, satKernelsCL)
|
||||
{
|
||||
cl_int errNum = 0;
|
||||
|
||||
char flags[1024] = {0};
|
||||
|
||||
cl_program satProg = b3OpenCLUtils::compileCLProgramFromString(m_clContext, m_clDevice, satKernelsCL, &errNum, flags, 0, true);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
|
||||
{
|
||||
cl_kernel m_findSeparatingAxisKernel = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice, satKernelsCL, "findSeparatingAxisKernel", &errNum, satProg);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
clReleaseKernel(m_findSeparatingAxisKernel);
|
||||
}
|
||||
|
||||
{
|
||||
cl_kernel m_findSeparatingAxisVertexFaceKernel = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice, satKernelsCL, "findSeparatingAxisVertexFaceKernel", &errNum, satProg);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
clReleaseKernel(m_findSeparatingAxisVertexFaceKernel);
|
||||
}
|
||||
|
||||
{
|
||||
cl_kernel m_findSeparatingAxisEdgeEdgeKernel = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice, satKernelsCL, "findSeparatingAxisEdgeEdgeKernel", &errNum, satProg);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
clReleaseKernel(m_findSeparatingAxisEdgeEdgeKernel);
|
||||
}
|
||||
|
||||
{
|
||||
cl_kernel m_findConcaveSeparatingAxisKernel = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice, satKernelsCL, "findConcaveSeparatingAxisKernel", &errNum, satProg);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
clReleaseKernel(m_findConcaveSeparatingAxisKernel);
|
||||
}
|
||||
|
||||
{
|
||||
cl_kernel m_findCompoundPairsKernel = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice, satKernelsCL, "findCompoundPairsKernel", &errNum, satProg);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
clReleaseKernel(m_findCompoundPairsKernel);
|
||||
}
|
||||
|
||||
{
|
||||
cl_kernel m_processCompoundPairsKernel = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice, satKernelsCL, "processCompoundPairsKernel", &errNum, satProg);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
clReleaseKernel(m_processCompoundPairsKernel);
|
||||
}
|
||||
|
||||
clReleaseProgram(satProg);
|
||||
}
|
||||
|
||||
TEST_F(CompileBullet3NarrowphaseKernels, satConcaveKernelsCL)
|
||||
{
|
||||
cl_int errNum = 0;
|
||||
|
||||
char flags[1024] = {0};
|
||||
|
||||
cl_program satConcaveProg = b3OpenCLUtils::compileCLProgramFromString(m_clContext, m_clDevice, satConcaveKernelsCL, &errNum, flags, 0, true);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
|
||||
{
|
||||
cl_kernel m_findConcaveSeparatingAxisVertexFaceKernel = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice, satConcaveKernelsCL, "findConcaveSeparatingAxisVertexFaceKernel", &errNum, satConcaveProg);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
clReleaseKernel(m_findConcaveSeparatingAxisVertexFaceKernel);
|
||||
}
|
||||
|
||||
{
|
||||
cl_kernel m_findConcaveSeparatingAxisEdgeEdgeKernel = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice, satConcaveKernelsCL, "findConcaveSeparatingAxisEdgeEdgeKernel", &errNum, satConcaveProg);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
clReleaseKernel(m_findConcaveSeparatingAxisEdgeEdgeKernel);
|
||||
}
|
||||
|
||||
clReleaseProgram(satConcaveProg);
|
||||
}
|
||||
|
||||
TEST_F(CompileBullet3NarrowphaseKernels, satClipKernelsCL)
|
||||
{
|
||||
char flags[1024] = {0};
|
||||
cl_int errNum = 0;
|
||||
//#ifdef CL_PLATFORM_INTEL
|
||||
// sprintf(flags,"-g -s \"%s\"","C:/develop/bullet3_experiments2/opencl/gpu_narrowphase/kernels/satClipHullContacts.cl");
|
||||
//#endif
|
||||
|
||||
cl_program satClipContactsProg = b3OpenCLUtils::compileCLProgramFromString(m_clContext, m_clDevice, satClipKernelsCL, &errNum, flags, 0, true);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
|
||||
{
|
||||
cl_kernel m_clipHullHullKernel = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice, satClipKernelsCL, "clipHullHullKernel", &errNum, satClipContactsProg);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
clReleaseKernel(m_clipHullHullKernel);
|
||||
}
|
||||
|
||||
{
|
||||
cl_kernel m_clipCompoundsHullHullKernel = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice, satClipKernelsCL, "clipCompoundsHullHullKernel", &errNum, satClipContactsProg);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
clReleaseKernel(m_clipCompoundsHullHullKernel);
|
||||
}
|
||||
|
||||
{
|
||||
cl_kernel k = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice, satClipKernelsCL, "findClippingFacesKernel", &errNum, satClipContactsProg);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
clReleaseKernel(k);
|
||||
}
|
||||
|
||||
{
|
||||
cl_kernel k = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice, satClipKernelsCL, "clipFacesAndFindContactsKernel", &errNum, satClipContactsProg);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
clReleaseKernel(k);
|
||||
}
|
||||
|
||||
{
|
||||
cl_kernel k = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice, satClipKernelsCL, "clipHullHullConcaveConvexKernel", &errNum, satClipContactsProg);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
clReleaseKernel(k);
|
||||
}
|
||||
|
||||
{
|
||||
cl_kernel k = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice, satClipKernelsCL,
|
||||
"newContactReductionKernel", &errNum, satClipContactsProg);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
clReleaseKernel(k);
|
||||
}
|
||||
|
||||
clReleaseProgram(satClipContactsProg);
|
||||
}
|
||||
|
||||
TEST_F(CompileBullet3NarrowphaseKernels, bvhTraversalKernels)
|
||||
{
|
||||
cl_int errNum = 0;
|
||||
cl_program bvhTraversalProg = b3OpenCLUtils::compileCLProgramFromString(m_clContext, m_clDevice, bvhTraversalKernelCL, &errNum, "", 0, true);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
|
||||
{
|
||||
cl_kernel k = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice, bvhTraversalKernelCL, "bvhTraversalKernel", &errNum, bvhTraversalProg, "");
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
clReleaseKernel(k);
|
||||
}
|
||||
clReleaseProgram(bvhTraversalProg);
|
||||
}
|
||||
|
||||
TEST_F(CompileBullet3NarrowphaseKernels, primitiveContactsKernelsCL)
|
||||
{
|
||||
cl_int errNum = 0;
|
||||
cl_program primitiveContactsProg = b3OpenCLUtils::compileCLProgramFromString(m_clContext, m_clDevice, primitiveContactsKernelsCL, &errNum, "", 0, true);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
|
||||
{
|
||||
cl_kernel k = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice, primitiveContactsKernelsCL, "primitiveContactsKernel", &errNum, primitiveContactsProg, "");
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
clReleaseKernel(k);
|
||||
}
|
||||
|
||||
{
|
||||
cl_kernel k = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice, primitiveContactsKernelsCL, "findConcaveSphereContactsKernel", &errNum, primitiveContactsProg);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
clReleaseKernel(k);
|
||||
}
|
||||
|
||||
{
|
||||
cl_kernel k = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice, primitiveContactsKernelsCL, "processCompoundPairsPrimitivesKernel", &errNum, primitiveContactsProg, "");
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
clReleaseKernel(k);
|
||||
}
|
||||
|
||||
clReleaseProgram(primitiveContactsProg);
|
||||
}
|
||||
|
||||
TEST_F(CompileBullet3NarrowphaseKernels, mprKernelsCL)
|
||||
{
|
||||
cl_int errNum = 0;
|
||||
const char* srcConcave = satConcaveKernelsCL;
|
||||
char flags[1024] = {0};
|
||||
cl_program mprProg = b3OpenCLUtils::compileCLProgramFromString(m_clContext, m_clDevice, mprKernelsCL, &errNum, flags, 0, true);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
|
||||
{
|
||||
cl_kernel k = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice, mprKernelsCL, "mprPenetrationKernel", &errNum, mprProg);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
clReleaseKernel(k);
|
||||
}
|
||||
|
||||
{
|
||||
cl_kernel k = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice, mprKernelsCL, "findSeparatingAxisUnitSphereKernel", &errNum, mprProg);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
clReleaseKernel(k);
|
||||
}
|
||||
|
||||
clReleaseProgram(mprProg);
|
||||
}
|
||||
|
||||
}; // namespace
|
||||
|
|
@ -0,0 +1,227 @@
|
|||
|
||||
#include <gtest/gtest.h>
|
||||
#include "Bullet3Common/b3Logging.h"
|
||||
#include "Bullet3Common/b3CommandLineArgs.h"
|
||||
#include "Bullet3OpenCL/Initialize/b3OpenCLUtils.h"
|
||||
|
||||
#include "Bullet3OpenCL/RigidBody/kernels/solverSetup.h"
|
||||
#include "Bullet3OpenCL/RigidBody/kernels/solverSetup2.h"
|
||||
#include "Bullet3OpenCL/RigidBody/kernels/solveContact.h"
|
||||
#include "Bullet3OpenCL/RigidBody/kernels/solveFriction.h"
|
||||
#include "Bullet3OpenCL/RigidBody/kernels/batchingKernels.h"
|
||||
#include "Bullet3OpenCL/RigidBody/kernels/batchingKernelsNew.h"
|
||||
|
||||
extern int gArgc;
|
||||
extern char** gArgv;
|
||||
|
||||
namespace
|
||||
{
|
||||
struct CompileBullet3PgsContactSolverKernels : public ::testing::Test
|
||||
{
|
||||
cl_context m_clContext;
|
||||
cl_device_id m_clDevice;
|
||||
cl_command_queue m_clQueue;
|
||||
char* m_clDeviceName;
|
||||
cl_platform_id m_platformId;
|
||||
|
||||
CompileBullet3PgsContactSolverKernels()
|
||||
: m_clDeviceName(0),
|
||||
m_clContext(0),
|
||||
m_clDevice(0),
|
||||
m_clQueue(0),
|
||||
m_platformId(0)
|
||||
{
|
||||
// You can do set-up work for each test here.
|
||||
b3CommandLineArgs args(gArgc, gArgv);
|
||||
int preferredDeviceIndex = -1;
|
||||
int preferredPlatformIndex = -1;
|
||||
bool allowCpuOpenCL = false;
|
||||
|
||||
initCL();
|
||||
}
|
||||
|
||||
virtual ~CompileBullet3PgsContactSolverKernels()
|
||||
{
|
||||
// You can do clean-up work that doesn't throw exceptions here.
|
||||
exitCL();
|
||||
}
|
||||
|
||||
// If the constructor and destructor are not enough for setting up
|
||||
// and cleaning up each test, you can define the following methods:
|
||||
|
||||
#include "initCL.h"
|
||||
|
||||
virtual void SetUp()
|
||||
{
|
||||
// Code here will be called immediately after the constructor (right
|
||||
// before each test).
|
||||
}
|
||||
|
||||
virtual void TearDown()
|
||||
{
|
||||
// Code here will be called immediately after each test (right
|
||||
// before the destructor).
|
||||
}
|
||||
};
|
||||
|
||||
TEST_F(CompileBullet3PgsContactSolverKernels, solveFrictionCL)
|
||||
{
|
||||
const char* additionalMacros = "";
|
||||
cl_int errNum = 0;
|
||||
cl_program solveFrictionProg = b3OpenCLUtils::compileCLProgramFromString(m_clContext, m_clDevice, solveFrictionCL, &errNum, additionalMacros, 0, true);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
|
||||
{
|
||||
cl_kernel k = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice, solveFrictionCL, "BatchSolveKernelFriction", &errNum, solveFrictionProg, additionalMacros);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
ASSERT_FALSE(k == 0);
|
||||
clReleaseKernel(k);
|
||||
}
|
||||
|
||||
{
|
||||
cl_kernel k = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice, solveFrictionCL, "solveSingleFrictionKernel", &errNum, solveFrictionProg, additionalMacros);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
ASSERT_FALSE(k == 0);
|
||||
clReleaseKernel(k);
|
||||
}
|
||||
clReleaseProgram(solveFrictionProg);
|
||||
}
|
||||
|
||||
TEST_F(CompileBullet3PgsContactSolverKernels, solverSetupCL)
|
||||
{
|
||||
const char* additionalMacros = "";
|
||||
cl_int errNum = 0;
|
||||
cl_program solverSetupProg = b3OpenCLUtils::compileCLProgramFromString(m_clContext, m_clDevice, solverSetupCL, &errNum, additionalMacros, 0, true);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
|
||||
{
|
||||
cl_kernel k = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice, solverSetupCL, "ContactToConstraintKernel", &errNum, solverSetupProg, additionalMacros);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
ASSERT_FALSE(k == 0);
|
||||
clReleaseKernel(k);
|
||||
}
|
||||
|
||||
clReleaseProgram(solverSetupProg);
|
||||
}
|
||||
|
||||
TEST_F(CompileBullet3PgsContactSolverKernels, solverSetup2CL)
|
||||
{
|
||||
const char* additionalMacros = "";
|
||||
cl_int errNum = 0;
|
||||
|
||||
cl_program solverSetup2Prog = b3OpenCLUtils::compileCLProgramFromString(m_clContext, m_clDevice, solverSetup2CL, &errNum, additionalMacros, 0, true);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
|
||||
{
|
||||
cl_kernel k = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice, solverSetup2CL, "SetSortDataKernel", &errNum, solverSetup2Prog, additionalMacros);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
ASSERT_FALSE(k == 0);
|
||||
clReleaseKernel(k);
|
||||
}
|
||||
|
||||
{
|
||||
cl_kernel k = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice, solverSetup2CL, "SetDeterminismSortDataBodyA", &errNum, solverSetup2Prog, additionalMacros);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
ASSERT_FALSE(k == 0);
|
||||
clReleaseKernel(k);
|
||||
}
|
||||
|
||||
{
|
||||
cl_kernel k = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice, solverSetup2CL, "SetDeterminismSortDataBodyB", &errNum, solverSetup2Prog, additionalMacros);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
ASSERT_FALSE(k == 0);
|
||||
clReleaseKernel(k);
|
||||
}
|
||||
|
||||
{
|
||||
cl_kernel k = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice, solverSetup2CL, "SetDeterminismSortDataChildShapeA", &errNum, solverSetup2Prog, additionalMacros);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
ASSERT_FALSE(k == 0);
|
||||
clReleaseKernel(k);
|
||||
}
|
||||
|
||||
{
|
||||
cl_kernel k = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice, solverSetup2CL, "SetDeterminismSortDataChildShapeB", &errNum, solverSetup2Prog, additionalMacros);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
ASSERT_FALSE(k == 0);
|
||||
clReleaseKernel(k);
|
||||
}
|
||||
|
||||
{
|
||||
cl_kernel k = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice, solverSetup2CL, "ReorderContactKernel", &errNum, solverSetup2Prog, additionalMacros);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
ASSERT_FALSE(k == 0);
|
||||
clReleaseKernel(k);
|
||||
}
|
||||
|
||||
{
|
||||
cl_kernel k = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice, solverSetup2CL, "CopyConstraintKernel", &errNum, solverSetup2Prog, additionalMacros);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
ASSERT_FALSE(k == 0);
|
||||
clReleaseKernel(k);
|
||||
}
|
||||
|
||||
clReleaseProgram(solverSetup2Prog);
|
||||
}
|
||||
|
||||
TEST_F(CompileBullet3PgsContactSolverKernels, solveContactCL)
|
||||
{
|
||||
const char* additionalMacros = "";
|
||||
cl_int errNum = 0;
|
||||
|
||||
cl_program solveContactProg = b3OpenCLUtils::compileCLProgramFromString(m_clContext, m_clDevice, solveContactCL, &errNum, additionalMacros, 0, true);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
|
||||
{
|
||||
cl_kernel k = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice, solveContactCL, "BatchSolveKernelContact", &errNum, solveContactProg, additionalMacros);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
ASSERT_FALSE(k == 0);
|
||||
clReleaseKernel(k);
|
||||
}
|
||||
|
||||
{
|
||||
cl_kernel k = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice, solveContactCL, "solveSingleContactKernel", &errNum, solveContactProg, additionalMacros);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
ASSERT_FALSE(k == 0);
|
||||
clReleaseKernel(k);
|
||||
}
|
||||
|
||||
clReleaseProgram(solveContactProg);
|
||||
}
|
||||
|
||||
TEST_F(CompileBullet3PgsContactSolverKernels, batchingKernelsCL)
|
||||
{
|
||||
const char* additionalMacros = "";
|
||||
cl_int errNum = 0;
|
||||
|
||||
cl_program batchingProg = b3OpenCLUtils::compileCLProgramFromString(m_clContext, m_clDevice, batchingKernelsCL, &errNum, additionalMacros, 0, true);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
|
||||
{
|
||||
cl_kernel k = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice, batchingKernelsCL, "CreateBatches", &errNum, batchingProg, additionalMacros);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
ASSERT_FALSE(k == 0);
|
||||
clReleaseKernel(k);
|
||||
}
|
||||
|
||||
clReleaseProgram(batchingProg);
|
||||
}
|
||||
|
||||
TEST_F(CompileBullet3PgsContactSolverKernels, batchingKernelsNewCL)
|
||||
{
|
||||
const char* additionalMacros = "";
|
||||
cl_int errNum = 0;
|
||||
|
||||
cl_program batchingNewProg = b3OpenCLUtils::compileCLProgramFromString(m_clContext, m_clDevice, batchingKernelsNewCL, &errNum, additionalMacros, 0, true);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
|
||||
{
|
||||
cl_kernel k = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice, batchingKernelsNewCL, "CreateBatchesNew", &errNum, batchingNewProg, additionalMacros);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
ASSERT_FALSE(k == 0);
|
||||
clReleaseKernel(k);
|
||||
}
|
||||
clReleaseProgram(batchingNewProg);
|
||||
}
|
||||
|
||||
}; // namespace
|
||||
|
|
@ -0,0 +1,115 @@
|
|||
|
||||
#include <gtest/gtest.h>
|
||||
#include "Bullet3Common/b3Logging.h"
|
||||
#include "Bullet3Common/b3CommandLineArgs.h"
|
||||
#include "Bullet3OpenCL/Initialize/b3OpenCLUtils.h"
|
||||
|
||||
#include "Bullet3OpenCL/RigidBody/kernels/jointSolver.h"
|
||||
|
||||
extern int gArgc;
|
||||
extern char** gArgv;
|
||||
|
||||
namespace
|
||||
{
|
||||
struct testCompileBullet3PgsJointSolverKernels : public ::testing::Test
|
||||
{
|
||||
cl_context m_clContext;
|
||||
cl_device_id m_clDevice;
|
||||
cl_command_queue m_clQueue;
|
||||
char* m_clDeviceName;
|
||||
cl_platform_id m_platformId;
|
||||
|
||||
testCompileBullet3PgsJointSolverKernels()
|
||||
: m_clDeviceName(0),
|
||||
m_clContext(0),
|
||||
m_clDevice(0),
|
||||
m_clQueue(0),
|
||||
m_platformId(0)
|
||||
{
|
||||
// You can do set-up work for each test here.
|
||||
b3CommandLineArgs args(gArgc, gArgv);
|
||||
int preferredDeviceIndex = -1;
|
||||
int preferredPlatformIndex = -1;
|
||||
bool allowCpuOpenCL = false;
|
||||
|
||||
initCL();
|
||||
}
|
||||
|
||||
virtual ~testCompileBullet3PgsJointSolverKernels()
|
||||
{
|
||||
// You can do clean-up work that doesn't throw exceptions here.
|
||||
exitCL();
|
||||
}
|
||||
|
||||
// If the constructor and destructor are not enough for setting up
|
||||
// and cleaning up each test, you can define the following methods:
|
||||
|
||||
#include "initCL.h"
|
||||
|
||||
virtual void SetUp()
|
||||
{
|
||||
// Code here will be called immediately after the constructor (right
|
||||
// before each test).
|
||||
}
|
||||
|
||||
virtual void TearDown()
|
||||
{
|
||||
// Code here will be called immediately after each test (right
|
||||
// before the destructor).
|
||||
}
|
||||
};
|
||||
|
||||
TEST_F(testCompileBullet3PgsJointSolverKernels, solveConstraintRowsCL)
|
||||
{
|
||||
cl_int errNum = 0;
|
||||
|
||||
cl_program prog = b3OpenCLUtils::compileCLProgramFromString(m_clContext, m_clDevice, solveConstraintRowsCL, &errNum, "", 0, true);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
|
||||
{
|
||||
cl_kernel k = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice, solveConstraintRowsCL, "solveJointConstraintRows", &errNum, prog);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
ASSERT_FALSE(k == 0);
|
||||
clReleaseKernel(k);
|
||||
}
|
||||
|
||||
{
|
||||
cl_kernel k = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice, solveConstraintRowsCL, "initSolverBodies", &errNum, prog);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
ASSERT_FALSE(k == 0);
|
||||
clReleaseKernel(k);
|
||||
}
|
||||
{
|
||||
cl_kernel k = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice, solveConstraintRowsCL, "getInfo1Kernel", &errNum, prog);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
ASSERT_FALSE(k == 0);
|
||||
clReleaseKernel(k);
|
||||
}
|
||||
{
|
||||
cl_kernel k = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice, solveConstraintRowsCL, "initBatchConstraintsKernel", &errNum, prog);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
ASSERT_FALSE(k == 0);
|
||||
clReleaseKernel(k);
|
||||
}
|
||||
{
|
||||
cl_kernel k = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice, solveConstraintRowsCL, "getInfo2Kernel", &errNum, prog);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
ASSERT_FALSE(k == 0);
|
||||
clReleaseKernel(k);
|
||||
}
|
||||
{
|
||||
cl_kernel k = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice, solveConstraintRowsCL, "writeBackVelocitiesKernel", &errNum, prog);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
ASSERT_FALSE(k == 0);
|
||||
clReleaseKernel(k);
|
||||
}
|
||||
{
|
||||
cl_kernel k = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice, solveConstraintRowsCL, "breakViolatedConstraintsKernel", &errNum, prog);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
ASSERT_FALSE(k == 0);
|
||||
clReleaseKernel(k);
|
||||
}
|
||||
|
||||
clReleaseProgram(prog);
|
||||
}
|
||||
}; // namespace
|
||||
|
|
@ -0,0 +1,76 @@
|
|||
|
||||
#include <gtest/gtest.h>
|
||||
#include "Bullet3Common/b3Logging.h"
|
||||
#include "Bullet3Common/b3CommandLineArgs.h"
|
||||
#include "Bullet3OpenCL/Initialize/b3OpenCLUtils.h"
|
||||
|
||||
#include "Bullet3OpenCL/Raycast/kernels/rayCastKernels.h"
|
||||
|
||||
extern int gArgc;
|
||||
extern char** gArgv;
|
||||
|
||||
namespace
|
||||
{
|
||||
struct CompileBullet3RaycastKernels : public ::testing::Test
|
||||
{
|
||||
cl_context m_clContext;
|
||||
cl_device_id m_clDevice;
|
||||
cl_command_queue m_clQueue;
|
||||
char* m_clDeviceName;
|
||||
cl_platform_id m_platformId;
|
||||
|
||||
CompileBullet3RaycastKernels()
|
||||
: m_clDeviceName(0),
|
||||
m_clContext(0),
|
||||
m_clDevice(0),
|
||||
m_clQueue(0),
|
||||
m_platformId(0)
|
||||
{
|
||||
// You can do set-up work for each test here.
|
||||
b3CommandLineArgs args(gArgc, gArgv);
|
||||
int preferredDeviceIndex = -1;
|
||||
int preferredPlatformIndex = -1;
|
||||
bool allowCpuOpenCL = false;
|
||||
|
||||
initCL();
|
||||
}
|
||||
|
||||
virtual ~CompileBullet3RaycastKernels()
|
||||
{
|
||||
// You can do clean-up work that doesn't throw exceptions here.
|
||||
exitCL();
|
||||
}
|
||||
|
||||
// If the constructor and destructor are not enough for setting up
|
||||
// and cleaning up each test, you can define the following methods:
|
||||
|
||||
#include "initCL.h"
|
||||
|
||||
virtual void SetUp()
|
||||
{
|
||||
// Code here will be called immediately after the constructor (right
|
||||
// before each test).
|
||||
}
|
||||
|
||||
virtual void TearDown()
|
||||
{
|
||||
// Code here will be called immediately after each test (right
|
||||
// before the destructor).
|
||||
}
|
||||
};
|
||||
|
||||
TEST_F(CompileBullet3RaycastKernels, sapFastKernels)
|
||||
{
|
||||
cl_int errNum = 0;
|
||||
cl_program prog = b3OpenCLUtils::compileCLProgramFromString(m_clContext, m_clDevice, rayCastKernelCL, &errNum, "", 0, true);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
|
||||
{
|
||||
cl_kernel k = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice, rayCastKernelCL, "rayCastKernel", &errNum, prog);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
clReleaseKernel(k);
|
||||
}
|
||||
|
||||
clReleaseProgram(prog);
|
||||
}
|
||||
}; // namespace
|
||||
|
|
@ -0,0 +1,432 @@
|
|||
|
||||
#include <gtest/gtest.h>
|
||||
#include "Bullet3Common/b3Logging.h"
|
||||
|
||||
#include "Bullet3OpenCL/Initialize/b3OpenCLUtils.h"
|
||||
#include "Bullet3Common/b3CommandLineArgs.h"
|
||||
#include "Bullet3OpenCL/NarrowphaseCollision/kernels/satKernels.h"
|
||||
#include "Bullet3OpenCL/NarrowphaseCollision/kernels/mprKernels.h"
|
||||
#include "Bullet3OpenCL/NarrowphaseCollision/kernels/satConcaveKernels.h"
|
||||
#include "Bullet3OpenCL/NarrowphaseCollision/kernels/satClipHullContacts.h"
|
||||
#include "Bullet3OpenCL/NarrowphaseCollision/kernels/bvhTraversal.h"
|
||||
#include "Bullet3OpenCL/NarrowphaseCollision/kernels/primitiveContacts.h"
|
||||
|
||||
#ifdef B3_USE_ZLIB
|
||||
#include "minizip/unzip.h"
|
||||
#endif
|
||||
|
||||
#include "Bullet3OpenCL/ParallelPrimitives/b3LauncherCL.h"
|
||||
extern int gArgc;
|
||||
extern char** gArgv;
|
||||
|
||||
namespace
|
||||
{
|
||||
struct ExecuteBullet3NarrowphaseKernels : public ::testing::Test
|
||||
{
|
||||
cl_context m_clContext;
|
||||
cl_device_id m_clDevice;
|
||||
cl_command_queue m_clQueue;
|
||||
char* m_clDeviceName;
|
||||
cl_platform_id m_platformId;
|
||||
|
||||
ExecuteBullet3NarrowphaseKernels()
|
||||
: m_clDeviceName(0),
|
||||
m_clContext(0),
|
||||
m_clDevice(0),
|
||||
m_clQueue(0),
|
||||
m_platformId(0)
|
||||
{
|
||||
// You can do set-up work for each test here.
|
||||
|
||||
initCL();
|
||||
}
|
||||
|
||||
virtual ~ExecuteBullet3NarrowphaseKernels()
|
||||
{
|
||||
// You can do clean-up work that doesn't throw exceptions here.
|
||||
exitCL();
|
||||
}
|
||||
|
||||
// If the constructor and destructor are not enough for setting up
|
||||
// and cleaning up each test, you can define the following methods:
|
||||
|
||||
#include "initCL.h"
|
||||
|
||||
virtual void SetUp()
|
||||
{
|
||||
// Code here will be called immediately after the constructor (right
|
||||
// before each test).
|
||||
}
|
||||
|
||||
virtual void TearDown()
|
||||
{
|
||||
// Code here will be called immediately after each test (right
|
||||
// before the destructor).
|
||||
}
|
||||
};
|
||||
|
||||
#if 0
|
||||
TEST_F(ExecuteBullet3NarrowphaseKernels,satKernelsCL)
|
||||
{
|
||||
cl_int errNum=0;
|
||||
|
||||
char flags[1024]={0};
|
||||
|
||||
cl_program satProg = b3OpenCLUtils::compileCLProgramFromString(m_clContext,m_clDevice,satKernelsCL,&errNum,flags,0,true);
|
||||
ASSERT_EQ(CL_SUCCESS,errNum);
|
||||
|
||||
|
||||
{
|
||||
cl_kernel m_findSeparatingAxisKernel = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice,satKernelsCL, "findSeparatingAxisKernel",&errNum,satProg );
|
||||
ASSERT_EQ(CL_SUCCESS,errNum);
|
||||
clReleaseKernel(m_findSeparatingAxisKernel );
|
||||
}
|
||||
|
||||
{
|
||||
cl_kernel m_findSeparatingAxisVertexFaceKernel = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice,satKernelsCL, "findSeparatingAxisVertexFaceKernel",&errNum,satProg );
|
||||
ASSERT_EQ(CL_SUCCESS,errNum);
|
||||
clReleaseKernel(m_findSeparatingAxisVertexFaceKernel);
|
||||
}
|
||||
|
||||
{
|
||||
cl_kernel m_findSeparatingAxisEdgeEdgeKernel = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice,satKernelsCL, "findSeparatingAxisEdgeEdgeKernel",&errNum,satProg );
|
||||
ASSERT_EQ(CL_SUCCESS,errNum);
|
||||
clReleaseKernel(m_findSeparatingAxisEdgeEdgeKernel);
|
||||
}
|
||||
|
||||
{
|
||||
cl_kernel m_findConcaveSeparatingAxisKernel = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice,satKernelsCL, "findConcaveSeparatingAxisKernel",&errNum,satProg );
|
||||
ASSERT_EQ(CL_SUCCESS,errNum);
|
||||
clReleaseKernel(m_findConcaveSeparatingAxisKernel );
|
||||
}
|
||||
|
||||
|
||||
{
|
||||
cl_kernel m_findCompoundPairsKernel = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice,satKernelsCL, "findCompoundPairsKernel",&errNum,satProg );
|
||||
ASSERT_EQ(CL_SUCCESS,errNum);
|
||||
clReleaseKernel(m_findCompoundPairsKernel);
|
||||
}
|
||||
|
||||
{
|
||||
cl_kernel m_processCompoundPairsKernel = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice,satKernelsCL, "processCompoundPairsKernel",&errNum,satProg );
|
||||
ASSERT_EQ(CL_SUCCESS,errNum);
|
||||
clReleaseKernel(m_processCompoundPairsKernel);
|
||||
}
|
||||
|
||||
clReleaseProgram(satProg);
|
||||
|
||||
}
|
||||
|
||||
TEST_F(ExecuteBullet3NarrowphaseKernels,satConcaveKernelsCL)
|
||||
{
|
||||
cl_int errNum=0;
|
||||
|
||||
char flags[1024]={0};
|
||||
|
||||
cl_program satConcaveProg = b3OpenCLUtils::compileCLProgramFromString(m_clContext,m_clDevice,satConcaveKernelsCL,&errNum,flags,0,true);
|
||||
ASSERT_EQ(CL_SUCCESS,errNum);
|
||||
|
||||
{
|
||||
cl_kernel m_findConcaveSeparatingAxisVertexFaceKernel = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice,satConcaveKernelsCL, "findConcaveSeparatingAxisVertexFaceKernel",&errNum,satConcaveProg );
|
||||
ASSERT_EQ(CL_SUCCESS,errNum);
|
||||
clReleaseKernel(m_findConcaveSeparatingAxisVertexFaceKernel);
|
||||
}
|
||||
|
||||
{
|
||||
cl_kernel m_findConcaveSeparatingAxisEdgeEdgeKernel = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice,satConcaveKernelsCL, "findConcaveSeparatingAxisEdgeEdgeKernel",&errNum,satConcaveProg );
|
||||
ASSERT_EQ(CL_SUCCESS,errNum);
|
||||
clReleaseKernel(m_findConcaveSeparatingAxisEdgeEdgeKernel);
|
||||
}
|
||||
|
||||
clReleaseProgram(satConcaveProg);
|
||||
}
|
||||
|
||||
|
||||
TEST_F(ExecuteBullet3NarrowphaseKernels,satClipKernelsCL)
|
||||
{
|
||||
|
||||
char flags[1024]={0};
|
||||
cl_int errNum=0;
|
||||
//#ifdef CL_PLATFORM_INTEL
|
||||
// sprintf(flags,"-g -s \"%s\"","C:/develop/bullet3_experiments2/opencl/gpu_narrowphase/kernels/satClipHullContacts.cl");
|
||||
//#endif
|
||||
|
||||
cl_program satClipContactsProg = b3OpenCLUtils::compileCLProgramFromString(m_clContext,m_clDevice,satClipKernelsCL,&errNum,flags,0,true);
|
||||
ASSERT_EQ(CL_SUCCESS,errNum);
|
||||
|
||||
{
|
||||
cl_kernel m_clipHullHullKernel = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice,satClipKernelsCL, "clipHullHullKernel",&errNum,satClipContactsProg);
|
||||
ASSERT_EQ(CL_SUCCESS,errNum);
|
||||
clReleaseKernel(m_clipHullHullKernel);
|
||||
}
|
||||
|
||||
{
|
||||
cl_kernel m_clipCompoundsHullHullKernel = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice,satClipKernelsCL, "clipCompoundsHullHullKernel",&errNum,satClipContactsProg);
|
||||
ASSERT_EQ(CL_SUCCESS,errNum);
|
||||
clReleaseKernel(m_clipCompoundsHullHullKernel);
|
||||
}
|
||||
|
||||
{
|
||||
cl_kernel k = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice,satClipKernelsCL, "findClippingFacesKernel",&errNum,satClipContactsProg);
|
||||
ASSERT_EQ(CL_SUCCESS,errNum);
|
||||
clReleaseKernel(k);
|
||||
}
|
||||
|
||||
{
|
||||
cl_kernel k = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice,satClipKernelsCL, "clipFacesAndFindContactsKernel",&errNum,satClipContactsProg);
|
||||
ASSERT_EQ(CL_SUCCESS,errNum);
|
||||
clReleaseKernel(k);
|
||||
}
|
||||
|
||||
{
|
||||
cl_kernel k = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice,satClipKernelsCL, "clipHullHullConcaveConvexKernel",&errNum,satClipContactsProg);
|
||||
ASSERT_EQ(CL_SUCCESS,errNum);
|
||||
clReleaseKernel(k);
|
||||
}
|
||||
|
||||
|
||||
{
|
||||
cl_kernel k = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice,satClipKernelsCL,
|
||||
"newContactReductionKernel",&errNum,satClipContactsProg);
|
||||
ASSERT_EQ(CL_SUCCESS,errNum);
|
||||
clReleaseKernel(k);
|
||||
}
|
||||
|
||||
clReleaseProgram(satClipContactsProg);
|
||||
}
|
||||
|
||||
|
||||
TEST_F(ExecuteBullet3NarrowphaseKernels,bvhTraversalKernels)
|
||||
{
|
||||
|
||||
|
||||
cl_int errNum=0;
|
||||
cl_program bvhTraversalProg = b3OpenCLUtils::compileCLProgramFromString(m_clContext,m_clDevice,bvhTraversalKernelCL,&errNum,"",0,true);
|
||||
ASSERT_EQ(CL_SUCCESS,errNum);
|
||||
|
||||
{
|
||||
cl_kernel k = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice,bvhTraversalKernelCL, "bvhTraversalKernel",&errNum,bvhTraversalProg,"");
|
||||
ASSERT_EQ(CL_SUCCESS,errNum);
|
||||
clReleaseKernel(k);
|
||||
}
|
||||
clReleaseProgram(bvhTraversalProg);
|
||||
}
|
||||
|
||||
TEST_F(ExecuteBullet3NarrowphaseKernels,primitiveContactsKernelsCL)
|
||||
{
|
||||
cl_int errNum=0;
|
||||
cl_program primitiveContactsProg = b3OpenCLUtils::compileCLProgramFromString(m_clContext,m_clDevice,primitiveContactsKernelsCL,&errNum,"",0,true);
|
||||
ASSERT_EQ(CL_SUCCESS,errNum);
|
||||
|
||||
|
||||
{
|
||||
cl_kernel k = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice,primitiveContactsKernelsCL, "primitiveContactsKernel",&errNum,primitiveContactsProg,"");
|
||||
ASSERT_EQ(CL_SUCCESS,errNum);
|
||||
clReleaseKernel(k);
|
||||
}
|
||||
|
||||
{
|
||||
cl_kernel k = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice,primitiveContactsKernelsCL, "findConcaveSphereContactsKernel",&errNum,primitiveContactsProg );
|
||||
ASSERT_EQ(CL_SUCCESS,errNum);
|
||||
clReleaseKernel(k);
|
||||
}
|
||||
|
||||
{
|
||||
cl_kernel k = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice,primitiveContactsKernelsCL, "processCompoundPairsPrimitivesKernel",&errNum,primitiveContactsProg,"");
|
||||
ASSERT_EQ(CL_SUCCESS,errNum);
|
||||
clReleaseKernel(k);
|
||||
}
|
||||
|
||||
clReleaseProgram(primitiveContactsProg);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
unsigned char* openFile(const char* fileName, int* sizeInBytesPtr)
|
||||
{
|
||||
*sizeInBytesPtr = 0;
|
||||
|
||||
unsigned char* buffer = 0;
|
||||
const char* prefix[] = {"./", "./data/", "../data/", "../../data/", "../../../data/", "../../../../data/"};
|
||||
int numPrefixes = sizeof(prefix) / sizeof(const char*);
|
||||
char relativeFileName[1024];
|
||||
|
||||
#ifdef B3_USE_ZLIB
|
||||
|
||||
{
|
||||
FILE* f = 0;
|
||||
int result = 0;
|
||||
|
||||
for (int i = 0; !f && i < numPrefixes; i++)
|
||||
{
|
||||
sprintf(relativeFileName, "%s%s", prefix[i], "unittest_data.zip");
|
||||
f = fopen(relativeFileName, "rb");
|
||||
}
|
||||
if (f)
|
||||
{
|
||||
fclose(f);
|
||||
|
||||
unzFile zipfile = unzOpen(relativeFileName);
|
||||
if (zipfile == NULL)
|
||||
{
|
||||
printf("%s: not found\n", relativeFileName);
|
||||
}
|
||||
|
||||
// Get info about the zip file
|
||||
unz_global_info global_info;
|
||||
result = unzGetGlobalInfo(zipfile, &global_info);
|
||||
if (result != UNZ_OK)
|
||||
{
|
||||
b3Printf("could not read file global info\n");
|
||||
unzClose(zipfile);
|
||||
}
|
||||
else
|
||||
{
|
||||
result = unzLocateFile(zipfile, fileName, 0);
|
||||
if (result == UNZ_OK)
|
||||
{
|
||||
unz_file_info info;
|
||||
result = unzGetCurrentFileInfo(zipfile, &info, NULL, 0, NULL, 0, NULL, 0);
|
||||
if (result != UNZ_OK)
|
||||
{
|
||||
b3Printf("unzGetCurrentFileInfo() != UNZ_OK (%d)\n", result);
|
||||
}
|
||||
else
|
||||
{
|
||||
result = unzOpenCurrentFile(zipfile);
|
||||
if (result == UNZ_OK)
|
||||
{
|
||||
buffer = (unsigned char*)malloc(info.uncompressed_size);
|
||||
result = unzReadCurrentFile(zipfile, buffer, info.uncompressed_size);
|
||||
if (result < 0)
|
||||
{
|
||||
free(buffer);
|
||||
buffer = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
*sizeInBytesPtr = info.uncompressed_size;
|
||||
}
|
||||
unzCloseCurrentFile(zipfile);
|
||||
}
|
||||
else
|
||||
{
|
||||
b3Printf("cannot open file %s!\n", fileName);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
b3Printf("cannot find file %s\n", fileName);
|
||||
}
|
||||
unzClose(zipfile);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif //B3_USE_ZLIB
|
||||
if (!buffer)
|
||||
{
|
||||
FILE* f = 0;
|
||||
int result = 0;
|
||||
|
||||
for (int i = 0; !f && i < numPrefixes; i++)
|
||||
{
|
||||
sprintf(relativeFileName, "%s%s", prefix[i], fileName);
|
||||
f = fopen(relativeFileName, "rb");
|
||||
}
|
||||
//first try from data.zip, otherwise directly load the file from disk
|
||||
|
||||
if (f)
|
||||
{
|
||||
int sizeInBytes = 0;
|
||||
if (fseek(f, 0, SEEK_END) || (sizeInBytes = ftell(f)) == EOF || fseek(f, 0, SEEK_SET))
|
||||
{
|
||||
b3Printf("error, cannot get file size\n");
|
||||
}
|
||||
|
||||
buffer = (unsigned char*)malloc(sizeInBytes);
|
||||
int actualRead = fread(buffer, sizeInBytes, 1, f);
|
||||
if (actualRead != 1)
|
||||
{
|
||||
free(buffer);
|
||||
buffer = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
*sizeInBytesPtr = sizeInBytes;
|
||||
}
|
||||
fclose(f);
|
||||
}
|
||||
}
|
||||
|
||||
return buffer;
|
||||
}
|
||||
|
||||
void testLauncher(const char* fileName2, b3LauncherCL& launcher, cl_context ctx)
|
||||
{
|
||||
int sizeInBytes = 0;
|
||||
|
||||
unsigned char* buf = openFile(fileName2, &sizeInBytes);
|
||||
ASSERT_FALSE(buf == NULL);
|
||||
if (buf)
|
||||
{
|
||||
int serializedBytes = launcher.deserializeArgs(buf, sizeInBytes, ctx);
|
||||
int num = *(int*)&buf[serializedBytes];
|
||||
|
||||
launcher.launch1D(num);
|
||||
|
||||
free(buf);
|
||||
//this clFinish is for testing on errors
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(ExecuteBullet3NarrowphaseKernels, mprKernelsCL)
|
||||
{
|
||||
cl_int errNum = 0;
|
||||
const char* srcConcave = satConcaveKernelsCL;
|
||||
char flags[1024] = {0};
|
||||
cl_program mprProg = b3OpenCLUtils::compileCLProgramFromString(m_clContext, m_clDevice, mprKernelsCL, &errNum, flags, 0, true);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
|
||||
{
|
||||
cl_kernel k = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice, mprKernelsCL, "mprPenetrationKernel", &errNum, mprProg);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
|
||||
if (1)
|
||||
{
|
||||
const char* fileNames[] = {"mprPenetrationKernel60.bin", "mprPenetrationKernel61.bin", "mprPenetrationKernel70.bin", "mprPenetrationKernel128.bin"};
|
||||
int results[] = {0, 1, 46, 98};
|
||||
|
||||
int numTests = sizeof(fileNames) / sizeof(const char*);
|
||||
for (int i = 0; i < numTests; i++)
|
||||
{
|
||||
b3LauncherCL launcher(m_clQueue, k, fileNames[i]);
|
||||
testLauncher(fileNames[i], launcher, m_clContext);
|
||||
clFinish(m_clQueue);
|
||||
ASSERT_EQ(launcher.getNumArguments(), 11);
|
||||
|
||||
b3KernelArgData data = launcher.getArgument(8);
|
||||
ASSERT_TRUE(data.m_isBuffer);
|
||||
b3OpenCLArray<int> totalContactsOut(this->m_clContext, this->m_clQueue);
|
||||
totalContactsOut.setFromOpenCLBuffer(data.m_clBuffer, 1);
|
||||
int numContacts = totalContactsOut.at(0);
|
||||
ASSERT_EQ(results[i], numContacts);
|
||||
}
|
||||
//printf("numContacts = %d\n",numContacts);
|
||||
|
||||
//nContacts = m_totalContactsOut.at(0);
|
||||
}
|
||||
|
||||
clReleaseKernel(k);
|
||||
}
|
||||
|
||||
{
|
||||
cl_kernel k = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice, mprKernelsCL, "findSeparatingAxisUnitSphereKernel", &errNum, mprProg);
|
||||
ASSERT_EQ(CL_SUCCESS, errNum);
|
||||
clReleaseKernel(k);
|
||||
}
|
||||
|
||||
clReleaseProgram(mprProg);
|
||||
}
|
||||
|
||||
}; // namespace
|
||||
Loading…
Add table
Add a link
Reference in a new issue