From: Conor McCarthy Subject: [PATCH v4 5/5] dxgi: Add a function to IWineDXGIAdapter to receive external memory usage info. Message-Id: <20191204141118.27501-5-cmccarthy@codeweavers.com> Date: Thu, 5 Dec 2019 00:11:18 +1000 In-Reply-To: <20191204141118.27501-1-cmccarthy@codeweavers.com> References: <20191204141118.27501-1-cmccarthy@codeweavers.com> For use by future patched vkd3d and Wine d3d12 modules. Signed-off-by: Conor McCarthy --- dlls/dxgi/adapter.c | 13 +++++++++++++ dlls/wined3d/directx.c | 21 +++++++++++++++++++++ dlls/wined3d/wined3d.spec | 1 + include/wine/wined3d.h | 2 ++ include/wine/winedxgi.idl | 4 ++++ 5 files changed, 41 insertions(+) diff --git a/dlls/dxgi/adapter.c b/dlls/dxgi/adapter.c index d7afad62..f6410f44 100644 --- a/dlls/dxgi/adapter.c +++ b/dlls/dxgi/adapter.c @@ -409,6 +409,18 @@ static HRESULT STDMETHODCALLTYPE dxgi_adapter_get_adapter_info(IWineDXGIAdapter return hr; } +static void STDMETHODCALLTYPE dxgi_adapter_update_memory_usage(IWineDXGIAdapter *iface, + unsigned int non_local, INT64 bytes_added) +{ + struct dxgi_adapter *adapter = impl_from_IWineDXGIAdapter(iface); + + TRACE("iface %p, non-local %u, bytes added 0x%s.\n", iface, non_local, + wine_dbgstr_longlong(bytes_added)); + + wined3d_update_adapter_memory_usage(adapter->factory->wined3d, adapter->ordinal, + non_local ? WINED3D_ADAPTER_MEMORY_NON_LOCAL : WINED3D_ADAPTER_MEMORY_LOCAL, bytes_added); +} + static const struct IWineDXGIAdapterVtbl dxgi_adapter_vtbl = { dxgi_adapter_QueryInterface, @@ -437,6 +449,7 @@ static const struct IWineDXGIAdapterVtbl dxgi_adapter_vtbl = dxgi_adapter_GetDesc3, /* IWineDXGIAdapter methods */ dxgi_adapter_get_adapter_info, + dxgi_adapter_update_memory_usage, }; struct dxgi_adapter *unsafe_impl_from_IDXGIAdapter(IDXGIAdapter *iface) diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c index 4625009c..7011f737 100644 --- a/dlls/wined3d/directx.c +++ b/dlls/wined3d/directx.c @@ -1400,6 +1400,27 @@ fail: return WINED3DERR_INVALIDCALL; } +void CDECL wined3d_update_adapter_memory_usage(const struct wined3d *wined3d, unsigned int adapter_idx, + enum wined3d_adapter_memory_type type, INT64 bytes_added) +{ + struct wined3d_adapter *adapter; + + wined3d_mutex_lock(); + + if (adapter_idx >= wined3d->adapter_count || type >= ARRAY_SIZE(adapter->memory_usage)) + { + ERR("Invalid call.\n"); + goto done; + } + + adapter = wined3d->adapters[adapter_idx]; + + adapter_adjust_memory(adapter, type, bytes_added); + +done: + wined3d_mutex_unlock(); +} + HRESULT CDECL wined3d_get_adapter_memory_info(const struct wined3d *wined3d, unsigned int adapter_idx, enum wined3d_adapter_memory_type type, struct wined3d_adapter_memory_info *info) { diff --git a/dlls/wined3d/wined3d.spec b/dlls/wined3d/wined3d.spec index 17cfed9c..07a59ec3 100644 --- a/dlls/wined3d/wined3d.spec +++ b/dlls/wined3d/wined3d.spec @@ -27,6 +27,7 @@ @ cdecl wined3d_set_adapter_display_mode(ptr long ptr) @ cdecl wined3d_set_adapter_reserved_memory(ptr long long int64); @ cdecl wined3d_unregister_adapter_memory_event(ptr long long); +@ cdecl wined3d_update_adapter_memory_usage(ptr long long int64); @ cdecl wined3d_unregister_windows(ptr) @ cdecl wined3d_blend_state_create(ptr ptr ptr ptr ptr) diff --git a/include/wine/wined3d.h b/include/wine/wined3d.h index 30c97492..e584d763 100644 --- a/include/wine/wined3d.h +++ b/include/wine/wined3d.h @@ -2241,6 +2241,8 @@ HRESULT __cdecl wined3d_set_adapter_reserved_memory(const struct wined3d *wined3 enum wined3d_adapter_memory_type type, UINT64 reservation); HRESULT __cdecl wined3d_unregister_adapter_memory_event(const struct wined3d *wined3d, unsigned int adapter_idx, DWORD cookie); +void __cdecl wined3d_update_adapter_memory_usage(const struct wined3d *wined3d, unsigned int adapter_idx, + enum wined3d_adapter_memory_type type, INT64 bytes_added); void __cdecl wined3d_unregister_windows(struct wined3d *wined3d); HRESULT __cdecl wined3d_buffer_create(struct wined3d_device *device, const struct wined3d_buffer_desc *desc, diff --git a/include/wine/winedxgi.idl b/include/wine/winedxgi.idl index 070ac2fd..fbc224a9 100644 --- a/include/wine/winedxgi.idl +++ b/include/wine/winedxgi.idl @@ -82,6 +82,10 @@ struct wine_dxgi_adapter_info interface IWineDXGIAdapter : IDXGIAdapter4 { HRESULT get_adapter_info([out] struct wine_dxgi_adapter_info *info); + void update_memory_usage( + [in] unsigned int non_local, + [in] INT64 bytes_added + ); } [ -- 2.24.0