[Spice-devel] [PATCH xf86-video-qxl] Provide an implementation for put_image in dfps mode.

Jeremy White jwhite at codeweavers.com
Wed Dec 2 12:14:32 PST 2015


This prevents the fallback from calling prepare_access
against the whole screen, which in turn keeps us from
transmitting the whole screen more than necessary.

Signed-off-by: Jeremy White <jwhite at codeweavers.com>
---
 src/dfps.c | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/src/dfps.c b/src/dfps.c
index 568ba5e..f113f27 100644
--- a/src/dfps.c
+++ b/src/dfps.c
@@ -270,15 +270,22 @@ static Bool dfps_put_image (PixmapPtr dest, int x, int y, int w, int h,
                char *src, int src_pitch)
 {
     dfps_info_t *info;
+    FbBits *dst;
+    FbStride dst_stride;
+    int dst_bpp;
 
     if (!(info = dfps_get_info (dest)))
         return FALSE;
 
     dfps_update_box(&info->updated_region, x, x + w, y, y + h);
 
-    /* We can avoid doing the put image ourselves, as the uxa driver
-       will fall back and do it for us if we return false */
-    return FALSE;
+    fbPrepareAccess(dest);
+    fbGetPixmapBitsData(dest, dst, dst_stride, dst_bpp);
+    fbBlt((FbBits *) src, src_pitch / sizeof(FbStip), 0, dst + (y * dst_stride), dst_stride,
+           x * dst_bpp, w * dst_bpp, h, GXcopy, FB_ALLONES, dst_bpp, FALSE, FALSE);
+    fbFinishAccess(dest);
+
+    return TRUE;
 }
 
 
-- 
2.1.4



More information about the Spice-devel mailing list