Esempio n. 1
0
PPH_STRING NvGpuQueryDriverVersion(VOID)
{
    if (NvAPI_SYS_GetDriverAndBranchVersion)
    {
        NvU32 driverVersion = 0;
        NvAPI_ShortString driverAndBranchString = "";

        if (NvAPI_SYS_GetDriverAndBranchVersion(&driverVersion, driverAndBranchString) == NVAPI_OK)
        {
            return PhFormatString(L"%lu.%lu [%hs]", 
                driverVersion / 100, 
                driverVersion % 100, 
                driverAndBranchString
                );
        }
    }

    if (NvAPI_GetDisplayDriverVersion)
    {
        NV_DISPLAY_DRIVER_VERSION nvDisplayDriverVersion = { NV_DISPLAY_DRIVER_VERSION_VER };

        if (NvAPI_GetDisplayDriverVersion(NvGpuDisplayHandleList->Items[0], &nvDisplayDriverVersion) == NVAPI_OK)
        {
            return PhFormatString(L"%lu.%lu [%hs]", 
                nvDisplayDriverVersion.drvVersion / 100, 
                nvDisplayDriverVersion.drvVersion % 100,
                nvDisplayDriverVersion.szBuildBranchString
                );
        }
    }

    return PhCreateString(L"N/A");
}
Esempio n. 2
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;
}