diff options
Diffstat (limited to 'gfx/angle/src/libANGLE/renderer/gl/FenceSyncGL.cpp')
-rwxr-xr-x | gfx/angle/src/libANGLE/renderer/gl/FenceSyncGL.cpp | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/gfx/angle/src/libANGLE/renderer/gl/FenceSyncGL.cpp b/gfx/angle/src/libANGLE/renderer/gl/FenceSyncGL.cpp new file mode 100755 index 000000000..a3589b95e --- /dev/null +++ b/gfx/angle/src/libANGLE/renderer/gl/FenceSyncGL.cpp @@ -0,0 +1,67 @@ +// +// 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. +// + +// FenceSyncGL.cpp: Implements the class methods for FenceSyncGL. + +#include "libANGLE/renderer/gl/FenceSyncGL.h" + +#include "common/debug.h" +#include "libANGLE/renderer/gl/FunctionsGL.h" + +namespace rx +{ + +FenceSyncGL::FenceSyncGL(const FunctionsGL *functions) + : FenceSyncImpl(), + mFunctions(functions), + mSyncObject(0) +{ + ASSERT(mFunctions); +} + +FenceSyncGL::~FenceSyncGL() +{ + if (mSyncObject != 0) + { + mFunctions->deleteSync(mSyncObject); + } +} + +gl::Error FenceSyncGL::set(GLenum condition, GLbitfield flags) +{ + ASSERT(condition == GL_SYNC_GPU_COMMANDS_COMPLETE && flags == 0); + mSyncObject = mFunctions->fenceSync(condition, flags); + if (mSyncObject == 0) + { + // if glFenceSync fails, it returns 0. + return gl::Error(GL_OUT_OF_MEMORY, "glFenceSync failed to create a GLsync object."); + } + + return gl::Error(GL_NO_ERROR); +} + +gl::Error FenceSyncGL::clientWait(GLbitfield flags, GLuint64 timeout, GLenum *outResult) +{ + ASSERT(mSyncObject != 0); + *outResult = mFunctions->clientWaitSync(mSyncObject, flags, timeout); + return gl::Error(GL_NO_ERROR); +} + +gl::Error FenceSyncGL::serverWait(GLbitfield flags, GLuint64 timeout) +{ + ASSERT(mSyncObject != 0); + mFunctions->waitSync(mSyncObject, flags, timeout); + return gl::Error(GL_NO_ERROR); +} + +gl::Error FenceSyncGL::getStatus(GLint *outResult) +{ + ASSERT(mSyncObject != 0); + mFunctions->getSynciv(mSyncObject, GL_SYNC_STATUS, 1, nullptr, outResult); + return gl::Error(GL_NO_ERROR); +} + +} |