get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/2202585/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 2202585,
    "url": "http://patchwork.ozlabs.org/api/patches/2202585/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20260227203944.746471-11-chad@jablonski.xyz/",
    "project": {
        "id": 14,
        "url": "http://patchwork.ozlabs.org/api/projects/14/?format=api",
        "name": "QEMU Development",
        "link_name": "qemu-devel",
        "list_id": "qemu-devel.nongnu.org",
        "list_email": "qemu-devel@nongnu.org",
        "web_url": "",
        "scm_url": "",
        "webscm_url": "",
        "list_archive_url": "",
        "list_archive_url_format": "",
        "commit_url_format": ""
    },
    "msgid": "<20260227203944.746471-11-chad@jablonski.xyz>",
    "list_archive_url": null,
    "date": "2026-02-27T20:39:36",
    "name": "[v9,10/18] ati-vga: Use local variables for register values in ati_2d_blt",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "8421826d02d7c1c3887d0fe4f0cdf2d5fefab1ff",
    "submitter": {
        "id": 91805,
        "url": "http://patchwork.ozlabs.org/api/people/91805/?format=api",
        "name": "Chad Jablonski",
        "email": "chad@jablonski.xyz"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20260227203944.746471-11-chad@jablonski.xyz/mbox/",
    "series": [
        {
            "id": 493814,
            "url": "http://patchwork.ozlabs.org/api/series/493814/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/list/?series=493814",
            "date": "2026-02-27T20:39:27",
            "name": "ati-vga: Implement HOST_DATA transfers to enable X.org text rendering",
            "version": 9,
            "mbox": "http://patchwork.ozlabs.org/series/493814/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/2202585/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2202585/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>",
        "X-Original-To": "incoming@patchwork.ozlabs.org",
        "Delivered-To": "patchwork-incoming@legolas.ozlabs.org",
        "Authentication-Results": [
            "legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=jablonski.xyz header.i=@jablonski.xyz\n header.a=rsa-sha256 header.s=fm2 header.b=slRkq5OD;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=messagingengine.com header.i=@messagingengine.com\n header.a=rsa-sha256 header.s=fm3 header.b=RSgkc2ii;\n\tdkim-atps=neutral",
            "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org\n (client-ip=209.51.188.17; helo=lists.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=patchwork.ozlabs.org)"
        ],
        "Received": [
            "from lists.gnu.org (lists.gnu.org [209.51.188.17])\n\t(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fN0cC2bhDz1xxx\n\tfor <incoming@patchwork.ozlabs.org>; Sat, 28 Feb 2026 07:41:47 +1100 (AEDT)",
            "from localhost ([::1] helo=lists1p.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.90_1)\n\t(envelope-from <qemu-devel-bounces@nongnu.org>)\n\tid 1vw4eD-0002bm-61; Fri, 27 Feb 2026 15:41:18 -0500",
            "from eggs.gnu.org ([2001:470:142:3::10])\n by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <chad@jablonski.xyz>)\n id 1vw4e1-0001T9-Hl\n for qemu-devel@nongnu.org; Fri, 27 Feb 2026 15:41:05 -0500",
            "from fout-a1-smtp.messagingengine.com ([103.168.172.144])\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <chad@jablonski.xyz>)\n id 1vw4dy-0007Pz-79\n for qemu-devel@nongnu.org; Fri, 27 Feb 2026 15:41:04 -0500",
            "from phl-compute-01.internal (phl-compute-01.internal [10.202.2.41])\n by mailfout.phl.internal (Postfix) with ESMTP id EC98FEC0636;\n Fri, 27 Feb 2026 15:41:00 -0500 (EST)",
            "from phl-frontend-04 ([10.202.2.163])\n by phl-compute-01.internal (MEProxy); Fri, 27 Feb 2026 15:41:00 -0500",
            "by mail.messagingengine.com (Postfix) with ESMTPA; Fri,\n 27 Feb 2026 15:41:00 -0500 (EST)",
            "from localhost (chomposaur [local])\n by chomposaur (OpenSMTPD) with ESMTPA id bf826384;\n Fri, 27 Feb 2026 20:40:55 +0000 (UTC)"
        ],
        "DKIM-Signature": [
            "v=1; a=rsa-sha256; c=relaxed/relaxed; d=jablonski.xyz;\n h=cc:cc:content-transfer-encoding:content-type:date:date:from\n :from:in-reply-to:in-reply-to:message-id:mime-version:references\n :reply-to:subject:subject:to:to; s=fm2; t=1772224860; x=\n 1772311260; bh=u1D2gj1k8+504f+ZE233OXp2oE6ZzFIewogKeoLNcOA=; b=s\n lRkq5OD032aqH27fu+CEjB/nvqKFpLdabMVk8QK1RSZQC4Nf1fZ5LEXpdWhc80+N\n LqtgD4ooqr6JeFJgB7/Z5MdvuhnHcJ2j7Y/XgH0Z7Zm24LTDrEJ4s+jbZHdum/VR\n 73/rgzWb8BLtze1cyiNyZE9Um3WaEGqqSn/QJSWUx9NWmviN79mFRavTmlDVZDQ+\n a4I50k6RH4ho9s7lO1WxEvz7jZY0vBB8OJ24poEHJmD9u4p4MAJ5VTXIqzX2h4Pz\n QBLPNzE6jvrjCyYejUnxO4ne1vpVnrCBkELsuVWeHSpTKAb7K5MWFXsQmKdDnleK\n tleaRBDfWwwBV6vMl1O8Q==",
            "v=1; a=rsa-sha256; c=relaxed/relaxed; d=\n messagingengine.com; h=cc:cc:content-transfer-encoding\n :content-type:date:date:feedback-id:feedback-id:from:from\n :in-reply-to:in-reply-to:message-id:mime-version:references\n :reply-to:subject:subject:to:to:x-me-proxy:x-me-sender\n :x-me-sender:x-sasl-enc; s=fm3; t=1772224860; x=1772311260; bh=u\n 1D2gj1k8+504f+ZE233OXp2oE6ZzFIewogKeoLNcOA=; b=RSgkc2iifZdFmOoRW\n zi2zSJhzugcHzPKgChA+D3RGHEpDPqhDkijCFaVAsJ5JtdMEff0L0gnUFA842hJ6\n 91yurKM82L7p68B9IhMiG8e0IVNdebNvYNMjFXlM43mHfDSGCqyRH49usdMTef9M\n 0VtHDkCF/feYblMP/WMsPP8jZcmSDAK/p7i4h2esIiMiczwkexflKj+xIQcxRMO/\n itSusuWmylRnZC3Wn/LKH6JpXY4b+pZ/MkpEV2hhNKuixSQ0KR4wFL6yziT9UXxI\n chMVd3MK0BrvvaK8MldMRFP6fgBOc8NKiZg8y/PevaajbFsI8m0ExRd9GNwfUSc2\n GGclA=="
        ],
        "X-ME-Sender": "<xms:XAGiaSCjDtJXhBAz20oLS8SKoclyGKRlKNNX4yMQdq15i7x79n1g8A>\n <xme:XAGiaYDHXFt-iZdf-eAYefJzAbED6fcQutYcea1qiK3eFrj2E2zRVcck2hl0l7S8s\n LVaxENcnmJbW2yeVvuv17odcw-6fumto5PON-zhVbY66QsY5cMTGgE>",
        "X-ME-Received": "\n <xmr:XAGiacAbX7E_JxfqKzxDBaNOhqT1cF0yLw1Cv2qUWscyPf5V73fpdUfPPrHz>",
        "X-ME-Proxy-Cause": "\n gggruggvucftvghtrhhoucdtuddrgeefgedrtddtgddvgeelleekucetufdoteggodetrf\n dotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfurfetoffkrfgpnffqhgenuceu\n rghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmnegfrh\n hlucfvnfffucdljedtmdenucfjughrpefhvfevufffkffojghfggfgsedtkeertdertddt\n necuhfhrohhmpeevhhgrugculfgrsghlohhnshhkihcuoegthhgrugesjhgrsghlohhnsh\n hkihdrgiihiieqnecuggftrfgrthhtvghrnhepgfeiteejhfelheefieetjefgleejfffh\n ueffvdduieejgfeuueeuvddvkeejhfelnecuvehluhhsthgvrhfuihiivgeptdenucfrrg\n hrrghmpehmrghilhhfrhhomheptghhrggusehjrggslhhonhhskhhirdighiiipdhnsggp\n rhgtphhtthhopeehpdhmohguvgepshhmthhpohhuthdprhgtphhtthhopegthhgrugesjh\n grsghlohhnshhkihdrgiihiidprhgtphhtthhopegsrghlrghtohhnsegvihhkrdgsmhgv\n rdhhuhdprhgtphhtthhopehqvghmuhdquggvvhgvlhesnhhonhhgnhhurdhorhhgpdhrtg\n hpthhtohepmhgrrhgtrghnughrvgdrlhhurhgvrghusehrvgguhhgrthdrtghomhdprhgt\n phhtthhopehkrhgrgigvlhesrhgvughhrghtrdgtohhm",
        "X-ME-Proxy": "<xmx:XAGiaboNg0K77qJFWlBgaWg3arfenDDNSlfFmzdPmxQjmhmX74_JEA>\n <xmx:XAGiaelNlgehVlb0GPBEJlkT24_50yDwag9i7482_f4q9KYr3jMuwg>\n <xmx:XAGiaTzKA3zcIlG6Pumlv3ET6C68dItfj8XboHYdczIAEL5SARHqrg>\n <xmx:XAGiae9EEKRWdaEJo3Ta-dNcUzTqEXe62T6HtaeCeNlg5rSVufrSoQ>\n <xmx:XAGiabKQrrwANvP4kXXfza7kftrPpB7Rrcml-EELFsaVTz8l4jVj0mP5>",
        "Feedback-ID": "ib26944c1:Fastmail",
        "From": "Chad Jablonski <chad@jablonski.xyz>",
        "To": "qemu-devel@nongnu.org",
        "Cc": "BALATON Zoltan <balaton@eik.bme.hu>, Gerd Hoffmann <kraxel@redhat.com>,\n\t=?utf-8?q?Marc-Andr=C3=A9_Lureau?= <marcandre.lureau@redhat.com>,\n Chad Jablonski <chad@jablonski.xyz>",
        "Subject": "[PATCH v9 10/18] ati-vga: Use local variables for register values in\n ati_2d_blt",
        "Date": "Fri, 27 Feb 2026 15:39:36 -0500",
        "Message-ID": "<20260227203944.746471-11-chad@jablonski.xyz>",
        "X-Mailer": "git-send-email 2.52.0",
        "In-Reply-To": "<20260227203944.746471-1-chad@jablonski.xyz>",
        "References": "<20260227203944.746471-1-chad@jablonski.xyz>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Received-SPF": "pass client-ip=103.168.172.144;\n envelope-from=chad@jablonski.xyz;\n helo=fout-a1-smtp.messagingengine.com",
        "X-Spam_score_int": "8",
        "X-Spam_score": "0.8",
        "X-Spam_bar": "/",
        "X-Spam_report": "(0.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,\n DKIM_VALID=-0.1,\n DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FROM_SUSPICIOUS_NTLD=0.5,\n PDS_OTHER_BAD_TLD=1.999, RCVD_IN_DNSWL_LOW=-0.7,\n RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.706,\n RCVD_IN_VALIDITY_RPBL_BLOCKED=0.401,\n SPF_HELO_PASS=-0.001, SPF_PASS=-0.001,\n UNPARSEABLE_RELAY=0.001 autolearn=no autolearn_force=no",
        "X-Spam_action": "no action",
        "X-BeenThere": "qemu-devel@nongnu.org",
        "X-Mailman-Version": "2.1.29",
        "Precedence": "list",
        "List-Id": "qemu development <qemu-devel.nongnu.org>",
        "List-Unsubscribe": "<https://lists.nongnu.org/mailman/options/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>",
        "List-Archive": "<https://lists.nongnu.org/archive/html/qemu-devel>",
        "List-Post": "<mailto:qemu-devel@nongnu.org>",
        "List-Help": "<mailto:qemu-devel-request@nongnu.org?subject=help>",
        "List-Subscribe": "<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=subscribe>",
        "Errors-To": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org",
        "Sender": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org"
    },
    "content": "ati_2d_blt uses a mixture of locals and direct register access of needed\nstate. This assigns all values derived from register state to local\nvariables. It prepares the function for a larger refactor that removes\nthe dependency on the full device and direct register access entirely.\n\nSigned-off-by: Chad Jablonski <chad@jablonski.xyz>\nReviewed-by: BALATON Zoltan <balaton@eik.bme.hu>\n---\n hw/display/ati_2d.c | 97 ++++++++++++++++++++++++---------------------\n 1 file changed, 52 insertions(+), 45 deletions(-)",
    "diff": "diff --git a/hw/display/ati_2d.c b/hw/display/ati_2d.c\nindex e366774835..689b07b4d0 100644\n--- a/hw/display/ati_2d.c\n+++ b/hw/display/ati_2d.c\n@@ -65,10 +65,20 @@ void ati_2d_blt(ATIVGAState *s)\n {\n     /* FIXME it is probably more complex than this and may need to be */\n     /* rewritten but for now as a start just to get some output: */\n-    unsigned dst_x = (s->regs.dp_cntl & DST_X_LEFT_TO_RIGHT ?\n-                      s->regs.dst_x : s->regs.dst_x + 1 - s->regs.dst_width);\n-    unsigned dst_y = (s->regs.dp_cntl & DST_Y_TOP_TO_BOTTOM ?\n-                      s->regs.dst_y : s->regs.dst_y + 1 - s->regs.dst_height);\n+    bool use_pixman_fill = s->use_pixman & BIT(0);\n+    bool use_pixman_blt = s->use_pixman & BIT(1);\n+    uint32_t rop3 = s->regs.dp_mix & GMC_ROP3_MASK;\n+    bool left_to_right = s->regs.dp_cntl & DST_X_LEFT_TO_RIGHT;\n+    bool top_to_bottom = s->regs.dp_cntl & DST_Y_TOP_TO_BOTTOM;\n+    uint32_t frgd_clr = s->regs.dp_brush_frgd_clr;\n+    uint8_t *palette = s->vga.palette;\n+    unsigned dst_offset = s->regs.dst_offset;\n+    unsigned dst_width = s->regs.dst_width;\n+    unsigned dst_height = s->regs.dst_height;\n+    unsigned dst_x = (left_to_right ?\n+                     s->regs.dst_x : s->regs.dst_x + 1 - dst_width);\n+    unsigned dst_y = (top_to_bottom ?\n+                     s->regs.dst_y : s->regs.dst_y + 1 - dst_height);\n     int bpp = ati_bpp_from_datatype(s);\n     if (!bpp) {\n         qemu_log_mask(LOG_GUEST_ERROR, \"Invalid bpp\\n\");\n@@ -79,7 +89,7 @@ void ati_2d_blt(ATIVGAState *s)\n         qemu_log_mask(LOG_GUEST_ERROR, \"Zero dest pitch\\n\");\n         return;\n     }\n-    uint8_t *dst_bits = s->vga.vram_ptr + s->regs.dst_offset;\n+    uint8_t *dst_bits = s->vga.vram_ptr + dst_offset;\n \n     if (s->dev_id == PCI_DEVICE_ID_ATI_RAGE128_PF) {\n         dst_bits += s->regs.crtc_offset & 0x07ffffff;\n@@ -88,26 +98,25 @@ void ati_2d_blt(ATIVGAState *s)\n     int dst_stride_words = dst_stride / sizeof(uint32_t);\n     uint8_t *end = s->vga.vram_ptr + s->vga.vram_size;\n     if (dst_x > 0x3fff || dst_y > 0x3fff || dst_bits >= end\n-        || dst_bits + dst_x\n-         + (dst_y + s->regs.dst_height) * dst_stride >= end) {\n+        || dst_bits + dst_x + (dst_y + dst_height) * dst_stride >= end) {\n         qemu_log_mask(LOG_UNIMP, \"blt outside vram not implemented\\n\");\n         return;\n     }\n     DPRINTF(\"%d %d %d, %d %d %d, (%d,%d) -> (%d,%d) %dx%d %c %c\\n\",\n-            s->regs.src_offset, s->regs.dst_offset, s->regs.default_offset,\n-            s->regs.src_pitch, s->regs.dst_pitch, s->regs.default_pitch,\n+            s->regs.src_offset, dst_offset, s->regs.default_offset,\n+            s->regs.src_pitch, dst_stride, s->regs.default_pitch,\n             s->regs.src_x, s->regs.src_y, dst_x, dst_y,\n-            s->regs.dst_width, s->regs.dst_height,\n-            (s->regs.dp_cntl & DST_X_LEFT_TO_RIGHT ? '>' : '<'),\n-            (s->regs.dp_cntl & DST_Y_TOP_TO_BOTTOM ? 'v' : '^'));\n-    switch (s->regs.dp_mix & GMC_ROP3_MASK) {\n+            dst_width, dst_height,\n+            (left_to_right ? '>' : '<'),\n+            (top_to_bottom ? 'v' : '^'));\n+    switch (rop3) {\n     case ROP3_SRCCOPY:\n     {\n         bool fallback = false;\n-        unsigned src_x = (s->regs.dp_cntl & DST_X_LEFT_TO_RIGHT ?\n-                       s->regs.src_x : s->regs.src_x + 1 - s->regs.dst_width);\n-        unsigned src_y = (s->regs.dp_cntl & DST_Y_TOP_TO_BOTTOM ?\n-                       s->regs.src_y : s->regs.src_y + 1 - s->regs.dst_height);\n+        unsigned src_x = (left_to_right ?\n+                         s->regs.src_x : s->regs.src_x + 1 - dst_width);\n+        unsigned src_y = (top_to_bottom ?\n+                         s->regs.src_y : s->regs.src_y + 1 - dst_height);\n         int src_stride = s->regs.src_pitch;\n         if (!src_stride) {\n             qemu_log_mask(LOG_GUEST_ERROR, \"Zero source pitch\\n\");\n@@ -122,7 +131,7 @@ void ati_2d_blt(ATIVGAState *s)\n         int src_stride_words = src_stride / sizeof(uint32_t);\n         if (src_x > 0x3fff || src_y > 0x3fff || src_bits >= end\n             || src_bits + src_x\n-             + (src_y + s->regs.dst_height) * src_stride >= end) {\n+             + (src_y + dst_height) * src_stride >= end) {\n             qemu_log_mask(LOG_UNIMP, \"blt outside vram not implemented\\n\");\n             return;\n         }\n@@ -130,30 +139,28 @@ void ati_2d_blt(ATIVGAState *s)\n         DPRINTF(\"pixman_blt(%p, %p, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d)\\n\",\n                 src_bits, dst_bits, src_stride_words, dst_stride_words,\n                 bpp, bpp, src_x, src_y, dst_x, dst_y,\n-                s->regs.dst_width, s->regs.dst_height);\n+                dst_width, dst_height);\n #ifdef CONFIG_PIXMAN\n-        if ((s->use_pixman & BIT(1)) &&\n-            s->regs.dp_cntl & DST_X_LEFT_TO_RIGHT &&\n-            s->regs.dp_cntl & DST_Y_TOP_TO_BOTTOM) {\n+        if (use_pixman_blt && left_to_right && top_to_bottom) {\n             fallback = !pixman_blt((uint32_t *)src_bits, (uint32_t *)dst_bits,\n                                    src_stride_words, dst_stride_words, bpp, bpp,\n                                    src_x, src_y, dst_x, dst_y,\n-                                   s->regs.dst_width, s->regs.dst_height);\n-        } else if (s->use_pixman & BIT(1)) {\n+                                   dst_width, dst_height);\n+        } else if (use_pixman_blt) {\n             /* FIXME: We only really need a temporary if src and dst overlap */\n-            int llb = s->regs.dst_width * (bpp / 8);\n+            int llb = dst_width * (bpp / 8);\n             int tmp_stride_words = DIV_ROUND_UP(llb, sizeof(uint32_t));\n             uint32_t *tmp = g_malloc(tmp_stride_words * sizeof(uint32_t) *\n-                                     s->regs.dst_height);\n+                                     dst_height);\n             fallback = !pixman_blt((uint32_t *)src_bits, tmp,\n                                    src_stride_words, tmp_stride_words, bpp, bpp,\n                                    src_x, src_y, 0, 0,\n-                                   s->regs.dst_width, s->regs.dst_height);\n+                                   dst_width, dst_height);\n             if (!fallback) {\n                 fallback = !pixman_blt(tmp, (uint32_t *)dst_bits,\n                                        tmp_stride_words, dst_stride_words,\n                                        bpp, bpp, 0, 0, dst_x, dst_y,\n-                                       s->regs.dst_width, s->regs.dst_height);\n+                                       dst_width, dst_height);\n             }\n             g_free(tmp);\n         } else\n@@ -163,17 +170,17 @@ void ati_2d_blt(ATIVGAState *s)\n         }\n         if (fallback) {\n             unsigned int y, i, j, bypp = bpp / 8;\n-            for (y = 0; y < s->regs.dst_height; y++) {\n+            for (y = 0; y < dst_height; y++) {\n                 i = dst_x * bypp;\n                 j = src_x * bypp;\n-                if (s->regs.dp_cntl & DST_Y_TOP_TO_BOTTOM) {\n+                if (top_to_bottom) {\n                     i += (dst_y + y) * dst_stride;\n                     j += (src_y + y) * src_stride;\n                 } else {\n-                    i += (dst_y + s->regs.dst_height - 1 - y) * dst_stride;\n-                    j += (src_y + s->regs.dst_height - 1 - y) * src_stride;\n+                    i += (dst_y + dst_height - 1 - y) * dst_stride;\n+                    j += (src_y + dst_height - 1 - y) * src_stride;\n                 }\n-                memmove(&dst_bits[i], &src_bits[j], s->regs.dst_width * bypp);\n+                memmove(&dst_bits[i], &src_bits[j], dst_width * bypp);\n             }\n         }\n         break;\n@@ -184,34 +191,34 @@ void ati_2d_blt(ATIVGAState *s)\n     {\n         uint32_t filler = 0;\n \n-        switch (s->regs.dp_mix & GMC_ROP3_MASK) {\n+        switch (rop3) {\n         case ROP3_PATCOPY:\n-            filler = s->regs.dp_brush_frgd_clr;\n+            filler = frgd_clr;\n             break;\n         case ROP3_BLACKNESS:\n-            filler = 0xffUL << 24 | rgb_to_pixel32(s->vga.palette[0],\n-                     s->vga.palette[1], s->vga.palette[2]);\n+            filler = 0xffUL << 24 | rgb_to_pixel32(palette[0], palette[1],\n+                                                   palette[2]);\n             break;\n         case ROP3_WHITENESS:\n-            filler = 0xffUL << 24 | rgb_to_pixel32(s->vga.palette[3],\n-                     s->vga.palette[4], s->vga.palette[5]);\n+            filler = 0xffUL << 24 | rgb_to_pixel32(palette[3], palette[4],\n+                                                   palette[5]);\n             break;\n         }\n \n         DPRINTF(\"pixman_fill(%p, %d, %d, %d, %d, %d, %d, %x)\\n\",\n                 dst_bits, dst_stride_words, bpp, dst_x, dst_y,\n-                s->regs.dst_width, s->regs.dst_height, filler);\n+                dst_width, dst_height, filler);\n #ifdef CONFIG_PIXMAN\n-        if (!(s->use_pixman & BIT(0)) ||\n+        if (!use_pixman_fill ||\n             !pixman_fill((uint32_t *)dst_bits, dst_stride_words, bpp, dst_x,\n-                         dst_y, s->regs.dst_width, s->regs.dst_height, filler))\n+                         dst_y, dst_width, dst_height, filler))\n #endif\n         {\n             /* fallback when pixman failed or we don't want to call it */\n             unsigned int x, y, i, bypp = bpp / 8;\n-            for (y = 0; y < s->regs.dst_height; y++) {\n+            for (y = 0; y < dst_height; y++) {\n                 i = dst_x * bypp + (dst_y + y) * dst_stride;\n-                for (x = 0; x < s->regs.dst_width; x++, i += bypp) {\n+                for (x = 0; x < dst_width; x++, i += bypp) {\n                     stn_he_p(&dst_bits[i], bypp, filler);\n                 }\n             }\n@@ -220,7 +227,7 @@ void ati_2d_blt(ATIVGAState *s)\n     }\n     default:\n         qemu_log_mask(LOG_UNIMP, \"Unimplemented ati_2d blt op %x\\n\",\n-                      (s->regs.dp_mix & GMC_ROP3_MASK) >> 16);\n+                      rop3 >> 16);\n         return;\n     }\n \n",
    "prefixes": [
        "v9",
        "10/18"
    ]
}