From 074cc3ef58d125da040c6b05f79799e6809cc030 Mon Sep 17 00:00:00 2001 From: "yuri.benditovich@daynix.com" Date: Sat, 1 Apr 2017 19:40:33 +0300 Subject: [PATCH] qxl-wddm-dod: Registry-based control over VSync Registry override of default behavior (disabling when enabled by default) provided for support and troubleshooting only in case this feature affects specific user. Signed-off-by: Yuri Benditovich Acked-by: Frediano Ziglio --- qxldod/driver.cpp | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/qxldod/driver.cpp b/qxldod/driver.cpp index 1946147..bd7971f 100755 --- a/qxldod/driver.cpp +++ b/qxldod/driver.cpp @@ -21,6 +21,38 @@ int nDebugLevel = TRACE_LEVEL_ERROR; +// registry-based configuration is intended to be manual only +// for VSync suppression during support and troubleshooting +// and not expected to be made default +static void QueryVSyncSetting(BOOLEAN& b, const UNICODE_STRING *path) +{ + PAGED_CODE(); + WCHAR buffer[MAX_PATH]; + ULONG val = b; + RTL_QUERY_REGISTRY_TABLE QueryTable[3] = {}; + if (path->Length >= sizeof(buffer)) + return; + + QueryTable[0].Flags = RTL_QUERY_REGISTRY_SUBKEY; + QueryTable[0].Name = L"Parameters"; + QueryTable[1].Flags = RTL_QUERY_REGISTRY_DIRECT | RTL_QUERY_REGISTRY_TYPECHECK | RTL_QUERY_REGISTRY_REQUIRED; + QueryTable[1].Name = L"EnableVSync"; + QueryTable[1].DefaultType = REG_DWORD << 24; + QueryTable[1].EntryContext = &val; + + RtlCopyMemory(buffer, path->Buffer, path->Length); + buffer[path->Length/2] = 0; + NTSTATUS status = RtlQueryRegistryValues(RTL_REGISTRY_ABSOLUTE, buffer, QueryTable, NULL, NULL); + if (NT_SUCCESS(status)) + { + DbgPrint(TRACE_LEVEL_INFORMATION, ("%s: val = %d\n", __FUNCTION__, val)); + b = !!val; + } + else + { + DbgPrint(TRACE_LEVEL_INFORMATION, ("%s: status = %X\n", __FUNCTION__, status)); + } +} extern "C" NTSTATUS @@ -52,6 +84,9 @@ DriverEntry( // related to enabled VSync control in Win10RS1 //g_bSupportVSync = TRUE; + + // for support/troubleshooting be able to disable VSync on specific machine + QueryVSyncSetting(g_bSupportVSync, pRegistryPath); } DbgPrint(TRACE_LEVEL_WARNING, ("VSync support %sabled for %d.%d.%d\n", g_bSupportVSync ? "en" : "dis",