From e65c36ec5fa1259bf40a99e1c2a3167eb49902e0 Mon Sep 17 00:00:00 2001 From: Bud <75859057+bud3699@users.noreply.github.com> Date: Sun, 20 Oct 2024 00:55:42 +0100 Subject: [PATCH] - Pipe Update + Optimisations - Updated Pipe to have PING Function which returns PONG to buffer - Added new Send To Pipe Function - Optimised toggling between HDR+ and hdr --- .../MttVDD/Driver.cpp | 40 ++++++++++--------- 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/Virtual Display Driver (HDR)/MttVDD/Driver.cpp b/Virtual Display Driver (HDR)/MttVDD/Driver.cpp index e70e91d..9b88a70 100644 --- a/Virtual Display Driver (HDR)/MttVDD/Driver.cpp +++ b/Virtual Display Driver (HDR)/MttVDD/Driver.cpp @@ -96,6 +96,7 @@ bool debugLogs; bool HDRPlus = false; bool customEdid = false; bool hardwareCursor = false; +IDDCX_BITS_PER_COMPONENT HDRCOLOUR; vector Microsoft::IndirectDisp::IndirectDeviceContext::s_KnownMonitorEdid; //Changed to support static vector @@ -287,6 +288,14 @@ void float_to_vsync(float refresh_rate, int& num, int& den) { den /= divisor; } +void SendToPipe(const std::string& logMessage) { + if (g_pipeHandle != INVALID_HANDLE_VALUE) { + DWORD bytesWritten; + DWORD logMessageSize = static_cast(logMessage.size()); + WriteFile(g_pipeHandle, logMessage.c_str(), logMessageSize, &bytesWritten, NULL); + } +} + void vddlog(const char* type, const char* message) { FILE* logFile; logsEnabled = LogEnabledQuery(); @@ -1029,6 +1038,10 @@ void HandleClient(HANDLE hPipe) { WriteFile(hPipe, settingsResponse.c_str(), bytesToWrite, &bytesWritten, NULL); } + else if (wcsncmp(buffer, L"PING", 4) == 0) { + SendToPipe("PONG"); + vddlog("p", "Heartbeat Ping"); + } else { vddlog("e", "Unknown command"); @@ -1194,6 +1207,12 @@ extern "C" NTSTATUS DriverEntry( initpath(); logsEnabled = LogEnabledQuery(); HDRPlus = HDRPLUSEnabledQuery(); + if (HDRPlus) { + HDRCOLOUR = IDDCX_BITS_PER_COMPONENT_12; + } + else { + HDRCOLOUR = IDDCX_BITS_PER_COMPONENT_10; + } customEdid = CustomEdidEnabledQuery(); hardwareCursor = HardwareCursorEnabledQuery(); vddlog("i", "Driver Starting"); @@ -2564,12 +2583,7 @@ void CreateTargetMode2(IDDCX_TARGET_MODE2& Mode, UINT Width, UINT Height, UINT V vddlog("d", logStream.str().c_str()); Mode.Size = sizeof(Mode); - if (HDRPlus) { - Mode.BitsPerComponent.Rgb = IDDCX_BITS_PER_COMPONENT_8 | IDDCX_BITS_PER_COMPONENT_12; - } - else { - Mode.BitsPerComponent.Rgb = IDDCX_BITS_PER_COMPONENT_8 | IDDCX_BITS_PER_COMPONENT_10; - } + Mode.BitsPerComponent.Rgb = IDDCX_BITS_PER_COMPONENT_10 | HDRCOLOUR; logStream.str(""); @@ -2669,12 +2683,7 @@ NTSTATUS IddSampleEvtIddCxAdapterQueryTargetInfo( UNREFERENCED_PARAMETER(pInArgs); pOutArgs->TargetCaps = IDDCX_TARGET_CAPS_HIGH_COLOR_SPACE; - if (HDRPlus) { - pOutArgs->DitheringSupport.Rgb = IDDCX_BITS_PER_COMPONENT_12; - } - else { - pOutArgs->DitheringSupport.Rgb = IDDCX_BITS_PER_COMPONENT_10; - } + pOutArgs->DitheringSupport.Rgb = HDRCOLOUR; logStream.str(""); logStream << "Target capabilities set to: " << pOutArgs->TargetCaps @@ -2749,12 +2758,7 @@ NTSTATUS IddSampleEvtIddCxParseMonitorDescription2( pInArgs->pMonitorModes[ModeIndex].Origin = IDDCX_MONITOR_MODE_ORIGIN_MONITORDESCRIPTOR; pInArgs->pMonitorModes[ModeIndex].MonitorVideoSignalInfo = s_KnownMonitorModes2[ModeIndex]; - if (HDRPlus) { - pInArgs->pMonitorModes[ModeIndex].BitsPerComponent.Rgb = IDDCX_BITS_PER_COMPONENT_8 | IDDCX_BITS_PER_COMPONENT_12; - } - else { - pInArgs->pMonitorModes[ModeIndex].BitsPerComponent.Rgb = IDDCX_BITS_PER_COMPONENT_8 | IDDCX_BITS_PER_COMPONENT_10; - } + pInArgs->pMonitorModes[ModeIndex].BitsPerComponent.Rgb = IDDCX_BITS_PER_COMPONENT_10 | HDRCOLOUR; logStream << "\n ModeIndex: " << ModeIndex