[PATCH 2/5] dxgi: Implement dxgi_factory_EnumAdapterByLuid().
Józef Kucia
jkucia at codeweavers.com
Tue Jan 23 11:15:16 CST 2018
Signed-off-by: Józef Kucia <jkucia at codeweavers.com>
---
dlls/dxgi/factory.c | 34 ++++++++++++++++++++++++++++++++--
1 file changed, 32 insertions(+), 2 deletions(-)
diff --git a/dlls/dxgi/factory.c b/dlls/dxgi/factory.c
index 1c9284b343de..f38d67ccff6d 100644
--- a/dlls/dxgi/factory.c
+++ b/dlls/dxgi/factory.c
@@ -421,10 +421,40 @@ static UINT STDMETHODCALLTYPE dxgi_factory_GetCreationFlags(IDXGIFactory4 *iface
static HRESULT STDMETHODCALLTYPE dxgi_factory_EnumAdapterByLuid(IDXGIFactory4 *iface,
LUID luid, REFIID iid, void **adapter)
{
- FIXME("iface %p, luid %08x:%08x, iid %s, adapter %p stub!\n",
+ unsigned int adapter_index;
+ DXGI_ADAPTER_DESC1 desc;
+ IDXGIAdapter1 *adapter1;
+ HRESULT hr;
+
+ TRACE("iface %p, luid %08x:%08x, iid %s, adapter %p.\n",
iface, luid.HighPart, luid.LowPart, debugstr_guid(iid), adapter);
- return E_NOTIMPL;
+ adapter_index = 0;
+ while ((hr = dxgi_factory_EnumAdapters1(iface, adapter_index, &adapter1)) == S_OK)
+ {
+ if (FAILED(hr = IDXGIAdapter1_GetDesc1(adapter1, &desc)))
+ {
+ WARN("Failed to get adapter %u desc, hr %#x.\n", adapter_index, hr);
+ ++adapter_index;
+ continue;
+ }
+
+ if (desc.AdapterLuid.LowPart == luid.LowPart
+ && desc.AdapterLuid.HighPart == luid.HighPart)
+ {
+ hr = IDXGIAdapter1_QueryInterface(adapter1, iid, adapter);
+ IDXGIAdapter1_Release(adapter1);
+ return hr;
+ }
+
+ IDXGIAdapter1_Release(adapter1);
+ ++adapter_index;
+ }
+ if (hr != DXGI_ERROR_NOT_FOUND)
+ WARN("Failed to enumerate adapters, hr %#x.\n", hr);
+
+ WARN("Adapter could not be found.\n");
+ return DXGI_ERROR_NOT_FOUND;
}
static HRESULT STDMETHODCALLTYPE dxgi_factory_EnumWarpAdapter(IDXGIFactory4 *iface,
--
2.13.6
More information about the wine-devel
mailing list