From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1LZPNm-0001o2-JO for qemu-devel@nongnu.org; Tue, 17 Feb 2009 07:49:02 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1LZPNk-0001nq-Pp for qemu-devel@nongnu.org; Tue, 17 Feb 2009 07:49:01 -0500 Received: from [199.232.76.173] (port=41339 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1LZPNk-0001nn-Id for qemu-devel@nongnu.org; Tue, 17 Feb 2009 07:49:00 -0500 Received: from smtprelay0197.hostedemail.com ([216.40.44.197]:38485 helo=smtprelay.hostedemail.com) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1LZPNk-0005jX-15 for qemu-devel@nongnu.org; Tue, 17 Feb 2009 07:49:00 -0500 Received: from filter.hostedemail.com (ff-bigip1 [10.5.19.254]) by smtprelay02.hostedemail.com (Postfix) with SMTP id 249FA2225F6D for ; Tue, 17 Feb 2009 12:48:58 +0000 (UTC) Received: from [192.168.2.184] (cpe-66-66-167-50.rochester.res.rr.com [66.66.167.50]) (Authenticated sender: kressb@moose.net) by omf01.hostedemail.com (Postfix) with ESMTP for ; Tue, 17 Feb 2009 12:48:57 +0000 (UTC) Message-ID: <499AB237.909@moose.net> Date: Tue, 17 Feb 2009 07:48:55 -0500 From: Brian Kress MIME-Version: 1.0 Subject: Re: [Qemu-devel] [PATCH] Missing cirrus_invalidate_region() in cirrus_do_copy() References: <4999E40A.9070304@moose.net> In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Alexander Graf wrote: > > On 16.02.2009, at 23:09, Brian Kress wrote: > >> After doing a video to video copy, cirrus_do_copy() in cirrus_vga.c >> does a conditional >> call to cirrus_invalidate_region() with an "if (!notify)" test. >> However at this point the blt >> has already been done so it seems like this call should be made >> unconditionally. The patch >> below fixes some display update problems when dragging windows under >> both X (fedora >> 10 guest) and a Windows XP guest. > > Hm - I've run into this too, exposed the most using a gnome guest on > vnc using copyrect. > > Basically from what I understood, the conditional is > > If display supports copyrect > tell it to copy > Else > draw yourself That logic is done in vnc.c and is still being done. The vnc viewer is still being sent the copyrect, it's just getting overwritten on the next update because the display surface is not updated. The data in s->ds needs to be updated, either by vnc_copy() or by vga_hw_update() (which is what this patch does). An alternate way to fix this would be to do a memmove from the source rectangle to the destination rectangle in vnc_copy(), which I think is what previous versions of the copyrect code did, but it got taken out for some reason, which is what triggered this bug. > > And with this patch you're basically reverting to 'draw yourself' > always, no? > > I boiled things far enough to see that the blt addresses were > completely off. The next idea on my list was to check if this is a > Linux driver issue by running the same image on a real cirrus logic. > > Alex The blt addresses being off seemed to be a separate issue caused by assuming pitch == width * depth. I already fixed that in another patch, which has already been applied. That one did show up only on Linux, the one this patch is targeted at affects both.