Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mpc-hc/mpc-hc.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authora_afra <a_afra@users.sourceforge.net>2010-08-26 12:45:30 +0400
committera_afra <a_afra@users.sourceforge.net>2010-08-26 12:45:30 +0400
commit19dfb6049f0d4cdae1c1fecf4f30dc578cb562e5 (patch)
tree94ddb0c8aefdabd258d2de1f6419fd455e0bd33a
parent5bf8d2f2a87925290e7684828bc1eaf0043e8f02 (diff)
DetectCaps moved from DX9AllocatorPresenter to DX9RenderingEngine
git-svn-id: https://mpc-hc.svn.sourceforge.net/svnroot/mpc-hc/trunk@2353 10f7b99b-c216-0410-bff0-8a66a9350fd8
-rw-r--r--src/filters/renderer/VideoRenderers/DX9AllocatorPresenter.cpp48
-rw-r--r--src/filters/renderer/VideoRenderers/DX9AllocatorPresenter.h2
-rw-r--r--src/filters/renderer/VideoRenderers/DX9RenderingEngine.cpp32
-rw-r--r--src/filters/renderer/VideoRenderers/DX9RenderingEngine.h1
-rw-r--r--src/filters/renderer/VideoRenderers/RenderersSettings.cpp2
-rw-r--r--src/filters/renderer/VideoRenderers/RenderersSettings.h2
6 files changed, 41 insertions, 46 deletions
diff --git a/src/filters/renderer/VideoRenderers/DX9AllocatorPresenter.cpp b/src/filters/renderer/VideoRenderers/DX9AllocatorPresenter.cpp
index 100d62316..bf51b8e9c 100644
--- a/src/filters/renderer/VideoRenderers/DX9AllocatorPresenter.cpp
+++ b/src/filters/renderer/VideoRenderers/DX9AllocatorPresenter.cpp
@@ -69,7 +69,6 @@ CDX9AllocatorPresenter::CDX9AllocatorPresenter(HWND hWnd, bool bFullscreen, HRES
, m_hVSyncThread(NULL)
, m_hEvtQuit(NULL)
, m_bIsFullscreen(bFullscreen)
- , m_CurrentAdapter(0)
{
HINSTANCE hDll;
@@ -961,15 +960,16 @@ HRESULT CDX9AllocatorPresenter::CreateDevice(CString &_Error)
return hr;
}
- // Detect the capabilities of the system
- DetectCaps();
-
- // Get settings that depend on caps
- m_bForceInputHighColorResolution = s.m_RenderSettings.iEVRForceInputHighColorResolution && m_bIsEVR && renderersData->m_b10bitSupport;
+ // Get the device caps
+ ZeroMemory(&m_Caps, sizeof(m_Caps));
+ m_pD3DDev->GetDeviceCaps(&m_Caps);
- // Initialize the rendering engine
+ // Initialize the rendering engine and detect supported hardware features
InitRenderingEngine();
+ // Get settings that depend on hardware feature support
+ m_bForceInputHighColorResolution = s.m_RenderSettings.iEVRForceInputHighColorResolution && m_bIsEVR && renderersData->m_b10bitSupport;
+
CComPtr<ISubPicProvider> pSubPicProvider;
if(m_pSubPicQueue) m_pSubPicQueue->GetSubPicProvider(&pSubPicProvider);
@@ -1170,40 +1170,6 @@ DWORD CDX9AllocatorPresenter::GetVertexProcessing()
return D3DCREATE_HARDWARE_VERTEXPROCESSING;
}
-void CDX9AllocatorPresenter::DetectCaps()
-{
- HRESULT hr;
- CRenderersData* renderersData = GetRenderersData();
-
- // Get the device caps
- ZeroMemory(&m_Caps, sizeof(m_Caps));
- m_pD3DDev->GetDeviceCaps(&m_Caps);
-
- // Detect FP16 support
- renderersData->m_bFP16Support = true;
-
- hr = m_pD3D->CheckDeviceFormat(m_CurrentAdapter, D3DDEVTYPE_HAL, m_DisplayType, D3DUSAGE_DYNAMIC, D3DRTYPE_TEXTURE, D3DFMT_A16B16G16R16F);
- renderersData->m_bFP16Support &= SUCCEEDED(hr);
- hr = m_pD3D->CheckDeviceFormat(m_CurrentAdapter, D3DDEVTYPE_HAL, m_DisplayType, D3DUSAGE_RENDERTARGET, D3DRTYPE_TEXTURE, D3DFMT_A16B16G16R16F);
- renderersData->m_bFP16Support &= SUCCEEDED(hr);
- hr = m_pD3D->CheckDeviceFormat(m_CurrentAdapter, D3DDEVTYPE_HAL, m_DisplayType, D3DUSAGE_QUERY_FILTER, D3DRTYPE_TEXTURE, D3DFMT_A16B16G16R16F);
- renderersData->m_bFP16Support &= SUCCEEDED(hr);
- hr = m_pD3D->CheckDeviceFormat(m_CurrentAdapter, D3DDEVTYPE_HAL, m_DisplayType, D3DUSAGE_DYNAMIC, D3DRTYPE_VOLUMETEXTURE, D3DFMT_A16B16G16R16F);
- renderersData->m_bFP16Support &= SUCCEEDED(hr);
- hr = m_pD3D->CheckDeviceFormat(m_CurrentAdapter, D3DDEVTYPE_HAL, m_DisplayType, D3DUSAGE_QUERY_FILTER, D3DRTYPE_VOLUMETEXTURE, D3DFMT_A16B16G16R16F);
- renderersData->m_bFP16Support &= SUCCEEDED(hr);
-
- // Detect 10-bit support
- renderersData->m_b10bitSupport = true;
-
- hr = m_pD3D->CheckDeviceFormat(m_CurrentAdapter, D3DDEVTYPE_HAL, m_DisplayType, D3DUSAGE_DYNAMIC, D3DRTYPE_TEXTURE, D3DFMT_A2R10G10B10);
- renderersData->m_b10bitSupport &= SUCCEEDED(hr);
- hr = m_pD3D->CheckDeviceFormat(m_CurrentAdapter, D3DDEVTYPE_HAL, m_DisplayType, D3DUSAGE_RENDERTARGET, D3DRTYPE_TEXTURE, D3DFMT_A2R10G10B10);
- renderersData->m_b10bitSupport &= SUCCEEDED(hr);
- hr = m_pD3D->CheckDeviceFormat(m_CurrentAdapter, D3DDEVTYPE_HAL, m_DisplayType, D3DUSAGE_QUERY_FILTER, D3DRTYPE_TEXTURE, D3DFMT_A2R10G10B10);
- renderersData->m_b10bitSupport &= SUCCEEDED(hr);
-}
-
// ISubPicAllocatorPresenter
STDMETHODIMP CDX9AllocatorPresenter::CreateRenderer(IUnknown** ppRenderer)
diff --git a/src/filters/renderer/VideoRenderers/DX9AllocatorPresenter.h b/src/filters/renderer/VideoRenderers/DX9AllocatorPresenter.h
index a39dce5ec..c91bc9118 100644
--- a/src/filters/renderer/VideoRenderers/DX9AllocatorPresenter.h
+++ b/src/filters/renderer/VideoRenderers/DX9AllocatorPresenter.h
@@ -120,10 +120,8 @@ protected:
void StopWorkerThreads();
LONGLONG m_LastAdapterCheck;
- UINT m_CurrentAdapter;
UINT GetAdapter(IDirect3D9 *pD3D, bool GetAdapter = false);
DWORD GetVertexProcessing();
- void DetectCaps();
bool GetVBlank(int &_ScanLine, int &_bInVBlank, bool _bMeasureTime);
bool WaitForVBlankRange(int &_RasterStart, int _RasterEnd, bool _bWaitIfInside, bool _bNeedAccurate, bool _bMeasure, bool &_bTakenLock);
diff --git a/src/filters/renderer/VideoRenderers/DX9RenderingEngine.cpp b/src/filters/renderer/VideoRenderers/DX9RenderingEngine.cpp
index 0d612515b..098718599 100644
--- a/src/filters/renderer/VideoRenderers/DX9RenderingEngine.cpp
+++ b/src/filters/renderer/VideoRenderers/DX9RenderingEngine.cpp
@@ -157,6 +157,7 @@ CDX9RenderingEngine::CDX9RenderingEngine(HWND hWnd, HRESULT& hr, CString *_pErro
, m_ScreenSize(0, 0)
, m_nNbDXSurface(1)
, m_nCurSurface(0)
+ , m_CurrentAdapter(0)
{
HINSTANCE hDll = GetRenderersData()->GetD3X9Dll();
m_bD3DX = hDll != NULL;
@@ -169,7 +170,8 @@ CDX9RenderingEngine::CDX9RenderingEngine(HWND hWnd, HRESULT& hr, CString *_pErro
void CDX9RenderingEngine::InitRenderingEngine()
{
- m_pPSC.Attach(DNew CPixelShaderCompiler(m_pD3DDev, true));
+ HRESULT hr;
+ CRenderersData* renderersData = GetRenderersData();
// Detect supported StrechRect filter
m_StretchRectFilter = D3DTEXF_NONE;
@@ -177,6 +179,34 @@ void CDX9RenderingEngine::InitRenderingEngine()
&& (m_Caps.StretchRectFilterCaps&D3DPTFILTERCAPS_MAGFLINEAR))
m_StretchRectFilter = D3DTEXF_LINEAR;
+ // Detect FP16 support
+ renderersData->m_bFP16Support = true;
+
+ hr = m_pD3D->CheckDeviceFormat(m_CurrentAdapter, D3DDEVTYPE_HAL, m_DisplayType, D3DUSAGE_DYNAMIC, D3DRTYPE_TEXTURE, D3DFMT_A16B16G16R16F);
+ renderersData->m_bFP16Support &= SUCCEEDED(hr);
+ hr = m_pD3D->CheckDeviceFormat(m_CurrentAdapter, D3DDEVTYPE_HAL, m_DisplayType, D3DUSAGE_RENDERTARGET, D3DRTYPE_TEXTURE, D3DFMT_A16B16G16R16F);
+ renderersData->m_bFP16Support &= SUCCEEDED(hr);
+ hr = m_pD3D->CheckDeviceFormat(m_CurrentAdapter, D3DDEVTYPE_HAL, m_DisplayType, D3DUSAGE_QUERY_FILTER, D3DRTYPE_TEXTURE, D3DFMT_A16B16G16R16F);
+ renderersData->m_bFP16Support &= SUCCEEDED(hr);
+ hr = m_pD3D->CheckDeviceFormat(m_CurrentAdapter, D3DDEVTYPE_HAL, m_DisplayType, D3DUSAGE_DYNAMIC, D3DRTYPE_VOLUMETEXTURE, D3DFMT_A16B16G16R16F);
+ renderersData->m_bFP16Support &= SUCCEEDED(hr);
+ hr = m_pD3D->CheckDeviceFormat(m_CurrentAdapter, D3DDEVTYPE_HAL, m_DisplayType, D3DUSAGE_QUERY_FILTER, D3DRTYPE_VOLUMETEXTURE, D3DFMT_A16B16G16R16F);
+ renderersData->m_bFP16Support &= SUCCEEDED(hr);
+
+ // Detect 10-bit support
+ renderersData->m_b10bitSupport = true;
+
+ hr = m_pD3D->CheckDeviceFormat(m_CurrentAdapter, D3DDEVTYPE_HAL, m_DisplayType, D3DUSAGE_DYNAMIC, D3DRTYPE_TEXTURE, D3DFMT_A2R10G10B10);
+ renderersData->m_b10bitSupport &= SUCCEEDED(hr);
+ hr = m_pD3D->CheckDeviceFormat(m_CurrentAdapter, D3DDEVTYPE_HAL, m_DisplayType, D3DUSAGE_RENDERTARGET, D3DRTYPE_TEXTURE, D3DFMT_A2R10G10B10);
+ renderersData->m_b10bitSupport &= SUCCEEDED(hr);
+ hr = m_pD3D->CheckDeviceFormat(m_CurrentAdapter, D3DDEVTYPE_HAL, m_DisplayType, D3DUSAGE_QUERY_FILTER, D3DRTYPE_TEXTURE, D3DFMT_A2R10G10B10);
+ renderersData->m_b10bitSupport &= SUCCEEDED(hr);
+
+ // Initialize the pixel shader compiler
+ m_pPSC.Attach(DNew CPixelShaderCompiler(m_pD3DDev, true));
+
+ // Initialize settings
m_BicubicA = 0;
m_bFinalPass = false;
diff --git a/src/filters/renderer/VideoRenderers/DX9RenderingEngine.h b/src/filters/renderer/VideoRenderers/DX9RenderingEngine.h
index d7ac58adc..6496cc8e0 100644
--- a/src/filters/renderer/VideoRenderers/DX9RenderingEngine.h
+++ b/src/filters/renderer/VideoRenderers/DX9RenderingEngine.h
@@ -49,6 +49,7 @@ protected:
CComPtr<IDirect3D9Ex> m_pD3DEx;
CComPtr<IDirect3DDevice9> m_pD3DDev;
CComPtr<IDirect3DDevice9Ex> m_pD3DDevEx;
+ UINT m_CurrentAdapter;
D3DCAPS9 m_Caps;
D3DFORMAT m_BackbufferType;
D3DFORMAT m_DisplayType;
diff --git a/src/filters/renderer/VideoRenderers/RenderersSettings.cpp b/src/filters/renderer/VideoRenderers/RenderersSettings.cpp
index c6762348a..9b63655b9 100644
--- a/src/filters/renderer/VideoRenderers/RenderersSettings.cpp
+++ b/src/filters/renderer/VideoRenderers/RenderersSettings.cpp
@@ -36,7 +36,7 @@ CRenderersData::CRenderersData()
m_hD3DX9Dll = NULL;
m_nDXSdkRelease = 0;
- // Don't disable caps before initializing a renderer
+ // Don't disable hardware features before initializing a renderer
m_bFP16Support = true;
m_b10bitSupport = true;
}
diff --git a/src/filters/renderer/VideoRenderers/RenderersSettings.h b/src/filters/renderer/VideoRenderers/RenderersSettings.h
index cefcf2433..8ebca6af3 100644
--- a/src/filters/renderer/VideoRenderers/RenderersSettings.h
+++ b/src/filters/renderer/VideoRenderers/RenderersSettings.h
@@ -223,7 +223,7 @@ public:
bool m_bResetStats; // Set to reset the presentation statistics
CString m_strD3DX9Version;
- // Caps
+ // Hardware feature support
bool m_bFP16Support;
bool m_b10bitSupport;