Skip to content

Commit 22ca4c0

Browse files
committed
Added voltage domain support and helpers to clock boost lock
1 parent a024687 commit 22ca4c0

3 files changed

Lines changed: 69 additions & 5 deletions

File tree

NvAPIWrapper/Native/GPU/PublicClockDomain.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using NvAPIWrapper.Native.GPU.Structures;
1+
using NvAPIWrapper.Native.GPU.Structures;
22

33
namespace NvAPIWrapper.Native.GPU
44
{
@@ -22,6 +22,11 @@ public enum PublicClockDomain
2222
/// </summary>
2323
Memory = 4,
2424

25+
/// <summary>
26+
/// Voltage / V/F curve lock
27+
/// </summary>
28+
Voltage = 6,
29+
2530
/// <summary>
2631
/// Processor clock
2732
/// </summary>

NvAPIWrapper/Native/GPU/Structures/PrivateClockBoostLockV2.cs

Lines changed: 56 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,8 @@ public static PrivateClockBoostLockV2 CreatePStateAndFrequencyLock(PerformanceSt
6969
}
7070

7171
/// <summary>
72-
/// Creates a reset configuration to return clocks to dynamic management
72+
/// Creates a reset configuration to return clock and performance state domains (0, 1, 4, 5) to dynamic management.
73+
/// To reset voltage lock (Domain 6), use <see cref="CreateVoltageReset" />.
7374
/// </summary>
7475
public static PrivateClockBoostLockV2 CreateDynamicReset()
7576
{
@@ -82,6 +83,29 @@ public static PrivateClockBoostLockV2 CreateDynamicReset()
8283
});
8384
}
8485

86+
/// <summary>
87+
/// Creates a lock configuration for a target voltage (Domain 6)
88+
/// </summary>
89+
/// <param name="voltageInMicroV">The target voltage in uV.</param>
90+
public static PrivateClockBoostLockV2 CreateVoltageLock(uint voltageInMicroV)
91+
{
92+
return new PrivateClockBoostLockV2(new[]
93+
{
94+
ClockBoostLock.CreateVoltageLock(voltageInMicroV)
95+
});
96+
}
97+
98+
/// <summary>
99+
/// Creates a reset configuration for voltage (Domain 6) to return to dynamic management
100+
/// </summary>
101+
public static PrivateClockBoostLockV2 CreateVoltageReset()
102+
{
103+
return new PrivateClockBoostLockV2(new[]
104+
{
105+
ClockBoostLock.CreateVoltageReset()
106+
});
107+
}
108+
85109
/// <summary>
86110
/// Contains information regarding a clock boost lock entry
87111
/// </summary>
@@ -208,6 +232,37 @@ public static ClockBoostLock CreateDynamicReset(uint domain)
208232
lockEntry._Flag = 0;
209233
return lockEntry;
210234
}
235+
236+
/// <summary>
237+
/// Creates a voltage lock entry (Domain 6, Manual mode)
238+
/// </summary>
239+
/// <param name="voltageInMicroV">The target voltage in uV.</param>
240+
public static ClockBoostLock CreateVoltageLock(uint voltageInMicroV)
241+
{
242+
var lockEntry = new ClockBoostLock();
243+
lockEntry._ClockDomain = PublicClockDomain.Voltage;
244+
lockEntry._Mode = 0;
245+
lockEntry._LockMode = ClockLockMode.Manual;
246+
lockEntry._Value = 0;
247+
lockEntry._VoltageInMicroV = voltageInMicroV;
248+
lockEntry._Flag = 0;
249+
return lockEntry;
250+
}
251+
252+
/// <summary>
253+
/// Creates a voltage reset entry (Domain 6, Dynamic mode)
254+
/// </summary>
255+
public static ClockBoostLock CreateVoltageReset()
256+
{
257+
var lockEntry = new ClockBoostLock();
258+
lockEntry._ClockDomain = PublicClockDomain.Voltage;
259+
lockEntry._Mode = 0;
260+
lockEntry._LockMode = ClockLockMode.None;
261+
lockEntry._Value = 0;
262+
lockEntry._VoltageInMicroV = 0;
263+
lockEntry._Flag = 0;
264+
return lockEntry;
265+
}
211266
}
212267
}
213268
}

NvAPIWrapper/Native/GPUApi.Performance.cs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -95,13 +95,17 @@ public static IClockFrequencies GetAllClockFrequencies(
9595

9696
/// <summary>
9797
/// [PRIVATE] - [Pascal Only]
98-
/// Gets the clock boost lock for the passed GPU handle.
98+
/// Gets the clock boost lock for the passed GPU handle and target clock domain.
9999
/// </summary>
100100
/// <param name="gpuHandle">The handle of the GPU to perform the operation on.</param>
101+
/// <param name="clockDomain">The clock domain to query. Defaults to <see cref="PublicClockDomain.Graphics" />.</param>
101102
/// <returns>The GPU clock boost lock.</returns>
102-
public static PrivateClockBoostLockV2 GetClockBoostLock(PhysicalGPUHandle gpuHandle)
103+
public static PrivateClockBoostLockV2 GetClockBoostLock(
104+
PhysicalGPUHandle gpuHandle,
105+
PublicClockDomain clockDomain = PublicClockDomain.Graphics)
103106
{
104-
var instance = typeof(PrivateClockBoostLockV2).Instantiate<PrivateClockBoostLockV2>();
107+
var lockEntry = new PrivateClockBoostLockV2.ClockBoostLock(clockDomain, ClockLockMode.None, 0);
108+
var instance = new PrivateClockBoostLockV2(new[] { lockEntry });
105109

106110
using (var clockLockReference = ValueTypeReference.FromValueType(instance))
107111
{

0 commit comments

Comments
 (0)