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