Branch
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
//
// 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.
//
// CLEventVk.h: Defines the class interface for CLEventVk, implementing CLEventImpl.
#ifndef LIBANGLE_RENDERER_VULKAN_CLEVENTVK_H_
#define LIBANGLE_RENDERER_VULKAN_CLEVENTVK_H_
#include <condition_variable>
#include <mutex>
#include "libANGLE/renderer/CLEventImpl.h"
#include "libANGLE/renderer/serial_utils.h"
#include "libANGLE/CLEvent.h"
namespace rx
{
class CLEventVk : public CLEventImpl
{
public:
CLEventVk(const cl::Event &event, const cl::ExecutionStatus initialStatus);
~CLEventVk() override;
cl_int getCommandType() const { return mEvent.getCommandType(); }
bool isUserEvent() const { return mEvent.isUserEvent(); }
cl::Event &getFrontendObject() { return const_cast<cl::Event &>(mEvent); }
const QueueSerial &getQueueSerial() { return mQueueSerial; }
void setQueueSerial(QueueSerial queueSerial);
angle::Result getCommandExecutionStatus(cl_int &executionStatus) override;
angle::Result setUserEventStatus(cl_int executionStatus) override;
angle::Result setCallback(cl::Event &event, cl_int commandExecCallbackType) override;
angle::Result getProfilingInfo(cl::ProfilingInfo name,
size_t valueSize,
void *value,
size_t *valueSizeRet) override;
angle::Result waitForUserEventStatus();
angle::Result setStatusAndExecuteCallback(cl_int status);
angle::Result setTimestamp(cl_int status);
private:
std::mutex mUserEventMutex;
angle::SynchronizedValue<cl_int> mStatus;
std::condition_variable mUserEventCondition;
angle::SynchronizedValue<cl::EventStatusMap<bool>> mHaveCallbacks;
// Event profiling timestamps
struct ProfilingTimestamps
{
cl_ulong commandEndTS;
cl_ulong commandStartTS;
cl_ulong commandQueuedTS;
cl_ulong commandSubmitTS;
cl_ulong commandCompleteTS;
};
angle::SynchronizedValue<ProfilingTimestamps> mProfilingTimestamps;
QueueSerial mQueueSerial;
};
} // namespace rx
#endif // LIBANGLE_RENDERER_VULKAN_CLEVENTVK_H_