From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:40597) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TGQnt-00069w-00 for qemu-devel@nongnu.org; Tue, 25 Sep 2012 04:47:45 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TGQnk-0000rj-UW for qemu-devel@nongnu.org; Tue, 25 Sep 2012 04:47:40 -0400 Received: from mx1.redhat.com ([209.132.183.28]:16904) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TGQnk-0000qW-MJ for qemu-devel@nongnu.org; Tue, 25 Sep 2012 04:47:32 -0400 Message-ID: <50616F9E.5000501@redhat.com> Date: Tue, 25 Sep 2012 10:47:26 +0200 From: Gerd Hoffmann MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Subject: [Qemu-devel] [RfC] using pixman in qemu for raster ops List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: "qemu-devel@nongnu.org" , Stefano Stabellini Hi, While working with the pixman library in the fbdev branch and discussing patches with Stefano Stabellini I came to the conclusion that it would be a good idea to: (a) use the pixman library not just as vehicle in fbdev, but as core service for all raster ops in qemu. (b) do a major cleanup / revamp of the console system in qemu. That implies pixman will join zlib and glib as hard dependency, i.e. qemu will stop building without pixman. What is pixman? As the name implies it is a library for pixel rendering ops. It is portable. It's used by Xorg, cairo and spice. On any recent linux distro you'll find it already installed. When you compile qemu with spice you'll have a indirect dependency on pixman. Merging anthonys gtk/cairo patches will add another indirect dependency. Even though pixman is used by core linux packages it is still a young project. On older distros (RHEL-5 for example) it isn't included and must be compiled manually. What is the console revamp plan? (1) Drop DisplayAllocator. Make DisplayChangeListeners support all important formats directly instead (using pixman), then make gfx card emulation use qemu_create_displaysurface_from() to give DisplayChangeListeners direct access to the guests framebuffer. (2) Replace DisplaySurface with pixman_image_t. Gives us reference counting for free, which simplifies thread usage in ui/ rendering code. Also makes it easier to use pixman in ui/ code. (3) Assign a pixman_image_t to each qemu console. No more redrawing needed on console switching. vga_hw_invalidate() can be dropped, screendump code can be simplified. (4) API fixes. DisplayChangeListeners don't get a opaque pointer (or pointer to struct DisplayChangeListener for container_of usage) for example. (5) Investigate optimizations. Such as passing pixman regions to DisplayChangeListensers, so they get all updates in one go instead of being called for each rectangle individually. Comments? cheers, Gerd