17 inline namespace _V1 {
21 const size_t,
event AvailableEvent,
22 std::unique_ptr<SYCLMemObjAllocator> Allocator)
23 :
SYCLMemObjT(MemObject, SyclContext, true, AvailableEvent,
24 std::move(Allocator)) {}
27 bool OwnNativeHandle,
event AvailableEvent,
28 std::unique_ptr<SYCLMemObjAllocator> Allocator)
29 : MAllocator(
std::move(Allocator)), MProps(),
32 MOpenCLInterop(true), MHostPtrReadOnly(false), MNeedWriteBack(true),
33 MUserPtr(nullptr), MShadowCopy(nullptr), MUploadDataFunctor(nullptr),
34 MSharedPtrStorage(nullptr), MHostPtrProvided(true),
35 MOwnNativeHandle(OwnNativeHandle) {
37 throw sycl::invalid_parameter_error(
38 "Creation of interoperability memory object using host context is "
40 PI_ERROR_INVALID_CONTEXT);
54 sizeof(Context), &Context,
nullptr);
57 throw sycl::invalid_parameter_error(
58 "Input context must be the same as the context of cl_mem",
59 PI_ERROR_INVALID_CONTEXT);
74 bool OwnNativeHandle,
event AvailableEvent,
75 std::unique_ptr<SYCLMemObjAllocator> Allocator,
80 : MAllocator(
std::move(Allocator)), MProps(),
83 MOpenCLInterop(true), MHostPtrReadOnly(false), MNeedWriteBack(true),
84 MUserPtr(nullptr), MShadowCopy(nullptr), MUploadDataFunctor(nullptr),
85 MSharedPtrStorage(nullptr), MHostPtrProvided(true),
86 MOwnNativeHandle(OwnNativeHandle) {
88 throw sycl::invalid_parameter_error(
89 "Creation of interoperability memory object using host context is "
91 PI_ERROR_INVALID_CONTEXT);
114 sizeof(Context), &Context,
nullptr);
117 throw sycl::invalid_parameter_error(
118 "Input context must be the same as the context of cl_mem",
119 PI_ERROR_INVALID_CONTEXT);
131 const id<3> Offset{0, 0, 0};
137 const int ElemSize = 1;
140 Dims, ElemSize,
size_t(0));
156 std::ignore = Result;
159 "removeMemoryObject should not return false in mem object destructor");
171 "Trying to get Plugin from SYCLMemObjT with nullptr ContextImpl.");
178 const PluginPtr &Plugin = Context->getPlugin();
181 detail::pi::cast<sycl::detail::pi::PiMem>(MemObject),
PI_MEM_SIZE,
182 sizeof(size_t), &BufSize,
nullptr);
189 bool InitFromUserData,
void *&HostPtr,
190 bool &HostPtrReadOnly) {
206 InitFromUserData =
true;
208 if (InitFromUserData) {
209 assert(!HostPtr &&
"Cannot init from user data and reuse host ptr provided "
214 HostPtrReadOnly =
false;
218 const std::shared_ptr<SYCLMemObjT> &Self)
const {
227 bool InteropObjectsUsed =
237 const auto InitialUserPtr =
MUserPtr;
241 for (
auto &it :
MRecord->MAllocaCommands) {
242 if (it->MMemAllocation == InitialUserPtr) {
The context class represents a SYCL context on which kernel functions may be executed.
static void releaseMemObj(ContextImplPtr TargetContext, SYCLMemObjI *MemObj, void *MemAllocation, void *UserPtr)
std::shared_ptr< MemObjRecord > MRecord
const PluginPtr & getPlugin() const
void detachMemoryObject(const std::shared_ptr< SYCLMemObjT > &Self) const
ContextImplPtr MInteropContext
void determineHostPtr(const ContextImplPtr &Context, bool InitFromUserData, void *&HostPtr, bool &HostPtrReadOnly)
void releaseHostMem(void *Ptr) override
sycl::detail::pi::PiMem MInteropMemObject
void releaseMem(ContextImplPtr Context, void *MemAllocation) override
void handleWriteAccessorCreation()
void * getUserPtr() const
SYCLMemObjT(const size_t SizeInBytes, const property_list &Props, std::unique_ptr< SYCLMemObjAllocator > Allocator)
std::function< void(void)> MUploadDataFunctor
std::function< void(void)> MCreateShadowCopy
bool isInterop() const override
static size_t getBufSizeForContext(const ContextImplPtr &Context, pi_native_handle MemObject)
EventImplPtr addCopyBack(Requirement *Req)
Registers a command group, that copies most recent memory to the memory pointed by the requirement.
static Scheduler & getInstance()
bool removeMemoryObject(detail::SYCLMemObjI *MemObj, bool StrictLock=true)
Removes buffer from the graph.
void deferMemObjRelease(const std::shared_ptr< detail::SYCLMemObjI > &MemObj)
An event object can be used to synchronize memory transfers, enqueues of kernels and signaling barrie...
std::shared_ptr< sycl::detail::context_impl > ContextImplPtr
decltype(Obj::impl) getSyclObjImpl(const Obj &SyclObject)
sycl::detail::pi::PiMemObjectType getImageType(int Dimensions)
std::shared_ptr< event_impl > EventImplPtr
std::shared_ptr< plugin > PluginPtr
class __SYCL_EBO __SYCL_SPECIAL_CLASS __SYCL_TYPE(local_accessor) local_accessor class __SYCL_EBO __SYCL_SPECIAL_CLASS Dimensions
class __SYCL_EBO __SYCL_SPECIAL_CLASS __SYCL_TYPE(local_accessor) local_accessor class __SYCL_EBO __SYCL_SPECIAL_CLASS AccessMode
uintptr_t pi_native_handle
pi_result piMemGetInfo(pi_mem mem, pi_mem_info param_name, size_t param_value_size, void *param_value, size_t *param_value_size_ret)
pi_result piMemRetain(pi_mem mem)
pi_result piMemRelease(pi_mem mem)
pi_result piextMemCreateWithNativeHandle(pi_native_handle nativeHandle, pi_context context, bool ownNativeHandle, pi_mem *mem)
Creates PI mem object from a native handle.
pi_result piextMemImageCreateWithNativeHandle(pi_native_handle nativeHandle, pi_context context, bool ownNativeHandle, const pi_image_format *ImageFormat, const pi_image_desc *ImageDesc, pi_mem *img)
Creates PI image object from a native handle.