Hash :
de09f8db
        
        Author :
  
        
        Date :
2021-09-02T18:21:37
        
      
Revert "GL: Update StateManagerGL binding funcs to use ANGLE_GL_TRY" This reverts commit 4b5a774e855af2493d64b0635f56053bd795c5c5. Reason for revert: broken on iOS and Skia Original change's description: > GL: Update StateManagerGL binding funcs to use ANGLE_GL_TRY > > Bug: angleproject:3020 > Change-Id: Iff460a1012d06e1c5feff84d91117de87e7c870a > Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3123167 > Reviewed-by: Jamie Madill <jmadill@chromium.org> > Commit-Queue: Geoff Lang <geofflang@chromium.org> Bug: angleproject:3020 Change-Id: I54d81a7b734d007f65ff97990008f5e6eb8536f6 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3140453 Bot-Commit: Rubber Stamper <rubber-stamper@appspot.gserviceaccount.com> Reviewed-by: Jamie Madill <jmadill@chromium.org> Commit-Queue: Jamie Madill <jmadill@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 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
//
// Copyright 2015 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.
//
// QueryGL.h: Defines the class interface for QueryGL.
#ifndef LIBANGLE_RENDERER_GL_QUERYGL_H_
#define LIBANGLE_RENDERER_GL_QUERYGL_H_
#include <deque>
#include "libANGLE/renderer/QueryImpl.h"
namespace rx
{
class FunctionsGL;
class StateManagerGL;
class QueryGL : public QueryImpl
{
  public:
    QueryGL(gl::QueryType type);
    ~QueryGL() override;
    // OpenGL is only allowed to have one query of each type active at any given time. Since ANGLE
    // virtualizes contexts, queries need to be able to be paused and resumed.
    // A query is "paused" by ending it and pushing the ID into a list of queries awaiting readback.
    // When it is "resumed", a new query is generated and started.
    // When a result is required, the queries are "flushed" by iterating over the list of pending
    // queries and merging their results.
    virtual angle::Result pause(const gl::Context *context)  = 0;
    virtual angle::Result resume(const gl::Context *context) = 0;
};
class StandardQueryGL : public QueryGL
{
  public:
    StandardQueryGL(gl::QueryType type, const FunctionsGL *functions, StateManagerGL *stateManager);
    ~StandardQueryGL() override;
    angle::Result begin(const gl::Context *context) override;
    angle::Result end(const gl::Context *context) override;
    angle::Result queryCounter(const gl::Context *context) override;
    angle::Result getResult(const gl::Context *context, GLint *params) override;
    angle::Result getResult(const gl::Context *context, GLuint *params) override;
    angle::Result getResult(const gl::Context *context, GLint64 *params) override;
    angle::Result getResult(const gl::Context *context, GLuint64 *params) override;
    angle::Result isResultAvailable(const gl::Context *context, bool *available) override;
    angle::Result pause(const gl::Context *context) override;
    angle::Result resume(const gl::Context *context) override;
  private:
    angle::Result flush(const gl::Context *context, bool force);
    template <typename T>
    angle::Result getResultBase(const gl::Context *context, T *params);
    const FunctionsGL *mFunctions;
    StateManagerGL *mStateManager;
    GLuint mActiveQuery;
    std::deque<GLuint> mPendingQueries;
    GLuint64 mResultSum;
};
class SyncProviderGL;
class SyncQueryGL : public QueryGL
{
  public:
    SyncQueryGL(gl::QueryType type, const FunctionsGL *functions);
    ~SyncQueryGL() override;
    static bool IsSupported(const FunctionsGL *functions);
    angle::Result begin(const gl::Context *context) override;
    angle::Result end(const gl::Context *context) override;
    angle::Result queryCounter(const gl::Context *context) override;
    angle::Result getResult(const gl::Context *context, GLint *params) override;
    angle::Result getResult(const gl::Context *context, GLuint *params) override;
    angle::Result getResult(const gl::Context *context, GLint64 *params) override;
    angle::Result getResult(const gl::Context *context, GLuint64 *params) override;
    angle::Result isResultAvailable(const gl::Context *context, bool *available) override;
    angle::Result pause(const gl::Context *context) override;
    angle::Result resume(const gl::Context *context) override;
  private:
    angle::Result flush(const gl::Context *context, bool force);
    template <typename T>
    angle::Result getResultBase(const gl::Context *context, T *params);
    const FunctionsGL *mFunctions;
    std::unique_ptr<SyncProviderGL> mSyncProvider;
    bool mFinished;
};
}  // namespace rx
#endif  // LIBANGLE_RENDERER_GL_QUERYGL_H_