Index: /trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPMisc.cpp
===================================================================
--- /trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPMisc.cpp	(revision 60587)
+++ /trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPMisc.cpp	(revision 60588)
@@ -1954,6 +1954,6 @@
     if (pTarget->Size.cy)
     {
-        uint32_t curScanLine;
-        BOOL bVBlank;
+        uint32_t curScanLine = 0;
+        BOOL bVBlank = FALSE;
         LARGE_INTEGER DevVSyncTime;
         DevVSyncTime.QuadPart =  ASMAtomicReadU64((volatile uint64_t*)&pDevExt->VSyncTime.QuadPart);
@@ -1964,23 +1964,30 @@
         {
             WARN(("vsync time is less than the one stored in device"));
-            curScanLine = 0;
+            bVBlank = TRUE;
         }
         else
         {
             VSyncTime.QuadPart = VSyncTime.QuadPart - DevVSyncTime.QuadPart;
-            /* time is in 100ns, */
-            curScanLine = (uint32_t)((pTarget->Size.cy * VSyncTime.QuadPart) / 166666LL); /* ASSUMES 60Hz*/
-            if (pDevExt->bVSyncTimerEnabled)
-            {
-                if (curScanLine >= pTarget->Size.cy)
-                    curScanLine = 0;
-            }
+            /* Check whether we are in VBlank state or actively drawing a scan line
+             * 10% of the 60Hz are dedicated to VBlank.
+             */
+            LARGE_INTEGER VSyncPeriod;
+            VSyncPeriod.QuadPart = VSyncTime.QuadPart % 166666LL; /* ASSUMES 60Hz*/
+            if (VSyncPeriod.QuadPart > 150000LL)
+                bVBlank = TRUE;
             else
             {
-                curScanLine %= pTarget->Size.cy;
-            }
-        }
-
-        bVBlank = (!curScanLine || curScanLine > pTarget->Size.cy);
+                /* time is in 100ns, */
+                curScanLine = (uint32_t)((pTarget->Size.cy * VSyncPeriod.QuadPart) / 150000LL);
+                if (pDevExt->bVSyncTimerEnabled)
+                {
+                    if (curScanLine > pTarget->Size.cy)
+                        curScanLine = pTarget->Size.cy;
+                }
+                else
+                    curScanLine %= pTarget->Size.cy;
+            }
+        }
+
         pGetScanLine->ScanLine = curScanLine;
         pGetScanLine->InVerticalBlank = bVBlank;
