Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Fix for the hang after close caused by my previews perf queries commit.
Sorry for that.
fix issue 6205
  • Loading branch information
Tinob committed Apr 4, 2013
1 parent e11f563 commit d032f3f
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 12 deletions.
21 changes: 15 additions & 6 deletions Source/Plugins/Plugin_VideoDX9/Src/PerfQuery.cpp
Expand Up @@ -8,15 +8,24 @@ namespace DX9 {
PerfQuery::PerfQuery()
: m_query_read_pos()
, m_query_count()
{

}

PerfQuery::~PerfQuery()
{

}

void PerfQuery::CreateDeviceObjects()
{
for (int i = 0; i != ARRAYSIZE(m_query_buffer); ++i)
{
D3D::dev->CreateQuery(D3DQUERYTYPE_OCCLUSION, &m_query_buffer[i].query);
}
ResetQuery();
}

PerfQuery::~PerfQuery()
void PerfQuery::DestroyDeviceObjects()
{
for (int i = 0; i != ARRAYSIZE(m_query_buffer); ++i)
{
Expand Down Expand Up @@ -91,7 +100,7 @@ void PerfQuery::FlushOne()
{
auto& entry = m_query_buffer[m_query_read_pos];

UINT64 result = 0;
DWORD result = 0;
HRESULT hr = S_FALSE;
while (hr != S_OK && hr != D3DERR_DEVICELOST)
{
Expand All @@ -100,7 +109,7 @@ void PerfQuery::FlushOne()
}

// NOTE: Reported pixel metrics should be referenced to native resolution
m_results[entry.query_type] += (u64)result * EFB_WIDTH / g_renderer->GetTargetWidth() * EFB_HEIGHT / g_renderer->GetTargetHeight();
m_results[entry.query_type] += (u32)((u64)result * EFB_WIDTH / g_renderer->GetTargetWidth() * EFB_HEIGHT / g_renderer->GetTargetHeight());

m_query_read_pos = (m_query_read_pos + 1) % ARRAYSIZE(m_query_buffer);
--m_query_count;
Expand All @@ -119,13 +128,13 @@ void PerfQuery::WeakFlush()
{
auto& entry = m_query_buffer[m_query_read_pos];

UINT64 result = 0;
DWORD result = 0;
HRESULT hr = entry.query->GetData(&result, sizeof(result), 0);

if (hr == S_OK)
{
// NOTE: Reported pixel metrics should be referenced to native resolution
m_results[entry.query_type] += (u64)result * EFB_WIDTH / g_renderer->GetTargetWidth() * EFB_HEIGHT / g_renderer->GetTargetHeight();
m_results[entry.query_type] += (u32)((u64)result * EFB_WIDTH / g_renderer->GetTargetWidth() * EFB_HEIGHT / g_renderer->GetTargetHeight());

m_query_read_pos = (m_query_read_pos + 1) % ARRAYSIZE(m_query_buffer);
--m_query_count;
Expand Down
5 changes: 3 additions & 2 deletions Source/Plugins/Plugin_VideoDX9/Src/PerfQuery.h
Expand Up @@ -17,6 +17,8 @@ class PerfQuery : public PerfQueryBase
u32 GetQueryResult(PerfQueryType type);
void FlushResults();
bool IsFlushed() const;
void CreateDeviceObjects();
void DestroyDeviceObjects();

private:
struct ActiveQuery
Expand All @@ -25,8 +27,7 @@ class PerfQuery : public PerfQueryBase
PerfQueryGroup query_type;
};

void WeakFlush();

void WeakFlush();
// Only use when non-empty
void FlushOne();

Expand Down
4 changes: 2 additions & 2 deletions Source/Plugins/Plugin_VideoDX9/Src/Render.cpp
Expand Up @@ -88,7 +88,7 @@ void SetupDeviceObjects()
VertexShaderCache::Init();
PixelShaderCache::Init();
g_vertex_manager->CreateDeviceObjects();
g_perf_query = new PerfQuery;
((PerfQuery*)g_perf_query)->CreateDeviceObjects();
// Texture cache will recreate themselves over time.
}

Expand All @@ -101,7 +101,7 @@ void TeardownDeviceObjects()
D3D::dev->SetRenderTarget(0, D3D::GetBackBufferSurface());
D3D::dev->SetDepthStencilSurface(D3D::GetBackBufferDepthSurface());
delete g_framebuffer_manager;
delete g_perf_query;
((PerfQuery*)g_perf_query)->DestroyDeviceObjects();
D3D::font.Shutdown();
TextureCache::Invalidate();
VertexLoaderManager::Shutdown();
Expand Down
6 changes: 4 additions & 2 deletions Source/Plugins/Plugin_VideoDX9/Src/main.cpp
Expand Up @@ -57,6 +57,7 @@

#include "ConfigManager.h"
#include "VideoBackend.h"
#include "PerfQuery.h"

namespace DX9
{
Expand Down Expand Up @@ -176,8 +177,9 @@ void VideoBackend::Video_Prepare()

// internal interfaces
g_vertex_manager = new VertexManager;
g_perf_query = new PerfQuery;
g_renderer = new Renderer;
g_texture_cache = new TextureCache;
g_texture_cache = new TextureCache;
// VideoCommon
BPInit();
Fifo_Init();
Expand Down Expand Up @@ -215,9 +217,9 @@ void VideoBackend::Shutdown()
// internal interfaces
PixelShaderCache::Shutdown();
VertexShaderCache::Shutdown();
delete g_perf_query;
delete g_texture_cache;
delete g_renderer;
delete g_perf_query;
delete g_vertex_manager;
g_renderer = NULL;
g_texture_cache = NULL;
Expand Down

0 comments on commit d032f3f

Please sign in to comment.