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; } } } }