// // Copyright (c) 2020 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. // // SyncMtl: // Defines the class interface for SyncMtl, implementing SyncImpl. // #ifndef LIBANGLE_RENDERER_METAL_SYNCMTL_H_ #define LIBANGLE_RENDERER_METAL_SYNCMTL_H_ #include #include "libANGLE/renderer/EGLSyncImpl.h" #include "libANGLE/renderer/FenceNVImpl.h" #include "libANGLE/renderer/SyncImpl.h" #include "libANGLE/renderer/metal/mtl_common.h" namespace egl { class AttributeMap; } namespace rx { class ContextMtl; namespace mtl { class SyncImpl; } // namespace mtl class FenceNVMtl : public FenceNVImpl { public: FenceNVMtl(); ~FenceNVMtl() override; void onDestroy(const gl::Context *context) override; angle::Result set(const gl::Context *context, GLenum condition) override; angle::Result test(const gl::Context *context, GLboolean *outFinished) override; angle::Result finish(const gl::Context *context) override; private: std::unique_ptr mSync; }; class SyncMtl : public SyncImpl { public: SyncMtl(); ~SyncMtl() override; void onDestroy(const gl::Context *context) override; angle::Result set(const gl::Context *context, GLenum condition, GLbitfield flags) override; angle::Result clientWait(const gl::Context *context, GLbitfield flags, GLuint64 timeout, GLenum *outResult) override; angle::Result serverWait(const gl::Context *context, GLbitfield flags, GLuint64 timeout) override; angle::Result getStatus(const gl::Context *context, GLint *outResult) override; private: std::unique_ptr mSync; }; class EGLSyncMtl final : public EGLSyncImpl { public: EGLSyncMtl(); ~EGLSyncMtl() override; void onDestroy(const egl::Display *display) override; egl::Error initialize(const egl::Display *display, const gl::Context *context, EGLenum type, const egl::AttributeMap &attribs) override; egl::Error clientWait(const egl::Display *display, const gl::Context *context, EGLint flags, EGLTime timeout, EGLint *outResult) override; egl::Error serverWait(const egl::Display *display, const gl::Context *context, EGLint flags) override; egl::Error getStatus(const egl::Display *display, EGLint *outStatus) override; egl::Error copyMetalSharedEventANGLE(const egl::Display *display, void **result) const override; egl::Error dupNativeFenceFD(const egl::Display *display, EGLint *result) const override; private: angle::ObjCPtr> mSharedEvent; EGLenum mType = EGL_NONE; std::unique_ptr mSync; }; } // namespace rx #endif