windisplay: Add debug prints listing display devices and monitors

This commit is contained in:
rdb 2022-04-02 20:42:04 +02:00
parent 3f901243f2
commit aab149e75a

View File

@ -259,6 +259,71 @@ WinGraphicsPipe() {
}
}
if (windisplay_cat.is_debug()) {
windisplay_cat.debug()
<< "Detected display devices:\n";
DISPLAY_DEVICEA device;
device.cb = sizeof(device);
for (DWORD devnum = 0; EnumDisplayDevicesA(nullptr, devnum, &device, 0); ++devnum) {
std::ostream &out = windisplay_cat.debug();
out << " " << device.DeviceName << " [" << device.DeviceString << "]";
if (device.StateFlags & DISPLAY_DEVICE_ACTIVE) {
out << " (active)";
}
if (device.StateFlags & DISPLAY_DEVICE_MULTI_DRIVER) {
out << " (multi-driver)";
}
if (device.StateFlags & DISPLAY_DEVICE_PRIMARY_DEVICE) {
out << " (primary)";
}
if (device.StateFlags & DISPLAY_DEVICE_MIRRORING_DRIVER) {
out << " (mirroring)";
}
if (device.StateFlags & DISPLAY_DEVICE_REMOVABLE) {
out << " (removable)";
}
out << "\n";
}
int nmonitor = GetSystemMetrics(SM_CMONITORS);
windisplay_cat.debug()
<< "Detected " << nmonitor << " monitors, "
<< (GetSystemMetrics(SM_SAMEDISPLAYFORMAT) != 0 ? "" : "NOT ")
<< "sharing same display format:\n";
EnumDisplayMonitors(
nullptr,
nullptr,
[](HMONITOR monitor, HDC dc, LPRECT rect, LPARAM param) -> BOOL {
MONITORINFOEXA info;
info.cbSize = sizeof(info);
if (GetMonitorInfoA(monitor, &info)) {
std::ostream &out = windisplay_cat.debug() << " ";
DISPLAY_DEVICEA device;
device.cb = sizeof(device);
device.StateFlags = 0;
if (EnumDisplayDevicesA(info.szDevice, 0, &device, 0)) {
out << device.DeviceName << " [" << device.DeviceString << "]";
}
else {
out << info.szDevice << " (device enum failed)";
}
if (info.dwFlags & MONITORINFOF_PRIMARY) {
out << " (primary)";
}
if (info.rcWork.left != 0 || info.rcWork.top != 0) {
out << " (at " << info.rcWork.left << "x" << info.rcWork.top << ")";
}
out << "\n";
}
return TRUE;
},
0);
}
#ifdef HAVE_DX9
// Use D3D to get display info. This is disabled by default as it is slow.
if (request_dxdisplay_information) {