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

[Xen-devel][PATCH]qemu-xen: let xenfb_guest_copy() handle depth=32 case


  • To: <xen-devel@xxxxxxxxxxxxxxxxxxx>
  • From: "Chun Yan Liu" <cyliu@xxxxxxxxxx>
  • Date: Wed, 20 Oct 2010 00:38:42 -0600
  • Delivery-date: Tue, 19 Oct 2010 23:39:32 -0700
  • List-id: Xen developer discussion <xen-devel.lists.xensource.com>

In hw/xenfb.c, xenfb_guest_copy() function doesn't handle xenfb->depth=32 case. When xenfb->depth=32, it will report error and won't copy data from the guest framebuffer region into QEMU's displaysurface, thus when enter CTRL+ALT+2 to qemu monitor console then CTRL+ALT+1 back to guest X window, the screen cannot be restored.

This patch adds two things:
1. when xenfb->depth equals destination bpp, do not need data translation, simply copy data from guest framebuffer into QEMU's displaysurface.
2. when xenfb->depth and destination bpp differs, add processing for xenfb->depth=32 case.

Signed-off by Chunyan Liu <cyliu@xxxxxxxxxx>
 
diff -r e4f337bb97f7 tools/ioemu-qemu-xen/hw/xenfb.c
--- a/hw/xenfb.c Wed Oct 20 19:39:28 2010 +0800
+++ b/hw/xenfb.c Wed Oct 20 21:42:37 2010 +0800
@@ -612,6 +612,12 @@
     uint8_t *data = ""> 
     if (!is_buffer_shared(xenfb->c.ds->surface)) {
+        if (xenfb->depth == bpp) {
+                for (line = y; line < (y+h); line++) {
+                        memcpy (data + (line * linesize) + (x * bpp / 8), xenfb->pixels + xenfb->offset + (line * xenfb->row_stride) + (x * xenfb->depth / 8), w * xenfb->depth / 8);
+                }
+        }
+        else{
         switch (xenfb->depth) {
         case 8:
             if (bpp == 16) {
@@ -631,9 +637,17 @@
                 oops = 1;
             }
             break;
+        case 32:
+            if (bpp == 16) {
+                BLT(uint32_t, uint16_t,  8, 8, 8,   5, 6, 5);
+            } else {
+                oops = 1;
+            }
+            break;
         default:
             oops = 1;
  }
+        }
     }
     if (oops) /* should not happen */
         xen_be_printf(&xenfb->c.xendev, 0, "%s: oops: convert %d -> %d bpp?\n",

Attachment: xenfb_32bpp.PATCH
Description: Text document

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.