Skip to content

Commit cd51318

Browse files
author
iclsrc
committed
Merge from 'sycl' to 'sycl-web' (#1)
2 parents 1275a55 + 0aabe7e commit cd51318

File tree

2 files changed

+41
-0
lines changed

2 files changed

+41
-0
lines changed

sycl/source/detail/memory_manager.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,10 @@ void *MemoryManager::allocateInteropMemObject(
8989
// Return cl_mem as is if contexts match.
9090
if (TargetContext == InteropContext) {
9191
OutEventToWait = InteropEvent->getHandleRef();
92+
// Retain the event since it will be released during alloca command
93+
// destruction
94+
if (nullptr != OutEventToWait)
95+
PI_CALL(piEventRetain)(OutEventToWait);
9296
return UserPtr;
9397
}
9498
// Allocate new cl_mem and initialize from user provided one.

sycl/test/basic_tests/buffer/buffer_interop.cpp

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,5 +143,42 @@ int main() {
143143
Error = clReleaseMemObject(OpenCLBuffer);
144144
CHECK_OCL_CODE(Error);
145145
}
146+
// Check interop constructor event
147+
{
148+
// Checks that the cl_event is not deleted on memory object destruction
149+
queue MyQueue;
150+
cl_context OpenCLContext = MyQueue.get_context().get();
151+
152+
int Val;
153+
cl_int Error = CL_SUCCESS;
154+
cl_mem OpenCLBuffer =
155+
clCreateBuffer(OpenCLContext, CL_MEM_READ_WRITE | CL_MEM_COPY_HOST_PTR,
156+
sizeof(int), &Val, &Error);
157+
CHECK_OCL_CODE(Error);
158+
cl_event OpenCLEvent = clCreateUserEvent(OpenCLContext, &Error);
159+
CHECK_OCL_CODE(Error);
160+
CHECK_OCL_CODE(clSetUserEventStatus(OpenCLEvent, CL_COMPLETE));
161+
162+
{
163+
event Event(OpenCLEvent, OpenCLContext);
164+
buffer<int, 1> Buffer{OpenCLBuffer, MyQueue.get_context(), Event};
165+
166+
MyQueue.submit([&](handler &Cgh) {
167+
auto Acc = Buffer.get_access<access::mode::write>(Cgh);
168+
Cgh.single_task<class TestEvent>([=]() { Acc[0] = 42; });
169+
});
170+
171+
auto Acc = Buffer.get_access<access::mode::read>();
172+
if (42 != Acc[0]) {
173+
assert(false);
174+
Failed = true;
175+
}
176+
}
177+
178+
CHECK_OCL_CODE(clReleaseMemObject(OpenCLBuffer));
179+
CHECK_OCL_CODE(clReleaseContext(OpenCLContext));
180+
CHECK_OCL_CODE(clReleaseEvent(OpenCLEvent));
181+
}
182+
146183
return Failed;
147184
}

0 commit comments

Comments
 (0)