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>
This commit is contained in:
Józef Kucia 2018-01-26 22:09:02 +01:00 committed by Alexandre Julliard
parent 1d0ba302d9
commit de28d86057
2 changed files with 24 additions and 3 deletions

View File

@ -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)

View File

@ -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
{
}