void EnumerateProfilesOnSystem() { NvAPI_Status status; status = NvAPI_Initialize(); if(status != NVAPI_OK) PrintError(status); NvDRSSessionHandle hSession = 0; status = NvAPI_DRS_CreateSession(&hSession); if(status != NVAPI_OK) PrintError(status); status = NvAPI_DRS_LoadSettings(hSession); if(status != NVAPI_OK) PrintError(status); NvDRSProfileHandle hProfile = 0; unsigned int index = 0; while((status = NvAPI_DRS_EnumProfiles(hSession, index, &hProfile)) == NVAPI_OK) { printf("Profile in position %d:\n", index); DisplayProfileContents(hSession, hProfile); index++; } if(status == NVAPI_END_ENUMERATION) { // this is expected at the end of the enumeration } else if(status != NVAPI_OK) PrintError(status); NvAPI_DRS_DestroySession(hSession); hSession = 0; }
void ll_nvapi_init(NvDRSSessionHandle hSession) { // (2) load all the system settings into the session NvAPI_Status status = NvAPI_DRS_LoadSettings(hSession); if (status != NVAPI_OK) { nvapi_error(status); return; } NvAPI_UnicodeString wsz = { 0 }; memcpy_s(wsz, sizeof(wsz), NVAPI_APPNAME, sizeof(NVAPI_APPNAME)); status = NvAPI_DRS_SetCurrentGlobalProfile(hSession, wsz); if (status != NVAPI_OK) { nvapi_error(status); return; } // (3) Obtain the current profile. NvDRSProfileHandle hProfile = 0; status = NvAPI_DRS_GetCurrentGlobalProfile(hSession, &hProfile); if (status != NVAPI_OK) { nvapi_error(status); return; } // load settings for querying status = NvAPI_DRS_LoadSettings(hSession); if (status != NVAPI_OK) { nvapi_error(status); return; } //get the preferred power management mode for Second Life NVDRS_SETTING drsSetting = {0}; drsSetting.version = NVDRS_SETTING_VER; status = NvAPI_DRS_GetSetting(hSession, hProfile, PREFERRED_PSTATE_ID, &drsSetting); if (status == NVAPI_SETTING_NOT_FOUND) { //only override if the user hasn't specifically set this setting // (4) Specify that we want the VSYNC disabled setting // first we fill the NVDRS_SETTING struct, then we call the function drsSetting.version = NVDRS_SETTING_VER; drsSetting.settingId = PREFERRED_PSTATE_ID; drsSetting.settingType = NVDRS_DWORD_TYPE; drsSetting.u32CurrentValue = PREFERRED_PSTATE_PREFER_MAX; status = NvAPI_DRS_SetSetting(hSession, hProfile, &drsSetting); if (status != NVAPI_OK) { nvapi_error(status); return; } // (5) Now we apply (or save) our changes to the system status = NvAPI_DRS_SaveSettings(hSession); if (status != NVAPI_OK) { nvapi_error(status); return; } } else if (status != NVAPI_OK) { nvapi_error(status); return; } }
int main() { if (NvAPI_Initialize() != NVAPI_OK) throw std::runtime_error("NVIDIA Api not initialized"); if (NvAPI_DRS_CreateSession(&_session) != NVAPI_OK) throw std::runtime_error("can't create session"); if (NvAPI_DRS_LoadSettings(_session) != NVAPI_OK) throw std::runtime_error("can't load system settings"); if (NvAPI_DRS_GetCurrentGlobalProfile(_session, &_profile) != NVAPI_OK) throw std::runtime_error("can't get current global profile"); NvPhysicalGpuHandle nvGPUHandle[NVAPI_MAX_PHYSICAL_GPUS]; NvAPI_Status status; NvU32 GpuCount; NvU32 DeviceId; NvU32 SubSystemId; NvU32 RevisionId; NvU32 ExtDeviceId; NvU32 BusId; NvU32 BiosRevision; NvU32 BiosRevisionOEM; NV_BOARD_INFO BoardInfo; BoardInfo.version = NV_BOARD_INFO_VER; NvU32 ConfiguredFeatureMask; NvU32 ConsistentFeatureMask; NvU32 CoreCount; NvAPI_EnumPhysicalGPUs(nvGPUHandle, &GpuCount); NvAPI_ShortString str; NvAPI_GPU_GetFullName(nvGPUHandle[0], str); NvAPI_GPU_GetPCIIdentifiers(nvGPUHandle[0], &DeviceId, &SubSystemId, &RevisionId, &ExtDeviceId); NvAPI_GPU_GetBusId(nvGPUHandle[0], &BusId); NvAPI_GPU_GetVbiosRevision(nvGPUHandle[0], &BiosRevision); NvAPI_GPU_GetVbiosOEMRevision(nvGPUHandle[0], &BiosRevisionOEM); NvAPI_GPU_GetVbiosVersionString(nvGPUHandle[0], str); status = NvAPI_GPU_GetBoardInfo(nvGPUHandle[0], &BoardInfo); status = NvAPI_GPU_WorkstationFeatureQuery(nvGPUHandle[0], &ConfiguredFeatureMask, &ConsistentFeatureMask); status = NvAPI_GPU_GetGpuCoreCount(nvGPUHandle[0], &CoreCount); NV_CHIPSET_INFO info; info.version = NV_CHIPSET_INFO_VER_4; status =NvAPI_SYS_GetChipSetInfo(&info); NvAPI_GetInterfaceVersionString(str); unsigned int test= (unsigned int) -0x68; unsigned int index = 0; while ((status = NvAPI_DRS_EnumProfiles(_session, index, &_profile)) == NVAPI_OK) { _profInfo.version = NVDRS_PROFILE_VER; if (NvAPI_DRS_GetProfileInfo(_session, _profile, &_profInfo) != NVAPI_OK) throw std::runtime_error("can't get current global profile info"); index++; } EnumerateProfilesOnSystem(); NvAPI_DRS_DestroySession(_session); return 0; }