From c3cb2e6caae16330eab1c0f696f8973e827c6dd3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B3zef=20Kucia?= Date: Tue, 23 Jan 2018 18:15:16 +0100 Subject: [PATCH] dxgi: Implement dxgi_factory_EnumAdapterByLuid(). MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Józef Kucia Signed-off-by: Henri Verbeet Signed-off-by: Alexandre Julliard --- 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 1c9284b343d..f38d67ccff6 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,