summaryrefslogtreecommitdiffstats
path: root/src/3rdparty/angle/src/libGLESv2/Query.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/3rdparty/angle/src/libGLESv2/Query.cpp')
-rw-r--r--src/3rdparty/angle/src/libGLESv2/Query.cpp98
1 files changed, 11 insertions, 87 deletions
diff --git a/src/3rdparty/angle/src/libGLESv2/Query.cpp b/src/3rdparty/angle/src/libGLESv2/Query.cpp
index 10edda5c57..bd987954f1 100644
--- a/src/3rdparty/angle/src/libGLESv2/Query.cpp
+++ b/src/3rdparty/angle/src/libGLESv2/Query.cpp
@@ -1,3 +1,4 @@
+#include "precompiled.h"
//
// Copyright (c) 2012 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
@@ -7,122 +8,45 @@
// Query.cpp: Implements the gl::Query class
#include "libGLESv2/Query.h"
-
-#include "libGLESv2/main.h"
+#include "libGLESv2/renderer/QueryImpl.h"
+#include "libGLESv2/renderer/Renderer.h"
namespace gl
{
-Query::Query(GLuint id, GLenum type) : RefCountObject(id)
+Query::Query(rx::Renderer *renderer, GLenum type, GLuint id) : RefCountObject(id)
{
- mQuery = NULL;
- mStatus = GL_FALSE;
- mResult = GL_FALSE;
- mType = type;
+ mQuery = renderer->createQuery(type);
}
Query::~Query()
{
- if (mQuery != NULL)
- {
- mQuery->Release();
- mQuery = NULL;
- }
+ delete mQuery;
}
void Query::begin()
{
- if (mQuery == NULL)
- {
- if (FAILED(getDevice()->CreateQuery(D3DQUERYTYPE_OCCLUSION, &mQuery)))
- {
- return error(GL_OUT_OF_MEMORY);
- }
- }
-
- HRESULT result = mQuery->Issue(D3DISSUE_BEGIN);
- ASSERT(SUCCEEDED(result));
+ mQuery->begin();
}
void Query::end()
{
- if (mQuery == NULL)
- {
- return error(GL_INVALID_OPERATION);
- }
-
- HRESULT result = mQuery->Issue(D3DISSUE_END);
- ASSERT(SUCCEEDED(result));
-
- mStatus = GL_FALSE;
- mResult = GL_FALSE;
+ mQuery->end();
}
GLuint Query::getResult()
{
- if (mQuery != NULL)
- {
- while (!testQuery())
- {
- Sleep(0);
- // explicitly check for device loss
- // some drivers seem to return S_FALSE even if the device is lost
- // instead of D3DERR_DEVICELOST like they should
- if (gl::getDisplay()->testDeviceLost())
- {
- gl::getDisplay()->notifyDeviceLost();
- return error(GL_OUT_OF_MEMORY, 0);
- }
- }
- }
-
- return (GLuint)mResult;
+ return mQuery->getResult();
}
GLboolean Query::isResultAvailable()
{
- if (mQuery != NULL)
- {
- testQuery();
- }
-
- return mStatus;
+ return mQuery->isResultAvailable();
}
GLenum Query::getType() const
{
- return mType;
+ return mQuery->getType();
}
-GLboolean Query::testQuery()
-{
- if (mQuery != NULL && mStatus != GL_TRUE)
- {
- DWORD numPixels = 0;
-
- HRESULT hres = mQuery->GetData(&numPixels, sizeof(DWORD), D3DGETDATA_FLUSH);
- if (hres == S_OK)
- {
- mStatus = GL_TRUE;
-
- switch (mType)
- {
- case GL_ANY_SAMPLES_PASSED_EXT:
- case GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT:
- mResult = (numPixels > 0) ? GL_TRUE : GL_FALSE;
- break;
- default:
- ASSERT(false);
- }
- }
- else if (checkDeviceLost(hres))
- {
- return error(GL_OUT_OF_MEMORY, GL_TRUE);
- }
-
- return mStatus;
- }
-
- return GL_TRUE; // prevent blocking when query is null
-}
}