42
42
43
43
using namespace cl ::sycl;
44
44
45
- struct TestDPCTLSyclProgramInterface
45
+ struct TestDPCTLSyclKernelBundleInterface
46
46
: public ::testing::TestWithParam<const char *>
47
47
{
48
48
DPCTLSyclDeviceRef DRef = nullptr ;
49
49
DPCTLSyclContextRef CRef = nullptr ;
50
- DPCTLSyclQueueRef QRef = nullptr ;
51
50
DPCTLSyclKernelBundleRef KBRef = nullptr ;
52
51
std::ifstream spirvFile;
53
52
size_t spirvFileSize;
54
53
std::vector<char > spirvBuffer;
55
54
56
- TestDPCTLSyclProgramInterface ()
55
+ TestDPCTLSyclKernelBundleInterface ()
57
56
{
58
57
auto DS = DPCTLFilterSelector_Create (GetParam ());
59
58
DRef = DPCTLDevice_CreateFromSelector (DS);
60
59
DPCTLDeviceSelector_Delete (DS);
61
60
CRef = DPCTLDeviceMgr_GetCachedContext (DRef);
62
- QRef = DPCTLQueue_Create (CRef, DRef, nullptr , DPCTL_DEFAULT_PROPERTY);
63
61
64
62
if (DRef) {
65
63
spirvFile.open (" ./multi_kernel.spv" ,
@@ -82,18 +80,20 @@ struct TestDPCTLSyclProgramInterface
82
80
}
83
81
}
84
82
85
- ~TestDPCTLSyclProgramInterface ()
83
+ ~TestDPCTLSyclKernelBundleInterface ()
86
84
{
87
- if (DRef)
85
+ if (DRef) {
88
86
spirvFile.close ();
89
- DPCTLDevice_Delete (DRef);
90
- DPCTLQueue_Delete (QRef);
91
- DPCTLContext_Delete (CRef);
92
- DPCTLKernelBundle_Delete (KBRef);
87
+ DPCTLDevice_Delete (DRef);
88
+ }
89
+ if (CRef)
90
+ DPCTLContext_Delete (CRef);
91
+ if (KBRef)
92
+ DPCTLKernelBundle_Delete (KBRef);
93
93
}
94
94
};
95
95
96
- TEST_P (TestDPCTLSyclProgramInterface , ChkCreateFromSpirv)
96
+ TEST_P (TestDPCTLSyclKernelBundleInterface , ChkCreateFromSpirv)
97
97
{
98
98
99
99
ASSERT_TRUE (KBRef != nullptr );
@@ -102,25 +102,36 @@ TEST_P(TestDPCTLSyclProgramInterface, ChkCreateFromSpirv)
102
102
ASSERT_FALSE (DPCTLKernelBundle_HasKernel (KBRef, nullptr ));
103
103
}
104
104
105
- TEST_P (TestDPCTLSyclProgramInterface , ChkCreateFromSpirvNull)
105
+ TEST_P (TestDPCTLSyclKernelBundleInterface , ChkCreateFromSpirvNull)
106
106
{
107
107
DPCTLSyclContextRef Null_CRef = nullptr ;
108
108
DPCTLSyclDeviceRef Null_DRef = nullptr ;
109
109
const void *null_spirv = nullptr ;
110
110
DPCTLSyclKernelBundleRef KBRef = nullptr ;
111
+ // Null context
111
112
EXPECT_NO_FATAL_FAILURE (KBRef = DPCTLKernelBundle_CreateFromSpirv (
112
113
Null_CRef, Null_DRef, null_spirv, 0 , nullptr ));
113
114
ASSERT_TRUE (KBRef == nullptr );
115
+
116
+ // Null device
117
+ EXPECT_NO_FATAL_FAILURE (KBRef = DPCTLKernelBundle_CreateFromSpirv (
118
+ CRef, Null_DRef, null_spirv, 0 , nullptr ));
119
+ ASSERT_TRUE (KBRef == nullptr );
120
+
121
+ // Null IL
122
+ EXPECT_NO_FATAL_FAILURE (KBRef = DPCTLKernelBundle_CreateFromSpirv (
123
+ CRef, DRef, null_spirv, 0 , nullptr ));
124
+ ASSERT_TRUE (KBRef == nullptr );
114
125
}
115
126
116
- TEST_P (TestDPCTLSyclProgramInterface , ChkHasKernelNullProgram)
127
+ TEST_P (TestDPCTLSyclKernelBundleInterface , ChkHasKernelNullProgram)
117
128
{
118
129
119
130
DPCTLSyclKernelBundleRef NullRef = nullptr ;
120
131
ASSERT_FALSE (DPCTLKernelBundle_HasKernel (NullRef, " add" ));
121
132
}
122
133
123
- TEST_P (TestDPCTLSyclProgramInterface , ChkGetKernel)
134
+ TEST_P (TestDPCTLSyclKernelBundleInterface , ChkGetKernel)
124
135
{
125
136
auto AddKernel = DPCTLKernelBundle_GetKernel (KBRef, " add" );
126
137
auto AxpyKernel = DPCTLKernelBundle_GetKernel (KBRef, " axpy" );
@@ -134,7 +145,7 @@ TEST_P(TestDPCTLSyclProgramInterface, ChkGetKernel)
134
145
EXPECT_NO_FATAL_FAILURE (DPCTLKernel_Delete (NullKernel));
135
146
}
136
147
137
- TEST_P (TestDPCTLSyclProgramInterface , ChkGetKernelNullProgram)
148
+ TEST_P (TestDPCTLSyclKernelBundleInterface , ChkGetKernelNullProgram)
138
149
{
139
150
DPCTLSyclKernelBundleRef NullRef = nullptr ;
140
151
DPCTLSyclKernelRef KRef = nullptr ;
@@ -143,7 +154,7 @@ TEST_P(TestDPCTLSyclProgramInterface, ChkGetKernelNullProgram)
143
154
EXPECT_TRUE (KRef == nullptr );
144
155
}
145
156
146
- struct TestOCLProgramFromSource : public ::testing::Test
157
+ struct TestOCLKernelBundleFromSource : public ::testing::Test
147
158
{
148
159
const char *CLProgramStr = R"CLC(
149
160
kernel void add(global int* a, global int* b, global int* c) {
@@ -160,32 +171,32 @@ struct TestOCLProgramFromSource : public ::testing::Test
160
171
const char *CompileOpts = " -cl-fast-relaxed-math" ;
161
172
DPCTLSyclDeviceRef DRef = nullptr ;
162
173
DPCTLSyclContextRef CRef = nullptr ;
163
- DPCTLSyclQueueRef QRef = nullptr ;
164
174
DPCTLSyclKernelBundleRef KBRef = nullptr ;
165
175
166
- TestOCLProgramFromSource ()
176
+ TestOCLKernelBundleFromSource ()
167
177
{
168
178
auto DS = DPCTLFilterSelector_Create (" opencl:gpu" );
169
179
DRef = DPCTLDevice_CreateFromSelector (DS);
170
180
DPCTLDeviceSelector_Delete (DS);
171
181
CRef = DPCTLDeviceMgr_GetCachedContext (DRef);
172
- QRef = DPCTLQueue_Create (CRef, DRef, nullptr , DPCTL_DEFAULT_PROPERTY);
173
182
174
183
if (DRef)
175
184
KBRef = DPCTLKernelBundle_CreateFromOCLSource (
176
185
CRef, DRef, CLProgramStr, CompileOpts);
177
186
}
178
187
179
- ~TestOCLProgramFromSource ()
188
+ ~TestOCLKernelBundleFromSource ()
180
189
{
181
- DPCTLDevice_Delete (DRef);
182
- DPCTLQueue_Delete (QRef);
183
- DPCTLContext_Delete (CRef);
184
- DPCTLKernelBundle_Delete (KBRef);
190
+ if (DRef)
191
+ DPCTLDevice_Delete (DRef);
192
+ if (CRef)
193
+ DPCTLContext_Delete (CRef);
194
+ if (KBRef)
195
+ DPCTLKernelBundle_Delete (KBRef);
185
196
}
186
197
};
187
198
188
- TEST_F (TestOCLProgramFromSource , CheckCreateFromOCLSource)
199
+ TEST_F (TestOCLKernelBundleFromSource , CheckCreateFromOCLSource)
189
200
{
190
201
if (!DRef)
191
202
GTEST_SKIP_ (" Skipping as no OpenCL GPU device found.\n " );
@@ -195,7 +206,7 @@ TEST_F(TestOCLProgramFromSource, CheckCreateFromOCLSource)
195
206
ASSERT_TRUE (DPCTLKernelBundle_HasKernel (KBRef, " axpy" ));
196
207
}
197
208
198
- TEST_F (TestOCLProgramFromSource , CheckCreateFromOCLSourceNull)
209
+ TEST_F (TestOCLKernelBundleFromSource , CheckCreateFromOCLSourceNull)
199
210
{
200
211
const char *InvalidCLProgramStr = R"CLC(
201
212
kernel void invalid(global foo* a, global bar* b) {
@@ -211,9 +222,21 @@ TEST_F(TestOCLProgramFromSource, CheckCreateFromOCLSourceNull)
211
222
EXPECT_NO_FATAL_FAILURE (KBRef = DPCTLKernelBundle_CreateFromOCLSource (
212
223
CRef, DRef, InvalidCLProgramStr, CompileOpts););
213
224
ASSERT_TRUE (KBRef == nullptr );
225
+
226
+ DPCTLSyclContextRef Null_CRef = nullptr ;
227
+ EXPECT_NO_FATAL_FAILURE (
228
+ KBRef = DPCTLKernelBundle_CreateFromOCLSource (
229
+ Null_CRef, DRef, InvalidCLProgramStr, CompileOpts););
230
+ ASSERT_TRUE (KBRef == nullptr );
231
+
232
+ DPCTLSyclDeviceRef Null_DRef = nullptr ;
233
+ EXPECT_NO_FATAL_FAILURE (
234
+ KBRef = DPCTLKernelBundle_CreateFromOCLSource (
235
+ CRef, Null_DRef, InvalidCLProgramStr, CompileOpts););
236
+ ASSERT_TRUE (KBRef == nullptr );
214
237
}
215
238
216
- TEST_F (TestOCLProgramFromSource , CheckGetKernelOCLSource)
239
+ TEST_F (TestOCLKernelBundleFromSource , CheckGetKernelOCLSource)
217
240
{
218
241
if (!DRef)
219
242
GTEST_SKIP_ (" Skipping as no OpenCL GPU device found.\n " );
@@ -226,8 +249,8 @@ TEST_F(TestOCLProgramFromSource, CheckGetKernelOCLSource)
226
249
DPCTLKernel_Delete (AxpyKernel);
227
250
}
228
251
229
- INSTANTIATE_TEST_SUITE_P (ProgramCreationFromSpriv ,
230
- TestDPCTLSyclProgramInterface ,
252
+ INSTANTIATE_TEST_SUITE_P (KernelBundleCreationFromSpirv ,
253
+ TestDPCTLSyclKernelBundleInterface ,
231
254
::testing::Values (" opencl" ,
232
255
" opencl:gpu" ,
233
256
" opencl:cpu" ,
@@ -237,3 +260,70 @@ INSTANTIATE_TEST_SUITE_P(ProgramCreationFromSpriv,
237
260
" level_zero:gpu" ,
238
261
#endif
239
262
" opencl:cpu:0" ));
263
+
264
+ struct TestKernelBundleUnsupportedBackend : public ::testing::Test
265
+ {
266
+ DPCTLSyclDeviceRef DRef = nullptr ;
267
+ DPCTLSyclContextRef CRef = nullptr ;
268
+
269
+ TestKernelBundleUnsupportedBackend ()
270
+ {
271
+ auto DS = DPCTLFilterSelector_Create (" host:host" );
272
+ DRef = DPCTLDevice_CreateFromSelector (DS);
273
+ DPCTLDeviceSelector_Delete (DS);
274
+ if (DRef)
275
+ CRef = DPCTLDeviceMgr_GetCachedContext (DRef);
276
+ }
277
+
278
+ void SetUp ()
279
+ {
280
+ if (!DRef) {
281
+ std::string message = " Skipping as host device is not enabled." ;
282
+ GTEST_SKIP_ (message.c_str ());
283
+ }
284
+ }
285
+
286
+ ~TestKernelBundleUnsupportedBackend ()
287
+ {
288
+ if (DRef)
289
+ DPCTLDevice_Delete (DRef);
290
+ if (CRef)
291
+ DPCTLContext_Delete (CRef);
292
+ }
293
+ };
294
+
295
+ TEST_F (TestKernelBundleUnsupportedBackend, CheckCreateFromSource)
296
+ {
297
+ const char *src = R"CLC(
298
+ kernel void set(global int* a, int v) {
299
+ size_t index = get_global_id(0);
300
+ a[index] = v;
301
+ }
302
+ )CLC" ;
303
+ const char *opts = " " ;
304
+
305
+ DPCTLSyclKernelBundleRef KBRef = nullptr ;
306
+ EXPECT_NO_FATAL_FAILURE (
307
+ KBRef = DPCTLKernelBundle_CreateFromOCLSource (CRef, DRef, src, opts));
308
+ ASSERT_TRUE (KBRef == nullptr );
309
+ }
310
+
311
+ TEST_F (TestKernelBundleUnsupportedBackend, CheckCreateFromSpirv)
312
+ {
313
+ std::ifstream spirvFile;
314
+ size_t spirvFileSize;
315
+ std::vector<char > spirvBuffer;
316
+
317
+ spirvFile.open (" ./multi_kernel.spv" , std::ios::binary | std::ios::ate);
318
+ spirvFileSize = std::filesystem::file_size (" ./multi_kernel.spv" );
319
+ spirvBuffer.reserve (spirvFileSize);
320
+ spirvFile.seekg (0 , std::ios::beg);
321
+ spirvFile.read (spirvBuffer.data (), spirvFileSize);
322
+ spirvFile.close ();
323
+
324
+ DPCTLSyclKernelBundleRef KBRef = nullptr ;
325
+ EXPECT_NO_FATAL_FAILURE (
326
+ KBRef = DPCTLKernelBundle_CreateFromSpirv (
327
+ CRef, DRef, spirvBuffer.data (), spirvFileSize, nullptr ));
328
+ ASSERT_TRUE (KBRef == nullptr );
329
+ }
0 commit comments