> > > > > Windows disables hw pointer acceleration and draws the cursor > > in frame buffer if the driver does not report pointer capabilities > > in QueryAdapterInfo. In this mode OS usually does not send pointer > > commands to the driver or does it with pointer set to invisible > > state. This mode of operation consumes CPU time and device-to-host > > traffic. Now we enable pointer hardware acceleration. > > > > Signed-off-by: Yuri Benditovich <yuri.benditovich@xxxxxxxxxx> > > Hi. I can see that client mode is working now however when > I drag a window or resize one I got 2 pointers instead of 1. > This happens to me using either remote-viewer or virt-manager. > With Windows 7 I get a single pointer and client mode working. > I'm not sure but even with FlexVDI driver you don't have this issue. > Or is this a first patch and you are going to send another > to fix the double pointer problem? > > > --- > > qxldod/QxlDod.cpp | 30 +++++++++++++----------------- > > qxldod/QxlDod.h | 3 --- > > 2 files changed, 13 insertions(+), 20 deletions(-) > > > > diff --git a/qxldod/QxlDod.cpp b/qxldod/QxlDod.cpp > > index 85343e4..724e89f 100755 > > --- a/qxldod/QxlDod.cpp > > +++ b/qxldod/QxlDod.cpp > > @@ -406,12 +406,10 @@ NTSTATUS QxlDod::QueryAdapterInfo(_In_ CONST > > DXGKARG_QUERYADAPTERINFO* pQueryAda > > pDriverCaps->WDDMVersion = DXGKDDI_WDDMv1_2; > > pDriverCaps->HighestAcceptableAddress.QuadPart = -1; > > > > - if (m_pHWDevice->EnablePointer()) { > > - pDriverCaps->MaxPointerWidth = POINTER_SIZE; > > - pDriverCaps->MaxPointerHeight = POINTER_SIZE; > > - pDriverCaps->PointerCaps.Monochrome = 1; > > - pDriverCaps->PointerCaps.Color = 1; > > - } > > + pDriverCaps->MaxPointerWidth = POINTER_SIZE; > > + pDriverCaps->MaxPointerHeight = POINTER_SIZE; > > + pDriverCaps->PointerCaps.Monochrome = 1; > > + pDriverCaps->PointerCaps.Color = 1; > > > > pDriverCaps->SupportNonVGA = TRUE; > > > > @@ -4428,7 +4426,7 @@ NTSTATUS QxlDevice::SetPointerShape(_In_ CONST > > DXGKARG_SETPOINTERSHAPE* pSetPoi > > pSetPointerShape->Height, > > pSetPointerShape->XHot, > > pSetPointerShape->YHot)); > > - if (!EnablePointer() || (!pSetPointerShape->Flags.Monochrome && > > !pSetPointerShape->Flags.Color)) > > + if (!pSetPointerShape->Flags.Monochrome && > > !pSetPointerShape->Flags.Color) > > return STATUS_UNSUCCESSFUL; > > > > QXLCursorCmd *cursor_cmd; > > @@ -4508,17 +4506,15 @@ NTSTATUS QxlDevice::SetPointerPosition(_In_ CONST > > DXGKARG_SETPOINTERPOSITION* pS > > pSetPointerPosition->VidPnSourceId, > > pSetPointerPosition->X, > > pSetPointerPosition->Y)); > > - if (EnablePointer()) { > > - QXLCursorCmd *cursor_cmd = CursorCmd(); > > - if (pSetPointerPosition->X < 0) { > > - cursor_cmd->type = QXL_CURSOR_HIDE; > > - } else { > > - cursor_cmd->type = QXL_CURSOR_MOVE; > > - cursor_cmd->u.position.x = (INT16)pSetPointerPosition->X; > > - cursor_cmd->u.position.y = (INT16)pSetPointerPosition->Y; > > - } > > - PushCursorCmd(cursor_cmd); > > + QXLCursorCmd *cursor_cmd = CursorCmd(); > > + if (pSetPointerPosition->X < 0) { > > + cursor_cmd->type = QXL_CURSOR_HIDE; > > + } else { > > + cursor_cmd->type = QXL_CURSOR_MOVE; > > + cursor_cmd->u.position.x = (INT16)pSetPointerPosition->X; > > + cursor_cmd->u.position.y = (INT16)pSetPointerPosition->Y; > > } > > + PushCursorCmd(cursor_cmd); > > DbgPrint(TRACE_LEVEL_VERBOSE, ("<--- %s\n", __FUNCTION__)); > > return STATUS_SUCCESS; > > } > > diff --git a/qxldod/QxlDod.h b/qxldod/QxlDod.h > > index 1d5cf53..8503f29 100755 > > --- a/qxldod/QxlDod.h > > +++ b/qxldod/QxlDod.h > > @@ -245,7 +245,6 @@ public: > > USHORT GetModeNumber(USHORT idx) {return m_ModeNumbers[idx];} > > USHORT GetCurrentModeIndex(void) {return m_CurrentMode;} > > VOID SetCurrentModeIndex(USHORT idx) {m_CurrentMode = idx;} > > - virtual BOOLEAN EnablePointer(void) = 0; > > virtual NTSTATUS ExecutePresentDisplayOnly(_In_ BYTE* > > DstAddr, > > _In_ UINT DstBitPerPixel, > > _In_ BYTE* SrcAddr, > > @@ -289,7 +288,6 @@ public: > > NTSTATUS SetPowerState(DEVICE_POWER_STATE DevicePowerState, > > DXGK_DISPLAY_INFORMATION* pDispInfo); > > NTSTATUS HWInit(PCM_RESOURCE_LIST pResList, DXGK_DISPLAY_INFORMATION* > > pDispInfo); > > NTSTATUS HWClose(void); > > - BOOLEAN EnablePointer(void) { return TRUE; } > > NTSTATUS ExecutePresentDisplayOnly(_In_ BYTE* DstAddr, > > _In_ UINT DstBitPerPixel, > > _In_ BYTE* SrcAddr, > > @@ -464,7 +462,6 @@ public: > > NTSTATUS SetPowerState(DEVICE_POWER_STATE DevicePowerState, > > DXGK_DISPLAY_INFORMATION* pDispInfo); > > NTSTATUS HWInit(PCM_RESOURCE_LIST pResList, DXGK_DISPLAY_INFORMATION* > > pDispInfo); > > NTSTATUS HWClose(void); > > - BOOLEAN EnablePointer(void) { return FALSE; } > > NTSTATUS ExecutePresentDisplayOnly(_In_ BYTE* DstAddr, > > _In_ UINT DstBitPerPixel, > > _In_ BYTE* SrcAddr, > Small testing of FlexVDI looks like they mainly turn off the client pointer when a window is moving as apparently in this situation Windows is rendering the mouse directly. Frediano _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel