xref: /aosp_15_r20/external/angle/src/libANGLE/renderer/vulkan/CLEventVk.h (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
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