testCompileBullet3BroadphaseKernels.cpp 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. #include <gtest/gtest.h>
  2. #include "Bullet3Common/b3Logging.h"
  3. #include "Bullet3Common/b3CommandLineArgs.h"
  4. #include "Bullet3OpenCL/Initialize/b3OpenCLUtils.h"
  5. #include "Bullet3OpenCL/BroadphaseCollision/kernels/sapKernels.h"
  6. #include "Bullet3OpenCL/BroadphaseCollision/kernels/gridBroadphaseKernels.h"
  7. extern int gArgc;
  8. extern char** gArgv;
  9. namespace
  10. {
  11. struct CompileBullet3BroadphaseKernels : public ::testing::Test
  12. {
  13. cl_context m_clContext;
  14. cl_device_id m_clDevice;
  15. cl_command_queue m_clQueue;
  16. char* m_clDeviceName;
  17. cl_platform_id m_platformId;
  18. CompileBullet3BroadphaseKernels()
  19. :m_clDeviceName(0),
  20. m_clContext(0),
  21. m_clDevice(0),
  22. m_clQueue(0),
  23. m_platformId(0)
  24. {
  25. // You can do set-up work for each test here.
  26. b3CommandLineArgs args(gArgc,gArgv);
  27. int preferredDeviceIndex=-1;
  28. int preferredPlatformIndex = -1;
  29. bool allowCpuOpenCL = false;
  30. initCL();
  31. }
  32. virtual ~CompileBullet3BroadphaseKernels()
  33. {
  34. // You can do clean-up work that doesn't throw exceptions here.
  35. exitCL();
  36. }
  37. // If the constructor and destructor are not enough for setting up
  38. // and cleaning up each test, you can define the following methods:
  39. #include "initCL.h"
  40. virtual void SetUp()
  41. {
  42. // Code here will be called immediately after the constructor (right
  43. // before each test).
  44. }
  45. virtual void TearDown()
  46. {
  47. // Code here will be called immediately after each test (right
  48. // before the destructor).
  49. }
  50. };
  51. TEST_F(CompileBullet3BroadphaseKernels,sapKernels)
  52. {
  53. cl_int errNum=0;
  54. cl_program sapProg = b3OpenCLUtils::compileCLProgramFromString(m_clContext,m_clDevice,sapCL,&errNum,"",0,true);
  55. {
  56. ASSERT_EQ(CL_SUCCESS,errNum );
  57. cl_kernel copyAabbsKernel= b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice,sapCL, "copyAabbsKernel",&errNum,sapProg );
  58. ASSERT_EQ(CL_SUCCESS,errNum);
  59. ASSERT_FALSE(copyAabbsKernel==0);
  60. clReleaseKernel(copyAabbsKernel);
  61. }
  62. {
  63. cl_kernel sap2Kernel = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice,sapCL, "computePairsKernelTwoArrays",&errNum,sapProg );
  64. ASSERT_EQ(CL_SUCCESS,errNum);
  65. ASSERT_FALSE(sap2Kernel==0);
  66. clReleaseKernel(sap2Kernel);
  67. }
  68. {
  69. cl_kernel sapKernelBruteForce = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice,sapCL, "computePairsKernelBruteForce",&errNum,sapProg );
  70. ASSERT_EQ(CL_SUCCESS,errNum);
  71. ASSERT_FALSE(sapKernelBruteForce==0);
  72. clReleaseKernel(sapKernelBruteForce);
  73. }
  74. {
  75. cl_kernel sapKernelOriginal = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice,sapCL, "computePairsKernelOriginal",&errNum,sapProg );
  76. ASSERT_EQ(CL_SUCCESS,errNum);
  77. ASSERT_FALSE(sapKernelOriginal==0);
  78. clReleaseKernel(sapKernelOriginal);
  79. }
  80. {
  81. cl_kernel sapKernelBarrier = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice,sapCL, "computePairsKernelBarrier",&errNum,sapProg );
  82. ASSERT_EQ(CL_SUCCESS,errNum);
  83. ASSERT_FALSE(sapKernelBarrier==0);
  84. clReleaseKernel(sapKernelBarrier);
  85. }
  86. {
  87. cl_kernel sapKernelLocalShared = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice,sapCL, "computePairsKernelLocalSharedMemory",&errNum,sapProg );
  88. ASSERT_EQ(CL_SUCCESS,errNum);
  89. ASSERT_FALSE(sapKernelLocalShared==0);
  90. clReleaseKernel(sapKernelLocalShared);
  91. }
  92. {
  93. cl_kernel prepareSumVarianceKernel = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice,sapCL, "prepareSumVarianceKernel",&errNum,sapProg );
  94. ASSERT_EQ(CL_SUCCESS,errNum);
  95. ASSERT_FALSE(prepareSumVarianceKernel==0);
  96. clReleaseKernel(prepareSumVarianceKernel);
  97. }
  98. {
  99. cl_kernel k = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice,sapCL, "flipFloatKernel",&errNum,sapProg );
  100. ASSERT_EQ(CL_SUCCESS,errNum);
  101. ASSERT_FALSE(k==0);
  102. clReleaseKernel(k);
  103. }
  104. {
  105. cl_kernel k = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice,sapCL, "scatterKernel",&errNum,sapProg );
  106. ASSERT_EQ(CL_SUCCESS,errNum);
  107. ASSERT_FALSE(k==0);
  108. clReleaseKernel(k);
  109. }
  110. clReleaseProgram(sapProg);
  111. };
  112. TEST_F(CompileBullet3BroadphaseKernels,gridBroadphaseKernels)
  113. {
  114. cl_int errNum=0;
  115. cl_program gridProg = b3OpenCLUtils::compileCLProgramFromString(m_clContext,m_clDevice,gridBroadphaseCL,&errNum,"",0,true);
  116. ASSERT_EQ(CL_SUCCESS,errNum);
  117. {
  118. cl_kernel k = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice,gridBroadphaseCL, "kCalcHashAABB",&errNum,gridProg);
  119. ASSERT_EQ(CL_SUCCESS,errNum);
  120. clReleaseKernel(k);
  121. }
  122. {
  123. cl_kernel k = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice,gridBroadphaseCL, "kClearCellStart",&errNum,gridProg);
  124. ASSERT_EQ(CL_SUCCESS,errNum);
  125. clReleaseKernel(k);
  126. }
  127. {
  128. cl_kernel k = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice,gridBroadphaseCL, "kFindCellStart",&errNum,gridProg);
  129. ASSERT_EQ(CL_SUCCESS,errNum);
  130. clReleaseKernel(k);
  131. }
  132. {
  133. cl_kernel k = b3OpenCLUtils::compileCLKernelFromString(m_clContext, m_clDevice,gridBroadphaseCL, "kFindOverlappingPairs",&errNum,gridProg);
  134. ASSERT_EQ(CL_SUCCESS,errNum);
  135. clReleaseKernel(k);
  136. }
  137. clReleaseProgram(gridProg);
  138. }
  139. };