@@ -1285,7 +1285,7 @@ class __SYCL_EXPORT handler {
12851285 using TransformedArgType = sycl::nd_item<Dims>;
12861286
12871287 wrap_kernel<WrapAs::parallel_for, KernelName, TransformedArgType, Dims>(
1288- KernelFunc, nullptr /* Kernel */ , Props, ExecutionRange);
1288+ KernelFunc, Props, ExecutionRange);
12891289 }
12901290
12911291 // / Defines and invokes a SYCL kernel function for the specified range.
@@ -1357,8 +1357,7 @@ class __SYCL_EXPORT handler {
13571357 sycl::detail::lambda_arg_type<KernelType, group<Dims>>;
13581358 wrap_kernel<WrapAs::parallel_for_work_group, KernelName, LambdaArgType,
13591359 Dims,
1360- /* SetNumWorkGroups=*/ true >(KernelFunc, nullptr /* Kernel*/ ,
1361- Props, NumWorkGroups);
1360+ /* SetNumWorkGroups=*/ true >(KernelFunc, Props, NumWorkGroups);
13621361 }
13631362
13641363 // / Hierarchical kernel invocation method of a kernel defined as a lambda
@@ -1385,7 +1384,7 @@ class __SYCL_EXPORT handler {
13851384 nd_range<Dims> ExecRange =
13861385 nd_range<Dims>(NumWorkGroups * WorkGroupSize, WorkGroupSize);
13871386 wrap_kernel<WrapAs::parallel_for_work_group, KernelName, LambdaArgType,
1388- Dims>(KernelFunc, nullptr /* Kernel */ , Props, ExecRange);
1387+ Dims>(KernelFunc, Props, ExecRange);
13891388 }
13901389
13911390#ifdef SYCL_LANGUAGE_VERSION
@@ -1601,30 +1600,65 @@ class __SYCL_EXPORT handler {
16011600 WrapAs WrapAsVal, typename KernelName, typename ElementType = void ,
16021601 int Dims = 1 , bool SetNumWorkGroups = false ,
16031602 typename PropertiesT = ext::oneapi::experimental::empty_properties_t ,
1604- typename KernelType, typename MaybeKernelTy, typename ... RangeParams>
1605- void wrap_kernel (const KernelType &KernelFunc, MaybeKernelTy &&MaybeKernel,
1606- const PropertiesT &Props,
1603+ typename KernelType, typename ... RangeParams>
1604+ void wrap_kernel (const KernelType &KernelFunc, const PropertiesT &Props,
16071605 [[maybe_unused]] RangeParams &&...params) {
16081606 // TODO: Properties may change the kernel function, so in order to avoid
16091607 // conflicts they should be included in the name.
16101608 using NameT =
16111609 typename detail::get_kernel_name_t <KernelName, KernelType>::name;
16121610 (void )Props;
1613- (void )MaybeKernel;
1614- static_assert (std::is_same_v<MaybeKernelTy, kernel> ||
1615- std::is_same_v<MaybeKernelTy, std::nullptr_t >);
16161611 KernelWrapper<WrapAsVal, NameT, KernelType, ElementType, PropertiesT>::wrap (
16171612 this , KernelFunc);
16181613#ifndef __SYCL_DEVICE_ONLY__
16191614 if constexpr (WrapAsVal == WrapAs::single_task) {
16201615 throwOnKernelParameterMisuse<KernelName, KernelType>();
16211616 }
16221617 throwIfActionIsCreated ();
1623- if constexpr (std::is_same_v<MaybeKernelTy, kernel>) {
1624- // Ignore any set kernel bundles and use the one associated with the
1625- // kernel.
1626- setHandlerKernelBundle (MaybeKernel);
1618+ verifyUsedKernelBundleInternal (
1619+ detail::string_view{detail::getKernelName<NameT>()});
1620+ setType (detail::CGType::Kernel);
1621+
1622+ detail::checkValueRange<Dims>(params...);
1623+ if constexpr (SetNumWorkGroups) {
1624+ setNDRangeDescriptor (std::move (params)...,
1625+ /* SetNumWorkGroups=*/ true );
1626+ } else {
1627+ setNDRangeDescriptor (std::move (params)...);
16271628 }
1629+
1630+ StoreLambda<NameT, KernelType, Dims, ElementType>(std::move (KernelFunc));
1631+ processProperties<detail::isKernelESIMD<NameT>(), PropertiesT>(Props);
1632+ #endif
1633+ }
1634+
1635+ #ifndef __INTEL_PREVIEW_BREAKING_CHANGES
1636+ // Implementation for something that had to be removed long ago but now stuck
1637+ // until next major release...
1638+ template <
1639+ WrapAs WrapAsVal, typename KernelName, typename ElementType = void ,
1640+ int Dims = 1 , bool SetNumWorkGroups = false ,
1641+ typename PropertiesT = ext::oneapi::experimental::empty_properties_t ,
1642+ typename KernelType, typename ... RangeParams>
1643+ void wrap_kernel_legacy (const KernelType &KernelFunc, kernel &Kernel,
1644+ const PropertiesT &Props,
1645+ [[maybe_unused]] RangeParams &&...params) {
1646+ // TODO: Properties may change the kernel function, so in order to avoid
1647+ // conflicts they should be included in the name.
1648+ using NameT =
1649+ typename detail::get_kernel_name_t <KernelName, KernelType>::name;
1650+ (void )Props;
1651+ (void )Kernel;
1652+ KernelWrapper<WrapAsVal, NameT, KernelType, ElementType, PropertiesT>::wrap (
1653+ this , KernelFunc);
1654+ #ifndef __SYCL_DEVICE_ONLY__
1655+ if constexpr (WrapAsVal == WrapAs::single_task) {
1656+ throwOnKernelParameterMisuse<KernelName, KernelType>();
1657+ }
1658+ throwIfActionIsCreated ();
1659+ // Ignore any set kernel bundles and use the one associated with the
1660+ // kernel.
1661+ setHandlerKernelBundle (Kernel);
16281662 verifyUsedKernelBundleInternal (
16291663 detail::string_view{detail::getKernelName<NameT>()});
16301664 setType (detail::CGType::Kernel);
@@ -1637,21 +1671,17 @@ class __SYCL_EXPORT handler {
16371671 setNDRangeDescriptor (std::move (params)...);
16381672 }
16391673
1640- if constexpr (std::is_same_v<MaybeKernelTy, std::nullptr_t >) {
1641- StoreLambda<NameT, KernelType, Dims, ElementType>(std::move (KernelFunc));
1674+ MKernel = detail::getSyclObjImpl (std::move (Kernel));
1675+ if (!lambdaAndKernelHaveEqualName<NameT>()) {
1676+ extractArgsAndReqs ();
1677+ MKernelName = getKernelName ();
16421678 } else {
1643- MKernel = detail::getSyclObjImpl (std::move (MaybeKernel));
1644- if (!lambdaAndKernelHaveEqualName<NameT>()) {
1645- extractArgsAndReqs ();
1646- MKernelName = getKernelName ();
1647- } else {
1648- StoreLambda<NameT, KernelType, Dims, ElementType>(
1649- std::move (KernelFunc));
1650- }
1679+ StoreLambda<NameT, KernelType, Dims, ElementType>(std::move (KernelFunc));
16511680 }
16521681 processProperties<detail::isKernelESIMD<NameT>(), PropertiesT>(Props);
16531682#endif
16541683 }
1684+ #endif // __INTEL_PREVIEW_BREAKING_CHANGES
16551685
16561686 // NOTE: to support kernel_handler argument in kernel lambdas, only
16571687 // KernelWrapper<...>::wrap() must be called in this code.
@@ -1873,8 +1903,8 @@ class __SYCL_EXPORT handler {
18731903 // / \param KernelFunc is a SYCL kernel function.
18741904 template <typename KernelName = detail::auto_name, typename KernelType>
18751905 void single_task (const KernelType &KernelFunc) {
1876- wrap_kernel<WrapAs::single_task, KernelName>(KernelFunc, nullptr /* Kernel */ ,
1877- {} /* Props */ , range<1 >{1 });
1906+ wrap_kernel<WrapAs::single_task, KernelName>(KernelFunc, {} /* Props */ ,
1907+ range<1 >{1 });
18781908 }
18791909
18801910 template <typename KernelName = detail::auto_name, typename KernelType>
@@ -1941,8 +1971,7 @@ class __SYCL_EXPORT handler {
19411971 std::is_integral<LambdaArgType>::value && Dims == 1 , item<Dims>,
19421972 typename TransformUserItemType<Dims, LambdaArgType>::type>;
19431973 wrap_kernel<WrapAs::parallel_for, KernelName, TransformedArgType, Dims>(
1944- KernelFunc, nullptr /* Kernel*/ , {} /* Props*/ , NumWorkItems,
1945- WorkItemOffset);
1974+ KernelFunc, {} /* Props*/ , NumWorkItems, WorkItemOffset);
19461975 }
19471976
19481977 // / Hierarchical kernel invocation method of a kernel defined as a lambda
@@ -2090,6 +2119,7 @@ class __SYCL_EXPORT handler {
20902119#endif
20912120 }
20922121
2122+ #ifndef __INTEL_PREVIEW_BREAKING_CHANGES
20932123 // / Defines and invokes a SYCL kernel function for the specified range.
20942124 // /
20952125 // / \param Kernel is a SYCL kernel that is executed on a SYCL device
@@ -2099,12 +2129,13 @@ class __SYCL_EXPORT handler {
20992129 // / is a host device.
21002130 template <typename KernelName = detail::auto_name, typename KernelType,
21012131 int Dims>
2132+ __SYCL_DEPRECATED (" This overload isn't part of SYCL2020 and will be removed." )
21022133 void parallel_for(kernel Kernel, range<Dims> NumWorkItems,
21032134 const KernelType &KernelFunc) {
21042135 // Ignore any set kernel bundles and use the one associated with the kernel
21052136 setHandlerKernelBundle (Kernel);
21062137 using LambdaArgType = sycl::detail::lambda_arg_type<KernelType, item<Dims>>;
2107- wrap_kernel <WrapAs::parallel_for, KernelName, LambdaArgType, Dims>(
2138+ wrap_kernel_legacy <WrapAs::parallel_for, KernelName, LambdaArgType, Dims>(
21082139 KernelFunc, Kernel, {} /* Props*/ , NumWorkItems);
21092140 }
21102141
@@ -2119,11 +2150,11 @@ class __SYCL_EXPORT handler {
21192150 // / is a host device.
21202151 template <typename KernelName = detail::auto_name, typename KernelType,
21212152 int Dims>
2122- __SYCL2020_DEPRECATED ( " offsets are deprecated in SYCL 2020 " )
2153+ __SYCL_DEPRECATED ( " This overload isn't part of SYCL2020 and will be removed. " )
21232154 void parallel_for(kernel Kernel, range<Dims> NumWorkItems,
21242155 id<Dims> WorkItemOffset, const KernelType &KernelFunc) {
21252156 using LambdaArgType = sycl::detail::lambda_arg_type<KernelType, item<Dims>>;
2126- wrap_kernel <WrapAs::parallel_for, KernelName, LambdaArgType, Dims>(
2157+ wrap_kernel_legacy <WrapAs::parallel_for, KernelName, LambdaArgType, Dims>(
21272158 KernelFunc, Kernel, {} /* Props*/ , NumWorkItems, WorkItemOffset);
21282159 }
21292160
@@ -2138,11 +2169,12 @@ class __SYCL_EXPORT handler {
21382169 // / is a host device.
21392170 template <typename KernelName = detail::auto_name, typename KernelType,
21402171 int Dims>
2172+ __SYCL_DEPRECATED (" This overload isn't part of SYCL2020 and will be removed." )
21412173 void parallel_for(kernel Kernel, nd_range<Dims> NDRange,
21422174 const KernelType &KernelFunc) {
21432175 using LambdaArgType =
21442176 sycl::detail::lambda_arg_type<KernelType, nd_item<Dims>>;
2145- wrap_kernel <WrapAs::parallel_for, KernelName, LambdaArgType, Dims>(
2177+ wrap_kernel_legacy <WrapAs::parallel_for, KernelName, LambdaArgType, Dims>(
21462178 KernelFunc, Kernel, {} /* Props*/ , NDRange);
21472179 }
21482180
@@ -2161,14 +2193,15 @@ class __SYCL_EXPORT handler {
21612193 // / \param KernelFunc is a lambda representing kernel.
21622194 template <typename KernelName = detail::auto_name, typename KernelType,
21632195 int Dims>
2196+ __SYCL_DEPRECATED (" This overload isn't part of SYCL2020 and will be removed." )
21642197 void parallel_for_work_group(kernel Kernel, range<Dims> NumWorkGroups,
21652198 const KernelType &KernelFunc) {
21662199 using LambdaArgType =
21672200 sycl::detail::lambda_arg_type<KernelType, group<Dims>>;
2168- wrap_kernel <WrapAs::parallel_for_work_group, KernelName, LambdaArgType ,
2169- Dims,
2170- /* SetNumWorkGroups*/ true >(KernelFunc, Kernel, {} /* Props */ ,
2171- NumWorkGroups);
2201+ wrap_kernel_legacy <WrapAs::parallel_for_work_group, KernelName,
2202+ LambdaArgType, Dims,
2203+ /* SetNumWorkGroups*/ true >(KernelFunc, Kernel,
2204+ {} /* Props */ , NumWorkGroups);
21722205 }
21732206
21742207 // / Hierarchical kernel invocation method of a kernel.
@@ -2188,16 +2221,19 @@ class __SYCL_EXPORT handler {
21882221 // / \param KernelFunc is a lambda representing kernel.
21892222 template <typename KernelName = detail::auto_name, typename KernelType,
21902223 int Dims>
2224+ __SYCL_DEPRECATED (" This overload isn't part of SYCL2020 and will be removed." )
21912225 void parallel_for_work_group(kernel Kernel, range<Dims> NumWorkGroups,
21922226 range<Dims> WorkGroupSize,
21932227 const KernelType &KernelFunc) {
21942228 using LambdaArgType =
21952229 sycl::detail::lambda_arg_type<KernelType, group<Dims>>;
21962230 nd_range<Dims> ExecRange =
21972231 nd_range<Dims>(NumWorkGroups * WorkGroupSize, WorkGroupSize);
2198- wrap_kernel<WrapAs::parallel_for_work_group, KernelName, LambdaArgType,
2199- Dims>(KernelFunc, Kernel, {} /* Props*/ , ExecRange);
2232+ wrap_kernel_legacy<WrapAs::parallel_for_work_group, KernelName,
2233+ LambdaArgType, Dims>(KernelFunc, Kernel, {} /* Props*/ ,
2234+ ExecRange);
22002235 }
2236+ #endif // __INTEL_PREVIEW_BREAKING_CHANGES
22012237
22022238 template <typename KernelName = detail::auto_name, typename KernelType,
22032239 typename PropertiesT>
@@ -2208,8 +2244,8 @@ class __SYCL_EXPORT handler {
22082244 std::enable_if_t <ext::oneapi::experimental::is_property_list<
22092245 PropertiesT>::value> single_task (PropertiesT Props,
22102246 const KernelType &KernelFunc) {
2211- wrap_kernel<WrapAs::single_task, KernelName>(KernelFunc, nullptr /* Kernel */ ,
2212- Props, range<1 >{1 });
2247+ wrap_kernel<WrapAs::single_task, KernelName>(KernelFunc, Props ,
2248+ range<1 >{1 });
22132249 }
22142250
22152251 template <typename KernelName = detail::auto_name, typename KernelType,
0 commit comments