[PATCH vkd3d 12/12] vkd3d: Factor out vkd3d_join_thread().

Józef Kucia joseph.kucia at gmail.com
Tue Jun 11 03:13:38 CDT 2019


From: Józef Kucia <jkucia at codeweavers.com>

Signed-off-by: Józef Kucia <jkucia at codeweavers.com>
---
 libs/vkd3d/command.c       | 18 ++----------------
 libs/vkd3d/device.c        | 23 ++++++++++++++++++++++-
 libs/vkd3d/vkd3d_private.h |  3 +--
 3 files changed, 25 insertions(+), 19 deletions(-)

diff --git a/libs/vkd3d/command.c b/libs/vkd3d/command.c
index 0c2fd3ea7e1f..fcb7a4899091 100644
--- a/libs/vkd3d/command.c
+++ b/libs/vkd3d/command.c
@@ -467,22 +467,8 @@ HRESULT vkd3d_fence_worker_stop(struct vkd3d_fence_worker *worker,
 
     pthread_mutex_unlock(&worker->mutex);
 
-    if (device->join_thread)
-    {
-        if (FAILED(hr = device->join_thread(worker->thread.handle)))
-        {
-            ERR("Failed to join fence worker thread, hr %#x.\n", hr);
-            return hr;
-        }
-    }
-    else
-    {
-        if ((rc = pthread_join(worker->thread.pthread, NULL)))
-        {
-            ERR("Failed to join fence worker thread, error %d.\n", rc);
-            return hresult_from_errno(rc);
-        }
-    }
+    if (FAILED(hr = vkd3d_join_thread(device->vkd3d_instance, &worker->thread)))
+        return hr;
 
     pthread_mutex_destroy(&worker->mutex);
     pthread_cond_destroy(&worker->cond);
diff --git a/libs/vkd3d/device.c b/libs/vkd3d/device.c
index e88d3c2964e1..b1da9e9c0e20 100644
--- a/libs/vkd3d/device.c
+++ b/libs/vkd3d/device.c
@@ -3112,7 +3112,6 @@ static HRESULT d3d12_device_init(struct d3d12_device *device,
     vkd3d_instance_incref(device->vkd3d_instance = instance);
     device->vk_info = instance->vk_info;
     device->signal_event = instance->signal_event;
-    device->join_thread = instance->join_thread;
     device->wchar_size = instance->wchar_size;
 
     device->adapter_luid = create_info->adapter_luid;
@@ -3223,6 +3222,28 @@ HRESULT vkd3d_create_thread(struct vkd3d_instance *instance,
     return hr;
 }
 
+HRESULT vkd3d_join_thread(struct vkd3d_instance *instance, union vkd3d_thread_handle *thread)
+{
+    HRESULT hr = S_OK;
+    int rc;
+
+    if (instance->join_thread)
+    {
+        if (FAILED(hr = instance->join_thread(thread->handle)))
+            ERR("Failed to join thread, hr %#x.\n", hr);
+    }
+    else
+    {
+        if ((rc = pthread_join(thread->pthread, NULL)))
+        {
+            ERR("Failed to join thread, error %d.\n", rc);
+            hr = hresult_from_errno(rc);
+        }
+    }
+
+    return hr;
+}
+
 IUnknown *vkd3d_get_device_parent(ID3D12Device *device)
 {
     struct d3d12_device *d3d12_device = impl_from_ID3D12Device(device);
diff --git a/libs/vkd3d/vkd3d_private.h b/libs/vkd3d/vkd3d_private.h
index 2fbf6925098e..4118d5d170e0 100644
--- a/libs/vkd3d/vkd3d_private.h
+++ b/libs/vkd3d/vkd3d_private.h
@@ -149,6 +149,7 @@ union vkd3d_thread_handle
 
 HRESULT vkd3d_create_thread(struct vkd3d_instance *instance,
         PFN_vkd3d_thread thread_main, void *data, union vkd3d_thread_handle *thread) DECLSPEC_HIDDEN;
+HRESULT vkd3d_join_thread(struct vkd3d_instance *instance, union vkd3d_thread_handle *thread) DECLSPEC_HIDDEN;
 
 struct vkd3d_fence_worker
 {
@@ -1019,8 +1020,6 @@ struct d3d12_device
 
     struct vkd3d_instance *vkd3d_instance;
 
-    PFN_vkd3d_join_thread join_thread;
-
     IUnknown *parent;
     LUID adapter_luid;
 
-- 
2.21.0




More information about the wine-devel mailing list