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 power policies /// [StructLayout(LayoutKind.Sequential, Pack = 8)] [StructureVersion(1)] public struct PrivatePowerPoliciesInfoV1 : IInitializable { internal const int MaxNumberOfPowerPolicyInfoEntries = 4; internal StructureVersion _Version; internal readonly byte _Valid; internal readonly byte _PowerPolicyEntriesCount; [MarshalAs(UnmanagedType.ByValArray, SizeConst = MaxNumberOfPowerPolicyInfoEntries)] internal readonly PowerPolicyInfoEntry[] _PowerPolicyInfoEntries; /// /// Gets a list of power policy entries /// public PowerPolicyInfoEntry[] PowerPolicyInfoEntries { get => _PowerPolicyInfoEntries.Take(_PowerPolicyEntriesCount).ToArray(); } /// /// Contains information regarding a GPU power policy entry /// [StructLayout(LayoutKind.Sequential, Pack = 8)] public struct PowerPolicyInfoEntry { internal PerformanceStateId _StateId; internal uint _Unknown1; internal uint _Unknown2; internal uint _MinimumPower; internal uint _Unknown3; internal uint _Unknown4; internal uint _DefaultPower; internal uint _Unknown5; internal uint _Unknown6; internal uint _MaximumPower; internal uint _Unknown7; /// /// Gets the performance state identification number /// public PerformanceStateId PerformanceStateId { get => _StateId; } /// /// Gets the minimum power limit in per cent mille /// public uint MinimumPowerInPCM { get => _MinimumPower; } /// /// Gets the default power limit in per cent mille /// public uint DefaultPowerInPCM { get => _DefaultPower; } /// /// Gets the maximum power limit in per cent mille /// public uint MaximumPowerInPCM { get => _MaximumPower; } } } }