[Spice-devel] [PATCH v3 6/6] qxl-wddm-dod: Preparation for VSync activation
Frediano Ziglio
fziglio at redhat.com
Wed Feb 22 12:23:40 UTC 2017
>
> 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 at daynix.com>
> ---
> qxldod/driver.cpp | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++
> qxldod/driver.h | 15 +++++++++++++++
> 2 files changed, 67 insertions(+)
>
> diff --git a/qxldod/driver.cpp b/qxldod/driver.cpp
> index dc84aa8..5bd57b4 100755
> --- a/qxldod/driver.cpp
> +++ b/qxldod/driver.cpp
> @@ -32,6 +32,19 @@ DriverEntry(
>
> DbgPrint(TRACE_LEVEL_FATAL, ("---> KMDOD build on on %s %s\n", __DATE__,
> __TIME__));
>
> + RTL_OSVERSIONINFOW versionInfo;
> + versionInfo.dwOSVersionInfoSize = sizeof(versionInfo);
> +
> +
> + RtlGetVersion(&versionInfo);
> + if (versionInfo.dwBuildNumber >= 14393 || versionInfo.dwBuildNumber <=
> 9600)
Can you put a comment in the code on why we need to exclude 9600 - 14393 range?
A bug?
> + {
> + //g_bSupportVSync = TRUE;
I would add also a comment before this line why this is commented
out.
> + }
> + 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 +80,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 +577,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..2dcbda4 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;
Otherwise
Acked-by: Frediano Ziglio <fziglio at redhat.com>
Frediano
More information about the Spice-devel
mailing list