tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

Fence.h (2337B)


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