vulkan/wsi: Don't leak the FD when GetImageDrmFormatModifierProperties fails
[mesa.git] / src / vulkan / util / vk_util.h
index 4c18a196b71d5fc3d2f90a3c5547021d77f57e3c..8ae384b9fb514d96fa22570734853b064c805c94 100644 (file)
 #ifndef VK_UTIL_H
 #define VK_UTIL_H
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 /* common inlines and macros for vulkan drivers */
 
 #include <vulkan/vulkan.h>
 
-struct vk_struct_common {
-    VkStructureType sType;
-    struct vk_struct_common *pNext;
-};
-
 #define vk_foreach_struct(__iter, __start) \
-   for (struct vk_struct_common *__iter = (struct vk_struct_common *)(__start); \
+   for (struct VkBaseOutStructure *__iter = (struct VkBaseOutStructure *)(__start); \
         __iter; __iter = __iter->pNext)
 
 #define vk_foreach_struct_const(__iter, __start) \
-   for (const struct vk_struct_common *__iter = (const struct vk_struct_common *)(__start); \
+   for (const struct VkBaseInStructure *__iter = (const struct VkBaseInStructure *)(__start); \
         __iter; __iter = __iter->pNext)
 
 /**
@@ -127,7 +126,7 @@ __vk_outarray_next(struct __vk_outarray *a, size_t elem_size)
       return NULL;
 
    if (a->data != NULL)
-      p = a->data + (*a->filled_len) * elem_size;
+      p = (uint8_t *)a->data + (*a->filled_len) * elem_size;
 
    *a->filled_len += 1;
 
@@ -197,12 +196,30 @@ __vk_find_struct(void *start, VkStructureType sType)
 #define vk_find_struct_const(__start, __sType) \
    (const void *)__vk_find_struct((void *)(__start), VK_STRUCTURE_TYPE_##__sType)
 
+static inline void
+__vk_append_struct(void *start, void *element)
+{
+   vk_foreach_struct(s, start) {
+      if (s->pNext)
+         continue;
+
+      s->pNext = (struct VkBaseOutStructure *) element;
+      break;
+   }
+}
+
 uint32_t vk_get_driver_version(void);
 
+uint32_t vk_get_version_override(void);
+
 #define VK_EXT_OFFSET (1000000000UL)
 #define VK_ENUM_EXTENSION(__enum) \
    ((__enum) >= VK_EXT_OFFSET ? ((((__enum) - VK_EXT_OFFSET) / 1000UL) + 1) : 0)
 #define VK_ENUM_OFFSET(__enum) \
    ((__enum) >= VK_EXT_OFFSET ? ((__enum) % 1000) : (__enum))
 
+#ifdef __cplusplus
+}
+#endif
+
 #endif /* VK_UTIL_H */