Apply the Apache 2.0 license. Change-Id: I4a7aeefedcd2d891093520d5a10ebefadcddb5be Reviewed-on: https://swiftshader-review.googlesource.com/5320 Reviewed-by: Nicolas Capens <capn@google.com> Tested-by: Nicolas Capens <capn@google.com>
diff --git a/src/OpenGL/libGLESv2/Fence.cpp b/src/OpenGL/libGLESv2/Fence.cpp index 31c3bf6..17a2228 100644 --- a/src/OpenGL/libGLESv2/Fence.cpp +++ b/src/OpenGL/libGLESv2/Fence.cpp
@@ -1,132 +1,135 @@ -// SwiftShader Software Renderer -// -// Copyright(c) 2005-2012 TransGaming Inc. -// -// All rights reserved. No part of this software may be copied, distributed, transmitted, -// transcribed, stored in a retrieval system, translated into any human or computer -// language by any means, or disclosed to third parties without the explicit written -// agreement of TransGaming Inc. Without such an agreement, no rights or licenses, express -// or implied, including but not limited to any patent rights, are granted to you. -// - -// Fence.cpp: Implements the Fence class, which supports the GL_NV_fence extension. - -#include "Fence.h" - -#include "main.h" -#include "Common/Thread.hpp" - -namespace es2 -{ - -Fence::Fence() -{ - mQuery = false; - mCondition = GL_NONE; - mStatus = GL_FALSE; -} - -Fence::~Fence() -{ - mQuery = false; -} - -GLboolean Fence::isFence() -{ - // GL_NV_fence spec: - // A name returned by GenFencesNV, but not yet set via SetFenceNV, is not the name of an existing fence. - return mQuery; -} - -void Fence::setFence(GLenum condition) -{ - if(condition != GL_ALL_COMPLETED_NV) - { - return error(GL_INVALID_VALUE); - } - - mQuery = true; - mCondition = condition; - mStatus = GL_FALSE; -} - -GLboolean Fence::testFence() -{ - if(!mQuery) - { - return error(GL_INVALID_OPERATION, GL_TRUE); - } - - // The current assumtion is that no matter where the fence is placed, it is - // done by the time it is tested, which is similar to Context::flush(), since - // we don't queue anything without processing it as fast as possible. - mStatus = GL_TRUE; - - return mStatus; -} - -void Fence::finishFence() -{ - if(!mQuery) - { - return error(GL_INVALID_OPERATION); - } - - while(!testFence()) - { - sw::Thread::yield(); - } -} - -void Fence::getFenceiv(GLenum pname, GLint *params) -{ - if(!mQuery) - { - return error(GL_INVALID_OPERATION); - } - - switch (pname) - { - case GL_FENCE_STATUS_NV: - { - // GL_NV_fence spec: - // Once the status of a fence has been finished (via FinishFenceNV) or tested and the returned status is TRUE (via either TestFenceNV - // or GetFenceivNV querying the FENCE_STATUS_NV), the status remains TRUE until the next SetFenceNV of the fence. - if(mStatus) - { - params[0] = GL_TRUE; - return; - } - - mStatus = testFence(); - - params[0] = mStatus; - break; - } - case GL_FENCE_CONDITION_NV: - params[0] = mCondition; - break; - default: - return error(GL_INVALID_ENUM); - break; - } -} - -FenceSync::FenceSync(GLuint name, GLenum condition, GLbitfield flags) : NamedObject(name), mCondition(condition), mFlags(flags) -{ -} - -FenceSync::~FenceSync() -{ -} - -GLenum FenceSync::clientWait(GLbitfield flags, GLuint64 timeout) -{ - return GL_TRUE; -} - -void FenceSync::serverWait(GLbitfield flags, GLuint64 timeout) -{ -} - -} +// Copyright 2016 The SwiftShader Authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Fence.cpp: Implements the Fence class, which supports the GL_NV_fence extension. + +#include "Fence.h" + +#include "main.h" +#include "Common/Thread.hpp" + +namespace es2 +{ + +Fence::Fence() +{ + mQuery = false; + mCondition = GL_NONE; + mStatus = GL_FALSE; +} + +Fence::~Fence() +{ + mQuery = false; +} + +GLboolean Fence::isFence() +{ + // GL_NV_fence spec: + // A name returned by GenFencesNV, but not yet set via SetFenceNV, is not the name of an existing fence. + return mQuery; +} + +void Fence::setFence(GLenum condition) +{ + if(condition != GL_ALL_COMPLETED_NV) + { + return error(GL_INVALID_VALUE); + } + + mQuery = true; + mCondition = condition; + mStatus = GL_FALSE; +} + +GLboolean Fence::testFence() +{ + if(!mQuery) + { + return error(GL_INVALID_OPERATION, GL_TRUE); + } + + // The current assumtion is that no matter where the fence is placed, it is + // done by the time it is tested, which is similar to Context::flush(), since + // we don't queue anything without processing it as fast as possible. + mStatus = GL_TRUE; + + return mStatus; +} + +void Fence::finishFence() +{ + if(!mQuery) + { + return error(GL_INVALID_OPERATION); + } + + while(!testFence()) + { + sw::Thread::yield(); + } +} + +void Fence::getFenceiv(GLenum pname, GLint *params) +{ + if(!mQuery) + { + return error(GL_INVALID_OPERATION); + } + + switch(pname) + { + case GL_FENCE_STATUS_NV: + { + // GL_NV_fence spec: + // Once the status of a fence has been finished (via FinishFenceNV) or tested and the returned status is TRUE (via either TestFenceNV + // or GetFenceivNV querying the FENCE_STATUS_NV), the status remains TRUE until the next SetFenceNV of the fence. + if(mStatus) + { + params[0] = GL_TRUE; + return; + } + + mStatus = testFence(); + + params[0] = mStatus; + break; + } + case GL_FENCE_CONDITION_NV: + params[0] = mCondition; + break; + default: + return error(GL_INVALID_ENUM); + break; + } +} + +FenceSync::FenceSync(GLuint name, GLenum condition, GLbitfield flags) : NamedObject(name), mCondition(condition), mFlags(flags) +{ +} + +FenceSync::~FenceSync() +{ +} + +GLenum FenceSync::clientWait(GLbitfield flags, GLuint64 timeout) +{ + return GL_TRUE; +} + +void FenceSync::serverWait(GLbitfield flags, GLuint64 timeout) +{ +} + +}