Hash :
1252d9aa
Author :
Date :
2025-05-30T14:16:23
CL: Create frontend event and pass to enqueue APIs Since frontend cl_event object does not depend on enqueue API routines, we can construct it early and then pass to mImpl enqueue API calls (for any backend that needs it). Also update backend routines to init their backend event implementations using frontend event object. Bug: angleproject:444482493 Change-Id: I459dbf34f10cb6b30245479c9966f876d6e905d7 Signed-off-by: Austin Annestrand <a.annestrand@samsung.com> Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6941604 Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
//
// Copyright 2021 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// CLEventCL.cpp: Implements the class methods for CLEventCL.
#include "libANGLE/renderer/cl/CLEventCL.h"
#include "libANGLE/CLEvent.h"
#include "libANGLE/cl_utils.h"
namespace rx
{
CLEventCL::CLEventCL(const cl::Event &event, cl_event native) : CLEventImpl(event), mNative(native)
{}
CLEventCL::~CLEventCL()
{
if (mNative->getDispatch().clReleaseEvent(mNative) != CL_SUCCESS)
{
ERR() << "Error while releasing CL event";
}
}
angle::Result CLEventCL::getCommandExecutionStatus(cl_int &executionStatus)
{
ANGLE_CL_TRY(mNative->getDispatch().clGetEventInfo(mNative, CL_EVENT_COMMAND_EXECUTION_STATUS,
sizeof(executionStatus), &executionStatus,
nullptr));
return angle::Result::Continue;
}
angle::Result CLEventCL::setUserEventStatus(cl_int executionStatus)
{
ANGLE_CL_TRY(mNative->getDispatch().clSetUserEventStatus(mNative, executionStatus));
return angle::Result::Continue;
}
angle::Result CLEventCL::setCallback(cl::Event &event, cl_int commandExecCallbackType)
{
ANGLE_CL_TRY(mNative->getDispatch().clSetEventCallback(mNative, commandExecCallbackType,
Callback, &event));
return angle::Result::Continue;
}
angle::Result CLEventCL::getProfilingInfo(cl::ProfilingInfo name,
size_t valueSize,
void *value,
size_t *valueSizeRet)
{
ANGLE_CL_TRY(mNative->getDispatch().clGetEventProfilingInfo(mNative, cl::ToCLenum(name),
valueSize, value, valueSizeRet));
return angle::Result::Continue;
}
std::vector<cl_event> CLEventCL::Cast(const cl::EventPtrs &events)
{
std::vector<cl_event> nativeEvents;
nativeEvents.reserve(events.size());
for (const cl::EventPtr &event : events)
{
nativeEvents.emplace_back(event->getImpl<CLEventCL>().getNative());
}
return nativeEvents;
}
void CLEventCL::Callback(cl_event event, cl_int commandStatus, void *userData)
{
static_cast<cl::Event *>(userData)->callback(commandStatus);
}
} // namespace rx