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 // CLEventVk.h: Defines the class interface for CLEventVk, implementing CLEventImpl. 7*8975f5c5SAndroid Build Coastguard Worker 8*8975f5c5SAndroid Build Coastguard Worker #ifndef LIBANGLE_RENDERER_VULKAN_CLEVENTVK_H_ 9*8975f5c5SAndroid Build Coastguard Worker #define LIBANGLE_RENDERER_VULKAN_CLEVENTVK_H_ 10*8975f5c5SAndroid Build Coastguard Worker 11*8975f5c5SAndroid Build Coastguard Worker #include <condition_variable> 12*8975f5c5SAndroid Build Coastguard Worker #include <mutex> 13*8975f5c5SAndroid Build Coastguard Worker 14*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/renderer/vulkan/CLContextVk.h" 15*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/renderer/vulkan/cl_types.h" 16*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/renderer/vulkan/vk_resource.h" 17*8975f5c5SAndroid Build Coastguard Worker 18*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/renderer/CLEventImpl.h" 19*8975f5c5SAndroid Build Coastguard Worker 20*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/CLCommandQueue.h" 21*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/CLContext.h" 22*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/CLEvent.h" 23*8975f5c5SAndroid Build Coastguard Worker 24*8975f5c5SAndroid Build Coastguard Worker namespace rx 25*8975f5c5SAndroid Build Coastguard Worker { 26*8975f5c5SAndroid Build Coastguard Worker 27*8975f5c5SAndroid Build Coastguard Worker class CLEventVk : public CLEventImpl, public vk::Resource 28*8975f5c5SAndroid Build Coastguard Worker { 29*8975f5c5SAndroid Build Coastguard Worker public: 30*8975f5c5SAndroid Build Coastguard Worker CLEventVk(const cl::Event &event); 31*8975f5c5SAndroid Build Coastguard Worker ~CLEventVk() override; 32*8975f5c5SAndroid Build Coastguard Worker getCommandType()33*8975f5c5SAndroid Build Coastguard Worker cl_int getCommandType() const { return mEvent.getCommandType(); } isUserEvent()34*8975f5c5SAndroid Build Coastguard Worker bool isUserEvent() const { return mEvent.isUserEvent(); } getFrontendObject()35*8975f5c5SAndroid Build Coastguard Worker cl::Event &getFrontendObject() { return const_cast<cl::Event &>(mEvent); } 36*8975f5c5SAndroid Build Coastguard Worker 37*8975f5c5SAndroid Build Coastguard Worker angle::Result getCommandExecutionStatus(cl_int &executionStatus) override; 38*8975f5c5SAndroid Build Coastguard Worker 39*8975f5c5SAndroid Build Coastguard Worker angle::Result setUserEventStatus(cl_int executionStatus) override; 40*8975f5c5SAndroid Build Coastguard Worker 41*8975f5c5SAndroid Build Coastguard Worker angle::Result setCallback(cl::Event &event, cl_int commandExecCallbackType) override; 42*8975f5c5SAndroid Build Coastguard Worker 43*8975f5c5SAndroid Build Coastguard Worker angle::Result getProfilingInfo(cl::ProfilingInfo name, 44*8975f5c5SAndroid Build Coastguard Worker size_t valueSize, 45*8975f5c5SAndroid Build Coastguard Worker void *value, 46*8975f5c5SAndroid Build Coastguard Worker size_t *valueSizeRet) override; 47*8975f5c5SAndroid Build Coastguard Worker 48*8975f5c5SAndroid Build Coastguard Worker angle::Result waitForUserEventStatus(); 49*8975f5c5SAndroid Build Coastguard Worker angle::Result setStatusAndExecuteCallback(cl_int status); 50*8975f5c5SAndroid Build Coastguard Worker angle::Result setTimestamp(cl_int status); 51*8975f5c5SAndroid Build Coastguard Worker 52*8975f5c5SAndroid Build Coastguard Worker private: 53*8975f5c5SAndroid Build Coastguard Worker std::mutex mUserEventMutex; 54*8975f5c5SAndroid Build Coastguard Worker angle::SynchronizedValue<cl_int> mStatus; 55*8975f5c5SAndroid Build Coastguard Worker std::condition_variable mUserEventCondition; 56*8975f5c5SAndroid Build Coastguard Worker angle::SynchronizedValue<cl::EventStatusMap<bool>> mHaveCallbacks; 57*8975f5c5SAndroid Build Coastguard Worker 58*8975f5c5SAndroid Build Coastguard Worker // Event profiling timestamps 59*8975f5c5SAndroid Build Coastguard Worker struct ProfilingTimestamps 60*8975f5c5SAndroid Build Coastguard Worker { 61*8975f5c5SAndroid Build Coastguard Worker cl_ulong commandEndTS; 62*8975f5c5SAndroid Build Coastguard Worker cl_ulong commandStartTS; 63*8975f5c5SAndroid Build Coastguard Worker cl_ulong commandQueuedTS; 64*8975f5c5SAndroid Build Coastguard Worker cl_ulong commandSubmitTS; 65*8975f5c5SAndroid Build Coastguard Worker cl_ulong commandCompleteTS; 66*8975f5c5SAndroid Build Coastguard Worker }; 67*8975f5c5SAndroid Build Coastguard Worker angle::SynchronizedValue<ProfilingTimestamps> mProfilingTimestamps; 68*8975f5c5SAndroid Build Coastguard Worker }; 69*8975f5c5SAndroid Build Coastguard Worker 70*8975f5c5SAndroid Build Coastguard Worker } // namespace rx 71*8975f5c5SAndroid Build Coastguard Worker 72*8975f5c5SAndroid Build Coastguard Worker #endif // LIBANGLE_RENDERER_VULKAN_CLEVENTVK_H_ 73