1*8975f5c5SAndroid Build Coastguard Worker //
2*8975f5c5SAndroid Build Coastguard Worker // Copyright 2021 The ANGLE Project Authors. All rights reserved.
3*8975f5c5SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
4*8975f5c5SAndroid Build Coastguard Worker // found in the LICENSE file.
5*8975f5c5SAndroid Build Coastguard Worker //
6*8975f5c5SAndroid Build Coastguard Worker // CLEventCL.cpp: Implements the class methods for CLEventCL.
7*8975f5c5SAndroid Build Coastguard Worker
8*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/renderer/cl/CLEventCL.h"
9*8975f5c5SAndroid Build Coastguard Worker
10*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/CLEvent.h"
11*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/cl_utils.h"
12*8975f5c5SAndroid Build Coastguard Worker
13*8975f5c5SAndroid Build Coastguard Worker namespace rx
14*8975f5c5SAndroid Build Coastguard Worker {
15*8975f5c5SAndroid Build Coastguard Worker
CLEventCL(const cl::Event & event,cl_event native)16*8975f5c5SAndroid Build Coastguard Worker CLEventCL::CLEventCL(const cl::Event &event, cl_event native) : CLEventImpl(event), mNative(native)
17*8975f5c5SAndroid Build Coastguard Worker {}
18*8975f5c5SAndroid Build Coastguard Worker
~CLEventCL()19*8975f5c5SAndroid Build Coastguard Worker CLEventCL::~CLEventCL()
20*8975f5c5SAndroid Build Coastguard Worker {
21*8975f5c5SAndroid Build Coastguard Worker if (mNative->getDispatch().clReleaseEvent(mNative) != CL_SUCCESS)
22*8975f5c5SAndroid Build Coastguard Worker {
23*8975f5c5SAndroid Build Coastguard Worker ERR() << "Error while releasing CL event";
24*8975f5c5SAndroid Build Coastguard Worker }
25*8975f5c5SAndroid Build Coastguard Worker }
26*8975f5c5SAndroid Build Coastguard Worker
getCommandExecutionStatus(cl_int & executionStatus)27*8975f5c5SAndroid Build Coastguard Worker angle::Result CLEventCL::getCommandExecutionStatus(cl_int &executionStatus)
28*8975f5c5SAndroid Build Coastguard Worker {
29*8975f5c5SAndroid Build Coastguard Worker ANGLE_CL_TRY(mNative->getDispatch().clGetEventInfo(mNative, CL_EVENT_COMMAND_EXECUTION_STATUS,
30*8975f5c5SAndroid Build Coastguard Worker sizeof(executionStatus), &executionStatus,
31*8975f5c5SAndroid Build Coastguard Worker nullptr));
32*8975f5c5SAndroid Build Coastguard Worker return angle::Result::Continue;
33*8975f5c5SAndroid Build Coastguard Worker }
34*8975f5c5SAndroid Build Coastguard Worker
setUserEventStatus(cl_int executionStatus)35*8975f5c5SAndroid Build Coastguard Worker angle::Result CLEventCL::setUserEventStatus(cl_int executionStatus)
36*8975f5c5SAndroid Build Coastguard Worker {
37*8975f5c5SAndroid Build Coastguard Worker ANGLE_CL_TRY(mNative->getDispatch().clSetUserEventStatus(mNative, executionStatus));
38*8975f5c5SAndroid Build Coastguard Worker return angle::Result::Continue;
39*8975f5c5SAndroid Build Coastguard Worker }
40*8975f5c5SAndroid Build Coastguard Worker
setCallback(cl::Event & event,cl_int commandExecCallbackType)41*8975f5c5SAndroid Build Coastguard Worker angle::Result CLEventCL::setCallback(cl::Event &event, cl_int commandExecCallbackType)
42*8975f5c5SAndroid Build Coastguard Worker {
43*8975f5c5SAndroid Build Coastguard Worker ANGLE_CL_TRY(mNative->getDispatch().clSetEventCallback(mNative, commandExecCallbackType,
44*8975f5c5SAndroid Build Coastguard Worker Callback, &event));
45*8975f5c5SAndroid Build Coastguard Worker return angle::Result::Continue;
46*8975f5c5SAndroid Build Coastguard Worker }
47*8975f5c5SAndroid Build Coastguard Worker
getProfilingInfo(cl::ProfilingInfo name,size_t valueSize,void * value,size_t * valueSizeRet)48*8975f5c5SAndroid Build Coastguard Worker angle::Result CLEventCL::getProfilingInfo(cl::ProfilingInfo name,
49*8975f5c5SAndroid Build Coastguard Worker size_t valueSize,
50*8975f5c5SAndroid Build Coastguard Worker void *value,
51*8975f5c5SAndroid Build Coastguard Worker size_t *valueSizeRet)
52*8975f5c5SAndroid Build Coastguard Worker {
53*8975f5c5SAndroid Build Coastguard Worker ANGLE_CL_TRY(mNative->getDispatch().clGetEventProfilingInfo(mNative, cl::ToCLenum(name),
54*8975f5c5SAndroid Build Coastguard Worker valueSize, value, valueSizeRet));
55*8975f5c5SAndroid Build Coastguard Worker return angle::Result::Continue;
56*8975f5c5SAndroid Build Coastguard Worker }
57*8975f5c5SAndroid Build Coastguard Worker
Cast(const cl::EventPtrs & events)58*8975f5c5SAndroid Build Coastguard Worker std::vector<cl_event> CLEventCL::Cast(const cl::EventPtrs &events)
59*8975f5c5SAndroid Build Coastguard Worker {
60*8975f5c5SAndroid Build Coastguard Worker std::vector<cl_event> nativeEvents;
61*8975f5c5SAndroid Build Coastguard Worker nativeEvents.reserve(events.size());
62*8975f5c5SAndroid Build Coastguard Worker for (const cl::EventPtr &event : events)
63*8975f5c5SAndroid Build Coastguard Worker {
64*8975f5c5SAndroid Build Coastguard Worker nativeEvents.emplace_back(event->getImpl<CLEventCL>().getNative());
65*8975f5c5SAndroid Build Coastguard Worker }
66*8975f5c5SAndroid Build Coastguard Worker return nativeEvents;
67*8975f5c5SAndroid Build Coastguard Worker }
68*8975f5c5SAndroid Build Coastguard Worker
Callback(cl_event event,cl_int commandStatus,void * userData)69*8975f5c5SAndroid Build Coastguard Worker void CLEventCL::Callback(cl_event event, cl_int commandStatus, void *userData)
70*8975f5c5SAndroid Build Coastguard Worker {
71*8975f5c5SAndroid Build Coastguard Worker static_cast<cl::Event *>(userData)->callback(commandStatus);
72*8975f5c5SAndroid Build Coastguard Worker }
73*8975f5c5SAndroid Build Coastguard Worker
74*8975f5c5SAndroid Build Coastguard Worker } // namespace rx
75