diff --git a/OptiScaler/nvapi/fakenvapi/fakenvapi.cpp b/OptiScaler/nvapi/fakenvapi/fakenvapi.cpp index bd96c72c..62b90924 100644 --- a/OptiScaler/nvapi/fakenvapi/fakenvapi.cpp +++ b/OptiScaler/nvapi/fakenvapi/fakenvapi.cpp @@ -688,18 +688,9 @@ namespace fakenvapi { return OK(); } - // TODO: Remove? + // Removed NvAPI_Status __cdecl Fake_GetLatency(uint64_t* call_spot, uint64_t* target, uint64_t* latency, uint64_t* frame_time) { - // if (!call_spot || !target || !latency || !frame_time) return ERROR_VALUE(NVAPI_INVALID_POINTER); - - // if (LowLatencyCtx::get()->get_mode() != Mode::LatencyFlex) return ERROR_VALUE(NVAPI_DATA_NOT_FOUND); - // *call_spot = (uint64_t)LowLatencyCtx::get()->call_spot; - - // *target = LowLatencyCtx::get()->lfx_stats.target; - // *latency = LowLatencyCtx::get()->lfx_stats.latency; - // *frame_time = LowLatencyCtx::get()->lfx_stats.frame_time; - - return ERROR(); + return ERROR_VALUE(NVAPI_NO_IMPLEMENTATION); } NvAPI_Status __cdecl Fake_InformFGState(bool fg_state) { diff --git a/OptiScaler/nvapi/fakenvapi/main.cpp b/OptiScaler/nvapi/fakenvapi/main.cpp index 93ce11a1..78ad61b7 100755 --- a/OptiScaler/nvapi/fakenvapi/main.cpp +++ b/OptiScaler/nvapi/fakenvapi/main.cpp @@ -63,12 +63,7 @@ NVAPI_INTERFACE_TABLE additional_interface_table[] = { { "NvAPI_SK_2", 0x11104158 }, { "NvAPI_SK_3", 0xe3795199 }, { "NvAPI_SK_4", 0xdf0dfcdd }, - { "NvAPI_SK_5", 0x932ac8fb }, - { "Fake_GetLatency", 0x21372137 }, - { "Fake_InformFGState", 0x21382138 }, - { "Fake_InformPresentFG", 0x21392139 }, - { "Fake_GetAntiLagCtx", 0x21402140 }, - { "Fake_GetLowLatencyCtx", 0x21412141 } + { "NvAPI_SK_5", 0x932ac8fb } }; namespace fakenvapi { @@ -86,11 +81,22 @@ namespace fakenvapi { if (entry != registry.end()) return entry->second; - constexpr auto table_size = sizeof(nvapi_interface_table)/sizeof(nvapi_interface_table[0]); - struct NVAPI_INTERFACE_TABLE extended_interface_table[table_size + sizeof(additional_interface_table)/sizeof(additional_interface_table[0])] {}; - memcpy(extended_interface_table, nvapi_interface_table, sizeof(nvapi_interface_table)); - for (unsigned int i = 0; i < sizeof(additional_interface_table)/sizeof(additional_interface_table[0]); i++) { - extended_interface_table[table_size + i] = additional_interface_table[i]; + constexpr auto original_size = sizeof(nvapi_interface_table)/sizeof(nvapi_interface_table[0]); + constexpr auto additional_size = sizeof(additional_interface_table)/sizeof(additional_interface_table[0]); + constexpr auto fakenvapi_size = sizeof(fakenvapi_interface_table)/sizeof(fakenvapi_interface_table[0]); + + constexpr auto total_size = original_size + additional_size + fakenvapi_size; + + struct NVAPI_INTERFACE_TABLE extended_interface_table[total_size] {}; + memcpy(extended_interface_table, nvapi_interface_table, sizeof(nvapi_interface_table)); // copy original table + + for (unsigned int i = 0; i < additional_size; i++) { + extended_interface_table[original_size + i] = additional_interface_table[i]; + } + + for (unsigned int i = 0; i < fakenvapi_size; i++) { + extended_interface_table[original_size + additional_size + i].func = fakenvapi_interface_table[i].func; + extended_interface_table[original_size + additional_size + i].id = fakenvapi_interface_table[i].id; } auto it = std::find_if(