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