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 boost frequency curve
///
[StructLayout(LayoutKind.Sequential, Pack = 8)]
[StructureVersion(1)]
public struct PrivateVFPCurveV1 : IInitializable
{
internal const int MaxNumberOfMasks = 4;
internal const int MaxNumberOfUnknown1 = 12;
internal const int MaxNumberOfGPUCurveEntries = 80;
internal const int MaxNumberOfMemoryCurveEntries = 23;
internal const int MaxNumberOfUnknown2 = 1064;
internal StructureVersion _Version;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = MaxNumberOfMasks)]
internal readonly uint[] _Masks;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = MaxNumberOfUnknown1)]
internal readonly uint[] _Unknown1;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = MaxNumberOfGPUCurveEntries)]
internal readonly VFPCurveEntry[] _GPUCurveEntries;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = MaxNumberOfMemoryCurveEntries)]
internal readonly VFPCurveEntry[] _MemoryCurveEntries;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = MaxNumberOfUnknown2)]
internal readonly uint[] _Unknown2;
///
/// Gets the list of GPU curve entries
///
public VFPCurveEntry[] GPUCurveEntries
{
get => _GPUCurveEntries;
}
///
/// Gets the list of memory curve entries
///
public VFPCurveEntry[] MemoryCurveEntries
{
get => _MemoryCurveEntries;
}
///
/// Contains information regarding a boost frequency curve entry
///
[StructLayout(LayoutKind.Sequential, Pack = 8)]
public struct VFPCurveEntry
{
internal uint _Unknown1;
internal uint _FrequencyInkHz;
internal uint _VoltageInMicroV;
internal uint _Unknown2;
internal uint _Unknown3;
internal uint _Unknown4;
internal uint _Unknown5;
///
/// Gets the frequency in kHz
///
public uint FrequencyInkHz
{
get => _FrequencyInkHz;
}
///
/// Gets the voltage in uV
///
public uint VoltageInMicroV
{
get => _VoltageInMicroV;
}
}
}
}