> > Prepare all the procedures needed for VSync feature but > do not turn it on yet. Manual uncomment still required to > enable it. > Advanced users may enable VSync feature and report functional > problem with it. The driver is expected to pass all the formal > tests under HLK 1607 with device rev.3 and rev.4 but with > device rev.4 on setups with high load or long round-trip delay > video system may detect timeout during rendering operation > and disable the driver with error 43. > > Signed-off-by: Yuri Benditovich <yuri.benditovich@xxxxxxxxxx> Merged the entire set Thanks, Frediano > --- > qxldod/driver.cpp | 64 > +++++++++++++++++++++++++++++++++++++++++++++++++++++++ > qxldod/driver.h | 15 +++++++++++++ > 2 files changed, 79 insertions(+) > > diff --git a/qxldod/driver.cpp b/qxldod/driver.cpp > index dc84aa8..1946147 100755 > --- a/qxldod/driver.cpp > +++ b/qxldod/driver.cpp > @@ -32,6 +32,31 @@ DriverEntry( > > DbgPrint(TRACE_LEVEL_FATAL, ("---> KMDOD build on on %s %s\n", __DATE__, > __TIME__)); > > + RTL_OSVERSIONINFOW versionInfo; > + versionInfo.dwOSVersionInfoSize = sizeof(versionInfo); > + > + RtlGetVersion(&versionInfo); > + > + // VSync control is NOT planned to be enabled on Win10 builds > + // before RS1. Enabling it on DOD driver causes OS to stop the driver > + // with error 43 when the system turns off display due to idle setting. > + // On Windows 8.1 (9200 and 9600) till now no problem observed > + // (OS does not send VSync enable command) > + // On Windows 10RS1 (14393) enabling VSync control activates > + // watchdog policy and creates high sensitivity to long (> 2 sec) > + // processing in PresentDisplayOnly callback (stop with error 43) > + > + if (versionInfo.dwBuildNumber >= 14393 || versionInfo.dwBuildNumber <= > 9600) > + { > + // we will uncomment the line below after we address all the > problems > + // related to enabled VSync control in Win10RS1 > + > + //g_bSupportVSync = TRUE; > + } > + DbgPrint(TRACE_LEVEL_WARNING, ("VSync support %sabled for %d.%d.%d\n", > + g_bSupportVSync ? "en" : "dis", > + versionInfo.dwMajorVersion, versionInfo.dwMinorVersion, > versionInfo.dwBuildNumber)); > + > // Initialize DDI function pointers and dxgkrnl > KMDDOD_INITIALIZATION_DATA InitialData = {0}; > > @@ -67,6 +92,11 @@ DriverEntry( > InitialData.DxgkDdiStopDeviceAndReleasePostDisplayOwnership = > DodStopDeviceAndReleasePostDisplayOwnership; > InitialData.DxgkDdiSystemDisplayEnable = > DodSystemDisplayEnable; > InitialData.DxgkDdiSystemDisplayWrite = DodSystemDisplayWrite; > + if (g_bSupportVSync) > + { > + InitialData.DxgkDdiControlInterrupt = DodControlInterrupt; > + InitialData.DxgkDdiGetScanLine = DodGetScanLine; > + } > > NTSTATUS Status = DxgkInitializeDisplayOnlyDriver(pDriverObject, > pRegistryPath, &InitialData); > if (!NT_SUCCESS(Status)) > @@ -559,6 +589,40 @@ DodQueryVidPnHWCapability( > return pQxl->QueryVidPnHWCapability(pVidPnHWCaps); > } > > +NTSTATUS > +APIENTRY > +DodControlInterrupt( > + IN_CONST_HANDLE hAdapter, > + IN_CONST_DXGK_INTERRUPT_TYPE InterruptType, > + IN_BOOLEAN EnableInterrupt > +) > +{ > + PAGED_CODE(); > + QxlDod* pQxl = reinterpret_cast<QxlDod*>(hAdapter); > + if (InterruptType == DXGK_INTERRUPT_DISPLAYONLY_VSYNC) > + { > + pQxl->EnableVsync(EnableInterrupt); > + return STATUS_SUCCESS; > + } > + return STATUS_NOT_IMPLEMENTED; > +} > + > +NTSTATUS > +APIENTRY > +DodGetScanLine( > + IN_CONST_HANDLE hAdapter, > + INOUT_PDXGKARG_GETSCANLINE pGetScanLine > +) > +{ > + PAGED_CODE(); > + // Currently we do not see any practical use case when this procedure is > called > + // IDirectDraw has an interface for querying scan line > + // Leave it not implemented like remote desktop does > + // until we recognize use case for more intelligent implementation > + DbgPrint(TRACE_LEVEL_ERROR, ("<---> %s\n", __FUNCTION__)); > + return STATUS_NOT_IMPLEMENTED; > +} > + > //END: Paged Code > #pragma code_seg(pop) > > diff --git a/qxldod/driver.h b/qxldod/driver.h > index 97b9415..e39e386 100755 > --- a/qxldod/driver.h > +++ b/qxldod/driver.h > @@ -217,6 +217,21 @@ DodSystemDisplayWrite( > _In_ UINT PositionX, > _In_ UINT PositionY); > > +NTSTATUS > +APIENTRY > +DodControlInterrupt( > + IN_CONST_HANDLE hAdapter, > + IN_CONST_DXGK_INTERRUPT_TYPE InterruptType, > + IN_BOOLEAN EnableInterrupt > +); > + > +NTSTATUS > +APIENTRY > +DodGetScanLine( > + IN_CONST_HANDLE hAdapter, > + INOUT_PDXGKARG_GETSCANLINE pGetScanLine > +); > + > #if DBG > > extern int nDebugLevel; _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel