diff options
author | Austin Annestrand <a.annestrand@samsung.com> | 2024-01-24 12:51:05 -0600 |
---|---|---|
committer | Angle LUCI CQ <angle-scoped@luci-project-accounts.iam.gserviceaccount.com> | 2024-04-25 18:17:05 +0000 |
commit | 04329fe0855dc5d85a3bcda38aca561a70e42a06 (patch) | |
tree | 3d5cff2fafa1ce8ff6385ac9f968a743da2a1e9f | |
parent | e3a58b25e66021b4f52bc5b336936444e4b62b24 (diff) | |
download | angle-04329fe0855dc5d85a3bcda38aca561a70e42a06.tar.gz |
CL/VK: Implement wait APIs
This commit implements:
clWaitForEvents
clEnqueueWaitForEvents
Bug: angleproject:8633
Change-Id: I873310ab11dfac08c165dc36be2400a35be48878
Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5406616
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
Commit-Queue: Austin Annestrand <a.annestrand@samsung.com>
-rw-r--r-- | src/libANGLE/renderer/vulkan/CLCommandQueueVk.cpp | 8 | ||||
-rw-r--r-- | src/libANGLE/renderer/vulkan/CLContextVk.cpp | 20 |
2 files changed, 24 insertions, 4 deletions
diff --git a/src/libANGLE/renderer/vulkan/CLCommandQueueVk.cpp b/src/libANGLE/renderer/vulkan/CLCommandQueueVk.cpp index f461da52f3..fa8a233bab 100644 --- a/src/libANGLE/renderer/vulkan/CLCommandQueueVk.cpp +++ b/src/libANGLE/renderer/vulkan/CLCommandQueueVk.cpp @@ -391,8 +391,12 @@ angle::Result CLCommandQueueVk::enqueueMarker(CLEventImpl::CreateFunc &eventCrea angle::Result CLCommandQueueVk::enqueueWaitForEvents(const cl::EventPtrs &events) { - UNIMPLEMENTED(); - ANGLE_CL_RETURN_ERROR(CL_OUT_OF_RESOURCES); + std::scoped_lock<std::mutex> sl(mCommandQueueMutex); + + // Unlike clWaitForEvents, this routine is non-blocking + ANGLE_TRY(processWaitlist(events)); + + return angle::Result::Continue; } angle::Result CLCommandQueueVk::enqueueBarrierWithWaitList(const cl::EventPtrs &waitEvents, diff --git a/src/libANGLE/renderer/vulkan/CLContextVk.cpp b/src/libANGLE/renderer/vulkan/CLContextVk.cpp index bac0ba4bb0..5acd9a1a8a 100644 --- a/src/libANGLE/renderer/vulkan/CLContextVk.cpp +++ b/src/libANGLE/renderer/vulkan/CLContextVk.cpp @@ -15,6 +15,7 @@ #include "libANGLE/CLBuffer.h" #include "libANGLE/CLContext.h" +#include "libANGLE/CLEvent.h" #include "libANGLE/CLProgram.h" #include "libANGLE/cl_utils.h" @@ -251,8 +252,23 @@ angle::Result CLContextVk::createUserEvent(const cl::Event &event, CLEventImpl:: angle::Result CLContextVk::waitForEvents(const cl::EventPtrs &events) { - UNIMPLEMENTED(); - ANGLE_CL_RETURN_ERROR(CL_OUT_OF_RESOURCES); + for (auto &event : events) + { + CLEventVk *eventVk = &event.get()->getImpl<CLEventVk>(); + if (eventVk->isUserEvent()) + { + ANGLE_TRY(eventVk->waitForUserEventStatus()); + } + else + { + // TODO rework this to instead (flush w/ ResourceUse serial wait) once we move away from + // spawning a submit-thread/Task for flush routine + // https://anglebug.com/8669 + ANGLE_TRY(event->getCommandQueue()->finish()); + } + } + + return angle::Result::Continue; } } // namespace rx |