From c07f8c941ce31ce4ae6c01a81367cae9e1b919c6 Mon Sep 17 00:00:00 2001 From: Joshua Ashton Date: Fri, 28 Feb 2020 00:59:44 +0000 Subject: [PATCH] [d3d9] Delegate VCACHE check to QuerySupported Fixes a failing Wine test --- src/d3d9/d3d9_device.cpp | 2 +- src/d3d9/d3d9_query.cpp | 10 ++++++---- src/d3d9/d3d9_query.h | 2 +- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/d3d9/d3d9_device.cpp b/src/d3d9/d3d9_device.cpp index 5a24bde0..71c68a12 100644 --- a/src/d3d9/d3d9_device.cpp +++ b/src/d3d9/d3d9_device.cpp @@ -3159,7 +3159,7 @@ namespace dxvk { HRESULT STDMETHODCALLTYPE D3D9DeviceEx::CreateQuery(D3DQUERYTYPE Type, IDirect3DQuery9** ppQuery) { InitReturnPtr(ppQuery); - HRESULT hr = D3D9Query::QuerySupported(Type); + HRESULT hr = D3D9Query::QuerySupported(this, Type); if (ppQuery == nullptr || hr != D3D_OK) return hr; diff --git a/src/d3d9/d3d9_query.cpp b/src/d3d9/d3d9_query.cpp index 301295ec..8ebd2e3b 100644 --- a/src/d3d9/d3d9_query.cpp +++ b/src/d3d9/d3d9_query.cpp @@ -13,9 +13,7 @@ namespace dxvk { Rc dxvkDevice = m_parent->GetDXVKDevice(); switch (m_queryType) { - case D3DQUERYTYPE_VCACHE: - if (!pDevice->GetOptions()->supportVCache) - throw DxvkError(str::format("D3D9Query: Unsupported query type ", m_queryType, " (from d3d9.supportVCache)")); + case D3DQUERYTYPE_VCACHE: break; case D3DQUERYTYPE_EVENT: @@ -293,9 +291,13 @@ namespace dxvk { } - HRESULT D3D9Query::QuerySupported(D3DQUERYTYPE QueryType) { + HRESULT D3D9Query::QuerySupported(D3D9DeviceEx* pDevice, D3DQUERYTYPE QueryType) { switch (QueryType) { case D3DQUERYTYPE_VCACHE: + if (!pDevice->GetOptions()->supportVCache) + return D3DERR_NOTAVAILABLE; + + return D3D_OK; case D3DQUERYTYPE_EVENT: case D3DQUERYTYPE_OCCLUSION: case D3DQUERYTYPE_TIMESTAMP: diff --git a/src/d3d9/d3d9_query.h b/src/d3d9/d3d9_query.h index b53d5531..ac6611e4 100644 --- a/src/d3d9/d3d9_query.h +++ b/src/d3d9/d3d9_query.h @@ -48,7 +48,7 @@ namespace dxvk { static bool QueryBeginnable(D3DQUERYTYPE QueryType); static bool QueryEndable(D3DQUERYTYPE QueryType); - static HRESULT QuerySupported(D3DQUERYTYPE QueryType); + static HRESULT QuerySupported(D3D9DeviceEx* pDevice, D3DQUERYTYPE QueryType); bool IsEvent() const { return m_queryType == D3DQUERYTYPE_EVENT;