PPH_STRING NvGpuQueryName(VOID) { if (NvAPI_GPU_GetFullName) { NvAPI_ShortString nvNameAnsiString = ""; if (NvAPI_GPU_GetFullName(NvGpuPhysicalHandleList->Items[0], nvNameAnsiString) == NVAPI_OK) { return PhConvertMultiByteToUtf16(nvNameAnsiString); } } return PhCreateString(L"N/A"); }
////////////////////////////////////////////////////////// // // NvOptimusDetect // // Try detecting optimus via NvAPI // ////////////////////////////////////////////////////////// bool NvOptimusDetect( void ) { if( NvAPI_Initialize() != NVAPI_OK ) { return false; } // Get and log driver info NvAPI_ShortString szDesc = "-"; NvU32 uiDriverVersion = -1; NvAPI_ShortString szBuildBranchString = "-"; NvAPI_GetInterfaceVersionString( szDesc ); NvAPI_SYS_GetDriverAndBranchVersion( &uiDriverVersion, szBuildBranchString ); WriteDebugEventAndReport( 7460, SString( "NvAPI - InterfaceVersion:'%s' DriverVersion:%d.%d Branch:'%s'", szDesc, uiDriverVersion / 100, uiDriverVersion % 100, szBuildBranchString ) ); // Get all the Physical GPU Handles NvPhysicalGpuHandle nvGPUHandle[NVAPI_MAX_PHYSICAL_GPUS] = {0}; NvU32 uiGpuCount = 0; if( NvAPI_EnumPhysicalGPUs( nvGPUHandle, &uiGpuCount ) != NVAPI_OK ) { return false; } bool bFoundOptimus = false; for( NvU32 i = 0; i < uiGpuCount; i++ ) { NV_SYSTEM_TYPE SystemType = (NV_SYSTEM_TYPE)-1; // 1-Laptop 2-Desktop NV_GPU_TYPE GpuType = (NV_GPU_TYPE)-1; // 1-Integrated 2-Discrete NvAPI_ShortString szName = "-"; NvAPI_GPU_GetSystemType( nvGPUHandle[i], &SystemType ); NvAPI_GPU_GetGPUType( nvGPUHandle[i], &GpuType ); NvAPI_GPU_GetFullName( nvGPUHandle[i], szName ); SString strStatus( "NvAPI - GPU %d/%d - SystemType:%d GpuType:%d (%s)", i, uiGpuCount, SystemType, GpuType, szName ); if ( SystemType == NV_SYSTEM_TYPE_LAPTOP && GpuType == NV_SYSTEM_TYPE_DGPU ) { bFoundOptimus = true; strStatus += " FoundOptimus"; } WriteDebugEventAndReport( 7461, strStatus ); } return bFoundOptimus; }
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; }