aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAustin Annestrand <a.annestrand@samsung.com>2024-01-24 12:51:05 -0600
committerAngle LUCI CQ <angle-scoped@luci-project-accounts.iam.gserviceaccount.com>2024-04-25 18:17:05 +0000
commit04329fe0855dc5d85a3bcda38aca561a70e42a06 (patch)
tree3d5cff2fafa1ce8ff6385ac9f968a743da2a1e9f
parente3a58b25e66021b4f52bc5b336936444e4b62b24 (diff)
downloadangle-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.cpp8
-rw-r--r--src/libANGLE/renderer/vulkan/CLContextVk.cpp20
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