[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