[PATCH 2/3] wined3d: Call wined3d_adapter_init() at the end of adapter initialisation functions.

Zhiyi Zhang zzhang at codeweavers.com
Mon Jul 6 03:21:00 CDT 2020


wined3d_adapter_init() will allocate random LUIDs for adapters if no valid LUID is found in
wined3d_adapter_gl/vk_init(). To avoid overriding valid LUIDs, the function has to be moved.
Also when assigning outputs to their corresponding adapters for multiple adapters support,
LUIDs should be valid before calling wined3d_adapter_init().

Signed-off-by: Zhiyi Zhang <zzhang at codeweavers.com>
---
 dlls/wined3d/adapter_gl.c | 10 +++++++---
 dlls/wined3d/adapter_vk.c | 16 ++++++----------
 dlls/wined3d/directx.c    |  4 ----
 3 files changed, 13 insertions(+), 17 deletions(-)

diff --git a/dlls/wined3d/adapter_gl.c b/dlls/wined3d/adapter_gl.c
index a97e7bd7a41..680019c1189 100644
--- a/dlls/wined3d/adapter_gl.c
+++ b/dlls/wined3d/adapter_gl.c
@@ -5141,9 +5141,6 @@ static BOOL wined3d_adapter_gl_init(struct wined3d_adapter_gl *adapter_gl,
     TRACE("adapter_gl %p, ordinal %u, wined3d_creation_flags %#x.\n",
             adapter_gl, ordinal, wined3d_creation_flags);
 
-    if (!wined3d_adapter_init(&adapter_gl->a, ordinal, &wined3d_adapter_gl_ops))
-        return FALSE;
-
     /* Dynamically load all GL core functions */
 #ifdef USE_WIN32_OPENGL
     {
@@ -5241,6 +5238,13 @@ static BOOL wined3d_adapter_gl_init(struct wined3d_adapter_gl *adapter_gl,
 
     wined3d_adapter_init_ffp_attrib_ops(&adapter_gl->a);
 
+    if (!wined3d_adapter_init(&adapter_gl->a, ordinal, &wined3d_adapter_gl_ops))
+    {
+        ERR("Failed to initialise adapter.\n");
+        heap_free(adapter_gl->pixel_formats);
+        return FALSE;
+    }
+
     return TRUE;
 }
 
diff --git a/dlls/wined3d/adapter_vk.c b/dlls/wined3d/adapter_vk.c
index 1e4d663dcb4..f648dd196f7 100644
--- a/dlls/wined3d/adapter_vk.c
+++ b/dlls/wined3d/adapter_vk.c
@@ -2170,17 +2170,14 @@ static BOOL wined3d_adapter_vk_init(struct wined3d_adapter_vk *adapter_vk,
     TRACE("adapter_vk %p, ordinal %u, wined3d_creation_flags %#x.\n",
             adapter_vk, ordinal, wined3d_creation_flags);
 
-    if (!wined3d_adapter_init(adapter, ordinal, &wined3d_adapter_vk_ops))
-        return FALSE;
-
     if (!wined3d_init_vulkan(vk_info))
     {
         WARN("Failed to initialize Vulkan.\n");
-        goto fail;
+        return FALSE;
     }
 
     if (!(adapter_vk->physical_device = get_vulkan_physical_device(vk_info)))
-        goto fail_vulkan;
+        goto fail;
 
     memset(&id_properties, 0, sizeof(id_properties));
     id_properties.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES;
@@ -2203,7 +2200,7 @@ static BOOL wined3d_adapter_vk_init(struct wined3d_adapter_vk *adapter_vk,
     memcpy(&adapter->device_uuid, id_properties.deviceUUID, sizeof(adapter->device_uuid));
 
     if (!wined3d_adapter_vk_init_format_info(adapter_vk, vk_info))
-        goto fail_vulkan;
+        goto fail;
 
     adapter->vertex_pipe = wined3d_spirv_vertex_pipe_init_vk();
     adapter->fragment_pipe = wined3d_spirv_fragment_pipe_init_vk();
@@ -2212,13 +2209,12 @@ static BOOL wined3d_adapter_vk_init(struct wined3d_adapter_vk *adapter_vk,
 
     wined3d_adapter_vk_init_d3d_info(adapter_vk, wined3d_creation_flags);
 
-    return TRUE;
+    if (wined3d_adapter_init(adapter, ordinal, &wined3d_adapter_vk_ops))
+        return TRUE;
 
-fail_vulkan:
+fail:
     VK_CALL(vkDestroyInstance(vk_info->instance, NULL));
     wined3d_unload_vulkan(vk_info);
-fail:
-    wined3d_adapter_cleanup(adapter);
     return FALSE;
 }
 
diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c
index e77283832ca..a9a5a3aac36 100644
--- a/dlls/wined3d/directx.c
+++ b/dlls/wined3d/directx.c
@@ -3018,10 +3018,6 @@ BOOL wined3d_adapter_init(struct wined3d_adapter *adapter, unsigned int ordinal,
     }
     adapter->output_count = 1;
 
-    memset(&adapter->driver_uuid, 0, sizeof(adapter->driver_uuid));
-    memset(&adapter->device_uuid, 0, sizeof(adapter->device_uuid));
-
-    adapter->formats = NULL;
     adapter->adapter_ops = adapter_ops;
     ret = TRUE;
 done:
-- 
2.25.1




More information about the wine-devel mailing list