using System.Linq;
using System.Runtime.InteropServices;
using NvAPIWrapper.Native.Attributes;
using NvAPIWrapper.Native.General.Structures;
using NvAPIWrapper.Native.Interfaces;
namespace NvAPIWrapper.Native.GPU.Structures
{
///
/// Contains information regarding GPU clock boost ranges
///
[StructLayout(LayoutKind.Sequential, Pack = 8)]
[StructureVersion(1)]
public struct PrivateClockBoostRangesV1 : IInitializable
{
internal const int MaxNumberOfClocksPerGPU = ClockFrequenciesV1.MaxClocksPerGPU;
internal const int MaxNumberOfUnknown = 8;
internal StructureVersion _Version;
internal uint _ClockBoostRangesCount;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = MaxNumberOfUnknown)]
internal uint[] _Unknown;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = MaxNumberOfClocksPerGPU)]
internal ClockBoostRange[] _ClockBoostRanges;
///
/// Gets a list of clock boost ranges
///
public ClockBoostRange[] ClockBoostRanges
{
get => _ClockBoostRanges.Take((int) _ClockBoostRangesCount).ToArray();
}
///
/// Contains information regarding a clock boost range
///
[StructLayout(LayoutKind.Sequential, Pack = 8)]
public struct ClockBoostRange
{
internal uint _Unknown1;
internal ClockType _ClockType;
internal uint _Unknown2;
internal uint _Unknown3;
internal uint _Unknown4;
internal uint _Unknown5;
internal uint _Unknown6;
internal uint _Unknown7;
internal uint _Unknown8;
internal uint _Unknown9;
internal int _RangeMaximumInkHz;
internal int _RangeMinimumInkHz;
internal int _MaximumTemperature;
internal uint _Unknown10;
internal uint _Unknown11;
internal uint _Unknown12;
internal uint _Unknown13;
internal uint _Unknown14;
///
/// Gets the clock type
///
public ClockType ClockType
{
get => _ClockType;
}
///
/// Gets the maximum boost frequency in kHz
///
public int MaximumInkHz
{
get => _RangeMaximumInkHz;
}
///
/// Gets the minimum boost frequency in kHz
///
public int MinimumInkHz
{
get => _RangeMinimumInkHz;
}
///
/// Gets the maximum boost temperature
///
public int MaximumTemperature
{
get => _MaximumTemperature;
}
}
}
}