From nobody Sat Apr 11 21:30:21 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=1773094643; cv=none; d=zohomail.com; s=zohoarc; b=I6JKENjNo7HXjgFZga8M7ibyLm0NFtYhjXXsL3O1iPmJoQNqYyo0dL7RxuRwkD6vgUFPZfK1Zv1gR9rKXwgYkFK3+Xs7A4uU5PmszApPyh3ALmAiq4JG1n/Pu6eWJLtvS/QASExd6zlLBK9kT4F0qVwlg0u3jXhLd6EXcniwdPs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773094643; 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=vfgq0MtHKeMNXSCkoTP/2cVolEkmyv7Uf/M+1C5FJpA=; b=Ny7kHDGxg4pi7WRGMVPIrE9A4iEnwi/EfZAXCexnHltvDjwQUJUalGd9rlmB8e0UyQrZ0SXtK2eChiy1wSDHdk18cHcuWyqeKOS6RaupYaLAMPEYxDVO9iJTFWIdJVN+ZoU1J4g3AzOM0iaoOmUCOgoWXscmIIQ4QJ40v5c1thc= 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 1773094643030422.0818756167206; Mon, 9 Mar 2026 15:17:23 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vziu2-0003Lg-6z; Mon, 09 Mar 2026 18:16:42 -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 1vziTt-0000wR-2y for qemu-devel@nongnu.org; Mon, 09 Mar 2026 17:49:41 -0400 Received: from mail-dy1-x132d.google.com ([2607:f8b0:4864:20::132d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1vziTr-0002F1-Jl for qemu-devel@nongnu.org; Mon, 09 Mar 2026 17:49:40 -0400 Received: by mail-dy1-x132d.google.com with SMTP id 5a478bee46e88-2be06c02f66so6730740eec.1 for ; Mon, 09 Mar 2026 14:49:39 -0700 (PDT) Received: from 192.168.0.29 ([2804:14d:4c71:86dd:4cc9:ee1b:bd8d:dbab]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2be4f96f25bsm10519495eec.28.2026.03.09.14.49.35 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Mon, 09 Mar 2026 14:49:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1773092978; x=1773697778; 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=vfgq0MtHKeMNXSCkoTP/2cVolEkmyv7Uf/M+1C5FJpA=; b=R/8jk6rb9dws9rZZKjaqrd3yORAuC9aiEyi586ExD/25PfovOy1thI2bjEoTdnLtxU QtMXs7gtxUhyjCyipykSsxDt8hOsiUd/fTwfTmr+C0aKlTRZJIpB4pafO0Za1e2WcXi7 aCFpaWR7CGFNkL5Y9HlWhxIY7pNOr1Uc8jqdmUTgMzaAJhwdTTn2Y9HAJBF1GaRk4nnZ 6ULHqTmGIpBwkS9XadYc+Wm3zXvRm5pKnFL0Asi8AXfXZbSXOPtykLSIDmXjZyl0osxo pHsRs84SHTmNPBZeHWGi1mmBOksVDfn6aiIhIq0RKeM7pEu3+skdokXRDjDSX0sk0lo5 7QgA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773092978; x=1773697778; 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=vfgq0MtHKeMNXSCkoTP/2cVolEkmyv7Uf/M+1C5FJpA=; b=oE0iizn0rebKCwfjPk2T+29BYW0ABFuBkmTHJ6RXG7SuVaLIHuk05fIxQsJMXyN270 v6+2jS9ChUG81CDSdXxysqOmferB4nGvwAC/HmwgGmy8WWjf6Z9NWa+IUpgHnKeYfOAL QZOyh7CuadpLHy3/ntTK7qil9e7/CSRoKWksDRIgE6UoGzL/vDwyNQTl7/6+/LwCb/iP PzkjgRrx6lhW09xyXxjMwHGg2GsntC6HRUCS/uGQSd7DpAqGDAxse4nF79ynb1E/ZXYk L12CwWE/BXnuuVF3tTNUQ+bNjraH1AI5RfrpfuoZiurG5ebV+7lNgwXmEVSNUh4BIPxS uyCw== X-Gm-Message-State: AOJu0Yx/OQc2wDbQ2HcM6wtsUlHnfO9TFkgBy01HHuswBkfEI+FmLkpw 1jrlVgMqmLB0HG5gbfXhcW4TlUWdhg56F+HvvPNMzWljYF6VuJrRKsWrrxJ9xkvk X-Gm-Gg: ATEYQzzU72CQBMkq4HAxKIdJKwJHcnMgJNznVBd7Pi1GNkMXFjkCGXzWIxR96tNPCX0 VJACo/UWVdDil2j4wA0ubdzrScEe+Rt+qOldMN5+V35V5rZAF6omG4yJi3LafwjuXQgScZSEqZV l6jj7EQmUYVQ7SRkE+hhAdqymPrpn1wtKS1qllcQLvnNXapqPVTGdDCHnUIsFly/vWUzoQurKVY qtPPm+eEzcGLtwD5PBAcfS5ktqzXzRd6cwwJCr+sij4z7rj/wxxQuLNHfihFtsJbbMYO5pvIowW vWlFQFady9jfyg+y1L1U2uIFlwOVMBRbi66TFjz5xamPo6gv7SGk0IHC0E1qQAo6j0pIl4BWA7J gEgfSyO2RdfyzPejRZ0zBI3IIpvay7hGh9GPbRGP6NZEiJAotD4aMX4bKXinarMaZHIIW2qY3xK +NadJ59mAbUpKbWOplifzqKIGotIiS/lvz4mQr/ahvzVP2ZIs5mAOKvvhtkl8Vq005lq4P9A== X-Received: by 2002:a05:7301:1004:b0:2be:142f:d48a with SMTP id 5a478bee46e88-2be4e092254mr4713193eec.27.1773092977817; Mon, 09 Mar 2026 14:49:37 -0700 (PDT) From: Lucas Amaral To: qemu-devel@nongnu.org Cc: alex.bennee@linaro.org, dmitry.osipenko@collabora.com, Lucas Amaral Subject: [PATCH 1/3] include/standard-headers: add VIRTIO_GPU_F_BLOB_ALIGNMENT Date: Mon, 9 Mar 2026 18:49:28 -0300 Message-ID: <20260309214930.92616-2-lucaaamaral@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260309214930.92616-1-lucaaamaral@gmail.com> References: <20260309214930.92616-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::132d; envelope-from=lucaaamaral@gmail.com; helo=mail-dy1-x132d.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-Mailman-Approved-At: Mon, 09 Mar 2026 18:16:41 -0400 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: 1773094643258158500 Content-Type: text/plain; charset="utf-8" Define VIRTIO_GPU_F_BLOB_ALIGNMENT (feature bit 5) per the OASIS virtio specification and add the blob_alignment field to struct virtio_gpu_config. This allows the host to communicate its memory alignment requirement to the guest via the device configuration space. Header-only change, no functional impact. Signed-off-by: Lucas Amaral --- include/standard-headers/linux/virtio_gpu.h | 6 ++++++ 1 file changed, 6 insertions(+) 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 From nobody Sat Apr 11 21:30:21 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=1773094688; cv=none; d=zohomail.com; s=zohoarc; b=PgC0a/fo+eTelw9CJQhHihJ7e2Zivv0K7lGiMo5MmULQOC9WEXK6cfQTv7eBdo1DsZUhu17wDPaHXLdCqMokioHd8zV/i13kmybUB0fojFn4+PqNAdfTiqkYY4VME28+sH39s3eqRblOAAxuclCoztKhMXM+KMslmviUuDXQ3Ew= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773094688; 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=iSPh/+vq5xols2V8eYLNVaZ56CQbQABrVTIm10x7/7Y=; b=iiUBpTcvX8B17b4i7168bAWKk8gKwTwmnliOi3hthr20qRKZ335l8dp7SP0IuQKkAEUg3HGY5sByyxE7MEFrduNc8wYqgdiW2QFue6CuBq+QnFhubEdREXvDanOeIUYu2nF3LPjCTWeTTXFtqiScH+n30ByZF9GEXTBwQogpET8= 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 1773094688044699.774195481022; Mon, 9 Mar 2026 15:18:08 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vziu5-0003OQ-TQ; Mon, 09 Mar 2026 18:16:47 -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 1vziTw-0000wg-5q for qemu-devel@nongnu.org; Mon, 09 Mar 2026 17:49:44 -0400 Received: from mail-dy1-x132b.google.com ([2607:f8b0:4864:20::132b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1vziTu-0002FF-1B for qemu-devel@nongnu.org; Mon, 09 Mar 2026 17:49:43 -0400 Received: by mail-dy1-x132b.google.com with SMTP id 5a478bee46e88-2be4781d2baso8408142eec.0 for ; Mon, 09 Mar 2026 14:49:41 -0700 (PDT) Received: from 192.168.0.29 ([2804:14d:4c71:86dd:4cc9:ee1b:bd8d:dbab]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2be4f96f25bsm10519495eec.28.2026.03.09.14.49.38 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Mon, 09 Mar 2026 14:49:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1773092980; x=1773697780; 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=iSPh/+vq5xols2V8eYLNVaZ56CQbQABrVTIm10x7/7Y=; b=Gl3LFUQ3jwuFwBTz5t8hVuO7SLsGi00IXpWPKK6bD7TdhuqjQjX2cMD5V0sclQl3Ha dU/sd2JL+GkhzMaT64oLVWJ8JREdW+7UoymPCYzcl+BED4Ogjg5LQnUgQlsVjJizxw7B KiB7HCh1Pz2+jhswc0ZmJu02EZ/eQt/pz0+GU5O+Jo0R7ErqVozVD2PrwbN3vGl8R52g sbnekUl8kHt74KRHnZZFUNAyHVdhLkoox75Oexm9bhIGVv9ApUeIBqWd4RouUmeCIyjN zpFwhXsHnwLk10DC3AuWqiAy1/gdnJZNKA8YbPRWpqWHN/CvRLlL93rT13c2s5QZ/4Fv Pz+A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773092980; x=1773697780; 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=iSPh/+vq5xols2V8eYLNVaZ56CQbQABrVTIm10x7/7Y=; b=XrzWecxCrwsPI+ZRGSXn0gJzzg7AaHXdASlJSO7yjgA59jBAds0qTqH260QogHQjQJ XGDTV9eiCrpK70+Ov3eLnuk4nHm644RydCTR+nYM1r3CMc8n5LwZ6v6mHUEq7M4qTyAY kOqMvBEC/4XMDF8ye98KsuO3Wa0xstZf70yUjTgwAfjhjpjQACJqEXP0iYg2fFWFlTiS oqv4bI/lnweRnM3yyV2jjBtIYRR4FxFg7FxSV0tlEkRLW0sD1oG9x+GJtHWsVmpUnuIU DiVzQvilE0yO4fdiSEFAXj0JVAXYxlvjkS49JFdMHAnH4Kj/oQ/9elSt3krkJcJjtYG1 WgbA== X-Gm-Message-State: AOJu0Yw8WIY0tj/4r1DjgvuBJX8qp7fPG+9Cp3PdhM5c7yFUYjQyhpZ5 ZF+/Tn85SjmisuYCSuWxhoP2XDQZAX9urMCFIEViQAujphApYa3t4NyF7i8UkVAi X-Gm-Gg: ATEYQzyJy14xca+Uq69i5QnxFlzoMIFarrzCo5Ax65XzJwWW9echR/fqkGAb60y+b+Q f22vRsXkWBqccJw/LVdZ2aAV+IFMCQP34yYHN3vxTpTVYf0SYi7oL8E/Z3YIY8e99J/p1chQIVg gKbNij7ByDhz/qZvsnRVqwnenEoguRzgc7zCYFyXsyiUupAMjfunZSmfLJYlzK9oPdEvVC0Wcj5 xFNEgARBE/RojFmecz9c8orapfDvjHCrv3rD50O+rKNgZVctKG0/DMmyfiUozA3ige0lpMdpyAa /NldvT1tOvPP6WWTBMXuk1WJzLIVOUX/bK/XC68SNjcUOfQ6Euq2G2ygGxfih8/Hf5LWnZDsqdt MreeSlI0QfgMxispagOCfEHlyfojSJus7cd7JigeKi17Lk9YUy9A16E2kRqLulmEfs7RKp4f67q 6sY2JAud1xPC1lkIv4EBzwIwv3rgqdAfMVoeUgXFHeV2y0IylT7rDujys+9omIM4PAv22bvA== X-Received: by 2002:a05:7300:e619:b0:2be:22e9:2178 with SMTP id 5a478bee46e88-2be4dff6135mr5235592eec.17.1773092980210; Mon, 09 Mar 2026 14:49:40 -0700 (PDT) From: Lucas Amaral To: qemu-devel@nongnu.org Cc: alex.bennee@linaro.org, dmitry.osipenko@collabora.com, Lucas Amaral Subject: [PATCH 2/3] virtio-gpu: decouple Venus from CONFIG_OPENGL Date: Mon, 9 Mar 2026 18:49:29 -0300 Message-ID: <20260309214930.92616-3-lucaaamaral@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260309214930.92616-1-lucaaamaral@gmail.com> References: <20260309214930.92616-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::132b; envelope-from=lucaaamaral@gmail.com; helo=mail-dy1-x132b.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-Mailman-Approved-At: Mon, 09 Mar 2026 18:16:41 -0400 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: 1773094689573158500 Content-Type: text/plain; charset="utf-8" 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 Introduce GRAPHIC_FLAGS_VK (bit 2) in the console flags for future Vulkan scanout support alongside the existing GL and DMABUF paths. Gate Venus at device realize when the HVF map granule exceeds the guest page size; this ensures blob mappings succeed at runtime. Signed-off-by: Lucas Amaral --- hw/display/meson.build | 8 ++-- hw/display/virtio-gpu-base.c | 8 +++- hw/display/virtio-gpu-gl.c | 17 ++++++- hw/display/virtio-gpu-virgl.c | 89 ++++++++++++++++++++++++++++++----- include/ui/console.h | 2 + ui/console.c | 7 +++ 6 files changed, 114 insertions(+), 17 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..faee6dc 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,11 @@ 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 */ + } + + if (virtio_gpu_virgl_enabled(g->conf) && display_opengl) { flags |=3D GRAPHIC_FLAGS_GL; } =20 @@ -257,6 +262,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..e55fe87 100644 --- a/hw/display/virtio-gpu-gl.c +++ b/hw/display/virtio-gpu-gl.c @@ -17,6 +17,8 @@ #include "qemu/error-report.h" #include "qapi/error.h" #include "system/system.h" +#include "system/hvf.h" +#include "exec/target_page.h" #include "hw/virtio/virtio.h" #include "hw/virtio/virtio-gpu.h" #include "hw/virtio/virtio-gpu-bswap.h" @@ -133,7 +135,18 @@ static void virtio_gpu_gl_device_realize(DeviceState *= qdev, Error **errp) return; } =20 - if (!display_opengl) { + if (virtio_gpu_venus_enabled(g->parent_obj.conf)) { + /* Venus renders via Vulkan -- no GL display needed */ + uint64_t map_gran =3D hvf_get_map_granule(); + if (map_gran > qemu_target_page_size()) { + error_report("Venus disabled: host map granule (%zu) > guest " + "page size (%zu). Requires macOS 26+ or guest " + "F_BLOB_ALIGNMENT support.", + (size_t)map_gran, qemu_target_page_size()); + g->parent_obj.conf.flags &=3D + ~(1 << VIRTIO_GPU_FLAG_VENUS_ENABLED); + } + } else if (!display_opengl) { error_setg(errp, "The display backend does not have OpenGL support enabl= ed"); error_append_hint(errp, @@ -217,4 +230,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..826d6d7 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,45 @@ 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 -- it's a 2D software resource */ + virtio_gpu_simple_process_cmd(g, cmd); + return; + } + break; /* virglrenderer owns it -- fall through */ + } + default: + break; + } + } + virgl_renderer_force_ctx_0(); switch (cmd->cmd_hdr.type) { case VIRTIO_GPU_CMD_CTX_CREATE: @@ -1169,6 +1220,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 +1232,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,22 +1286,26 @@ 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 + /* Vulkan: Venus capset (gated at device realize if needed) */ if (virtio_gpu_venus_enabled(g->parent_obj.conf)) { virgl_renderer_get_cap_set(VIRTIO_GPU_CAPSET_VENUS, &capset_max_ver, &capset_max_size); if (capset_max_size) { - virtio_gpu_virgl_add_capset(capset_ids, VIRTIO_GPU_CAPSET_VENU= S); + virtio_gpu_virgl_add_capset(capset_ids, + VIRTIO_GPU_CAPSET_VENUS); } } =20 diff --git a/include/ui/console.h b/include/ui/console.h index 98feaa5..fa7fdec 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, + /* 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..d53dc10 100644 --- a/ui/console.c +++ b/ui/console.c @@ -594,6 +594,13 @@ static bool console_compatible_with(QemuConsole *con, return false; } =20 + if (flags & GRAPHIC_FLAGS_VK) { + error_setg(errp, + "The console requires Vulkan scanout " + "(not yet implemented)."); + return false; + } + return true; } =20 --=20 2.52.0 From nobody Sat Apr 11 21:30:21 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=1773094644; cv=none; d=zohomail.com; s=zohoarc; b=VrlWgL1+0lh4pOWcm4fXPyBBtGoJrepaU2SvU/ieIL21bD7ZFm4IQ4/SqNhYOoEq8swfQblV7mabrqCB1RgNKTY7GP72M2/3y+FXWiWvqd/6q5EKgYSZU22LpNb4Od/eiJkFZjLtMktLwcBlIaGLr5j4l0VOzLEEgqJHG6b+6UU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1773094644; 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=aRy630b/C64TmInOG+Y7NIlU7vA0v8fJC7yC/ESuVdk=; b=cv+NOhFRbE9cATU/LRmRH9zShpQf/unu2KwEgqTP53BIlkLcrr4ml2+nxBA00GFTvxlSzT+2p1InmpEOlfQaTlsvFElmKq4j85809krc1CKFEq7+hrjx3rTgCH758Nh4aUN7mgStP7r7YjIxsVHSFNfCwle+5hOFPLws1OfOFBo= 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 1773094644959983.2817575253307; Mon, 9 Mar 2026 15:17:24 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vziu3-0003Ly-3w; Mon, 09 Mar 2026 18:16:43 -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 1vziTx-0000wp-Lv for qemu-devel@nongnu.org; Mon, 09 Mar 2026 17:49:45 -0400 Received: from mail-dy1-x1330.google.com ([2607:f8b0:4864:20::1330]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1vziTw-0002FT-8T for qemu-devel@nongnu.org; Mon, 09 Mar 2026 17:49:45 -0400 Received: by mail-dy1-x1330.google.com with SMTP id 5a478bee46e88-2bdd40d3c61so10445468eec.1 for ; Mon, 09 Mar 2026 14:49:43 -0700 (PDT) Received: from 192.168.0.29 ([2804:14d:4c71:86dd:4cc9:ee1b:bd8d:dbab]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2be4f96f25bsm10519495eec.28.2026.03.09.14.49.40 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Mon, 09 Mar 2026 14:49:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1773092983; x=1773697783; 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=aRy630b/C64TmInOG+Y7NIlU7vA0v8fJC7yC/ESuVdk=; b=YvlN6qs0SDfPVLCJEIqgzUYCdU3hJgrUpbAxH/Ubeoubp9QdZIDoVJs7opOD20K4nR /5umZ1Ak7Lfm0HYynL9svjZzWQo8NjaBxXzB1ruPLKgUHsfW2/tzZHHqO8gneQk7SJEr qMTpOnxR2D6fDVbP3069xOBqWgbkVYBKk4EfauhTae+dvvjhyL5Fbat0IAHu6FzcYM5J jnsRSpDLe9qr4qWcmnCNNK3hMdmNTUQsFQEGvZJ77shqNjPEqrDHShT0kun1ym70UZN7 fjG+8QiQEMSjQieQUrWxKDJ3BZGLf6HFAs0CCiBy5SWg8g5xl1JztYKvvZvBZkgRUMhd l/kA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773092983; x=1773697783; 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=aRy630b/C64TmInOG+Y7NIlU7vA0v8fJC7yC/ESuVdk=; b=fuhFAvVvBEkMeNDjyPoTf45M2C08wXJADGHPM+ar1aEIJ+QvyKSaWPpe8PmzgLA9JW T+SuCMcrgyu/2eZCT6s1/5U2NwK/tgRljBMpQYUCRCWvHLMFyk5fmFXye/ESMjgwGQOL unGGx4iVPfxb2iPqEC/p8E2oeBbcBEC2gX2OgQz1BkbY+Bzi7EQLjO7zoX0TAGHW1grK vBjSx8csMRfuPw+4r9JdOSFiS/amwV48RTsHiK22oifADJvZ/ITtIMNqdb0dPIadLqTt Suea6M4ODCM6SmiAngxHCLSvnEl7sLYULs2FvqsitSVab4OeIdvGKvPKEdCG+f+a6zn6 oUSg== X-Gm-Message-State: AOJu0YzEQseUfqRB96QEI9Noj81oUaA18zoFXnRjsrp7qCgkxqm2R5KD U85PQMm0HW2aKQgIRWajgkfk6tOHBygTR0lYFhyai1cquTXvhtVzbqHhOertu5/i X-Gm-Gg: ATEYQzzuzXXPlBTnev4Jx7nVexvsvUgtnRDNsbpk34SrVKe4MkaRN7xS6iGsnywnSWr t0lrJA22WVLPtenKYKZHFCSEGCibEsrG6IHm9WwGuaMKtOBuzclMNj1EwrOdKyJvfuyrHk9nCPH LAFd0mewLXqSOW1p/x9bFWcGjl6KSPPnszjEHcnW6Sq8fEwLlrQJWAHZ7+nJ8V9rRH4JCf10NEN IQbQ8VeRf4Xpnu47o5Rd2QIu0OtASH6Rv7XY7Vtv6VOlYlJ21s+qS3hTi5/N+/cKMbHYZ34uWdS kiG8Rq4j/MzsxNVZ7SLc1pDuhSRTHvkIRC8gZMGlJVWbommGDZmKj5KJW8dkclUdo+A7qAFt9me o5fYtfOyXlAqIvEN1AaqFotT4PfEr/EOfLDIWzgf25GgPDG0Bf70jR+J9z6Q8VNp0wlWsQguwKV mWZdlUzx8B42cHq/+w4tCZdyPCKFEsCJgKUrEmnvTkVDyBq8L7TogJIcJcxXl0Kwel5biMDQ== X-Received: by 2002:a05:7300:6da2:b0:2ba:8018:cc62 with SMTP id 5a478bee46e88-2be4e0abd99mr5516246eec.38.1773092982586; Mon, 09 Mar 2026 14:49:42 -0700 (PDT) From: Lucas Amaral To: qemu-devel@nongnu.org Cc: alex.bennee@linaro.org, dmitry.osipenko@collabora.com, Lucas Amaral Subject: [PATCH 3/3] virtio-gpu: advertise and populate blob alignment Date: Mon, 9 Mar 2026 18:49:30 -0300 Message-ID: <20260309214930.92616-4-lucaaamaral@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260309214930.92616-1-lucaaamaral@gmail.com> References: <20260309214930.92616-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::1330; envelope-from=lucaaamaral@gmail.com; helo=mail-dy1-x1330.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-Mailman-Approved-At: Mon, 09 Mar 2026 18:16:41 -0400 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: 1773094647252158500 Content-Type: text/plain; charset="utf-8" Set blob_alignment in the device configuration 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). Uses VIRTIO_GPU_F_BLOB_ALIGNMENT defined in the preceding header patch, and advertised via the feature bit in get_features. Signed-off-by: Lucas Amaral --- hw/display/virtio-gpu.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/hw/display/virtio-gpu.c b/hw/display/virtio-gpu.c index 643e91c..15e8be0 100644 --- a/hw/display/virtio-gpu.c +++ b/hw/display/virtio-gpu.c @@ -1517,6 +1517,13 @@ void virtio_gpu_device_realize(DeviceState *qdev, Er= ror **errp) #endif } =20 + /* + * Advertise blob alignment so the guest kernel can align BAR offsets. + * Guest-side F_BLOB_ALIGNMENT support pending upstream Linux merge. + */ + 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, --=20 2.52.0