[PATCH qxl-wddm-dod v2 21/25] Fixing Move rectangles implementation

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



As documented in MSDN, "DxgkDdiPresentDisplayOnly" should copy
each "move rectangle" from a given source point in the source buffer
to the destination. The current implementation dosen't take into account
the shift of the given source point at all. This patch fixies the issue.

Signed-off-by: Sameeh Jubran <sameeh@xxxxxxxxxx>
Signed-off-by: Dmitry Fleytman <dmitry@xxxxxxxxxx>
---
 qxldod/QxlDod.cpp | 17 ++++++++++++-----
 qxldod/QxlDod.h   |  3 ++-
 2 files changed, 14 insertions(+), 6 deletions(-)

diff --git a/qxldod/QxlDod.cpp b/qxldod/QxlDod.cpp
index 7b90698..faa7de4 100755
--- a/qxldod/QxlDod.cpp
+++ b/qxldod/QxlDod.cpp
@@ -3777,20 +3777,26 @@ QxlDevice::ExecutePresentDisplayOnly(
         BltBits(&DstBltInfo,
         &SrcBltInfo,
         1,
-        pDestRect);
+        pDestRect,
+        pSourcePoint);
     }
 
     // Copy all the dirty rects from source image to video frame buffer.
     for (UINT i = 0; i < ctx->NumDirtyRects; i++)
     {
         RECT*    pDirtyRect = &ctx->DirtyRect[i];
+        POINT   sourcePoint;
+        sourcePoint.x = pDirtyRect->left;
+        sourcePoint.y = pDirtyRect->top;
+
         DbgPrint(TRACE_LEVEL_INFORMATION, ("--- %d pDirtyRect->bottom = %ld, pDirtyRect->left = %ld, pDirtyRect->right = %ld, pDirtyRect->top = %ld\n", 
             i, pDirtyRect->bottom, pDirtyRect->left, pDirtyRect->right, pDirtyRect->top));
 
         BltBits(&DstBltInfo,
         &SrcBltInfo,
         1,
-        pDirtyRect);
+        pDirtyRect,
+        &sourcePoint);
     }
 
     // Unmap unmap and unlock the pages.
@@ -4218,7 +4224,8 @@ VOID QxlDevice::BltBits (
     BLT_INFO* pDst,
     CONST BLT_INFO* pSrc,
     UINT  NumRects,
-    _In_reads_(NumRects) CONST RECT *pRects)
+    _In_reads_(NumRects) CONST RECT *pRects,
+    POINT*   pSourcePoint)
 {
     PAGED_CODE();
     QXLDrawable *drawable;
@@ -4283,8 +4290,8 @@ VOID QxlDevice::BltBits (
     internal->image.bitmap.stride = line_size;
 
     UINT8* src = (UINT8*)pSrc->pBits+
-                                (pRect->top) * pSrc->Pitch +
-                                (pRect->left * 4);
+                                (pSourcePoint->y) * pSrc->Pitch +
+                                (pSourcePoint->x * 4);
     UINT8* src_end = src - pSrc->Pitch;
     src += pSrc->Pitch * (height - 1);
     UINT8* dest = chunk->data;
diff --git a/qxldod/QxlDod.h b/qxldod/QxlDod.h
index 2e9ffb7..d638fe6 100755
--- a/qxldod/QxlDod.h
+++ b/qxldod/QxlDod.h
@@ -480,7 +480,8 @@ protected:
     VOID BltBits (BLT_INFO* pDst,
                     CONST BLT_INFO* pSrc,
                     UINT  NumRects,
-                    _In_reads_(NumRects) CONST RECT *pRects);
+                    _In_reads_(NumRects) CONST RECT *pRects,
+                    POINT*   pSourcePoint);
     QXLDrawable *Drawable(UINT8 type,
                     CONST RECT *area,
                     CONST RECT *clip,
-- 
2.7.0.windows.1

_______________________________________________
Spice-devel mailing list
Spice-devel@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/spice-devel




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]     [Monitors]