summaryrefslogtreecommitdiffstats
path: root/src/3rdparty/angle/src/libGLESv2/Fence.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/3rdparty/angle/src/libGLESv2/Fence.cpp')
-rw-r--r--src/3rdparty/angle/src/libGLESv2/Fence.cpp104
1 files changed, 12 insertions, 92 deletions
diff --git a/src/3rdparty/angle/src/libGLESv2/Fence.cpp b/src/3rdparty/angle/src/libGLESv2/Fence.cpp
index 14d1239abf..e4218bbeec 100644
--- a/src/3rdparty/angle/src/libGLESv2/Fence.cpp
+++ b/src/3rdparty/angle/src/libGLESv2/Fence.cpp
@@ -1,5 +1,6 @@
+#include "precompiled.h"
//
-// Copyright (c) 2002-2010 The ANGLE Project Authors. All rights reserved.
+// Copyright (c) 2002-2013 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.
//
@@ -7,126 +8,45 @@
// Fence.cpp: Implements the gl::Fence class, which supports the GL_NV_fence extension.
#include "libGLESv2/Fence.h"
-
-#include "libGLESv2/main.h"
+#include "libGLESv2/renderer/FenceImpl.h"
+#include "libGLESv2/renderer/Renderer.h"
namespace gl
{
-Fence::Fence(egl::Display* display)
+Fence::Fence(rx::Renderer *renderer)
{
- mDisplay = display;
- mQuery = NULL;
- mCondition = GL_NONE;
- mStatus = GL_FALSE;
+ mFence = renderer->createFence();
}
Fence::~Fence()
{
- if (mQuery != NULL)
- {
- mDisplay->freeEventQuery(mQuery);
- }
+ delete mFence;
}
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 != NULL;
+ return mFence->isFence();
}
void Fence::setFence(GLenum condition)
{
- if (!mQuery)
- {
- mQuery = mDisplay->allocateEventQuery();
- if (!mQuery)
- {
- return error(GL_OUT_OF_MEMORY);
- }
- }
-
- HRESULT result = mQuery->Issue(D3DISSUE_END);
- ASSERT(SUCCEEDED(result));
-
- mCondition = condition;
- mStatus = GL_FALSE;
+ mFence->setFence(condition);
}
GLboolean Fence::testFence()
{
- if (mQuery == NULL)
- {
- return error(GL_INVALID_OPERATION, GL_TRUE);
- }
-
- HRESULT result = mQuery->GetData(NULL, 0, D3DGETDATA_FLUSH);
-
- if (checkDeviceLost(result))
- {
- return error(GL_OUT_OF_MEMORY, GL_TRUE);
- }
-
- ASSERT(result == S_OK || result == S_FALSE);
- mStatus = result == S_OK;
- return mStatus;
+ return mFence->testFence();
}
void Fence::finishFence()
{
- if (mQuery == NULL)
- {
- return error(GL_INVALID_OPERATION);
- }
-
- while (!testFence())
- {
- Sleep(0);
- }
+ mFence->finishFence();
}
void Fence::getFenceiv(GLenum pname, GLint *params)
{
- if (mQuery == NULL)
- {
- 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;
- }
-
- HRESULT result = mQuery->GetData(NULL, 0, 0);
-
- if (checkDeviceLost(result))
- {
- params[0] = GL_TRUE;
- return error(GL_OUT_OF_MEMORY);
- }
-
- ASSERT(result == S_OK || result == S_FALSE);
- mStatus = result == S_OK;
- params[0] = mStatus;
-
- break;
- }
- case GL_FENCE_CONDITION_NV:
- params[0] = mCondition;
- break;
- default:
- return error(GL_INVALID_ENUM);
- break;
- }
+ mFence->getFenceiv(pname, params);
}
}