From 55df3e6cc8fd2877b846482e9a91af46147771aa Mon Sep 17 00:00:00 2001 From: Raph Levien Date: Sat, 23 May 2020 11:25:22 -0700 Subject: [PATCH] Fix linewidth math Coarse rasterization wasn't entirely taking line width into account. Also fix swizzle in matrix (not yet used). And fix missing End command in ptcl output (hasn't been a problem because buffer was cleared). --- piet-gpu/shader/coarse.comp | 3 ++- piet-gpu/shader/coarse.spv | Bin 43268 -> 43620 bytes piet-gpu/shader/elements.comp | 4 ++-- piet-gpu/shader/elements.spv | Bin 45536 -> 45536 bytes 4 files changed, 4 insertions(+), 3 deletions(-) diff --git a/piet-gpu/shader/coarse.comp b/piet-gpu/shader/coarse.comp index c77c6b8..0519b2e 100644 --- a/piet-gpu/shader/coarse.comp +++ b/piet-gpu/shader/coarse.comp @@ -221,7 +221,7 @@ void main() { } // Set up for per-scanline coverage formula, below. float invslope = abs(dy) < 1e-9 ? 1e9 : dx / dy; - c = abs(invslope) * (0.5 * float(TILE_HEIGHT_PX) + line.stroke.y) * SX; + c = (line.stroke.x + abs(invslope) * (0.5 * float(TILE_HEIGHT_PX) + line.stroke.y)) * SX; b = invslope; // Note: assumes square tiles, otherwise scale. a = (line.p0.x - xy0.x - (line.p0.y - 0.5 * float(TILE_HEIGHT_PX) - xy0.y) * b) * SX; break; @@ -392,4 +392,5 @@ void main() { // removed, then the kernel fails with ERROR_DEVICE_LOST. if (rd_ix >= wr_ix || bin_ix == ~0) break; } + Cmd_End_write(cmd_ref); } diff --git a/piet-gpu/shader/coarse.spv b/piet-gpu/shader/coarse.spv index f74d0a003e966fa7050ab07d9a61957a6364f762..1329bb6f475f7cc836cc7715a5792d8410f48850 100644 GIT binary patch literal 43620 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 I_dNK20E7kjt^fc4 diff --git a/piet-gpu/shader/elements.comp b/piet-gpu/shader/elements.comp index bdb4e0d..43bb9cc 100644 --- a/piet-gpu/shader/elements.comp +++ b/piet-gpu/shader/elements.comp @@ -291,8 +291,8 @@ void main() { case Element_StrokeLine: LineSeg line = Element_StrokeLine_read(this_ref); AnnoStrokeLineSeg anno_line; - anno_line.p0 = st.mat.xz * line.p0.x + st.mat.yw * line.p0.y + st.translate; - anno_line.p1 = st.mat.xz * line.p1.x + st.mat.yw * line.p1.y + st.translate; + anno_line.p0 = st.mat.xy * line.p0.x + st.mat.zw * line.p0.y + st.translate; + anno_line.p1 = st.mat.xy * line.p1.x + st.mat.zw * line.p1.y + st.translate; if (tag == Element_StrokeLine) { anno_line.stroke = get_linewidth(st); } else { diff --git a/piet-gpu/shader/elements.spv b/piet-gpu/shader/elements.spv index 962bd0ac664fc8283b64a2a94fa207832f65fff5..a2d439c77fc4575f6aff7e1dbe84b56bdfd68bae 100644 GIT binary patch delta 34 ocmaFxnCZb|rVS=ujEs{_y~-JxCa?8+4P?*s2C_E``kYS%0P