diff options
-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 |