Module: wine Branch: master Commit: de28d86057764efa2d8eaf35552449e734f2cd7a URL: https://source.winehq.org/git/wine.git/?a=commit;h=de28d86057764efa2d8eaf355...
Author: Józef Kucia jkucia@codeweavers.com Date: Fri Jan 26 22:09:02 2018 +0100
dxgi: Allow wrapping adapter objects.
Signed-off-by: Józef Kucia jkucia@codeweavers.com Signed-off-by: Henri Verbeet hverbeet@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
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 5440f2a..2ebf24e 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 a4f715b..983cdba 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 +{ +}