@@ -22,6 +22,21 @@ bool isGTPinInitialized = false;
2222gtpin::ocl::gtpin_events_t GTPinCallbacks = {0 };
2323} // namespace NEO
2424
25+ // Do not change this code, needed to avoid compiler optimization that breaks GTPin_Init
26+ // Beginning
27+ void passCreateBuffer (BufferAllocateFPTR src, BufferAllocateFPTR &dst) {
28+ dst = src;
29+ }
30+ void passFreeBuffer (BufferDeallocateFPTR src, BufferDeallocateFPTR &dst) {
31+ dst = src;
32+ }
33+ void passMapBuffer (BufferMapFPTR src, BufferMapFPTR &dst) {
34+ dst = src;
35+ }
36+ void passUnMapBuffer (BufferUnMapFPTR src, BufferUnMapFPTR &dst) {
37+ dst = src;
38+ }
39+ // End of WA
2540GTPIN_DI_STATUS GTPin_Init (gtpin::ocl::gtpin_events_t *pGtpinEvents, driver_services_t *pDriverServices,
2641 interface_version_t *pDriverVersion) {
2742 if (isGTPinInitialized) {
@@ -48,11 +63,18 @@ GTPIN_DI_STATUS GTPin_Init(gtpin::ocl::gtpin_events_t *pGtpinEvents, driver_serv
4863 return GTPIN_DI_ERROR_INVALID_ARGUMENT;
4964 }
5065
51- pDriverServices->bufferAllocate = NEO::gtpinCreateBuffer;
52- pDriverServices->bufferDeallocate = NEO::gtpinFreeBuffer;
53- pDriverServices->bufferMap = NEO::gtpinMapBuffer;
54- pDriverServices->bufferUnMap = NEO::gtpinUnmapBuffer;
66+ // Do not change this code, needed to avoid compiler optimization that breaks GTPin_Init
67+ // Beginning
68+ auto createBuffer = NEO::gtpinCreateBuffer;
69+ auto freeBuffer = NEO::gtpinFreeBuffer;
70+ auto mapBuffer = NEO::gtpinMapBuffer;
71+ auto unMapBuffer = NEO::gtpinUnmapBuffer;
5572
73+ passCreateBuffer (createBuffer, pDriverServices->bufferAllocate );
74+ passFreeBuffer (freeBuffer, pDriverServices->bufferDeallocate );
75+ passMapBuffer (mapBuffer, pDriverServices->bufferMap );
76+ passUnMapBuffer (unMapBuffer, pDriverServices->bufferUnMap );
77+ // End of WA
5678 GTPinCallbacks = *pGtpinEvents;
5779 isGTPinInitialized = true ;
5880
0 commit comments