Index: /trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPMisc.cpp
===================================================================
--- /trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPMisc.cpp	(revision 84657)
+++ /trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPMisc.cpp	(revision 84658)
@@ -1251,4 +1251,12 @@
         g_VBoxLogUm = dwValue;
 
+    g_RefreshRate = 0;
+    Status = vboxWddmRegQueryValueDword(hKey, VBOXWDDM_CFG_STR_RATE, &dwValue);
+    if (NT_SUCCESS(Status))
+        g_RefreshRate = dwValue;
+
+    if (g_RefreshRate == 0 || g_RefreshRate > 240)
+        g_RefreshRate = VBOXWDDM_DEFAULT_REFRESH_RATE;
+
     ZwClose(hKey);
 
@@ -1323,6 +1331,6 @@
 
         LARGE_INTEGER DueTime;
-        DueTime.QuadPart = -166666LL; /* 60 Hz */
-        KeSetTimerEx(&pDevExt->VSyncTimer, DueTime, 16, &pDevExt->VSyncDpc);
+        DueTime.QuadPart = -10000000LL / g_RefreshRate; /* 100ns units per second / Freq Hz */
+        KeSetTimerEx(&pDevExt->VSyncTimer, DueTime, 1000 / g_RefreshRate, &pDevExt->VSyncDpc);
     }
 
@@ -1356,15 +1364,17 @@
             VSyncTime.QuadPart = VSyncTime.QuadPart - DevVSyncTime.QuadPart;
             /*
-             * Check whether we are in VBlank state or actively drawing a scan line
-             * 10% of the 60Hz are dedicated to VBlank.
+             * Check whether we are in VBlank state or actively drawing a scan line.
+             * 10% of the VSync interval are dedicated to VBlank.
              *
              * Time intervals are in 100ns steps.
              */
             LARGE_INTEGER VSyncPeriod;
-            VSyncPeriod.QuadPart = VSyncTime.QuadPart % 166666LL; /* ASSUMES 60Hz*/
-            if (VSyncPeriod.QuadPart >= 150000LL)
+            VSyncPeriod.QuadPart = VSyncTime.QuadPart % (10000000LL / g_RefreshRate);
+            LARGE_INTEGER VBlankStart;
+            VBlankStart.QuadPart = ((10000000LL / g_RefreshRate) * 9) / 10;
+            if (VSyncPeriod.QuadPart >= VBlankStart.QuadPart)
                 bVBlank = TRUE;
             else
-                curScanLine = (uint32_t)((pTarget->Size.cy * VSyncPeriod.QuadPart) / 150000LL);
+                curScanLine = (uint32_t)((pTarget->Size.cy * VSyncPeriod.QuadPart) / VBlankStart.QuadPart);
         }
 
@@ -1475,5 +1485,5 @@
     pAllocData->SurfDesc.cbSize = pInfo->Pitch * pInfo->Height;
     pAllocData->SurfDesc.VidPnSourceId = pInfo->TargetId;
-    pAllocData->SurfDesc.RefreshRate.Numerator = 60000;
+    pAllocData->SurfDesc.RefreshRate.Numerator = g_RefreshRate * 1000;
     pAllocData->SurfDesc.RefreshRate.Denominator = 1000;
 
Index: /trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPTypes.h
===================================================================
--- /trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPTypes.h	(revision 84657)
+++ /trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPTypes.h	(revision 84658)
@@ -38,4 +38,6 @@
 #include <iprt/avl.h>
 #endif
+
+#define VBOXWDDM_DEFAULT_REFRESH_RATE 60
 
 #ifndef VBOX_WITH_MESA3D
Index: /trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPVidPn.cpp
===================================================================
--- /trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPVidPn.cpp	(revision 84657)
+++ /trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPVidPn.cpp	(revision 84658)
@@ -202,5 +202,5 @@
 static void vboxVidPnPopulateMonitorModeInfo(D3DKMDT_MONITOR_SOURCE_MODE *pMonitorSourceMode, const RTRECTSIZE *pResolution)
 {
-    vboxVidPnPopulateVideoSignalInfo(&pMonitorSourceMode->VideoSignalInfo, pResolution, 60 /* ULONG VSync */);
+    vboxVidPnPopulateVideoSignalInfo(&pMonitorSourceMode->VideoSignalInfo, pResolution, g_RefreshRate);
     pMonitorSourceMode->ColorBasis = D3DKMDT_CB_SRGB;
     pMonitorSourceMode->ColorCoeffDynamicRanges.FirstChannel = 8;
@@ -215,5 +215,5 @@
 {
     pNewVidPnTargetModeInfo->Preference = D3DKMDT_MP_NOTPREFERRED;
-    return vboxVidPnPopulateVideoSignalInfo(&pNewVidPnTargetModeInfo->VideoSignalInfo, pResolution, 60 /* ULONG VSync */);
+    return vboxVidPnPopulateVideoSignalInfo(&pNewVidPnTargetModeInfo->VideoSignalInfo, pResolution, g_RefreshRate);
 }
 
Index: /trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPWddm.cpp
===================================================================
--- /trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPWddm.cpp	(revision 84657)
+++ /trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPWddm.cpp	(revision 84658)
@@ -48,4 +48,5 @@
 DWORD g_VBoxLogUm = 0;
 #endif
+DWORD g_RefreshRate = 0;
 
 /* Whether the driver is display-only (no 3D) for Windows 8 or newer guests. */
@@ -2328,5 +2329,5 @@
     pDescribeAllocation->Format = pAllocation->AllocData.SurfDesc.format;
     memset (&pDescribeAllocation->MultisampleMethod, 0, sizeof (pDescribeAllocation->MultisampleMethod));
-    pDescribeAllocation->RefreshRate.Numerator = 60000;
+    pDescribeAllocation->RefreshRate.Numerator = g_RefreshRate * 1000;
     pDescribeAllocation->RefreshRate.Denominator = 1000;
     pDescribeAllocation->PrivateDriverFormatAttribute = 0;
Index: /trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPWddm.h
===================================================================
--- /trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPWddm.h	(revision 84657)
+++ /trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPWddm.h	(revision 84658)
@@ -38,4 +38,5 @@
 #define VBOXWDDM_CFG_LOG_UM_DBGPRINT 0x00000002
 #define VBOXWDDM_CFG_STR_LOG_UM L"VBoxLogUm"
+#define VBOXWDDM_CFG_STR_RATE L"RefreshRate"
 
 #define VBOXWDDM_REG_DRV_FLAGS_NAME L"VBoxFlags"
@@ -57,4 +58,5 @@
 
 extern DWORD g_VBoxLogUm;
+extern DWORD g_RefreshRate;
 
 RT_C_DECLS_BEGIN
