From nobody Wed Apr 8 03:09:23 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1773196111; cv=none; d=zohomail.com; s=zohoarc; b=R+qRp4aTDusfEW/3GL393fsoce/94++ODSIsV4ysY+E/4VFtDolvALUekDqztEfhmVftsi0ta5JMs7ZHWj/uKMb6Gprl9mKY5HuXYaNZvxSHu1vL7O8fTY0C8nRnZZTaO6tg+s4yVGJn3SIviNGQYqiYT8FbM6UKd4fw49yJb/c= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773196111; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=wiG3n0FUiZLtCy2V6pbAyek4IfD7I/afMmGQ4E7hyPQ=; b=NTMqsJbTDEcEECYUiASf/Rvmyuy9chwXvRFWSlnjc5WQlFAh5IdDgFyIF3XyWT0ZJozRPxs0knpjwhBsBhlzA9mU6d+NbQP7kuQ/kmcWQGzJNnqbHkhGNrQUwoc9Cg150ArtjA1mPnQNtBP0g8eyxR6Ncl/ia2/Nws4jSNqzALM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 177319611164498.65126219470528; Tue, 10 Mar 2026 19:28:31 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w09Iu-0000s4-7n; Tue, 10 Mar 2026 22:28:10 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w09In-0000rX-7E for qemu-devel@nongnu.org; Tue, 10 Mar 2026 22:28:01 -0400 Received: from mail-dl1-x1235.google.com ([2607:f8b0:4864:20::1235]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1w09Il-0003ut-KR for qemu-devel@nongnu.org; Tue, 10 Mar 2026 22:28:00 -0400 Received: by mail-dl1-x1235.google.com with SMTP id a92af1059eb24-128d2e3082eso2183233c88.0 for ; Tue, 10 Mar 2026 19:27:59 -0700 (PDT) Received: from 192.168.0.29 ([2804:14d:4c71:86dd:80a9:8ba1:b664:ae3d]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-128e7cd6aafsm915123c88.14.2026.03.10.19.27.56 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Tue, 10 Mar 2026 19:27:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1773196078; x=1773800878; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=wiG3n0FUiZLtCy2V6pbAyek4IfD7I/afMmGQ4E7hyPQ=; b=IVNPjOXdOGnjyY2PEU5z9ea7FmmXiC6Jj+VZLaE3zmJmZjJFhNK7e59Z16621w4fIG Bi0l/0r2CJ+C/FkqejRmEADZKrFZ0rYOxX1nnHWboHx+duSNusW3Ifm/3cCw+iPQR7ZV 2MGzPp5F3khVuymCMYScPSh6uAZS3DoiAXk9XsZK6yyGVaic45gvA7CC8DpjzB40HMCy 0whSfWO0dAruZ8FrYNjhOU5DRwf5jKmf+RPQtNQIK+buaUvIO0bTWE9hbSthdXnMxObh ZDtyXaDSqc5E/0q/0hLD5yVpvX0FJ4WcDhtq1HgmTtSChIjjnnF/MxuRbMDuBZwGOd4N LWpQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773196078; x=1773800878; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=wiG3n0FUiZLtCy2V6pbAyek4IfD7I/afMmGQ4E7hyPQ=; b=DuEH9w6NplippqfwVDwnILGo+fMzmvD/DlOIBbJZia6kLXCeDDyLK2c6nz55AyGXVJ HL5bvwvy5w0jasMIeUIKMv2T/IuwtrVOLIKOT3tRXk3pvuaUpnvfnzJhqYY5wnREX4JW ++/ZfIaRBCVxAvWMJ/UTWaCpZV+eUA7JwbxQRU9ebQJ0uLAKEW4NCxLD2MuG04g1Efs0 TC4oUpm4OFdtxNR8J4AiYLKEKnSSaGhAy1N0owoZlhv3cfewkZBrj+J+AYI3U3RjD0xh f5sn7Arx96RouKGCdNqjMRGhwac9HIwFuNktANm4nhGVWFAsMGkfalIUZCpBXgdFqgkm E4yw== X-Gm-Message-State: AOJu0YzZY/R47J6OSjfmrz8+6Aziy+tKbGcvx5R+kCNRPJKQDS3Qo2FR iiqokVFmhvHWFVBydrYqU7O1zZ5KioGYZLqAa8At/bCaE7tb4Y4Sv9mMcQV6nQ== X-Gm-Gg: ATEYQzxVI9v3904UqD7kmYq4mEQidxYbMaCtskE2O8nA+RSleMt1FLlM96WVlRyHmhY 12tuy5Ogd0F3ysemToe5O4KURGYk8xFzglrPPXtJngW4MzeUb8xPlnak+UWCTC6uPJ2suzuGMWn qFPxRUz/IFBVbEzvp2IaQ18EAfmuZ2cETOPdR4G65XrvPwUjb7CzpJgL3mJXnKX4UlGInc+9ulr wjZ3hjj7hQJaqudyoKryCb3kFjrzWrNPkUqspNFmBT2yXL+08WCfTjVfYCmO47d8Aoff8NUuqTB O0jIqNRkuMwCnUdwGojQfgDzPDgfyDEfssqUYAXGEv/1TTvREoW8aTYEyieehOnjqoEIgVB52HL 9V9v06a3MYTmkFRRKYGp4MBqb94I+6uTd4YYQSavVv3mrfzv3poIYgKy+5JHNkNdKneNre+mY7W TQCw4kHHs2Tq3joMMCDrZdsKxXjeDc0cQ5HXbO5YGRV6XdDUx7hMI= X-Received: by 2002:a05:7022:6ba7:b0:123:34e8:aec2 with SMTP id a92af1059eb24-128e779ef68mr477285c88.1.1773196077863; Tue, 10 Mar 2026 19:27:57 -0700 (PDT) From: Lucas Amaral To: qemu-devel@nongnu.org Cc: Lucas Amaral Subject: [PATCH v2 1/3] ui: introduce GRAPHIC_FLAGS_VK for Vulkan scanout Date: Tue, 10 Mar 2026 23:27:50 -0300 Message-ID: <20260311022752.64192-2-lucaaamaral@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260311022752.64192-1-lucaaamaral@gmail.com> References: <20260309214930.92616-1-lucaaamaral@gmail.com> <20260311022752.64192-1-lucaaamaral@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1235; envelope-from=lucaaamaral@gmail.com; helo=mail-dl1-x1235.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, FSL_HELO_BARE_IP_2=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1773196112959154100 Content-Type: text/plain; charset="utf-8" Define GRAPHIC_FLAGS_VK (bit 2) in the console flags for future Vulkan scanout support. The compatibility check currently returns an error indicating the feature is not yet implemented. This prepares the display framework for direct Vulkan scanout alongside the existing GL and DMABUF paths. Signed-off-by: Lucas Amaral Reviewed-by: Marc-Andr=C3=A9 Lureau --- include/ui/console.h | 2 ++ ui/console.c | 6 ++++++ 2 files changed, 8 insertions(+) diff --git a/include/ui/console.h b/include/ui/console.h index 98feaa5..6b8bbaf 100644 --- a/include/ui/console.h +++ b/include/ui/console.h @@ -361,6 +361,8 @@ enum { GRAPHIC_FLAGS_GL =3D 1 << 0, /* require a console/display with DMABUF import */ GRAPHIC_FLAGS_DMABUF =3D 1 << 1, + /* TODO: require a console/display with Vulkan scanout */ + GRAPHIC_FLAGS_VK =3D 1 << 2, }; =20 typedef struct GraphicHwOps { diff --git a/ui/console.c b/ui/console.c index f445db1..76d54bf 100644 --- a/ui/console.c +++ b/ui/console.c @@ -594,6 +594,12 @@ static bool console_compatible_with(QemuConsole *con, return false; } =20 + if (flags & GRAPHIC_FLAGS_VK) { + /* TODO: check for Vulkan scanout support in display backend */ + error_setg(errp, "The console requires Vulkan scanout (not yet imp= lemented)."); + return false; + } + return true; } =20 --=20 2.52.0 From nobody Wed Apr 8 03:09:23 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1773196124; cv=none; d=zohomail.com; s=zohoarc; b=NqwJdlxLC+ZnBRVhwReFGg+h8J64Cpkt6r43FM/vaS2zpnTTeXBq+waMcedojUYhmcjxxDWds5AfGcSZpqeerH+bScA6maWP8+KZZTg5Mh2Hi5gsiVswF/iirkuW0Xbqm0ayPuuwDYP2tyb6ZCREdpWI6LDcNnaEUtYUk8Hwal8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773196124; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=M2azvhenDuoU6WjYUo29+uag0Q0mEkgR7SmdStxi/ig=; b=l5j3aRH+wS9yf7/QN2JlblAORKzaBwPi3cF6aZI7yA0lvHF1hA7tlcgfQVYS8PuSCckV39Fa1OMBLftZzGg9W95oTx9nwsIgnRk5uwzJVtcc0CyncE9fspY+S54APcbCkVV6eEAPQB+JAUJsMFw6yjKUhJorCzm7DlD0neXPMV4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1773196124482571.3909332461411; Tue, 10 Mar 2026 19:28:44 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w09J1-00016h-Hj; Tue, 10 Mar 2026 22:28:15 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w09Iq-0000s2-3A for qemu-devel@nongnu.org; Tue, 10 Mar 2026 22:28:08 -0400 Received: from mail-dl1-x1230.google.com ([2607:f8b0:4864:20::1230]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1w09In-0003v5-F1 for qemu-devel@nongnu.org; Tue, 10 Mar 2026 22:28:03 -0400 Received: by mail-dl1-x1230.google.com with SMTP id a92af1059eb24-12732165d1eso15305839c88.1 for ; Tue, 10 Mar 2026 19:28:01 -0700 (PDT) Received: from 192.168.0.29 ([2804:14d:4c71:86dd:80a9:8ba1:b664:ae3d]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-128e7cd6aafsm915123c88.14.2026.03.10.19.27.58 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Tue, 10 Mar 2026 19:27:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1773196080; x=1773800880; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=M2azvhenDuoU6WjYUo29+uag0Q0mEkgR7SmdStxi/ig=; b=MX1auBrTTf8K6XFV2hCi4TWF5ntvJJSxeUN/5sZi5dGP+6uHY2sr/K0sJTz/cR6s39 GcTI8mul0KzEu+cGjOH5/SBTY/Z3JjKiLYIRar0gquEpeGUNwvW5ypGt7z0ElHaphRBZ cZHsVx/P2mjhGS57qYtN3uCT+8NGSPFGt5jqSIsQJ6kqeIHr59BItv1lanSJVpRb1iTB GASBNlqWulL3cz+hnkN/x8QYQbBSZu8VEG2ZgnCZMThrDHE9fU0YP9ss1QqtK1A7Om7Q iLRUGFCL7VdkVz2z3hFUx2oPr1MGtjmWrlh5dMkzvg5YUtDPKSWXIihBmA2afZtkEyV6 8/CA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773196080; x=1773800880; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=M2azvhenDuoU6WjYUo29+uag0Q0mEkgR7SmdStxi/ig=; b=WGl+VuhnyN4WRoBFsyKOncKNAaLywMYOpKRIrtGdGEzVG2BAR3GzUePDrRCPJQK5m1 rTtRBj+AhoSIDwODDPGM0OMaBsNL8OE0mc1RlWf5LN1ZQjBFlSmlKCLdM7AccpEbAguK qi32UAkfuI2alB9rZDNu5vK+roj27MNWaM5LO5LMfWgenjkAYpJd9bdNKlo4+bo4Zkic zhAAy675Agm7C1gzc/YNC3cRRpdaK301Zgsc8VOm8Cr2hV3pvtrphn1tSiX7TD+hzZP9 Tv0b8XbL3oXowm0T5y7SYgxFQNnHHOBlzJIaq8t9OwvLEXAFN6TmZHF/U/r0BIYeTJ0M mJ0w== X-Gm-Message-State: AOJu0YwZrO4NKdIbBRWTyDUqqO2dCKM9tLiMFSc2IUc5nlP1BjNN0cTN xvO6nt5ocZ7mQv0Ym+paK2Mzhfn/EJEhgNfqat5lMVT9mw1jX+NqIupXe7iznw== X-Gm-Gg: ATEYQzx7D+m8DBsnGNO/kR6kXargt4afw+gkpS3LUb2A2sbmHlOkZgUJ2GMT9iPock/ GfYNGcqbWpMfBn5cqYGnt645YBkrpII3QhQZIa16nRvT/2NNArF88U5fUl4lXbo58YrfoPo/RPa taI1E3aVYoNFWvlnjs+4gFRqoDDyhXPNKZ9yr6aM0+nEpnSrxIhuVe0l+SbtmRJR8W2ZWsjUWMp P2HTElj83TDNIIaiBMQC2dyhXCV1YCpjgfvaglvIE6uDiuMj+i/82179qot1iqaYJBDspMVNT/z P/mAA8GguqGif7QRInJscRUGrnOUpGwmRiPPmzkFYOuS5ATyP5GN3KWKx/N4TMgWDNFpAl/WYhF YfZ7vdyqyxCyXPYvCLZKqt05CXdtU4wzrfZlOWfL6CtjEinFefhJ0Wnpx5TcstpqQpPYwvdJeRz 6Qmws5WVrWfK+qPjYscSDclqkC42zypiYWktW2F5xGmnXSYWewQE4= X-Received: by 2002:a05:7022:68a9:b0:128:d375:f1cc with SMTP id a92af1059eb24-128e77a8ad6mr424952c88.12.1773196079614; Tue, 10 Mar 2026 19:27:59 -0700 (PDT) From: Lucas Amaral To: qemu-devel@nongnu.org Cc: Lucas Amaral Subject: [PATCH v2 2/3] virtio-gpu: decouple Venus from CONFIG_OPENGL Date: Tue, 10 Mar 2026 23:27:51 -0300 Message-ID: <20260311022752.64192-3-lucaaamaral@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260311022752.64192-1-lucaaamaral@gmail.com> References: <20260309214930.92616-1-lucaaamaral@gmail.com> <20260311022752.64192-1-lucaaamaral@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1230; envelope-from=lucaaamaral@gmail.com; helo=mail-dl1-x1230.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, FSL_HELO_BARE_IP_2=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1773196127289154100 Venus (virtio-gpu Vulkan context) currently requires an OpenGL display backend due to build-time and runtime coupling. On macOS, no OpenGL display backend exists. Remove the opengl.found() build requirement for the virtio-gpu-gl module; virglrenderer provides Venus independently of OpenGL. Gate GL-specific code paths behind CONFIG_OPENGL and display_opengl: - Only advertise VIRGL/VIRGL2 capsets when display_opengl is set - Only pass VIRGL_RENDERER_NO_VIRGL when !display_opengl with Venus - Null out GL context callbacks when no GL display is available - Route 2D display commands to the software renderer (pixman) when Venus runs without GL (venus no-GL mode) - Allow Venus to bypass the OpenGL display check at device realize Signed-off-by: Lucas Amaral --- hw/display/meson.build | 8 ++-- hw/display/virtio-gpu-base.c | 15 ++++++- hw/display/virtio-gpu-gl.c | 6 ++- hw/display/virtio-gpu-virgl.c | 84 ++++++++++++++++++++++++++++++----- 4 files changed, 97 insertions(+), 16 deletions(-) diff --git a/hw/display/meson.build b/hw/display/meson.build index 90e6c04..509479e 100644 --- a/hw/display/meson.build +++ b/hw/display/meson.build @@ -76,9 +76,9 @@ if config_all_devices.has_key('CONFIG_VIRTIO_GPU') virtio_gpu_ss.add(when: 'CONFIG_VHOST_USER_GPU', if_true: files('vhost-u= ser-gpu.c')) hw_display_modules +=3D {'virtio-gpu': virtio_gpu_ss} =20 - if virgl.found() and opengl.found() + if virgl.found() virtio_gpu_gl_ss =3D ss.source_set() - virtio_gpu_gl_ss.add(when: ['CONFIG_VIRTIO_GPU', virgl, opengl], + virtio_gpu_gl_ss.add(when: ['CONFIG_VIRTIO_GPU', virgl], if_true: [files('virtio-gpu-gl.c', 'virtio-gpu-vi= rgl.c'), pixman, virgl]) hw_display_modules +=3D {'virtio-gpu-gl': virtio_gpu_gl_ss} endif @@ -99,9 +99,9 @@ if config_all_devices.has_key('CONFIG_VIRTIO_PCI') if_true: files('vhost-user-gpu-pci.c')) hw_display_modules +=3D {'virtio-gpu-pci': virtio_gpu_pci_ss} =20 - if virgl.found() and opengl.found() + if virgl.found() virtio_gpu_pci_gl_ss =3D ss.source_set() - virtio_gpu_pci_gl_ss.add(when: ['CONFIG_VIRTIO_GPU', 'CONFIG_VIRTIO_PC= I', virgl, opengl], + virtio_gpu_pci_gl_ss.add(when: ['CONFIG_VIRTIO_GPU', 'CONFIG_VIRTIO_PC= I', virgl], if_true: [files('virtio-gpu-pci-gl.c'), pixma= n]) hw_display_modules +=3D {'virtio-gpu-pci-gl': virtio_gpu_pci_gl_ss} endif diff --git a/hw/display/virtio-gpu-base.c b/hw/display/virtio-gpu-base.c index 7269477..dd93b65 100644 --- a/hw/display/virtio-gpu-base.c +++ b/hw/display/virtio-gpu-base.c @@ -18,6 +18,7 @@ #include "qapi/error.h" #include "qemu/error-report.h" #include "hw/display/edid.h" +#include "system/system.h" #include "trace.h" #include "qapi/qapi-types-virtio.h" =20 @@ -157,7 +158,18 @@ virtio_gpu_get_flags(void *opaque) VirtIOGPUBase *g =3D opaque; int flags =3D GRAPHIC_FLAGS_NONE; =20 - if (virtio_gpu_virgl_enabled(g->conf)) { + if (virtio_gpu_venus_enabled(g->conf)) { + /* TODO: set GRAPHIC_FLAGS_VK for direct Vulkan scanout */ + } + + /* + * TODO: virtio_gpu_virgl_enabled() checks VIRTIO_GPU_FLAG_VIRGL_ENABL= ED + * which is set for both OpenGL (VIRGL) and Vulkan (Venus) backends. + * This condition should ideally use a dedicated OpenGL-only flag. For + * now, display_opengl correctly gates GL scanout since Venus leaves it + * at 0. + */ + if (virtio_gpu_virgl_enabled(g->conf) && display_opengl) { flags |=3D GRAPHIC_FLAGS_GL; } =20 @@ -257,6 +269,7 @@ virtio_gpu_base_get_features(VirtIODevice *vdev, uint64= _t features, } if (virtio_gpu_blob_enabled(g->conf)) { features |=3D (1 << VIRTIO_GPU_F_RESOURCE_BLOB); + features |=3D (1 << VIRTIO_GPU_F_BLOB_ALIGNMENT); } if (virtio_gpu_context_init_enabled(g->conf)) { features |=3D (1 << VIRTIO_GPU_F_CONTEXT_INIT); diff --git a/hw/display/virtio-gpu-gl.c b/hw/display/virtio-gpu-gl.c index b98ef2e..b5526cd 100644 --- a/hw/display/virtio-gpu-gl.c +++ b/hw/display/virtio-gpu-gl.c @@ -133,7 +133,9 @@ static void virtio_gpu_gl_device_realize(DeviceState *q= dev, Error **errp) return; } =20 - if (!display_opengl) { + if (virtio_gpu_venus_enabled(g->parent_obj.conf)) { + /* Venus renders via Vulkan in the render server =E2=80=94 no GL d= isplay needed */ + } else if (!display_opengl) { error_setg(errp, "The display backend does not have OpenGL support enabl= ed"); error_append_hint(errp, @@ -217,4 +219,6 @@ static void virtio_register_types(void) type_init(virtio_register_types) =20 module_dep("hw-display-virtio-gpu"); +#ifdef CONFIG_OPENGL module_dep("ui-opengl"); +#endif diff --git a/hw/display/virtio-gpu-virgl.c b/hw/display/virtio-gpu-virgl.c index 0f75482..66a70e3 100644 --- a/hw/display/virtio-gpu-virgl.c +++ b/hw/display/virtio-gpu-virgl.c @@ -19,8 +19,10 @@ #include "hw/virtio/virtio-gpu.h" #include "hw/virtio/virtio-gpu-bswap.h" #include "hw/virtio/virtio-gpu-pixman.h" - +#include "system/system.h" +#ifdef CONFIG_OPENGL #include "ui/egl-helpers.h" +#endif =20 #include =20 @@ -29,6 +31,16 @@ struct virtio_gpu_virgl_resource { MemoryRegion *mr; }; =20 +/* + * Venus no-GL mode: Venus is enabled but no OpenGL display is available. + * Display commands use software (pixman) rendering; Venus/3D commands + * go through the virglrenderer render server. + */ +static bool virtio_gpu_venus_nogl(VirtIOGPU *g) +{ + return virtio_gpu_venus_enabled(g->parent_obj.conf) && !display_opengl; +} + static struct virtio_gpu_virgl_resource * virtio_gpu_virgl_find_resource(VirtIOGPU *g, uint32_t resource_id) { @@ -42,7 +54,7 @@ virtio_gpu_virgl_find_resource(VirtIOGPU *g, uint32_t res= ource_id) return container_of(res, struct virtio_gpu_virgl_resource, base); } =20 -#if VIRGL_RENDERER_CALLBACKS_VERSION >=3D 4 +#if VIRGL_RENDERER_CALLBACKS_VERSION >=3D 4 && defined(CONFIG_OPENGL) static void * virgl_get_egl_display(G_GNUC_UNUSED void *cookie) { @@ -903,6 +915,44 @@ void virtio_gpu_virgl_process_cmd(VirtIOGPU *g, =20 VIRTIO_GPU_FILL_CMD(cmd->cmd_hdr); =20 + /* + * Venus no-GL mode: route 2D display commands to the base software + * renderer (pixman). The guest kernel always uses 2D commands for + * display framebuffers even with VIRGL enabled; Venus/3D commands + * go through the virglrenderer render server as usual. + */ + if (virtio_gpu_venus_nogl(g)) { + switch (cmd->cmd_hdr.type) { + case VIRTIO_GPU_CMD_RESOURCE_CREATE_2D: + case VIRTIO_GPU_CMD_SET_SCANOUT: + case VIRTIO_GPU_CMD_RESOURCE_FLUSH: + case VIRTIO_GPU_CMD_TRANSFER_TO_HOST_2D: + case VIRTIO_GPU_CMD_GET_DISPLAY_INFO: + case VIRTIO_GPU_CMD_GET_EDID: + virtio_gpu_simple_process_cmd(g, cmd); + return; + case VIRTIO_GPU_CMD_RESOURCE_UNREF: + case VIRTIO_GPU_CMD_RESOURCE_ATTACH_BACKING: + case VIRTIO_GPU_CMD_RESOURCE_DETACH_BACKING: { + /* + * Both 2D (simple) and blob (virgl) resources share g->reslis= t. + * Check if virglrenderer owns the resource to pick the right = handler. + */ + struct virtio_gpu_resource_unref hdr; + struct virgl_renderer_resource_info info; + VIRTIO_GPU_FILL_CMD(hdr); + if (virgl_renderer_resource_get_info(hdr.resource_id, &info)) { + /* Not in virglrenderer =E2=80=94 it's a 2D software resou= rce */ + virtio_gpu_simple_process_cmd(g, cmd); + return; + } + break; /* virglrenderer owns it =E2=80=94 fall through */ + } + default: + break; + } + } + virgl_renderer_force_ctx_0(); switch (cmd->cmd_hdr.type) { case VIRTIO_GPU_CMD_CTX_CREATE: @@ -1169,6 +1219,7 @@ int virtio_gpu_virgl_init(VirtIOGPU *g) uint32_t flags =3D 0; VirtIOGPUGL *gl =3D VIRTIO_GPU_GL(g); =20 +#ifdef CONFIG_OPENGL #if VIRGL_RENDERER_CALLBACKS_VERSION >=3D 4 if (qemu_egl_display) { virtio_gpu_3d_cbs.version =3D 4; @@ -1180,12 +1231,23 @@ int virtio_gpu_virgl_init(VirtIOGPU *g) flags |=3D VIRGL_RENDERER_D3D11_SHARE_TEXTURE; } #endif +#endif /* CONFIG_OPENGL */ #if VIRGL_VERSION_MAJOR >=3D 1 if (virtio_gpu_venus_enabled(g->parent_obj.conf)) { - flags |=3D VIRGL_RENDERER_VENUS | VIRGL_RENDERER_RENDER_SERVER; + flags |=3D VIRGL_RENDERER_VENUS + | VIRGL_RENDERER_RENDER_SERVER; + if (!display_opengl) { + flags |=3D VIRGL_RENDERER_NO_VIRGL; + } } #endif =20 + if (!display_opengl) { + virtio_gpu_3d_cbs.create_gl_context =3D NULL; + virtio_gpu_3d_cbs.destroy_gl_context =3D NULL; + virtio_gpu_3d_cbs.make_current =3D NULL; + } + ret =3D virgl_renderer_init(g, flags, &virtio_gpu_3d_cbs); if (ret !=3D 0) { error_report("virgl could not be initialized: %d", ret); @@ -1223,14 +1285,16 @@ GArray *virtio_gpu_virgl_get_capsets(VirtIOGPU *g) =20 capset_ids =3D g_array_new(false, false, sizeof(uint32_t)); =20 - /* VIRGL is always supported. */ - virtio_gpu_virgl_add_capset(capset_ids, VIRTIO_GPU_CAPSET_VIRGL); + /* OpenGL: VIRGL/VIRGL2 require a GL display backend */ + if (display_opengl) { + virtio_gpu_virgl_add_capset(capset_ids, VIRTIO_GPU_CAPSET_VIRGL); =20 - virgl_renderer_get_cap_set(VIRTIO_GPU_CAPSET_VIRGL2, - &capset_max_ver, - &capset_max_size); - if (capset_max_ver) { - virtio_gpu_virgl_add_capset(capset_ids, VIRTIO_GPU_CAPSET_VIRGL2); + virgl_renderer_get_cap_set(VIRTIO_GPU_CAPSET_VIRGL2, + &capset_max_ver, + &capset_max_size); + if (capset_max_ver) { + virtio_gpu_virgl_add_capset(capset_ids, VIRTIO_GPU_CAPSET_VIRG= L2); + } } =20 if (virtio_gpu_venus_enabled(g->parent_obj.conf)) { --=20 2.52.0 From nobody Wed Apr 8 03:09:23 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1773196138; cv=none; d=zohomail.com; s=zohoarc; b=WeojLzDQJGEKZ3xx89sNOixFi5wGZoZGq9j4Qwr/S4dyub8uXtIiDOrXRxc2pZ8ZOKFjlZ3PG8kVgypcRKqsp6jsyYoiTkhXU2Bvcv6RfoZhUJ3TEvpe/m4nq7AKSqLG6mbhu62nQSBUe5iXmWPHH+ro2UatUcn2Mr5M4UHyTSM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773196138; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=J5J5OYjq+qbSyZKLX7Uj093GYMjgrX6jSJBJCQtEQh4=; b=XTQw05YZqMx1LFHIFzfH9wdPrL1voy3Ycz4folSPfFlz1xnPh5iqm4KCmcZxMXKTV6Z6+SGDJnXHZb6sFn/Bh5UZZhEeKA/tswoBlbyY0Vk24WZH7TrZNqWAlrqMb0bsKKnPwxzuoBIKP1Yn/HTNgba9XWODKHdHgxJdJBy5t0M= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 177319613855869.7363586543571; Tue, 10 Mar 2026 19:28:58 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1w09J1-00015q-2y; Tue, 10 Mar 2026 22:28:15 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1w09Is-0000tD-Hg for qemu-devel@nongnu.org; Tue, 10 Mar 2026 22:28:08 -0400 Received: from mail-dl1-x1233.google.com ([2607:f8b0:4864:20::1233]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1w09Ip-0003vV-RZ for qemu-devel@nongnu.org; Tue, 10 Mar 2026 22:28:05 -0400 Received: by mail-dl1-x1233.google.com with SMTP id a92af1059eb24-12776bebe9fso659512c88.1 for ; Tue, 10 Mar 2026 19:28:03 -0700 (PDT) Received: from 192.168.0.29 ([2804:14d:4c71:86dd:80a9:8ba1:b664:ae3d]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-128e7cd6aafsm915123c88.14.2026.03.10.19.27.59 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Tue, 10 Mar 2026 19:28:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1773196082; x=1773800882; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=J5J5OYjq+qbSyZKLX7Uj093GYMjgrX6jSJBJCQtEQh4=; b=kg9kG1O2Q30Jx0PnuebXkD5xkGNGhUhiXSa+bokM8Ypt9ZyANFapDdNQt3HaXT+oFZ oEbC2u/xZd8/Nfho3I+/SM77+/bMB5GfHwB7ptAI5fsoyY14ymFxwmL16brJd3MJ4cUO ax8nTSHwbUUsYOptVnaT++nSeUSkjmsmkF4QrIe6Yy01srGkAM8E4ivEEs+3BOMPWcs9 F5kJDLhI0uDnQY5Y1qgH4MwlhUOUootm2lSPNKLpBgg/2yZfYtq29RohrEGoU6v4sW3p bJL8V7xOdonNFB0ROaH7xnzilfnMtK9JhNZyaq+vrWr2CrxMxWUG79DB6K7nHCYoLsrW EZfQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773196082; x=1773800882; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=J5J5OYjq+qbSyZKLX7Uj093GYMjgrX6jSJBJCQtEQh4=; b=k8SIw38d8r923NMLom/mcaPqSHXueBHfFAro3KwFXxTpOnGPZVePyvQPGpdxmv4ES6 MKj0+NHBuGuC+qZeZNCWG5hOxvy6dSTFnOvbG8n9sojDAdWngiayBxsDXjdpr1ZNSJSs XuBi7BWSTyy1k5Cia8CFJDDYhqNx3gV89UiDe2mk6P8ubDuB+slzUP0cmQEYNIuXUtUV to+n9Q9OPLyGAnqmtch9jX+F9odWpgZwD6i8Y42st8orFy9bRPxi2efLTbhwXnEhv0RX 4aEEmlNipMciupVbkyGmNK7ijWSoyWxO5dircrdI7auLZfnaSkzhAOiDpm7XLjFhthqx Tz7g== X-Gm-Message-State: AOJu0YzzI3kHr+c9Vbe3e9ce3xbEImOL83fddhmIRADUY7rUlNbJFAXI bzzsenO1cj/xvkFfoOSWeR+jKlZ8wg3tVcKR8mofnR5HUX2O5C3Ip9DzCQdUcw== X-Gm-Gg: ATEYQzycpx0L/8hr4bbZbbPDBRXkEG6mOdTPdL0JY6l0IWfAigLacVqoY1LPdaJyKL3 cm/qUJVYD7Wg+Mfnom4b2YYfVOAyBhW8RWcmg+fnSczkJITOy8T3HGUC5p5PSsUbbAETLOru816 iq3/1z0crI/8kgxdY1CH6diwV1wX+N81yPnDMRtkMqGZM/4vtERrgHoSpdCDdYFL/bXVKEs+Rwf nU72m2WRbBEljakXWhcda3fSL7+RhA8RTUL1hUKHzzRLXu5idBmAS5oiO2/c5BemeSmHIs8SB2n RPM4nzTZeIJwXw8dPV7i+JcgU/uAHwGIWxiR+TDeOMM7rrVQCCuWw+cLwcHqK8vo9QDqzZQp9jo bXZncHfHXxMkGoIBgj8GEBcDNjoQK9iqEEIjR56kb6gJwwpnLKS16ldwh8ndmM7BveIR7EPdDBO 0w5ZUeOfQ/1A4RROOCflGfepQuidp8Z2TZB+fF+jM7Ei9HLyB7O7c= X-Received: by 2002:a05:7022:4587:b0:127:9d23:ad43 with SMTP id a92af1059eb24-128e7787fd4mr570850c88.1.1773196081535; Tue, 10 Mar 2026 19:28:01 -0700 (PDT) From: Lucas Amaral To: qemu-devel@nongnu.org Cc: Lucas Amaral Subject: [PATCH v2 3/3] virtio-gpu: advertise VIRTIO_GPU_F_BLOB_ALIGNMENT Date: Tue, 10 Mar 2026 23:27:52 -0300 Message-ID: <20260311022752.64192-4-lucaaamaral@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260311022752.64192-1-lucaaamaral@gmail.com> References: <20260309214930.92616-1-lucaaamaral@gmail.com> <20260311022752.64192-1-lucaaamaral@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1233; envelope-from=lucaaamaral@gmail.com; helo=mail-dl1-x1233.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, FSL_HELO_BARE_IP_2=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1773196139889158500 Content-Type: text/plain; charset="utf-8" Define VIRTIO_GPU_F_BLOB_ALIGNMENT (feature bit 5) per the OASIS virtio specification. This allows the host to communicate its memory alignment requirement to the guest via the blob_alignment field in virtio_gpu_config. Set blob_alignment to the host page size so the guest kernel can align blob BAR offsets accordingly, avoiding alignment mismatches with the VMM's memory mapping API (e.g., hv_vm_map on macOS). Guest-side kernel support (drm_mm alignment) is pending upstream Linux merge. Signed-off-by: Lucas Amaral --- hw/display/virtio-gpu.c | 8 ++++++++ include/standard-headers/linux/virtio_gpu.h | 6 ++++++ 2 files changed, 14 insertions(+) diff --git a/hw/display/virtio-gpu.c b/hw/display/virtio-gpu.c index 643e91c..c12273d 100644 --- a/hw/display/virtio-gpu.c +++ b/hw/display/virtio-gpu.c @@ -1517,6 +1517,14 @@ void virtio_gpu_device_realize(DeviceState *qdev, Er= ror **errp) #endif } =20 + /* + * TODO: guest-side F_BLOB_ALIGNMENT support pending upstream Linux me= rge + * (Sergio Lopez's patches, Nov 2025). Until merged, the guest won't + * negotiate this feature. The host advertises it per OASIS virtio spe= c. + */ + g->parent_obj.virtio_config.blob_alignment =3D + cpu_to_le32(qemu_real_host_page_size()); + if (!virtio_gpu_base_device_realize(qdev, virtio_gpu_handle_ctrl_cb, virtio_gpu_handle_cursor_cb, diff --git a/include/standard-headers/linux/virtio_gpu.h b/include/standard= -headers/linux/virtio_gpu.h index 00cd3f0..252704e 100644 --- a/include/standard-headers/linux/virtio_gpu.h +++ b/include/standard-headers/linux/virtio_gpu.h @@ -64,6 +64,11 @@ * context_init and multiple timelines */ #define VIRTIO_GPU_F_CONTEXT_INIT 4 +/* + * VIRTIO_GPU_F_BLOB_ALIGNMENT: device advertises blob_alignment + * in virtio_gpu_config (OASIS virtio-spec feature bit 5) + */ +#define VIRTIO_GPU_F_BLOB_ALIGNMENT 5 =20 enum virtio_gpu_ctrl_type { VIRTIO_GPU_UNDEFINED =3D 0, @@ -365,6 +370,7 @@ struct virtio_gpu_config { uint32_t events_clear; uint32_t num_scanouts; uint32_t num_capsets; + uint32_t blob_alignment; }; =20 /* simple formats for fbcon/X use */ --=20 2.52.0