diff --git a/platform/windows/gl_manager_windows.cpp b/platform/windows/gl_manager_windows.cpp index d3972c7bbc9860..5aeb1f8d086d97 100644 --- a/platform/windows/gl_manager_windows.cpp +++ b/platform/windows/gl_manager_windows.cpp @@ -85,6 +85,7 @@ typedef int(__cdecl *NvAPI_DRS_CreateApplication_t)(NvDRSSessionHandle, NvDRSPro typedef int(__cdecl *NvAPI_DRS_SaveSettings_t)(NvDRSSessionHandle); typedef int(__cdecl *NvAPI_DRS_SetSetting_t)(NvDRSSessionHandle, NvDRSProfileHandle, NVDRS_SETTING *); typedef int(__cdecl *NvAPI_DRS_FindProfileByName_t)(NvDRSSessionHandle, NvAPI_UnicodeString, NvDRSProfileHandle *); +typedef int(__cdecl *NvAPI_DRS_FindApplicationByName_t)(NvDRSSessionHandle, NvAPI_UnicodeString, NvDRSProfileHandle *, NVDRS_APPLICATION *); NvAPI_GetErrorMessage_t NvAPI_GetErrorMessage__; static bool nvapi_err_check(const char *msg, int status) { @@ -135,6 +136,7 @@ void GLManager_Windows::_nvapi_disable_threaded_optimization() { NvAPI_DRS_SaveSettings_t NvAPI_DRS_SaveSettings = (NvAPI_DRS_SaveSettings_t)NvAPI_QueryInterface(0xFCBC7E14); NvAPI_DRS_SetSetting_t NvAPI_DRS_SetSetting = (NvAPI_DRS_SetSetting_t)NvAPI_QueryInterface(0x577DD202); NvAPI_DRS_FindProfileByName_t NvAPI_DRS_FindProfileByName = (NvAPI_DRS_FindProfileByName_t)NvAPI_QueryInterface(0x7E4A9A0B); + NvAPI_DRS_FindApplicationByName_t NvAPI_DRS_FindApplicationByName = (NvAPI_DRS_FindApplicationByName_t)NvAPI_QueryInterface(0xEEE566B2); if (!nvapi_err_check("NVAPI: Init failed", NvAPI_Initialize())) { return; @@ -169,9 +171,9 @@ void GLManager_Windows::_nvapi_disable_threaded_optimization() { NvDRSProfileHandle profile_handle = 0; - int status = NvAPI_DRS_FindProfileByName(session_handle, (NvU16 *)(app_profile_name_u16.ptrw()), &profile_handle); + int profile_status = NvAPI_DRS_FindProfileByName(session_handle, (NvU16 *)(app_profile_name_u16.ptrw()), &profile_handle); - if (status != 0) { + if (profile_status != 0) { print_verbose("NVAPI: Profile not found, creating...."); NVDRS_PROFILE profile_info; @@ -184,9 +186,17 @@ void GLManager_Windows::_nvapi_disable_threaded_optimization() { NvAPI_Unload(); return; } + } + + NvDRSProfileHandle app_profile_handle = 0; + NVDRS_APPLICATION_V4 app; + app.version = NVDRS_APPLICATION_VER_V4; + + int app_status = NvAPI_DRS_FindApplicationByName(session_handle, (NvU16 *)(app_executable_name_u16.ptrw()), &app_profile_handle, &app); + + if (app_status != 0) { + print_verbose("NVAPI: Application not found, adding to profile..."); - NVDRS_APPLICATION_V4 app; - app.version = NVDRS_APPLICATION_VER_V4; app.isPredefined = 0; app.isMetro = 1; app.isCommandLine = 1;