=?UTF-8?Q?J=C3=B3zef=20Kucia=20?=: vkd3d: Translate pthread error numbers to HRESULTs.

Alexandre Julliard julliard at winehq.org
Mon Nov 12 16:26:09 CST 2018


Module: vkd3d
Branch: master
Commit: d539adaff84db0411a9f6cc7f287f76903bce6ff
URL:    https://source.winehq.org/git/vkd3d.git/?a=commit;h=d539adaff84db0411a9f6cc7f287f76903bce6ff

Author: Józef Kucia <jkucia at codeweavers.com>
Date:   Fri Nov  9 18:06:23 2018 +0100

vkd3d: Translate pthread error numbers to HRESULTs.

Signed-off-by: Józef Kucia <jkucia at codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 libs/vkd3d/command.c       | 20 ++++++++++----------
 libs/vkd3d/device.c        |  2 +-
 libs/vkd3d/resource.c      |  4 ++--
 libs/vkd3d/utils.c         | 18 ++++++++++++++++++
 libs/vkd3d/vkd3d_private.h |  1 +
 5 files changed, 32 insertions(+), 13 deletions(-)

diff --git a/libs/vkd3d/command.c b/libs/vkd3d/command.c
index 5ccf492..9e5921e 100644
--- a/libs/vkd3d/command.c
+++ b/libs/vkd3d/command.c
@@ -33,7 +33,7 @@ HRESULT vkd3d_queue_create(struct d3d12_device *device,
     {
         ERR("Failed to initialize mutex, error %d.\n", rc);
         vkd3d_free(object);
-        return E_FAIL;
+        return hresult_from_errno(rc);
     }
 
     object->vk_family_index = family_index;
@@ -89,7 +89,7 @@ static HRESULT vkd3d_enqueue_gpu_fence(struct vkd3d_fence_worker *worker,
     if ((rc = pthread_mutex_lock(&worker->mutex)))
     {
         ERR("Failed to lock mutex, error %d.\n", rc);
-        return E_FAIL;
+        return hresult_from_errno(rc);
     }
 
     if (!vkd3d_array_reserve((void **)&worker->vk_fences, &worker->vk_fences_size,
@@ -255,14 +255,14 @@ HRESULT vkd3d_fence_worker_start(struct vkd3d_fence_worker *worker,
     if ((rc = pthread_mutex_init(&worker->mutex, NULL)))
     {
         ERR("Failed to initialize mutex, error %d.\n", rc);
-        return E_FAIL;
+        return hresult_from_errno(rc);
     }
 
     if ((rc = pthread_cond_init(&worker->cond, NULL)))
     {
         ERR("Failed to initialize condition variable, error %d.\n", rc);
         pthread_mutex_destroy(&worker->mutex);
-        return E_FAIL;
+        return hresult_from_errno(rc);
     }
 
     if (device->create_thread)
@@ -283,7 +283,7 @@ HRESULT vkd3d_fence_worker_start(struct vkd3d_fence_worker *worker,
         ERR("Failed to create fence worker thread, error %d.\n", rc);
         pthread_mutex_destroy(&worker->mutex);
         pthread_cond_destroy(&worker->cond);
-        return E_FAIL;
+        return hresult_from_errno(rc);
     }
 
     return S_OK;
@@ -300,7 +300,7 @@ HRESULT vkd3d_fence_worker_stop(struct vkd3d_fence_worker *worker,
     if ((rc = pthread_mutex_lock(&worker->mutex)))
     {
         ERR("Failed to lock mutex, error %d.\n", rc);
-        return E_FAIL;
+        return hresult_from_errno(rc);
     }
 
     worker->should_exit = true;
@@ -321,7 +321,7 @@ HRESULT vkd3d_fence_worker_stop(struct vkd3d_fence_worker *worker,
         if ((rc = pthread_join(worker->u.thread, NULL)))
         {
             ERR("Failed to join fence worker thread, error %d.\n", rc);
-            return E_FAIL;
+            return hresult_from_errno(rc);
         }
     }
 
@@ -472,7 +472,7 @@ static HRESULT STDMETHODCALLTYPE d3d12_fence_SetEventOnCompletion(ID3D12Fence *i
     if ((rc = pthread_mutex_lock(&fence->mutex)))
     {
         ERR("Failed to lock mutex, error %d.\n", rc);
-        return E_FAIL;
+        return hresult_from_errno(rc);
     }
 
     if (value <= fence->value)
@@ -521,7 +521,7 @@ static HRESULT STDMETHODCALLTYPE d3d12_fence_Signal(ID3D12Fence *iface, UINT64 v
     if ((rc = pthread_mutex_lock(&fence->mutex)))
     {
         ERR("Failed to lock mutex, error %d.\n", rc);
-        return E_FAIL;
+        return hresult_from_errno(rc);
     }
 
     fence->value = value;
@@ -580,7 +580,7 @@ static HRESULT d3d12_fence_init(struct d3d12_fence *fence, struct d3d12_device *
     if ((rc = pthread_mutex_init(&fence->mutex, NULL)))
     {
         ERR("Failed to initialize mutex, error %d.\n", rc);
-        return E_FAIL;
+        return hresult_from_errno(rc);
     }
 
     if (flags)
diff --git a/libs/vkd3d/device.c b/libs/vkd3d/device.c
index e41a309..c854050 100644
--- a/libs/vkd3d/device.c
+++ b/libs/vkd3d/device.c
@@ -1275,7 +1275,7 @@ static HRESULT d3d12_device_init_pipeline_cache(struct d3d12_device *device)
     if ((rc = pthread_mutex_init(&device->pipeline_cache_mutex, NULL)))
     {
         ERR("Failed to initialize mutex, error %d.\n", rc);
-        return E_FAIL;
+        return hresult_from_errno(rc);
     }
 
     cache_info.sType = VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO;
diff --git a/libs/vkd3d/resource.c b/libs/vkd3d/resource.c
index 21096e5..a2a00d3 100644
--- a/libs/vkd3d/resource.c
+++ b/libs/vkd3d/resource.c
@@ -245,7 +245,7 @@ static HRESULT d3d12_heap_map(struct d3d12_heap *heap, UINT64 offset, void **dat
     {
         ERR("Failed to lock mutex, error %d.\n", rc);
         *data = NULL;
-        return E_FAIL;
+        return hresult_from_errno(rc);
     }
 
     if (!heap->map_ptr)
@@ -365,7 +365,7 @@ static HRESULT d3d12_heap_init(struct d3d12_heap *heap,
     if ((rc = pthread_mutex_init(&heap->mutex, NULL)))
     {
         ERR("Failed to initialize mutex, error %d.\n", rc);
-        return E_FAIL;
+        return hresult_from_errno(rc);
     }
 
     if (FAILED(hr = vkd3d_allocate_device_memory(device, &heap->desc.Properties,
diff --git a/libs/vkd3d/utils.c b/libs/vkd3d/utils.c
index a242444..b7ebbdd 100644
--- a/libs/vkd3d/utils.c
+++ b/libs/vkd3d/utils.c
@@ -18,6 +18,8 @@
 
 #include "vkd3d_private.h"
 
+#include <errno.h>
+
 #define COLOR         (VK_IMAGE_ASPECT_COLOR_BIT)
 #define DEPTH         (VK_IMAGE_ASPECT_DEPTH_BIT)
 #define STENCIL       (VK_IMAGE_ASPECT_STENCIL_BIT)
@@ -381,6 +383,22 @@ const char *debug_vk_memory_property_flags(VkMemoryPropertyFlags flags)
     return vkd3d_dbg_sprintf("%s", &buffer[3]);
 }
 
+HRESULT hresult_from_errno(int rc)
+{
+    switch (rc)
+    {
+        case 0:
+            return S_OK;
+        case ENOMEM:
+            return E_OUTOFMEMORY;
+        case EINVAL:
+            return E_INVALIDARG;
+        default:
+            FIXME("Unhandled errno %d.\n", rc);
+            return E_FAIL;
+    }
+}
+
 HRESULT hresult_from_vk_result(VkResult vr)
 {
     switch (vr)
diff --git a/libs/vkd3d/vkd3d_private.h b/libs/vkd3d/vkd3d_private.h
index 982ed68..d6c821b 100644
--- a/libs/vkd3d/vkd3d_private.h
+++ b/libs/vkd3d/vkd3d_private.h
@@ -896,6 +896,7 @@ static inline void debug_ignored_node_mask(unsigned int mask)
         FIXME("Ignoring node mask 0x%08x.\n", mask);
 }
 
+HRESULT hresult_from_errno(int rc) DECLSPEC_HIDDEN;
 HRESULT hresult_from_vk_result(VkResult vr) DECLSPEC_HIDDEN;
 HRESULT hresult_from_vkd3d_result(int vkd3d_result) DECLSPEC_HIDDEN;
 




More information about the wine-cvs mailing list