mirror of
https://github.com/optiscaler/OptiScaler.git
synced 2026-08-27 16:46:36 +00:00
Fix FG in Dying Light 2
Thanks to Artur for finding this fix
This commit is contained in:
@@ -32,6 +32,13 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) {
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
// names from: https://github.com/SveSop/nvapi_standalone/blob/master/dlls/nvapi/nvapi.c
|
||||
NVAPI_INTERFACE_TABLE additional_interface_table[] = {
|
||||
{ "NvAPI_Diag_ReportCallStart", 0x33c7358c },
|
||||
{ "NvAPI_Diag_ReportCallReturn", 0x593e8644 },
|
||||
{ "MISC_unknown", 0xe9b009b9 }
|
||||
};
|
||||
|
||||
namespace nvd {
|
||||
extern "C" {
|
||||
NvAPI_Status __cdecl placeholder() {
|
||||
@@ -46,75 +53,78 @@ namespace nvd {
|
||||
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];
|
||||
}
|
||||
|
||||
auto it = std::find_if(
|
||||
std::begin(nvapi_interface_table),
|
||||
std::end(nvapi_interface_table),
|
||||
std::begin(extended_interface_table),
|
||||
std::end(extended_interface_table),
|
||||
[id](const auto& item) { return item.id == id; });
|
||||
|
||||
if (it == std::end(nvapi_interface_table)) {
|
||||
if (it == std::end(extended_interface_table)) {
|
||||
log(std::format("NvAPI_QueryInterface (0x{:x}): Unknown interface ID", id));
|
||||
return registry.insert({ id, nullptr }).first->second;
|
||||
}
|
||||
|
||||
#define INSERT_AND_RETURN_WHEN_EQUALS(method) \
|
||||
if (std::string(it->func) == #method) \
|
||||
return registry.insert({id, (void *)method}).first->second;
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_Initialize)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_GetInterfaceVersionString)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_EnumNvidiaDisplayHandle)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_GetLogicalGPUFromPhysicalGPU)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_EnumPhysicalGPUs)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_EnumLogicalGPUs)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_GetGPUIDfromPhysicalGPU)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_GetPhysicalGPUFromGPUID)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_GetPhysicalGPUsFromDisplay)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_GetErrorMessage)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_GPU_GetLogicalGpuInfo)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_GPU_GetConnectedDisplayIds)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_GPU_CudaEnumComputeCapableGpus)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_GPU_GetArchInfo)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_GPU_GetPCIIdentifiers)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_GPU_GetFullName)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_GPU_GetGpuCoreCount)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_GPU_GetAllClockFrequencies)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_GPU_GetAdapterIdFromPhysicalGpu)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_DISP_GetDisplayIdByDisplayName)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_DISP_GetGDIPrimaryDisplayId)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_Disp_SetOutputMode)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_Disp_GetOutputMode)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_Mosaic_GetDisplayViewportsByResolution)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_SYS_GetDisplayDriverInfo)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_SYS_GetDriverAndBranchVersion)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_SYS_GetDisplayIdFromGpuAndOutputId)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_SYS_GetGpuAndOutputIdFromDisplayId)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_D3D_SetResourceHint)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_D3D_GetObjectHandleForResource)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_D3D_GetSleepStatus)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_D3D_GetLatency)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_D3D_SetSleepMode)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_D3D_SetLatencyMarker)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_D3D_Sleep)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_D3D11_IsNvShaderExtnOpCodeSupported)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_D3D11_BeginUAVOverlap)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_D3D11_EndUAVOverlap)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_D3D11_SetDepthBoundsTest)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_D3D12_GetRaytracingCaps)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_D3D12_IsNvShaderExtnOpCodeSupported)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_D3D12_SetNvShaderExtnSlotSpaceLocalThread)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_D3D12_GetRaytracingAccelerationStructurePrebuildInfoEx)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_D3D12_BuildRaytracingAccelerationStructureEx)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_D3D12_NotifyOutOfBandCommandQueue)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_D3D12_SetAsyncFrameMarker)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_DRS_CreateSession)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_DRS_LoadSettings)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_DRS_GetBaseProfile)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_DRS_GetSetting)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_DRS_DestroySession)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_Unload)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_GetInterfaceVersionString)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_EnumNvidiaDisplayHandle)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_GetLogicalGPUFromPhysicalGPU)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_EnumPhysicalGPUs)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_EnumLogicalGPUs)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_GetGPUIDfromPhysicalGPU)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_GetPhysicalGPUFromGPUID)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_GetPhysicalGPUsFromDisplay)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_GetErrorMessage)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_GPU_GetLogicalGpuInfo)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_GPU_GetConnectedDisplayIds)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_GPU_CudaEnumComputeCapableGpus)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_GPU_GetArchInfo)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_GPU_GetPCIIdentifiers)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_GPU_GetFullName)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_GPU_GetGpuCoreCount)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_GPU_GetAllClockFrequencies)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_GPU_GetAdapterIdFromPhysicalGpu)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_DISP_GetDisplayIdByDisplayName)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_DISP_GetGDIPrimaryDisplayId)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_Disp_SetOutputMode)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_Disp_GetOutputMode)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_Mosaic_GetDisplayViewportsByResolution)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_SYS_GetDisplayDriverInfo)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_SYS_GetDriverAndBranchVersion)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_SYS_GetDisplayIdFromGpuAndOutputId)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_SYS_GetGpuAndOutputIdFromDisplayId)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_D3D_SetResourceHint)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_D3D_GetObjectHandleForResource)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_D3D_GetSleepStatus)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_D3D_GetLatency)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_D3D_SetSleepMode)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_D3D_SetLatencyMarker)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_D3D_Sleep)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_D3D11_IsNvShaderExtnOpCodeSupported)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_D3D11_BeginUAVOverlap)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_D3D11_EndUAVOverlap)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_D3D11_SetDepthBoundsTest)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_D3D12_GetRaytracingCaps)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_D3D12_IsNvShaderExtnOpCodeSupported)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_D3D12_SetNvShaderExtnSlotSpaceLocalThread)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_D3D12_GetRaytracingAccelerationStructurePrebuildInfoEx)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_D3D12_BuildRaytracingAccelerationStructureEx)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_D3D12_NotifyOutOfBandCommandQueue)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_D3D12_SetAsyncFrameMarker)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_DRS_CreateSession)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_DRS_LoadSettings)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_DRS_GetBaseProfile)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_DRS_GetSetting)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_DRS_DestroySession)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(NvAPI_Unload)
|
||||
INSERT_AND_RETURN_WHEN_EQUALS(MISC_unknown)
|
||||
|
||||
#undef INSERT_AND_RETURN_WHEN_EQUALS
|
||||
|
||||
log(std::format("{}: not implemented, placeholder given", it->func));
|
||||
log(std::format("{}: not implemented, placeholder given", it->func));
|
||||
return registry.insert({ id, (void*)placeholder }).first->second;
|
||||
// return registry.insert({ id, nullptr }).first->second;
|
||||
}
|
||||
|
||||
@@ -449,4 +449,9 @@ namespace nvd {
|
||||
NvAPI_Status __cdecl NvAPI_Unload() {
|
||||
return Ok();
|
||||
}
|
||||
|
||||
NvAPI_Status __cdecl MISC_unknown(IUnknown* unknown, MiscUnk* pMiscUnk) {
|
||||
*pMiscUnk = { 0x1, 0x1, 0x1, 0x1 };
|
||||
return Ok();
|
||||
}
|
||||
}
|
||||
@@ -79,4 +79,5 @@ namespace nvd {
|
||||
NvAPI_Status __cdecl NvAPI_DRS_GetSetting(NvDRSSessionHandle hSession, NvDRSProfileHandle hProfile, NvU32 settingId, NVDRS_SETTING* pSetting);
|
||||
NvAPI_Status __cdecl NvAPI_DRS_DestroySession(NvDRSSessionHandle session);
|
||||
NvAPI_Status __cdecl NvAPI_Unload();
|
||||
NvAPI_Status __cdecl MISC_unknown(IUnknown* unknown, MiscUnk* pMiscUnk);
|
||||
}
|
||||
@@ -5,8 +5,16 @@
|
||||
#include <map>
|
||||
#include <cstdint>
|
||||
|
||||
struct MiscUnk {
|
||||
uint32_t data[4];
|
||||
};
|
||||
|
||||
void tonvss(NvAPI_ShortString nvss, std::string str);
|
||||
|
||||
#define INSERT_AND_RETURN_WHEN_EQUALS(method) \
|
||||
if (std::string(it->func) == #method) \
|
||||
return registry.insert({id, (void *)method}).first->second;
|
||||
|
||||
// function taken from jp7677's dxvk-nvapi project licensed under MIT
|
||||
inline std::string fromErrorNr(const int16_t errorNr) {
|
||||
static const std::map<int16_t, std::string> errors{
|
||||
|
||||
Reference in New Issue
Block a user