[PATCH v2 1/7] wined3d: Add extra memory management fields to struct wined3d_adapter.

Conor McCarthy cmccarthy at codeweavers.com
Thu Nov 14 07:48:25 CST 2019


Signed-off-by: Conor McCarthy <cmccarthy at codeweavers.com>
---
 dlls/wined3d/adapter_gl.c      |  4 +++-
 dlls/wined3d/adapter_vk.c      |  4 +++-
 dlls/wined3d/device.c          |  6 +++---
 dlls/wined3d/directx.c         | 11 +++++++----
 dlls/wined3d/wined3d_private.h | 10 +++++++++-
 5 files changed, 25 insertions(+), 10 deletions(-)

diff --git a/dlls/wined3d/adapter_gl.c b/dlls/wined3d/adapter_gl.c
index 7018c6da..2cc6aaf9 100644
--- a/dlls/wined3d/adapter_gl.c
+++ b/dlls/wined3d/adapter_gl.c
@@ -3881,7 +3881,9 @@ static BOOL wined3d_adapter_init_gl_caps(struct wined3d_adapter *adapter,
     TRACE("Reporting (fake) driver version 0x%08x-0x%08x.\n",
             driver_info->version_high, driver_info->version_low);
 
-    adapter->vram_bytes_used = 0;
+    memset(&adapter->memory_usage, 0, sizeof(adapter->memory_usage));
+    adapter->memory_events = NULL;
+    adapter->event_count = 0;
     TRACE("Emulating 0x%s bytes of video ram.\n", wine_dbgstr_longlong(driver_info->vram_bytes));
 
     if (gl_info->supported[EXT_MEMORY_OBJECT])
diff --git a/dlls/wined3d/adapter_vk.c b/dlls/wined3d/adapter_vk.c
index 21163a20..81526ade 100644
--- a/dlls/wined3d/adapter_vk.c
+++ b/dlls/wined3d/adapter_vk.c
@@ -1180,7 +1180,9 @@ static BOOL wined3d_adapter_vk_init(struct wined3d_adapter_vk *adapter_vk,
     VK_CALL(vkGetPhysicalDeviceMemoryProperties(adapter_vk->physical_device, &memory_properties));
 
     adapter_vk_init_driver_info(adapter, &properties2.properties, &memory_properties);
-    adapter->vram_bytes_used = 0;
+    memset(&adapter->memory_usage, 0, sizeof(adapter->memory_usage));
+    adapter->memory_events = NULL;
+    adapter->event_count = 0;
     TRACE("Emulating 0x%s bytes of video ram.\n", wine_dbgstr_longlong(adapter->driver_info.vram_bytes));
 
     memcpy(&adapter->driver_uuid, id_properties.driverUUID, sizeof(adapter->driver_uuid));
diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
index 2a4d3778..3f525e8e 100644
--- a/dlls/wined3d/device.c
+++ b/dlls/wined3d/device.c
@@ -1202,10 +1202,10 @@ UINT CDECL wined3d_device_get_available_texture_mem(const struct wined3d_device
 
     TRACE("Emulating 0x%s bytes. 0x%s used, returning 0x%s left.\n",
             wine_dbgstr_longlong(driver_info->vram_bytes),
-            wine_dbgstr_longlong(device->adapter->vram_bytes_used),
-            wine_dbgstr_longlong(driver_info->vram_bytes - device->adapter->vram_bytes_used));
+            wine_dbgstr_longlong(device->adapter->memory_usage[0].bytes_used),
+            wine_dbgstr_longlong(driver_info->vram_bytes - device->adapter->memory_usage[0].bytes_used));
 
-    return min(UINT_MAX, driver_info->vram_bytes - device->adapter->vram_bytes_used);
+    return min(UINT_MAX, driver_info->vram_bytes - device->adapter->memory_usage[0].bytes_used);
 }
 
 void CDECL wined3d_device_set_stream_output(struct wined3d_device *device, UINT idx,
diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c
index 902cc444..fa991d36 100644
--- a/dlls/wined3d/directx.c
+++ b/dlls/wined3d/directx.c
@@ -146,16 +146,17 @@ static HRESULT wined3d_output_init(struct wined3d_output *output, const WCHAR *d
 /* Adjust the amount of used texture memory */
 UINT64 adapter_adjust_memory(struct wined3d_adapter *adapter, INT64 amount)
 {
-    adapter->vram_bytes_used += amount;
+    adapter->memory_usage[0].bytes_used += amount;
     TRACE("Adjusted used adapter memory by 0x%s to 0x%s.\n",
             wine_dbgstr_longlong(amount),
-            wine_dbgstr_longlong(adapter->vram_bytes_used));
-    return adapter->vram_bytes_used;
+            wine_dbgstr_longlong(adapter->memory_usage[0].bytes_used));
+    return adapter->memory_usage[0].bytes_used;
 }
 
 void wined3d_adapter_cleanup(struct wined3d_adapter *adapter)
 {
     wined3d_output_cleanup(&adapter->output);
+    heap_free(adapter->memory_events);
     heap_free(adapter->formats);
 }
 
@@ -2778,7 +2779,9 @@ static struct wined3d_adapter *wined3d_adapter_no3d_create(unsigned int ordinal,
         return NULL;
 
     wined3d_driver_info_init(&adapter->driver_info, &gpu_description, 0, 0);
-    adapter->vram_bytes_used = 0;
+    memset(&adapter->memory_usage, 0, sizeof(adapter->memory_usage));
+    adapter->memory_events = NULL;
+    adapter->event_count = 0;
     TRACE("Emulating 0x%s bytes of video ram.\n", wine_dbgstr_longlong(adapter->driver_info.vram_bytes));
 
     if (!wined3d_adapter_init(adapter, ordinal, &wined3d_adapter_no3d_ops))
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index f86853e9..65e7d43f 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -2868,6 +2868,12 @@ struct wined3d_output
     D3DDDI_VIDEO_PRESENT_SOURCE_ID vidpn_source_id;
 };
 
+struct wined3d_adapter_memory_usage
+{
+    UINT64 bytes_used;
+    UINT64 bytes_reserved;
+};
+
 /* The adapter structure */
 struct wined3d_adapter
 {
@@ -2879,7 +2885,9 @@ struct wined3d_adapter
     struct wined3d_d3d_info d3d_info;
     struct wined3d_driver_info driver_info;
     struct wined3d_output output;
-    UINT64 vram_bytes_used;
+    struct wined3d_adapter_memory_usage memory_usage[2];
+    HANDLE *memory_events;
+    DWORD event_count;
     GUID driver_uuid;
     GUID device_uuid;
     LUID luid;
-- 
2.23.0




More information about the wine-devel mailing list