From 207e20eecbe95fe62a7fd21be770945fa3e519fc Mon Sep 17 00:00:00 2001 From: cdozdil Date: Thu, 5 Feb 2026 13:46:15 +0300 Subject: [PATCH] Remove requested extensions and optical flow, fixed X4 reflex crash issue --- OptiScaler/hooks/Streamline_Hooks.cpp | 86 +++++++++++++++++++++++++-- 1 file changed, 80 insertions(+), 6 deletions(-) diff --git a/OptiScaler/hooks/Streamline_Hooks.cpp b/OptiScaler/hooks/Streamline_Hooks.cpp index 1bd418dc..b328f7ed 100644 --- a/OptiScaler/hooks/Streamline_Hooks.cpp +++ b/OptiScaler/hooks/Streamline_Hooks.cpp @@ -477,9 +477,26 @@ bool StreamlineHooks::hkdlss_slOnPluginLoad(void* params, const char* loaderJSON { nlohmann::json configJson = nlohmann::json::parse(*pluginJSON); - configJson["external"]["vk"]["instance"]["extensions"].clear(); - configJson["external"]["vk"]["device"]["extensions"].clear(); - configJson["external"]["vk"]["device"]["1.2_features"].clear(); + if (configJson.contains("/vk/instance/extensions"_json_pointer)) + configJson["external"]["vk"]["instance"]["extensions"].clear(); + + if (configJson.contains("/vk/device/extensions"_json_pointer)) + configJson["external"]["vk"]["device"]["extensions"].clear(); + + if (configJson.contains("/vk/device/1.2_features"_json_pointer)) + configJson["external"]["vk"]["device"]["1.2_features"].clear(); + + if (configJson.contains("/vk/device/1.3_features"_json_pointer)) + configJson["external"]["vk"]["device"]["1.3_features"].clear(); + + // if (configJson.contains("/vk/device/queues/graphics/count"_json_pointer)) + // configJson["external"]["device"]["queues"]["compute"]["count"] = 0; + + // if (configJson.contains("/vk/device/queues/compute/count"_json_pointer)) + // configJson["external"]["device"]["queues"]["graphics"]["count"] = 0; + + // if (configJson.contains("/vk/device/queues/opticalflow/count"_json_pointer)) + // configJson["external"]["vk"]["device"]["1.3_features"]["opticalflow"]["count"] = 0; config = configJson.dump(); @@ -520,14 +537,38 @@ bool StreamlineHooks::hkdlssg_slOnPluginLoad(void* params, const char* loaderJSO { configJson["hooks"].clear(); configJson["exclusive_hooks"].clear(); + + if (configJson.contains("vsync")) + configJson["vsync"]["supported"] = true; // disable eVSyncOffRequired + + if (configJson.contains("hws")) + configJson["hws"]["required"] = false; // disable eHardwareSchedulingRequired + configJson["external"]["feature"]["tags"].clear(); // We handle the DLSSG resources } if (Config::Instance()->VulkanExtensionSpoofing.value_or_default()) { - configJson["external"]["vk"]["instance"]["extensions"].clear(); - configJson["external"]["vk"]["device"]["extensions"].clear(); - configJson["external"]["vk"]["device"]["1.2_features"].clear(); + if (configJson.contains("/vk/instance/extensions"_json_pointer)) + configJson["external"]["vk"]["instance"]["extensions"].clear(); + + if (configJson.contains("/vk/device/extensions"_json_pointer)) + configJson["external"]["vk"]["device"]["extensions"].clear(); + + if (configJson.contains("/vk/device/1.2_features"_json_pointer)) + configJson["external"]["vk"]["device"]["1.2_features"].clear(); + + if (configJson.contains("/vk/device/1.3_features"_json_pointer)) + configJson["external"]["vk"]["device"]["1.3_features"].clear(); + + if (configJson.contains("/vk/device/queues/graphics/count"_json_pointer)) + configJson["external"]["device"]["queues"]["compute"]["count"] = 0; + + if (configJson.contains("/vk/device/queues/compute/count"_json_pointer)) + configJson["external"]["device"]["queues"]["graphics"]["count"] = 0; + + if (configJson.contains("/vk/device/queues/opticalflow/count"_json_pointer)) + configJson["external"]["vk"]["device"]["1.3_features"]["opticalflow"]["count"] = 0; } config = configJson.dump(); @@ -644,6 +685,9 @@ bool StreamlineHooks::hkreflex_slOnPluginLoad(void* params, const char* loaderJS { LOG_FUNC(); + // TODO: do it better than "static" and hoping for the best + static std::string config; + uint32_t currentArch = 0; if (Config::Instance()->StreamlineSpoofing.value_or_default()) { @@ -657,6 +701,36 @@ bool StreamlineHooks::hkreflex_slOnPluginLoad(void* params, const char* loaderJS if (Config::Instance()->StreamlineSpoofing.value_or_default()) setArch(currentArch); + nlohmann::json configJson = nlohmann::json::parse(*pluginJSON); + + if (Config::Instance()->VulkanExtensionSpoofing.value_or_default()) + { + if (configJson.contains("/vk/instance/extensions"_json_pointer)) + configJson["external"]["vk"]["instance"]["extensions"].clear(); + + if (configJson.contains("/vk/device/extensions"_json_pointer)) + configJson["external"]["vk"]["device"]["extensions"].clear(); + + if (configJson.contains("/vk/device/1.2_features"_json_pointer)) + configJson["external"]["vk"]["device"]["1.2_features"].clear(); + + if (configJson.contains("/vk/device/1.3_features"_json_pointer)) + configJson["external"]["vk"]["device"]["1.3_features"].clear(); + + if (configJson.contains("/vk/device/queues/graphics/count"_json_pointer)) + configJson["external"]["device"]["queues"]["compute"]["count"] = 0; + + if (configJson.contains("/vk/device/queues/compute/count"_json_pointer)) + configJson["external"]["device"]["queues"]["graphics"]["count"] = 0; + + if (configJson.contains("/vk/device/queues/opticalflow/count"_json_pointer)) + configJson["external"]["vk"]["device"]["1.3_features"]["opticalflow"]["count"] = 0; + } + + config = configJson.dump(); + + *pluginJSON = config.c_str(); + return result; }