From nobody Thu Apr 25 14:15:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1549024282644635.266265581735; Fri, 1 Feb 2019 04:31:22 -0800 (PST) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id DE7C929A75; Fri, 1 Feb 2019 12:31:18 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 92F765C225; Fri, 1 Feb 2019 12:31:18 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id D1C9F18033A2; Fri, 1 Feb 2019 12:31:17 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id x11CVF3P014230 for ; Fri, 1 Feb 2019 07:31:15 -0500 Received: by smtp.corp.redhat.com (Postfix) id E78475D787; Fri, 1 Feb 2019 12:31:15 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-116-249.ams2.redhat.com [10.36.116.249]) by smtp.corp.redhat.com (Postfix) with ESMTP id 6462D5D6AA; Fri, 1 Feb 2019 12:31:01 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 7FBD19D85; Fri, 1 Feb 2019 13:31:00 +0100 (CET) From: Gerd Hoffmann To: qemu-devel@nongnu.org Date: Fri, 1 Feb 2019 13:30:56 +0100 Message-Id: <20190201123100.27419-2-kraxel@redhat.com> In-Reply-To: <20190201123100.27419-1-kraxel@redhat.com> References: <20190201123100.27419-1-kraxel@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-loop: libvir-list@redhat.com Cc: libvir-list@redhat.com, Michael Walle , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Gerd Hoffmann Subject: [libvirt] [PULL 1/5] hw/display: Move Milkymist specific hardware out of common-obj list X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.28]); Fri, 01 Feb 2019 12:31:21 +0000 (UTC) From: Philippe Mathieu-Daud=C3=A9 The Milkymist specific hardware is only used by the LM32 target, it is pointless to compile those objects in other targets. Signed-off-by: Philippe Mathieu-Daud=C3=A9 Message-id: 20190130120005.23123-2-philmd@redhat.com Signed-off-by: Gerd Hoffmann --- hw/display/Makefile.objs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hw/display/Makefile.objs b/hw/display/Makefile.objs index 97acd5b6cb..5b770817c7 100644 --- a/hw/display/Makefile.objs +++ b/hw/display/Makefile.objs @@ -25,10 +25,10 @@ common-obj-$(CONFIG_BOCHS_DISPLAY) +=3D edid-region.o common-obj-$(CONFIG_BLIZZARD) +=3D blizzard.o common-obj-$(CONFIG_EXYNOS4) +=3D exynos4210_fimd.o common-obj-$(CONFIG_FRAMEBUFFER) +=3D framebuffer.o -common-obj-$(CONFIG_MILKYMIST) +=3D milkymist-vgafb.o +obj-$(CONFIG_MILKYMIST) +=3D milkymist-vgafb.o common-obj-$(CONFIG_ZAURUS) +=3D tc6393xb.o =20 -common-obj-$(CONFIG_MILKYMIST_TMU2) +=3D milkymist-tmu2.o +obj-$(CONFIG_MILKYMIST_TMU2) +=3D milkymist-tmu2.o milkymist-tmu2.o-cflags :=3D $(X11_CFLAGS) milkymist-tmu2.o-libs :=3D $(X11_LIBS) =20 --=20 2.9.3 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu Apr 25 14:15:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1549024348419771.25992670067; Fri, 1 Feb 2019 04:32:28 -0800 (PST) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 8650D2CE914; Fri, 1 Feb 2019 12:32:25 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 187715D9D1; Fri, 1 Feb 2019 12:32:25 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 6FCEE1803391; Fri, 1 Feb 2019 12:32:24 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id x11CVV9B014266 for ; Fri, 1 Feb 2019 07:31:31 -0500 Received: by smtp.corp.redhat.com (Postfix) id C101B104813A; Fri, 1 Feb 2019 12:31:31 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-116-249.ams2.redhat.com [10.36.116.249]) by smtp.corp.redhat.com (Postfix) with ESMTP id 698321048101; Fri, 1 Feb 2019 12:31:01 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 878F49AD2; Fri, 1 Feb 2019 13:31:00 +0100 (CET) From: Gerd Hoffmann To: qemu-devel@nongnu.org Date: Fri, 1 Feb 2019 13:30:57 +0100 Message-Id: <20190201123100.27419-3-kraxel@redhat.com> In-Reply-To: <20190201123100.27419-1-kraxel@redhat.com> References: <20190201123100.27419-1-kraxel@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 X-loop: libvir-list@redhat.com Cc: libvir-list@redhat.com, Michael Walle , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Gerd Hoffmann Subject: [libvirt] [PULL 2/5] configure: LM32 Milkymist Texture Mapping Unit (tmu2) also depends of X11 X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.29]); Fri, 01 Feb 2019 12:32:27 +0000 (UTC) From: Philippe Mathieu-Daud=C3=A9 Commit 5f9b1e35060b8 remove the dependency between OpenGL and X11. However the milkymist-tmu2 device do require X11. When using SDL, the configure script sets need_x11=3Dyes, so the X11 flags are populated to the makefiles. When building without SDL, X11 is not pulled and populated, leading to a link failure: LINK lm32-softmmu/qemu-system-lm32 hw/lm32/milkymist.o: In function `milkymist_tmu2_create': hw/lm32/milkymist-hw.h:114: undefined reference to `XOpenDisplay' hw/lm32/milkymist-hw.h:140: undefined reference to `XFree' hw/lm32/milkymist-hw.h:141: undefined reference to `XCloseDisplay' hw/lm32/milkymist-hw.h:130: undefined reference to `XCloseDisplay' ../hw/display/milkymist-tmu2.o: In function `tmu2_glx_init': hw/display/milkymist-tmu2.c:112: undefined reference to `XOpenDisplay' hw/display/milkymist-tmu2.c:123: undefined reference to `XFree' collect2: error: ld returned 1 exit status gmake[1]: *** [Makefile:199: qemu-system-lm32] Error 1 Enforce the X11 dependency when the LM32 target is built. This will allow us to build QEMU without SDL. Signed-off-by: Philippe Mathieu-Daud=C3=A9 Message-id: 20190130120005.23123-3-philmd@redhat.com Signed-off-by: Gerd Hoffmann --- configure | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/configure b/configure index b18281c61f..c7024d6662 100755 --- a/configure +++ b/configure @@ -4047,6 +4047,16 @@ EOF fi fi =20 +if test "$opengl" =3D "yes" -a "$have_x11" =3D "yes"; then + for target in $target_list; do + case $target in + lm32-softmmu) # milkymist-tmu2 requires X11 and OpenGL + need_x11=3Dyes + ;; + esac + done +fi + ########################################## # libxml2 probe if test "$libxml2" !=3D "no" ; then --=20 2.9.3 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu Apr 25 14:15:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1549024283875224.35360834951382; Fri, 1 Feb 2019 04:31:23 -0800 (PST) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 945F9C0C49C8; Fri, 1 Feb 2019 12:31:20 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 2F9E960C60; Fri, 1 Feb 2019 12:31:20 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 7F5B03F774; Fri, 1 Feb 2019 12:31:19 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id x11CVHWt014241 for ; Fri, 1 Feb 2019 07:31:17 -0500 Received: by smtp.corp.redhat.com (Postfix) id 6630B5D962; Fri, 1 Feb 2019 12:31:17 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-116-249.ams2.redhat.com [10.36.116.249]) by smtp.corp.redhat.com (Postfix) with ESMTP id 695EC5D9D6; Fri, 1 Feb 2019 12:31:01 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 91B3F9AB4; Fri, 1 Feb 2019 13:31:00 +0100 (CET) From: Gerd Hoffmann To: qemu-devel@nongnu.org Date: Fri, 1 Feb 2019 13:30:58 +0100 Message-Id: <20190201123100.27419-4-kraxel@redhat.com> In-Reply-To: <20190201123100.27419-1-kraxel@redhat.com> References: <20190201123100.27419-1-kraxel@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-loop: libvir-list@redhat.com Cc: libvir-list@redhat.com, Michael Walle , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Gerd Hoffmann Subject: [libvirt] [PULL 3/5] hw/display/milkymist-tmu2: Explicit the dependency to both X11 / OpenGL X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.31]); Fri, 01 Feb 2019 12:31:22 +0000 (UTC) From: Philippe Mathieu-Daud=C3=A9 The TMU device requires both X11 and OpenGL. Signed-off-by: Philippe Mathieu-Daud=C3=A9 Message-id: 20190130120005.23123-4-philmd@redhat.com Signed-off-by: Gerd Hoffmann --- hw/lm32/milkymist-hw.h | 4 ++-- default-configs/lm32-softmmu.mak | 2 +- hw/display/Makefile.objs | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/hw/lm32/milkymist-hw.h b/hw/lm32/milkymist-hw.h index d3be0cfb3a..32c344ef9f 100644 --- a/hw/lm32/milkymist-hw.h +++ b/hw/lm32/milkymist-hw.h @@ -88,7 +88,7 @@ static inline DeviceState *milkymist_pfpu_create(hwaddr b= ase, return dev; } =20 -#ifdef CONFIG_OPENGL +#if defined(CONFIG_X11) && defined(CONFIG_OPENGL) #include #include #include @@ -103,7 +103,7 @@ static const int glx_fbconfig_attr[] =3D { static inline DeviceState *milkymist_tmu2_create(hwaddr base, qemu_irq irq) { -#ifdef CONFIG_OPENGL +#if defined(CONFIG_X11) && defined(CONFIG_OPENGL) DeviceState *dev; Display *d; GLXFBConfig *configs; diff --git a/default-configs/lm32-softmmu.mak b/default-configs/lm32-softmm= u.mak index 4889348a10..4049b23562 100644 --- a/default-configs/lm32-softmmu.mak +++ b/default-configs/lm32-softmmu.mak @@ -2,7 +2,7 @@ =20 CONFIG_LM32=3Dy CONFIG_MILKYMIST=3Dy -CONFIG_MILKYMIST_TMU2=3D$(CONFIG_OPENGL) +CONFIG_MILKYMIST_TMU2=3D$(call land,$(CONFIG_X11),$(CONFIG_OPENGL)) CONFIG_FRAMEBUFFER=3Dy CONFIG_PTIMER=3Dy CONFIG_PFLASH_CFI01=3Dy diff --git a/hw/display/Makefile.objs b/hw/display/Makefile.objs index 5b770817c7..7c4ae9a0fd 100644 --- a/hw/display/Makefile.objs +++ b/hw/display/Makefile.objs @@ -29,8 +29,8 @@ obj-$(CONFIG_MILKYMIST) +=3D milkymist-vgafb.o common-obj-$(CONFIG_ZAURUS) +=3D tc6393xb.o =20 obj-$(CONFIG_MILKYMIST_TMU2) +=3D milkymist-tmu2.o -milkymist-tmu2.o-cflags :=3D $(X11_CFLAGS) -milkymist-tmu2.o-libs :=3D $(X11_LIBS) +milkymist-tmu2.o-cflags :=3D $(X11_CFLAGS) $(OPENGL_CFLAGS) +milkymist-tmu2.o-libs :=3D $(X11_LIBS) $(OPENGL_LIBS) =20 obj-$(CONFIG_OMAP) +=3D omap_dss.o obj-$(CONFIG_OMAP) +=3D omap_lcdc.o --=20 2.9.3 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu Apr 25 14:15:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1549024355567365.41083505608594; Fri, 1 Feb 2019 04:32:35 -0800 (PST) Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id A502A87649; Fri, 1 Feb 2019 12:32:33 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 595AB1019627; Fri, 1 Feb 2019 12:32:33 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id C4B0218033A2; Fri, 1 Feb 2019 12:32:32 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id x11CVaKU014286 for ; Fri, 1 Feb 2019 07:31:36 -0500 Received: by smtp.corp.redhat.com (Postfix) id AF67E194B1; Fri, 1 Feb 2019 12:31:36 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-116-249.ams2.redhat.com [10.36.116.249]) by smtp.corp.redhat.com (Postfix) with ESMTP id 6977E19742; Fri, 1 Feb 2019 12:31:01 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id 9ED1497BA; Fri, 1 Feb 2019 13:31:00 +0100 (CET) From: Gerd Hoffmann To: qemu-devel@nongnu.org Date: Fri, 1 Feb 2019 13:30:59 +0100 Message-Id: <20190201123100.27419-5-kraxel@redhat.com> In-Reply-To: <20190201123100.27419-1-kraxel@redhat.com> References: <20190201123100.27419-1-kraxel@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 X-loop: libvir-list@redhat.com Cc: libvir-list@redhat.com, Michael Walle , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Gerd Hoffmann Subject: [libvirt] [PULL 4/5] hw/display/milkymist-tmu2: Move inlined code from header to source X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.26]); Fri, 01 Feb 2019 12:32:34 +0000 (UTC) From: Philippe Mathieu-Daud=C3=A9 Move the complexity of milkymist_tmu2_create() into the source file. Doing so we avoid to include the X11/OpenGL headers in all LM32 devices, and we also avoid the duplicate declaration of glx_fbconfig_attr[] (it is already declared in hw/display/milkymist-tmu2.c). Since TYPE_MILKYMIST_TMU2 is now accessible, use it. Signed-off-by: Philippe Mathieu-Daud=C3=A9 Message-id: 20190130120005.23123-5-philmd@redhat.com Signed-off-by: Gerd Hoffmann --- hw/lm32/milkymist-hw.h | 63 ---------------------------------= ---- include/hw/display/milkymist_tmu2.h | 41 ++++++++++++++++++++++++ hw/display/milkymist-tmu2.c | 49 +++++++++++++++++++++++++++++ hw/lm32/milkymist.c | 1 + MAINTAINERS | 1 + 5 files changed, 92 insertions(+), 63 deletions(-) create mode 100644 include/hw/display/milkymist_tmu2.h diff --git a/hw/lm32/milkymist-hw.h b/hw/lm32/milkymist-hw.h index 32c344ef9f..976cf9254d 100644 --- a/hw/lm32/milkymist-hw.h +++ b/hw/lm32/milkymist-hw.h @@ -88,69 +88,6 @@ static inline DeviceState *milkymist_pfpu_create(hwaddr = base, return dev; } =20 -#if defined(CONFIG_X11) && defined(CONFIG_OPENGL) -#include -#include -#include -static const int glx_fbconfig_attr[] =3D { - GLX_GREEN_SIZE, 5, - GLX_GREEN_SIZE, 6, - GLX_BLUE_SIZE, 5, - None -}; -#endif - -static inline DeviceState *milkymist_tmu2_create(hwaddr base, - qemu_irq irq) -{ -#if defined(CONFIG_X11) && defined(CONFIG_OPENGL) - DeviceState *dev; - Display *d; - GLXFBConfig *configs; - int nelements; - int ver_major, ver_minor; - - /* check that GLX will work */ - d =3D XOpenDisplay(NULL); - if (d =3D=3D NULL) { - return NULL; - } - - if (!glXQueryVersion(d, &ver_major, &ver_minor)) { - /* Yeah, sometimes getting the GLX version can fail. - * Isn't X beautiful? */ - XCloseDisplay(d); - return NULL; - } - - if ((ver_major < 1) || ((ver_major =3D=3D 1) && (ver_minor < 3))) { - printf("Your GLX version is %d.%d," - "but TMU emulation needs at least 1.3. TMU disabled.\n", - ver_major, ver_minor); - XCloseDisplay(d); - return NULL; - } - - configs =3D glXChooseFBConfig(d, 0, glx_fbconfig_attr, &nelements); - if (configs =3D=3D NULL) { - XCloseDisplay(d); - return NULL; - } - - XFree(configs); - XCloseDisplay(d); - - dev =3D qdev_create(NULL, "milkymist-tmu2"); - qdev_init_nofail(dev); - sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, base); - sysbus_connect_irq(SYS_BUS_DEVICE(dev), 0, irq); - - return dev; -#else - return NULL; -#endif -} - static inline DeviceState *milkymist_ac97_create(hwaddr base, qemu_irq crrequest_irq, qemu_irq crreply_irq, qemu_irq dmar_irq, qemu_irq dmaw_irq) diff --git a/include/hw/display/milkymist_tmu2.h b/include/hw/display/milky= mist_tmu2.h new file mode 100644 index 0000000000..148a119a1d --- /dev/null +++ b/include/hw/display/milkymist_tmu2.h @@ -0,0 +1,41 @@ +/* + * QEMU model of the Milkymist texture mapping unit. + * + * Copyright (c) 2010 Michael Walle + * Copyright (c) 2010 Sebastien Bourdeauducq + * + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, see . + * + * + * Specification available at: + * http://milkymist.walle.cc/socdoc/tmu2.pdf + * + */ + +#ifndef HW_DISPLAY_MILKYMIST_TMU2_H +#define HW_DISPLAY_MILKYMIST_TMU2_H + +#include "hw/qdev.h" + +#if defined(CONFIG_X11) && defined(CONFIG_OPENGL) +DeviceState *milkymist_tmu2_create(hwaddr base, qemu_irq irq); +#else +static inline DeviceState *milkymist_tmu2_create(hwaddr base, qemu_irq irq) +{ + return NULL; +} +#endif + +#endif /* HW_DISPLAY_MILKYMIST_TMU2_H */ diff --git a/hw/display/milkymist-tmu2.c b/hw/display/milkymist-tmu2.c index 3ce44fdfce..b33fc234e9 100644 --- a/hw/display/milkymist-tmu2.c +++ b/hw/display/milkymist-tmu2.c @@ -31,6 +31,7 @@ #include "qapi/error.h" #include "qemu/error-report.h" #include "qapi/error.h" +#include "hw/display/milkymist_tmu2.h" =20 #include #include @@ -499,3 +500,51 @@ static void milkymist_tmu2_register_types(void) } =20 type_init(milkymist_tmu2_register_types) + +DeviceState *milkymist_tmu2_create(hwaddr base, qemu_irq irq) +{ + DeviceState *dev; + Display *d; + GLXFBConfig *configs; + int nelements; + int ver_major, ver_minor; + + /* check that GLX will work */ + d =3D XOpenDisplay(NULL); + if (d =3D=3D NULL) { + return NULL; + } + + if (!glXQueryVersion(d, &ver_major, &ver_minor)) { + /* + * Yeah, sometimes getting the GLX version can fail. + * Isn't X beautiful? + */ + XCloseDisplay(d); + return NULL; + } + + if ((ver_major < 1) || ((ver_major =3D=3D 1) && (ver_minor < 3))) { + printf("Your GLX version is %d.%d," + "but TMU emulation needs at least 1.3. TMU disabled.\n", + ver_major, ver_minor); + XCloseDisplay(d); + return NULL; + } + + configs =3D glXChooseFBConfig(d, 0, glx_fbconfig_attr, &nelements); + if (configs =3D=3D NULL) { + XCloseDisplay(d); + return NULL; + } + + XFree(configs); + XCloseDisplay(d); + + dev =3D qdev_create(NULL, TYPE_MILKYMIST_TMU2); + qdev_init_nofail(dev); + sysbus_mmio_map(SYS_BUS_DEVICE(dev), 0, base); + sysbus_connect_irq(SYS_BUS_DEVICE(dev), 0, irq); + + return dev; +} diff --git a/hw/lm32/milkymist.c b/hw/lm32/milkymist.c index 63c6894c95..26a2398354 100644 --- a/hw/lm32/milkymist.c +++ b/hw/lm32/milkymist.c @@ -32,6 +32,7 @@ #include "hw/loader.h" #include "elf.h" #include "milkymist-hw.h" +#include "hw/display/milkymist_tmu2.h" #include "lm32.h" #include "exec/address-spaces.h" =20 diff --git a/MAINTAINERS b/MAINTAINERS index 234e5c413b..37ceda468f 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -185,6 +185,7 @@ F: disas/lm32.c F: hw/lm32/ F: hw/*/lm32_* F: hw/*/milkymist-* +F: include/hw/display/milkymist_tmu2.h F: include/hw/char/lm32_juart.h F: include/hw/lm32/ F: tests/tcg/lm32/ --=20 2.9.3 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list From nobody Thu Apr 25 14:15:30 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 15490243675981014.7231681730758; Fri, 1 Feb 2019 04:32:47 -0800 (PST) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 3C7BC796E0; Fri, 1 Feb 2019 12:32:45 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id E319D5C22F; Fri, 1 Feb 2019 12:32:44 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 402BC3F602; Fri, 1 Feb 2019 12:32:44 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id x11CVncu014625 for ; Fri, 1 Feb 2019 07:31:49 -0500 Received: by smtp.corp.redhat.com (Postfix) id 23CF45D98E; Fri, 1 Feb 2019 12:31:49 +0000 (UTC) Received: from sirius.home.kraxel.org (ovpn-116-249.ams2.redhat.com [10.36.116.249]) by smtp.corp.redhat.com (Postfix) with ESMTP id A39665D961; Fri, 1 Feb 2019 12:31:16 +0000 (UTC) Received: by sirius.home.kraxel.org (Postfix, from userid 1000) id AD9B797BE; Fri, 1 Feb 2019 13:31:00 +0100 (CET) From: Gerd Hoffmann To: qemu-devel@nongnu.org Date: Fri, 1 Feb 2019 13:31:00 +0100 Message-Id: <20190201123100.27419-6-kraxel@redhat.com> In-Reply-To: <20190201123100.27419-1-kraxel@redhat.com> References: <20190201123100.27419-1-kraxel@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-loop: libvir-list@redhat.com Cc: libvir-list@redhat.com, Michael Walle , Gerd Hoffmann Subject: [libvirt] [PULL 5/5] ui: remove support for SDL1.2 in favour of SDL2 X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.25]); Fri, 01 Feb 2019 12:32:46 +0000 (UTC) From: Daniel P. Berrang=C3=A9 SDL1.2 was deprecated in the 2.12.0 release with: commit e52c6ba34149b4f39c3fd60e59ee32b809db2bfa Author: Daniel P. Berrange Date: Mon Jan 15 14:25:33 2018 +0000 ui: deprecate use of SDL 1.2 in favour of 2.0 series The SDL 2.0 release was made in Aug, 2013: https://www.libsdl.org/release/ That will soon be 4 + 1/2 years ago, which is enough time to consider the 2.0 series widely supported. Thus we deprecate the SDL 1.2 support, which will allow us to delete it in the last release of 2018. By this time, SDL 2.0 will be more than 5 years old. Signed-off-by: Daniel P. Berrange Reviewed-by: Marc-Andr=C3=A9 Lureau Message-id: 20180115142533.24585-1-berrange@redhat.com Signed-off-by: Gerd Hoffmann It is thus able to be removed in the 3.1.0 release. Signed-off-by: Daniel P. Berrang=C3=A9 Message-Id: <20180822131554.3398-4-berrange@redhat.com> [ kraxel: rebase ] Signed-off-by: Gerd Hoffmann --- configure | 60 +-- ui/sdl_zoom.h | 25 -- ui/sdl_zoom_template.h | 219 ----------- ui/sdl.c | 1027 --------------------------------------------= ---- ui/sdl_zoom.c | 93 ----- qemu-deprecated.texi | 9 - ui/Makefile.objs | 5 - 7 files changed, 7 insertions(+), 1431 deletions(-) delete mode 100644 ui/sdl_zoom.h delete mode 100644 ui/sdl_zoom_template.h delete mode 100644 ui/sdl.c delete mode 100644 ui/sdl_zoom.c diff --git a/configure b/configure index c7024d6662..b229f43334 100755 --- a/configure +++ b/configure @@ -348,7 +348,6 @@ docs=3D"" fdt=3D"" netmap=3D"no" sdl=3D"" -sdlabi=3D"" sdl_image=3D"" virtfs=3D"" mpath=3D"" @@ -577,7 +576,6 @@ query_pkg_config() { "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@" } pkg_config=3Dquery_pkg_config -sdl_config=3D"${SDL_CONFIG-${cross_prefix}sdl-config}" sdl2_config=3D"${SDL2_CONFIG-${cross_prefix}sdl2-config}" =20 # If the user hasn't specified ARFLAGS, default to 'rv', just as make does. @@ -1044,8 +1042,6 @@ for opt do ;; --enable-sdl) sdl=3D"yes" ;; - --with-sdlabi=3D*) sdlabi=3D"$optarg" - ;; --disable-sdl-image) sdl_image=3D"no" ;; --enable-sdl-image) sdl_image=3D"yes" @@ -1711,7 +1707,6 @@ disabled with --disable-FEATURE, default is enabled i= f available: nettle nettle cryptography support gcrypt libgcrypt cryptography support sdl SDL UI - --with-sdlabi select preferred SDL ABI 1.2 or 2.0 sdl_image SDL Image support for icons gtk gtk UI vte vte support for the gtk UI @@ -2927,37 +2922,11 @@ fi =20 sdl_probe () { - sdl_too_old=3Dno - if test "$sdlabi" =3D ""; then - if $pkg_config --exists "sdl2"; then - sdlabi=3D2.0 - elif $pkg_config --exists "sdl"; then - sdlabi=3D1.2 - else - sdlabi=3D2.0 - fi - fi - - if test $sdlabi =3D "2.0"; then - sdl_config=3D$sdl2_config - sdlname=3Dsdl2 - sdlconfigname=3Dsdl2_config - elif test $sdlabi =3D "1.2"; then - sdlname=3Dsdl - sdlconfigname=3Dsdl_config - else - error_exit "Unknown sdlabi $sdlabi, must be 1.2 or 2.0" - fi - - if test "$(basename $sdl_config)" !=3D $sdlconfigname && ! has ${sdl_con= fig}; then - sdl_config=3D$sdlconfigname - fi - - if $pkg_config $sdlname --exists; then - sdlconfig=3D"$pkg_config $sdlname" + if $pkg_config sdl2 --exists; then + sdlconfig=3D"$pkg_config sdl2" sdlversion=3D$($sdlconfig --modversion 2>/dev/null) elif has ${sdl_config}; then - sdlconfig=3D"$sdl_config" + sdlconfig=3D"$sdl2_config" sdlversion=3D$($sdlconfig --version) else if test "$sdl" =3D "yes" ; then @@ -2979,8 +2948,8 @@ EOF sdl_cflags=3D$($sdlconfig --cflags 2>/dev/null) sdl_cflags=3D"$sdl_cflags -Wno-undef" # workaround 2.0.8 bug if test "$static" =3D "yes" ; then - if $pkg_config $sdlname --exists; then - sdl_libs=3D$($pkg_config $sdlname --static --libs 2>/dev/null) + if $pkg_config sdl2 --exists; then + sdl_libs=3D$($pkg_config sdl2 --static --libs 2>/dev/null) else sdl_libs=3D$($sdlconfig --static-libs 2>/dev/null) fi @@ -2988,11 +2957,7 @@ EOF sdl_libs=3D$($sdlconfig --libs 2>/dev/null) fi if compile_prog "$sdl_cflags" "$sdl_libs" ; then - if test $(echo $sdlversion | sed 's/[^0-9]//g') -lt 121 ; then - sdl_too_old=3Dyes - else - sdl=3Dyes - fi + sdl=3Dyes =20 # static link with sdl ? (note: sdl.pc's --static --libs is broken) if test "$sdl" =3D "yes" -a "$static" =3D "yes" ; then @@ -3008,7 +2973,7 @@ EOF fi # static link else # sdl not found if test "$sdl" =3D "yes" ; then - feature_not_found "sdl" "Install SDL devel" + feature_not_found "sdl" "Install SDL2 devel" fi sdl=3Dno fi # sdl compile test @@ -6220,16 +6185,6 @@ echo "docker $docker" echo "libpmem support $libpmem" echo "libudev $libudev" =20 -if test "$sdl_too_old" =3D "yes"; then -echo "-> Your SDL version is too old - please upgrade to have SDL support" -fi - -if test "$sdlabi" =3D "1.2"; then - echo - echo "WARNING: Use of SDL 1.2 is deprecated and will be removed in" - echo "WARNING: future releases. Please switch to using SDL 2.0" -fi - if test "$supported_cpu" =3D "no"; then echo echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEAS= ES!" @@ -6434,7 +6389,6 @@ if test "$have_x11" =3D "yes" -a "$need_x11" =3D "yes= "; then fi if test "$sdl" =3D "yes" ; then echo "CONFIG_SDL=3Dm" >> $config_host_mak - echo "CONFIG_SDLABI=3D$sdlabi" >> $config_host_mak echo "SDL_CFLAGS=3D$sdl_cflags" >> $config_host_mak echo "SDL_LIBS=3D$sdl_libs" >> $config_host_mak if test "$sdl_image" =3D "yes" ; then diff --git a/ui/sdl_zoom.h b/ui/sdl_zoom.h deleted file mode 100644 index 39696ddb08..0000000000 --- a/ui/sdl_zoom.h +++ /dev/null @@ -1,25 +0,0 @@ -/* - * SDL_zoom - surface scaling - *=20 - * Copyright (c) 2009 Citrix Systems, Inc. - * - * Derived from: SDL_rotozoom, LGPL (c) A. Schiffler from the SDL_gfx lib= rary. - * Modifications by Stefano Stabellini. - * - * This work is licensed under the terms of the GNU GPL version 2. - * See the COPYING file in the top-level directory. - * - */ - -#ifndef SDL_ZOOM_H -#define SDL_ZOOM_H - -#include - -#define SMOOTHING_OFF 0 -#define SMOOTHING_ON 1 - -int sdl_zoom_blit(SDL_Surface *src_sfc, SDL_Surface *dst_sfc, - int smooth, SDL_Rect *src_rect); - -#endif /* SDL_ZOOM_H */ diff --git a/ui/sdl_zoom_template.h b/ui/sdl_zoom_template.h deleted file mode 100644 index 6a424adfb4..0000000000 --- a/ui/sdl_zoom_template.h +++ /dev/null @@ -1,219 +0,0 @@ -/* - * SDL_zoom_template - surface scaling - *=20 - * Copyright (c) 2009 Citrix Systems, Inc. - * - * Derived from: SDL_rotozoom, LGPL (c) A. Schiffler from the SDL_gfx lib= rary. - * Modifications by Stefano Stabellini. - * - * This work is licensed under the terms of the GNU GPL version 2. - * See the COPYING file in the top-level directory. - * - */ - -#if BPP =3D=3D 16 -#define SDL_TYPE Uint16 -#elif BPP =3D=3D 32 -#define SDL_TYPE Uint32 -#else -#error unsupport depth -#endif - -/* =20 - * Simple helper functions to make the code looks nicer - * - * Assume spf =3D source SDL_PixelFormat - * dpf =3D dest SDL_PixelFormat - * - */ -#define getRed(color) (((color) & spf->Rmask) >> spf->Rshift) -#define getGreen(color) (((color) & spf->Gmask) >> spf->Gshift) -#define getBlue(color) (((color) & spf->Bmask) >> spf->Bshift) -#define getAlpha(color) (((color) & spf->Amask) >> spf->Ashift) - -#define setRed(r, pcolor) do { \ - *pcolor =3D ((*pcolor) & (~(dpf->Rmask))) + \ - (((r) & (dpf->Rmask >> dpf->Rshift)) << dpf->Rshift); \ -} while (0) - -#define setGreen(g, pcolor) do { \ - *pcolor =3D ((*pcolor) & (~(dpf->Gmask))) + \ - (((g) & (dpf->Gmask >> dpf->Gshift)) << dpf->Gshift); \ -} while (0) - -#define setBlue(b, pcolor) do { \ - *pcolor =3D ((*pcolor) & (~(dpf->Bmask))) + \ - (((b) & (dpf->Bmask >> dpf->Bshift)) << dpf->Bshift); \ -} while (0) - -#define setAlpha(a, pcolor) do { \ - *pcolor =3D ((*pcolor) & (~(dpf->Amask))) + \ - (((a) & (dpf->Amask >> dpf->Ashift)) << dpf->Ashift); \ -} while (0) - -static void glue(sdl_zoom_rgb, BPP)(SDL_Surface *src, SDL_Surface *dst, in= t smooth, - SDL_Rect *dst_rect) -{ - int x, y, sx, sy, *sax, *say, *csax, *csay, csx, csy, ex, ey, t1, t2, = sstep, sstep_jump; - SDL_TYPE *c00, *c01, *c10, *c11, *sp, *csp, *dp; - int d_gap; - SDL_PixelFormat *spf =3D src->format; - SDL_PixelFormat *dpf =3D dst->format; - - if (smooth) {=20 - /* For interpolation: assume source dimension is one pixel. - * Smaller here to avoid overflow on right and bottom edge. - */ - sx =3D (int) (65536.0 * (float) (src->w - 1) / (float) dst->w); - sy =3D (int) (65536.0 * (float) (src->h - 1) / (float) dst->h); - } else { - sx =3D (int) (65536.0 * (float) src->w / (float) dst->w); - sy =3D (int) (65536.0 * (float) src->h / (float) dst->h); - } - - sax =3D g_new(int, dst->w + 1); - say =3D g_new(int, dst->h + 1); - - sp =3D csp =3D (SDL_TYPE *) src->pixels; - dp =3D (SDL_TYPE *) (dst->pixels + dst_rect->y * dst->pitch + - dst_rect->x * dst->format->BytesPerPixel); - - csx =3D 0; - csax =3D sax; - for (x =3D 0; x <=3D dst->w; x++) { - *csax =3D csx; - csax++; - csx &=3D 0xffff; - csx +=3D sx; - } - csy =3D 0; - csay =3D say; - for (y =3D 0; y <=3D dst->h; y++) { - *csay =3D csy; - csay++; - csy &=3D 0xffff; - csy +=3D sy; - } - - d_gap =3D dst->pitch - dst_rect->w * dst->format->BytesPerPixel; - - if (smooth) { - csay =3D say; - for (y =3D 0; y < dst_rect->y; y++) { - csay++; - sstep =3D (*csay >> 16) * src->pitch; - csp =3D (SDL_TYPE *) ((Uint8 *) csp + sstep); - } - - /* Calculate sstep_jump */ - csax =3D sax;=20 - sstep_jump =3D 0; - for (x =3D 0; x < dst_rect->x; x++) { - csax++;=20 - sstep =3D (*csax >> 16); - sstep_jump +=3D sstep; - } - - for (y =3D 0; y < dst_rect->h ; y++) { - /* Setup colour source pointers */ - c00 =3D csp + sstep_jump; - c01 =3D c00 + 1; - c10 =3D (SDL_TYPE *) ((Uint8 *) csp + src->pitch) + sstep_jump; - c11 =3D c10 + 1; - csax =3D sax + dst_rect->x;=20 - - for (x =3D 0; x < dst_rect->w; x++) { - - /* Interpolate colours */ - ex =3D (*csax & 0xffff); - ey =3D (*csay & 0xffff); - t1 =3D ((((getRed(*c01) - getRed(*c00)) * ex) >> 16) + - getRed(*c00)) & (dpf->Rmask >> dpf->Rshift); - t2 =3D ((((getRed(*c11) - getRed(*c10)) * ex) >> 16) + - getRed(*c10)) & (dpf->Rmask >> dpf->Rshift); - setRed((((t2 - t1) * ey) >> 16) + t1, dp); - t1 =3D ((((getGreen(*c01) - getGreen(*c00)) * ex) >> 16) + - getGreen(*c00)) & (dpf->Gmask >> dpf->Gshift); - t2 =3D ((((getGreen(*c11) - getGreen(*c10)) * ex) >> 16) + - getGreen(*c10)) & (dpf->Gmask >> dpf->Gshift); - setGreen((((t2 - t1) * ey) >> 16) + t1, dp); - t1 =3D ((((getBlue(*c01) - getBlue(*c00)) * ex) >> 16) + - getBlue(*c00)) & (dpf->Bmask >> dpf->Bshift); - t2 =3D ((((getBlue(*c11) - getBlue(*c10)) * ex) >> 16) + - getBlue(*c10)) & (dpf->Bmask >> dpf->Bshift); - setBlue((((t2 - t1) * ey) >> 16) + t1, dp); - t1 =3D ((((getAlpha(*c01) - getAlpha(*c00)) * ex) >> 16) + - getAlpha(*c00)) & (dpf->Amask >> dpf->Ashift); - t2 =3D ((((getAlpha(*c11) - getAlpha(*c10)) * ex) >> 16) + - getAlpha(*c10)) & (dpf->Amask >> dpf->Ashift); - setAlpha((((t2 - t1) * ey) >> 16) + t1, dp);=20 - - /* Advance source pointers */ - csax++;=20 - sstep =3D (*csax >> 16); - c00 +=3D sstep; - c01 +=3D sstep; - c10 +=3D sstep; - c11 +=3D sstep; - /* Advance destination pointer */ - dp++; - } - /* Advance source pointer */ - csay++; - csp =3D (SDL_TYPE *) ((Uint8 *) csp + (*csay >> 16) * src->pit= ch); - /* Advance destination pointers */ - dp =3D (SDL_TYPE *) ((Uint8 *) dp + d_gap); - } - - - } else { - csay =3D say; - - for (y =3D 0; y < dst_rect->y; y++) { - csay++; - sstep =3D (*csay >> 16) * src->pitch; - csp =3D (SDL_TYPE *) ((Uint8 *) csp + sstep); - } - - /* Calculate sstep_jump */ - csax =3D sax;=20 - sstep_jump =3D 0; - for (x =3D 0; x < dst_rect->x; x++) { - csax++;=20 - sstep =3D (*csax >> 16); - sstep_jump +=3D sstep; - } - - for (y =3D 0 ; y < dst_rect->h ; y++) { - sp =3D csp + sstep_jump; - csax =3D sax + dst_rect->x; - - for (x =3D 0; x < dst_rect->w; x++) { - - /* Draw */ - *dp =3D *sp; - - /* Advance source pointers */ - csax++; - sstep =3D (*csax >> 16); - sp +=3D sstep; - - /* Advance destination pointer */ - dp++; - } - /* Advance source pointers */ - csay++; - sstep =3D (*csay >> 16) * src->pitch; - csp =3D (SDL_TYPE *) ((Uint8 *) csp + sstep); - - /* Advance destination pointer */ - dp =3D (SDL_TYPE *) ((Uint8 *) dp + d_gap); - } - } - - g_free(sax); - g_free(say); -} - -#undef SDL_TYPE - diff --git a/ui/sdl.c b/ui/sdl.c deleted file mode 100644 index 190b16f575..0000000000 --- a/ui/sdl.c +++ /dev/null @@ -1,1027 +0,0 @@ -/* - * QEMU SDL display driver - * - * Copyright (c) 2003 Fabrice Bellard - * - * Permission is hereby granted, free of charge, to any person obtaining a= copy - * of this software and associated documentation files (the "Software"), t= o deal - * in the Software without restriction, including without limitation the r= ights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or se= ll - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included= in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS= OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OT= HER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING= FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS = IN - * THE SOFTWARE. - */ - -/* Avoid compiler warning because macro is redefined in SDL_syswm.h. */ -#undef WIN32_LEAN_AND_MEAN - -#include "qemu/osdep.h" -#include -#include - -#include "qapi/error.h" -#include "qemu-common.h" -#include "qemu/cutils.h" -#include "ui/console.h" -#include "ui/input.h" -#include "sysemu/sysemu.h" -#ifndef WIN32 -#include "x_keymap.h" -#endif -#include "sdl_zoom.h" - -static DisplayChangeListener *dcl; -static DisplaySurface *surface; -static DisplayOptions *opts; -static SDL_Surface *real_screen; -static SDL_Surface *guest_screen =3D NULL; -static int gui_grab; /* if true, all keyboard/mouse events are grabbed */ -static int last_vm_running; -static bool gui_saved_scaling; -static int gui_saved_width; -static int gui_saved_height; -static int gui_saved_grab; -static int gui_fullscreen; -static int gui_key_modifier_pressed; -static int gui_keysym; -static int gui_grab_code =3D KMOD_LALT | KMOD_LCTRL; -static uint8_t modifiers_state[256]; -static SDL_Cursor *sdl_cursor_normal; -static SDL_Cursor *sdl_cursor_hidden; -static int absolute_enabled =3D 0; -static int guest_cursor =3D 0; -static int guest_x, guest_y; -static SDL_Cursor *guest_sprite =3D NULL; -static SDL_PixelFormat host_format; -static int scaling_active =3D 0; -static Notifier mouse_mode_notifier; -static int idle_counter; -static const guint16 *keycode_map; -static size_t keycode_maplen; - -#define SDL_REFRESH_INTERVAL_BUSY 10 -#define SDL_MAX_IDLE_COUNT (2 * GUI_REFRESH_INTERVAL_DEFAULT \ - / SDL_REFRESH_INTERVAL_BUSY + 1) - -#if 0 -#define DEBUG_SDL -#endif - -static void sdl_update(DisplayChangeListener *dcl, - int x, int y, int w, int h) -{ - SDL_Rect rec; - rec.x =3D x; - rec.y =3D y; - rec.w =3D w; - rec.h =3D h; - -#ifdef DEBUG_SDL - printf("SDL: Updating x=3D%d y=3D%d w=3D%d h=3D%d (scaling: %d)\n", - x, y, w, h, scaling_active); -#endif - - if (guest_screen) { - if (!scaling_active) { - SDL_BlitSurface(guest_screen, &rec, real_screen, &rec); - } else { - if (sdl_zoom_blit(guest_screen, real_screen, SMOOTHING_ON, &re= c) < 0) { - fprintf(stderr, "Zoom blit failed\n"); - exit(1); - } - } - }=20 - SDL_UpdateRect(real_screen, rec.x, rec.y, rec.w, rec.h); -} - -static void do_sdl_resize(int width, int height, int bpp) -{ - int flags; - SDL_Surface *tmp_screen; - -#ifdef DEBUG_SDL - printf("SDL: Resizing to %dx%d bpp %d\n", width, height, bpp); -#endif - - flags =3D SDL_HWSURFACE | SDL_ASYNCBLIT | SDL_HWACCEL; - if (gui_fullscreen) { - flags |=3D SDL_FULLSCREEN; - } else { - flags |=3D SDL_RESIZABLE; - } - if (no_frame) { - flags |=3D SDL_NOFRAME; - } - - tmp_screen =3D SDL_SetVideoMode(width, height, bpp, flags); - if (!real_screen) { - if (!tmp_screen) { - fprintf(stderr, "Could not open SDL display (%dx%dx%d): %s\n", - width, height, bpp, SDL_GetError()); - exit(1); - } - } else { - /* - * Revert to the previous video mode if the change of resizing or - * resolution failed. - */ - if (!tmp_screen) { - fprintf(stderr, "Failed to set SDL display (%dx%dx%d): %s\n", - width, height, bpp, SDL_GetError()); - return; - } - } - - real_screen =3D tmp_screen; -} - -static void sdl_switch(DisplayChangeListener *dcl, - DisplaySurface *new_surface) -{ - PixelFormat pf; - - /* temporary hack: allows to call sdl_switch to handle scaling changes= */ - if (new_surface) { - surface =3D new_surface; - } - pf =3D qemu_pixelformat_from_pixman(surface->format); - - if (!scaling_active) { - do_sdl_resize(surface_width(surface), surface_height(surface), 0); - } else if (real_screen->format->BitsPerPixel !=3D - surface_bits_per_pixel(surface)) { - do_sdl_resize(real_screen->w, real_screen->h, - surface_bits_per_pixel(surface)); - } - - if (guest_screen !=3D NULL) { - SDL_FreeSurface(guest_screen); - } - -#ifdef DEBUG_SDL - printf("SDL: Creating surface with masks: %08x %08x %08x %08x\n", - pf.rmask, pf.gmask, pf.bmask, pf.amask); -#endif - - guest_screen =3D SDL_CreateRGBSurfaceFrom - (surface_data(surface), - surface_width(surface), surface_height(surface), - surface_bits_per_pixel(surface), surface_stride(surface), - pf.rmask, pf.gmask, - pf.bmask, pf.amask); -} - -static bool sdl_check_format(DisplayChangeListener *dcl, - pixman_format_code_t format) -{ - /* - * We let SDL convert for us a few more formats than, - * the native ones. Thes are the ones I have tested. - */ - return (format =3D=3D PIXMAN_x8r8g8b8 || - format =3D=3D PIXMAN_b8g8r8x8 || - format =3D=3D PIXMAN_x1r5g5b5 || - format =3D=3D PIXMAN_r5g6b5); -} - -/* generic keyboard conversion */ - -#include "sdl_keysym.h" - -static kbd_layout_t *kbd_layout =3D NULL; - -static uint8_t sdl_keyevent_to_keycode_generic(const SDL_KeyboardEvent *ev) -{ - bool shift =3D modifiers_state[0x2a] || modifiers_state[0x36]; - bool altgr =3D modifiers_state[0xb8]; - bool ctrl =3D modifiers_state[0x1d] || modifiers_state[0x9d]; - int keysym; - /* workaround for X11+SDL bug with AltGR */ - keysym =3D ev->keysym.sym; - if (keysym =3D=3D 0 && ev->keysym.scancode =3D=3D 113) - keysym =3D SDLK_MODE; - /* For Japanese key '\' and '|' */ - if (keysym =3D=3D 92 && ev->keysym.scancode =3D=3D 133) { - keysym =3D 0xa5; - } - return keysym2scancode(kbd_layout, keysym, - shift, altgr, ctrl) & SCANCODE_KEYMASK; -} - - -static const guint16 *sdl_get_keymap(size_t *maplen) -{ -#if defined(WIN32) - *maplen =3D qemu_input_map_atset1_to_qcode_len; - return qemu_input_map_atset1_to_qcode; -#else -#if defined(SDL_VIDEO_DRIVER_X11) - SDL_SysWMinfo info; - - SDL_VERSION(&info.version); - if (SDL_GetWMInfo(&info) > 0) { - return qemu_xkeymap_mapping_table( - info.info.x11.display, maplen); - } -#endif - g_warning("Unsupported SDL video driver / platform.\n" - "Assuming Linux KBD scancodes, but probably wrong.\n" - "Please report to qemu-devel@nongnu.org\n" - "including the following information:\n" - "\n" - " - Operating system\n" - " - SDL video driver\n"); - *maplen =3D qemu_input_map_xorgkbd_to_qcode_len; - return qemu_input_map_xorgkbd_to_qcode; -#endif -} - -static uint8_t sdl_keyevent_to_keycode(const SDL_KeyboardEvent *ev) -{ - int qcode; - if (!keycode_map) { - return 0; - } - if (ev->keysym.scancode > keycode_maplen) { - return 0; - } - - qcode =3D keycode_map[ev->keysym.scancode]; - - if (qcode > qemu_input_map_qcode_to_qnum_len) { - return 0; - } - - return qemu_input_map_qcode_to_qnum[qcode]; -} - -static void reset_keys(void) -{ - int i; - for(i =3D 0; i < 256; i++) { - if (modifiers_state[i]) { - qemu_input_event_send_key_number(dcl->con, i, false); - modifiers_state[i] =3D 0; - } - } -} - -static void sdl_process_key(SDL_KeyboardEvent *ev) -{ - int keycode; - - if (ev->keysym.sym =3D=3D SDLK_PAUSE) { - /* specific case */ - qemu_input_event_send_key_qcode(dcl->con, Q_KEY_CODE_PAUSE, - ev->type =3D=3D SDL_KEYDOWN); - return; - } - - if (kbd_layout) { - keycode =3D sdl_keyevent_to_keycode_generic(ev); - } else { - keycode =3D sdl_keyevent_to_keycode(ev); - } - - switch(keycode) { - case 0x00: - /* sent when leaving window: reset the modifiers state */ - reset_keys(); - return; - case 0x2a: /* Left Shift */ - case 0x36: /* Right Shift */ - case 0x1d: /* Left CTRL */ - case 0x9d: /* Right CTRL */ - case 0x38: /* Left ALT */ - case 0xb8: /* Right ALT */ - if (ev->type =3D=3D SDL_KEYUP) - modifiers_state[keycode] =3D 0; - else - modifiers_state[keycode] =3D 1; - break; -#define QEMU_SDL_VERSION ((SDL_MAJOR_VERSION << 8) + SDL_MINOR_VERSION) -#if QEMU_SDL_VERSION < 0x102 || QEMU_SDL_VERSION =3D=3D 0x102 && SDL_PATCH= LEVEL < 14 - /* SDL versions before 1.2.14 don't support key up for caps/num lo= ck. */ - case 0x45: /* num lock */ - case 0x3a: /* caps lock */ - /* SDL does not send the key up event, so we generate it */ - qemu_input_event_send_key_number(dcl->con, keycode, true); - qemu_input_event_send_key_number(dcl->con, keycode, false); - return; -#endif - } - - /* now send the key code */ - qemu_input_event_send_key_number(dcl->con, keycode, - ev->type =3D=3D SDL_KEYDOWN); -} - -static void sdl_update_caption(void) -{ - char win_title[1024]; - char icon_title[1024]; - const char *status =3D ""; - - if (!runstate_is_running()) - status =3D " [Stopped]"; - else if (gui_grab) { - if (alt_grab) - status =3D " - Press Ctrl-Alt-Shift-G to exit mouse grab"; - else if (ctrl_grab) - status =3D " - Press Right-Ctrl-G to exit mouse grab"; - else - status =3D " - Press Ctrl-Alt-G to exit mouse grab"; - } - - if (qemu_name) { - snprintf(win_title, sizeof(win_title), "QEMU (%s)%s", qemu_name, s= tatus); - snprintf(icon_title, sizeof(icon_title), "QEMU (%s)", qemu_name); - } else { - snprintf(win_title, sizeof(win_title), "QEMU%s", status); - snprintf(icon_title, sizeof(icon_title), "QEMU"); - } - - SDL_WM_SetCaption(win_title, icon_title); -} - -static void sdl_hide_cursor(void) -{ - if (!cursor_hide) - return; - - if (qemu_input_is_absolute()) { - SDL_ShowCursor(1); - SDL_SetCursor(sdl_cursor_hidden); - } else { - SDL_ShowCursor(0); - } -} - -static void sdl_show_cursor(void) -{ - if (!cursor_hide) - return; - - if (!qemu_input_is_absolute() || !qemu_console_is_graphic(NULL)) { - SDL_ShowCursor(1); - if (guest_cursor && - (gui_grab || qemu_input_is_absolute() || absolute_enabled)) - SDL_SetCursor(guest_sprite); - else - SDL_SetCursor(sdl_cursor_normal); - } -} - -static void sdl_grab_start(void) -{ - /* - * If the application is not active, do not try to enter grab state. T= his - * prevents 'SDL_WM_GrabInput(SDL_GRAB_ON)' from blocking all the - * application (SDL bug). - */ - if (!(SDL_GetAppState() & SDL_APPINPUTFOCUS)) { - return; - } - if (guest_cursor) { - SDL_SetCursor(guest_sprite); - if (!qemu_input_is_absolute() && !absolute_enabled) { - SDL_WarpMouse(guest_x, guest_y); - } - } else - sdl_hide_cursor(); - SDL_WM_GrabInput(SDL_GRAB_ON); - gui_grab =3D 1; - sdl_update_caption(); -} - -static void sdl_grab_end(void) -{ - SDL_WM_GrabInput(SDL_GRAB_OFF); - gui_grab =3D 0; - sdl_show_cursor(); - sdl_update_caption(); -} - -static void absolute_mouse_grab(void) -{ - int mouse_x, mouse_y; - - SDL_GetMouseState(&mouse_x, &mouse_y); - if (mouse_x > 0 && mouse_x < real_screen->w - 1 && - mouse_y > 0 && mouse_y < real_screen->h - 1) { - sdl_grab_start(); - } -} - -static void sdl_mouse_mode_change(Notifier *notify, void *data) -{ - if (qemu_input_is_absolute()) { - if (!absolute_enabled) { - absolute_enabled =3D 1; - if (qemu_console_is_graphic(NULL)) { - absolute_mouse_grab(); - } - } - } else if (absolute_enabled) { - if (!gui_fullscreen) { - sdl_grab_end(); - } - absolute_enabled =3D 0; - } -} - -static void sdl_send_mouse_event(int dx, int dy, int x, int y, int state) -{ - static uint32_t bmap[INPUT_BUTTON__MAX] =3D { - [INPUT_BUTTON_LEFT] =3D SDL_BUTTON(SDL_BUTTON_LEFT), - [INPUT_BUTTON_MIDDLE] =3D SDL_BUTTON(SDL_BUTTON_MIDDLE), - [INPUT_BUTTON_RIGHT] =3D SDL_BUTTON(SDL_BUTTON_RIGHT), - [INPUT_BUTTON_WHEEL_UP] =3D SDL_BUTTON(SDL_BUTTON_WHEELUP), - [INPUT_BUTTON_WHEEL_DOWN] =3D SDL_BUTTON(SDL_BUTTON_WHEELDOWN), - }; - static uint32_t prev_state; - - if (prev_state !=3D state) { - qemu_input_update_buttons(dcl->con, bmap, prev_state, state); - prev_state =3D state; - } - - if (qemu_input_is_absolute()) { - qemu_input_queue_abs(dcl->con, INPUT_AXIS_X, x, - 0, real_screen->w); - qemu_input_queue_abs(dcl->con, INPUT_AXIS_Y, y, - 0, real_screen->h); - } else { - if (guest_cursor) { - x -=3D guest_x; - y -=3D guest_y; - guest_x +=3D x; - guest_y +=3D y; - dx =3D x; - dy =3D y; - } - qemu_input_queue_rel(dcl->con, INPUT_AXIS_X, dx); - qemu_input_queue_rel(dcl->con, INPUT_AXIS_Y, dy); - } - qemu_input_event_sync(); -} - -static void sdl_scale(int width, int height) -{ - int bpp =3D real_screen->format->BitsPerPixel; - -#ifdef DEBUG_SDL - printf("SDL: Scaling to %dx%d bpp %d\n", width, height, bpp); -#endif - - if (bpp !=3D 16 && bpp !=3D 32) { - bpp =3D 32; - } - do_sdl_resize(width, height, bpp); - scaling_active =3D 1; -} - -static void toggle_full_screen(void) -{ - int width =3D surface_width(surface); - int height =3D surface_height(surface); - int bpp =3D surface_bits_per_pixel(surface); - - gui_fullscreen =3D !gui_fullscreen; - if (gui_fullscreen) { - gui_saved_width =3D real_screen->w; - gui_saved_height =3D real_screen->h; - gui_saved_scaling =3D scaling_active; - - do_sdl_resize(width, height, bpp); - scaling_active =3D 0; - - gui_saved_grab =3D gui_grab; - sdl_grab_start(); - } else { - if (gui_saved_scaling) { - sdl_scale(gui_saved_width, gui_saved_height); - } else { - do_sdl_resize(width, height, 0); - } - if (!gui_saved_grab || !qemu_console_is_graphic(NULL)) { - sdl_grab_end(); - } - } - graphic_hw_invalidate(NULL); - graphic_hw_update(NULL); -} - -static void handle_keydown(SDL_Event *ev) -{ - int mod_state; - int keycode; - - if (alt_grab) { - mod_state =3D (SDL_GetModState() & (gui_grab_code | KMOD_LSHIFT)) = =3D=3D - (gui_grab_code | KMOD_LSHIFT); - } else if (ctrl_grab) { - mod_state =3D (SDL_GetModState() & KMOD_RCTRL) =3D=3D KMOD_RCTRL; - } else { - mod_state =3D (SDL_GetModState() & gui_grab_code) =3D=3D gui_grab_= code; - } - gui_key_modifier_pressed =3D mod_state; - - if (gui_key_modifier_pressed) { - keycode =3D sdl_keyevent_to_keycode(&ev->key); - switch (keycode) { - case 0x21: /* 'f' key on US keyboard */ - toggle_full_screen(); - gui_keysym =3D 1; - break; - case 0x22: /* 'g' key */ - if (!gui_grab) { - if (qemu_console_is_graphic(NULL)) { - sdl_grab_start(); - } - } else if (!gui_fullscreen) { - sdl_grab_end(); - } - gui_keysym =3D 1; - break; - case 0x16: /* 'u' key on US keyboard */ - if (scaling_active) { - scaling_active =3D 0; - sdl_switch(dcl, NULL); - graphic_hw_invalidate(NULL); - graphic_hw_update(NULL); - } - gui_keysym =3D 1; - break; - case 0x02 ... 0x0a: /* '1' to '9' keys */ - /* Reset the modifiers sent to the current console */ - reset_keys(); - console_select(keycode - 0x02); - gui_keysym =3D 1; - if (gui_fullscreen) { - break; - } - if (!qemu_console_is_graphic(NULL)) { - /* release grab if going to a text console */ - if (gui_grab) { - sdl_grab_end(); - } else if (absolute_enabled) { - sdl_show_cursor(); - } - } else if (absolute_enabled) { - sdl_hide_cursor(); - absolute_mouse_grab(); - } - break; - case 0x1b: /* '+' */ - case 0x35: /* '-' */ - if (!gui_fullscreen) { - int width =3D MAX(real_screen->w + (keycode =3D=3D 0x1b ? = 50 : -50), - 160); - int height =3D (surface_height(surface) * width) / - surface_width(surface); - - sdl_scale(width, height); - graphic_hw_invalidate(NULL); - graphic_hw_update(NULL); - gui_keysym =3D 1; - } - default: - break; - } - } else if (!qemu_console_is_graphic(NULL)) { - int keysym =3D 0; - - if (ev->key.keysym.mod & (KMOD_LCTRL | KMOD_RCTRL)) { - switch (ev->key.keysym.sym) { - case SDLK_UP: - keysym =3D QEMU_KEY_CTRL_UP; - break; - case SDLK_DOWN: - keysym =3D QEMU_KEY_CTRL_DOWN; - break; - case SDLK_LEFT: - keysym =3D QEMU_KEY_CTRL_LEFT; - break; - case SDLK_RIGHT: - keysym =3D QEMU_KEY_CTRL_RIGHT; - break; - case SDLK_HOME: - keysym =3D QEMU_KEY_CTRL_HOME; - break; - case SDLK_END: - keysym =3D QEMU_KEY_CTRL_END; - break; - case SDLK_PAGEUP: - keysym =3D QEMU_KEY_CTRL_PAGEUP; - break; - case SDLK_PAGEDOWN: - keysym =3D QEMU_KEY_CTRL_PAGEDOWN; - break; - default: - break; - } - } else { - switch (ev->key.keysym.sym) { - case SDLK_UP: - keysym =3D QEMU_KEY_UP; - break; - case SDLK_DOWN: - keysym =3D QEMU_KEY_DOWN; - break; - case SDLK_LEFT: - keysym =3D QEMU_KEY_LEFT; - break; - case SDLK_RIGHT: - keysym =3D QEMU_KEY_RIGHT; - break; - case SDLK_HOME: - keysym =3D QEMU_KEY_HOME; - break; - case SDLK_END: - keysym =3D QEMU_KEY_END; - break; - case SDLK_PAGEUP: - keysym =3D QEMU_KEY_PAGEUP; - break; - case SDLK_PAGEDOWN: - keysym =3D QEMU_KEY_PAGEDOWN; - break; - case SDLK_BACKSPACE: - keysym =3D QEMU_KEY_BACKSPACE; - break; - case SDLK_DELETE: - keysym =3D QEMU_KEY_DELETE; - break; - default: - break; - } - } - if (keysym) { - kbd_put_keysym(keysym); - } else if (ev->key.keysym.unicode !=3D 0) { - kbd_put_keysym(ev->key.keysym.unicode); - } - } - if (qemu_console_is_graphic(NULL) && !gui_keysym) { - sdl_process_key(&ev->key); - } -} - -static void handle_keyup(SDL_Event *ev) -{ - int mod_state; - - if (!alt_grab) { - mod_state =3D (ev->key.keysym.mod & gui_grab_code); - } else { - mod_state =3D (ev->key.keysym.mod & (gui_grab_code | KMOD_LSHIFT)); - } - if (!mod_state && gui_key_modifier_pressed) { - gui_key_modifier_pressed =3D 0; - gui_keysym =3D 0; - } - if (qemu_console_is_graphic(NULL) && !gui_keysym) { - sdl_process_key(&ev->key); - } -} - -static void handle_mousemotion(SDL_Event *ev) -{ - int max_x, max_y; - - if (qemu_console_is_graphic(NULL) && - (qemu_input_is_absolute() || absolute_enabled)) { - max_x =3D real_screen->w - 1; - max_y =3D real_screen->h - 1; - if (gui_grab && (ev->motion.x =3D=3D 0 || ev->motion.y =3D=3D 0 || - ev->motion.x =3D=3D max_x || ev->motion.y =3D=3D max_y)) { - sdl_grab_end(); - } - if (!gui_grab && - (ev->motion.x > 0 && ev->motion.x < max_x && - ev->motion.y > 0 && ev->motion.y < max_y)) { - sdl_grab_start(); - } - } - if (gui_grab || qemu_input_is_absolute() || absolute_enabled) { - sdl_send_mouse_event(ev->motion.xrel, ev->motion.yrel, - ev->motion.x, ev->motion.y, ev->motion.state); - } -} - -static void handle_mousebutton(SDL_Event *ev) -{ - int buttonstate =3D SDL_GetMouseState(NULL, NULL); - SDL_MouseButtonEvent *bev; - - if (!qemu_console_is_graphic(NULL)) { - return; - } - - bev =3D &ev->button; - if (!gui_grab && !qemu_input_is_absolute()) { - if (ev->type =3D=3D SDL_MOUSEBUTTONUP && bev->button =3D=3D SDL_BU= TTON_LEFT) { - /* start grabbing all events */ - sdl_grab_start(); - } - } else { - if (ev->type =3D=3D SDL_MOUSEBUTTONDOWN) { - buttonstate |=3D SDL_BUTTON(bev->button); - } else { - buttonstate &=3D ~SDL_BUTTON(bev->button); - } - sdl_send_mouse_event(0, 0, bev->x, bev->y, buttonstate); - } -} - -static void handle_activation(SDL_Event *ev) -{ -#ifdef _WIN32 - /* Disable grab if the window no longer has the focus - * (Windows-only workaround) */ - if (gui_grab && ev->active.state =3D=3D SDL_APPINPUTFOCUS && - !ev->active.gain && !gui_fullscreen) { - sdl_grab_end(); - } -#endif - if (!gui_grab && ev->active.gain && qemu_console_is_graphic(NULL) && - (qemu_input_is_absolute() || absolute_enabled)) { - absolute_mouse_grab(); - } - if (ev->active.state & SDL_APPACTIVE) { - if (ev->active.gain) { - /* Back to default interval */ - update_displaychangelistener(dcl, GUI_REFRESH_INTERVAL_DEFAULT= ); - } else { - /* Sleeping interval. Not using the long default here as - * sdl_refresh does not only update the guest screen, but - * also checks for gui events. */ - update_displaychangelistener(dcl, 500); - } - } -} - -static void sdl_refresh(DisplayChangeListener *dcl) -{ - SDL_Event ev1, *ev =3D &ev1; - bool allow_close =3D true; - int idle =3D 1; - - if (last_vm_running !=3D runstate_is_running()) { - last_vm_running =3D runstate_is_running(); - sdl_update_caption(); - } - - graphic_hw_update(NULL); - SDL_EnableUNICODE(!qemu_console_is_graphic(NULL)); - - while (SDL_PollEvent(ev)) { - switch (ev->type) { - case SDL_VIDEOEXPOSE: - sdl_update(dcl, 0, 0, real_screen->w, real_screen->h); - break; - case SDL_KEYDOWN: - idle =3D 0; - handle_keydown(ev); - break; - case SDL_KEYUP: - idle =3D 0; - handle_keyup(ev); - break; - case SDL_QUIT: - if (opts->has_window_close && !opts->window_close) { - allow_close =3D false; - } - if (allow_close) { - no_shutdown =3D 0; - qemu_system_shutdown_request(SHUTDOWN_CAUSE_HOST_UI); - } - break; - case SDL_MOUSEMOTION: - idle =3D 0; - handle_mousemotion(ev); - break; - case SDL_MOUSEBUTTONDOWN: - case SDL_MOUSEBUTTONUP: - idle =3D 0; - handle_mousebutton(ev); - break; - case SDL_ACTIVEEVENT: - handle_activation(ev); - break; - case SDL_VIDEORESIZE: - sdl_scale(ev->resize.w, ev->resize.h); - graphic_hw_invalidate(NULL); - graphic_hw_update(NULL); - break; - default: - break; - } - } - - if (idle) { - if (idle_counter < SDL_MAX_IDLE_COUNT) { - idle_counter++; - if (idle_counter >=3D SDL_MAX_IDLE_COUNT) { - dcl->update_interval =3D GUI_REFRESH_INTERVAL_DEFAULT; - } - } - } else { - idle_counter =3D 0; - dcl->update_interval =3D SDL_REFRESH_INTERVAL_BUSY; - } -} - -static void sdl_mouse_warp(DisplayChangeListener *dcl, - int x, int y, int on) -{ - if (on) { - if (!guest_cursor) - sdl_show_cursor(); - if (gui_grab || qemu_input_is_absolute() || absolute_enabled) { - SDL_SetCursor(guest_sprite); - if (!qemu_input_is_absolute() && !absolute_enabled) { - SDL_WarpMouse(x, y); - } - } - } else if (gui_grab) - sdl_hide_cursor(); - guest_cursor =3D on; - guest_x =3D x, guest_y =3D y; -} - -static void sdl_mouse_define(DisplayChangeListener *dcl, - QEMUCursor *c) -{ - uint8_t *image, *mask; - int bpl; - - if (guest_sprite) - SDL_FreeCursor(guest_sprite); - - bpl =3D cursor_get_mono_bpl(c); - image =3D g_malloc0(bpl * c->height); - mask =3D g_malloc0(bpl * c->height); - cursor_get_mono_image(c, 0x000000, image); - cursor_get_mono_mask(c, 0, mask); - guest_sprite =3D SDL_CreateCursor(image, mask, c->width, c->height, - c->hot_x, c->hot_y); - g_free(image); - g_free(mask); - - if (guest_cursor && - (gui_grab || qemu_input_is_absolute() || absolute_enabled)) - SDL_SetCursor(guest_sprite); -} - -static void sdl_cleanup(void) -{ - if (guest_sprite) - SDL_FreeCursor(guest_sprite); - SDL_QuitSubSystem(SDL_INIT_VIDEO); -} - -static const DisplayChangeListenerOps dcl_ops =3D { - .dpy_name =3D "sdl", - .dpy_gfx_update =3D sdl_update, - .dpy_gfx_switch =3D sdl_switch, - .dpy_gfx_check_format =3D sdl_check_format, - .dpy_refresh =3D sdl_refresh, - .dpy_mouse_set =3D sdl_mouse_warp, - .dpy_cursor_define =3D sdl_mouse_define, -}; - -static void sdl1_display_init(DisplayState *ds, DisplayOptions *o) -{ - int flags; - uint8_t data =3D 0; - const SDL_VideoInfo *vi; - SDL_SysWMinfo info; - char *filename; - - assert(o->type =3D=3D DISPLAY_TYPE_SDL); - opts =3D o; -#if defined(__APPLE__) - /* always use generic keymaps */ - if (!keyboard_layout) - keyboard_layout =3D "en-us"; -#endif - if(keyboard_layout) { - kbd_layout =3D init_keyboard_layout(name2keysym, keyboard_layout, - &error_fatal); - } - - g_printerr("Running QEMU with SDL 1.2 is deprecated, and will be remov= ed\n" - "in a future release. Please switch to SDL 2.0 instead\n"); - - if (opts->has_full_screen && opts->full_screen) { - setenv("SDL_VIDEO_ALLOW_SCREENSAVER", "1", 0); - } -#ifdef __linux__ - /* on Linux, SDL may use fbcon|directfb|svgalib when run without - * accessible $DISPLAY to open X11 window. This is often the case - * when qemu is run using sudo. But in this case, and when actually - * run in X11 environment, SDL fights with X11 for the video card, - * making current display unavailable, often until reboot. - * So make x11 the default SDL video driver if this variable is unset. - * This is a bit hackish but saves us from bigger problem. - * Maybe it's a good idea to fix this in SDL instead. - */ - setenv("SDL_VIDEODRIVER", "x11", 0); -#endif - - /* Enable normal up/down events for Caps-Lock and Num-Lock keys. - * This requires SDL >=3D 1.2.14. */ - setenv("SDL_DISABLE_LOCK_KEYS", "1", 1); - - flags =3D SDL_INIT_VIDEO | SDL_INIT_NOPARACHUTE; - if (SDL_Init (flags)) { - fprintf(stderr, "Could not initialize SDL(%s) - exiting\n", - SDL_GetError()); - exit(1); - } - vi =3D SDL_GetVideoInfo(); - host_format =3D *(vi->vfmt); - - keycode_map =3D sdl_get_keymap(&keycode_maplen); - - /* Load a 32x32x4 image. White pixels are transparent. */ - filename =3D qemu_find_file(QEMU_FILE_TYPE_BIOS, "qemu-icon.bmp"); - if (filename) { - SDL_Surface *image =3D SDL_LoadBMP(filename); - if (image) { - uint32_t colorkey =3D SDL_MapRGB(image->format, 255, 255, 255); - SDL_SetColorKey(image, SDL_SRCCOLORKEY, colorkey); - SDL_WM_SetIcon(image, NULL); - } - g_free(filename); - } - - if (opts->has_full_screen && opts->full_screen) { - gui_fullscreen =3D 1; - sdl_grab_start(); - } - - dcl =3D g_new0(DisplayChangeListener, 1); - dcl->ops =3D &dcl_ops; - register_displaychangelistener(dcl); - - mouse_mode_notifier.notify =3D sdl_mouse_mode_change; - qemu_add_mouse_mode_change_notifier(&mouse_mode_notifier); - - sdl_update_caption(); - SDL_EnableKeyRepeat(250, 50); - gui_grab =3D 0; - - sdl_cursor_hidden =3D SDL_CreateCursor(&data, &data, 8, 1, 0, 0); - sdl_cursor_normal =3D SDL_GetCursor(); - - memset(&info, 0, sizeof(info)); - SDL_VERSION(&info.version); - if (SDL_GetWMInfo(&info)) { - int i; - for (i =3D 0; ; i++) { - /* All consoles share the same window */ - QemuConsole *con =3D qemu_console_lookup_by_index(i); - if (con) { -#if defined(SDL_VIDEO_DRIVER_X11) - qemu_console_set_window_id(con, info.info.x11.wmwindow); -#elif defined(SDL_VIDEO_DRIVER_NANOX) || \ - defined(SDL_VIDEO_DRIVER_WINDIB) || defined(SDL_VIDEO_DRIVER_DDRAW) = || \ - defined(SDL_VIDEO_DRIVER_GAPI) || \ - defined(SDL_VIDEO_DRIVER_RISCOS) - qemu_console_set_window_id(con, (int) (uintptr_t) info.win= dow); -#else - qemu_console_set_window_id(con, info.data); -#endif - } else { - break; - } - } - } - - atexit(sdl_cleanup); -} - -static QemuDisplay qemu_display_sdl1 =3D { - .type =3D DISPLAY_TYPE_SDL, - .init =3D sdl1_display_init, -}; - -static void register_sdl1(void) -{ - qemu_display_register(&qemu_display_sdl1); -} - -type_init(register_sdl1); diff --git a/ui/sdl_zoom.c b/ui/sdl_zoom.c deleted file mode 100644 index b96196bac5..0000000000 --- a/ui/sdl_zoom.c +++ /dev/null @@ -1,93 +0,0 @@ -/* - * SDL_zoom - surface scaling - *=20 - * Copyright (c) 2009 Citrix Systems, Inc. - * - * Derived from: SDL_rotozoom, LGPL (c) A. Schiffler from the SDL_gfx lib= rary. - * Modifications by Stefano Stabellini. - * - * This work is licensed under the terms of the GNU GPL version 2. - * See the COPYING file in the top-level directory. - * - */ - -#include "qemu/osdep.h" -#include "sdl_zoom.h" - -static void sdl_zoom_rgb16(SDL_Surface *src, SDL_Surface *dst, int smooth, - SDL_Rect *dst_rect); -static void sdl_zoom_rgb32(SDL_Surface *src, SDL_Surface *dst, int smooth, - SDL_Rect *dst_rect); - -#define BPP 32 -#include "sdl_zoom_template.h" -#undef BPP -#define BPP 16 -#include "sdl_zoom_template.h" -#undef BPP - -int sdl_zoom_blit(SDL_Surface *src_sfc, SDL_Surface *dst_sfc, int smooth, - SDL_Rect *in_rect) -{ - SDL_Rect zoom, src_rect; - int extra; - - /* Grow the size of the modified rectangle to avoid edge artefacts */ - src_rect.x =3D (in_rect->x > 0) ? (in_rect->x - 1) : 0; - src_rect.y =3D (in_rect->y > 0) ? (in_rect->y - 1) : 0; - - src_rect.w =3D in_rect->w + 1; - if (src_rect.x + src_rect.w > src_sfc->w) - src_rect.w =3D src_sfc->w - src_rect.x; - - src_rect.h =3D in_rect->h + 1; - if (src_rect.y + src_rect.h > src_sfc->h) - src_rect.h =3D src_sfc->h - src_rect.y; - - /* (x,y) : round down */ - zoom.x =3D (int)(((float)(src_rect.x * dst_sfc->w)) / (float)(src_sfc-= >w)); - zoom.y =3D (int)(((float)(src_rect.y * dst_sfc->h)) / (float)(src_sfc-= >h)); - - /* (w,h) : round up */ - zoom.w =3D (int)( ((double)((src_rect.w * dst_sfc->w) + (src_sfc->w - = 1))) / - (double)(src_sfc->w)); - - zoom.h =3D (int)( ((double)((src_rect.h * dst_sfc->h) + (src_sfc->h - = 1))) / - (double)(src_sfc->h)); - - /* Account for any (x,y) rounding by adding one-source-pixel's worth - * of destination pixels and then edge checking. - */ - - extra =3D ((dst_sfc->w-1) / src_sfc->w) + 1; - - if ((zoom.x + zoom.w) < (dst_sfc->w - extra)) - zoom.w +=3D extra; - else - zoom.w =3D dst_sfc->w - zoom.x; - - extra =3D ((dst_sfc->h-1) / src_sfc->h) + 1; - - if ((zoom.y + zoom.h) < (dst_sfc->h - extra)) - zoom.h +=3D extra; - else - zoom.h =3D dst_sfc->h - zoom.y; - - /* The rectangle (zoom.x, zoom.y, zoom.w, zoom.h) is the area on the - * destination surface that needs to be updated. - */ - if (src_sfc->format->BitsPerPixel =3D=3D 32) - sdl_zoom_rgb32(src_sfc, dst_sfc, smooth, &zoom); - else if (src_sfc->format->BitsPerPixel =3D=3D 16) - sdl_zoom_rgb16(src_sfc, dst_sfc, smooth, &zoom); - else { - fprintf(stderr, "pixel format not supported\n"); - return -1; - } - - /* Return the rectangle of the update to the caller */ - *in_rect =3D zoom; - - return 0; -} - diff --git a/qemu-deprecated.texi b/qemu-deprecated.texi index 219206a836..dfb278a377 100644 --- a/qemu-deprecated.texi +++ b/qemu-deprecated.texi @@ -17,15 +17,6 @@ they were first deprecated in the 2.10.0 release. What follows is a list of all features currently marked as deprecated. =20 -@section Build options - -@subsection SDL 1.2 - -Previously QEMU has supported building against both SDL 1.2 -and 2.0 series APIs. Support for the SDL 1.2 builds will be -discontinued, so maintainers should switch to using SDL 2.0, -which is the default. - @section System emulator command line arguments =20 @subsection -machine enforce-config-section=3Don|off (since 3.1) diff --git a/ui/Makefile.objs b/ui/Makefile.objs index 00f6976c30..9b6f0c6b67 100644 --- a/ui/Makefile.objs +++ b/ui/Makefile.objs @@ -17,15 +17,10 @@ common-obj-$(call lnot,$(CONFIG_VNC)) +=3D vnc-stubs.o =20 # ui-sdl module common-obj-$(CONFIG_SDL) +=3D sdl.mo -ifeq ($(CONFIG_SDLABI),1.2) -sdl.mo-objs :=3D sdl.o sdl_zoom.o -endif -ifeq ($(CONFIG_SDLABI),2.0) sdl.mo-objs :=3D sdl2.o sdl2-input.o sdl2-2d.o ifeq ($(CONFIG_OPENGL),y) sdl.mo-objs +=3D sdl2-gl.o endif -endif sdl.mo-cflags :=3D $(SDL_CFLAGS) sdl.mo-libs :=3D $(SDL_LIBS) =20 --=20 2.9.3 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list