@@ -1066,31 +1066,37 @@ void handler::extractArgsAndReqs() {
10661066}
10671067
10681068void handler::extractArgsAndReqsFromLambda (
1069- char *LambdaPtr, const detail::kernel_param_desc_t &ParamDesc, bool IsESIMD,
1070- size_t Index, size_t &IndexShift) {
1071- void *Ptr = LambdaPtr + ParamDesc.offset ;
1072- const detail::kernel_param_kind_t &Kind = ParamDesc.kind ;
1073- const int &Size = ParamDesc.info ;
1074- if (Kind == detail::kernel_param_kind_t ::kind_accessor) {
1075- // For args kind of accessor Size is information about accessor.
1076- // The first 11 bits of Size encodes the accessor target.
1077- const access::target AccTarget =
1078- static_cast <access::target>(Size & AccessTargetMask);
1079- if ((AccTarget == access::target::device ||
1080- AccTarget == access::target::constant_buffer) ||
1081- (AccTarget == access::target::image ||
1082- AccTarget == access::target::image_array)) {
1083- detail::AccessorBaseHost *AccBase =
1084- static_cast <detail::AccessorBaseHost *>(Ptr);
1085- Ptr = detail::getSyclObjImpl (*AccBase).get ();
1086- } else if (AccTarget == access::target::local) {
1087- detail::LocalAccessorBaseHost *LocalAccBase =
1088- static_cast <detail::LocalAccessorBaseHost *>(Ptr);
1089- Ptr = detail::getSyclObjImpl (*LocalAccBase).get ();
1069+ char *LambdaPtr, detail::kernel_param_desc_t (*ParamDescGetter)(int ),
1070+ size_t NumKernelParams, bool IsESIMD) {
1071+ size_t IndexShift = 0 ;
1072+ impl->MArgs .reserve (MaxNumAdditionalArgs * NumKernelParams);
1073+
1074+ for (size_t I = 0 ; I < NumKernelParams; ++I) {
1075+ detail::kernel_param_desc_t ParamDesc = ParamDescGetter (I);
1076+ void *Ptr = LambdaPtr + ParamDesc.offset ;
1077+ const detail::kernel_param_kind_t &Kind = ParamDesc.kind ;
1078+ const int &Size = ParamDesc.info ;
1079+ if (Kind == detail::kernel_param_kind_t ::kind_accessor) {
1080+ // For args kind of accessor Size is information about accessor.
1081+ // The first 11 bits of Size encodes the accessor target.
1082+ const access::target AccTarget =
1083+ static_cast <access::target>(Size & AccessTargetMask);
1084+ if ((AccTarget == access::target::device ||
1085+ AccTarget == access::target::constant_buffer) ||
1086+ (AccTarget == access::target::image ||
1087+ AccTarget == access::target::image_array)) {
1088+ detail::AccessorBaseHost *AccBase =
1089+ static_cast <detail::AccessorBaseHost *>(Ptr);
1090+ Ptr = detail::getSyclObjImpl (*AccBase).get ();
1091+ } else if (AccTarget == access::target::local) {
1092+ detail::LocalAccessorBaseHost *LocalAccBase =
1093+ static_cast <detail::LocalAccessorBaseHost *>(Ptr);
1094+ Ptr = detail::getSyclObjImpl (*LocalAccBase).get ();
1095+ }
10901096 }
1097+ processArg (Ptr, Kind, Size, I, IndexShift,
1098+ /* IsKernelCreatedFromSource=*/ false , IsESIMD);
10911099 }
1092- processArg (Ptr, Kind, Size, Index, IndexShift,
1093- /* IsKernelCreatedFromSource=*/ false , IsESIMD);
10941100}
10951101
10961102#ifndef __INTEL_PREVIEW_BREAKING_CHANGES
@@ -2134,10 +2140,6 @@ void handler::addArg(detail::kernel_param_kind_t ArgKind, void *Req,
21342140
21352141void handler::clearArgs () { impl->MArgs .clear (); }
21362142
2137- void handler::reserveArgs (int NumParams) {
2138- impl->MArgs .reserve (MaxNumAdditionalArgs * NumParams);
2139- }
2140-
21412143void handler::setArgsToAssociatedAccessors () {
21422144 impl->MArgs = impl->MAssociatedAccesors ;
21432145}
0 commit comments