@@ -1485,38 +1485,53 @@ static void free_adl(void)
1485
1485
#endif
1486
1486
}
1487
1487
1488
- void clear_adl (int nDevs )
1488
+ void adl_reset_device (int device_id , bool _disabling , bool _freeing )
1489
1489
{
1490
1490
struct gpu_adl * ga ;
1491
- int i ;
1492
1491
1493
1492
if (!adl_active )
1494
1493
return ;
1495
1494
1496
1495
lock_adl ();
1497
- /* Try to reset values to their defaults */
1498
- for (i = 0 ; i < nDevs ; i ++ ) {
1499
- ga = & gpus [i ].adl ;
1500
- /* Only reset the values if we've changed them at any time */
1501
- if (!gpus [i ].has_adl || !ga -> managed )
1502
- continue ;
1503
-
1496
+ ga = & gpus [device_id ].adl ;
1497
+ // Only reset the values if we've changed them at any time
1498
+ if (gpus [device_id ].has_adl && ga -> managed )
1499
+ {
1504
1500
int lev ;
1505
1501
lev = ga -> lpOdParameters .iNumberOfPerformanceLevels - 1 ;
1506
1502
1507
- /* Set exit values of the GPU */
1508
- if (gpus [i ].gpu_engine_exit )
1509
- ga -> DefPerfLev -> aLevels [lev ].iEngineClock = gpus [i ].gpu_engine_exit * 100 ;
1510
- if (gpus [i ].gpu_memclock_exit )
1511
- ga -> DefPerfLev -> aLevels [lev ].iMemoryClock = gpus [i ].gpu_memclock_exit * 100 ;
1512
-
1503
+ ga -> DefPerfLev -> aLevels [lev ].iEngineClock = gpus [device_id ].gpu_engine * 100 ;
1504
+ ga -> DefPerfLev -> aLevels [lev ].iMemoryClock = gpus [device_id ].gpu_memclock * 100 ;
1505
+ if (_disabling ) // Set exit/disable values of the GPU
1506
+ {
1507
+ if (gpus [device_id ].gpu_engine_exit )
1508
+ ga -> DefPerfLev -> aLevels [lev ].iEngineClock = gpus [device_id ].gpu_engine_exit * 100 ;
1509
+ if (gpus [device_id ].gpu_memclock_exit )
1510
+ ga -> DefPerfLev -> aLevels [lev ].iMemoryClock = gpus [device_id ].gpu_memclock_exit * 100 ;
1511
+ }
1513
1512
ADL_Overdrive5_ODPerformanceLevels_Set (ga -> iAdapterIndex , ga -> DefPerfLev );
1514
- free (ga -> DefPerfLev );
1515
- ADL_Overdrive5_FanSpeed_Set (ga -> iAdapterIndex , 0 , & ga -> DefFanSpeedValue );
1516
- ADL_Overdrive5_FanSpeedToDefault_Set (ga -> iAdapterIndex , 0 );
1513
+
1514
+ if (_freeing ) {
1515
+ free (ga -> DefPerfLev );
1516
+ ADL_Overdrive5_FanSpeed_Set (ga -> iAdapterIndex , 0 , & ga -> DefFanSpeedValue );
1517
+ ADL_Overdrive5_FanSpeedToDefault_Set (ga -> iAdapterIndex , 0 );
1518
+ }
1517
1519
}
1518
- adl_active = false;
1519
1520
unlock_adl ();
1521
+ }
1522
+
1523
+ void clear_adl (int nDevs )
1524
+ {
1525
+ int i ;
1526
+
1527
+ if (!adl_active )
1528
+ return ;
1529
+
1530
+ for (i = 0 ; i < nDevs ; i ++ ) {
1531
+ adl_reset_device (i , true, true);
1532
+ }
1533
+
1534
+ adl_active = false;
1520
1535
free_adl ();
1521
1536
}
1522
1537
#endif /* HAVE_ADL */
0 commit comments