[Spice-devel,v2,06/12] qxl-wddm-dod: Registry-based control over VSync

Submitted by Yuri Benditovich on April 1, 2017, 4:40 p.m.

Details

Message ID 1491064839-13612-7-git-send-email-yuri.benditovich@daynix.com
State New
Headers show
Series "Set of patches for further support of VSync" ( rev: 2 ) in Spice

Not browsing as part of any series.

Commit Message

Yuri Benditovich April 1, 2017, 4:40 p.m.
From: "yuri.benditovich@daynix.com" <yuri.benditovich@daynix.com>

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 <yuri.benditovich@daynix.com>
---
 qxldod/driver.cpp | 35 +++++++++++++++++++++++++++++++++++
 1 file changed, 35 insertions(+)

Patch hide | download patch | download mbox

diff --git a/qxldod/driver.cpp b/qxldod/driver.cpp
index 9081ffc..a3e11c8 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",