/// <summary> /// Get a list of all connected display devices on this GPU /// </summary> /// <param name="flags">ConnectedIdsFlag flag</param> /// <returns>An array of display devices</returns> public DisplayDevice[] GetConnectedDisplayDevices(ConnectedIdsFlag flags) { return(GPUApi.GetConnectedDisplayIds(Handle, flags).Select(display => new DisplayDevice(display)).ToArray()); }
/// <summary> /// Due to space limitation GetConnectedOutputs() can return maximum 32 devices, but this is no longer true for DPMST. /// GetConnectedDisplayIds() will return all the connected display devices in the form of displayIds for the associated /// gpuHandle. /// This function can accept set of flags to request cached, un-cached, sli and lid to get the connected devices. /// Default value for flags will be cached. /// </summary> /// <param name="gpuHandle">Physical GPU handle to get information about</param> /// <param name="flags">ConnectedIdsFlag flags</param> /// <returns>An array of display identifications and their attributes</returns> /// <exception cref="NVIDIANotSupportedException">This operation is not supported.</exception> /// <exception cref="NVIDIAApiException">Status.InvalidArgument: gpuHandle is invalid</exception> /// <exception cref="NVIDIAApiException">Status.NvidiaDeviceNotFound: No NVIDIA GPU driving a display was found</exception> /// <exception cref="NVIDIAApiException">Status.ExpectedPhysicalGPUHandle: gpuHandle was not a physical GPU handle</exception> /// <exception cref="Exception">A delegate callback throws an exception.</exception> public static DisplayIdsV2[] GetConnectedDisplayIds(PhysicalGPUHandle gpuHandle, ConnectedIdsFlag flags) { var gpuGetConnectedDisplayIds = DelegateFactory.GetDelegate <Delegates.GPU.NvAPI_GPU_GetConnectedDisplayIds>(); if (!gpuGetConnectedDisplayIds.Accepts().Contains(typeof(DisplayIdsV2))) { throw new NVIDIANotSupportedException("This operation is not supported."); } uint count = 0; var status = gpuGetConnectedDisplayIds(gpuHandle, ValueTypeArray.Null, ref count, flags); if (status != Status.Ok) { throw new NVIDIAApiException(status); } if (count == 0) { return(new DisplayIdsV2[0]); } using ( var displayIds = ValueTypeArray.FromArray(typeof(DisplayIdsV2).Instantiate <DisplayIdsV2>().Repeat((int)count))) { status = gpuGetConnectedDisplayIds(gpuHandle, displayIds, ref count, flags); if (status != Status.Ok) { throw new NVIDIAApiException(status); } return(displayIds.ToArray <DisplayIdsV2>((int)count)); } }