| // Copyright (c) Microsoft Corporation |
| |
| #include "HelperMethods.h" |
| |
| namespace display::test { |
| inline void FillSignalInfo(DISPLAYCONFIG_VIDEO_SIGNAL_INFO& Mode, |
| DWORD Width, |
| DWORD Height, |
| DWORD VSync, |
| bool bMonitorMode) { |
| Mode.totalSize.cx = Mode.activeSize.cx = Width; |
| Mode.totalSize.cy = Mode.activeSize.cy = Height; |
| |
| // See |
| // https://docs.microsoft.com/en-us/windows/win32/api/wingdi/ns-wingdi-displayconfig_video_signal_info |
| Mode.AdditionalSignalInfo.vSyncFreqDivider = bMonitorMode ? 0 : 1; |
| Mode.AdditionalSignalInfo.videoStandard = 255; |
| |
| Mode.vSyncFreq.Numerator = VSync; |
| Mode.vSyncFreq.Denominator = 1; |
| Mode.hSyncFreq.Numerator = VSync * Height; |
| Mode.hSyncFreq.Denominator = 1; |
| |
| Mode.scanLineOrdering = DISPLAYCONFIG_SCANLINE_ORDERING_PROGRESSIVE; |
| |
| Mode.pixelRate = ((UINT64)VSync) * ((UINT64)Width) * ((UINT64)Height); |
| } |
| |
| IDDCX_MONITOR_MODE CreateIddCxMonitorMode( |
| DWORD Width, |
| DWORD Height, |
| DWORD VSync, |
| IDDCX_MONITOR_MODE_ORIGIN Origin = IDDCX_MONITOR_MODE_ORIGIN_DRIVER) { |
| IDDCX_MONITOR_MODE Mode = {}; |
| |
| Mode.Size = sizeof(Mode); |
| Mode.Origin = Origin; |
| FillSignalInfo(Mode.MonitorVideoSignalInfo, Width, Height, VSync, true); |
| |
| return Mode; |
| } |
| |
| IDDCX_TARGET_MODE CreateIddCxTargetMode(DWORD Width, |
| DWORD Height, |
| DWORD VSync) { |
| IDDCX_TARGET_MODE Mode = {}; |
| |
| Mode.Size = sizeof(Mode); |
| FillSignalInfo(Mode.TargetVideoSignalInfo.targetVideoSignalInfo, Width, |
| Height, VSync, false); |
| |
| return Mode; |
| } |
| } // namespace display::test |