From nobody Fri Nov 14 18:20:09 2025 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=jablonski.xyz ARC-Seal: i=1; a=rsa-sha256; t=1762141046; cv=none; d=zohomail.com; s=zohoarc; b=U9NEWIax/XbHI8EJX6QBlczhfLPXlPIBTzLYHx4yZ4CSFX/law56ZtT2rzbOlByCW/hNV0yJSKCACQ16pxhza3z/zqGs9GIAmA1jMHtAhzHj57pvOyULUb8vaVX1bqYs2pyk29VhufC+al9sDGHBpy+A22Kbu0NPL83473lKPZE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1762141046; 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=X51JYdqovByw+iWifxRgLEf3MHGDJowVU8SgOzqIV1Y=; b=A675jbjgEK5D96Lryy/6m7ohl7zxS/pxNx88XgFPTFvX20bg0L+hfGWRtlkCmmBYAdOYvut5MfsKWaCtK+CuLZxLhRI7uwbwkoBpAVIFt98G10mdYvpq36Ys5KKqn2hca3AU84PHMEEvMKKG8c9wWi7hOdS9G3S4lkIPY9Y2Zt0= 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 1762141046641155.36816993715604; Sun, 2 Nov 2025 19:37:26 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vFlMy-0005hO-1w; Sun, 02 Nov 2025 22:36:36 -0500 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 1vFlMt-0005gk-Od for qemu-devel@nongnu.org; Sun, 02 Nov 2025 22:36:32 -0500 Received: from fhigh-a2-smtp.messagingengine.com ([103.168.172.153]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vFlMp-0007zk-B8 for qemu-devel@nongnu.org; Sun, 02 Nov 2025 22:36:30 -0500 Received: from phl-compute-02.internal (phl-compute-02.internal [10.202.2.42]) by mailfhigh.phl.internal (Postfix) with ESMTP id 0407414000DE; Sun, 2 Nov 2025 22:36:26 -0500 (EST) Received: from phl-mailfrontend-02 ([10.202.2.163]) by phl-compute-02.internal (MEProxy); Sun, 02 Nov 2025 22:36:26 -0500 Received: by mail.messagingengine.com (Postfix) with ESMTPA; Sun, 2 Nov 2025 22:36:24 -0500 (EST) Received: from localhost (chomposaur [local]) by chomposaur (OpenSMTPD) with ESMTPA id a6ea2445; Mon, 3 Nov 2025 03:36:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=jablonski.xyz; h=cc:cc:content-transfer-encoding:content-type:date:date:from :from:in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to; s=fm2; t=1762140986; x= 1762227386; bh=X51JYdqovByw+iWifxRgLEf3MHGDJowVU8SgOzqIV1Y=; b=H t3FZinqSMJ7m6LAppBVkFUW1P+BJue4tFpqHJwQsUF8Dc+kY1z8pXw2or3hlRTBL 5YguVmuRQu+zSPAdN6pE8io12084znlYlWwNisOiur3nc7a8iJqdPJaKKvi2oWx+ bsd0X/8JOzz1fF4Ln0X5++bswK8pQ4IHUc4TLYRyfjL5UNM3dTZ1VE9NDI2Rge+S PCjDgs0Ye287y/CkGKJ/P6NoSZSG5bQpbOf87mU4oSYv0DEPGfWzRuwRKhsU8keK 9OjZ3TuFOXkBlykKKbm8ge29LmEDo3sGYBUVq9z97v1JvheOHY582HUjpGpG3HkZ cd00Wr/ncDiSs0/Sf5H/A== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:date:date:feedback-id:feedback-id:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to:x-me-proxy:x-me-sender :x-me-sender:x-sasl-enc; s=fm3; t=1762140986; x=1762227386; bh=X 51JYdqovByw+iWifxRgLEf3MHGDJowVU8SgOzqIV1Y=; b=n12BUe2FF26Ddzp1E Ne4uotxhdC4h+glbpQh+qe0CFp4eZhKmZd2tq7KBx+VdoPk/ZFcao78UwoDP35SJ u3M0toqiEBf3S/om0gHh5Qtj7oSlLNwdu8A52TIeRYzbY7/try5+a9vRIzDbxqOc yz2tvoc/bw0ngl1Sb8WYSRJkTjStcoglTNQ0MdiyxcTe7YmSa2K3lnnx5QddLtJS /+V16IwQ+9SvXb3ltARhV5KM/TH/dS+KelzBUAO+ole5m7ybAD6sf5FT8UW6RpZf SgwprXPZRzPUcykRpIBF62Yqc9cLMFl+2CYzO4NmNShZJe2EOw6axIUuPEQrMOz8 wjjeQ== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeffedrtdeggddujeejtdejucetufdoteggodetrf dotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfurfetoffkrfgpnffqhgenuceu rghilhhouhhtmecufedttdenucgfrhhlucfvnfffucdljedtmdenucfjughrpefhvfevuf ffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpeevhhgrugculfgrsghlohhnshhk ihcuoegthhgrugesjhgrsghlohhnshhkihdrgiihiieqnecuggftrfgrthhtvghrnhepgf eiteejhfelheefieetjefgleejfffhueffvdduieejgfeuueeuvddvkeejhfelnecuvehl uhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomheptghhrggusehjrg gslhhonhhskhhirdighiiipdhnsggprhgtphhtthhopeefpdhmohguvgepshhmthhpohhu thdprhgtphhtthhopegsrghlrghtohhnsegvihhkrdgsmhgvrdhhuhdprhgtphhtthhope gthhgrugesjhgrsghlohhnshhkihdrgiihiidprhgtphhtthhopehqvghmuhdquggvvhgv lhesnhhonhhgnhhurdhorhhg X-ME-Proxy: Feedback-ID: ib26944c1:Fastmail From: Chad Jablonski To: qemu-devel@nongnu.org Cc: balaton@eik.bme.hu, Chad Jablonski Subject: [PATCH v2 1/7] ati-vga: Add scissor clipping register support Date: Sun, 2 Nov 2025 22:36:02 -0500 Message-ID: <20251103033608.120908-2-chad@jablonski.xyz> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251103033608.120908-1-chad@jablonski.xyz> References: <20251103033608.120908-1-chad@jablonski.xyz> 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=103.168.172.153; envelope-from=chad@jablonski.xyz; helo=fhigh-a2-smtp.messagingengine.com X-Spam_score_int: -22 X-Spam_score: -2.3 X-Spam_bar: -- X-Spam_report: (-2.3 / 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, FROM_SUSPICIOUS_NTLD=0.499, PDS_OTHER_BAD_TLD=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, UNPARSEABLE_RELAY=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: 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 @jablonski.xyz) X-ZM-MESSAGEID: 1762141052572158501 Content-Type: text/plain; charset="utf-8" Implement read and write operations on SC_TOP_LEFT, SC_BOTTOM_RIGHT, and SRC_SC_BOTTOM_RIGHT registers. These registers are also updated when the src and/or dst clipping fields on DP_GUI_MASTER_CNTL are set to default clipping. Scissor clipping is used when rendering text in X.org. The r128 driver sends host data much wider than is necessary to draw a glyph and cuts it down to size using clipping before rendering. The actual clipping implementation follows in a future patch. Signed-off-by: Chad Jablonski --- hw/display/ati.c | 26 ++++++++++++++++++++++++++ hw/display/ati_int.h | 3 +++ hw/display/ati_regs.h | 12 ++++++++++-- 3 files changed, 39 insertions(+), 2 deletions(-) diff --git a/hw/display/ati.c b/hw/display/ati.c index 0b4298d078..eb9b30672f 100644 --- a/hw/display/ati.c +++ b/hw/display/ati.c @@ -510,6 +510,15 @@ static uint64_t ati_mm_read(void *opaque, hwaddr addr,= unsigned int size) case DEFAULT_SC_BOTTOM_RIGHT: val =3D s->regs.default_sc_bottom_right; break; + case SC_TOP_LEFT: + val =3D s->regs.sc_top_left; + break; + case SC_BOTTOM_RIGHT: + val =3D s->regs.sc_bottom_right; + break; + case SRC_SC_BOTTOM_RIGHT: + val =3D s->regs.src_sc_bottom_right; + break; default: break; } @@ -862,6 +871,14 @@ static void ati_mm_write(void *opaque, hwaddr addr, s->regs.dp_datatype =3D (data & 0x0f00) >> 8 | (data & 0x30f0) << = 4 | (data & 0x4000) << 16; s->regs.dp_mix =3D (data & GMC_ROP3_MASK) | (data & 0x7000000) >> = 16; + + if ((data & GMC_SRC_CLIPPING_MASK) =3D=3D GMC_SRC_CLIP_DEFAULT) { + s->regs.src_sc_bottom_right =3D s->regs.default_sc_bottom_righ= t; + } + if ((data & GMC_DST_CLIPPING_MASK) =3D=3D GMC_DST_CLIP_DEFAULT) { + s->regs.sc_top_left =3D 0; + s->regs.sc_bottom_right =3D s->regs.default_sc_bottom_right; + } break; case DST_WIDTH_X: s->regs.dst_x =3D data & 0x3fff; @@ -937,6 +954,15 @@ static void ati_mm_write(void *opaque, hwaddr addr, case DEFAULT_SC_BOTTOM_RIGHT: s->regs.default_sc_bottom_right =3D data & 0x3fff3fff; break; + case SC_TOP_LEFT: + s->regs.sc_top_left =3D data; + break; + case SC_BOTTOM_RIGHT: + s->regs.sc_bottom_right =3D data; + break; + case SRC_SC_BOTTOM_RIGHT: + s->regs.src_sc_bottom_right =3D data; + break; default: break; } diff --git a/hw/display/ati_int.h b/hw/display/ati_int.h index 708cc1dd3a..aab3cbf81a 100644 --- a/hw/display/ati_int.h +++ b/hw/display/ati_int.h @@ -86,6 +86,9 @@ typedef struct ATIVGARegs { uint32_t default_pitch; uint32_t default_tile; uint32_t default_sc_bottom_right; + uint32_t sc_top_left; + uint32_t sc_bottom_right; + uint32_t src_sc_bottom_right; } ATIVGARegs; =20 struct ATIVGAState { diff --git a/hw/display/ati_regs.h b/hw/display/ati_regs.h index d7127748ff..2b56b9fb66 100644 --- a/hw/display/ati_regs.h +++ b/hw/display/ati_regs.h @@ -392,8 +392,6 @@ /* DP_GUI_MASTER_CNTL bit constants */ #define GMC_SRC_PITCH_OFFSET_CNTL 0x00000001 #define GMC_DST_PITCH_OFFSET_CNTL 0x00000002 -#define GMC_SRC_CLIP_DEFAULT 0x00000000 -#define GMC_DST_CLIP_DEFAULT 0x00000000 #define GMC_BRUSH_SOLIDCOLOR 0x000000d0 #define GMC_SRC_DSTCOLOR 0x00003000 #define GMC_BYTE_ORDER_MSB_TO_LSB 0x00000000 @@ -404,6 +402,16 @@ #define GMC_WRITE_MASK_SET 0x40000000 #define GMC_DP_CONVERSION_TEMP_6500 0x00000000 =20 +/* DP_GUI_MASTER_CNTL DP_SRC_CLIPPING named constants */ +#define GMC_SRC_CLIPPING_MASK 0x00000004 +#define GMC_SRC_CLIP_DEFAULT 0x00000000 +#define GMC_SRC_CLIP_LEAVE_ALONE 0x00000004 + +/* DP_GUI_MASTER_CNTL DP_DST_CLIPPING named constants */ +#define GMC_DST_CLIPPING_MASK 0x00000008 +#define GMC_DST_CLIP_DEFAULT 0x00000000 +#define GMC_DST_CLIP_LEAVE_ALONE 0x00000008 + /* DP_GUI_MASTER_CNTL ROP3 named constants */ #define GMC_ROP3_MASK 0x00ff0000 #define ROP3_BLACKNESS 0x00000000 --=20 2.51.0 From nobody Fri Nov 14 18:20:09 2025 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=jablonski.xyz ARC-Seal: i=1; a=rsa-sha256; t=1762141074; cv=none; d=zohomail.com; s=zohoarc; b=EWHDt/ydANxI5LnYKGsfGDlw34T7wzm1F3Gs6KL5O8VWQVZtx3ZpvA9f5YJiP5fuMzxp2TU3JuLO5PVbnBFPlBoAXJZZDXWoivFTho/ML1zAMqGuTIpPmXc28LW76ml4IHLY/l8XZACaVuWlAoCUSVItC9j2C7rXHTGDSWds66Q= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1762141074; 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=m7/gSqkrl4qiV54DHQbt4j8b8/fA1lOSRNC5xgZHF2s=; b=YF5jIn5QxY9t5ur/guaeaMFarXABWij2T5/L3V76xtDOXggqCAc6pPG0Wztx2xK2Fs9882bWVxu+1Vj0JwbkLxFfYRRCOL4LUrnohy3T8jgyEJmNmDEmeMZxu22MTD2faacsVHlPUa64z3xSFQqQGERAvPkSFnd5dTPO4lHHV7s= 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 1762141074387117.59661092488238; Sun, 2 Nov 2025 19:37:54 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vFlN1-0005je-MJ; Sun, 02 Nov 2025 22:36:39 -0500 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 1vFlMw-0005hL-8v for qemu-devel@nongnu.org; Sun, 02 Nov 2025 22:36:35 -0500 Received: from fhigh-a2-smtp.messagingengine.com ([103.168.172.153]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vFlMq-000806-EH for qemu-devel@nongnu.org; Sun, 02 Nov 2025 22:36:33 -0500 Received: from phl-compute-01.internal (phl-compute-01.internal [10.202.2.41]) by mailfhigh.phl.internal (Postfix) with ESMTP id 9EBA614000F6; Sun, 2 Nov 2025 22:36:26 -0500 (EST) Received: from phl-mailfrontend-01 ([10.202.2.162]) by phl-compute-01.internal (MEProxy); Sun, 02 Nov 2025 22:36:26 -0500 Received: by mail.messagingengine.com (Postfix) with ESMTPA; Sun, 2 Nov 2025 22:36:25 -0500 (EST) Received: from localhost (chomposaur [local]) by chomposaur (OpenSMTPD) with ESMTPA id 3e8a9378; Mon, 3 Nov 2025 03:36:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=jablonski.xyz; h=cc:cc:content-transfer-encoding:content-type:date:date:from :from:in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to; s=fm2; t=1762140986; x= 1762227386; bh=m7/gSqkrl4qiV54DHQbt4j8b8/fA1lOSRNC5xgZHF2s=; b=h c8ShR7OuhGagaBlMJbmDCktvkfZai+fINPFN73WFfqwv4bu+w2E4MfA4zruiUmE5 c/FKALhZkax7AkFEkbHBsZNF5kgZv4BsMoPqPYhj5XjVuR5jIvQn8K6eLRmHmFFx TVqgOPwZQWZSn11tA2TxumUyNRCQnRuq1iH6XwVeH6TK1VJ2ixYh1FmGk5gaCUXP 4rkhGTG4YBlXPPGwKTyjuxEh13Fsi6qe98KNgwcyjc5F8Cn7+YU+GmBRShVCd+uX 1d7xZlIe4rxH885ASLI2BS3HvZ5baZJWTH07p+t4efx7c1OIS6kL05UNL8fIZl0V Htf2onnL0ZKkvz488irww== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:date:date:feedback-id:feedback-id:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to:x-me-proxy:x-me-sender :x-me-sender:x-sasl-enc; s=fm3; t=1762140986; x=1762227386; bh=m 7/gSqkrl4qiV54DHQbt4j8b8/fA1lOSRNC5xgZHF2s=; b=cCz5jFkFTdmsFQQvh zlGFanMffCMx2OH+3cufwv7rdCzCogYNnssyh3Gg71FKuQpKmh8cAV2dF3g3X00V wLm/anQVujhhSelLGPdO1g9HzM7OyyNeUiUnmCOugf1I+6FEsBP+knFCnQjSOhNf X+K76jvXJ3pH0Mi5rASvXajxwsHE4496pW+WxtgCpDF1CvL7bHzPYxxu7AHYXG1Y 0UenaHmW1JkwzWwxXv8yejhTBPTlcD3rnR1VZ5NGSI0RDHBzAdgrBKpLQs1tLJ2t oRZzQemeMZvcthkFS6rvpyryXQkgfApKMAd4Tkp2MWZsj8dIigkz6MniE+OCuC/X B8liQ== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeffedrtdeggddujeejtdeiucetufdoteggodetrf dotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfurfetoffkrfgpnffqhgenuceu rghilhhouhhtmecufedttdenucgfrhhlucfvnfffucdljedtmdenucfjughrpefhvfevuf ffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpeevhhgrugculfgrsghlohhnshhk ihcuoegthhgrugesjhgrsghlohhnshhkihdrgiihiieqnecuggftrfgrthhtvghrnhepgf eiteejhfelheefieetjefgleejfffhueffvdduieejgfeuueeuvddvkeejhfelnecuvehl uhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomheptghhrggusehjrg gslhhonhhskhhirdighiiipdhnsggprhgtphhtthhopeefpdhmohguvgepshhmthhpohhu thdprhgtphhtthhopegthhgrugesjhgrsghlohhnshhkihdrgiihiidprhgtphhtthhope hqvghmuhdquggvvhgvlhesnhhonhhgnhhurdhorhhgpdhrtghpthhtohepsggrlhgrthho nhesvghikhdrsghmvgdrhhhu X-ME-Proxy: Feedback-ID: ib26944c1:Fastmail From: Chad Jablonski To: qemu-devel@nongnu.org Cc: balaton@eik.bme.hu, Chad Jablonski Subject: [PATCH v2 2/7] ati-vga: Implement scissor rectangle clipping for 2D operations Date: Sun, 2 Nov 2025 22:36:03 -0500 Message-ID: <20251103033608.120908-3-chad@jablonski.xyz> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251103033608.120908-1-chad@jablonski.xyz> References: <20251103033608.120908-1-chad@jablonski.xyz> 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=103.168.172.153; envelope-from=chad@jablonski.xyz; helo=fhigh-a2-smtp.messagingengine.com X-Spam_score_int: -22 X-Spam_score: -2.3 X-Spam_bar: -- X-Spam_report: (-2.3 / 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, FROM_SUSPICIOUS_NTLD=0.499, PDS_OTHER_BAD_TLD=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, UNPARSEABLE_RELAY=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: 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 @jablonski.xyz) X-ZM-MESSAGEID: 1762141076573154100 Content-Type: text/plain; charset="utf-8" Use scissor registers to clip blit operations. This is required for text rendering in X using the r128 driver. Without it overly-wide glyphs are drawn and create all sorts of chaos. Use QemuRect helpers for calculating the intersection of the destination and scissor rectangles. Source coordinates are also updated to reflect clipping. The original destination dimensions are stored in 'dst' while the clipped rectangle is in 'clipped' for clear distinction between the two. Signed-off-by: Chad Jablonski --- hw/display/ati_2d.c | 110 +++++++++++++++++++++++++++----------------- 1 file changed, 69 insertions(+), 41 deletions(-) diff --git a/hw/display/ati_2d.c b/hw/display/ati_2d.c index 309bb5ccb6..15cf29a061 100644 --- a/hw/display/ati_2d.c +++ b/hw/display/ati_2d.c @@ -13,6 +13,7 @@ #include "qemu/log.h" #include "ui/pixel_ops.h" #include "ui/console.h" +#include "ui/rect.h" =20 /* * NOTE: @@ -54,10 +55,35 @@ void ati_2d_blt(ATIVGAState *s) s->vga.vbe_start_addr, surface_data(ds), surface_stride(ds), surface_bits_per_pixel(ds), (s->regs.dp_mix & GMC_ROP3_MASK) >> 16); - unsigned dst_x =3D (s->regs.dp_cntl & DST_X_LEFT_TO_RIGHT ? - s->regs.dst_x : s->regs.dst_x + 1 - s->regs.dst_widt= h); - unsigned dst_y =3D (s->regs.dp_cntl & DST_Y_TOP_TO_BOTTOM ? - s->regs.dst_y : s->regs.dst_y + 1 - s->regs.dst_heig= ht); + + QemuRect dst; + { + unsigned dst_width =3D s->regs.dst_width; + unsigned dst_height =3D s->regs.dst_height; + unsigned dst_x =3D (s->regs.dp_cntl & DST_X_LEFT_TO_RIGHT ? + s->regs.dst_x : s->regs.dst_x + 1 - dst_width); + unsigned dst_y =3D (s->regs.dp_cntl & DST_Y_TOP_TO_BOTTOM ? + s->regs.dst_y : s->regs.dst_y + 1 - dst_height); + qemu_rect_init(&dst, dst_x, dst_y, dst_width, dst_height); + } + + QemuRect scissor; + { + uint16_t sc_left =3D s->regs.sc_top_left & 0x3fff; + uint16_t sc_top =3D (s->regs.sc_top_left >> 16) & 0x3fff; + uint16_t sc_right =3D s->regs.sc_bottom_right & 0x3fff; + uint16_t sc_bottom =3D (s->regs.sc_bottom_right >> 16) & 0x3fff; + qemu_rect_init(&scissor, sc_left, sc_top, + sc_right - sc_left + 1, sc_bottom - sc_top + 1); + } + + QemuRect clipped; + if (!qemu_rect_intersect(&dst, &scissor, &clipped)) { + return; + } + uint32_t clip_left =3D clipped.x - dst.x; + uint32_t clip_top =3D clipped.y - dst.y; + int bpp =3D ati_bpp_from_datatype(s); if (!bpp) { qemu_log_mask(LOG_GUEST_ERROR, "Invalid bpp\n"); @@ -76,17 +102,16 @@ void ati_2d_blt(ATIVGAState *s) dst_stride *=3D bpp; } uint8_t *end =3D s->vga.vram_ptr + s->vga.vram_size; - if (dst_x > 0x3fff || dst_y > 0x3fff || dst_bits >=3D end - || dst_bits + dst_x - + (dst_y + s->regs.dst_height) * dst_stride >=3D end) { + if (clipped.x > 0x3fff || clipped.y > 0x3fff || dst_bits >=3D end + || dst_bits + clipped.x + + (clipped.y + clipped.height) * dst_stride >=3D end) { qemu_log_mask(LOG_UNIMP, "blt outside vram not implemented\n"); return; } DPRINTF("%d %d %d, %d %d %d, (%d,%d) -> (%d,%d) %dx%d %c %c\n", s->regs.src_offset, s->regs.dst_offset, s->regs.default_offset, s->regs.src_pitch, s->regs.dst_pitch, s->regs.default_pitch, - s->regs.src_x, s->regs.src_y, dst_x, dst_y, - s->regs.dst_width, s->regs.dst_height, + s->regs.src_x, s->regs.src_y, dst.x, dst.y, dst.width, dst.hei= ght, (s->regs.dp_cntl & DST_X_LEFT_TO_RIGHT ? '>' : '<'), (s->regs.dp_cntl & DST_Y_TOP_TO_BOTTOM ? 'v' : '^')); switch (s->regs.dp_mix & GMC_ROP3_MASK) { @@ -94,9 +119,11 @@ void ati_2d_blt(ATIVGAState *s) { bool fallback =3D false; unsigned src_x =3D (s->regs.dp_cntl & DST_X_LEFT_TO_RIGHT ? - s->regs.src_x : s->regs.src_x + 1 - s->regs.dst_wid= th); + s->regs.src_x + clip_left : + s->regs.src_x + 1 - dst.width + clip_left); unsigned src_y =3D (s->regs.dp_cntl & DST_Y_TOP_TO_BOTTOM ? - s->regs.src_y : s->regs.src_y + 1 - s->regs.dst_hei= ght); + s->regs.src_y + clip_top : + s->regs.src_y + 1 - dst.height + clip_top); int src_stride =3D DEFAULT_CNTL ? s->regs.src_pitch : s->regs.default_pitch; if (!src_stride) { @@ -112,7 +139,7 @@ void ati_2d_blt(ATIVGAState *s) } if (src_x > 0x3fff || src_y > 0x3fff || src_bits >=3D end || src_bits + src_x - + (src_y + s->regs.dst_height) * src_stride >=3D end) { + + (src_y + clipped.height) * src_stride >=3D end) { qemu_log_mask(LOG_UNIMP, "blt outside vram not implemented\n"); return; } @@ -121,31 +148,31 @@ void ati_2d_blt(ATIVGAState *s) dst_stride /=3D sizeof(uint32_t); DPRINTF("pixman_blt(%p, %p, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d= )\n", src_bits, dst_bits, src_stride, dst_stride, bpp, bpp, - src_x, src_y, dst_x, dst_y, - s->regs.dst_width, s->regs.dst_height); + src_x, src_y, clipped.x, clipped.y, + clipped.width, clipped.height); #ifdef CONFIG_PIXMAN if ((s->use_pixman & BIT(1)) && s->regs.dp_cntl & DST_X_LEFT_TO_RIGHT && s->regs.dp_cntl & DST_Y_TOP_TO_BOTTOM) { fallback =3D !pixman_blt((uint32_t *)src_bits, (uint32_t *)dst= _bits, src_stride, dst_stride, bpp, bpp, - src_x, src_y, dst_x, dst_y, - s->regs.dst_width, s->regs.dst_height); + src_x, src_y, clipped.x, clipped.y, + clipped.width, clipped.height); } else if (s->use_pixman & BIT(1)) { /* FIXME: We only really need a temporary if src and dst overl= ap */ - int llb =3D s->regs.dst_width * (bpp / 8); + int llb =3D clipped.width * (bpp / 8); int tmp_stride =3D DIV_ROUND_UP(llb, sizeof(uint32_t)); uint32_t *tmp =3D g_malloc(tmp_stride * sizeof(uint32_t) * - s->regs.dst_height); + clipped.height); fallback =3D !pixman_blt((uint32_t *)src_bits, tmp, src_stride, tmp_stride, bpp, bpp, src_x, src_y, 0, 0, - s->regs.dst_width, s->regs.dst_height); + clipped.width, clipped.height); if (!fallback) { fallback =3D !pixman_blt(tmp, (uint32_t *)dst_bits, tmp_stride, dst_stride, bpp, bpp, - 0, 0, dst_x, dst_y, - s->regs.dst_width, s->regs.dst_heig= ht); + 0, 0, clipped.x, clipped.y, + clipped.width, clipped.height); } g_free(tmp); } else @@ -158,17 +185,17 @@ void ati_2d_blt(ATIVGAState *s) unsigned int src_pitch =3D src_stride * sizeof(uint32_t); unsigned int dst_pitch =3D dst_stride * sizeof(uint32_t); =20 - for (y =3D 0; y < s->regs.dst_height; y++) { - i =3D dst_x * bypp; + for (y =3D 0; y < clipped.height; y++) { + i =3D clipped.x * bypp; j =3D src_x * bypp; if (s->regs.dp_cntl & DST_Y_TOP_TO_BOTTOM) { - i +=3D (dst_y + y) * dst_pitch; + i +=3D (clipped.y + y) * dst_pitch; j +=3D (src_y + y) * src_pitch; } else { - i +=3D (dst_y + s->regs.dst_height - 1 - y) * dst_pitc= h; - j +=3D (src_y + s->regs.dst_height - 1 - y) * src_pitc= h; + i +=3D (clipped.y + clipped.height - 1 - y) * dst_pitc= h; + j +=3D (src_y + clipped.height - 1 - y) * src_pitch; } - memmove(&dst_bits[i], &src_bits[j], s->regs.dst_width * by= pp); + memmove(&dst_bits[i], &src_bits[j], clipped.width * bypp); } } if (dst_bits >=3D s->vga.vram_ptr + s->vga.vbe_start_addr && @@ -176,13 +203,13 @@ void ati_2d_blt(ATIVGAState *s) s->vga.vbe_regs[VBE_DISPI_INDEX_YRES] * s->vga.vbe_line_offset= ) { memory_region_set_dirty(&s->vga.vram, s->vga.vbe_start_addr + s->regs.dst_offset + - dst_y * surface_stride(ds), - s->regs.dst_height * surface_stride(ds= )); + clipped.y * surface_stride(ds), + clipped.height * surface_stride(ds)); } s->regs.dst_x =3D (s->regs.dp_cntl & DST_X_LEFT_TO_RIGHT ? - dst_x + s->regs.dst_width : dst_x); + clipped.x + clipped.width : clipped.x); s->regs.dst_y =3D (s->regs.dp_cntl & DST_Y_TOP_TO_BOTTOM ? - dst_y + s->regs.dst_height : dst_y); + clipped.y + clipped.height : clipped.y); break; } case ROP3_PATCOPY: @@ -207,20 +234,21 @@ void ati_2d_blt(ATIVGAState *s) =20 dst_stride /=3D sizeof(uint32_t); DPRINTF("pixman_fill(%p, %d, %d, %d, %d, %d, %d, %x)\n", - dst_bits, dst_stride, bpp, dst_x, dst_y, - s->regs.dst_width, s->regs.dst_height, filler); + dst_bits, dst_stride, bpp, clipped.x, clipped.y, + clipped.width, clipped.height, filler); #ifdef CONFIG_PIXMAN if (!(s->use_pixman & BIT(0)) || - !pixman_fill((uint32_t *)dst_bits, dst_stride, bpp, dst_x, dst= _y, - s->regs.dst_width, s->regs.dst_height, filler)) + !pixman_fill((uint32_t *)dst_bits, dst_stride, bpp, + clipped.x, clipped.y, clipped.width, clipped.heig= ht, + filler)) #endif { /* fallback when pixman failed or we don't want to call it */ unsigned int x, y, i, bypp =3D bpp / 8; unsigned int dst_pitch =3D dst_stride * sizeof(uint32_t); - for (y =3D 0; y < s->regs.dst_height; y++) { - i =3D dst_x * bypp + (dst_y + y) * dst_pitch; - for (x =3D 0; x < s->regs.dst_width; x++, i +=3D bypp) { + for (y =3D 0; y < clipped.height; y++) { + i =3D clipped.x * bypp + (clipped.y + y) * dst_pitch; + for (x =3D 0; x < clipped.width; x++, i +=3D bypp) { stn_he_p(&dst_bits[i], bypp, filler); } } @@ -230,11 +258,11 @@ void ati_2d_blt(ATIVGAState *s) s->vga.vbe_regs[VBE_DISPI_INDEX_YRES] * s->vga.vbe_line_offset= ) { memory_region_set_dirty(&s->vga.vram, s->vga.vbe_start_addr + s->regs.dst_offset + - dst_y * surface_stride(ds), - s->regs.dst_height * surface_stride(ds= )); + clipped.y * surface_stride(ds), + clipped.height * surface_stride(ds)); } s->regs.dst_y =3D (s->regs.dp_cntl & DST_Y_TOP_TO_BOTTOM ? - dst_y + s->regs.dst_height : dst_y); + clipped.y + clipped.height : clipped.y); break; } default: --=20 2.51.0 From nobody Fri Nov 14 18:20:09 2025 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=jablonski.xyz ARC-Seal: i=1; a=rsa-sha256; t=1762141048; cv=none; d=zohomail.com; s=zohoarc; b=V+pSWSN1yVgzPrxBg0DQ6aOBwDZWPCITxlP0nHEb5HT3Un+T0LufOyQnqpBj4LweA+uCFJFwCs8E2jKk59QSD+eUVhhWe0puvRNLAV4W/k9fnHyQgNMBJ2NxJj7ZXVKUikd68Fnk5uXeYa26y6mD442HMxdfHhjgTLOcyarT+h8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1762141048; 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=v7NL1eLeuw9MyCVGFnXUdXEFkMix1/iq08tw9mGSZRI=; b=XO9NaZjOK+r8XgOVCTL9gYjndtJ38PLZCtkjWebQDpXmlEOimCZTZHzefGjZN5Pf2lteDVF9gMSFnLzPhUrpcVCi+aClQ3XLv/dAfPpHmgaaGICs7/Z626RwioPkVeVX2Nr6d7n9yMKYDraQXydVZ0HTaN8Xs6y9UO4RIgpasmE= 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 1762141048224348.27822593420694; Sun, 2 Nov 2025 19:37:28 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vFlN0-0005iv-OK; Sun, 02 Nov 2025 22:36:38 -0500 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 1vFlMt-0005gl-PV for qemu-devel@nongnu.org; Sun, 02 Nov 2025 22:36:32 -0500 Received: from fout-a7-smtp.messagingengine.com ([103.168.172.150]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vFlMq-000807-6M for qemu-devel@nongnu.org; Sun, 02 Nov 2025 22:36:31 -0500 Received: from phl-compute-11.internal (phl-compute-11.internal [10.202.2.51]) by mailfout.phl.internal (Postfix) with ESMTP id BF384EC023F; Sun, 2 Nov 2025 22:36:26 -0500 (EST) Received: from phl-mailfrontend-02 ([10.202.2.163]) by phl-compute-11.internal (MEProxy); Sun, 02 Nov 2025 22:36:26 -0500 Received: by mail.messagingengine.com (Postfix) with ESMTPA; Sun, 2 Nov 2025 22:36:26 -0500 (EST) Received: from localhost (chomposaur [local]) by chomposaur (OpenSMTPD) with ESMTPA id e5c42f81; Mon, 3 Nov 2025 03:36:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=jablonski.xyz; h=cc:cc:content-transfer-encoding:content-type:date:date:from :from:in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to; s=fm2; t=1762140986; x= 1762227386; bh=v7NL1eLeuw9MyCVGFnXUdXEFkMix1/iq08tw9mGSZRI=; b=c y3WhyYuLrn+/iwHoiW/fE5JEKOC55PYwEOEOP5R7YVE9v93CeXyQ0quiujP6bc+s pu85wmBwcPOXGxt24+MQ5qHv/aHcDBBC/Ojx8emff1Kglq/m+5zdLcdY1DbnHUnB hULh+clbbcBl1ms6uXUysg2PqgnXG+AbN+TqOhjcoINLrx4nqpCUXdoqGsaGbxfR vn8Fu93WM8dUf0pT1uvdKcohcyUJ8beG43Fjsst/Mo9iffsqiUKZjtX3K4lzVXlA Y698GmFcLU0WBHfI5Uban7AQIyeTojF1jkGkJvRg0Aefm4MByJYYcGj7v9LoOf5C qOwrtuIGXENNATLf1euPw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:date:date:feedback-id:feedback-id:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to:x-me-proxy:x-me-sender :x-me-sender:x-sasl-enc; s=fm3; t=1762140986; x=1762227386; bh=v 7NL1eLeuw9MyCVGFnXUdXEFkMix1/iq08tw9mGSZRI=; b=oLVev9AekYvSRN81H DBIWI9w2BOCnk5FrkaGQpbAMdGiTRwLI7UXAkAJ0D2Knd2s5jxBd9PmyAoUBjPW7 tqQsH9YMS+apuaFnABGmt1gajwJsfBvQGS1ar87MsH2ePUDRN29qR9qFP/wJoCKU 0C1CTI+RQeYD75Gayqb+M2YV+PTnGgmC01QdHjmjAg+LnWYzvVtrFsvQaggP7I3o zjC3TlQBz7cGnNi7Yn4ISlyrm5TK5XDf+yohpVo9Kleq2wND5upRxH2DLkeWx4x8 oHdNqqE8y1yqI9j2Bly4vxCe4+OsFNrjEKxQJOzagTI+bx1QhomTDzmm65zC43H/ VTDdA== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeffedrtdeggddujeejtdejucetufdoteggodetrf dotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfurfetoffkrfgpnffqhgenuceu rghilhhouhhtmecufedttdenucgfrhhlucfvnfffucdljedtmdenucfjughrpefhvfevuf ffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpeevhhgrugculfgrsghlohhnshhk ihcuoegthhgrugesjhgrsghlohhnshhkihdrgiihiieqnecuggftrfgrthhtvghrnhepgf eiteejhfelheefieetjefgleejfffhueffvdduieejgfeuueeuvddvkeejhfelnecuvehl uhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomheptghhrggusehjrg gslhhonhhskhhirdighiiipdhnsggprhgtphhtthhopeefpdhmohguvgepshhmthhpohhu thdprhgtphhtthhopegthhgrugesjhgrsghlohhnshhkihdrgiihiidprhgtphhtthhope hqvghmuhdquggvvhgvlhesnhhonhhgnhhurdhorhhgpdhrtghpthhtohepsggrlhgrthho nhesvghikhdrsghmvgdrhhhu X-ME-Proxy: Feedback-ID: ib26944c1:Fastmail From: Chad Jablonski To: qemu-devel@nongnu.org Cc: balaton@eik.bme.hu, Chad Jablonski Subject: [PATCH v2 3/7] ati-vga: Implement foreground and background color register writes Date: Sun, 2 Nov 2025 22:36:04 -0500 Message-ID: <20251103033608.120908-4-chad@jablonski.xyz> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251103033608.120908-1-chad@jablonski.xyz> References: <20251103033608.120908-1-chad@jablonski.xyz> 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=103.168.172.150; envelope-from=chad@jablonski.xyz; helo=fout-a7-smtp.messagingengine.com X-Spam_score_int: -22 X-Spam_score: -2.3 X-Spam_bar: -- X-Spam_report: (-2.3 / 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, FROM_SUSPICIOUS_NTLD=0.499, PDS_OTHER_BAD_TLD=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, UNPARSEABLE_RELAY=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: 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 @jablonski.xyz) X-ZM-MESSAGEID: 1762141048399158500 Content-Type: text/plain; charset="utf-8" These are straightforward 32-bit register write handlers. They're necessary for a future patch which will use them for color expansion from monochrome host data transfers. Signed-off-by: Chad Jablonski Reviewed-by: BALATON Zoltan --- hw/display/ati.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/hw/display/ati.c b/hw/display/ati.c index eb9b30672f..bf7a037e64 100644 --- a/hw/display/ati.c +++ b/hw/display/ati.c @@ -926,6 +926,12 @@ static void ati_mm_write(void *opaque, hwaddr addr, case DP_CNTL: s->regs.dp_cntl =3D data; break; + case DP_SRC_FRGD_CLR: + s->regs.dp_src_frgd_clr =3D data; + break; + case DP_SRC_BKGD_CLR: + s->regs.dp_src_bkgd_clr =3D data; + break; case DP_DATATYPE: s->regs.dp_datatype =3D data & 0xe0070f0f; break; --=20 2.51.0 From nobody Fri Nov 14 18:20:09 2025 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=jablonski.xyz ARC-Seal: i=1; a=rsa-sha256; t=1762141044; cv=none; d=zohomail.com; s=zohoarc; b=iwlrCWM8w4MNKdOTu85vAZG09xzgSCN8bS4mAe+CohdJSKFYf5udITzp1JMr7A/uyw6tAQZx/4EbokWW314FlSN8+zNx3LKzuqqh3Dy+iec6f66YiKGmZSVSMQh9hCX14q27mXXSduGJdxpPOIyQSZQ3Vb321zblYCLbmfV+iC8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1762141044; 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=Qp4IVbmKfSgtZtD+5ckCm3MWYAYmz+gEAZuguXtKgnI=; b=JgnIG8U2u21yBjwslNveF/z96BvaVpS20y8k7L1gyrspJfu2rVq+ZCPEWKI6ROS+74rEioccz3BArBidxDHYsHAFBtGQ5hazA9iBCd3ECFMXlvzFzHMu0pYExELazZtJFLly7xMbywtLWZ7YAKB/m9O9HmB2FFpZsZCsu6vxlHY= 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 1762141044907556.6011040459791; Sun, 2 Nov 2025 19:37:24 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vFlN1-0005jM-7G; Sun, 02 Nov 2025 22:36:39 -0500 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 1vFlMw-0005hI-7x for qemu-devel@nongnu.org; Sun, 02 Nov 2025 22:36:35 -0500 Received: from fout-a7-smtp.messagingengine.com ([103.168.172.150]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vFlMq-00080P-Vd for qemu-devel@nongnu.org; Sun, 02 Nov 2025 22:36:32 -0500 Received: from phl-compute-09.internal (phl-compute-09.internal [10.202.2.49]) by mailfout.phl.internal (Postfix) with ESMTP id 7B244EC023C; Sun, 2 Nov 2025 22:36:27 -0500 (EST) Received: from phl-mailfrontend-01 ([10.202.2.162]) by phl-compute-09.internal (MEProxy); Sun, 02 Nov 2025 22:36:27 -0500 Received: by mail.messagingengine.com (Postfix) with ESMTPA; Sun, 2 Nov 2025 22:36:26 -0500 (EST) Received: from localhost (chomposaur [local]) by chomposaur (OpenSMTPD) with ESMTPA id c430d697; Mon, 3 Nov 2025 03:36:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=jablonski.xyz; h=cc:cc:content-transfer-encoding:content-type:date:date:from :from:in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to; s=fm2; t=1762140987; x= 1762227387; bh=Qp4IVbmKfSgtZtD+5ckCm3MWYAYmz+gEAZuguXtKgnI=; b=T fU1GSGO28PKIVaqaDmSXKGDzZEBuVDb7i1ZhAC9ZiB42/pWKbk9Zix1dNQmGwCLf HMi8kHstodCkWECTEXIJoeXeAXxbXFF0U3afGne6ENgtdnP3w8pXTFJ7Ts5T5rBZ M2nYi/flIccNxOIr4TBbepV8cV4vpO5cBkst7hoPM+xylj7FqfRRtXop3ntZgLmq js9z+DUHkb2DJ50OBP2EeecWfVZ1cQn7xNxseU0d/KWiwigOsZFYZ7iD9Bp3Z4j1 re56o9MdlHQw+p0OWuDUEHYiYzeqCDaqCIUoKo39aqQSIivMuB6Rdkp0XmcVNef8 ZmcUd38LWOJClarT3byhg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:date:date:feedback-id:feedback-id:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to:x-me-proxy:x-me-sender :x-me-sender:x-sasl-enc; s=fm3; t=1762140987; x=1762227387; bh=Q p4IVbmKfSgtZtD+5ckCm3MWYAYmz+gEAZuguXtKgnI=; b=nASaV90XeRYeCcgtc Gk/MVrAOAuP4tCDKlt6Ke5wnQ+xEUXaNxPbMqNGJCNsidyfW2bqnwew8/SeR4u4W NaD9at/UYr4LCayiiEP+8LitlcyWkoqLC333pPMG8HbDiwGYxlKFoqfJif7n6x3r DWkybOcWCzEOLB5fspEAwHd1+x/uc/H4L35SqQEbyp6uXEB5l+MoyvKcW8o1wOk6 Jgeb3NMrAFsCjGXdKudSDVti38namES+R2PsASPujLL50Xubw5Emd5E0kARsp1Ux ODsZ70JOtl6qJpDKYVAnzAxKC4WI64xi2Ga1sU999geADQymrPO2eocYJExyz/OU KqLiw== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeffedrtdeggddujeejtdeiucetufdoteggodetrf dotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfurfetoffkrfgpnffqhgenuceu rghilhhouhhtmecufedttdenucgfrhhlucfvnfffucdljedtmdenucfjughrpefhvfevuf ffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpeevhhgrugculfgrsghlohhnshhk ihcuoegthhgrugesjhgrsghlohhnshhkihdrgiihiieqnecuggftrfgrthhtvghrnhepgf eiteejhfelheefieetjefgleejfffhueffvdduieejgfeuueeuvddvkeejhfelnecuvehl uhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomheptghhrggusehjrg gslhhonhhskhhirdighiiipdhnsggprhgtphhtthhopeefpdhmohguvgepshhmthhpohhu thdprhgtphhtthhopehqvghmuhdquggvvhgvlhesnhhonhhgnhhurdhorhhgpdhrtghpth htoheptghhrggusehjrggslhhonhhskhhirdighiiipdhrtghpthhtohepsggrlhgrthho nhesvghikhdrsghmvgdrhhhu X-ME-Proxy: Feedback-ID: ib26944c1:Fastmail From: Chad Jablonski To: qemu-devel@nongnu.org Cc: balaton@eik.bme.hu, Chad Jablonski Subject: [PATCH v2 4/7] ati-vga: Fix DP_GUI_MASTER_CNTL register mask Date: Sun, 2 Nov 2025 22:36:05 -0500 Message-ID: <20251103033608.120908-5-chad@jablonski.xyz> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251103033608.120908-1-chad@jablonski.xyz> References: <20251103033608.120908-1-chad@jablonski.xyz> 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=103.168.172.150; envelope-from=chad@jablonski.xyz; helo=fout-a7-smtp.messagingengine.com X-Spam_score_int: -22 X-Spam_score: -2.3 X-Spam_bar: -- X-Spam_report: (-2.3 / 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, FROM_SUSPICIOUS_NTLD=0.499, PDS_OTHER_BAD_TLD=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, UNPARSEABLE_RELAY=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: 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 @jablonski.xyz) X-ZM-MESSAGEID: 1762141048173154100 Content-Type: text/plain; charset="utf-8" Change the register mask from 0xf800000f to 0xff00000f to preserve bits 24-26. This is the GMC_SRC_SOURCE field which is needed to determine the type of source for the blit operation. Signed-off-by: Chad Jablonski Reviewed-by: BALATON Zoltan --- hw/display/ati.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw/display/ati.c b/hw/display/ati.c index bf7a037e64..4ff17209c4 100644 --- a/hw/display/ati.c +++ b/hw/display/ati.c @@ -867,7 +867,7 @@ static void ati_mm_write(void *opaque, hwaddr addr, ati_2d_blt(s); break; case DP_GUI_MASTER_CNTL: - s->regs.dp_gui_master_cntl =3D data & 0xf800000f; + s->regs.dp_gui_master_cntl =3D data & 0xff00000f; s->regs.dp_datatype =3D (data & 0x0f00) >> 8 | (data & 0x30f0) << = 4 | (data & 0x4000) << 16; s->regs.dp_mix =3D (data & GMC_ROP3_MASK) | (data & 0x7000000) >> = 16; --=20 2.51.0 From nobody Fri Nov 14 18:20:09 2025 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=jablonski.xyz ARC-Seal: i=1; a=rsa-sha256; t=1762141049; cv=none; d=zohomail.com; s=zohoarc; b=k9O7mKjUUpdv/QjsBEmvi2wa5ts7CDIKIjUp5qQZDCIaNjJnvFZE1dF05dQx9QDQzhXF9m8TsDth3CqM5G5hW2oKjVBiz2puVj3kHpqlF5lVJmoJYF30SXGNjRuHnPAQswR0uu7aqNS4QyWnibKWgrPWSe7rLclaDy6zv0c+Whs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1762141049; 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=YlyWBdnfOsCvUMA5G3xXi4mdNN70nToWOgum6MiROdg=; b=BPIIJFiQDYW7DzhaJnXSsa7Gm5AOutnZZc3qo+hVSrO2ypUVmcmCWKg3gzpCWfu5qHkVu+xqDwiz2HrUAKRk1RV/TzD0AJMjsxrYiFI1AKAifp1S8qNqzIWrSg56/jhJdz0/0dquAuTuhuQP9lm68YEVTNn4x8AkvmzyatlO57o= 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 1762141048849324.31087978072935; Sun, 2 Nov 2025 19:37:28 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vFlMz-0005iq-LH; Sun, 02 Nov 2025 22:36:37 -0500 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 1vFlMw-0005hH-7g for qemu-devel@nongnu.org; Sun, 02 Nov 2025 22:36:35 -0500 Received: from fhigh-a2-smtp.messagingengine.com ([103.168.172.153]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vFlMq-00080O-Vh for qemu-devel@nongnu.org; Sun, 02 Nov 2025 22:36:32 -0500 Received: from phl-compute-05.internal (phl-compute-05.internal [10.202.2.45]) by mailfhigh.phl.internal (Postfix) with ESMTP id 848151400100; Sun, 2 Nov 2025 22:36:27 -0500 (EST) Received: from phl-mailfrontend-02 ([10.202.2.163]) by phl-compute-05.internal (MEProxy); Sun, 02 Nov 2025 22:36:27 -0500 Received: by mail.messagingengine.com (Postfix) with ESMTPA; Sun, 2 Nov 2025 22:36:26 -0500 (EST) Received: from localhost (chomposaur [local]) by chomposaur (OpenSMTPD) with ESMTPA id 68dcea4f; Mon, 3 Nov 2025 03:36:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=jablonski.xyz; h=cc:cc:content-transfer-encoding:content-type:date:date:from :from:in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to; s=fm2; t=1762140987; x= 1762227387; bh=YlyWBdnfOsCvUMA5G3xXi4mdNN70nToWOgum6MiROdg=; b=D 4Gx9/dR+bYiCGtQUSGhFG5a4tSdJWPSVWRe7+2Nys8x7368e1PY7vMONGgejxEkz HwqPzv3CkqB25y39No1S1QqBQDIvW9vqQS2EQRXM4De6mzVr33fbLihnnYYgtKIo A4nq0MglcS5qTrNcjpwZQqWfXBtznMq7+YaTnMrSToFhcD60JVL9I9iRRk2z8pFl 2koth3uz90lk4EomzJDFQ3YrlXNx3H89UqNjBY9iMEjGXBG0hr5y3VVL68dCRAzK 6tspoWOaLk/CZp4mEM/W7feQ/2gnLVobmu1b/AmzKQaNU6ys8kAbk9yWtZfMJBJv jOwazL6788pAfAwKL3HoA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:date:date:feedback-id:feedback-id:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to:x-me-proxy:x-me-sender :x-me-sender:x-sasl-enc; s=fm3; t=1762140987; x=1762227387; bh=Y lyWBdnfOsCvUMA5G3xXi4mdNN70nToWOgum6MiROdg=; b=ZsO2/xcDSjSoLl34+ QnKzZebVoEL6a9wIziv77Znzm1vF7grUXZPUANmjU1+eTHAcjnnJ4Q6vK4pTLDeh Bllq0cuqbnlCbb87Zeye6SIWOpVAleIakFaYLxq3ySSsw3uFebISu4CAbPfiBWAg Jdf4sKHS7Hpgbpkqj431jcSOHMnl67bb8inuH00g4tuBcCX3sDOJl6Ev81QIAVMZ e3wTw/8PILR3xCpUZjuUgw/+QjsCpZryNiJHTFkC0+qdAmhBWJfP4JJPeyYE5yZ/ yAbKiTWfn8uQgjJQMI3uiKS4H3xL+lp9nKLd2XxD4ANZLmZHItkxcz99au8H88Pz 8FitQ== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeffedrtdeggddujeejtdejucetufdoteggodetrf dotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfurfetoffkrfgpnffqhgenuceu rghilhhouhhtmecufedttdenucgfrhhlucfvnfffucdljedtmdenucfjughrpefhvfevuf ffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpeevhhgrugculfgrsghlohhnshhk ihcuoegthhgrugesjhgrsghlohhnshhkihdrgiihiieqnecuggftrfgrthhtvghrnhepgf eiteejhfelheefieetjefgleejfffhueffvdduieejgfeuueeuvddvkeejhfelnecuvehl uhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomheptghhrggusehjrg gslhhonhhskhhirdighiiipdhnsggprhgtphhtthhopeefpdhmohguvgepshhmthhpohhu thdprhgtphhtthhopegthhgrugesjhgrsghlohhnshhkihdrgiihiidprhgtphhtthhope hqvghmuhdquggvvhgvlhesnhhonhhgnhhurdhorhhgpdhrtghpthhtohepsggrlhgrthho nhesvghikhdrsghmvgdrhhhu X-ME-Proxy: Feedback-ID: ib26944c1:Fastmail From: Chad Jablonski To: qemu-devel@nongnu.org Cc: balaton@eik.bme.hu, Chad Jablonski Subject: [PATCH v2 5/7] ati-vga: Implement HOST_DATA register writes Date: Sun, 2 Nov 2025 22:36:06 -0500 Message-ID: <20251103033608.120908-6-chad@jablonski.xyz> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251103033608.120908-1-chad@jablonski.xyz> References: <20251103033608.120908-1-chad@jablonski.xyz> 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=103.168.172.153; envelope-from=chad@jablonski.xyz; helo=fhigh-a2-smtp.messagingengine.com X-Spam_score_int: -22 X-Spam_score: -2.3 X-Spam_bar: -- X-Spam_report: (-2.3 / 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, FROM_SUSPICIOUS_NTLD=0.499, PDS_OTHER_BAD_TLD=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, UNPARSEABLE_RELAY=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: 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 @jablonski.xyz) X-ZM-MESSAGEID: 1762141052572158500 Content-Type: text/plain; charset="utf-8" Writing to any of the HOST_DATA0-7 registers pushes the written data into a buffer. A final write to HOST_DATA_LAST writes data to the buffer and triggers the pending blit operation. The buffer for now is a static 4MiB and overflows are checked. This seems like a large enough value given what I've seen in testing. Future work could dynamically size the buffer based on the destination dimensions = if needed. This sets things up for implementation of HOST_DATA as a blit operation source in a future patch. Signed-off-by: Chad Jablonski --- hw/display/ati.c | 15 +++++++++++++++ hw/display/ati_dbg.c | 9 +++++++++ hw/display/ati_int.h | 3 +++ hw/display/ati_regs.h | 9 +++++++++ 4 files changed, 36 insertions(+) diff --git a/hw/display/ati.c b/hw/display/ati.c index 4ff17209c4..0a686750ae 100644 --- a/hw/display/ati.c +++ b/hw/display/ati.c @@ -969,6 +969,20 @@ static void ati_mm_write(void *opaque, hwaddr addr, case SRC_SC_BOTTOM_RIGHT: s->regs.src_sc_bottom_right =3D data; break; + case HOST_DATA0 ... HOST_DATA7: + case HOST_DATA_LAST: + if (s->host_data_pos + 4 > sizeof(s->host_data_buffer)) { + qemu_log_mask(LOG_UNIMP, "HOST_DATA buffer overflow " + "(buffer size: %zu bytes)\n", + sizeof(s->host_data_buffer)); + return; + } + stn_he_p(&s->host_data_buffer[s->host_data_pos], 4, data); + s->host_data_pos +=3D 4; + if (addr =3D=3D HOST_DATA_LAST) { + ati_2d_blt(s); + } + break; default: break; } @@ -1074,6 +1088,7 @@ static void ati_vga_reset(DeviceState *dev) /* reset vga */ vga_common_reset(&s->vga); s->mode =3D VGA_MODE; + s->host_data_pos =3D 0; } =20 static void ati_vga_exit(PCIDevice *dev) diff --git a/hw/display/ati_dbg.c b/hw/display/ati_dbg.c index 3ffa7f35df..5c799d540a 100644 --- a/hw/display/ati_dbg.c +++ b/hw/display/ati_dbg.c @@ -252,6 +252,15 @@ static struct ati_regdesc ati_reg_names[] =3D { {"MC_SRC1_CNTL", 0x19D8}, {"TEX_CNTL", 0x1800}, {"RAGE128_MPP_TB_CONFIG", 0x01c0}, + {"HOST_DATA0", 0x17c0}, + {"HOST_DATA1", 0x17c4}, + {"HOST_DATA2", 0x17c8}, + {"HOST_DATA3", 0x17cc}, + {"HOST_DATA4", 0x17d0}, + {"HOST_DATA5", 0x17d4}, + {"HOST_DATA6", 0x17d8}, + {"HOST_DATA7", 0x17dc}, + {"HOST_DATA_LAST", 0x17e0}, {NULL, -1} }; =20 diff --git a/hw/display/ati_int.h b/hw/display/ati_int.h index aab3cbf81a..16e5d29a5a 100644 --- a/hw/display/ati_int.h +++ b/hw/display/ati_int.h @@ -15,6 +15,7 @@ #include "hw/i2c/bitbang_i2c.h" #include "vga_int.h" #include "qom/object.h" +#include "qemu/units.h" =20 /*#define DEBUG_ATI*/ =20 @@ -108,6 +109,8 @@ struct ATIVGAState { MemoryRegion io; MemoryRegion mm; ATIVGARegs regs; + uint32_t host_data_pos; + uint8_t host_data_buffer[4 * MiB]; }; =20 const char *ati_reg_name(int num); diff --git a/hw/display/ati_regs.h b/hw/display/ati_regs.h index 2b56b9fb66..9b52b61dcb 100644 --- a/hw/display/ati_regs.h +++ b/hw/display/ati_regs.h @@ -252,6 +252,15 @@ #define DP_T12_CNTL 0x178c #define DST_BRES_T1_LNTH 0x1790 #define DST_BRES_T2_LNTH 0x1794 +#define HOST_DATA0 0x17c0 +#define HOST_DATA1 0x17c4 +#define HOST_DATA2 0x17c8 +#define HOST_DATA3 0x17cc +#define HOST_DATA4 0x17d0 +#define HOST_DATA5 0x17d4 +#define HOST_DATA6 0x17d8 +#define HOST_DATA7 0x17dc +#define HOST_DATA_LAST 0x17e0 #define SCALE_SRC_HEIGHT_WIDTH 0x1994 #define SCALE_OFFSET_0 0x1998 #define SCALE_PITCH 0x199c --=20 2.51.0 From nobody Fri Nov 14 18:20:09 2025 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=jablonski.xyz ARC-Seal: i=1; a=rsa-sha256; t=1762141079; cv=none; d=zohomail.com; s=zohoarc; b=V3ZtO3hIIkgSXp94wgzm9zKcYZqqNqZ+uF1860bcNLEt9Z6a0Lax8JnDpiETy1/zcSz12o8Tvj/1+rxIvsHsgEh7tGYCpBEAl6A32sw8yAzIUYkbuXlmUdn6lvPZiqm6CDFAo6D5DKI7V7aWLIQw7CMSE4ijDe2XbSYvhFpgiwk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1762141079; 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=cMbXfgZRuT2nh3bxQp6pTWkQzuGProvthfWpUuX6w4o=; b=k/8+7cKAGuDe3kpTNrD+f4O5NtWGJL2P0UKYeffd3wbbuCwcBQ5bfodtrSacnc+fCDCRtATZ95sPCMYyKg9ca65iu2NTcW2e+YXlJJODb+VtA6x+WmVaXZfnU5C3LIOSQowtJFyHMToS63oxh/oU5CQ350bwEOmGs58z9DOPTsA= 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 1762141079797837.9411143524637; Sun, 2 Nov 2025 19:37:59 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vFlN3-0005jm-10; Sun, 02 Nov 2025 22:36:41 -0500 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 1vFlMw-0005hJ-85 for qemu-devel@nongnu.org; Sun, 02 Nov 2025 22:36:35 -0500 Received: from fhigh-a2-smtp.messagingengine.com ([103.168.172.153]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vFlMr-00080y-Vj for qemu-devel@nongnu.org; Sun, 02 Nov 2025 22:36:32 -0500 Received: from phl-compute-11.internal (phl-compute-11.internal [10.202.2.51]) by mailfhigh.phl.internal (Postfix) with ESMTP id 3EC86140010B; Sun, 2 Nov 2025 22:36:28 -0500 (EST) Received: from phl-mailfrontend-02 ([10.202.2.163]) by phl-compute-11.internal (MEProxy); Sun, 02 Nov 2025 22:36:28 -0500 Received: by mail.messagingengine.com (Postfix) with ESMTPA; Sun, 2 Nov 2025 22:36:27 -0500 (EST) Received: from localhost (chomposaur [local]) by chomposaur (OpenSMTPD) with ESMTPA id 3e75ec8a; Mon, 3 Nov 2025 03:36:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=jablonski.xyz; h=cc:cc:content-transfer-encoding:content-type:date:date:from :from:in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to; s=fm2; t=1762140988; x= 1762227388; bh=cMbXfgZRuT2nh3bxQp6pTWkQzuGProvthfWpUuX6w4o=; b=H xNTZc341Y7TSAAh3MlLT9TZEyEfA9FmeGvMOB+ud3WtZFB6t/+jGJ257R1HxPRGM Z+GtUcwz5tBk5ubr+vXEW3vztuB9qLDo2nUp+2N3N6M3RyXI60IpJvPjQaBrJ2ti IwdidGVqMqL8kjALzz3mS4QbttNUoKxAo3SwoNqNxxxfhMXtwsTG9pItMxPacMOJ nDwaWLxCwUZxUVUVAexPeL/WPBDCjGw7zYdoLdADZcbNCNIROe00N42Cfew6j8aX 6xNwTUHZa+BTygNzNvdP8NksTjVaZboX2eD4oOUl2Xr30BPEWxkjGhQI/ED4CfyC Jbj3tMu7MtSQCedKtNH4g== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:date:date:feedback-id:feedback-id:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to:x-me-proxy:x-me-sender :x-me-sender:x-sasl-enc; s=fm3; t=1762140988; x=1762227388; bh=c MbXfgZRuT2nh3bxQp6pTWkQzuGProvthfWpUuX6w4o=; b=c1q+F8B4XlWt/DyGi ptR79PmqOWIUJbS+MlblgH0vmLtbgYVcuead3umdeijIvHR7AqcLc52ypFVa66Yb DD5AViKDIvyWBWgTT5jvbgVCxxionu5i2g1ZlWxS8OZW7rTdwTdE3bRQt7As2hVq x9hoJV/9JXOUBg/9w9d2LHYsM7Neukfi03kOIzWbO9qwXBPiHIf8ePZnuDV/zZlO B2c3WmZ89pt9zQI6LVJ4OVccAR1Sa9E4rOYxnRj7KDjsSBxmqx+p2MCWduW6mJz8 GQiXVuNSUiL3m5aa26emZPaKyePYaFCmIlBbn8FDOGsJmAuoeeJT4I8nnFfhLt6N eyTBQ== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeffedrtdeggddujeejtdejucetufdoteggodetrf dotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfurfetoffkrfgpnffqhgenuceu rghilhhouhhtmecufedttdenucgfrhhlucfvnfffucdljedtmdenucfjughrpefhvfevuf ffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpeevhhgrugculfgrsghlohhnshhk ihcuoegthhgrugesjhgrsghlohhnshhkihdrgiihiieqnecuggftrfgrthhtvghrnhepgf eiteejhfelheefieetjefgleejfffhueffvdduieejgfeuueeuvddvkeejhfelnecuvehl uhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomheptghhrggusehjrg gslhhonhhskhhirdighiiipdhnsggprhgtphhtthhopeefpdhmohguvgepshhmthhpohhu thdprhgtphhtthhopegsrghlrghtohhnsegvihhkrdgsmhgvrdhhuhdprhgtphhtthhope hqvghmuhdquggvvhgvlhesnhhonhhgnhhurdhorhhgpdhrtghpthhtoheptghhrggusehj rggslhhonhhskhhirdighiii X-ME-Proxy: Feedback-ID: ib26944c1:Fastmail From: Chad Jablonski To: qemu-devel@nongnu.org Cc: balaton@eik.bme.hu, Chad Jablonski Subject: [PATCH v2 6/7] ati-vga: Add expand_colors() helper for monochrome color expansion Date: Sun, 2 Nov 2025 22:36:07 -0500 Message-ID: <20251103033608.120908-7-chad@jablonski.xyz> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251103033608.120908-1-chad@jablonski.xyz> References: <20251103033608.120908-1-chad@jablonski.xyz> 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=103.168.172.153; envelope-from=chad@jablonski.xyz; helo=fhigh-a2-smtp.messagingengine.com X-Spam_score_int: -22 X-Spam_score: -2.3 X-Spam_bar: -- X-Spam_report: (-2.3 / 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, FROM_SUSPICIOUS_NTLD=0.499, PDS_OTHER_BAD_TLD=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, UNPARSEABLE_RELAY=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: 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 @jablonski.xyz) X-ZM-MESSAGEID: 1762141084834158500 Content-Type: text/plain; charset="utf-8" Convert 1bpp monochrome images to 32bpp ARGB given a foreground and background color. This also supports most significant and least significant bit ordering. This is useful for host data transfers of glyphs when drawing text in X. Signed-off-by: Chad Jablonski --- hw/display/ati_2d.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/hw/display/ati_2d.c b/hw/display/ati_2d.c index 15cf29a061..181bf634f0 100644 --- a/hw/display/ati_2d.c +++ b/hw/display/ati_2d.c @@ -45,6 +45,28 @@ static int ati_bpp_from_datatype(ATIVGAState *s) } =20 #define DEFAULT_CNTL (s->regs.dp_gui_master_cntl & GMC_DST_PITCH_OFFSET_CN= TL) +/* Convert 1bpp monochrome data to 32bpp ARGB using color expansion */ +static void expand_colors(uint8_t *color_dst, const uint8_t *mono_src, + uint32_t width, uint32_t height, + uint32_t fg_color, uint32_t bg_color, + bool lsb_to_msb) +{ + uint32_t byte, color; + uint8_t *pixel; + int i, j, bit; + /* Rows are 32-bit aligned */ + int bytes_per_row =3D ((width + 31) / 32) * 4; + + for (i =3D 0; i < height; i++) { + for (j =3D 0; j < width; j++) { + byte =3D mono_src[i * bytes_per_row + (j / 8)]; + bit =3D lsb_to_msb ? 7 - (j % 8) : j % 8; + color =3D (byte >> bit) & 0x1 ? fg_color : bg_color; + pixel =3D &color_dst[(i * width + j) * 4]; + memcpy(pixel, &color, sizeof(color)); + } + } +} =20 void ati_2d_blt(ATIVGAState *s) { --=20 2.51.0 From nobody Fri Nov 14 18:20:09 2025 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=jablonski.xyz ARC-Seal: i=1; a=rsa-sha256; t=1762141082; cv=none; d=zohomail.com; s=zohoarc; b=QTTRQ9S/CUWPNXE9OqYQ5qHjZ6yOWzkHJxVprFzr0amlqDCzO2JC+0ry3oHK91eP8TVaxfPWbQ692X7ouwXAVuSeYsP/xlql58upaPO+rXQSjvRYnQaUVhf8LqqFAgAoPot0mSprp7Mf3BMfyuzF8BQX/fNBf4AAqADatNJOr1U= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1762141082; 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=dTYYFACOpdC66c5YM67Ci0gn2Q7rJnzZ0tIHdI02mts=; b=BizlI+g+utkAkGludmNA2RuI/HJPkJ3ATyma3rXe5OL6fngZSYMmhWL5s4RO7AqYxNjt/pUjMIBBpYZ+XIhdLePDXRNuKXVbmtPyvzcUCnOHBuTHBgSURaZdzLzMMz1p++JW5X65uKMHbRhiSpQaO9exdGvapCLAQW3NQCHYYgM= 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 1762141082715390.7298818050825; Sun, 2 Nov 2025 19:38:02 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vFlN3-0005jn-5X; Sun, 02 Nov 2025 22:36:41 -0500 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 1vFlMx-0005hU-HE for qemu-devel@nongnu.org; Sun, 02 Nov 2025 22:36:35 -0500 Received: from fhigh-a2-smtp.messagingengine.com ([103.168.172.153]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vFlMr-00080v-Vr for qemu-devel@nongnu.org; Sun, 02 Nov 2025 22:36:34 -0500 Received: from phl-compute-02.internal (phl-compute-02.internal [10.202.2.42]) by mailfhigh.phl.internal (Postfix) with ESMTP id 3C0A21400104; Sun, 2 Nov 2025 22:36:28 -0500 (EST) Received: from phl-mailfrontend-01 ([10.202.2.162]) by phl-compute-02.internal (MEProxy); Sun, 02 Nov 2025 22:36:28 -0500 Received: by mail.messagingengine.com (Postfix) with ESMTPA; Sun, 2 Nov 2025 22:36:27 -0500 (EST) Received: from localhost (chomposaur [local]) by chomposaur (OpenSMTPD) with ESMTPA id c6ae8662; Mon, 3 Nov 2025 03:36:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=jablonski.xyz; h=cc:cc:content-transfer-encoding:content-type:date:date:from :from:in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to; s=fm2; t=1762140988; x= 1762227388; bh=dTYYFACOpdC66c5YM67Ci0gn2Q7rJnzZ0tIHdI02mts=; b=U CYHOY/Xk+z6NFr5o4pUA6DTwnKC09IW8RUbPZlrxhtSYEvIRjryrmrbftmsoVTHA HqWov9+NtrZw9YmKqK1nVb+RBXtrTTpIfrdA8jy4jX7wgdaHvr2iBaOMBHgLnaWo DIY2izTadx9gHkrerIsSqDyIzv+6XnRF0vSYqOnH7eIPEfRVkZDlMmytGG1yFtPt 3i4sGP4cAsLTMdNKN9YRKRkBt4jWsGG62M+LjyaTQaEYCop7ArUXvWjV65NlqJyK k38HOpOPMG3bueWwpaV+OszCwT4A0FslA/AqRtdJgcyfGs8qbTTK6Xs7GbXOoYXr CiOFSF1UnS5CJHReB/HTQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:date:date:feedback-id:feedback-id:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to:x-me-proxy:x-me-sender :x-me-sender:x-sasl-enc; s=fm3; t=1762140988; x=1762227388; bh=d TYYFACOpdC66c5YM67Ci0gn2Q7rJnzZ0tIHdI02mts=; b=1fTyR9Ns3TwqsZt8z KKOLltMGrMEcR6tF6aqV2JzYP9SCqfWUmHiA4Boq2zA115bkw2SNs88EEi5FJZ/b Z+sIncJbCHp6GGRfKmULfzXTMRevDh3gRrllz0yWwR4SvgTff8P3aB53gOZKcEUu FFHowzXsitW9J+OGFrcD3OVH/IZWj7MHFeMBdlPV5YV/6Y6vOqQNHusN3p+f+WKH Goy4dFLSDvLo2TkuBi6Xxl5IDT1UoWxcndyOmTEoiIMnbOlM3C6gE1R9dYDxtI/z U0zEbHwjSiGUi6F+dqTwPYXI+uiemhyQH2JS1Qf7+MEoN4A7acnnoW6ro2YtU5xC pycpg== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeffedrtdeggddujeejtdejucetufdoteggodetrf dotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfurfetoffkrfgpnffqhgenuceu rghilhhouhhtmecufedttdenucgfrhhlucfvnfffucdljedtmdenucfjughrpefhvfevuf ffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpeevhhgrugculfgrsghlohhnshhk ihcuoegthhgrugesjhgrsghlohhnshhkihdrgiihiieqnecuggftrfgrthhtvghrnhepgf eiteejhfelheefieetjefgleejfffhueffvdduieejgfeuueeuvddvkeejhfelnecuvehl uhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomheptghhrggusehjrg gslhhonhhskhhirdighiiipdhnsggprhgtphhtthhopeefpdhmohguvgepshhmthhpohhu thdprhgtphhtthhopegsrghlrghtohhnsegvihhkrdgsmhgvrdhhuhdprhgtphhtthhope hqvghmuhdquggvvhgvlhesnhhonhhgnhhurdhorhhgpdhrtghpthhtoheptghhrggusehj rggslhhonhhskhhirdighiii X-ME-Proxy: Feedback-ID: ib26944c1:Fastmail From: Chad Jablonski To: qemu-devel@nongnu.org Cc: balaton@eik.bme.hu, Chad Jablonski Subject: [PATCH v2 7/7] ati-vga: Implement HOST_DATA blit source with color expansion Date: Sun, 2 Nov 2025 22:36:08 -0500 Message-ID: <20251103033608.120908-8-chad@jablonski.xyz> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251103033608.120908-1-chad@jablonski.xyz> References: <20251103033608.120908-1-chad@jablonski.xyz> 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=103.168.172.153; envelope-from=chad@jablonski.xyz; helo=fhigh-a2-smtp.messagingengine.com X-Spam_score_int: -22 X-Spam_score: -2.3 X-Spam_bar: -- X-Spam_report: (-2.3 / 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, FROM_SUSPICIOUS_NTLD=0.499, PDS_OTHER_BAD_TLD=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, UNPARSEABLE_RELAY=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: 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 @jablonski.xyz) X-ZM-MESSAGEID: 1762141084532154100 Content-Type: text/plain; charset="utf-8" SRCCOPY blits using 1bpp HOST_DATA as a source are expanded to 32bpp ARGB. If pixman is enabled any additional color depth conversions are handled. The fallback path does not yet support color conversion and logs an error. Unlike VRAM sourced blits, host data blits are not triggered by writing to the dst width registers. They're only triggered on HOST_DATA_LAST writes. Supports MONO_FRGD_BKGD and COLOR datatypes. MONO_FRGD (transparent background) is left for future work and logged. GMC_SRC_SOURCE_HOST_DATA_ALIGNED is unimplemented and also logged. Neither of these are used for xterm text rendering. This combines clipping, host data transfers and color expansion to enable text rendering in xterm under X.org. Signed-off-by: Chad Jablonski --- hw/display/ati.c | 28 +++++++-- hw/display/ati_2d.c | 135 +++++++++++++++++++++++++++++++++++------- hw/display/ati_regs.h | 13 ++++ 3 files changed, 152 insertions(+), 24 deletions(-) diff --git a/hw/display/ati.c b/hw/display/ati.c index 0a686750ae..6ec50279ed 100644 --- a/hw/display/ati.c +++ b/hw/display/ati.c @@ -813,9 +813,14 @@ static void ati_mm_write(void *opaque, hwaddr addr, } break; case DST_WIDTH: + { + uint32_t src =3D s->regs.dp_gui_master_cntl & GMC_SRC_SOURCE_MASK; s->regs.dst_width =3D data & 0x3fff; - ati_2d_blt(s); + if (src !=3D GMC_SRC_SOURCE_HOST_DATA) { + ati_2d_blt(s); + } break; + } case DST_HEIGHT: s->regs.dst_height =3D data & 0x3fff; break; @@ -862,10 +867,15 @@ static void ati_mm_write(void *opaque, hwaddr addr, s->regs.dst_y =3D (data >> 16) & 0x3fff; break; case DST_HEIGHT_WIDTH: + { + uint32_t src =3D s->regs.dp_gui_master_cntl & GMC_SRC_SOURCE_MASK; s->regs.dst_width =3D data & 0x3fff; s->regs.dst_height =3D (data >> 16) & 0x3fff; - ati_2d_blt(s); + if (src !=3D GMC_SRC_SOURCE_HOST_DATA) { + ati_2d_blt(s); + } break; + } case DP_GUI_MASTER_CNTL: s->regs.dp_gui_master_cntl =3D data & 0xff00000f; s->regs.dp_datatype =3D (data & 0x0f00) >> 8 | (data & 0x30f0) << = 4 | @@ -881,10 +891,15 @@ static void ati_mm_write(void *opaque, hwaddr addr, } break; case DST_WIDTH_X: + { + uint32_t src =3D s->regs.dp_gui_master_cntl & GMC_SRC_SOURCE_MASK; s->regs.dst_x =3D data & 0x3fff; s->regs.dst_width =3D (data >> 16) & 0x3fff; - ati_2d_blt(s); + if (src !=3D GMC_SRC_SOURCE_HOST_DATA) { + ati_2d_blt(s); + } break; + } case SRC_X_Y: s->regs.src_y =3D data & 0x3fff; s->regs.src_x =3D (data >> 16) & 0x3fff; @@ -894,10 +909,15 @@ static void ati_mm_write(void *opaque, hwaddr addr, s->regs.dst_x =3D (data >> 16) & 0x3fff; break; case DST_WIDTH_HEIGHT: + { + uint32_t src =3D s->regs.dp_gui_master_cntl & GMC_SRC_SOURCE_MASK; s->regs.dst_height =3D data & 0x3fff; s->regs.dst_width =3D (data >> 16) & 0x3fff; - ati_2d_blt(s); + if (src !=3D GMC_SRC_SOURCE_HOST_DATA) { + ati_2d_blt(s); + } break; + } case DST_HEIGHT_Y: s->regs.dst_y =3D data & 0x3fff; s->regs.dst_height =3D (data >> 16) & 0x3fff; diff --git a/hw/display/ati_2d.c b/hw/display/ati_2d.c index 181bf634f0..c177686338 100644 --- a/hw/display/ati_2d.c +++ b/hw/display/ati_2d.c @@ -25,6 +25,9 @@ * possible. */ =20 +#define DEFAULT_CNTL (s->regs.dp_gui_master_cntl & GMC_DST_PITCH_OFFSET_CN= TL) +#define EXPANDED_SRC_BPP 32 + static int ati_bpp_from_datatype(ATIVGAState *s) { switch (s->regs.dp_datatype & 0xf) { @@ -44,7 +47,6 @@ static int ati_bpp_from_datatype(ATIVGAState *s) } } =20 -#define DEFAULT_CNTL (s->regs.dp_gui_master_cntl & GMC_DST_PITCH_OFFSET_CN= TL) /* Convert 1bpp monochrome data to 32bpp ARGB using color expansion */ static void expand_colors(uint8_t *color_dst, const uint8_t *mono_src, uint32_t width, uint32_t height, @@ -139,30 +141,112 @@ void ati_2d_blt(ATIVGAState *s) switch (s->regs.dp_mix & GMC_ROP3_MASK) { case ROP3_SRCCOPY: { + uint32_t src =3D s->regs.dp_gui_master_cntl & GMC_SRC_SOURCE_MASK; + uint8_t *color_data =3D NULL; bool fallback =3D false; - unsigned src_x =3D (s->regs.dp_cntl & DST_X_LEFT_TO_RIGHT ? - s->regs.src_x + clip_left : - s->regs.src_x + 1 - dst.width + clip_left); - unsigned src_y =3D (s->regs.dp_cntl & DST_Y_TOP_TO_BOTTOM ? - s->regs.src_y + clip_top : - s->regs.src_y + 1 - dst.height + clip_top); - int src_stride =3D DEFAULT_CNTL ? + unsigned src_x, src_y, src_stride, src_bpp; + uint8_t *src_bits; + + switch (src) { + case GMC_SRC_SOURCE_HOST_DATA: + { + unsigned src_datatype =3D s->regs.dp_gui_master_cntl & + GMC_SRC_DATATYPE_MASK; + switch (src_datatype) { + case GMC_SRC_DATATYPE_MONO_FRGD_BKGD: + { + bool lsb_to_msb =3D s->regs.dp_gui_master_cntl & + GMC_BYTE_ORDER_LSB_TO_MSB; + /* Monochrome source is 1 bpp aligned to 32-bit rows */ + uint32_t mono_size =3D ((dst.width + 31) / 32) * 4 * dst.h= eight; + if (s->host_data_pos < mono_size) { + qemu_log_mask(LOG_UNIMP, + "HOST_DATA blit requires %u bytes, buffe= r holds %u " + "(increase buffer size)\n", + mono_size, s->host_data_pos); + return; + } + + /* Expand all of the source, clipping will be applied late= r */ + color_data =3D g_malloc(dst.width * dst.height * + sizeof(uint32_t)); + src_bpp =3D EXPANDED_SRC_BPP; + expand_colors(color_data, s->host_data_buffer, + dst.width, dst.height, s->regs.dp_src_frgd_c= lr, + s->regs.dp_src_bkgd_clr, lsb_to_msb); + break; + } + case GMC_SRC_DATATYPE_COLOR: + { + uint32_t color_size =3D dst.width * dst.height * (bpp / 8); + if (s->host_data_pos < color_size) { + qemu_log_mask(LOG_UNIMP, + "HOST_DATA blit requires %u bytes, buffe= r holds %u " + "(increase buffer size)\n", + color_size, s->host_data_pos); + return; + } + /* + * The rage128 register guide states that the bit depth in= this + * case matches the bit depth of the dst. There is no + * independent bit depth register for the src. + */ + src_bpp =3D bpp; + color_data =3D s->host_data_buffer; + break; + } + case GMC_SRC_DATATYPE_MONO_FRGD: + qemu_log_mask(LOG_UNIMP, "ati_2d blt source datatype " + "MONO_FRGD (leave-alone) not yet supported\n= "); + return; + default: + qemu_log_mask(LOG_UNIMP, "ati_2d blt source datatype %x is= " + "not yet supported\n", src_datatype); + return; + } + + src_x =3D clip_left; + src_y =3D clip_top; + src_stride =3D dst.width * (src_bpp / 8); + src_bits =3D color_data; + s->host_data_pos =3D 0; + break; + } + case GMC_SRC_SOURCE_MEMORY: + { + src_x =3D (s->regs.dp_cntl & DST_X_LEFT_TO_RIGHT ? + s->regs.src_x + clip_left : + s->regs.src_x + 1 - dst.width + clip_left); + src_y =3D (s->regs.dp_cntl & DST_Y_TOP_TO_BOTTOM ? + s->regs.src_y + clip_top : + s->regs.src_y + 1 - dst.height + clip_top); + src_stride =3D DEFAULT_CNTL ? s->regs.src_pitch : s->regs.default_pitch; - if (!src_stride) { - qemu_log_mask(LOG_GUEST_ERROR, "Zero source pitch\n"); + src_bpp =3D bpp; + src_bits =3D s->vga.vram_ptr + (DEFAULT_CNTL ? + s->regs.src_offset : s->regs.default_offset); + if (s->dev_id =3D=3D PCI_DEVICE_ID_ATI_RAGE128_PF) { + src_bits +=3D s->regs.crtc_offset & 0x07ffffff; + src_stride *=3D bpp; + } + if (src_x > 0x3fff || src_y > 0x3fff || src_bits >=3D end + || src_bits + src_x + + (src_y + clipped.height) * src_stride >=3D end) { + qemu_log_mask(LOG_UNIMP, "blt outside vram not implemented= \n"); + return; + } + break; + } + case GMC_SRC_SOURCE_HOST_DATA_ALIGNED: + default: + qemu_log_mask(LOG_UNIMP, "ati_2d blt source %x is not " + "yet supported\n", src); return; } - uint8_t *src_bits =3D s->vga.vram_ptr + (DEFAULT_CNTL ? - s->regs.src_offset : s->regs.default_offset); =20 - if (s->dev_id =3D=3D PCI_DEVICE_ID_ATI_RAGE128_PF) { - src_bits +=3D s->regs.crtc_offset & 0x07ffffff; - src_stride *=3D bpp; - } - if (src_x > 0x3fff || src_y > 0x3fff || src_bits >=3D end - || src_bits + src_x - + (src_y + clipped.height) * src_stride >=3D end) { - qemu_log_mask(LOG_UNIMP, "blt outside vram not implemented\n"); + if (!src_stride) { + qemu_log_mask(LOG_GUEST_ERROR, "Zero source pitch\n"); + g_free(color_data); return; } =20 @@ -207,6 +291,15 @@ void ati_2d_blt(ATIVGAState *s) unsigned int src_pitch =3D src_stride * sizeof(uint32_t); unsigned int dst_pitch =3D dst_stride * sizeof(uint32_t); =20 + if (src_bpp !=3D bpp) { + qemu_log_mask(LOG_UNIMP, + "Mismatched bit depths not yet supported " + "in the fallback (non-pixman) implementation= . " + "src: %d !=3D dst: %d\n", src_bpp, bpp); + g_free(color_data); + return; + } + for (y =3D 0; y < clipped.height; y++) { i =3D clipped.x * bypp; j =3D src_x * bypp; @@ -232,6 +325,8 @@ void ati_2d_blt(ATIVGAState *s) clipped.x + clipped.width : clipped.x); s->regs.dst_y =3D (s->regs.dp_cntl & DST_Y_TOP_TO_BOTTOM ? clipped.y + clipped.height : clipped.y); + + g_free(color_data); break; } case ROP3_PATCOPY: diff --git a/hw/display/ati_regs.h b/hw/display/ati_regs.h index 9b52b61dcb..b741c3c6b8 100644 --- a/hw/display/ati_regs.h +++ b/hw/display/ati_regs.h @@ -404,6 +404,7 @@ #define GMC_BRUSH_SOLIDCOLOR 0x000000d0 #define GMC_SRC_DSTCOLOR 0x00003000 #define GMC_BYTE_ORDER_MSB_TO_LSB 0x00000000 +#define GMC_BYTE_ORDER_LSB_TO_MSB 0x00004000 #define GMC_DP_SRC_RECT 0x02000000 #define GMC_3D_FCN_EN_CLR 0x00000000 #define GMC_AUX_CLIP_CLEAR 0x20000000 @@ -421,6 +422,18 @@ #define GMC_DST_CLIP_DEFAULT 0x00000000 #define GMC_DST_CLIP_LEAVE_ALONE 0x00000008 =20 +/* DP_GUI_MASTER_CNTL DP_SRC_DATATYPE named constants */ +#define GMC_SRC_DATATYPE_MASK 0x00003000 +#define GMC_SRC_DATATYPE_MONO_FRGD_BKGD 0x00000000 +#define GMC_SRC_DATATYPE_MONO_FRGD 0x00001000 +#define GMC_SRC_DATATYPE_COLOR 0x00003000 + +/* DP_GUI_MASTER_CNTL DP_SRC_SOURCE named constants */ +#define GMC_SRC_SOURCE_MASK 0x07000000 +#define GMC_SRC_SOURCE_MEMORY 0x02000000 +#define GMC_SRC_SOURCE_HOST_DATA 0x03000000 +#define GMC_SRC_SOURCE_HOST_DATA_ALIGNED 0x04000000 + /* DP_GUI_MASTER_CNTL ROP3 named constants */ #define GMC_ROP3_MASK 0x00ff0000 #define ROP3_BLACKNESS 0x00000000 --=20 2.51.0