// // 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. // // CLObject.h: Defines the cl::Object class, which is the base class of all ANGLE CL objects. #ifndef LIBANGLE_CLOBJECT_H_ #define LIBANGLE_CLOBJECT_H_ #include "libANGLE/cl_types.h" #include "libANGLE/renderer/cl_types.h" #include namespace cl { class Object { public: Object(); virtual ~Object(); cl_uint getRefCount() const noexcept { return mRefCount; } void retain() noexcept { ++mRefCount; } bool release() { if (mRefCount == 0u) { WARN() << "Unreferenced object without references"; return true; } return --mRefCount == 0u; } template static T *Create(Args &&...args) { T *object = new T(std::forward(args)...); return object; } private: std::atomic mRefCount; }; } // namespace cl #endif // LIBANGLE_CLCONTEXT_H_