示例#1
0
//////////////////////////////////////////////////////////
//
// 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;
}
示例#2
0
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;
}