using System.Linq; using System.Runtime.InteropServices; using NvAPIWrapper.Native.Attributes; using NvAPIWrapper.Native.General.Structures; using NvAPIWrapper.Native.GPU.Structures; using NvAPIWrapper.Native.Helpers; using NvAPIWrapper.Native.Interfaces; namespace NvAPIWrapper.Native.Mosaic.Structures { /// /// Holds information about a topology validity status /// [StructLayout(LayoutKind.Sequential, Pack = 8)] [StructureVersion(1)] public struct DisplayTopologyStatus : IInitializable { /// /// Maximum number of displays for this structure /// public const int MaxDisplays = PhysicalGPUHandle.PhysicalGPUs * Constants.Display.AdvancedDisplayHeads; internal StructureVersion _Version; internal readonly DisplayCapacityProblem _Errors; internal readonly DisplayTopologyWarning _Warnings; internal readonly uint _DisplayCounts; [MarshalAs(UnmanagedType.ByValArray, SizeConst = MaxDisplays)] internal Display[] _Displays; /// /// Gets all error flags for this topology /// public DisplayCapacityProblem Errors { get => _Errors; } /// /// Gets all warning flags for this topology /// public DisplayTopologyWarning Warnings { get => _Warnings; } /// /// Gets per display statuses /// public Display[] Displays { get => _Displays.Take((int) _DisplayCounts).ToArray(); } /// /// Holds information about a display validity status in a topology /// [StructLayout(LayoutKind.Sequential, Pack = 8)] public struct Display { internal uint _DisplayId; internal DisplayCapacityProblem _Errors; internal DisplayTopologyWarning _Warnings; internal uint _RawReserved; /// /// Gets the Display identification of this display. /// public uint DisplayId { get => _DisplayId; } /// /// Gets all error flags for this display /// public DisplayCapacityProblem Errors { get => _Errors; } /// /// Gets all warning flags for this display /// public DisplayTopologyWarning Warnings { get => _Warnings; } /// /// Indicates if this display can be rotated /// public bool SupportsRotation { get => _RawReserved.GetBit(0); } } } }