testCompileBullet3PgsContactSolverKernels.cpp 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238
  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/solverSetup.h"
  6. #include "Bullet3OpenCL/RigidBody/kernels/solverSetup2.h"
  7. #include "Bullet3OpenCL/RigidBody/kernels/solveContact.h"
  8. #include "Bullet3OpenCL/RigidBody/kernels/solveFriction.h"
  9. #include "Bullet3OpenCL/RigidBody/kernels/batchingKernels.h"
  10. #include "Bullet3OpenCL/RigidBody/kernels/batchingKernelsNew.h"
  11. extern int gArgc;
  12. extern char** gArgv;
  13. namespace
  14. {
  15. struct CompileBullet3PgsContactSolverKernels : public ::testing::Test
  16. {
  17. cl_context m_clContext;
  18. cl_device_id m_clDevice;
  19. cl_command_queue m_clQueue;
  20. char* m_clDeviceName;
  21. cl_platform_id m_platformId;
  22. CompileBullet3PgsContactSolverKernels()
  23. :m_clDeviceName(0),
  24. m_clContext(0),
  25. m_clDevice(0),
  26. m_clQueue(0),
  27. m_platformId(0)
  28. {
  29. // You can do set-up work for each test here.
  30. b3CommandLineArgs args(gArgc,gArgv);
  31. int preferredDeviceIndex=-1;
  32. int preferredPlatformIndex = -1;
  33. bool allowCpuOpenCL = false;
  34. initCL();
  35. }
  36. virtual ~CompileBullet3PgsContactSolverKernels()
  37. {
  38. // You can do clean-up work that doesn't throw exceptions here.
  39. exitCL();
  40. }
  41. // If the constructor and destructor are not enough for setting up
  42. // and cleaning up each test, you can define the following methods:
  43. #include "initCL.h"
  44. virtual void SetUp()
  45. {
  46. // Code here will be called immediately after the constructor (right
  47. // before each test).
  48. }
  49. virtual void TearDown()
  50. {
  51. // Code here will be called immediately after each test (right
  52. // before the destructor).
  53. }
  54. };
  55. TEST_F(CompileBullet3PgsContactSolverKernels,solveFrictionCL)
  56. {
  57. const char* additionalMacros="";
  58. cl_int errNum=0;
  59. cl_program solveFrictionProg= b3OpenCLUtils::compileCLProgramFromString( m_clContext, m_clDevice, solveFrictionCL, &errNum,additionalMacros, 0,true);
  60. ASSERT_EQ(CL_SUCCESS,errNum);
  61. {
  62. cl_kernel k = b3OpenCLUtils::compileCLKernelFromString( m_clContext, m_clDevice, solveFrictionCL, "BatchSolveKernelFriction", &errNum, solveFrictionProg,additionalMacros );
  63. ASSERT_EQ(CL_SUCCESS,errNum);
  64. ASSERT_FALSE(k==0);
  65. clReleaseKernel(k);
  66. }
  67. {
  68. cl_kernel k =b3OpenCLUtils::compileCLKernelFromString( m_clContext, m_clDevice, solveFrictionCL, "solveSingleFrictionKernel", &errNum, solveFrictionProg,additionalMacros );
  69. ASSERT_EQ(CL_SUCCESS,errNum);
  70. ASSERT_FALSE(k==0);
  71. clReleaseKernel(k);
  72. }
  73. clReleaseProgram(solveFrictionProg);
  74. }
  75. TEST_F(CompileBullet3PgsContactSolverKernels,solverSetupCL)
  76. {
  77. const char* additionalMacros="";
  78. cl_int errNum=0;
  79. cl_program solverSetupProg= b3OpenCLUtils::compileCLProgramFromString( m_clContext, m_clDevice, solverSetupCL, &errNum,additionalMacros, 0,true);
  80. ASSERT_EQ(CL_SUCCESS,errNum);
  81. {
  82. cl_kernel k = b3OpenCLUtils::compileCLKernelFromString( m_clContext, m_clDevice, solverSetupCL, "ContactToConstraintKernel", &errNum, solverSetupProg,additionalMacros );
  83. ASSERT_EQ(CL_SUCCESS,errNum);
  84. ASSERT_FALSE(k==0);
  85. clReleaseKernel(k);
  86. }
  87. clReleaseProgram(solverSetupProg);
  88. }
  89. TEST_F(CompileBullet3PgsContactSolverKernels,solverSetup2CL)
  90. {
  91. const char* additionalMacros="";
  92. cl_int errNum=0;
  93. cl_program solverSetup2Prog= b3OpenCLUtils::compileCLProgramFromString( m_clContext, m_clDevice, solverSetup2CL, &errNum,additionalMacros, 0,true);
  94. ASSERT_EQ(CL_SUCCESS,errNum);
  95. {
  96. cl_kernel k = b3OpenCLUtils::compileCLKernelFromString( m_clContext, m_clDevice, solverSetup2CL, "SetSortDataKernel", &errNum, solverSetup2Prog,additionalMacros );
  97. ASSERT_EQ(CL_SUCCESS,errNum);
  98. ASSERT_FALSE(k==0);
  99. clReleaseKernel(k);
  100. }
  101. {
  102. cl_kernel k = b3OpenCLUtils::compileCLKernelFromString( m_clContext, m_clDevice, solverSetup2CL, "SetDeterminismSortDataBodyA", &errNum, solverSetup2Prog,additionalMacros );
  103. ASSERT_EQ(CL_SUCCESS,errNum);
  104. ASSERT_FALSE(k==0);
  105. clReleaseKernel(k);
  106. }
  107. {
  108. cl_kernel k = b3OpenCLUtils::compileCLKernelFromString( m_clContext, m_clDevice, solverSetup2CL, "SetDeterminismSortDataBodyB", &errNum, solverSetup2Prog,additionalMacros );
  109. ASSERT_EQ(CL_SUCCESS,errNum);
  110. ASSERT_FALSE(k==0);
  111. clReleaseKernel(k);
  112. }
  113. {
  114. cl_kernel k = b3OpenCLUtils::compileCLKernelFromString( m_clContext, m_clDevice, solverSetup2CL, "SetDeterminismSortDataChildShapeA", &errNum, solverSetup2Prog,additionalMacros );
  115. ASSERT_EQ(CL_SUCCESS,errNum);
  116. ASSERT_FALSE(k==0);
  117. clReleaseKernel(k);
  118. }
  119. {
  120. cl_kernel k = b3OpenCLUtils::compileCLKernelFromString( m_clContext, m_clDevice, solverSetup2CL, "SetDeterminismSortDataChildShapeB", &errNum, solverSetup2Prog,additionalMacros );
  121. ASSERT_EQ(CL_SUCCESS,errNum);
  122. ASSERT_FALSE(k==0);
  123. clReleaseKernel(k);
  124. }
  125. {
  126. cl_kernel k = b3OpenCLUtils::compileCLKernelFromString( m_clContext, m_clDevice, solverSetup2CL, "ReorderContactKernel", &errNum, solverSetup2Prog,additionalMacros );
  127. ASSERT_EQ(CL_SUCCESS,errNum);
  128. ASSERT_FALSE(k==0);
  129. clReleaseKernel(k);
  130. }
  131. {
  132. cl_kernel k = b3OpenCLUtils::compileCLKernelFromString( m_clContext, m_clDevice, solverSetup2CL, "CopyConstraintKernel", &errNum, solverSetup2Prog,additionalMacros );
  133. ASSERT_EQ(CL_SUCCESS,errNum);
  134. ASSERT_FALSE(k==0);
  135. clReleaseKernel(k);
  136. }
  137. clReleaseProgram(solverSetup2Prog);
  138. }
  139. TEST_F(CompileBullet3PgsContactSolverKernels,solveContactCL)
  140. {
  141. const char* additionalMacros="";
  142. cl_int errNum=0;
  143. cl_program solveContactProg= b3OpenCLUtils::compileCLProgramFromString( m_clContext, m_clDevice, solveContactCL, &errNum,additionalMacros, 0,true);
  144. ASSERT_EQ(CL_SUCCESS,errNum);
  145. {
  146. cl_kernel k = b3OpenCLUtils::compileCLKernelFromString( m_clContext, m_clDevice, solveContactCL, "BatchSolveKernelContact", &errNum, solveContactProg,additionalMacros );
  147. ASSERT_EQ(CL_SUCCESS,errNum);
  148. ASSERT_FALSE(k==0);
  149. clReleaseKernel(k);
  150. }
  151. {
  152. cl_kernel k = b3OpenCLUtils::compileCLKernelFromString( m_clContext, m_clDevice, solveContactCL, "solveSingleContactKernel", &errNum, solveContactProg,additionalMacros );
  153. ASSERT_EQ(CL_SUCCESS,errNum);
  154. ASSERT_FALSE(k==0);
  155. clReleaseKernel(k);
  156. }
  157. clReleaseProgram(solveContactProg);
  158. }
  159. TEST_F(CompileBullet3PgsContactSolverKernels,batchingKernelsCL)
  160. {
  161. const char* additionalMacros="";
  162. cl_int errNum=0;
  163. cl_program batchingProg = b3OpenCLUtils::compileCLProgramFromString( m_clContext, m_clDevice, batchingKernelsCL, &errNum,additionalMacros, 0,true);
  164. ASSERT_EQ(CL_SUCCESS,errNum);
  165. {
  166. cl_kernel k = b3OpenCLUtils::compileCLKernelFromString( m_clContext, m_clDevice, batchingKernelsCL, "CreateBatches", &errNum, batchingProg,additionalMacros );
  167. ASSERT_EQ(CL_SUCCESS,errNum);
  168. ASSERT_FALSE(k==0);
  169. clReleaseKernel(k);
  170. }
  171. clReleaseProgram(batchingProg);
  172. }
  173. TEST_F(CompileBullet3PgsContactSolverKernels,batchingKernelsNewCL)
  174. {
  175. const char* additionalMacros="";
  176. cl_int errNum=0;
  177. cl_program batchingNewProg = b3OpenCLUtils::compileCLProgramFromString( m_clContext, m_clDevice, batchingKernelsNewCL, &errNum,additionalMacros, 0,true);
  178. ASSERT_EQ(CL_SUCCESS,errNum);
  179. {
  180. cl_kernel k = b3OpenCLUtils::compileCLKernelFromString( m_clContext, m_clDevice, batchingKernelsNewCL, "CreateBatchesNew", &errNum, batchingNewProg,additionalMacros );
  181. ASSERT_EQ(CL_SUCCESS,errNum);
  182. ASSERT_FALSE(k==0);
  183. clReleaseKernel(k);
  184. }
  185. clReleaseProgram(batchingNewProg);
  186. }
  187. };