summaryrefslogtreecommitdiffstats
path: root/contrib
diff options
context:
space:
mode:
authoragalin89 <[email protected]>2020-10-04 21:42:13 +0100
committerScott <[email protected]>2020-10-04 22:46:57 +0100
commit7d233da7d69a2ddaae8df4fe949c255ef948e285 (patch)
tree30c395d9ca64024dccc9e482446996b89f5da409 /contrib
parentebdfb00a430168ae09f8612767847004706a9281 (diff)
qsv: switched to the IDXGIFactory2 interface
Diffstat (limited to 'contrib')
-rw-r--r--contrib/libmfx/A00-fix-dummy-session.patch236
1 files changed, 203 insertions, 33 deletions
diff --git a/contrib/libmfx/A00-fix-dummy-session.patch b/contrib/libmfx/A00-fix-dummy-session.patch
index 9e0081d99..7aaa3a6dc 100644
--- a/contrib/libmfx/A00-fix-dummy-session.patch
+++ b/contrib/libmfx/A00-fix-dummy-session.patch
@@ -1,33 +1,203 @@
-diff --git a/src/mfx_dispatcher.cpp b/src/mfx_dispatcher.cpp
-index 163f53e..0365057 100644
---- a/src/mfx_dispatcher.cpp
-+++ b/src/mfx_dispatcher.cpp
-@@ -354,27 +354,7 @@ static mfxStatus InitDummySession(mfxU32 adapter_n, MFXVideoSession & dummy_sess
- initPar.Version.Major = 1;
- initPar.Version.Minor = 0;
-
-- switch (adapter_n)
-- {
-- case 0:
-- initPar.Implementation = MFX_IMPL_HARDWARE;
-- break;
-- case 1:
-- initPar.Implementation = MFX_IMPL_HARDWARE2;
-- break;
-- case 2:
-- initPar.Implementation = MFX_IMPL_HARDWARE3;
-- break;
-- case 3:
-- initPar.Implementation = MFX_IMPL_HARDWARE4;
-- break;
--
-- default:
-- // try searching on all display adapters
-- initPar.Implementation = MFX_IMPL_HARDWARE_ANY;
-- break;
-- }
--
-+ initPar.Implementation = MFX_IMPL_HARDWARE_ANY;
- initPar.Implementation |= MFX_IMPL_VIA_D3D11;
-
- return dummy_session.InitEx(initPar); \ No newline at end of file
+diff --git a/src/mfx_dispatcher.cpp b/src/mfx_dispatcher.cpp
+index 163f53e..6ffa595 100644
+--- a/src/mfx_dispatcher.cpp
++++ b/src/mfx_dispatcher.cpp
+@@ -354,27 +354,28 @@ static mfxStatus InitDummySession(mfxU32 adapter_n, MFXVideoSession & dummy_sess
+ initPar.Version.Major = 1;
+ initPar.Version.Minor = 0;
+
+- switch (adapter_n)
+- {
+- case 0:
+- initPar.Implementation = MFX_IMPL_HARDWARE;
+- break;
+- case 1:
+- initPar.Implementation = MFX_IMPL_HARDWARE2;
+- break;
+- case 2:
+- initPar.Implementation = MFX_IMPL_HARDWARE3;
+- break;
+- case 3:
+- initPar.Implementation = MFX_IMPL_HARDWARE4;
+- break;
+-
+- default:
+- // try searching on all display adapters
+- initPar.Implementation = MFX_IMPL_HARDWARE_ANY;
+- break;
+- }
+-
++ // switch (adapter_n)
++ // {
++ // case 0:
++ // initPar.Implementation = MFX_IMPL_HARDWARE;
++ // break;
++ // case 1:
++ // initPar.Implementation = MFX_IMPL_HARDWARE2;
++ // break;
++ // case 2:
++ // initPar.Implementation = MFX_IMPL_HARDWARE3;
++ // break;
++ // case 3:
++ // initPar.Implementation = MFX_IMPL_HARDWARE4;
++ // break;
++
++ // default:
++ // // try searching on all display adapters
++ // initPar.Implementation = MFX_IMPL_HARDWARE_ANY;
++ // break;
++ // }
++
++ initPar.Implementation = MFX_IMPL_HARDWARE_ANY;
+ initPar.Implementation |= MFX_IMPL_VIA_D3D11;
+
+ return dummy_session.InitEx(initPar);
+@@ -449,7 +450,10 @@ static inline bool QueryAdapterInfo(mfxU32 adapter_n, mfxU32& VendorID, mfxU32&
+ {
+ MFX::DXVA2Device dxvaDevice;
+
+- if (!dxvaDevice.InitD3D9(adapter_n) && !dxvaDevice.InitDXGI1(adapter_n))
++ //if (!dxvaDevice.InitD3D9(adapter_n) && !dxvaDevice.InitDXGI1(adapter_n))
++ // return false;
++
++ if (!dxvaDevice.InitDXGI1(adapter_n))
+ return false;
+
+ VendorID = dxvaDevice.GetVendorID();
+diff --git a/src/mfx_dxva2_device.cpp b/src/mfx_dxva2_device.cpp
+index 9935574..f2c98db 100644
+--- a/src/mfx_dxva2_device.cpp
++++ b/src/mfx_dxva2_device.cpp
+@@ -22,6 +22,7 @@
+ #define INITGUID
+ #include <d3d9.h>
+ #include <dxgi.h>
++#include <dxgi1_2.h>
+
+ #include "mfx_dxva2_device.h"
+
+@@ -286,8 +287,8 @@ HRESULT (WINAPI *DXGICreateFactoryFunc) (REFIID riid, void **ppFactory);
+
+ DXGI1Device::DXGI1Device(void)
+ {
+- m_pDXGIFactory1 = (void *) 0;
+- m_pDXGIAdapter1 = (void *) 0;
++ m_pDXGIFactory2 = (void *) 0;
++ m_pDXGIAdapter2 = (void *) 0;
+
+ } // DXGI1Device::DXGI1Device(void)
+
+@@ -300,18 +301,18 @@ DXGI1Device::~DXGI1Device(void)
+ void DXGI1Device::Close(void)
+ {
+ // release the interfaces
+- if (m_pDXGIAdapter1)
++ if (m_pDXGIAdapter2)
+ {
+- ((IDXGIAdapter1 *) m_pDXGIAdapter1)->Release();
++ ((IDXGIAdapter2 *) m_pDXGIAdapter2)->Release();
+ }
+
+- if (m_pDXGIFactory1)
++ if (m_pDXGIFactory2)
+ {
+- ((IDXGIFactory1 *) m_pDXGIFactory1)->Release();
++ ((IDXGIFactory2 *) m_pDXGIFactory2)->Release();
+ }
+
+- m_pDXGIFactory1 = (void *) 0;
+- m_pDXGIAdapter1 = (void *) 0;
++ m_pDXGIFactory2 = (void *) 0;
++ m_pDXGIAdapter2 = (void *) 0;
+
+ } // void DXGI1Device::Close(void)
+
+@@ -320,9 +321,9 @@ bool DXGI1Device::Init(const mfxU32 adapterNum)
+ // release the object before initialization
+ Close();
+
+- IDXGIFactory1 *pFactory = NULL;
+- IDXGIAdapter1 *pAdapter = NULL;
+- DXGI_ADAPTER_DESC1 desc = { 0 };
++ IDXGIFactory2 *pFactory = NULL;
++ IDXGIAdapter2 *pAdapter = NULL;
++ DXGI_ADAPTER_DESC2 desc = { 0 };
+ mfxU32 curAdapter = 0;
+ mfxU32 maxAdapters = 0;
+ HRESULT hRes = E_FAIL;
+@@ -338,7 +339,7 @@ bool DXGI1Device::Init(const mfxU32 adapterNum)
+ if (m_hModule)
+ {
+ // load address of procedure to create DXGI 1.1 factory
+- pFunc = (DXGICreateFactoryFunc)GetProcAddress(m_hModule, "CreateDXGIFactory1");
++ pFunc = (DXGICreateFactoryFunc)GetProcAddress(m_hModule, "CreateDXGIFactory");
+ }
+
+ if (NULL == pFunc)
+@@ -348,16 +349,16 @@ bool DXGI1Device::Init(const mfxU32 adapterNum)
+
+ // create the factory
+ #if _MSC_VER >= 1400
+- hRes = pFunc(__uuidof(IDXGIFactory1), (void**)(&pFactory));
++ hRes = pFunc(__uuidof(IDXGIFactory2), (void**)(&pFactory));
+ #else
+- hRes = pFunc(IID_IDXGIFactory1, (void**)(&pFactory));
++ hRes = pFunc(IID_IDXGIFactory2, (void**)(&pFactory));
+ #endif
+
+ if (FAILED(hRes))
+ {
+ return false;
+ }
+- m_pDXGIFactory1 = pFactory;
++ m_pDXGIFactory2 = pFactory;
+
+ // get the number of adapters
+ curAdapter = 0;
+@@ -365,7 +366,7 @@ bool DXGI1Device::Init(const mfxU32 adapterNum)
+ do
+ {
+ // get the required adapted
+- hRes = pFactory->EnumAdapters1(curAdapter, &pAdapter);
++ hRes = pFactory->EnumAdapters(curAdapter, (IDXGIAdapter **)&pAdapter);
+ if (FAILED(hRes))
+ {
+ break;
+@@ -374,7 +375,7 @@ bool DXGI1Device::Init(const mfxU32 adapterNum)
+ // if it is the required adapter, save the interface
+ if (curAdapter == adapterNum)
+ {
+- m_pDXGIAdapter1 = pAdapter;
++ m_pDXGIAdapter2 = pAdapter;
+ }
+ else
+ {
+@@ -392,10 +393,10 @@ bool DXGI1Device::Init(const mfxU32 adapterNum)
+ {
+ return false;
+ }
+- pAdapter = (IDXGIAdapter1 *) m_pDXGIAdapter1;
++ pAdapter = (IDXGIAdapter2 *) m_pDXGIAdapter2;
+
+ // get the adapter's parameters
+- hRes = pAdapter->GetDesc1(&desc);
++ hRes = pAdapter->GetDesc2(&desc);
+ if (FAILED(hRes))
+ {
+ return false;
+diff --git a/src/mfx_dxva2_device.h b/src/mfx_dxva2_device.h
+index f35e76c..7e87fc2 100644
+--- a/src/mfx_dxva2_device.h
++++ b/src/mfx_dxva2_device.h
+@@ -164,9 +164,9 @@ public:
+ protected:
+
+ // Pointer to the DXGI1 factory
+- void *m_pDXGIFactory1;
++ void *m_pDXGIFactory2;
+ // Pointer to the current DXGI1 adapter
+- void *m_pDXGIAdapter1;
++ void *m_pDXGIAdapter2;
+
+ };
+ #endif // #if defined(_WIN32) || defined(_WIN64) || defined(__CYGWIN__)