From 29a8975a9ab36b6e38927007f4179f75d7f3c28d Mon Sep 17 00:00:00 2001 From: Raph Levien Date: Thu, 15 Jul 2021 11:18:48 -0700 Subject: [PATCH 1/2] Retain subdivision results Don't recompute the parameters from quadratic subdivision, but rather retain them across the two phases (summing the subdivision estimate, and generating the subdivisions). The motivation for this is that the values were subtly different (differing by 1 or 2 least signficant bits) across the two phases. It *might* also be faster depending on ALU/memory relative performance. Fixes #107 --- piet-gpu/shader/path_coarse.comp | 10 +++++++++- piet-gpu/shader/path_coarse.spv | Bin 43040 -> 43256 bytes 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/piet-gpu/shader/path_coarse.comp b/piet-gpu/shader/path_coarse.comp index 147c8a5..20c8142 100644 --- a/piet-gpu/shader/path_coarse.comp +++ b/piet-gpu/shader/path_coarse.comp @@ -30,6 +30,7 @@ layout(set = 0, binding = 1) readonly buffer ConfigBuf { #define Q_ACCURACY (ACCURACY * 0.1) #define REM_ACCURACY (ACCURACY - Q_ACCURACY) #define MAX_HYPOT2 (432.0 * Q_ACCURACY * Q_ACCURACY) +#define MAX_QUADS 16 vec2 eval_quad(vec2 p0, vec2 p1, vec2 p2, float t) { float mt = 1.0 - t; @@ -69,6 +70,9 @@ SubdivResult estimate_subdiv(vec2 p0, vec2 p1, vec2 p2, float sqrt_tol) { float x0 = (d01.x * dd.x + d01.y * dd.y) / cross; float x2 = (d12.x * dd.x + d12.y * dd.y) / cross; float scale = abs(cross / (length(dd) * (x2 - x0))); + if (abs(cross) < 1e-9) { + //return SubdivResult(0.0, 0.0, 0.0); + } float a0 = approx_parabola_integral(x0); float a2 = approx_parabola_integral(x2); @@ -113,6 +117,8 @@ void main() { float err = err_v.x * err_v.x + err_v.y * err_v.y; // The number of quadratics. uint n_quads = max(uint(ceil(pow(err * (1.0 / MAX_HYPOT2), 1.0 / 6.0))), 1); + n_quads = min(n_quads, MAX_QUADS); + SubdivResult keep_params[MAX_QUADS]; // Iterate over quadratics and tote up the estimated number of segments. float val = 0.0; vec2 qp0 = cubic.p0; @@ -123,6 +129,7 @@ void main() { vec2 qp1 = eval_cubic(cubic.p0, cubic.p1, cubic.p2, cubic.p3, t - 0.5 * step); qp1 = 2.0 * qp1 - 0.5 * (qp0 + qp2); SubdivResult params = estimate_subdiv(qp0, qp1, qp2, sqrt(REM_ACCURACY)); + keep_params[i] = params; val += params.val; qp0 = qp2; @@ -144,12 +151,13 @@ void main() { vec2 qp2 = eval_cubic(cubic.p0, cubic.p1, cubic.p2, cubic.p3, t); vec2 qp1 = eval_cubic(cubic.p0, cubic.p1, cubic.p2, cubic.p3, t - 0.5 * step); qp1 = 2.0 * qp1 - 0.5 * (qp0 + qp2); - SubdivResult params = estimate_subdiv(qp0, qp1, qp2, sqrt(REM_ACCURACY)); + SubdivResult params = keep_params[i]; float u0 = approx_parabola_inv_integral(params.a0); float u2 = approx_parabola_inv_integral(params.a2); float uscale = 1.0 / (u2 - u0); float target = float(n_out) * v_step; while (n_out == n || target < val_sum + params.val) { + if (n_out == 1000) break; vec2 p1; if (n_out == n) { p1 = cubic.p3; diff --git a/piet-gpu/shader/path_coarse.spv b/piet-gpu/shader/path_coarse.spv index 08d61a4c18edb959915940955b08ce509c202f96..47a5816d193b56576dbcfa719c9d7c9d6be8cb2f 100644 GIT binary patch literal 43256 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 apAPOm+mY4uy={89ZS>RTyPcZvcK;8^^>HEq literal 43040 zcmai-2Y_8w*|jgsBvk3WhTeOZPJmEC?+6T&WD)|COh_gnbV3QBg7n^{iHI~2kq!n# z1e9K-NEJkS6ZoI!-m{XO^YeY*)y-aOz3+bayUW?<+%uD;ZQ3QKYc!^5%-EQ|@kZZ9 z^D}#6T9ig(rbgdpJz(H216Ll?J7ncG*IHGFSsHCkKYeD!rw?^IWkl!jks4;iJR7>& z?38{KeJySLZ(8d6A?@@!U|`399d;NnaEp$?qegX%={>Z&tD}4P$gYkd!$)@w?j1g^ zOTXz0zu_YXcaI%XI`qM#>|Z`3eQes@-7}cl4CQ`$h7KLm)!RUsj@%oKkzI#$bn3V4 z*wxnO|ASUrA6t84=Ba$!8$W`N8Gabq*tVTHV7y%;I(iP0_ic`IyJn!ByT**|riWI) zj^9tyL~Sl=&c)Eq;oV(BY~QCb7ktFzL|T2!i8iIr85;}0dwa$XKA?l1mmSkPdhFod zl{Pi`mBy~t%)ZrbKK#<3xy}!tGVYlg{osd;9^TvaKgMAq@UiW})Mczi;8S9?H5P@B z>+HsN#>P_M(OsQG{>QM`jkyGM8FNYal$bL#mV*x+-re0XqK9=JI=W{>$I$N1VPjk( zOwAa}>Z91?eH$xK@7URUK>x9Wh7aDkYbdli*Xn+z#P8Es1wPpq>`qnlGm0G^?i!6+ zZ3=haj#_;R_bM2*hP)NiJvfRSI);x&>)VX!wb47ebL1FBKJoQZV+DH-Vn?|n2s0(8 z4rlTIU*KxRC#TLZn+tE;K3rF%+UTq>X|fhW(fc&k0^4Ypu3^oYF$Xn2<-Du|ul#oH z9M&4Anx9?-+sT`Ick(Mqj{}|lLdG^L8Ma<@!{@-&_ zh9=Xt#zsZ#jVH%$Z)^tMl}pdba7=PPQ|4l(#sIiJ9m7Ws=^CFQRjsC6Zq0tSz_*om zdt*y*vkA3(eQRpxCVk2MOzEq=F%Yhgy7|cc3>wrkdC#ah@4e*I+VitCc7)sR|DGCp zuXc*_vOVoG=R1H~x%X-840eR&K2h^i=DRDr@@wWR_tP_a_%QDPjzP_Q$8m`FjGm%- z4ISFiHDnn3K7L+DBfG};Qqgju#@^Ib{Ep^1mFb^y)>W6nlx&;Bn_69I+|bpVW$0=v zO>L>B!_&n1*n|EuAA5pZ^U>DW3!L+1A9M0L9@;Z{L^VO?ukL5c{Pb;fz)N54o+;{n zMs)VVTYk+oHEwrjFH=IqIU3%x%J%>J`j(zkud`#yxCVh+w-4esL5?l^cX#|*Qy ze#+45+;3~R89fV~pW$K-7x95&4i_=EzJ`nD*>By9IoJbus-OmM2DVL)?W?$>#8upb z#Z_FkOY>aS-}z4;UJRY1Mvd+n-!ZClbmyR+?oKYx-mYPzJG+-{rQXcz5d8G*!xPNm zKiFp654JmOa=X5bBf-0j9W-S4xblA9-qbNQ?|H7Ney(9BV+wbVcQ(f|W8*k**O=bn zta(?*m}bDKCdafL=h66OUXBr0^D;r)jMb-cEO^YpqkB7gdtAb1yA!BeYuw&A1w3UR zwl{tO->z#!&*($Vt#6YfwVqq5=b-40!RMK-(WAXw@$S>~cP!}580L98+>iKtYJEND zuBCQSMpXQ|8o$2A@2c^8YW$HJe{?F|)_4*=j$$6KPGxClwl}8XP%Y=O4UYfhHSJro zPhaCRw)`ir>5ppmS!;aumjC24Xs()lo*JL8Enmja $`4S;|=hTPGj_GyaR6D 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 From 62df7c0bd50472ebb67496ea698b90861681669b Mon Sep 17 00:00:00 2001 From: Raph Levien Date: Mon, 19 Jul 2021 08:39:44 -0700 Subject: [PATCH 2/2] Remove leftover debug stuff In response to review by Elias. --- piet-gpu/shader/path_coarse.comp | 4 ---- piet-gpu/shader/path_coarse.spv | Bin 43256 -> 43040 bytes 2 files changed, 4 deletions(-) diff --git a/piet-gpu/shader/path_coarse.comp b/piet-gpu/shader/path_coarse.comp index 20c8142..ea525f5 100644 --- a/piet-gpu/shader/path_coarse.comp +++ b/piet-gpu/shader/path_coarse.comp @@ -70,9 +70,6 @@ SubdivResult estimate_subdiv(vec2 p0, vec2 p1, vec2 p2, float sqrt_tol) { float x0 = (d01.x * dd.x + d01.y * dd.y) / cross; float x2 = (d12.x * dd.x + d12.y * dd.y) / cross; float scale = abs(cross / (length(dd) * (x2 - x0))); - if (abs(cross) < 1e-9) { - //return SubdivResult(0.0, 0.0, 0.0); - } float a0 = approx_parabola_integral(x0); float a2 = approx_parabola_integral(x2); @@ -157,7 +154,6 @@ void main() { float uscale = 1.0 / (u2 - u0); float target = float(n_out) * v_step; while (n_out == n || target < val_sum + params.val) { - if (n_out == 1000) break; vec2 p1; if (n_out == n) { p1 = cubic.p3; diff --git a/piet-gpu/shader/path_coarse.spv b/piet-gpu/shader/path_coarse.spv index 47a5816d193b56576dbcfa719c9d7c9d6be8cb2f..b1f54e28d607a0edd6c38f5654b190be904cc5ba 100644 GIT binary patch literal 43040 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 F{{WHSL1zE} literal 43256 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 apAPOm+mY4uy={89ZS>RTyPcZvcK;8^^>HEq