get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 2202594,
    "url": "http://patchwork.ozlabs.org/api/patches/2202594/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20260227203944.746471-17-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-17-chad@jablonski.xyz>",
    "list_archive_url": null,
    "date": "2026-02-27T20:39:42",
    "name": "[v9,16/18] ati-vga: Implement scissor rectangle clipping for 2D operations",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "2f5cd0b6c8a342758d060897bf0df320475a5834",
    "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-17-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/2202594/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2202594/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=Mh1q45r5;\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=VWkwtFAy;\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 4fN0cc6RgBz1xxx\n\tfor <incoming@patchwork.ozlabs.org>; Sat, 28 Feb 2026 07:42:08 +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 1vw4eU-0002ua-B5; Fri, 27 Feb 2026 15:41:34 -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 1vw4e3-0001io-OJ\n for qemu-devel@nongnu.org; Fri, 27 Feb 2026 15:41:07 -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 1vw4e1-0007Qo-4Z\n for qemu-devel@nongnu.org; Fri, 27 Feb 2026 15:41:07 -0500",
            "from phl-compute-04.internal (phl-compute-04.internal [10.202.2.44])\n by mailfout.phl.internal (Postfix) with ESMTP id ED8DDEC0647;\n Fri, 27 Feb 2026 15:41:01 -0500 (EST)",
            "from phl-frontend-04 ([10.202.2.163])\n by phl-compute-04.internal (MEProxy); Fri, 27 Feb 2026 15:41:01 -0500",
            "by mail.messagingengine.com (Postfix) with ESMTPA; Fri,\n 27 Feb 2026 15:41:01 -0500 (EST)",
            "from localhost (chomposaur [local])\n by chomposaur (OpenSMTPD) with ESMTPA id 06823647;\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=1772224861; x=\n 1772311261; bh=oO60WbuNx27iFmAGnYWmwzzQ7h70ucPm/vTJ+m1zWW4=; b=M\n h1q45r50O/0EDCWAw6Cu8+DTxcqj9nsexw0PNfhcLKV81LlFV0jKsqNMyRd26VQA\n 7Kd/5I0nqba83p744sP7BpuLnwTgA/otly3cPiY91ht4XfVCOQE0/QN0oDGuuiGf\n HNEQj3EzzoO90NF2brOsdnMEy/pWp4E85Vm0o6N7QOisLsLwqmcRcaiug5lUS9Ie\n qPUjONC80ns5FJ1v2tpRLxTy/ejwEzbn2qOvdIGmNG75gilPw9BG6uKpdk8Cmwi5\n ts52yF6aZoygoCviEJEFPxyRA7lqoc8Fwwpg2nBAYgfLYl19YV3vseLxxxsTK6vx\n HiYoscePYafmZ8lQehnXQ==",
            "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=1772224861; x=1772311261; bh=o\n O60WbuNx27iFmAGnYWmwzzQ7h70ucPm/vTJ+m1zWW4=; b=VWkwtFAyLkk1TiPJ6\n o2VXxxw7YfWEEvwW3kAIBPUYCUPzTF+D7LnFJUewr999KGBfQqyz13YCuCABEOxw\n IYIkE6Et/76YWF8u0RKdEPYNXR2gQbpjCN7Oj5TdHpjBrWJBLoYHzZ0tjZ96pik2\n ee/mDoytu8+Pqqx5deqKEQrp9h6B2x+lZuQSUKazWAy69Z0N74OCr0pL9lJj5CbS\n yIww3OEEY5W62L9QEfHj8ykFdMLGwXAwF47LRVwcS2OSIU/xaJeEHU3iMT8lbYtj\n Rjnusd68aaHqi0OJP7L9D37r4XBYmYlF1mZn/yX8d/2griCc/xejxCeG4R7+375s\n I/t9Q=="
        ],
        "X-ME-Sender": "<xms:XQGiaf5iXtetgSUB0ywgqltWpXVSzrT31-VNwrYkJ6JZeSaQVBmE0w>\n <xme:XQGiabxAdSHw3KJp4c-oF42R4kpWeyF82J3QoZWXdbMWrbZlxFuaod8zbPsQbDl__\n 0i8Y7MjBF4RxLs2MsDi-KmJ9f7M_GcwGyvthhjckJ5Vgtl2pwNbFII>",
        "X-ME-Received": "\n <xmr:XQGiaewKeO9HsBtUn5ovlVW3R1EJ-49b4SE-KFpQtkGjUq4dXWhIDRO5Di2R>",
        "X-ME-Proxy-Cause": "\n gggruggvucftvghtrhhoucdtuddrgeefgedrtddtgddvgeelleelucetufdoteggodetrf\n dotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfurfetoffkrfgpnffqhgenuceu\n rghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmnegfrh\n hlucfvnfffucdljedtmdenucfjughrpefhvfevufffkffojghfggfgsedtkeertdertddt\n necuhfhrohhmpeevhhgrugculfgrsghlohhnshhkihcuoegthhgrugesjhgrsghlohhnsh\n hkihdrgiihiieqnecuggftrfgrthhtvghrnhepgfeiteejhfelheefieetjefgleejfffh\n ueffvdduieejgfeuueeuvddvkeejhfelnecuvehluhhsthgvrhfuihiivgepudenucfrrg\n hrrghmpehmrghilhhfrhhomheptghhrggusehjrggslhhonhhskhhirdighiiipdhnsggp\n rhgtphhtthhopeehpdhmohguvgepshhmthhpohhuthdprhgtphhtthhopehkrhgrgigvlh\n esrhgvughhrghtrdgtohhmpdhrtghpthhtoheptghhrggusehjrggslhhonhhskhhirdig\n hiiipdhrtghpthhtohepmhgrrhgtrghnughrvgdrlhhurhgvrghusehrvgguhhgrthdrtg\n homhdprhgtphhtthhopehqvghmuhdquggvvhgvlhesnhhonhhgnhhurdhorhhgpdhrtghp\n thhtohepsggrlhgrthhonhesvghikhdrsghmvgdrhhhu",
        "X-ME-Proxy": "<xmx:XQGiabzYHQ-VcdOo2KTVBqk666WOc6VxxslbdGFqhgrQa5APrVJX8Q>\n <xmx:XQGiaQbt00rVXDr6JFHO63gThyT-nTAA2AIxrhSHYTzqZ8ANWy_t0A>\n <xmx:XQGiaUWps_wKQOE0X1qUl9Lgx1_k1EfjkqRXM3hpPGsSiLYaDF7crQ>\n <xmx:XQGiaWhYaDpcOk_lYWbJ1pgzErEIgkxkar_IBrlNU9CuqquVh7binw>\n <xmx:XQGiaVN8O0IgRnIWNCVdu0ZDc398dnimoErmGlRZze6kPiPgt94xmBeY>",
        "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 16/18] ati-vga: Implement scissor rectangle clipping for 2D\n operations",
        "Date": "Fri, 27 Feb 2026 15:39:42 -0500",
        "Message-ID": "<20260227203944.746471-17-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": "Use scissor registers to clip blit operations. This is required\nfor text rendering in X using the r128 driver. Without it overly-wide\nglyphs are drawn and create all sorts of chaos.\n\nThe visible destination rectangle (vis_dst) is the intersection of the\nscissor rectangle and the destination rectangle (dst).\n\nThe src also needs to be offset if clipped on the top and/or\nleft sides to ensure that src data is read correctly and appears\nclipped when drawn rather than shifted.\n\nSigned-off-by: Chad Jablonski <chad@jablonski.xyz>\n---\n hw/display/ati_2d.c | 80 +++++++++++++++++++++++++++++++--------------\n 1 file changed, 55 insertions(+), 25 deletions(-)",
    "diff": "diff --git a/hw/display/ati_2d.c b/hw/display/ati_2d.c\nindex dbc8791824..2b3a239da3 100644\n--- a/hw/display/ati_2d.c\n+++ b/hw/display/ati_2d.c\n@@ -52,6 +52,7 @@ typedef struct {\n     uint32_t frgd_clr;\n     const uint8_t *palette;\n     const uint8_t *vram_end;\n+    QemuRect scissor;\n \n     QemuRect dst;\n     int dst_stride;\n@@ -91,6 +92,11 @@ static void setup_2d_blt_ctx(const ATIVGAState *s, ATI2DCtx *ctx)\n     ctx->dst_offset = s->regs.dst_offset;\n     ctx->vram_end = s->vga.vram_ptr + s->vga.vram_size;\n \n+    ctx->scissor.width = s->regs.sc_right - s->regs.sc_left + 1;\n+    ctx->scissor.height = s->regs.sc_bottom - s->regs.sc_top + 1;\n+    ctx->scissor.x = s->regs.sc_left;\n+    ctx->scissor.y = s->regs.sc_top;\n+\n     ctx->dst.width = s->regs.dst_width;\n     ctx->dst.height = s->regs.dst_height;\n     ctx->dst.x = (ctx->left_to_right ?\n@@ -129,6 +135,7 @@ static void ati_2d_do_blt(ATI2DCtx *ctx, uint8_t use_pixman)\n     /* rewritten but for now as a start just to get some output: */\n     bool use_pixman_fill = use_pixman & BIT(0);\n     bool use_pixman_blt = use_pixman & BIT(1);\n+    QemuRect vis_src, vis_dst;\n     if (!ctx->bpp) {\n         qemu_log_mask(LOG_GUEST_ERROR, \"Invalid bpp\\n\");\n         return;\n@@ -144,6 +151,29 @@ static void ati_2d_do_blt(ATI2DCtx *ctx, uint8_t use_pixman)\n         qemu_log_mask(LOG_UNIMP, \"blt outside vram not implemented\\n\");\n         return;\n     }\n+    qemu_rect_intersect(&ctx->dst, &ctx->scissor, &vis_dst);\n+    if (!vis_dst.height || !vis_dst.width) {\n+        /* Nothing is visible, completely clipped */\n+        return;\n+    }\n+    /*\n+     * The src must be offset if clipping is applied to the dst.\n+     * This is so that when the source is blit to a dst clipped\n+     * on the top or left the src image is not shifted into the\n+     * clipped region but actually clipped.\n+     */\n+    vis_src.x = ctx->src.x + (vis_dst.x - ctx->dst.x);\n+    vis_src.y = ctx->src.y + (vis_dst.y - ctx->dst.y);\n+    vis_src.width = vis_dst.width;\n+    vis_src.height = vis_dst.height;\n+\n+    DPRINTF(\"dst: (%d,%d) %dx%d -> vis_dst: (%d,%d) %dx%d\\n\",\n+            ctx->dst.x, ctx->dst.y, ctx->dst.width, ctx->dst.height,\n+            vis_dst.x, vis_dst.y, vis_dst.width, vis_dst.height);\n+    DPRINTF(\"src: (%d,%d) %dx%d -> vis_src: (%d,%d) %dx%d\\n\",\n+            ctx->src.x, ctx->src.y, ctx->src.width, ctx->src.height,\n+            vis_src.x, vis_src.y, vis_src.width, vis_src.height);\n+\n     switch (ctx->rop3) {\n     case ROP3_SRCCOPY:\n     {\n@@ -156,31 +186,31 @@ static void ati_2d_do_blt(ATI2DCtx *ctx, uint8_t use_pixman)\n \n         DPRINTF(\"pixman_blt(%p, %p, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d)\\n\",\n                 ctx->src_bits, ctx->dst_bits, src_stride_words,\n-                dst_stride_words, ctx->bpp, ctx->bpp, ctx->src.x, ctx->src.y,\n-                ctx->dst.x, ctx->dst.y, ctx->dst.width, ctx->dst.height);\n+                dst_stride_words, ctx->bpp, ctx->bpp, vis_src.x, vis_src.y,\n+                vis_dst.x, vis_dst.y, vis_dst.width, vis_dst.height);\n #ifdef CONFIG_PIXMAN\n         if (use_pixman_blt && ctx->left_to_right && ctx->top_to_bottom) {\n             fallback = !pixman_blt((uint32_t *)ctx->src_bits,\n                                    (uint32_t *)ctx->dst_bits, src_stride_words,\n                                    dst_stride_words, ctx->bpp, ctx->bpp,\n-                                   ctx->src.x, ctx->src.y, ctx->dst.x,\n-                                   ctx->dst.y, ctx->dst.width, ctx->dst.height);\n+                                   vis_src.x, vis_src.y, vis_dst.x, vis_dst.y,\n+                                   vis_dst.width, vis_dst.height);\n         } else if (use_pixman_blt) {\n             /* FIXME: We only really need a temporary if src and dst overlap */\n-            int llb = ctx->dst.width * (ctx->bpp / 8);\n+            int llb = vis_dst.width * (ctx->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-                                     ctx->dst.height);\n+                                     vis_dst.height);\n             fallback = !pixman_blt((uint32_t *)ctx->src_bits, tmp,\n                                    src_stride_words, tmp_stride_words, ctx->bpp,\n-                                   ctx->bpp, ctx->src.x, ctx->src.y, 0, 0,\n-                                   ctx->dst.width, ctx->dst.height);\n+                                   ctx->bpp, vis_src.x, vis_src.y, 0, 0,\n+                                   vis_dst.width, vis_dst.height);\n             if (!fallback) {\n                 fallback = !pixman_blt(tmp, (uint32_t *)ctx->dst_bits,\n                                        tmp_stride_words, dst_stride_words,\n                                        ctx->bpp, ctx->bpp, 0, 0,\n-                                       ctx->dst.x, ctx->dst.y,\n-                                       ctx->dst.width, ctx->dst.height);\n+                                       vis_dst.x, vis_dst.y,\n+                                       vis_dst.width, vis_dst.height);\n             }\n             g_free(tmp);\n         } else\n@@ -190,20 +220,20 @@ static void ati_2d_do_blt(ATI2DCtx *ctx, uint8_t use_pixman)\n         }\n         if (fallback) {\n             unsigned int y, i, j, bypp = ctx->bpp / 8;\n-            for (y = 0; y < ctx->dst.height; y++) {\n-                i = ctx->dst.x * bypp;\n-                j = ctx->src.x * bypp;\n+            for (y = 0; y < vis_dst.height; y++) {\n+                i = vis_dst.x * bypp;\n+                j = vis_src.x * bypp;\n                 if (ctx->top_to_bottom) {\n-                    i += (ctx->dst.y + y) * ctx->dst_stride;\n-                    j += (ctx->src.y + y) * ctx->src_stride;\n+                    i += (vis_dst.y + y) * ctx->dst_stride;\n+                    j += (vis_src.y + y) * ctx->src_stride;\n                 } else {\n-                    i += (ctx->dst.y + ctx->dst.height - 1 - y)\n+                    i += (vis_dst.y + vis_dst.height - 1 - y)\n                          * ctx->dst_stride;\n-                    j += (ctx->src.y + ctx->dst.height - 1 - y)\n+                    j += (vis_src.y + vis_dst.height - 1 - y)\n                          * ctx->src_stride;\n                 }\n                 memmove(&ctx->dst_bits[i], &ctx->src_bits[j],\n-                        ctx->dst.width * bypp);\n+                        vis_dst.width * bypp);\n             }\n         }\n         break;\n@@ -231,20 +261,20 @@ static void ati_2d_do_blt(ATI2DCtx *ctx, uint8_t use_pixman)\n         }\n \n         DPRINTF(\"pixman_fill(%p, %d, %d, %d, %d, %d, %d, %x)\\n\",\n-                ctx->dst_bits, dst_stride_words, ctx->bpp, ctx->dst.x,\n-                ctx->dst.y, ctx->dst.width, ctx->dst.height, filler);\n+                ctx->dst_bits, dst_stride_words, ctx->bpp, vis_dst.x,\n+                vis_dst.y, vis_dst.width, vis_dst.height, filler);\n #ifdef CONFIG_PIXMAN\n         if (!use_pixman_fill ||\n             !pixman_fill((uint32_t *)ctx->dst_bits, dst_stride_words, ctx->bpp,\n-                         ctx->dst.x, ctx->dst.y,\n-                         ctx->dst.width, ctx->dst.height, filler))\n+                         vis_dst.x, vis_dst.y, vis_dst.width, vis_dst.height,\n+                         filler))\n #endif\n         {\n             /* fallback when pixman failed or we don't want to call it */\n             unsigned int x, y, i, bypp = ctx->bpp / 8;\n-            for (y = 0; y < ctx->dst.height; y++) {\n-                i = ctx->dst.x * bypp + (ctx->dst.y + y) * ctx->dst_stride;\n-                for (x = 0; x < ctx->dst.width; x++, i += bypp) {\n+            for (y = 0; y < vis_dst.height; y++) {\n+                i = vis_dst.x * bypp + (vis_dst.y + y) * ctx->dst_stride;\n+                for (x = 0; x < vis_dst.width; x++, i += bypp) {\n                     stn_he_p(&ctx->dst_bits[i], bypp, filler);\n                 }\n             }\n",
    "prefixes": [
        "v9",
        "16/18"
    ]
}