@@ -375,16 +375,6 @@ template <int Dims> bool range_size_fits_in_size_t(const range<Dims> &r) {
375375 return true ;
376376}
377377
378- template <typename KernelNameType>
379- std::vector<kernel_param_desc_t > getKernelParamDescs () {
380- std::vector<kernel_param_desc_t > Result;
381- int NumParams = getKernelNumParams<KernelNameType>();
382- Result.reserve (NumParams);
383- for (int I = 0 ; I < NumParams; ++I) {
384- Result.push_back (getKernelParamDesc<KernelNameType>(I));
385- }
386- return Result;
387- }
388378} // namespace detail
389379
390380// / Command group handler class.
@@ -476,16 +466,23 @@ class __SYCL_EXPORT handler {
476466 " a single kernel or explicit memory operation." );
477467 }
478468
479- // / Extracts and prepares kernel arguments from the lambda using information
480- // / from the built-ins or integration header.
469+ #ifndef __INTEL_PREVIEW_BREAKING_CHANGES
470+ // TODO: Those functions are not used anymore, remove it in the next
471+ // ABI-breaking window.
481472 void extractArgsAndReqsFromLambda (
482473 char *LambdaPtr,
483474 const std::vector<detail::kernel_param_desc_t > &ParamDescs, bool IsESIMD);
484- // TODO Unused, remove during ABI breaking window
485475 void
486476 extractArgsAndReqsFromLambda (char *LambdaPtr, size_t KernelArgsNum,
487477 const detail::kernel_param_desc_t *KernelArgs,
488478 bool IsESIMD);
479+ #endif
480+ // / Extracts and prepares kernel arguments from the lambda using information
481+ // / from the built-ins or integration header.
482+ void
483+ extractArgsAndReqsFromLambda (char *LambdaPtr,
484+ const detail::kernel_param_desc_t &ParamDesc,
485+ bool IsESIMD, size_t Index, size_t &IndexShift);
489486
490487 // / Extracts and prepares kernel arguments set via set_arg(s).
491488 void extractArgsAndReqs ();
@@ -752,10 +749,18 @@ class __SYCL_EXPORT handler {
752749 // header, so don't perform things that require it.
753750 if (KernelHasName) {
754751 // TODO support ESIMD in no-integration-header case too.
752+
753+ size_t NumParams = detail::getKernelNumParams<KernelName>();
755754 clearArgs ();
756- extractArgsAndReqsFromLambda (MHostKernel->getPtr (),
757- detail::getKernelParamDescs<KernelName>(),
758- detail::isKernelESIMD<KernelName>());
755+ reseveArgs (NumParams);
756+
757+ char *LambdaPtr = MHostKernel->getPtr ();
758+
759+ for (size_t I = 0 , IndexShift = 0 ; I < NumParams; ++I) {
760+ const detail::kernel_param_desc_t param = detail::getKernelParamDesc<KernelName>(I);
761+ extractArgsAndReqsFromLambda (LambdaPtr, param, detail::isKernelESIMD<KernelName>(), I, IndexShift);
762+ }
763+
759764 MKernelName = detail::getKernelName<KernelName>();
760765 } else {
761766 // In case w/o the integration header it is necessary to process
@@ -3816,6 +3821,7 @@ class __SYCL_EXPORT handler {
38163821 void addArg (detail::kernel_param_kind_t ArgKind, void *Req, int AccessTarget,
38173822 int ArgIndex);
38183823 void clearArgs ();
3824+ void reseveArgs (int NumParams);
38193825 void setArgsToAssociatedAccessors ();
38203826
38213827 bool HasAssociatedAccessor (detail::AccessorImplHost *Req,
0 commit comments