diff options
Diffstat (limited to 'src/3rdparty/angle/src/libGLESv2/Query.cpp')
-rw-r--r-- | src/3rdparty/angle/src/libGLESv2/Query.cpp | 98 |
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 -} } |