gl::Query now uses the abstract rx::Query.
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@1840 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/libGLESv2/Query.cpp b/src/libGLESv2/Query.cpp
index f9f1bff..d0d9000 100644
--- a/src/libGLESv2/Query.cpp
+++ b/src/libGLESv2/Query.cpp
@@ -7,124 +7,44 @@
// Query.cpp: Implements the gl::Query class
#include "libGLESv2/Query.h"
-
-#include "libGLESv2/renderer/renderer9_utils.h"
+#include "libGLESv2/renderer/QueryImpl.h"
namespace gl
{
-Query::Query(rx::Renderer *renderer, GLuint id, GLenum type) : RefCountObject(id)
+Query::Query(rx::Renderer *renderer, GLenum type, GLuint id) : RefCountObject(id)
{
- mRenderer = rx::Renderer9::makeRenderer9(renderer); // D3D9_REPLACE
-
- 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)
- {
- // D3D9_REPLACE
- if (FAILED(mRenderer->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 (mRenderer->testDeviceLost(true))
- {
- 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
-}
}