@@ -175,11 +175,9 @@ static int MemoryMapCounter = MemoryMapCounterBase;
175
175
static constexpr int PauseWaitOnIdx = KernelLaunchCounterBase + 1 ;
176
176
177
177
// Mock redifinitions
178
- static pi_result redefinedKernelGetGroupInfo (pi_kernel kernel, pi_device device,
179
- pi_kernel_group_info param_name,
180
- size_t param_value_size,
181
- void *param_value,
182
- size_t *param_value_size_ret) {
178
+ static pi_result redefinedKernelGetGroupInfoAfter (
179
+ pi_kernel kernel, pi_device device, pi_kernel_group_info param_name,
180
+ size_t param_value_size, void *param_value, size_t *param_value_size_ret) {
183
181
if (param_name == PI_KERNEL_GROUP_INFO_COMPILE_WORK_GROUP_SIZE) {
184
182
if (param_value_size_ret) {
185
183
*param_value_size_ret = 3 * sizeof (size_t );
@@ -194,25 +192,23 @@ static pi_result redefinedKernelGetGroupInfo(pi_kernel kernel, pi_device device,
194
192
return PI_SUCCESS;
195
193
}
196
194
197
- static pi_result redefinedEnqueueKernelLaunch (pi_queue, pi_kernel, pi_uint32,
198
- const size_t *, const size_t * ,
199
- const size_t *LocalSize ,
200
- pi_uint32 N, const pi_event *Deps ,
201
- pi_event *RetEvent) {
202
- int *Ret = new int [ 1 ] ;
203
- *Ret = KernelLaunchCounter++;
195
+ static pi_result
196
+ redefinedEnqueueKernelLaunchAfter (pi_queue, pi_kernel, pi_uint32 ,
197
+ const size_t *, const size_t *,
198
+ const size_t *LocalSize, pi_uint32 NDeps ,
199
+ const pi_event *Deps, pi_event *RetEvent) {
200
+ static pi_event UserKernelEvent = *RetEvent ;
201
+ int Val = KernelLaunchCounter++;
204
202
// This output here is to reduce amount of time requried to debug/reproduce a
205
203
// failing test upon feature break
206
- printf (" Enqueued %i\n " , *Ret );
204
+ printf (" Enqueued %i\n " , Val );
207
205
208
- if (PauseWaitOnIdx == *Ret ) {
206
+ if (PauseWaitOnIdx == Val ) {
209
207
// It should be copier kernel. Check if it depends on user's one.
210
- EXPECT_EQ (N, 1U );
211
- int EventIdx = reinterpret_cast <int *>(Deps[0 ])[0 ];
212
- EXPECT_EQ (EventIdx, 0 );
208
+ EXPECT_EQ (NDeps, 1U );
209
+ EXPECT_EQ (Deps[0 ], UserKernelEvent);
213
210
}
214
211
215
- *RetEvent = reinterpret_cast <pi_event>(Ret);
216
212
return PI_SUCCESS;
217
213
}
218
214
@@ -243,56 +239,30 @@ static pi_result redefinedEventsWaitNegative(pi_uint32 num_events,
243
239
return PI_SUCCESS;
244
240
}
245
241
246
- static pi_result
247
- redefinedMemBufferCreate (pi_context context, pi_mem_flags flags, size_t size,
248
- void *host_ptr, pi_mem *ret_mem,
249
- const pi_mem_properties *properties = nullptr ) {
250
- static size_t MemAddrCounter = 1 ;
251
- *ret_mem = (pi_mem)MemAddrCounter++;
252
- return PI_SUCCESS;
253
- }
254
-
255
- static pi_result redefinedMemRelease (pi_mem mem) { return PI_SUCCESS; }
256
-
257
- static pi_result redefinedKernelSetArg (pi_kernel kernel, pi_uint32 arg_index,
258
- size_t arg_size, const void *arg_value) {
259
- return PI_SUCCESS;
260
- }
261
-
262
- static pi_result redefinedEnqueueMemBufferMap (
242
+ static pi_result redefinedEnqueueMemBufferMapAfter (
263
243
pi_queue command_queue, pi_mem buffer, pi_bool blocking_map,
264
244
pi_map_flags map_flags, size_t offset, size_t size,
265
245
pi_uint32 num_events_in_wait_list, const pi_event *event_wait_list,
266
246
pi_event *RetEvent, void **RetMap) {
267
- int *Ret = new int [1 ];
268
- *Ret = MemoryMapCounter++;
247
+ MemoryMapCounter++;
269
248
// This output here is to reduce amount of time requried to debug/reproduce a
270
249
// failing test upon feature break
271
- printf (" Memory map %i\n " , *Ret);
272
- *RetEvent = reinterpret_cast <pi_event>(Ret);
250
+ printf (" Memory map %i\n " , MemoryMapCounter);
273
251
274
252
*RetMap = (void *)&ExpectedToOutput;
275
253
276
254
return PI_SUCCESS;
277
255
}
278
256
279
- static pi_result redefinedExtKernelSetArgMemObj (pi_kernel kernel,
280
- pi_uint32 arg_index,
281
- const pi_mem *arg_value) {
282
- return PI_SUCCESS;
283
- }
284
-
285
257
static void setupMock (sycl::unittest::PiMock &Mock) {
286
258
using namespace sycl ::detail;
287
- Mock.redefine <PiApiKind::piKernelGetGroupInfo>(redefinedKernelGetGroupInfo);
288
- Mock.redefine <PiApiKind::piEnqueueKernelLaunch>(redefinedEnqueueKernelLaunch);
289
- Mock.redefine <PiApiKind::piMemBufferCreate>(redefinedMemBufferCreate);
290
- Mock.redefine <PiApiKind::piMemRelease>(redefinedMemRelease);
291
- Mock.redefine <PiApiKind::piKernelSetArg>(redefinedKernelSetArg);
292
- Mock.redefine <PiApiKind::piEnqueueMemBufferMap>(redefinedEnqueueMemBufferMap);
293
- Mock.redefine <PiApiKind::piEventsWait>(redefinedEventsWaitPositive);
294
- Mock.redefine <PiApiKind::piextKernelSetArgMemObj>(
295
- redefinedExtKernelSetArgMemObj);
259
+ Mock.redefineAfter <PiApiKind::piKernelGetGroupInfo>(
260
+ redefinedKernelGetGroupInfoAfter);
261
+ Mock.redefineAfter <PiApiKind::piEnqueueKernelLaunch>(
262
+ redefinedEnqueueKernelLaunchAfter);
263
+ Mock.redefineAfter <PiApiKind::piEnqueueMemBufferMap>(
264
+ redefinedEnqueueMemBufferMapAfter);
265
+ Mock.redefineBefore <PiApiKind::piEventsWait>(redefinedEventsWaitPositive);
296
266
}
297
267
298
268
namespace TestInteropKernel {
@@ -317,12 +287,15 @@ static pi_result redefinedKernelGetInfo(pi_kernel Kernel,
317
287
}
318
288
319
289
if (PI_KERNEL_INFO_PROGRAM == ParamName) {
320
- cl_program X = (cl_program)1 ;
290
+ pi_program PIProgram = nullptr ;
291
+ pi_result Res = mock_piProgramCreate (/* pi_context=*/ 0x0 , /* *il*/ nullptr ,
292
+ /* length=*/ 0 , &PIProgram);
293
+ assert (PI_SUCCESS == Res);
321
294
322
295
if (ParamValue)
323
- memcpy (ParamValue, &X , sizeof (X ));
296
+ memcpy (ParamValue, &PIProgram , sizeof (PIProgram ));
324
297
if (ParamValueSizeRet)
325
- *ParamValueSizeRet = sizeof (X );
298
+ *ParamValueSizeRet = sizeof (PIProgram );
326
299
327
300
return PI_SUCCESS;
328
301
}
@@ -350,13 +323,11 @@ static pi_result redefinedEnqueueKernelLaunch(pi_queue, pi_kernel, pi_uint32,
350
323
const size_t *LocalSize,
351
324
pi_uint32 N, const pi_event *Deps,
352
325
pi_event *RetEvent) {
353
- int *Ret = new int [1 ];
354
- *Ret = KernelLaunchCounter++;
326
+ int Val = KernelLaunchCounter++;
355
327
// This output here is to reduce amount of time requried to debug/reproduce a
356
328
// failing test upon feature break
357
- printf (" Enqueued %i\n " , *Ret );
329
+ printf (" Enqueued %i\n " , Val );
358
330
359
- *RetEvent = reinterpret_cast <pi_event>(Ret);
360
331
return PI_SUCCESS;
361
332
}
362
333
@@ -426,21 +397,18 @@ static void setupMockForInterop(sycl::unittest::PiMock &Mock,
426
397
TestInteropKernel::Device = &Dev;
427
398
TestInteropKernel::Context = &Ctx;
428
399
429
- Mock.redefine <PiApiKind::piKernelGetGroupInfo>(redefinedKernelGetGroupInfo);
430
- Mock.redefine <PiApiKind::piEnqueueKernelLaunch>(
400
+ Mock.redefineAfter <PiApiKind::piKernelGetGroupInfo>(
401
+ redefinedKernelGetGroupInfoAfter);
402
+ Mock.redefineBefore <PiApiKind::piEnqueueKernelLaunch>(
431
403
TestInteropKernel::redefinedEnqueueKernelLaunch);
432
- Mock.redefine <PiApiKind::piMemBufferCreate>(redefinedMemBufferCreate);
433
- Mock.redefine <PiApiKind::piMemRelease>(redefinedMemRelease);
434
- Mock.redefine <PiApiKind::piKernelSetArg>(redefinedKernelSetArg);
435
- Mock.redefine <PiApiKind::piEnqueueMemBufferMap>(redefinedEnqueueMemBufferMap);
436
- Mock.redefine <PiApiKind::piEventsWait>(redefinedEventsWaitNegative);
437
- Mock.redefine <PiApiKind::piextKernelSetArgMemObj>(
438
- redefinedExtKernelSetArgMemObj);
439
- Mock.redefine <PiApiKind::piKernelGetInfo>(
404
+ Mock.redefineAfter <PiApiKind::piEnqueueMemBufferMap>(
405
+ redefinedEnqueueMemBufferMapAfter);
406
+ Mock.redefineBefore <PiApiKind::piEventsWait>(redefinedEventsWaitNegative);
407
+ Mock.redefineBefore <PiApiKind::piKernelGetInfo>(
440
408
TestInteropKernel::redefinedKernelGetInfo);
441
- Mock.redefine <PiApiKind::piProgramGetInfo>(
409
+ Mock.redefineBefore <PiApiKind::piProgramGetInfo>(
442
410
TestInteropKernel::redefinedProgramGetInfo);
443
- Mock.redefine <PiApiKind::piProgramGetBuildInfo>(
411
+ Mock.redefineBefore <PiApiKind::piProgramGetBuildInfo>(
444
412
TestInteropKernel::redefinedProgramGetBuildInfo);
445
413
}
446
414
@@ -581,10 +549,15 @@ TEST(Assert, TestInteropKernelNegative) {
581
549
582
550
sycl::queue Queue{Ctx, Dev};
583
551
584
- cl_kernel CLKernel = (cl_kernel)(0x01 );
552
+ pi_kernel PIKernel = nullptr ;
553
+
554
+ pi_result Res = mock_piKernelCreate (
555
+ /* pi_program=*/ 0x0 , /* kernel_name=*/ " dummy_kernel" , &PIKernel);
556
+ assert (PI_SUCCESS == Res);
557
+
585
558
// TODO use make_kernel. This requires a fix in backend.cpp to get plugin
586
559
// from context instead of free getPlugin to alllow for mocking of its methods
587
- sycl::kernel KInterop (CLKernel , Ctx);
560
+ sycl::kernel KInterop ((cl_kernel)PIKernel , Ctx);
588
561
589
562
Queue.submit ([&](sycl::handler &H) { H.single_task (KInterop); });
590
563
0 commit comments