Created Query9.

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@1838 736b8ea6-26fd-11df-bfd4-992fa37f6226
parent bfbec45a
...@@ -281,6 +281,8 @@ ...@@ -281,6 +281,8 @@
'libGLESv2/renderer/InputLayoutCache.cpp', 'libGLESv2/renderer/InputLayoutCache.cpp',
'libGLESv2/renderer/InputLayoutCache.h', 'libGLESv2/renderer/InputLayoutCache.h',
'libGLESv2/renderer/QueryImpl.h', 'libGLESv2/renderer/QueryImpl.h',
'libGLESv2/renderer/Query9.cpp',
'libGLESv2/renderer/Query9.h',
'libGLESv2/renderer/Renderer.cpp', 'libGLESv2/renderer/Renderer.cpp',
'libGLESv2/renderer/Renderer.h', 'libGLESv2/renderer/Renderer.h',
'libGLESv2/renderer/Renderer11.cpp', 'libGLESv2/renderer/Renderer11.cpp',
......
...@@ -253,6 +253,7 @@ copy "$(OutDir)libGLESv2.lib" "$(ProjectDir)..\..\lib\$(Configuration)\" ...@@ -253,6 +253,7 @@ copy "$(OutDir)libGLESv2.lib" "$(ProjectDir)..\..\lib\$(Configuration)\"
<ClCompile Include="renderer\ImageSSE2.cpp" /> <ClCompile Include="renderer\ImageSSE2.cpp" />
<ClCompile Include="renderer\Image11.cpp" /> <ClCompile Include="renderer\Image11.cpp" />
<ClCompile Include="renderer\InputLayoutCache.cpp" /> <ClCompile Include="renderer\InputLayoutCache.cpp" />
<ClCompile Include="renderer\Query9.cpp" />
<ClCompile Include="renderer\Renderer.cpp" /> <ClCompile Include="renderer\Renderer.cpp" />
<ClCompile Include="renderer\Renderer11.cpp" /> <ClCompile Include="renderer\Renderer11.cpp" />
<ClCompile Include="renderer\renderer11_utils.cpp" /> <ClCompile Include="renderer\renderer11_utils.cpp" />
...@@ -311,6 +312,7 @@ copy "$(OutDir)libGLESv2.lib" "$(ProjectDir)..\..\lib\$(Configuration)\" ...@@ -311,6 +312,7 @@ copy "$(OutDir)libGLESv2.lib" "$(ProjectDir)..\..\lib\$(Configuration)\"
<ClInclude Include="renderer\IndexDataManager.h" /> <ClInclude Include="renderer\IndexDataManager.h" />
<ClInclude Include="renderer\InputLayoutCache.h" /> <ClInclude Include="renderer\InputLayoutCache.h" />
<ClInclude Include="renderer\QueryImpl.h" /> <ClInclude Include="renderer\QueryImpl.h" />
<ClInclude Include="renderer\Query9.h" />
<ClInclude Include="renderer\Renderer.h" /> <ClInclude Include="renderer\Renderer.h" />
<ClInclude Include="renderer\Renderer11.h" /> <ClInclude Include="renderer\Renderer11.h" />
<ClInclude Include="renderer\renderer11_utils.h" /> <ClInclude Include="renderer\renderer11_utils.h" />
......
...@@ -179,6 +179,9 @@ ...@@ -179,6 +179,9 @@
<ClCompile Include="renderer\TextureStorage11.cpp"> <ClCompile Include="renderer\TextureStorage11.cpp">
<Filter>Renderer</Filter> <Filter>Renderer</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="renderer\Query9.cpp">
<Filter>Renderer</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="BinaryStream.h"> <ClInclude Include="BinaryStream.h">
...@@ -406,6 +409,9 @@ ...@@ -406,6 +409,9 @@
<ClInclude Include="renderer\QueryImpl.h"> <ClInclude Include="renderer\QueryImpl.h">
<Filter>Renderer</Filter> <Filter>Renderer</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="renderer\Query9.h">
<Filter>Renderer</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="libGLESv2.def"> <None Include="libGLESv2.def">
......
//
// Copyright (c) 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.
//
// Query9.cpp: Defines the rx::Query9 class which implements rx::QueryImpl.
#include "libGLESv2/renderer/Query9.h"
#include "libGLESv2/main.h"
#include "libGLESv2/renderer/renderer9_utils.h"
namespace rx
{
Query9::Query9(rx::Renderer9 *renderer, GLenum type) : QueryImpl(type)
{
mRenderer = renderer;
mQuery = NULL;
}
Query9::~Query9()
{
if (mQuery)
{
mQuery->Release();
mQuery = NULL;
}
}
void Query9::begin()
{
if (mQuery == NULL)
{
if (FAILED(mRenderer->getDevice()->CreateQuery(D3DQUERYTYPE_OCCLUSION, &mQuery)))
{
return error(GL_OUT_OF_MEMORY);
}
}
HRESULT result = mQuery->Issue(D3DISSUE_BEGIN);
ASSERT(SUCCEEDED(result));
}
void Query9::end()
{
if (mQuery == NULL)
{
return error(GL_INVALID_OPERATION);
}
HRESULT result = mQuery->Issue(D3DISSUE_END);
ASSERT(SUCCEEDED(result));
setStatus(GL_FALSE);
setResult(GL_FALSE);
}
GLuint Query9::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 getResult();
}
GLboolean Query9::isResultAvailable()
{
if (mQuery != NULL)
{
testQuery();
}
return getStatus();
}
GLboolean Query9::testQuery()
{
if (mQuery != NULL && getStatus() != GL_TRUE)
{
DWORD numPixels = 0;
HRESULT hres = mQuery->GetData(&numPixels, sizeof(DWORD), D3DGETDATA_FLUSH);
if (hres == S_OK)
{
setStatus(GL_TRUE);
switch (getType())
{
case GL_ANY_SAMPLES_PASSED_EXT:
case GL_ANY_SAMPLES_PASSED_CONSERVATIVE_EXT:
setResult((numPixels > 0) ? GL_TRUE : GL_FALSE);
break;
default:
ASSERT(false);
}
}
else if (checkDeviceLost(hres))
{
return error(GL_OUT_OF_MEMORY, GL_TRUE);
}
return getStatus();
}
return GL_TRUE; // prevent blocking when query is null
}
}
//
// Copyright (c) 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.
//
// Query9.h: Defines the rx::Query9 class which implements rx::QueryImpl.
#ifndef LIBGLESV2_RENDERER_QUERY9_H_
#define LIBGLESV2_RENDERER_QUERY9_H_
#include "libGLESv2/renderer/QueryImpl.h"
#include "libGLESv2/renderer/Renderer9.h"
namespace rx
{
class Query9 : public QueryImpl
{
public:
Query9(rx::Renderer9 *renderer, GLenum type);
virtual ~Query9();
void begin();
void end();
GLuint getResult();
GLboolean isResultAvailable();
private:
DISALLOW_COPY_AND_ASSIGN(Query9);
GLboolean testQuery();
rx::Renderer9 *mRenderer;
IDirect3DQuery9 *mQuery;
};
}
#endif // LIBGLESV2_RENDERER_QUERY9_H_
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment