#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)
/**
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;
#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 */