@@ -175,11 +175,9 @@ static int MemoryMapCounter = MemoryMapCounterBase;
175175static constexpr int PauseWaitOnIdx = KernelLaunchCounterBase + 1 ;
176176
177177// 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) {
183181 if (param_name == PI_KERNEL_GROUP_INFO_COMPILE_WORK_GROUP_SIZE) {
184182 if (param_value_size_ret) {
185183 *param_value_size_ret = 3 * sizeof (size_t );
@@ -194,25 +192,23 @@ static pi_result redefinedKernelGetGroupInfo(pi_kernel kernel, pi_device device,
194192 return PI_SUCCESS;
195193}
196194
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++;
204202 // This output here is to reduce amount of time requried to debug/reproduce a
205203 // failing test upon feature break
206- printf (" Enqueued %i\n " , *Ret );
204+ printf (" Enqueued %i\n " , Val );
207205
208- if (PauseWaitOnIdx == *Ret ) {
206+ if (PauseWaitOnIdx == Val ) {
209207 // 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);
213210 }
214211
215- *RetEvent = reinterpret_cast <pi_event>(Ret);
216212 return PI_SUCCESS;
217213}
218214
@@ -243,56 +239,30 @@ static pi_result redefinedEventsWaitNegative(pi_uint32 num_events,
243239 return PI_SUCCESS;
244240}
245241
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 (
263243 pi_queue command_queue, pi_mem buffer, pi_bool blocking_map,
264244 pi_map_flags map_flags, size_t offset, size_t size,
265245 pi_uint32 num_events_in_wait_list, const pi_event *event_wait_list,
266246 pi_event *RetEvent, void **RetMap) {
267- int *Ret = new int [1 ];
268- *Ret = MemoryMapCounter++;
247+ MemoryMapCounter++;
269248 // This output here is to reduce amount of time requried to debug/reproduce a
270249 // 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);
273251
274252 *RetMap = (void *)&ExpectedToOutput;
275253
276254 return PI_SUCCESS;
277255}
278256
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-
285257static void setupMock (sycl::unittest::PiMock &Mock) {
286258 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);
296266}
297267
298268namespace TestInteropKernel {
@@ -317,12 +287,15 @@ static pi_result redefinedKernelGetInfo(pi_kernel Kernel,
317287 }
318288
319289 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);
321294
322295 if (ParamValue)
323- memcpy (ParamValue, &X , sizeof (X ));
296+ memcpy (ParamValue, &PIProgram , sizeof (PIProgram ));
324297 if (ParamValueSizeRet)
325- *ParamValueSizeRet = sizeof (X );
298+ *ParamValueSizeRet = sizeof (PIProgram );
326299
327300 return PI_SUCCESS;
328301 }
@@ -350,13 +323,11 @@ static pi_result redefinedEnqueueKernelLaunch(pi_queue, pi_kernel, pi_uint32,
350323 const size_t *LocalSize,
351324 pi_uint32 N, const pi_event *Deps,
352325 pi_event *RetEvent) {
353- int *Ret = new int [1 ];
354- *Ret = KernelLaunchCounter++;
326+ int Val = KernelLaunchCounter++;
355327 // This output here is to reduce amount of time requried to debug/reproduce a
356328 // failing test upon feature break
357- printf (" Enqueued %i\n " , *Ret );
329+ printf (" Enqueued %i\n " , Val );
358330
359- *RetEvent = reinterpret_cast <pi_event>(Ret);
360331 return PI_SUCCESS;
361332}
362333
@@ -426,21 +397,18 @@ static void setupMockForInterop(sycl::unittest::PiMock &Mock,
426397 TestInteropKernel::Device = &Dev;
427398 TestInteropKernel::Context = &Ctx;
428399
429- Mock.redefine <PiApiKind::piKernelGetGroupInfo>(redefinedKernelGetGroupInfo);
430- Mock.redefine <PiApiKind::piEnqueueKernelLaunch>(
400+ Mock.redefineAfter <PiApiKind::piKernelGetGroupInfo>(
401+ redefinedKernelGetGroupInfoAfter);
402+ Mock.redefineBefore <PiApiKind::piEnqueueKernelLaunch>(
431403 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>(
440408 TestInteropKernel::redefinedKernelGetInfo);
441- Mock.redefine <PiApiKind::piProgramGetInfo>(
409+ Mock.redefineBefore <PiApiKind::piProgramGetInfo>(
442410 TestInteropKernel::redefinedProgramGetInfo);
443- Mock.redefine <PiApiKind::piProgramGetBuildInfo>(
411+ Mock.redefineBefore <PiApiKind::piProgramGetBuildInfo>(
444412 TestInteropKernel::redefinedProgramGetBuildInfo);
445413}
446414
@@ -581,10 +549,15 @@ TEST(Assert, TestInteropKernelNegative) {
581549
582550 sycl::queue Queue{Ctx, Dev};
583551
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+
585558 // TODO use make_kernel. This requires a fix in backend.cpp to get plugin
586559 // 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);
588561
589562 Queue.submit ([&](sycl::handler &H) { H.single_task (KInterop); });
590563
0 commit comments