using NvAPIWrapper.Native.GPU; using NvAPIWrapper.Native.Interfaces.GPU; namespace NvAPIWrapper.GPU { /// /// Represents a performance state clock settings /// public class GPUPerformanceStateClock { internal GPUPerformanceStateClock(IPerformanceStates20ClockEntry states20ClockEntry) { ClockDomain = states20ClockEntry.DomainId; IsReadOnly = !states20ClockEntry.IsEditable; ClockDeltaInkHz = states20ClockEntry.FrequencyDeltaInkHz.DeltaValue; ClockDeltaRangeInkHz = new GPUPerformanceStateValueRange( states20ClockEntry.FrequencyDeltaInkHz.DeltaRange.Minimum, states20ClockEntry.FrequencyDeltaInkHz.DeltaRange.Maximum ); if (states20ClockEntry.ClockType == PerformanceStates20ClockType.Range) { CurrentClockInkHz = new GPUPerformanceStateValueRange( states20ClockEntry.FrequencyRange.MinimumFrequencyInkHz, states20ClockEntry.FrequencyRange.MaximumFrequencyInkHz ); BaseClockInkHz = new GPUPerformanceStateValueRange( CurrentClockInkHz.Minimum - ClockDeltaInkHz, CurrentClockInkHz.Maximum - ClockDeltaInkHz ); DependentVoltageDomain = states20ClockEntry.FrequencyRange.VoltageDomainId; DependentVoltageRangeInMicroVolt = new GPUPerformanceStateValueRange( states20ClockEntry.FrequencyRange.MinimumVoltageInMicroVolt, states20ClockEntry.FrequencyRange.MaximumVoltageInMicroVolt ); } else { CurrentClockInkHz = new GPUPerformanceStateValueRange( states20ClockEntry.SingleFrequency.FrequencyInkHz ); BaseClockInkHz = new GPUPerformanceStateValueRange( CurrentClockInkHz.Minimum - ClockDeltaInkHz ); DependentVoltageDomain = PerformanceVoltageDomain.Undefined; DependentVoltageRangeInMicroVolt = null; } } /// /// Gets the base clock frequency in kHz /// public GPUPerformanceStateValueRange BaseClockInkHz { get; } /// /// Gets the clock frequency delta in kHz /// public int ClockDeltaInkHz { get; } /// /// Gets the clock frequency delta range in kHz /// public GPUPerformanceStateValueRange ClockDeltaRangeInkHz { get; } /// /// Gets the clock domain /// public PublicClockDomain ClockDomain { get; } /// /// Gets the current clock frequency in kHz /// public GPUPerformanceStateValueRange CurrentClockInkHz { get; } /// /// Gets the dependent voltage domain /// public PerformanceVoltageDomain DependentVoltageDomain { get; } /// /// Gets the dependent voltage range in uV /// public GPUPerformanceStateValueRange DependentVoltageRangeInMicroVolt { get; } /// /// Gets a boolean value indicating if this clock setting is readonly /// public bool IsReadOnly { get; } /// public override string ToString() { var title = IsReadOnly ? $"{ClockDomain} (ReadOnly)" : ClockDomain.ToString(); return $"{title}: {BaseClockInkHz} + ({ClockDeltaInkHz}) = {CurrentClockInkHz}"; } } }