1*8975f5c5SAndroid Build Coastguard Worker // 2*8975f5c5SAndroid Build Coastguard Worker // Copyright 2002 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 7*8975f5c5SAndroid Build Coastguard Worker // Fence.h: Defines the gl::FenceNV and gl::Sync classes, which support the GL_NV_fence 8*8975f5c5SAndroid Build Coastguard Worker // extension and GLES3 sync objects. 9*8975f5c5SAndroid Build Coastguard Worker 10*8975f5c5SAndroid Build Coastguard Worker #ifndef LIBANGLE_FENCE_H_ 11*8975f5c5SAndroid Build Coastguard Worker #define LIBANGLE_FENCE_H_ 12*8975f5c5SAndroid Build Coastguard Worker 13*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/Debug.h" 14*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/Error.h" 15*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/RefCountObject.h" 16*8975f5c5SAndroid Build Coastguard Worker 17*8975f5c5SAndroid Build Coastguard Worker #include "common/angleutils.h" 18*8975f5c5SAndroid Build Coastguard Worker 19*8975f5c5SAndroid Build Coastguard Worker namespace rx 20*8975f5c5SAndroid Build Coastguard Worker { 21*8975f5c5SAndroid Build Coastguard Worker class GLImplFactory; 22*8975f5c5SAndroid Build Coastguard Worker class FenceNVImpl; 23*8975f5c5SAndroid Build Coastguard Worker class SyncImpl; 24*8975f5c5SAndroid Build Coastguard Worker } // namespace rx 25*8975f5c5SAndroid Build Coastguard Worker 26*8975f5c5SAndroid Build Coastguard Worker namespace gl 27*8975f5c5SAndroid Build Coastguard Worker { 28*8975f5c5SAndroid Build Coastguard Worker 29*8975f5c5SAndroid Build Coastguard Worker class FenceNV final : angle::NonCopyable 30*8975f5c5SAndroid Build Coastguard Worker { 31*8975f5c5SAndroid Build Coastguard Worker public: 32*8975f5c5SAndroid Build Coastguard Worker explicit FenceNV(rx::GLImplFactory *factory); 33*8975f5c5SAndroid Build Coastguard Worker virtual ~FenceNV(); 34*8975f5c5SAndroid Build Coastguard Worker 35*8975f5c5SAndroid Build Coastguard Worker void onDestroy(const gl::Context *context); 36*8975f5c5SAndroid Build Coastguard Worker angle::Result set(const Context *context, GLenum condition); 37*8975f5c5SAndroid Build Coastguard Worker angle::Result test(const Context *context, GLboolean *outResult); 38*8975f5c5SAndroid Build Coastguard Worker angle::Result finish(const Context *context); 39*8975f5c5SAndroid Build Coastguard Worker isSet()40*8975f5c5SAndroid Build Coastguard Worker bool isSet() const { return mIsSet; } getStatus()41*8975f5c5SAndroid Build Coastguard Worker GLboolean getStatus() const { return mStatus; } getCondition()42*8975f5c5SAndroid Build Coastguard Worker GLenum getCondition() const { return mCondition; } 43*8975f5c5SAndroid Build Coastguard Worker 44*8975f5c5SAndroid Build Coastguard Worker private: 45*8975f5c5SAndroid Build Coastguard Worker rx::FenceNVImpl *mFence; 46*8975f5c5SAndroid Build Coastguard Worker 47*8975f5c5SAndroid Build Coastguard Worker bool mIsSet; 48*8975f5c5SAndroid Build Coastguard Worker 49*8975f5c5SAndroid Build Coastguard Worker GLboolean mStatus; 50*8975f5c5SAndroid Build Coastguard Worker GLenum mCondition; 51*8975f5c5SAndroid Build Coastguard Worker }; 52*8975f5c5SAndroid Build Coastguard Worker 53*8975f5c5SAndroid Build Coastguard Worker class Sync final : public RefCountObject<SyncID>, public LabeledObject 54*8975f5c5SAndroid Build Coastguard Worker { 55*8975f5c5SAndroid Build Coastguard Worker public: 56*8975f5c5SAndroid Build Coastguard Worker Sync(rx::GLImplFactory *factory, SyncID id); 57*8975f5c5SAndroid Build Coastguard Worker ~Sync() override; 58*8975f5c5SAndroid Build Coastguard Worker 59*8975f5c5SAndroid Build Coastguard Worker void onDestroy(const Context *context) override; 60*8975f5c5SAndroid Build Coastguard Worker 61*8975f5c5SAndroid Build Coastguard Worker angle::Result setLabel(const Context *context, const std::string &label) override; 62*8975f5c5SAndroid Build Coastguard Worker const std::string &getLabel() const override; 63*8975f5c5SAndroid Build Coastguard Worker 64*8975f5c5SAndroid Build Coastguard Worker angle::Result set(const Context *context, GLenum condition, GLbitfield flags); 65*8975f5c5SAndroid Build Coastguard Worker angle::Result clientWait(const Context *context, 66*8975f5c5SAndroid Build Coastguard Worker GLbitfield flags, 67*8975f5c5SAndroid Build Coastguard Worker GLuint64 timeout, 68*8975f5c5SAndroid Build Coastguard Worker GLenum *outResult); 69*8975f5c5SAndroid Build Coastguard Worker angle::Result serverWait(const Context *context, GLbitfield flags, GLuint64 timeout); 70*8975f5c5SAndroid Build Coastguard Worker angle::Result getStatus(const Context *context, GLint *outResult) const; 71*8975f5c5SAndroid Build Coastguard Worker getCondition()72*8975f5c5SAndroid Build Coastguard Worker GLenum getCondition() const { return mCondition; } getFlags()73*8975f5c5SAndroid Build Coastguard Worker GLbitfield getFlags() const { return mFlags; } 74*8975f5c5SAndroid Build Coastguard Worker getImplementation()75*8975f5c5SAndroid Build Coastguard Worker rx::SyncImpl *getImplementation() const { return mFence; } 76*8975f5c5SAndroid Build Coastguard Worker 77*8975f5c5SAndroid Build Coastguard Worker private: 78*8975f5c5SAndroid Build Coastguard Worker rx::SyncImpl *mFence; 79*8975f5c5SAndroid Build Coastguard Worker 80*8975f5c5SAndroid Build Coastguard Worker std::string mLabel; 81*8975f5c5SAndroid Build Coastguard Worker 82*8975f5c5SAndroid Build Coastguard Worker GLenum mCondition; 83*8975f5c5SAndroid Build Coastguard Worker GLbitfield mFlags; 84*8975f5c5SAndroid Build Coastguard Worker }; 85*8975f5c5SAndroid Build Coastguard Worker 86*8975f5c5SAndroid Build Coastguard Worker } // namespace gl 87*8975f5c5SAndroid Build Coastguard Worker 88*8975f5c5SAndroid Build Coastguard Worker #endif // LIBANGLE_FENCE_H_ 89