1 #include "precompiled.h"
3 // Copyright (c) 2013 The ANGLE Project Authors. All rights reserved.
4 // Use of this source code is governed by a BSD-style license that can be
5 // found in the LICENSE file.
8 // Query9.cpp: Defines the rx::Query9 class which implements rx::QueryImpl.
11 #include "libGLESv2/renderer/d3d9/Query9.h"
12 #include "libGLESv2/main.h"
13 #include "libGLESv2/renderer/d3d9/renderer9_utils.h"
14 #include "libGLESv2/renderer/d3d9/Renderer9.h"
19 Query9::Query9(rx::Renderer9 *renderer, GLenum type) : QueryImpl(type)
34 if (FAILED(mRenderer->getDevice()->CreateQuery(D3DQUERYTYPE_OCCLUSION, &mQuery)))
36 return gl::error(GL_OUT_OF_MEMORY);
40 HRESULT result = mQuery->Issue(D3DISSUE_BEGIN);
41 UNUSED_ASSERTION_VARIABLE(result);
42 ASSERT(SUCCEEDED(result));
49 HRESULT result = mQuery->Issue(D3DISSUE_END);
50 UNUSED_ASSERTION_VARIABLE(result);
51 ASSERT(SUCCEEDED(result));
57 GLuint Query9::getResult()
64 // explicitly check for device loss
65 // some drivers seem to return S_FALSE even if the device is lost
66 // instead of D3DERR_DEVICELOST like they should
67 if (mRenderer->testDeviceLost(true))
69 return gl::error(GL_OUT_OF_MEMORY, 0);
77 GLboolean Query9::isResultAvailable()
87 GLboolean Query9::testQuery()
89 if (mQuery != NULL && mStatus != GL_TRUE)
93 HRESULT hres = mQuery->GetData(&numPixels, sizeof(DWORD), D3DGETDATA_FLUSH);
100 case GL_ANY_SAMPLES_PASSED_EXT:
101 case GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT:
102 mResult = (numPixels > 0) ? GL_TRUE : GL_FALSE;
108 else if (d3d9::isDeviceLostError(hres))
110 mRenderer->notifyDeviceLost();
111 return gl::error(GL_OUT_OF_MEMORY, GL_TRUE);
117 return GL_TRUE; // prevent blocking when query is null
120 bool Query9::isStarted() const
122 return (mQuery != NULL);