From b6f3086d2b0cfec9b944fc33746b408abcb1d9bd Mon Sep 17 00:00:00 2001 From: FakeMichau <49685661+FakeMichau@users.noreply.github.com> Date: Fri, 15 May 2026 18:18:49 +0200 Subject: [PATCH] Move Low Latency vulkan hooks and logs --- OptiScaler/OptiScaler.vcxproj | 4 ++-- OptiScaler/OptiScaler.vcxproj.filters | 4 ++-- OptiScaler/low_latency/ll_util.h | 10 ++++++++++ .../ll_vulkan_hooks.cpp} | 18 +++++++++--------- .../ll_vulkan_hooks.h} | 4 +--- .../low_latency_tech/ll_antilag2.cpp | 4 ++-- .../low_latency_tech/ll_antilag_vk.cpp | 16 ++++++++-------- .../low_latency_tech/ll_latencyflex.cpp | 8 ++++---- .../low_latency/low_latency_tech/ll_xell.cpp | 2 +- OptiScaler/nvapi/fakenvapi.cpp | 4 ++-- OptiScaler/nvapi/fakenvapi/log.h | 6 ------ OptiScaler/nvapi/fakenvapi/nvapi_calls.cpp | 8 ++++---- OptiScaler/nvapi/fakenvapi/nvapi_calls.h | 2 +- 13 files changed, 46 insertions(+), 44 deletions(-) rename OptiScaler/{nvapi/fakenvapi/fn_vulkan_hooks.cpp => low_latency/ll_vulkan_hooks.cpp} (84%) rename OptiScaler/{nvapi/fakenvapi/fn_vulkan_hooks.h => low_latency/ll_vulkan_hooks.h} (94%) diff --git a/OptiScaler/OptiScaler.vcxproj b/OptiScaler/OptiScaler.vcxproj index 1a8bbb20..5d684dd8 100644 --- a/OptiScaler/OptiScaler.vcxproj +++ b/OptiScaler/OptiScaler.vcxproj @@ -337,7 +337,7 @@ copy NUL "$(SolutionDir)x64\Release\a\!! EXTRACT ALL FILES TO GAME FOLDER !!" /Y - + @@ -592,7 +592,7 @@ copy NUL "$(SolutionDir)x64\Release\a\!! EXTRACT ALL FILES TO GAME FOLDER !!" /Y - + diff --git a/OptiScaler/OptiScaler.vcxproj.filters b/OptiScaler/OptiScaler.vcxproj.filters index e97b705a..e79719c7 100644 --- a/OptiScaler/OptiScaler.vcxproj.filters +++ b/OptiScaler/OptiScaler.vcxproj.filters @@ -782,7 +782,7 @@ Header Files - + Header Files @@ -1286,7 +1286,7 @@ Source Files - + Source Files diff --git a/OptiScaler/low_latency/ll_util.h b/OptiScaler/low_latency/ll_util.h index 68052b2e..0f1ed40e 100644 --- a/OptiScaler/low_latency/ll_util.h +++ b/OptiScaler/low_latency/ll_util.h @@ -6,6 +6,16 @@ #include #include +// #define LOWLATENCY_TRACE_LOGGING + +#ifdef LOWLATENCY_TRACE_LOGGING +#define LOG_TRACE_LOWLATENCY(msg, ...) LOG_TRACE(msg, ##__VA_ARGS__) +#else +#define LOG_TRACE_LOWLATENCY(msg, ...) \ + { \ + } +#endif + enum class LowLatencyMode { None, diff --git a/OptiScaler/nvapi/fakenvapi/fn_vulkan_hooks.cpp b/OptiScaler/low_latency/ll_vulkan_hooks.cpp similarity index 84% rename from OptiScaler/nvapi/fakenvapi/fn_vulkan_hooks.cpp rename to OptiScaler/low_latency/ll_vulkan_hooks.cpp index 8ebcfd6d..84f6ea64 100644 --- a/OptiScaler/nvapi/fakenvapi/fn_vulkan_hooks.cpp +++ b/OptiScaler/low_latency/ll_vulkan_hooks.cpp @@ -1,18 +1,18 @@ #include "pch.h" -#include "fn_vulkan_hooks.h" +#include "ll_vulkan_hooks.h" #include #include #include -PFN_vkCreateDevice FnVulkanHooks::o_vkCreateDevice = nullptr; -PFN_vkGetPhysicalDeviceFeatures2 FnVulkanHooks::o_vkGetPhysicalDeviceFeatures2 = nullptr; -PFN_vkGetDeviceProcAddr FnVulkanHooks::o_vkGetDeviceProcAddr = nullptr; -PFN_vkCreateSemaphore FnVulkanHooks::o_vkCreateSemaphore = nullptr; -PFN_vkSignalSemaphore FnVulkanHooks::o_vkSignalSemaphore = nullptr; -PFN_vkAntiLagUpdateAMD FnVulkanHooks::o_vkAntiLagUpdateAMD = nullptr; +PFN_vkCreateDevice LLVulkanHooks::o_vkCreateDevice = nullptr; +PFN_vkGetPhysicalDeviceFeatures2 LLVulkanHooks::o_vkGetPhysicalDeviceFeatures2 = nullptr; +PFN_vkGetDeviceProcAddr LLVulkanHooks::o_vkGetDeviceProcAddr = nullptr; +PFN_vkCreateSemaphore LLVulkanHooks::o_vkCreateSemaphore = nullptr; +PFN_vkSignalSemaphore LLVulkanHooks::o_vkSignalSemaphore = nullptr; +PFN_vkAntiLagUpdateAMD LLVulkanHooks::o_vkAntiLagUpdateAMD = nullptr; -VkResult FnVulkanHooks::hkvkCreateDevice(VkPhysicalDevice physicalDevice, VkDeviceCreateInfo* pCreateInfo, +VkResult LLVulkanHooks::hkvkCreateDevice(VkPhysicalDevice physicalDevice, VkDeviceCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkDevice* pDevice) { LOG_DEBUG("hkvkCreateDevice"); @@ -66,7 +66,7 @@ VkResult FnVulkanHooks::hkvkCreateDevice(VkPhysicalDevice physicalDevice, VkDevi return result; } -void FnVulkanHooks::hook_vulkan(HMODULE vulkanModule) +void LLVulkanHooks::hook_vulkan(HMODULE vulkanModule) { LOG_DEBUG("Trying to hook Vulkan"); diff --git a/OptiScaler/nvapi/fakenvapi/fn_vulkan_hooks.h b/OptiScaler/low_latency/ll_vulkan_hooks.h similarity index 94% rename from OptiScaler/nvapi/fakenvapi/fn_vulkan_hooks.h rename to OptiScaler/low_latency/ll_vulkan_hooks.h index 28a0f608..b4284884 100644 --- a/OptiScaler/nvapi/fakenvapi/fn_vulkan_hooks.h +++ b/OptiScaler/low_latency/ll_vulkan_hooks.h @@ -1,12 +1,10 @@ #pragma once -#include "log.h" - #include #include #include -class FnVulkanHooks +class LLVulkanHooks { private: static PFN_vkCreateDevice o_vkCreateDevice; diff --git a/OptiScaler/low_latency/low_latency_tech/ll_antilag2.cpp b/OptiScaler/low_latency/low_latency_tech/ll_antilag2.cpp index 235e157f..2e167dfa 100644 --- a/OptiScaler/low_latency/low_latency_tech/ll_antilag2.cpp +++ b/OptiScaler/low_latency/low_latency_tech/ll_antilag2.cpp @@ -34,8 +34,8 @@ inline HRESULT AntiLag2::al2_sleep() // log_event("al2_sleep", "{}", get_timestamp() - pre_sleep); - LOG_TRACE_FAKENVAPI("FSR Latency Reduction 2.0 Call Spot: {}", - current_call_spot == CallSpot::SimulationStart ? "SimulationStart" : "SleepCall"); + LOG_TRACE_LOWLATENCY("FSR Latency Reduction 2.0 Call Spot: {}", + current_call_spot == CallSpot::SimulationStart ? "SimulationStart" : "SleepCall"); return result; } diff --git a/OptiScaler/low_latency/low_latency_tech/ll_antilag_vk.cpp b/OptiScaler/low_latency/low_latency_tech/ll_antilag_vk.cpp index 430e6c79..fa31a36a 100644 --- a/OptiScaler/low_latency/low_latency_tech/ll_antilag_vk.cpp +++ b/OptiScaler/low_latency/low_latency_tech/ll_antilag_vk.cpp @@ -1,8 +1,8 @@ #include "pch.h" #include "ll_antilag_vk.h" -#include +#include "low_latency/ll_vulkan_hooks.h" -bool AntiLagVk::init(IUnknown* pDevice) { return FnVulkanHooks::o_vkAntiLagUpdateAMD != nullptr; } +bool AntiLagVk::init(IUnknown* pDevice) { return LLVulkanHooks::o_vkAntiLagUpdateAMD != nullptr; } // Unsupported bool AntiLagVk::init_using_ctx(void* context) @@ -79,11 +79,11 @@ void AntiLagVk::set_marker(IUnknown* pDevice, MarkerParams* marker_params) antiLagDataInput.pPresentationInfo = &inputInfo; antiLagDataInput.maxFPS = max_fps; - if (FnVulkanHooks::o_vkAntiLagUpdateAMD) + if (LLVulkanHooks::o_vkAntiLagUpdateAMD) { - LOG_TRACE_FAKENVAPI("AntiLag Input: {}, status: {}", marker_params->frame_id, is_enabled()); + LOG_TRACE_LOWLATENCY("AntiLag Input: {}, status: {}", marker_params->frame_id, is_enabled()); - FnVulkanHooks::o_vkAntiLagUpdateAMD((VkDevice) pDevice, &antiLagDataInput); + LLVulkanHooks::o_vkAntiLagUpdateAMD((VkDevice) pDevice, &antiLagDataInput); } } @@ -102,11 +102,11 @@ void AntiLagVk::set_marker(IUnknown* pDevice, MarkerParams* marker_params) antiLagDataPresent.pPresentationInfo = &presentInfo; antiLagDataPresent.maxFPS = max_fps; - if (FnVulkanHooks::o_vkAntiLagUpdateAMD) + if (LLVulkanHooks::o_vkAntiLagUpdateAMD) { - LOG_TRACE_FAKENVAPI("AntiLag Present: {}, status: {}", marker_params->frame_id, is_enabled()); + LOG_TRACE_LOWLATENCY("AntiLag Present: {}, status: {}", marker_params->frame_id, is_enabled()); - FnVulkanHooks::o_vkAntiLagUpdateAMD((VkDevice) pDevice, &antiLagDataPresent); + LLVulkanHooks::o_vkAntiLagUpdateAMD((VkDevice) pDevice, &antiLagDataPresent); } } } diff --git a/OptiScaler/low_latency/low_latency_tech/ll_latencyflex.cpp b/OptiScaler/low_latency/low_latency_tech/ll_latencyflex.cpp index 0cb8eaee..5882fbe6 100644 --- a/OptiScaler/low_latency/low_latency_tech/ll_latencyflex.cpp +++ b/OptiScaler/low_latency/low_latency_tech/ll_latencyflex.cpp @@ -70,8 +70,8 @@ void LatencyFlex::lfx_sleep(uint64_t reflex_frame_id) timestamp = current_timestamp; } - LOG_TRACE_FAKENVAPI("LatencyFlex Call Spot: {}", - current_call_spot == CallSpot::SimulationStart ? "SimulationStart" : "SleepCall"); + LOG_TRACE_LOWLATENCY("LatencyFlex Call Spot: {}", + current_call_spot == CallSpot::SimulationStart ? "SimulationStart" : "SleepCall"); mutex.lock(); this->frame_id++; @@ -94,8 +94,8 @@ void LatencyFlex::lfx_end_frame(uint64_t reflex_frame_id) if (ctx) ctx->EndFrame(frame_id, current_timestamp, &latency, &frame_time); mutex.unlock(); - LOG_TRACE_FAKENVAPI("LFX latency: {}, frame_time: {}, current_timestamp: {}", latency, frame_time, - current_timestamp); + LOG_TRACE_LOWLATENCY("LFX latency: {}, frame_time: {}, current_timestamp: {}", latency, frame_time, + current_timestamp); } bool LatencyFlex::init(IUnknown* pDevice) diff --git a/OptiScaler/low_latency/low_latency_tech/ll_xell.cpp b/OptiScaler/low_latency/low_latency_tech/ll_xell.cpp index e856f5f9..d28a7fd2 100644 --- a/OptiScaler/low_latency/low_latency_tech/ll_xell.cpp +++ b/OptiScaler/low_latency/low_latency_tech/ll_xell.cpp @@ -12,7 +12,7 @@ void XeLL::xell_sleep(uint32_t frame_id) // Don't call XeLL when trying to disable XeLL with XeFG active if (!inited_using_context || is_enabled()) { - LOG_TRACE_FAKENVAPI("Sleeping with frame_id: {}", frame_id); + LOG_TRACE_LOWLATENCY("Sleeping with frame_id: {}", frame_id); XeLLProxy::Sleep()(XeLLProxy::Context(), frame_id); } } diff --git a/OptiScaler/nvapi/fakenvapi.cpp b/OptiScaler/nvapi/fakenvapi.cpp index bed17236..a60d714b 100644 --- a/OptiScaler/nvapi/fakenvapi.cpp +++ b/OptiScaler/nvapi/fakenvapi.cpp @@ -7,7 +7,7 @@ #include "NvApiTypes.h" #include "fakenvapi/nvapi_calls.h" #include "fakenvapi/al2_proxy.h" -#include "fakenvapi/fn_vulkan_hooks.h" +#include #define nvapi_interface_table nvapi_interface_table_extern #include @@ -44,7 +44,7 @@ void fakenvapi::init(bool onlyContext) } } - FnVulkanHooks::hook_vulkan(vulkan_module); + LLVulkanHooks::hook_vulkan(vulkan_module); AL2Proxy::hookAntiLag(); } diff --git a/OptiScaler/nvapi/fakenvapi/log.h b/OptiScaler/nvapi/fakenvapi/log.h index 0523c4ea..43335407 100755 --- a/OptiScaler/nvapi/fakenvapi/log.h +++ b/OptiScaler/nvapi/fakenvapi/log.h @@ -27,9 +27,3 @@ NvAPI_Status Ok(const char* function_name); NvAPI_Status Error(const char* function_name, NvAPI_Status status = NVAPI_ERROR); -template -void log_event(const char* event_name, std::format_string<_Args...> __fmt, _Args&&... __args) -{ - LOG_TRACE_FAKENVAPI("EVENT,{},{},{}", event_name, get_timestamp(), - std::vformat(__fmt.get(), std::make_format_args(__args...))); -} diff --git a/OptiScaler/nvapi/fakenvapi/nvapi_calls.cpp b/OptiScaler/nvapi/fakenvapi/nvapi_calls.cpp index a1ff11f3..899b5f3e 100644 --- a/OptiScaler/nvapi/fakenvapi/nvapi_calls.cpp +++ b/OptiScaler/nvapi/fakenvapi/nvapi_calls.cpp @@ -628,8 +628,8 @@ NvAPI_Status __cdecl NvAPI_Vulkan_InitLowLatencyDevice(HANDLE vkDevice, HANDLE* VkResult res = VK_ERROR_UNKNOWN; - if (FnVulkanHooks::o_vkCreateSemaphore && low_latency_semaphore == VK_NULL_HANDLE) - res = FnVulkanHooks::o_vkCreateSemaphore(device, &createInfo, nullptr, &low_latency_semaphore); + if (LLVulkanHooks::o_vkCreateSemaphore && low_latency_semaphore == VK_NULL_HANDLE) + res = LLVulkanHooks::o_vkCreateSemaphore(device, &createInfo, nullptr, &low_latency_semaphore); if (res != VK_SUCCESS) return NVAPI_ERROR; @@ -676,8 +676,8 @@ NvAPI_Status __cdecl NvAPI_Vulkan_Sleep(HANDLE vkDevice, NvU64 signalValue) VkDevice device = reinterpret_cast(vkDevice); - if (FnVulkanHooks::o_vkSignalSemaphore) - FnVulkanHooks::o_vkSignalSemaphore(device, &signalInfo); + if (LLVulkanHooks::o_vkSignalSemaphore) + LLVulkanHooks::o_vkSignalSemaphore(device, &signalInfo); return LowLatencyCtx::get()->Sleep(vkDevice); } diff --git a/OptiScaler/nvapi/fakenvapi/nvapi_calls.h b/OptiScaler/nvapi/fakenvapi/nvapi_calls.h index 102cf275..ed285707 100644 --- a/OptiScaler/nvapi/fakenvapi/nvapi_calls.h +++ b/OptiScaler/nvapi/fakenvapi/nvapi_calls.h @@ -7,8 +7,8 @@ #include "low_latency.h" #include "low_latency/ll_util.h" +#include "low_latency/ll_vulkan_hooks.h" #include "log.h" -#include "fn_vulkan_hooks.h" namespace nvapi_calls {