Integrated the new rx::Fence class into gl::Fence.
TRAC #22418
Signed-off-by: Nicolas Capens
Signed-off-by: Shannon Woods
Author: Geoff Lang
git-svn-id: https://angleproject.googlecode.com/svn/branches/dx11proto@1845 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/libGLESv2/Fence.cpp b/src/libGLESv2/Fence.cpp
index 2dc23e2..9f0e351 100644
--- a/src/libGLESv2/Fence.cpp
+++ b/src/libGLESv2/Fence.cpp
@@ -1,5 +1,5 @@
//
-// 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,129 +7,44 @@
// Fence.cpp: Implements the gl::Fence class, which supports the GL_NV_fence extension.
#include "libGLESv2/Fence.h"
-
-#include "libGLESv2/renderer/renderer9_utils.h"
+#include "libGLESv2/renderer/FenceImpl.h"
namespace gl
{
Fence::Fence(rx::Renderer *renderer)
{
- mRenderer = rx::Renderer9::makeRenderer9(renderer); // D3D9_REPLACE
-
- mQuery = NULL;
- mCondition = GL_NONE;
- mStatus = GL_FALSE;
+ mFence = renderer->createFence();
}
Fence::~Fence()
{
- if (mQuery != NULL)
- {
- mRenderer->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();
}
-// D3D9_REPLACE
void Fence::setFence(GLenum condition)
{
- if (!mQuery)
- {
- mQuery = mRenderer->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);
}
-// D3D9_REPLACE
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); // D3D9_REPLACE
-
- 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);
}
}
diff --git a/src/libGLESv2/Fence.h b/src/libGLESv2/Fence.h
index 1cd6841..1d981fa 100644
--- a/src/libGLESv2/Fence.h
+++ b/src/libGLESv2/Fence.h
@@ -1,5 +1,5 @@
//
-// 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.
//
@@ -11,10 +11,9 @@
#define GL_APICALL
#include <GLES2/gl2.h>
-#include <d3d9.h>
#include "common/angleutils.h"
-#include "libGLESv2/renderer/Renderer9.h"
+#include "libGLESv2/renderer/Renderer.h"
namespace gl
{
@@ -34,10 +33,7 @@
private:
DISALLOW_COPY_AND_ASSIGN(Fence);
- rx::Renderer9 *mRenderer; // D3D9_REPLACE
- IDirect3DQuery9* mQuery; // D3D9_REPLACE
- GLenum mCondition;
- GLboolean mStatus;
+ rx::FenceImpl *mFence;
};
}