From nobody Thu Oct 08 08:44:43 2026 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4j0k7v4pysz6vJ44 for ; Thu, 08 Oct 2026 08:44:43 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "YR2" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4j0k7v4Jpfz3Cdy for ; Thu, 08 Oct 2026 08:44:43 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1791449083; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=geCql3NbJ4QR8L7hES4Wd1bdcSDDhBW/1cU9Tnhap8E=; b=Y5rqkAqMWtBU3f2WRsID0x2qzKvtqU6macMrHWRcFktvJbZi8RabwsWrIo9V9KaMCB1+9S H+ToyvE8P3Et20BTawUNGkZQwstOIX3K4gUHUZsujZsvYy4QfEsrwzZJZVGygYlabx+g8c cMYjVY/jGJpV+GalU/wAZn6K2gQ8dGHZgPT7rTja3IY8+S6iGY8PDdOdE1S8emK6s1a5wS 5otKU2X2Md6Zg6W+iy+xjhKk19gm4SggYCTs+188TKsgRMpDJmP4uLzoVoT6/+S9LrTquu q5umdjIBG8tIkF7lAcoY4vdKoH0dvKvd65WS55LrlXrd7vqLYXnnCQIDf/jDVA== ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1791449083; b=W5pi9jOMH5KkICM2u2aacBIi5Gugx2rHBul1TIfravwWlIPXRZMqdDO6tixnP0ECM1pfhs esIqGG6XAm9TXphVnJ+LHezhgVQGia1LWM67v1DZM4jqCogq2SI7HPMsDNYKLd5Kv1WXvv +lPr+xNGgDOvVrp8E5WC8KPJecagI7iVEXavK+eAJ5bETx+KHWl9yskR8z5v+nfZgUemCQ rnMlDzyKj4e6IKvtVn2O/hljnoLXDHAbOoVluoYpccMoadW2jEIT+j2jtbXlZ0lVOBkwNv Yi782n6SiS/yI4JJxas4blwTwUGtQ+r0F7PgOnpsdEldLHuPO3fhA2cALhv8yA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1791449083; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=geCql3NbJ4QR8L7hES4Wd1bdcSDDhBW/1cU9Tnhap8E=; b=JsmPNZ2QupxNydkp6jKY7HnCdJTTrcKOu9IzvJ5+j9v+TxT94t1Ry6MD4qom8DuVeYJYWZ GdaWmGhoAsRdnvpw7R1IVfBY18F2P2IBW4Zt11Bx0S/Lfy7S6gghICUrEh4HEmKMXzRmrB S37qLrVWEJP2Y3aAvf+MmMPGCMRUzYCvqLvBpfYtypmOHP6f/IO+pltuTKTKhYj9yYoiWu meAzXSAM70OnfyfVh3oVI4yHlVxH9yGDjWYfXD+wlZk2EmM3lHqjlG3ZruZxzJzC6UdBJx EGG92QQiUGEo3odWaHhL9t7HHO2ESccEpDTK8e+zTO41Uhtw+UGFYV23ppZZ1w== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4j0k7v3588zY05 for ; Thu, 08 Oct 2026 08:44:43 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 25608 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Thu, 08 Oct 2026 08:44:43 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Piotr Kubaj Subject: git: 7cf02164a517 - main - virtio_gpu: use an X8R8G8B8 resource on big-endian guests List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: pkubaj X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 7cf02164a517824c07faed91c009be90f2f17ec0 Auto-Submitted: auto-generated Date: Thu, 08 Oct 2026 08:44:43 +0000 Message-Id: <6ac757fb.25608.7d76bd44@gitrepo.freebsd.org> The branch main has been updated by pkubaj: URL: https://cgit.FreeBSD.org/src/commit/?id=7cf02164a517824c07faed91c009be90f2f17ec0 commit 7cf02164a517824c07faed91c009be90f2f17ec0 Author: Piotr Kubaj AuthorDate: 2026-09-28 08:43:35 +0000 Commit: Piotr Kubaj CommitDate: 2026-10-08 08:44:06 +0000 virtio_gpu: use an X8R8G8B8 resource on big-endian guests The virtio-gpu resource formats are defined by byte order in memory, while vt(4) and the X server (through vt_fb and the fb mmap) write native 32-bit 0x00RRGGBB pixels into the shadow framebuffer. On a big-endian guest such as powerpc64 those pixels land in memory as 00 RR GG BB, which the host interprets under B8G8R8X8 with red and blue swapped and the padding byte taken as blue: white renders yellow and blue renders black. Request X8R8G8B8 on big-endian guests instead, which is also what the Linux driver does (DRM_FORMAT_HOST_XRGB8888). Reproduced with a colour test pattern on a powerpc64 QEMU pseries guest using the identically coded out-of-tree fork of this driver (graphics/virtio-gpu-qemu-kmod); little-endian guests are unchanged. Differential Revision: https://reviews.freebsd.org/D60085 Approved by: jhibbits MFC after: 1 week --- sys/dev/virtio/gpu/virtio_gpu.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/sys/dev/virtio/gpu/virtio_gpu.c b/sys/dev/virtio/gpu/virtio_gpu.c index b95bae9fe286..2cbfc472909c 100644 --- a/sys/dev/virtio/gpu/virtio_gpu.c +++ b/sys/dev/virtio/gpu/virtio_gpu.c @@ -61,6 +61,12 @@ /* The guest can allocate resource IDs, we only need one */ #define VTGPU_RESOURCE_ID 1 +#if _BYTE_ORDER == _BIG_ENDIAN +#define VTGPU_FORMAT VIRTIO_GPU_FORMAT_X8R8G8B8_UNORM +#else +#define VTGPU_FORMAT VIRTIO_GPU_FORMAT_B8G8R8X8_UNORM +#endif + struct vtgpu_softc { /* Must be first so we can cast from info -> softc */ struct fb_info vtgpu_fb_info; @@ -556,7 +562,7 @@ vtgpu_create_2d(struct vtgpu_softc *sc) atomic_fetchadd_64(&sc->vtgpu_next_fence, 1)); s.req.resource_id = htole32(VTGPU_RESOURCE_ID); - s.req.format = htole32(VIRTIO_GPU_FORMAT_B8G8R8X8_UNORM); + s.req.format = htole32(VTGPU_FORMAT); s.req.width = htole32(sc->vtgpu_fb_info.fb_width); s.req.height = htole32(sc->vtgpu_fb_info.fb_height);