1d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org//
25defc5c0d5c53456d37992fe7ac14af493c12d17shannon.woods@transgaming.com// Copyright (c) 2002-2013 The ANGLE Project Authors. All rights reserved.
3d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org// Use of this source code is governed by a BSD-style license that can be
4d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org// found in the LICENSE file.
5d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org//
6d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org
7d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org// Fence.h: Defines the gl::Fence class, which supports the GL_NV_fence extension.
8d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org
9d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org#ifndef LIBGLESV2_FENCE_H_
10d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org#define LIBGLESV2_FENCE_H_
11d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org
12d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org#include "common/angleutils.h"
13cd055f81f941b108b936fa0eaf2523793ddf7b4fJamie Madill#include "common/RefCountObject.h"
14486d9e9b6b4ed31f66d2624b8e822020fe40a1f7shannon.woods@transgaming.com
15486d9e9b6b4ed31f66d2624b8e822020fe40a1f7shannon.woods@transgaming.comnamespace rx
16486d9e9b6b4ed31f66d2624b8e822020fe40a1f7shannon.woods@transgaming.com{
17486d9e9b6b4ed31f66d2624b8e822020fe40a1f7shannon.woods@transgaming.comclass Renderer;
18486d9e9b6b4ed31f66d2624b8e822020fe40a1f7shannon.woods@transgaming.comclass FenceImpl;
19486d9e9b6b4ed31f66d2624b8e822020fe40a1f7shannon.woods@transgaming.com}
20563c0a533544792bb1df86338866a5d38d749597apatrick@chromium.org
21d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.orgnamespace gl
22d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org{
23d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org
2433dc84394ba08700d700a3da692e8de18433a031Jamie Madillclass FenceNV
25d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org{
26d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org  public:
2733dc84394ba08700d700a3da692e8de18433a031Jamie Madill    explicit FenceNV(rx::Renderer *renderer);
2833dc84394ba08700d700a3da692e8de18433a031Jamie Madill    virtual ~FenceNV();
29d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org
3009752369e814a809e3033973aa294ede4b4fb9bcJamie Madill    GLboolean isFence() const;
31d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org    void setFence(GLenum condition);
32d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org    GLboolean testFence();
33d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org    void finishFence();
34fb9a7409515cb0a8f9926974511ff486361909d7Jamie Madill    GLint getFencei(GLenum pname);
35d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org
3609752369e814a809e3033973aa294ede4b4fb9bcJamie Madill    GLboolean getStatus() const { return mStatus; }
3709752369e814a809e3033973aa294ede4b4fb9bcJamie Madill    GLuint getCondition() const { return mCondition; }
3809752369e814a809e3033973aa294ede4b4fb9bcJamie Madill
39d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org  private:
4033dc84394ba08700d700a3da692e8de18433a031Jamie Madill    DISALLOW_COPY_AND_ASSIGN(FenceNV);
41d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org
425defc5c0d5c53456d37992fe7ac14af493c12d17shannon.woods@transgaming.com    rx::FenceImpl *mFence;
4309752369e814a809e3033973aa294ede4b4fb9bcJamie Madill
4409752369e814a809e3033973aa294ede4b4fb9bcJamie Madill    GLboolean mStatus;
4509752369e814a809e3033973aa294ede4b4fb9bcJamie Madill    GLenum mCondition;
46d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org};
47d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org
48cd055f81f941b108b936fa0eaf2523793ddf7b4fJamie Madillclass FenceSync : public RefCountObject
49cd055f81f941b108b936fa0eaf2523793ddf7b4fJamie Madill{
50cd055f81f941b108b936fa0eaf2523793ddf7b4fJamie Madill  public:
51cd055f81f941b108b936fa0eaf2523793ddf7b4fJamie Madill    explicit FenceSync(rx::Renderer *renderer, GLuint id);
52cd055f81f941b108b936fa0eaf2523793ddf7b4fJamie Madill    virtual ~FenceSync();
53cd055f81f941b108b936fa0eaf2523793ddf7b4fJamie Madill
54cd055f81f941b108b936fa0eaf2523793ddf7b4fJamie Madill    void set(GLenum condition);
55cd055f81f941b108b936fa0eaf2523793ddf7b4fJamie Madill    GLenum clientWait(GLbitfield flags, GLuint64 timeout);
56cd055f81f941b108b936fa0eaf2523793ddf7b4fJamie Madill    void serverWait();
57cd055f81f941b108b936fa0eaf2523793ddf7b4fJamie Madill    GLenum getStatus() const;
58cd055f81f941b108b936fa0eaf2523793ddf7b4fJamie Madill
59cd055f81f941b108b936fa0eaf2523793ddf7b4fJamie Madill    GLuint getCondition() const { return mCondition; }
60cd055f81f941b108b936fa0eaf2523793ddf7b4fJamie Madill
61cd055f81f941b108b936fa0eaf2523793ddf7b4fJamie Madill  private:
62cd055f81f941b108b936fa0eaf2523793ddf7b4fJamie Madill    DISALLOW_COPY_AND_ASSIGN(FenceSync);
63cd055f81f941b108b936fa0eaf2523793ddf7b4fJamie Madill
64cd055f81f941b108b936fa0eaf2523793ddf7b4fJamie Madill    rx::FenceImpl *mFence;
65cd055f81f941b108b936fa0eaf2523793ddf7b4fJamie Madill    LONGLONG mCounterFrequency;
66cd055f81f941b108b936fa0eaf2523793ddf7b4fJamie Madill
67cd055f81f941b108b936fa0eaf2523793ddf7b4fJamie Madill    GLenum mCondition;
68cd055f81f941b108b936fa0eaf2523793ddf7b4fJamie Madill};
69cd055f81f941b108b936fa0eaf2523793ddf7b4fJamie Madill
70d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org}
71d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org
72d3bd0ad320fb246d9b42a0161c27eeb56c7e9160apatrick@chromium.org#endif   // LIBGLESV2_FENCE_H_
73