Conor McCarthy : vkd3d: Simplify checking if a descriptor has a view.

Alexandre Julliard julliard at winehq.org
Wed Dec 15 14:21:28 CST 2021


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

Author: Conor McCarthy <cmccarthy at codeweavers.com>
Date:   Thu Dec  9 01:00:20 2021 +1000

vkd3d: Simplify checking if a descriptor has a view.

Saves a few CPU cycles on a potentially very hot code path.
Based on a vkd3d-proton patch by Philip Rebohle.

Signed-off-by: Conor McCarthy <cmccarthy at codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 libs/vkd3d/resource.c      | 10 ++--------
 libs/vkd3d/vkd3d_private.h | 16 ++++++++++------
 2 files changed, 12 insertions(+), 14 deletions(-)

diff --git a/libs/vkd3d/resource.c b/libs/vkd3d/resource.c
index 2887779..1991223 100644
--- a/libs/vkd3d/resource.c
+++ b/libs/vkd3d/resource.c
@@ -2130,9 +2130,7 @@ void d3d12_desc_write_atomic(struct d3d12_desc *dst, const struct d3d12_desc *sr
     pthread_mutex_lock(mutex);
 
     /* Nothing to do for VKD3D_DESCRIPTOR_MAGIC_CBV. */
-    if ((dst->magic == VKD3D_DESCRIPTOR_MAGIC_SRV
-            || dst->magic == VKD3D_DESCRIPTOR_MAGIC_UAV
-            || dst->magic == VKD3D_DESCRIPTOR_MAGIC_SAMPLER)
+    if ((dst->magic & VKD3D_DESCRIPTOR_MAGIC_HAS_VIEW)
             && !InterlockedDecrement(&dst->u.view->refcount))
         destroy_desc = *dst;
 
@@ -2165,12 +2163,8 @@ void d3d12_desc_copy(struct d3d12_desc *dst, const struct d3d12_desc *src,
     mutex = d3d12_device_get_descriptor_mutex(device, src);
     pthread_mutex_lock(mutex);
 
-    if (src->magic == VKD3D_DESCRIPTOR_MAGIC_SRV
-            || src->magic == VKD3D_DESCRIPTOR_MAGIC_UAV
-            || src->magic == VKD3D_DESCRIPTOR_MAGIC_SAMPLER)
-    {
+    if (src->magic & VKD3D_DESCRIPTOR_MAGIC_HAS_VIEW)
         vkd3d_view_incref(src->u.view);
-    }
 
     tmp = *src;
 
diff --git a/libs/vkd3d/vkd3d_private.h b/libs/vkd3d/vkd3d_private.h
index e963131..f83fd1a 100644
--- a/libs/vkd3d/vkd3d_private.h
+++ b/libs/vkd3d/vkd3d_private.h
@@ -41,13 +41,17 @@
 
 #define VK_CALL(f) (vk_procs->f)
 
+#define MAKE_MAGIC(a,b,c,f) (((uint32_t)a) | (((uint32_t)b) << 8) | (((uint32_t)c) << 16) | f)
+
+#define VKD3D_DESCRIPTOR_MAGIC_HAS_VIEW 0x01000000u
+
 #define VKD3D_DESCRIPTOR_MAGIC_FREE    0x00000000u
-#define VKD3D_DESCRIPTOR_MAGIC_CBV     0x00564243u
-#define VKD3D_DESCRIPTOR_MAGIC_SRV     0x00565253u
-#define VKD3D_DESCRIPTOR_MAGIC_UAV     0x00564155u
-#define VKD3D_DESCRIPTOR_MAGIC_SAMPLER 0x504d4153u
-#define VKD3D_DESCRIPTOR_MAGIC_DSV     0x00565344u
-#define VKD3D_DESCRIPTOR_MAGIC_RTV     0x00565452u
+#define VKD3D_DESCRIPTOR_MAGIC_CBV     MAKE_MAGIC('C', 'B', 'V', 0)
+#define VKD3D_DESCRIPTOR_MAGIC_SRV     MAKE_MAGIC('S', 'R', 'V', VKD3D_DESCRIPTOR_MAGIC_HAS_VIEW)
+#define VKD3D_DESCRIPTOR_MAGIC_UAV     MAKE_MAGIC('U', 'A', 'V', VKD3D_DESCRIPTOR_MAGIC_HAS_VIEW)
+#define VKD3D_DESCRIPTOR_MAGIC_SAMPLER MAKE_MAGIC('S', 'M', 'P', VKD3D_DESCRIPTOR_MAGIC_HAS_VIEW)
+#define VKD3D_DESCRIPTOR_MAGIC_DSV     MAKE_MAGIC('D', 'S', 'V', 0)
+#define VKD3D_DESCRIPTOR_MAGIC_RTV     MAKE_MAGIC('R', 'T', 'V', 0)
 
 #define VKD3D_MAX_COMPATIBLE_FORMAT_COUNT 6u
 #define VKD3D_MAX_QUEUE_FAMILY_COUNT      3u




More information about the wine-cvs mailing list