chromium/third_party/win_virtual_display/driver/HelperMethods.cpp

// 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