diff options
-rw-r--r-- | system/vulkan_enc/vk_util.h | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/system/vulkan_enc/vk_util.h b/system/vulkan_enc/vk_util.h index 0c7f4b98..a60d3d88 100644 --- a/system/vulkan_enc/vk_util.h +++ b/system/vulkan_enc/vk_util.h @@ -215,11 +215,28 @@ vk_init_struct_chain(vk_struct_common* start) } static inline vk_struct_common* +vk_last_struct_chain(vk_struct_common* i) +{ + for (int n = 1000000; n > 0; --n) { + vk_struct_common* next = i->pNext; + if (next) { + i = next; + } else { + return i; + } + } + + ::abort(); // crash on loops in the chain + return NULL; +} + +static inline vk_struct_common* vk_append_struct(vk_struct_common* current, vk_struct_common* next) { - current->pNext = next; - next->pNext = nullptr; - return next; + vk_struct_common* last = vk_last_struct_chain(current); + last->pNext = next; + next->pNext = nullptr; + return current; } #endif /* VK_UTIL_H */ |