[PATCH 2/2] dxgi: Implement IDXGIFactory6 and IDXGIFactory7.

Zhiyi Zhang zzhang at codeweavers.com
Tue May 12 22:15:53 CDT 2020



On 5/13/20 8:08 AM, Philip Rebohle wrote:
> The D3D12 game "Delores: A Thimbleweed Park Mini-Adventure"
> requires at least IDXGIFactory6 to be supported.
>
> Signed-off-by: Philip Rebohle <philip.rebohle at tu-dortmund.de>
> ---
>  dlls/dxgi/factory.c       | 40 +++++++++++++++++++++++++++++++++++++++
>  include/wine/winedxgi.idl |  2 +-
>  2 files changed, 41 insertions(+), 1 deletion(-)
>
> diff --git a/dlls/dxgi/factory.c b/dlls/dxgi/factory.c
> index 39c9e10f7a4..25370e818b9 100644
> --- a/dlls/dxgi/factory.c
> +++ b/dlls/dxgi/factory.c
> @@ -36,6 +36,8 @@ static HRESULT STDMETHODCALLTYPE dxgi_factory_QueryInterface(IWineDXGIFactory *i
>      TRACE("iface %p, iid %s, out %p.\n", iface, debugstr_guid(iid), out);
>  
>      if (IsEqualGUID(iid, &IID_IWineDXGIFactory)
> +            || IsEqualGUID(iid, &IID_IDXGIFactory7)
> +            || IsEqualGUID(iid, &IID_IDXGIFactory6)
>              || IsEqualGUID(iid, &IID_IDXGIFactory5)
>              || IsEqualGUID(iid, &IID_IDXGIFactory4)
>              || IsEqualGUID(iid, &IID_IDXGIFactory3)
> @@ -462,6 +464,39 @@ static HRESULT STDMETHODCALLTYPE dxgi_factory_CheckFeatureSupport(IWineDXGIFacto
>      }
>  }
>  
> +static HRESULT STDMETHODCALLTYPE dxgi_factory_EnumAdapterByGpuPreference(IWineDXGIFactory *iface,
> +        UINT adapter_idx, DXGI_GPU_PREFERENCE gpu_preference, REFIID iid, void **adapter)
> +{
> +    IDXGIAdapter1 *adapter_object;
> +    HRESULT hr;
Please add a trace here.
> +
> +    if (gpu_preference != DXGI_GPU_PREFERENCE_UNSPECIFIED)
> +        FIXME("Ignoring GPU preference %#x.\n", gpu_preference);
> +
> +    if (FAILED(hr = dxgi_factory_EnumAdapters1(iface, adapter_idx, &adapter_object)))
> +        return hr;
> +
> +    hr = IDXGIAdapter1_QueryInterface(adapter_object, iid, adapter);
> +    IDXGIAdapter1_Release(adapter_object);
> +    return hr;
> +}
> +
> +static HRESULT STDMETHODCALLTYPE dxgi_factory_RegisterAdaptersChangedEvent(IWineDXGIFactory *iface,
> +        HANDLE event, DWORD *cookie)
> +{
> +    FIXME("iface %p, event %p, cookie %p stub!\n", iface, event, cookie);
> +
> +    return E_NOTIMPL;
> +}
> +
> +static HRESULT STDMETHODCALLTYPE dxgi_factory_UnregisterAdaptersChangedEvent(IWineDXGIFactory *iface,
> +        DWORD cookie)
> +{
> +    FIXME("iface %p, cookie %#x stub!\n", iface, cookie);
> +
> +    return E_NOTIMPL;
> +}
> +
>  static const struct IWineDXGIFactoryVtbl dxgi_factory_vtbl =
>  {
>      dxgi_factory_QueryInterface,
> @@ -498,6 +533,11 @@ static const struct IWineDXGIFactoryVtbl dxgi_factory_vtbl =
>      dxgi_factory_EnumWarpAdapter,
>      /* IDXIGFactory5 methods */
>      dxgi_factory_CheckFeatureSupport,
> +    /* IDXIGFactory6 methods */
> +    dxgi_factory_EnumAdapterByGpuPreference,
> +    /* IDXIGFactory7 methods */
> +    dxgi_factory_RegisterAdaptersChangedEvent,
> +    dxgi_factory_UnregisterAdaptersChangedEvent,
As I said. It would better to split it.

Thanks,
Zhiyi
>  };
>  
>  struct dxgi_factory *unsafe_impl_from_IDXGIFactory(IDXGIFactory *iface)
> diff --git a/include/wine/winedxgi.idl b/include/wine/winedxgi.idl
> index 070ac2fddaa..83012047ea7 100644
> --- a/include/wine/winedxgi.idl
> +++ b/include/wine/winedxgi.idl
> @@ -89,6 +89,6 @@ interface IWineDXGIAdapter : IDXGIAdapter4
>      local,
>      uuid(ea02a0d1-4c95-488a-a82c-6034621e8c4f)
>  ]
> -interface IWineDXGIFactory : IDXGIFactory5
> +interface IWineDXGIFactory : IDXGIFactory7
>  {
>  }




More information about the wine-devel mailing list