Signed-off-by: Józef Kucia jkucia@codeweavers.com ---
For RenderDoc in Wine.
--- dlls/dxgi/adapter.c | 18 +++++++++++++++--- include/wine/winedxgi.idl | 9 +++++++++ 2 files changed, 24 insertions(+), 3 deletions(-)
diff --git a/dlls/dxgi/adapter.c b/dlls/dxgi/adapter.c index 5440f2a64517..2ebf24e9b48e 100644 --- a/dlls/dxgi/adapter.c +++ b/dlls/dxgi/adapter.c @@ -33,7 +33,8 @@ static HRESULT STDMETHODCALLTYPE dxgi_adapter_QueryInterface(IDXGIAdapter1 *ifac { TRACE("iface %p, iid %s, out %p.\n", iface, debugstr_guid(iid), out);
- if (IsEqualGUID(iid, &IID_IDXGIAdapter1) + if (IsEqualGUID(iid, &IID_IWineDXGIAdapter) + || IsEqualGUID(iid, &IID_IDXGIAdapter1) || IsEqualGUID(iid, &IID_IDXGIAdapter) || IsEqualGUID(iid, &IID_IDXGIObject) || IsEqualGUID(iid, &IID_IUnknown)) @@ -260,10 +261,21 @@ static const struct IDXGIAdapter1Vtbl dxgi_adapter_vtbl =
struct dxgi_adapter *unsafe_impl_from_IDXGIAdapter1(IDXGIAdapter1 *iface) { + IWineDXGIAdapter *wine_adapter; + struct dxgi_adapter *adapter; + HRESULT hr; + if (!iface) return NULL; - assert(iface->lpVtbl == &dxgi_adapter_vtbl); - return CONTAINING_RECORD(iface, struct dxgi_adapter, IDXGIAdapter1_iface); + if (FAILED(hr = IDXGIAdapter1_QueryInterface(iface, &IID_IWineDXGIAdapter, (void **)&wine_adapter))) + { + ERR("Failed to get IWineDXGIAdapter interface, hr %#x.\n", hr); + return NULL; + } + assert(wine_adapter->lpVtbl == (void *)&dxgi_adapter_vtbl); + adapter = CONTAINING_RECORD(wine_adapter, struct dxgi_adapter, IDXGIAdapter1_iface); + IWineDXGIAdapter_Release(wine_adapter); + return adapter; }
static void dxgi_adapter_init(struct dxgi_adapter *adapter, struct dxgi_factory *factory, UINT ordinal) diff --git a/include/wine/winedxgi.idl b/include/wine/winedxgi.idl index a4f715b60766..983cdba68d14 100644 --- a/include/wine/winedxgi.idl +++ b/include/wine/winedxgi.idl @@ -50,3 +50,12 @@ interface IWineDXGIDeviceParent : IUnknown { struct wined3d_device_parent *get_wined3d_device_parent(); } + +[ + object, + local, + uuid(17399d75-964e-4c03-99f8-9d4fd196dd62) +] +interface IWineDXGIAdapter : IDXGIAdapter1 +{ +}