From 681bd5096ee416b50dd7338de30af7b3db385a36 Mon Sep 17 00:00:00 2001 From: Nicolas James Date: Sun, 29 Mar 2026 20:44:23 +1100 Subject: Implement Reflex - break AntiLag in the process. Remove AntiLag1. WIP --- src/helper.hh | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 src/helper.hh (limited to 'src/helper.hh') diff --git a/src/helper.hh b/src/helper.hh new file mode 100644 index 0000000..468f146 --- /dev/null +++ b/src/helper.hh @@ -0,0 +1,59 @@ +#ifndef HELPER_HH_ +#define HELPER_HH_ + +#include +#include + +#include + +namespace low_latency { + +// Small templates which allow us to SFINAE find pNext structs. +template +static T* find_next(void* const head, const VkStructureType& stype) { + for (auto i = reinterpret_cast(head)->pNext; i; + i = i->pNext) { + + if (i->sType == stype) { + return reinterpret_cast(i); + } + } + return nullptr; +} + +template +static const T* find_next(const void* const head, + const VkStructureType& stype) { + + for (auto i = reinterpret_cast(head)->pNext; i; + i = i->pNext) { + + if (i->sType == stype) { + return reinterpret_cast(i); + } + } + return nullptr; +} + +template +static const T* find_link(const void* const head, + const VkStructureType& stype) { + for (auto info = find_next(head, stype); info; + info = find_next(info, stype)) { + + if (info->function == VK_LAYER_LINK_INFO) { + return reinterpret_cast(info); + } + } + return nullptr; +} + +template std::uint64_t extract_present_id(const T& submit) { + const auto lspi = find_next( + &submit, VK_STRUCTURE_TYPE_LATENCY_SUBMISSION_PRESENT_ID_NV); + return lspi ? lspi->presentID : 0; +} + +} // namespace low_latency + +#endif \ No newline at end of file -- cgit v1.2.3