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 thermal policies /// [StructLayout(LayoutKind.Sequential, Pack = 8)] [StructureVersion(2)] public struct PrivateThermalPoliciesInfoV2 : IInitializable { internal const int MaxNumberOfThermalPoliciesInfoEntries = 4; internal StructureVersion _Version; internal readonly byte _ThermalPoliciesInfoCount; internal readonly byte _Unknown; [MarshalAs(UnmanagedType.ByValArray, SizeConst = MaxNumberOfThermalPoliciesInfoEntries, ArraySubType = UnmanagedType.Struct)] internal readonly ThermalPoliciesInfoEntry[] _ThermalPoliciesInfoEntries; /// /// Gets a list of thermal policy entries /// public ThermalPoliciesInfoEntry[] ThermalPoliciesInfoEntries { get => _ThermalPoliciesInfoEntries.Take(_ThermalPoliciesInfoCount).ToArray(); } /// /// Contains information regarding a thermal policies entry /// [StructLayout(LayoutKind.Sequential, Pack = 8)] public struct ThermalPoliciesInfoEntry { internal ThermalController _Controller; internal uint _Unknown1; internal int _MinimumTemperature; internal int _DefaultTemperature; internal int _MaximumTemperature; internal uint _Unknown2; /// /// Gets the thermal controller /// public ThermalController Controller { get => _Controller; } /// /// Gets the minimum temperature limit target /// public int MinimumTemperature { get => _MinimumTemperature >> 8; } /// /// Gets the default temperature limit target /// public int DefaultTemperature { get => _DefaultTemperature >> 8; } /// /// Gets the maximum temperature limit target /// public int MaximumTemperature { get => _MaximumTemperature >> 8; } } } }