testCompileBullet3JacobiContactSolverKernels.cpp 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. #include <gtest/gtest.h>
  2. #include "Bullet3Common/b3Logging.h"
  3. #include "Bullet3Common/b3CommandLineArgs.h"
  4. #include "Bullet3OpenCL/Initialize/b3OpenCLUtils.h"
  5. #include "Bullet3OpenCL/RigidBody/kernels/solverUtils.h"
  6. extern int gArgc;
  7. extern char** gArgv;
  8. namespace
  9. {
  10. struct CompileBullet3JacobiContactSolverKernels : public ::testing::Test
  11. {
  12. cl_context m_clContext;
  13. cl_device_id m_clDevice;
  14. cl_command_queue m_clQueue;
  15. char* m_clDeviceName;
  16. cl_platform_id m_platformId;
  17. CompileBullet3JacobiContactSolverKernels()
  18. :m_clDeviceName(0),
  19. m_clContext(0),
  20. m_clDevice(0),
  21. m_clQueue(0),
  22. m_platformId(0)
  23. {
  24. // You can do set-up work for each test here.
  25. b3CommandLineArgs args(gArgc,gArgv);
  26. int preferredDeviceIndex=-1;
  27. int preferredPlatformIndex = -1;
  28. bool allowCpuOpenCL = false;
  29. initCL();
  30. }
  31. virtual ~CompileBullet3JacobiContactSolverKernels()
  32. {
  33. // You can do clean-up work that doesn't throw exceptions here.
  34. exitCL();
  35. }
  36. // If the constructor and destructor are not enough for setting up
  37. // and cleaning up each test, you can define the following methods:
  38. #include "initCL.h"
  39. virtual void SetUp()
  40. {
  41. // Code here will be called immediately after the constructor (right
  42. // before each test).
  43. }
  44. virtual void TearDown()
  45. {
  46. // Code here will be called immediately after each test (right
  47. // before the destructor).
  48. }
  49. };
  50. TEST_F(CompileBullet3JacobiContactSolverKernels,jacobiContactKernels)
  51. {
  52. cl_int errNum=0;
  53. const char* additionalMacros="";
  54. cl_program solverUtilsProg= b3OpenCLUtils::compileCLProgramFromString( m_clContext, m_clDevice, solverUtilsCL, &errNum,additionalMacros, 0,true);
  55. ASSERT_EQ(CL_SUCCESS,errNum);
  56. {
  57. cl_kernel k = b3OpenCLUtils::compileCLKernelFromString( m_clContext, m_clDevice, solverUtilsCL, "CountBodiesKernel", &errNum, solverUtilsProg,additionalMacros );
  58. ASSERT_EQ(CL_SUCCESS,errNum);
  59. ASSERT_FALSE(k==0);
  60. clReleaseKernel(k);
  61. }
  62. {
  63. cl_kernel k = b3OpenCLUtils::compileCLKernelFromString( m_clContext, m_clDevice, solverUtilsCL, "ContactToConstraintSplitKernel", &errNum, solverUtilsProg,additionalMacros );
  64. ASSERT_EQ(CL_SUCCESS,errNum);
  65. ASSERT_FALSE(k==0);
  66. clReleaseKernel(k);
  67. }
  68. {
  69. cl_kernel k = b3OpenCLUtils::compileCLKernelFromString( m_clContext, m_clDevice, solverUtilsCL, "ClearVelocitiesKernel", &errNum, solverUtilsProg,additionalMacros );
  70. ASSERT_EQ(CL_SUCCESS,errNum);
  71. ASSERT_FALSE(k==0);
  72. clReleaseKernel(k);
  73. }
  74. {
  75. cl_kernel k = b3OpenCLUtils::compileCLKernelFromString( m_clContext, m_clDevice, solverUtilsCL, "AverageVelocitiesKernel", &errNum, solverUtilsProg,additionalMacros );
  76. ASSERT_EQ(CL_SUCCESS,errNum);
  77. ASSERT_FALSE(k==0);
  78. clReleaseKernel(k);
  79. }
  80. {
  81. cl_kernel k = b3OpenCLUtils::compileCLKernelFromString( m_clContext, m_clDevice, solverUtilsCL, "UpdateBodyVelocitiesKernel", &errNum, solverUtilsProg,additionalMacros );
  82. ASSERT_EQ(CL_SUCCESS,errNum);
  83. ASSERT_FALSE(k==0);
  84. clReleaseKernel(k);
  85. }
  86. {
  87. cl_kernel k = b3OpenCLUtils::compileCLKernelFromString( m_clContext, m_clDevice, solverUtilsCL, "SolveContactJacobiKernel", &errNum, solverUtilsProg,additionalMacros );
  88. ASSERT_EQ(CL_SUCCESS,errNum);
  89. ASSERT_FALSE(k==0);
  90. clReleaseKernel(k);
  91. }
  92. {
  93. cl_kernel k = b3OpenCLUtils::compileCLKernelFromString( m_clContext, m_clDevice, solverUtilsCL, "SolveFrictionJacobiKernel", &errNum, solverUtilsProg,additionalMacros );
  94. ASSERT_EQ(CL_SUCCESS,errNum);
  95. ASSERT_FALSE(k==0);
  96. clReleaseKernel(k);
  97. }
  98. clReleaseProgram(solverUtilsProg);
  99. }
  100. };