25 true, KernelBundleImpl, ArgMask) {
40 : MKernel(Kernel), MContext(ContextImpl),
41 MProgramImpl(
std::move(ProgramImpl)),
42 MCreatedFromSource(IsCreatedFromSource),
43 MKernelBundleImpl(
std::move(KernelBundleImpl)),
44 MKernelArgMaskPtr{ArgMask} {
50 if (ContextImpl->getHandleRef() != Context)
51 throw sycl::invalid_parameter_error(
52 "Input context must be the same as the context of cl_kernel",
53 PI_ERROR_INVALID_CONTEXT);
55 MIsInterop = MProgramImpl->isInterop();
62 : MKernel(Kernel), MContext(
std::move(ContextImpl)), MProgramImpl(nullptr),
63 MCreatedFromSource(false), MDeviceImageImpl(
std::move(DeviceImageImpl)),
64 MKernelBundleImpl(
std::move(KernelBundleImpl)),
65 MKernelArgMaskPtr{ArgMask} {
72 MIsInterop = MKernelBundleImpl->isInterop();
76 : MContext(Context), MProgramImpl(
std::move(ProgramImpl)) {}
98 return MCreatedFromSource;
101 bool kernel_impl::isBuiltInKernel(
const device &Device)
const {
102 auto BuiltInKernels = Device.get_info<info::device::built_in_kernel_ids>();
103 if (BuiltInKernels.empty())
105 std::string KernelName = get_info<info::kernel::function_name>();
107 BuiltInKernels.begin(), BuiltInKernels.end(),
108 [&KernelName](
kernel_id &Id) { return Id.get_name() == KernelName; }));
111 void kernel_impl::checkIfValidForNumArgsInfoQuery()
const {
112 if (MKernelBundleImpl->isInterop())
114 auto Devices = MKernelBundleImpl->get_devices();
116 [
this](
device &Device) { return isBuiltInKernel(Device); }))
119 throw sycl::exception(
121 "info::kernel::num_args descriptor may only be used to query a kernel "
122 "that resides in a kernel bundle constructed using a backend specific"
123 "interoperability function or to query a device built-in kernel");