diff --git a/dlls/dxgi/factory.c b/dlls/dxgi/factory.c index 39c9e10f7a4..c6acbaaf671 100644 --- a/dlls/dxgi/factory.c +++ b/dlls/dxgi/factory.c @@ -36,6 +36,7 @@ static HRESULT STDMETHODCALLTYPE dxgi_factory_QueryInterface(IWineDXGIFactory *i TRACE("iface %p, iid %s, out %p.\n", iface, debugstr_guid(iid), out); if (IsEqualGUID(iid, &IID_IWineDXGIFactory) + || IsEqualGUID(iid, &IID_IDXGIFactory6) || IsEqualGUID(iid, &IID_IDXGIFactory5) || IsEqualGUID(iid, &IID_IDXGIFactory4) || IsEqualGUID(iid, &IID_IDXGIFactory3) @@ -462,6 +463,26 @@ static HRESULT STDMETHODCALLTYPE dxgi_factory_CheckFeatureSupport(IWineDXGIFacto } } +static HRESULT STDMETHODCALLTYPE dxgi_factory_EnumAdapterByGpuPreference(IWineDXGIFactory *iface, + UINT adapter_idx, DXGI_GPU_PREFERENCE gpu_preference, REFIID iid, void **adapter) +{ + IDXGIAdapter1 *adapter_object; + HRESULT hr; + + TRACE("iface %p, adapter_idx %u, gpu_preference %#x, iid %s, adapter %p.\n", + iface, adapter_idx, gpu_preference, debugstr_guid(iid), adapter); + + if (gpu_preference != DXGI_GPU_PREFERENCE_UNSPECIFIED) + FIXME("Ignoring GPU preference %#x.\n", gpu_preference); + + if (FAILED(hr = dxgi_factory_EnumAdapters1(iface, adapter_idx, &adapter_object))) + return hr; + + hr = IDXGIAdapter1_QueryInterface(adapter_object, iid, adapter); + IDXGIAdapter1_Release(adapter_object); + return hr; +} + static const struct IWineDXGIFactoryVtbl dxgi_factory_vtbl = { dxgi_factory_QueryInterface, @@ -498,6 +519,8 @@ static const struct IWineDXGIFactoryVtbl dxgi_factory_vtbl = dxgi_factory_EnumWarpAdapter, /* IDXIGFactory5 methods */ dxgi_factory_CheckFeatureSupport, + /* IDXGIFactory6 methods */ + dxgi_factory_EnumAdapterByGpuPreference, }; struct dxgi_factory *unsafe_impl_from_IDXGIFactory(IDXGIFactory *iface) diff --git a/include/wine/winedxgi.idl b/include/wine/winedxgi.idl index 070ac2fddaa..95c99b25355 100644 --- a/include/wine/winedxgi.idl +++ b/include/wine/winedxgi.idl @@ -89,6 +89,6 @@ interface IWineDXGIAdapter : IDXGIAdapter4 local, uuid(ea02a0d1-4c95-488a-a82c-6034621e8c4f) ] -interface IWineDXGIFactory : IDXGIFactory5 +interface IWineDXGIFactory : IDXGIFactory6 { }