=?UTF-8?Q?J=C3=B3zef=20Kucia=20?=: include: Avoid bitfields in public structures.

Alexandre Julliard julliard at winehq.org
Thu Nov 8 14:29:03 CST 2018


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

Author: Józef Kucia <jkucia at codeweavers.com>
Date:   Thu Nov  8 17:19:32 2018 +0100

include: Avoid bitfields in public structures.

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>

---

 include/private/vkd3d_common.h        | 2 ++
 include/vkd3d_shader.h                | 7 ++++---
 libs/vkd3d-shader/vkd3d_shader_main.c | 3 +++
 3 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/include/private/vkd3d_common.h b/include/private/vkd3d_common.h
index d097f3d..d942acf 100644
--- a/include/private/vkd3d_common.h
+++ b/include/private/vkd3d_common.h
@@ -28,6 +28,8 @@
 
 #define STATIC_ASSERT(e) extern void __VKD3D_STATIC_ASSERT__(int [(e) ? 1 : -1])
 
+#define MEMBER_SIZE(t, m) sizeof(((t *)0)->m)
+
 static inline size_t align(size_t addr, size_t alignment)
 {
     return (addr + (alignment - 1)) & ~(alignment - 1);
diff --git a/include/vkd3d_shader.h b/include/vkd3d_shader.h
index 20ed0fb..c0d1f65 100644
--- a/include/vkd3d_shader.h
+++ b/include/vkd3d_shader.h
@@ -365,6 +365,7 @@ enum vkd3d_root_signature_version
 int vkd3d_shader_serialize_root_signature(const struct vkd3d_root_signature_desc *root_signature,
         enum vkd3d_root_signature_version version, struct vkd3d_shader_code *dxbc);
 
+/* FIXME: Add support for 64 UAV bind slots. */
 #define VKD3D_SHADER_MAX_UNORDERED_ACCESS_VIEWS 8
 
 struct vkd3d_shader_scan_info
@@ -372,9 +373,9 @@ struct vkd3d_shader_scan_info
     enum vkd3d_shader_structure_type type;
     void *next;
 
-    unsigned int uav_read_mask : VKD3D_SHADER_MAX_UNORDERED_ACCESS_VIEWS;
-    unsigned int uav_counter_mask : VKD3D_SHADER_MAX_UNORDERED_ACCESS_VIEWS;
-    unsigned int sampler_comparison_mode_mask;
+    unsigned int uav_read_mask;    /* VKD3D_SHADER_MAX_UNORDERED_ACCESS_VIEWS */
+    unsigned int uav_counter_mask; /* VKD3D_SHADER_MAX_UNORDERED_ACCESS_VIEWS */
+    unsigned int sampler_comparison_mode_mask; /* 16 */
 };
 
 int vkd3d_shader_scan_dxbc(const struct vkd3d_shader_code *dxbc,
diff --git a/libs/vkd3d-shader/vkd3d_shader_main.c b/libs/vkd3d-shader/vkd3d_shader_main.c
index 5e292c7..37aee0f 100644
--- a/libs/vkd3d-shader/vkd3d_shader_main.c
+++ b/libs/vkd3d-shader/vkd3d_shader_main.c
@@ -18,6 +18,9 @@
 
 #include "vkd3d_shader_private.h"
 
+STATIC_ASSERT(MEMBER_SIZE(struct vkd3d_shader_scan_info, uav_counter_mask) * CHAR_BIT >= VKD3D_SHADER_MAX_UNORDERED_ACCESS_VIEWS);
+STATIC_ASSERT(MEMBER_SIZE(struct vkd3d_shader_scan_info, uav_read_mask) * CHAR_BIT >= VKD3D_SHADER_MAX_UNORDERED_ACCESS_VIEWS);
+
 struct vkd3d_shader_parser
 {
     struct vkd3d_shader_desc shader_desc;




More information about the wine-cvs mailing list