From df055563bd7d42fff8502be54d94b92c5832c99c Mon Sep 17 00:00:00 2001 From: Elias Naur Date: Wed, 17 Mar 2021 12:02:41 +0100 Subject: [PATCH] collapse annotated Fill and Stroke to Color with fill mode flag No functionality changes, just different encoding. Updates #70 Signed-off-by: Elias Naur --- piet-gpu-types/src/annotated.rs | 12 ++--- piet-gpu/shader/annotated.h | 81 +++++++------------------------- piet-gpu/shader/backdrop.comp | 10 ++-- piet-gpu/shader/backdrop.spv | Bin 11336 -> 11696 bytes piet-gpu/shader/binning.comp | 13 +++-- piet-gpu/shader/binning.spv | Bin 16048 -> 15760 bytes piet-gpu/shader/coarse.comp | 49 +++++++++---------- piet-gpu/shader/coarse.spv | Bin 61724 -> 58832 bytes piet-gpu/shader/elements.comp | 23 ++++----- piet-gpu/shader/elements.spv | Bin 68864 -> 65976 bytes piet-gpu/shader/tile_alloc.comp | 13 +++-- piet-gpu/shader/tile_alloc.spv | Bin 14996 -> 14692 bytes 12 files changed, 70 insertions(+), 131 deletions(-) diff --git a/piet-gpu-types/src/annotated.rs b/piet-gpu-types/src/annotated.rs index 2460992..da17481 100644 --- a/piet-gpu-types/src/annotated.rs +++ b/piet-gpu-types/src/annotated.rs @@ -3,20 +3,15 @@ use piet_gpu_derive::piet_gpu; piet_gpu! { #[gpu_write] mod annotated { - struct AnnoFill { - // The bbox is always first, as we take advantage of common - // layout when binning. - bbox: [f32; 4], - rgba_color: u32, - } struct AnnoFillImage { bbox: [f32; 4], index: u32, offset: [i16; 2], } - struct AnnoStroke { + struct AnnoColor { bbox: [f32; 4], rgba_color: u32, + // For stroked fills. // For the nonuniform scale case, this needs to be a 2x2 matrix. // That's expected to be uncommon, so we could special-case it. linewidth: f32, @@ -26,8 +21,7 @@ piet_gpu! { } enum Annotated { Nop, - Stroke(AnnoStroke), - Fill(AnnoFill), + Color(TagFlags, AnnoColor), FillImage(AnnoFillImage), BeginClip(AnnoClip), EndClip(AnnoClip), diff --git a/piet-gpu/shader/annotated.h b/piet-gpu/shader/annotated.h index 63d4bdb..bcadd44 100644 --- a/piet-gpu/shader/annotated.h +++ b/piet-gpu/shader/annotated.h @@ -2,15 +2,11 @@ // Code auto-generated by piet-gpu-derive -struct AnnoFillRef { - uint offset; -}; - struct AnnoFillImageRef { uint offset; }; -struct AnnoStrokeRef { +struct AnnoColorRef { uint offset; }; @@ -22,17 +18,6 @@ struct AnnotatedRef { uint offset; }; -struct AnnoFill { - vec4 bbox; - uint rgba_color; -}; - -#define AnnoFill_size 20 - -AnnoFillRef AnnoFill_index(AnnoFillRef ref, uint index) { - return AnnoFillRef(ref.offset + index * AnnoFill_size); -} - struct AnnoFillImage { vec4 bbox; uint index; @@ -45,16 +30,16 @@ AnnoFillImageRef AnnoFillImage_index(AnnoFillImageRef ref, uint index) { return AnnoFillImageRef(ref.offset + index * AnnoFillImage_size); } -struct AnnoStroke { +struct AnnoColor { vec4 bbox; uint rgba_color; float linewidth; }; -#define AnnoStroke_size 24 +#define AnnoColor_size 24 -AnnoStrokeRef AnnoStroke_index(AnnoStrokeRef ref, uint index) { - return AnnoStrokeRef(ref.offset + index * AnnoStroke_size); +AnnoColorRef AnnoColor_index(AnnoColorRef ref, uint index) { + return AnnoColorRef(ref.offset + index * AnnoColor_size); } struct AnnoClip { @@ -68,11 +53,10 @@ AnnoClipRef AnnoClip_index(AnnoClipRef ref, uint index) { } #define Annotated_Nop 0 -#define Annotated_Stroke 1 -#define Annotated_Fill 2 -#define Annotated_FillImage 3 -#define Annotated_BeginClip 4 -#define Annotated_EndClip 5 +#define Annotated_Color 1 +#define Annotated_FillImage 2 +#define Annotated_BeginClip 3 +#define Annotated_EndClip 4 #define Annotated_size 28 AnnotatedRef Annotated_index(AnnotatedRef ref, uint index) { @@ -84,28 +68,6 @@ struct AnnotatedTag { uint flags; }; -AnnoFill AnnoFill_read(Alloc a, AnnoFillRef ref) { - uint ix = ref.offset >> 2; - uint raw0 = read_mem(a, ix + 0); - uint raw1 = read_mem(a, ix + 1); - uint raw2 = read_mem(a, ix + 2); - uint raw3 = read_mem(a, ix + 3); - uint raw4 = read_mem(a, ix + 4); - AnnoFill s; - s.bbox = vec4(uintBitsToFloat(raw0), uintBitsToFloat(raw1), uintBitsToFloat(raw2), uintBitsToFloat(raw3)); - s.rgba_color = raw4; - return s; -} - -void AnnoFill_write(Alloc a, AnnoFillRef ref, AnnoFill s) { - uint ix = ref.offset >> 2; - write_mem(a, ix + 0, floatBitsToUint(s.bbox.x)); - write_mem(a, ix + 1, floatBitsToUint(s.bbox.y)); - write_mem(a, ix + 2, floatBitsToUint(s.bbox.z)); - write_mem(a, ix + 3, floatBitsToUint(s.bbox.w)); - write_mem(a, ix + 4, s.rgba_color); -} - AnnoFillImage AnnoFillImage_read(Alloc a, AnnoFillImageRef ref) { uint ix = ref.offset >> 2; uint raw0 = read_mem(a, ix + 0); @@ -131,7 +93,7 @@ void AnnoFillImage_write(Alloc a, AnnoFillImageRef ref, AnnoFillImage s) { write_mem(a, ix + 5, (uint(s.offset.x) & 0xffff) | (uint(s.offset.y) << 16)); } -AnnoStroke AnnoStroke_read(Alloc a, AnnoStrokeRef ref) { +AnnoColor AnnoColor_read(Alloc a, AnnoColorRef ref) { uint ix = ref.offset >> 2; uint raw0 = read_mem(a, ix + 0); uint raw1 = read_mem(a, ix + 1); @@ -139,14 +101,14 @@ AnnoStroke AnnoStroke_read(Alloc a, AnnoStrokeRef ref) { uint raw3 = read_mem(a, ix + 3); uint raw4 = read_mem(a, ix + 4); uint raw5 = read_mem(a, ix + 5); - AnnoStroke s; + AnnoColor s; s.bbox = vec4(uintBitsToFloat(raw0), uintBitsToFloat(raw1), uintBitsToFloat(raw2), uintBitsToFloat(raw3)); s.rgba_color = raw4; s.linewidth = uintBitsToFloat(raw5); return s; } -void AnnoStroke_write(Alloc a, AnnoStrokeRef ref, AnnoStroke s) { +void AnnoColor_write(Alloc a, AnnoColorRef ref, AnnoColor s) { uint ix = ref.offset >> 2; write_mem(a, ix + 0, floatBitsToUint(s.bbox.x)); write_mem(a, ix + 1, floatBitsToUint(s.bbox.y)); @@ -180,12 +142,8 @@ AnnotatedTag Annotated_tag(Alloc a, AnnotatedRef ref) { return AnnotatedTag(tag_and_flags & 0xffff, tag_and_flags >> 16); } -AnnoStroke Annotated_Stroke_read(Alloc a, AnnotatedRef ref) { - return AnnoStroke_read(a, AnnoStrokeRef(ref.offset + 4)); -} - -AnnoFill Annotated_Fill_read(Alloc a, AnnotatedRef ref) { - return AnnoFill_read(a, AnnoFillRef(ref.offset + 4)); +AnnoColor Annotated_Color_read(Alloc a, AnnotatedRef ref) { + return AnnoColor_read(a, AnnoColorRef(ref.offset + 4)); } AnnoFillImage Annotated_FillImage_read(Alloc a, AnnotatedRef ref) { @@ -204,14 +162,9 @@ void Annotated_Nop_write(Alloc a, AnnotatedRef ref) { write_mem(a, ref.offset >> 2, Annotated_Nop); } -void Annotated_Stroke_write(Alloc a, AnnotatedRef ref, AnnoStroke s) { - write_mem(a, ref.offset >> 2, Annotated_Stroke); - AnnoStroke_write(a, AnnoStrokeRef(ref.offset + 4), s); -} - -void Annotated_Fill_write(Alloc a, AnnotatedRef ref, AnnoFill s) { - write_mem(a, ref.offset >> 2, Annotated_Fill); - AnnoFill_write(a, AnnoFillRef(ref.offset + 4), s); +void Annotated_Color_write(Alloc a, AnnotatedRef ref, uint flags, AnnoColor s) { + write_mem(a, ref.offset >> 2, (flags << 16) | Annotated_Color); + AnnoColor_write(a, AnnoColorRef(ref.offset + 4), s); } void Annotated_FillImage_write(Alloc a, AnnotatedRef ref, AnnoFillImage s) { diff --git a/piet-gpu/shader/backdrop.comp b/piet-gpu/shader/backdrop.comp index 03212c9..3c94017 100644 --- a/piet-gpu/shader/backdrop.comp +++ b/piet-gpu/shader/backdrop.comp @@ -46,9 +46,13 @@ void main() { // Work assignment: 1 thread : 1 path element uint row_count = 0; if (element_ix < conf.n_elements) { - uint tag = Annotated_tag(conf.anno_alloc, ref).tag; - switch (tag) { - case Annotated_Fill: + AnnotatedTag tag = Annotated_tag(conf.anno_alloc, ref); + switch (tag.tag) { + case Annotated_Color: + if (fill_mode_from_flags(tag.flags) != MODE_NONZERO) { + break; + } + // Fall through. case Annotated_FillImage: case Annotated_BeginClip: PathRef path_ref = PathRef(conf.tile_alloc.offset + element_ix * Path_size); diff --git a/piet-gpu/shader/backdrop.spv b/piet-gpu/shader/backdrop.spv index 932192a922c74b997d867b5afdd81dbabe4a389c..8acb87f25b66486e15c9b97b239538a0ed441b42 100644 GIT binary patch literal 11696 zcmZ{q2bf${6~|xL$!19~2^}QFEG2|MAc0UKiiYBXgpd$G1aX+`&L$(XGhuc%ks^d9 z9T7pr0xZP>D2N3S3j+3vy>~zCf(6Bfzu((;vUf*$aK7{ZpL6cH=bn4-o5y~1ZMN%_ zESr=~&3dv&CT01vWwsfXESr{f=elp%s%85Ow+HrFe855jre|GwoG~-9DcNLn2^p%? z8anPn?nh=aUi+4aiHuje_-8Zp!;lg)_bn^;9d}&cvLnm=>(-Tr+h^6Q<$A4AEf3UM z)&6#Eebu<0B(B!zua69*0h5VHYmoOa$I^Pe*^lm~O1V#SaB#TV&ah0$wtzRP8_E^q z=8Y^mgnx~3{L~4tCHj$N!?m-iM*q}oYjnFg(!aJmR2`Z(+-{BZw-@9SE*M!T-$Zz+I~W=u51VR`bs^oZ#KA9tqeSCTKwjm zg-+|+89rX$=GiXr!CJju9%|C_!B%sqJXo)+8Ma-x@*KU!Xv}$cwi|kBqtR?v+SP&M ztAo&d548J?=kLzu!Z*d9P+6njlcU|IjmiC!dw#~}nVHRpZyH-B@_+XsHYTYi-ybq| zW%C$cLBxBaTa;=~_6D!0wAWg?bIX0k>n>&c!cVBxs}UpjNn^Y)=Fx7R`~rbjuWr6N zwYjb~xyJf8JzETST-gnL)-@Fsjx8r&!+wm5_3RHGTTfSZ;3j)1TMAxRX;p^MuJ!N^ zehmEB>QJ+FmNj>0avx54Io1|->(*XvwVExkYc$^bjXlp{Z;yrhINvICI{%3icvp5B ze0?69nYPr%F7&~;iy_8vdnxi>^cV%b8YjoK8&I7k98}io6FPIQp$}Z~QmyE?P zLgnKx>+oOE!LNdo-`3~x*LL`?o4~uW8{lL6T*~eNv&)vs*q;2|xu#xT*6gp;k8Z3- zwQJ4B(MRCMKRNplx>~OeRU7SmkYjw;GN!NIT>U?T?EOdZ$GLtGoWG*b?v>mp_SOD; z6n=QKF<9d!y3cZ-M!A@o;=}I#H_Gccsl!z-Za42#sbC>IAieExc@t=878 zWeMSoe7?gCAA2E>&*N{*YNF#k74hBJ*R}iW;fOi-QR95%RfTI)&HfHlcpHQxa&3;i z-KsQ(3y1yw7`Cxq95yltwrARW`stC{9)Ci>cz5aI#sXJRZZjYs7@5&Zq_Z~an@!&SU3Uy229O*v^8w^~^ zP6t=(aUZ&}%BHcUtOj1!YOeMN*w}O6u^4k-1kaD!ru{2rmtq^Po>|3`e=J zb!9gjGcuItyak-@&8-u7S9S+{?5>uwdnfox*?k@S{to^?2Y)c(eXQrDtjqK49XN_= z;=Q{o+$U@d%e19&-ZyQY?LK&J;3!*mjX|pzMet(6{^=O-!*u3}Jwn=RENZSsH&HJt`YIY8Lp=}Nlb9l$K z?Uvh0o9=Stio0!$kG<5^mE%%=&(mId@9m}Qwzq!M+B?7Lw&pG9zVtHM@#1ZXvHm%T z&m6e5E81rhY2D&pdS$)xh%tV8!L@Hg)){DH?VC9Ky=2)I?z~|$kFoBxbA-K@ymJbh zG1g&^#%e8PyMwiBn@#N8!WVV!0oP_eV;%1|Q;c5#cD%Oj8NW~AbI*<4x8UYp2-dI7 zTKyr`W^VJ?!-LRskV(j11wR<qJUCPlmbT!yws`VJ|$cSc*} zUS4qHR~FbD`qif*KEZuQMQ!^1HhSin@q8n2_bcMB0Xv`huSeS}*DSxe;Pxcy83mhP z|Luj}e%af5(a!0a)BirSvD#gq+&drR-(O(Igx`07e)q=vuWvTD)q5pQMgRX3$9i`h zV;vtyyGCu!BlrHKeSQe;xsJX(3ieJr{wrwvGPmGgLp#>Fqc6V#d!}Oi@4#Cm{AsWY zn?=+=fUZNE`TvP_taj^@|EsX+?_!*O$3*_g*z9xgUbyv}e_nwj|DMHo?dF&JTWU`8 zFDS6%V}5^A)AhUn-h;$?SAjWJoA?>*-#h8}A1B=V{dmH?3r{56d`~9ac)xWb zpMJk-f~)i132waKEy2}(w*=SkcS~@!-z_QkyG6c~Q?nBNZp8QHDDpzi zkoV(GMEhOD%*gea?NspJICbwq`}~9WyU=$d+B}Qme`k|&tj&3RM|}YCy=9J==Yxg) zP;z>1 zWMg6bG}v+aRSULtyhii2eqmZ)LHjZx%LG-e=Fjw~)sW>vAn}^Oa%$Gy>iM6|os z#|s{3;!p5&{x}nV#;z~U#9zSLe4?*^1wV;cv$^HQnZtSihB%+TrwZcBdRDv59xx2xU+wX$NJq4^U;{5%NxGK3KZgcGVqK2tp$7**z-x1m(ei~TYoz&+$ zb_=*Rb9xS^gMB=Q`ksSm^W2G}o*Cf(SILGp)@D^xe^cmx~k@m>77ub6wcg)^!V?6VIkM4u`jcT0Z<;JA% zFyCeJFQeU0b>v?}Y~=TMazD6dHty8^aKCYlGr!yz@nUqGhXcUoRzF3p2cZu}e4Kkp z;aA7p&j*_$ej5(~YqQ6mL-~P-xy&v833ktx;dLcMn$Dwd@KT4ktBKAe#QMC4R z$>CaG4A%bM;{GfJn@78M;&8N&wdgwx(Pk~;nEMEDI`@(AbnchHN6Di-=I#S)k8^kw z*gV>!_eX>6y}p?1rC{yBj{&=1@f)%XuFW|2NS`+MAZk}XTOW_bm#$?wJUtJ`!L7+S z^UIAfzx!=()KT9Gu)T=-R)V#SQdgWIZH|vKd18(*c`!M33k3Xzh$s7+C4M!mm}tOF0pl- zj`rS&D+PAW)kU1zng-BS#7F;N;a5iuYry7+8rFif^&-|F??=pK4dNL4DzLQ#uY=9? zNO5O|z-J)ZmD+G9VPVDo5qJvFqp$hi)j_Uuf!F>&r&U~RsmV~>a7?yuG4?F5{fV`o4c0cwys?+s z(!I3rG5%bz{f>3M2JH8W_J}zTtlfO)pylB^AFM5Y?>B!Ku(tGUTnqPX=!Hbs_#5+Pu(svkI5#)KwWr@DZ-JXXzBk?q*5>bA)b}>H z`yVlH2OFn7a^D0tzdmce0jvc0Km}9bo&e_C5A4^t%xs{dX3AbeFVtJ$WBEdU7vV9=YBRj-K2HmPb!M0JbNN(HCPr2(~vd|A)ZZ zjE}x)i}^ncj`{Bg%OlrEz%l;=V0rjH3U(fIK8Tht;bi*X)E@)yh&G?&^xJ#)!G5VD z&&R>`KI;7hSlcM$V{f&kdu!k2@qSUuPeq$w9r+&upM*sIPlB~QUF6rN&G9Fr9e)bi zzcC$*_%~7a$!}$!&5?sxvv+W6f~SEU`y8}?8=a0m5HT)lSps%U+~Mbgjqwh0Zwf7;~tWg|)AJi6e9tU>L;48qc%m1EQi9Q}V7FmuMYi-($OV5JuBk!HhPDu1_ zR)Ouw&WN=<4;}ql1y1{QVh2C1;L*Pm;O4Xr$I7GjlfcfQ&ph(z-^;-E&oTOX^S%=7ywS5VIC`cp;!X$avp&})4_^hW%{jzzChhAk zh|e6vzS^%|#5#6GM~;EQ{+Z%;ZV;}`-vINh<9)vl?71^W zpE1^`J?1+TtS$O74A#~{BBl*CCTdy_);5Bypr7_@1L9bH_ER4HTnJu__$)%ApZgVf z0eXMLejb31ex41EeyYz)xc$8#;rcJ?;Fl!a_{$P*{1qMis)QSVZNiPeF5%aMZzy=| z=Q(iKk?!ZYaP85%*MPMxN8AtBs4aSZK3H4)_G|=e^KQldUkJ8$j<*MLvFqQ6#Qt9l zcK?mhXN*169`n5xoX&SCT$}eI=DQpm^VvhWx$K|uG2fM7=QBp1G46r(nD1(EI^XNy z+O8>LdeE;&Vm|jkZZ7+8e9ZR-u=5$C&lvYmd(8JnuxpO<{U)%s77{UU1{)K5bR$@s z=R0EF0(LEt=dECEX`Z(gF_Gu(aBXAvWJ>=3AlwAE2Inw`F`l2B(YGL;DbJ5+}DVX=q!xR=#0+lj5y9XGwzBze&4Hmx^I{A@chpIf6lq*o_p@S zuU^`oJ&x!rifP5nVn*@7X+`<$TkL_QDE2CPOFgji(v?fb+CxiDJn1+CW)(eUoH4VD zzG6DMf(+LhEgcUcA3*kDy!L$&6B)1c@ZTQj#~>AE9#~l&ShZ?k0q1Ev#^*C3z49Lt)`kwJ7XRmy!v)~y?>w+k$N z#oq8%eM_}w+=B6?r}IB!96xhPY=wRl#aQDSs?k5Q*dN^<86VtG9j*^A7;BG?54IPV z6D}TKnlhQk^_Tg}ag|~}^kfZt6^FpLj5gZ!XUx+n%3KF^Z?);AYC zTCWW~V_N*?JPe)JcQ|~qzTToAzO2<6Y1i8Ip-bxPpk+U``{c3n;S;f!)z<6x6lnKp zV{$L#o`rSI+WIl{bWY3B=!vmaBLA?b(d4X}ve%67DUM`(t<2R^9EBdGRM)ovyt>xj zVCl{+_nEA_QXB)ntkJATjNB)WSp+wacJs)6)~+47S{*jm)h1VGU9$==jpM3r#xt%d zRoGchxt=AAi}f4}?yRS$IDW!jDb4_Itc})&(XREZEhj+_h4&PnMUhG2GoAu#( zt6dIqjPFgx3^Yg9{=p!7|7ZB)T>m+^eBGekE4feXtNr;9{M?b&y2kp>{>yz@)ig83 zyZ_qV|5kM)Cv~h&IM%+>?*4CS47s#cH685m`Ae{&-dMkZC4@8bRqz?!dAUx`fp$Di=T|r|2W$BnEm|{I6qHMOySduua~^M`ze2=__t(3 zl{x;sCDv{|`$2xN4yjAI^rGBZR@VhxV$#=X|p!R`t1}p*Q0Hp%;r7U zc0gvcN809OHt)B#sM$H}g|>bq=I~ByJF>J@Chl(Jio0x#kG<5^Q{qZ_uk&7d&+Vn_ zwzrQ0?493Z`?GS_K9A9k7avHB_4gw_{cvknw9h5dy2bP8mG#Oa#`sx@Yd?Ujv(d)d zH*xsqk>xFBe}W#2GXz1+7_d=ncF<}>;!Z_G7UK<@e{#53(4oYPeTp|pNH<`?%W}< zqTSlgN86JDBwOUZAaUa_OxPUy)mI=s!5iSGpPsC(33orjzYQFPa)o6$A1}ZtaC;DKY%?$ z(bs2A@rC>oxyD2}k~e z;pW$Fe!0Ju+RT4w!j6ym{msnR^E~(rB-XnO%(0r_SHic$7qPPY(Y|k--}9xM%>A)v z=Jc`lUtsY)>YRP(orpU4u8hwE`+b=EcX#o}GwvPzQpO$sM8+3_zn*c=y5BC5-|>FC z1ULT4jO+IsCH!i?Pjc?}NzVP=$obh_-0zLt?>9%z{pQHI-yJ#kyCb;u`P~s*?Kelx zw{~&AL2|#}AHmJ%H%M@`-yk{n8zi{#euo5C-F@Gv0^yBHAA!#&_-elFj$vQ=GE<&_2H+Uf=r>ZJs^xZ;NRq*5*9EgC0hFFPS6e zc_i7-B-!5tn|&6W|I6sVL?XXycb&dR|0?+|PHXz>WJ8sG_8j~T;+?iG*CIF0 z9R29OMO>@CClWuEdFO+_f*g%FUSG`fRj@uE$32eL7XAM_ur}BDHMGyK`TEf=_nr3l zNKew0q+Pf6*z)o8WxU{~4~$-;~(%e*rsApL@Ol{jZ32*WtTO z9)157IG;cI{vX)&ML+%%tj)*sZQs9*_%4jT%Z)RK^L__$KIeThar?dq{9nj%h~xDc z<9k+ntoMJxI}vMjzW+mvalRc$#Qi^5U&MVM9C24Zc)#@h8qwxC6GuJ21xMX^J-@@Q@8OjHX|Oi?_Dga^F7?mY1#95dSkC1+ zHr{!xWe@B=)?&;wM4PpUV||f3eCnvP0**TKJ)VwTU&QrhapsGD^M^+nuXS=_d4j=iz#i#eVJcC7YzAI}0ix4y9L1J>?0S8-Ak^ecwM*d#x{qWuBxKs1sem5Ftez`H?`RF(gM}VD6{c~zP3Vk%< zf0Bnx<{aFasW{*9G@*@#*nOpoV>^sP*`28BWjsfTESOhos7wFRo#4ZNA zPui~~hihE|*1jvYrJ_eQ)bVdq?(;?&l33HnmRNB?EXuZ|in2b&{mcrjSpY{VMm7bE7f262r26R@=e zzY1)w&!;={67ZFX_BgjM1#6G}d>Pn0+Fg(Te$f^=Uk=WDR)rfA=Y9=XoA2n@;~LyO z))#r!g0;t89R!2_ftH7F7_2RR?^|GPo+W#*5$t0R^o=0e zT!%RFjDn+%L&0On97MY@{?4?M-8wdbw*s*zqy{^YvI}-BgWsD9bj!2faBb}4z4}_F1ZPA{`lT_Jy_cg#zlQM z!`=Ugc>~xu?UDNyu=({_^9^Wi=5Sx%2)1T@x1r^c|4m@y_1%t^`>oysq_BQmLh>!laC%-!8z6)%Q;O_vt)_AYI6Ksrj&yoDCh`F6h z9AobWyN>9|yTID)rM2qQX1qOlH#mB74_F?#-UE)F+zXaRPu>f*CyvnnbDVyA?>^Ws zb>w*%Z11DqN5Id3zfyc~)A9{_9nF7;WvK5dRa5AFE# z(f%Fh`G|jKbf5fI_Sq9Tg>l}&nHk;-?AT|a{d?mq^zn#sQOikS$HW~z8ElMq*jnVq z81I~?Ao_ntUUAgpzoqs^eD*=C$NBb6*g5w@tmgo<<4;4!c=yQt@i`EQ@dqXB_=7V% z2W+lqqhoDnfQ^g4t)7*5)P5%1e6Gt_dGz6Iu=({lPVTvOUCR*H<`{kV(+lnAAo~2R zS&sJcE^0p)(PoX}_#2$InDa$o=M26Q?7IB-)P?Aa5dRkFyV6)|(`HHF`l5fA zf%VzH7o&abpZ3cUZPqOIyj+pE_L%o7u=7UGUILDu>5I6Rg7sOS>yn4>WngX2A&xUS zAAB_8a|9B7Ju=~W=%Wy8d@ef9-5PN8)jKehaqa68k2_a`o5wpBHLV3}kKfHfur|+v zG2X>GVlA%8IpkvV8z1lG^~S6-}u=7SApGsWAqtg54Fd9uLkGyT?f~;EyZ}=UW3GZ+Y>jJ z{WCu1y8-Nc+Yx=nxCh!}zSn~D`CbRtwj;$j-|LZ>&pnWv%l;c5^SuG=e8%WA#y!*? z^W6q^&2hfp2-cRL@7q&M?9rRx+C1Np=gnZ(5_#?bYs>SzCB;OZx5Bk`?nz(y|F^#l zZVk?14r4q&ccR~pc&1K7T#MZJsNo%8*XQ5Fk3qi^(dPKO(eFYWe;49-xiOCS4&H<4 K_kN1KpT7rB!oqR@ diff --git a/piet-gpu/shader/binning.comp b/piet-gpu/shader/binning.comp index c5cc806..acebdc5 100644 --- a/piet-gpu/shader/binning.comp +++ b/piet-gpu/shader/binning.comp @@ -60,18 +60,17 @@ void main() { } int x0 = 0, y0 = 0, x1 = 0, y1 = 0; switch (tag) { - case Annotated_Fill: + case Annotated_Color: case Annotated_FillImage: - case Annotated_Stroke: case Annotated_BeginClip: case Annotated_EndClip: // Note: we take advantage of the fact that these drawing elements // have the bbox at the same place in their layout. - AnnoFill fill = Annotated_Fill_read(conf.anno_alloc, ref); - x0 = int(floor(fill.bbox.x * SX)); - y0 = int(floor(fill.bbox.y * SY)); - x1 = int(ceil(fill.bbox.z * SX)); - y1 = int(ceil(fill.bbox.w * SY)); + AnnoClip clip = Annotated_BeginClip_read(conf.anno_alloc, ref); + x0 = int(floor(clip.bbox.x * SX)); + y0 = int(floor(clip.bbox.y * SY)); + x1 = int(ceil(clip.bbox.z * SX)); + y1 = int(ceil(clip.bbox.w * SY)); break; } diff --git a/piet-gpu/shader/binning.spv b/piet-gpu/shader/binning.spv index 96fbcdd47e39c688fcf50902bd952524855b5f50..82853e3d87cd30810372d4964845405922d45f5c 100644 GIT binary patch literal 15760 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 literal 16048 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 diff --git a/piet-gpu/shader/coarse.comp b/piet-gpu/shader/coarse.comp index 332fb48..fb7f448 100644 --- a/piet-gpu/shader/coarse.comp +++ b/piet-gpu/shader/coarse.comp @@ -202,9 +202,8 @@ void main() { // Bounding box of element in pixel coordinates. uint tile_count; switch (tag) { - case Annotated_Fill: + case Annotated_Color: case Annotated_FillImage: - case Annotated_Stroke: case Annotated_BeginClip: case Annotated_EndClip: // We have one "path" for each element, even if the element isn't @@ -305,25 +304,33 @@ void main() { // If that turns out to be expensive, maybe we can pack it into // shared memory (or perhaps just the tag). ref = AnnotatedRef(conf.anno_alloc.offset + element_ix * Annotated_size); - tag = Annotated_tag(conf.anno_alloc, ref).tag; + AnnotatedTag tag = Annotated_tag(conf.anno_alloc, ref); if (clip_zero_depth == 0) { - switch (tag) { - case Annotated_Fill: + switch (tag.tag) { + case Annotated_Color: Tile tile = Tile_read(read_tile_alloc(element_ref_ix), TileRef(sh_tile_base[element_ref_ix] + (sh_tile_stride[element_ref_ix] * tile_y + tile_x) * Tile_size)); - AnnoFill fill = Annotated_Fill_read(conf.anno_alloc, ref); + AnnoColor fill = Annotated_Color_read(conf.anno_alloc, ref); if (!alloc_cmd(cmd_alloc, cmd_ref, cmd_limit)) { break; } - if (tile.tile.offset != 0) { - CmdFill cmd_fill; - cmd_fill.tile_ref = tile.tile.offset; - cmd_fill.backdrop = tile.backdrop; - cmd_fill.rgba_color = fill.rgba_color; - Cmd_Fill_write(cmd_alloc, cmd_ref, cmd_fill); + if (fill_mode_from_flags(tag.flags) == MODE_NONZERO) { + if (tile.tile.offset != 0) { + CmdFill cmd_fill; + cmd_fill.tile_ref = tile.tile.offset; + cmd_fill.backdrop = tile.backdrop; + cmd_fill.rgba_color = fill.rgba_color; + Cmd_Fill_write(cmd_alloc, cmd_ref, cmd_fill); + } else { + Cmd_Solid_write(cmd_alloc, cmd_ref, CmdSolid(fill.rgba_color)); + } } else { - Cmd_Solid_write(cmd_alloc, cmd_ref, CmdSolid(fill.rgba_color)); + CmdStroke cmd_stroke; + cmd_stroke.tile_ref = tile.tile.offset; + cmd_stroke.half_width = 0.5 * fill.linewidth; + cmd_stroke.rgba_color = fill.rgba_color; + Cmd_Stroke_write(cmd_alloc, cmd_ref, cmd_stroke); } cmd_ref.offset += Cmd_size; break; @@ -387,24 +394,10 @@ void main() { cmd_ref.offset += Cmd_size; } break; - case Annotated_Stroke: - tile = Tile_read(read_tile_alloc(element_ref_ix), TileRef(sh_tile_base[element_ref_ix] - + (sh_tile_stride[element_ref_ix] * tile_y + tile_x) * Tile_size)); - AnnoStroke stroke = Annotated_Stroke_read(conf.anno_alloc, ref); - CmdStroke cmd_stroke; - cmd_stroke.tile_ref = tile.tile.offset; - cmd_stroke.half_width = 0.5 * stroke.linewidth; - cmd_stroke.rgba_color = stroke.rgba_color; - if (!alloc_cmd(cmd_alloc, cmd_ref, cmd_limit)) { - break; - } - Cmd_Stroke_write(cmd_alloc, cmd_ref, cmd_stroke); - cmd_ref.offset += Cmd_size; - break; } } else { // In "clip zero" state, suppress all drawing - switch (tag) { + switch (tag.tag) { case Annotated_BeginClip: clip_depth++; break; diff --git a/piet-gpu/shader/coarse.spv b/piet-gpu/shader/coarse.spv index a7637c651b1304f370d3ad9281ed0aeba641c8a7..09bad9657c6f46ed418dcae42c4c588bd7df160d 100644 GIT binary patch literal 58832 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 OHUO*JKgUq+82&#TQZ8Ho literal 68864 zcmb`w1-Kp6`My1H&I#`B65QP_xI>UqG=vy|2t<(L9^BpCp*Y2gmI9?k3dIW)hXREn zg#zDw?>*1SI#YgEdtLu;%5*)?^Sxo(^=g$HY`XQPON<^faEaxXUrL85tB#hRK2zb-McK(Yy#LS<8m=bd)aYu{aL&!C zuV)AUn~?HhNGGjsuxY;yw%B5WP1ox;V6VOUjUKcAutEKX4IMG4-@u`x1`QZ9be}=` zO!9b0HqnqJw^^5JbKWW3T0CIQB`9`jvcUjzu|+1 zFEo10sIddaEZ(ZL_}HbFUUlr!tLoQTO^#pxI+lEj9&skCribr4YUr3j|7V<5s8%e; zql`6ek60bmbnt!p55sqoYG&}@p~Hst8$Oc$4jwgfc)!8J`VSesP&-^J-c0%^Qg-pb zSt-{WHfZ>u5o5L*G`QV&HIMOqpS+q2Ui26caV|<&P)%@_TrG0f$X-hucd}|BaP8l3)S&(Y zlj8WcS}Ee&Q7wpXJHM`K5pdtJ{Rfu$sCkt6EC#RrTJ6g{l8-$3n4jFWyVo-9{FVgQ z^?T$uzU}e(ErDBspc_0zpiRoc>J`PgPKQjl$SZmlVkk7TKB@x z#Y$cQoR~e5j>rtQv(~?(S|0y)-o2`o!0WRf*BLo%)&sHLE1U3j@IqlBdKn+J1cWq%^0n<*sEHzuDj9j{zC>8IjMV;IjsXXV#^n7 z?rI)c&(R#y@pUJ!)`xf3{f`{e`uO=?5C7!2A$aRSV_de|4IMaUchj^Tb&v7w^r|+7 zm%iHdRrlD}0F+(qUYk*tzCF?^4K!HJ>88|6Zd-u28P$Kp=)ogL4L30k+f(-#pIcY8 z6};OQ?D|sk7~X#jyjP1mc4Le=tpAunVAtKYl-+fEB-*WZXXzYogMT~6&T2dGI>UzU zWqRf&_ZXjBXSF?CA9a1?9=q)}az9J=`<*ED>Ct>0xE!Ay@oTr;RqX<_|D$%h{=lOC(4xNk z(En23^_2F97xi0P!hZ>1{=>TKPg(6<)bGA}|A!b(Tsw!UsmhhK~4;1@xbjVvGa3V@y#UTEtjy#K8X=!TN`E z*PpUFvZ(*_d(hA4a71^EuIgy;)?>IHw;F$qt9g{y(KvX^kJ9T~?vd+T-n_oO2GqUp z2Q0w3v#yZZv6Fm?nJ*^8$(WAv)^(SwG>gw~Glb6sn% zsV!dT$D_6S&||LC`|*49arm|8d4}rL?mDd}xm>S3D%DSjEp73A1~13COsgEcG(o%n z^RcnD7EkVu-%*_c9^KNrs?#a^j2JP}xpX=l6E%-1dPr4Qos!0kRxR9y&8+qpX; zwfdmVV|-tGRTsm1_`~h5y2tqbwl(`(-m~>{{f&<~TXiM8N6i0m5R&iDjYP{<569yB z3|*%E8KI-PjJ7f+mxD7VSAg4N(yO|<&S&c}qekvoUx@Zm-D7<2UDdU4b8q{$$3o3x z{8;pA`8DU>YeQehqrCRIs#&U=(ZpC`)$p&nnyVfx54A5&GAz6$T)OWGgiNW$M1jWRe9GRU4QVav$03x`*J67 z)0exz>C4^V%mg@N)IgP*T|MxBQ|C%P3ThDd%Op(X4MIO&}=P`5jQja|HhSu}J(EZTbZTZa5zW*a~#MfsAE^PK$=Y8(#ZFnQE z|FXs!-t@Y>_!?Fw*GGZzXZv{orM_qWmG*Njya~>=@D@1x$UETf=hWi60d?XL1S9qt+t-U zQ}cgF$ygIoe>BhJe*ZTynEB}MXGQs>4L&V=vq8g0j^YED*QwltZ&~|g4M*3cK4{b^ zzYfB?tL5)rfZmE>`_tDk#0!I61-897cvSy=m%<(1RV@kMdcdF&gVr89Sj~899;4MM zjj?pC8DqtE40fV+%+=bQov6*%ZgX~`cHNEO?X}xc?FddT{n~zYE}hlDHt&u*w9UKY zj%f2bZf7;R&6i8N`?vY>Y4=cg+C2-LcF$}3b+>zQn|HT+MVoiGdu^L{w|i5Ycei_6 zo7e4jR(H3#UmY@boz(+vzGCuv44%B+1}Crg+J1Fj9n~j=-xr17*FF3?tMA*q&cCCY zfW?sb(}EL!M)3H#@2F-k{N^kC7V6>0nrZXy@mZ$LyT@n6Ht!yv)!Mv!eEPI`_q=QX zPkuXrli#jwzwUV%)aKpo?$PGm?T&2oy4{XyEW91JS9JuK?~(fTA2G1~5}=-oGttXy z@xlhbvcYd`@H-m({sw=n!JlsM7kcoH>ScKP|2la5{B%`+g}1hw?rU?RmgYKge{X+; zA2dqtb*n#1p?zB!M|_t33-4l$EvfzyBd7*2A{IQr)uyS8+_&lpQXX)Xz;lj zeC`Hcs==3O@MU{&-rc}6R%`UIbyjONc%KH}u)#NO@J$+gs|Meu!MAPjof>?X2JhG4 z0~&l#gAZ=-kqy3ggOBRLJE}48jMYIsY@O914Sr~YAJgE+Hu!N3erkiC-r#36`1uWf zVS``P;FmY}l?{GXgWu5LH#PXp4Sq+1-__uEH~0e${$PVY)ZmXd_!ABOWP?A`;LkPq z^9}xTgTLC~uQmAF4gOApzuVv+H~8Nh{L=>iXM=y;;NSG%9o2X6tkn)a0GE4OSA+Lz z@F^O6ss^9B!DnjlSsHxS2A`+FdpG!e4ZdiDFW%rwH2CrjzG8!~)ZlA2c%KGeyTLbV z@J$+g(+1zN!MAGgts8v%2H&y4cWUrK4L+p7cW>~K4Ze4SkLtnM_uyGe2lcSA?=|?L z4Sr06AKT!^HTbCwetLtS(ctGd_=OFAQG;LE;8!>JH4T1qgWuBNxAx#2)$id0>SwbF zc=6=>U!U711dqQ4JE~srwqIv82iWi6sn+tHvxhIg=Ya3cd)nBSYuLAd5Ae4lb^R@S z*gL9y;KTN9$KJPLI|M$au6Jk;+r+KkXbl$xw6r^?L4}woADpL zdq280ruB`B{k*Lmqb2x!dI!9{b~>v2!R_xFx~fOOyv1vMMUs9!+OAuFXTVrmx6bYP z9=6Wvg$94A!Cz_c*L(1e>TNjRBr)Dy)dyhuQRLE5eTtU0e*}*lvwQ19hkcxA;&Lu| z=I_DzZUR1NKYoEWy7kkv)|}4W!>6z_=0f1dCJ%<-mov#;7d37ay@vjYIXRq zkt6r)w_E=KdvW;APS=Kx>ef1|^&54!==N!UhnAeS?BUm0ZQbD8Hu!cucvrP6 zyxq1l(O#eZd-(AENP`b<@ZEdxj%ozFy~g-#3~qlm>a6zZ;m5w!;D$sGX?-DC_xqwAKAqL24SrdJU)h6qR5!y%joi1j z*6swC>-D}KzI->+gLhO9!P{%Sqk00I@9>`L;n!I`-Gg^k&%(#-K6JF-sb)<)*Tbi? z`g0H7QN3iHdQW`0hpnr69Zs}-CEx1H8$EnFt54zOUin!Mdsp>Ei~IY4_J-*7I?W{I z_1aa<1aEyeU;GwP%_HAE`rYs>t$M^7Id)9h$63)^Z^!ZXI|#YQ__}G_ZX3HWm%Zf{r+ME+vu3x`Sk+W-!$mYR}Jmoa`E+ZzcE9H4QkbC+xXa8aoG;p zot-wu#N*Mg(!F2(Bhu*Hnkv4Sj@;dTFZ8{}3>X$e+Mh_homEWTbr|NVKkq1GNE>#u z^&X)%xWCTcJr?aRbsRG_j{%I4rT2PR%q}Q8+?rhU#G#> zZSW1@u@FyDlnFfEM z!C!3fSKxzrecPU^&g#`3_O9wJcxye>SFiK=E?S;D-s|DtS@oKzze)d>xLQV-r$od$312mW@nHKtwF zInnA()wq}UsMlFt)8N+?d;|QaVbgTqagij4z*uy5?kiZve{pe!uN8 z1Lua=!)I#o_V?e~(_VZC+oO)WtRuIM<6@4+O^$wlJ}TIR$yyqBrX&Y3oBPi^i( z!?mT&*U~z>?^B7D`#bytLQA z4EUJ;+?*bBVlnr&=AUwD_eE`Pe9brZ>4`>o;`tW1YGM8LnTH6Do9#tw>z({EsvTc$ zd$ZQu_|CEM)r{--iPht8|B|15*I#W$Vr6`1B9>z+H-|al^HZvM&I4b7Qq36Vu?S`2 zE($iT+MMLE7-j0F{^Drr`dZ(2Dyi@L6zi+aiMlLhSwAs+ucA$VWB4K`F?@+*3^i@5 z)HZWp6)e|B+nTk_F~%Jl0Pu>De-ldEYQWyU1qrEhuKhhx$7wZ8LzBBgQEyoOGqbgs2) zv)$7v)9x8y{nZ?^GbwE^_Orm+)xECIrZnEfoYvKDOn*b0Iv0VhqvrK)cP7I@-)Z{gH<5SgJqK&@ZX=KQ;8U z{R(>8eidxnYICw{zDDVFRi65Ks@ccaDXpWg?Y}{pe2u5wKE6YlcHRYBN6mHf9;IWJ znD2wNs~htJ%EYv;cGvHxlt*(;(&Am!x0K^JU8|n@{7`GN)qH{p+U;mxn7k&X>_VFZ zoM$!HhtFE(>#1&Er=v6vZL8MY=Pi+!@e%O1H17y1UugI*L;hbn@9T97mfeA z|6AFc7Sb-X^5FQFyBk88X8r~Y=-`0Et@ zU1&ZxXrH3CuU+%mYQAyJ=c;+{ny+7T_h0Mxt$D8FF*SET&UhY&_R~-8dCIe}YuV>h z`>AHEH!1nAr8`%0pHtNmYce`Ialxm7yQX8G3GO-#p94Nw!F$6eFZjanDGI(Me9D^l zq3jFK+{w3rJ9oyHZwJp@$#;M|-u7n!DvH&U&mB}gu;35CS1b6V@VRQ3`76)#5i^Wi&1p{M@IXdG+$>~JO6e$ky)U#@~r09JQy zP7+;;+M#`~nkwvl)Xv9LCT>#yDKbmRXQFjDKe#`>?-JZsJI z{|@c?>#keFJ;?7KGZr(0t*fTZ&sN&zWF`7JMqHlSf9|xdpG&M`4s%d?ZK#>E+|MTE z^)erPIeheAy0#hHKKDVNhz^i;_ZUn8pS|YV&xPaOZNC^kGkh^Jb}jhX$1!)W_FRGW zW&4hshwJBC6t5X`G?wp^9FK6{Cxv_O@tsn*^X_}4aP5y4+<3n)xOU$w#b3McmBO|A zUMbvro9~rM?t7(@zg=+S`5vjX`!1>EzDp{(?~+RHyQFaA&0X+g;J!zS-TdY&xccP!fLkT^Y68sJ`)=w?Oa#u*VXM@4_8Y&H-giSwi`IrY)70v z{2J_MAwL6uMDOgwEokaKcNx!e4RZH6Tid^gkyw^*(icD5diw009B&6($GSe7$z!_{ ztac>%+veS1HJ{bf@85u%{k{iHJ@xJdtNA>CXdUZ5xbd{vw$FiTY5M`NT4MYbtmfzb zE$PdwMF|e98pBd#V)Al%QzXS7;w58h*_mRiZeAaY~ts~b@>@%k0 z>zF?{ps3nnZEoHY>Z#imh0_LU^U0XH70+O(^$q9r|vUg>xMsD z^TX?Ld=9Q=e(C$4;pw~2!}8RB5o|pB<+HJTWoFkg`wQ65pVrZ)kI&2M8M~Lkj-7hO z?p3g3XD+tm7{3NqH-^vHa>O#!JoW;s zJ5N7ilgBnOSWTOs{p7Jt3U>ar`8iOYbw3%{b#EPQ`sl0f9A_LX|F3zP9N*@+Oo67J z9Hs=9Yj7&K{nO7j<@(sBYs|5?w7zpVH8#gJ*VQy|wOm)))XH`18go4TesDT$e&(Hl zwPAbmi3|JmwLSZ;e6rf^^WF@#J?+V-sO^3~Ib&`2x;4Ih(%R0WVKr0g^JRo~x!0Nb zX`i{a``w;)d1;@ew)q6U{oNCUEICC=(_%_ZaO`JGufQ^%V zZB4kE^JKez$J5flYk`e#zx#lVW$Arp9m;h%J+!Y^+bzw(_djcc^|PKhIcy;2w7vBy zDb=-aL8)f!ap=DQt7+SoQXbnc!PC~Z?I`8B zA8ZfyeqbGK*4J0vxyYE?pY&rVa5)}3!_}O3$D<$E!|~9z3#XdnAx@m##GJO-pHiOj z7yx!3QP)0@QZ3^#2<&*MYu}YpEqxvWR?{|^QXbn-aK>YIusq|j2iWnjjyCJ-tDd~~ z6mw?X4+E>^UZG9Ry5+iG7tJwnEF4?cjodP^M~XS~`C~7z+Fe{{@!1=0+}s;Sf%Q{Q zz0qLx@^i}=xVm|bpp+ZaXYhT&YTEXplxM8>1N-c)u6-<}TJqT+Y(BX@eg#&`esUn# z!}Xx;0M3Is?Yr1GQwq={?-;v<8I5XZyfz>kK+SKBIG*~U;aST|^IrREC7VP18XdB0=W*^1r$MN7@ zInD7nN_lK2g0qHC0L#>ZyMrII%AP%hSh;!MR6Y1eRytx&-V#u5R2*Db*79aRT}pp<8wKL~c6TSuEd z#!+`H(CwhEqz9Nl=3l759|J}wp*HuYwmHdG4fr&@4;&MzDfQFr?HGJ zPTeQL)=j_u08XEu0?Qpgzcc$I*zZiN6aPPf)$PaAl=6(jGhoNTINJ1if>Pc3-v6El z-%m_!&w=I1?FF#8Y5Oy!+}PH85$tzY*3qWVvy|$I{R&u3+sl-4uTy`o_$s(RrMmW) zDAnw%pA-KIR&)PMK5xR+^?!p>p6mWCutMCC@i(w-_*pn@yaQMF ze)V@skMH@VvAP`B>Rn3rt@kMT7+Sqg*-7~UrMZ7d$&gkbQSx8)G5_Z}`GnH>w|>Ux zb8yD!GqBt~&5!>-z=J5&?enLUYUb}}^)JC{$$vh4{|Q%*&sX3tY9C|B^@;s!a5Kg? zXzKC#w)V+f*v`Mu)VCxT`S;-O>T_~>t@dxYzweOi6Z>RfWB7eYVoZ*v9-k?|#>jUra((po zJ}@QNYr{1^HQ2*@fcjLNGjO_Y#nu^zeOj>Xx~6;wEO*^H@6&-h7+iI8aIH=cHivw# zBiGM8)i#Z9JMo_pT>8uX9;)=WULUSBKmX4K_V+km3ywvu39q}k)my&pai0fl?&gv) zn-@(z_pjbyHTRBuwwNETJ|AbEi5CDHUz_hq{N2%loa&B^@5AL8>xIFN^)>i9_KU#P zu4RYl178%Z=9+iy<-63y(6kwIAxe4XcX6=olzmJe0_gcsQ6=JOpS5H6J1piz=*Fx8pe)a*Yc_fFm;cIZFpK|@| z%Q}>{Wj|k|&U#?ithRN*^7M0k@Z0zp%X->f%idF5``$}hH(cs*_gSC7x;VDn6$yD{ousxc3a@zsi z%xy=sC;@ z>;`U)QGHL4>l6C`aPyup5KTQkgTThfJwdLIQhjY4a#nu^z zeGhQ%2}8m1+!OW$drwd|2k!~Pz~+#9f?PkZ3)?il?Zkfsxb&Cjo)CY_+!IEE=j3#a zHtz|0p=-~0>CXXR+sXCmJ>WpNdhQ7afz@2E*((o$mt$s*v!Wf! zsV#fuVYTMENSlYF9n6`1MXsOu9YJY(#xs|rz~-#&NJ@G3%A>*F6O3g&?P=o}aI;_I z(9|>j$AZ*0;_o>hm+yQbEcni{p`yrl(uC*y(gRo zcFk%#6)aCbPX~KXFqZYSm-hreSG2|-pR=*$o^Tde?zQEgO*jWUoKoF(&ZJZ`U$3)s z!D?9x?uX~W)#GzM*gVrGxjwO905(Q>Pq+}S9-oWA#>n0+*C+Oi!Nw@}$4lVq@wpUi z41Mg2T%Xu40~^Er)3LEHm&4WLa|PHK*<{V#$@wpn@>Px-H%Jqr; z8gO%uy%tS9KG%Vbkv&$fk9oVtUJuS5dn4GR_5Bd|2F_bK-2=te8HfF5aQ4`n!1C;| zzXrRO%F~|*!M0QO`60M^_SlEPYULjLD7+jqbDS0JF-~pSdwy4Iu8Xw!INBqe zxlZN!ncwdzZO?d)|C3;I*7gLYJbTYmVE0&KSxxp}E0k*1^;&*IPAoq|zX|s6T2}un=WIB6 zt%=jex536K*U#VJ>hXC8{1#{SRJlI3JB~Kq2WLNc4=m4q@B!HUK;4|*rBpMvzZLlq zY~Ad~eTnxGn!54bTR#R{?~s~*0#=Lt@3q~z?2Z4YaD6qf4hc7MO}71%!K{$b8vqp7=Y_4%gu zF^1m@+gJU*Mb{R;e-(cIxyAT>hpz3YdQ83tTUR}G{|z<|+i;gN+xktpQZ<^c_i-{;QrR#z8PDtpD}EA zCa~>k^EdEvZP#L(1?>1~^Y`%b>{qjbAHv7j*3<5O<(}gH;XaZa<^VVMk2%rQ<1-i7 z-`HpWkn5w}Jz#Eda}SsYO+7yIf{l^B%Js>7&j&8Yv7GPuv1v~}3xJ#Ry&#%;=6fNq zS~=ef!_~|AUIcD@ZJF;y!Rn5!f0jU=`Cc4c=9&3k0$p3?dr7dGNAg|@z8Gi5K(1fr zdl|6p*{**^L9WfeV_-S3?_gKZV?k(BDT>z|8IOMg}atCe%LI$S+IYk>Xp5?MQPeYE>$nb!mxL%TVxO?zv> z)#K9#Y>ey`a(%SB{?-OJ*WWs5>hW0@Y>bS(T%WAJ^}*%5mVMd)n|5O{l+}jd=K9+R zO+D*xW3XDe{x*TDm+Nm+xbd}R{cQ$Tcg)wLlxO{I0WR}w%_B)|iLNc{uP<25BYAHH z-<&gJAlJ_r?l;?jZO?YMrj%>D7~3zvj-NLF{E9s5Z#(eQ_!!%I+ROFkJFHfo`0R)+ z>&-vsB6q#{=g)TnA4I8cJKIyLWe#@%t7UGyfA@o{J9f9hcLl3ie`iX0>h}jX>+go9 z9-jeV>t&4O`edC91efEVT)Zz0!lpgrJs8|vCqvNGvrcvgtCj0yC|tc8GzC&R&Io>?a&(6wcqj0CHBB=5c8!#Fbra{aPSMuD?V_6EzfIsRk7j-NS= zrj%!$j0HcBkFl+%y<8{0yVp?4wK;y* zgB>$%*HOwdpErO%!N=Iv(_YS}@1ErTzQt!tOXE7WH{vpzZYaha>S+ecY=t$A5Xz)+fz~gNa=5$Q=i9!)^`*Xt-nJh z^{0WS{9w!F`s0<7&D>P$uH;r9UQQ*x@Aqd0%AQ7vuG2)51enc()zbv8427Eb?s zrO#9Pnwy$_<=8ui{vO6-M$U}aOkmreg)(i-YJK?Q%$fCOhpTywI4APViNF2vGor`r zoW`Ava*i51r*m@J#@v)y<8u>3pYr;h2TeVB%nP<|-nY*OSL@B0bvQrRdfL1$&1V6y zy19yztG}UHh|^;MPIH}?azRe>TbMHIVqxl)>%@QatmOXtWhM9DFDv=l1^3Uv3NUtd?hGb5hIrECW`{SS$xt^E-;HkLAHjbJ~vf)Lj9r&Glm6 z9bCp;QyZt>VDKSt-)%sZv!^Z*tZ3%rOjV}t)recw*%W| zUryVU>t{@_iC==Xd%cKrz4-frB{@A7=k$76l+xdCdA%$}nd@ao>XqxiUxN>9@SzPp zqQOTu`2Gby1bk@Cb3N?@H!sIEW3@9_J=fDNV6_=I9S3t(i~p`*wOmjA!D{98v>QC@ zNPFrI0BbX@eV4~J2wcV;3|E_tGwX8*IB~V7?(Sf1#&rzkvF!maE_1CN4pxi(2(WV!`;lO^ zT#HA6t)rf6@o2DX*L7-}a{UtX7_jq^nB%}|u^$U|Tw^~Dtd=&92U|xyZJq$O&Ayzr zDc3JCPXs%riFp!OE%uYaj!o>RfYs9GsbK4O zfzx9-PWPN;D3|AS&smW&d(K(ZEBBo98vNo0zoNmfZSb2K{I&+ayTKnQ_@m&*YMwpm zY`A$l*BQ%m!0OqP&IPMwoa~cY{LcrgWly>QthOv?*7k+qtZnV7dl6WhbMDy4W4i=g z#=R7-HXCQ+UItEF?Wub?SetPjV|i>>g3Gv9!PVB_Ox&x%iK{(zuK{Z_u5%@i?K*H7 z_j&&Wyu-;KbFQy7z;%8P~NekL|bMGVVig zwFfy9_hE42YERuqz}k%KH6f4fcVO3E_KwHFYO((w>>7&w39wrBmM6j1QP1A;6xeHR zE>7E&>z9~+0K0w?^J%bJ?0*Ei4r2ckSS@Wn1GbKO+I$vln|(QLQ?6fPJ_mLUB~&zSDbe+6rI-xg=z_MQ0ZoF1!kx^J&cxf-YY_8Kj{{dW+)O}%p8 zey`vkgFmUcIr;hVZ*b!{-|5>sVD;>y?}F7bR<@xQ|M$Ua*+)MBt1Zi!_5C3@>sx#3 zegxL$c$lj^w!eeblIy2n^UvCp>!ZJ8^jU3p{KOeQ-_fkk>9H=SFYbuu45u=39H} z&I;D%c$lj^wmHCR+56@Mt2v(jrekhS`;+;X>tlV#Y@XWgc#1QgTVdOl(_?E+$8$@{ zZ8#mzUr=T|=c8W6&wb2)6TRe%H@N>MdTICHL@&AjCVI*H6nuT~1~tzbpC4{s<@_vw zrk?p(5UiH@F=w@mUUymp=&d)YeSy6YlF+U>%i3xDB`XQ zPh9P(yB=7Zab08b*fs<^m$|Ms0;|QoG1xhYeG{-+?3;oe+t@b)tHr)K*fENI3$R*# z|FtF9HjQgt?XGu!JFpd}*Fdgmx&Dd0HP~@V>}|kmv2P2uzp?)Utd{4c?ZDPix6LgW z%U^i z9{^U1{Xnp7#(t2PGuPe0VB0jVb+zZZI|S^S%5^8#-`KA6LuEHf9|_Kr$;|d zuL0j3?aJvjup4Erfg`BrHIOxXBwW98%^roOo;7Z%u-b8)@i_skPue~atk%Wp{$XEF0$W#`VgVJ1mS8yTq%3RNd>sRJ_9-4Y`Js+%=To=Lr0=T-l8dGkr=5i6( z_Y~^pDo?I{W*yGyu_tG89R@bn5tQcYcZ^q3ugvvQxPE1>m!YXA*UQ0b$#rS`uYjwY zt1;!~YA#oS{eDy3T;<8t&xd<+dW_^uu6u#abrhw!`nmc>>Xo@(3)ipA^*S{5pqm`>Sv8Rs8{BC3tYc4 z*IUullk06@wdA@X{gFm>uI`ryae5rUnOqM9 zo9n@p=IXP;W7I2ieF&~!nd`%7>dEyHuv&864*y5t>gH-pxw)Fl@4!3NZJDdQ%=J)g z9%ZhFz|HkA%H;Yq^~zkIfa_Q0`Xriqa(xP{R_6K#xVpI-Q=VM^2sT%BbCoAoKO-N> z>2Ww`#`OrWxgJGnu4_@gK)o{8XW{ylxju)co?M>?t0mVp@&7Yi-CT_+H&=6c5$yLp z>gFm>uH(>;=kz$1(_D|CJdV>`PoOkcKU2O;J#!6zy}{pW@Q)k(^9KK_!M|(ppBlWg zqi6e*H272vK0|}g*5LCr_<{|-c)?Gk-^yLH zs^wn(Hdrll`!}#!`7HYm{4LJD#L%9)?}D`%*SV0#_CC0b`vF|7e3tzXp19gm_am@2 z<2tAE*ggT5asLiiE1zXQg(t4|)cp*s&A6@&d2IgxmvO&XuYERvX!P<=LH7Jj5 zQg9h}a=4oRepkkK3UK0TPu(fO+KlV9ERSt!a2a=6xSIbCSmI6xPF(G&J3UyNaorQ- zvCRlBwb<7OcXGzQ0az{e4Z&WM zv2O%ci+y9T*H-MCfYmZyn}TiAxYpI4@!AY*?ztz*^-t{0wQ(l)7GO2&&qbfM1Y1Av z4dwcz{#IbGBmI4D*&5s$D@w;ou21~81$%wO{}*8Wx8c-Zu21}b33lDbe|xb0`E%}a zed50(*!3L$oxu9@&(KoIbam zMw#cdU5QaXWA=wzr+jYN4NX1IEd#)6nImJUrB4IFYI$xM1Xjy)i}N%XZa%i7Zr$GS zA?VtiU%y-49juo9VJJBJgK-@rHT}~59^kV5J>hD3zOnsb@U*X<_J^ZuOZy|hYH5EY zIPDwP_SN)D`+I@Q_V)+dm7O_RIBu zHoCU7e-2nJ?Vk%y`^L3>HT}~5dEm1B^WkdKaHjnWz-hl+{}-ZbOZyjr)zbdO;IwaC z+gH;s?Oy^e+rJd9HWR1&y#2onZ2R7)tk)ZSIhuOfz5=Y4wyy-IZDZQDnto~fDsb8M z)o`^rICGD=25j4XDO2xSuzK3M4xF}(VOwhYrOx%>vaK87YP~tr){S7>+J-XqZUU>P zt((DV%NVw$reEs(8eFz@3tVks&a`za*tWK#OugH{>S^nCaN074ZK>&(I(LA}w(f+h zEyn2c_%j99|1Sk^egD(ouM}MWw+gQR z-x~a#g6sc5!S(;B!9T8f=Hp(tV^lu3+=r%~=a&1yYI$yP%+xY}4}jHj-}o(9t$c2I z5bpRlpIaV6*OqJdVX&I9otHmR|%)pa2^Ki7oqh+PlXORmp?%~gN>v?tf+ zz-6w_!_~^?p+CcuYk5C-0bN^ieG#mdTwekwSJ$N6{9dNC9q}ua)=RFhg3VQb{j?|7 z*T7}2ufx^KXQwyd$+f(9{1shWa(xr5mR#QkCs(frx%qi5*pAriz|LzU^D?Hfv^V#( zE3tcA%9%awvKn7Rd3lX5p}d0AJ?$#W>}j77v)t3ZEx3EacMbl1!QDe9>>OWT|IP;Q zD!BfW7hL}-8+@vQ>px?`^`E)HXDPV;a}-?vxf*=#g6qFj!S!FJ!I!Oh=J0d+f4Oms zIs6BjdiKCCz-rk89b>i3`Ilg|?1BFTtCf4;SMV$9cFJehuhF$-{eJ^i%Ub*w*!g!o zIhS&=^JqI_=g@jtXa5Gf&h*z$dvg5&T;}>CT&>&#e}X61at~x%uCyiB3E*nUwF8`7 zT}N{Ba}C*!*!5$*+ZORkfF)spKJ z;Nonjp*J zX96czuOGSjdF|Ma*z3l6$#qt+x$3W<_T)MnxXg8SxLUaf&IwPOUW0Pm@%qz0*UvoQ zD`=dg;fkls9pDkN7oZ z?h(rqv%E*FQE>OnwHmxn!QEpwEV%v~H~1z6*MF;m>%UEdZ(DHvcPhC4yEJ&eg6lt^ z;Q9}0@WBPwe`LY+-@Cy_)jVr_1-N5c-Xm5-Q_nqOC9qoV5stB1*7nL^wcI0C0jrhw zh*javSMxb}HFRxRkE?^#vd-27JO8dH=Ta_q9&JbL99l2yY;CaXOn?1a_Nx8;;X3d# z*LC4)qg+@>N=8}pKHi=#I7IfCD%>C=BmGb+B2@3 zfy-PshpUzMh%MmBwY*1ciLNcV_64gY*R8?H)io?PKi9AAh_|J*UUK~f*j)A3PkVCR z4qWE?OSoEjkJuibT+4gJ4(QsF>yBWxNKuD{o(Jb4WTo0l<-r9FA=0WR~} z6Ry_2N3_2u8V0vLuSM&*E{CJ3XZ%Kh)iQp2fzucF2f4YqH`s>QeZhLkb2QjI_18~( zbFcmlc8@zavsd3)<69~3s`2fVcXPT|-$R+bdJHkkz51YnyLTPZ;D;96z3!NT>wj#6 zA6IbwPc69qr#JW+1=s)lg6n@_gI`qhtc9^~`&{m&`=F_3FWnccmc7(5P|F(F53H8G zbbqi~xtIP5?szu$(gV=7WgQ#{R?9j#80`Ew-;T9h>^R$w*fF+V*1=(5*Ma`}X-}?) zgUeixfUA{z>5=f{TJEJsp=(R7M}yUp>o{<7b)Mzs=N#LP*!i_yay=ewuKMezJ-MC$ zE^|E*u2$})C&80zxtE@dt}VHq0#-||r-75JYfNr_t}ojWpFwH8(o&w(e`axXm>U0ZTJ53H74F90W3*SFmKT-&xIc3oR9xn2x5SN-+V-rNfw z!tQZDXZC^zYJ4B%Z)@yx+k>3$1rJlY7kI5*PR#5DUTar2_*Dhh|AvBJ1HY-@wsCXK zb8TJ%H;3}tycA76*XCtlwd}3ta|PUfI4m9@_=k=}zzq{bh>jMQp1O8yaZR4Su zXFP9(n?pITx1p(LUT+7hmGgQh{88#TF6Jl~o1gw-b8{cac>M+zTbpAdPo9r}eSctm>uGP! z>(kghp5V;9K3QYu^{E+j+A!*MZ3x!C;l7n_@VX2$C&xbv#Ne%h1AAHdB#o<>v8 zy#5iamU+F9Sbu`6XI`HLCojiBZZ3|4zWQBEy+4B;Z*7i=JbAtV_B&MTTTgp)UZ2PA z@h8sA>oYZWUZ1V;?Uc`PIY3MZQ!OV~Zid3^!y z96PTs*4Q!s3#aq?GG*rVV`7%``u7I^wBXL`KMU@>eqC_e_@?F=&kx|{P|oXzXzH2Q zkHBi>ynX_=AC8MT%EjiVzu4UT43zQu4DP(@ub=kh@j1Ae$3M{2Gp}EO)yjGO60V+k z{R*7C91FR*I1c(|UcUu9-r5`!dGh=h*mAe1p(s}hc={sU(UY)m&uJK%ZSA+K|xc*ZVT>q&WeCmShKU2Z=pQXWPEx7*k6kPw_ z4L)DN^KmG4=T9+LmGVdg6luB;QH^~;G=4u>*ssc)0_B}*YUs6)N>vG z09NxlcHO%M)x0KpQTIo%TCTUBz-r}ZSiV|rt!LZGcin!MF#)=^e14e_td{Gt6YTY2 zyRLP)*mZ6@V%NC!ave?tcE8YHKkdnNVsM%3ByhFzGwh^ruRU`uKf_Ljt}VGv4pvL9 zQ-YJL*O}b>yvA%t?Db{6m}Fu!RD&Je%h1k0^l;&1>tJmAM)FYh2ZAunlIPu!syzP z>mp#a&Ch+!cEs*!)=RESg3VQb{j?|7rNCvbOT*Q?KPJ~@;K{Wd*JaVQ zCD-M^YRPp4aB_8Dm7AY?s_lr~Ppy|+R|cD_{`zT8uB(8{TvvswmA`vj4Q{Uf?yVfx z)zP&j*EPUu$#pGoa&=Fan_nMF+YzsA$(dZ&0h_D-`e{$D>w?Q%*MqB-zmZ%Yo?Odu z-2h!%a@`QDmRvUmC)bU@a`W4S(ssm~Qd%#$ZU#12{q@tHTsH@oxo!bho2+Aen|hC|6uAzA zC)aWv4oBCPTt|S_lIvdJmQzuK(2yeoevkzq#Q0-_qc>);!n7Sh!*3%s*CXI+uKnbCBs{s6*Thli+LG(hV725r4xC(FM{@IX4cU&^ z^<%x{dOX-%_18~(ay zK7-PF$@NUIx$3W<_T+jNxXkrzxLWy)b`Ctb_IS^Lt}VHq2R@fGxn2NHu3kTK^YhxV z9kJJq^^)twU~|=9Kkdo&5^$O8rEs!&@rUI#97y&kT1K(StLfG5{-z21nfExFzVR!gqG1}9hd4Y~Qb zXV{L|{la?5^)|4%>aU;nat}Wm+vl7fpK`i~PeS<_r+f83DATvwsjGfu)&8?Icf!@~ z;LKif7ub2x=KBld-wjsx&?=hU=)$>~wH{RP~%|4Es)@1>r4+P)92RviLNbvPl1i^{h)ll z`2)JP{5y(IgRQHcx_<=!TpNEv*A~BLz-go0*Pcb!mNuRPTUUK@defV{o(Gd!H9x00 z=##jA2B-Zp?hEMJ;`bsr?U&coU(mIs{g=SjRZrcQ!9Ul=E9lzd_bNDTl>6ap=-Sf8 z>tO4ur;l%d(?@gA=P<4#`~O$4W1vskdJ}9;&Hd~xbZx2oHrV>=srxsuYbW#VzM!UW zeBJ@4&*gZ%i>@tx?}5|ja_zj2t}T830Bl|L)cp|rb8UQtt}T8agVRPi$Dg2UOB;U& zTUR~f`YAZ$Y7Y7&?q}e%U(VO(=-T4<4{+Kq$KnfgZE62Yuyxf__n+XOYvU_)ZSngW zoHoi_zCqWPHogU0S3Q0F7dU-12YoXC-+>(iebUzV@_Ox*{rNY#w$%LrY<>0A{SlnC zV_nydn!fS*37kHcYr-!8wZ(4&c=}xWO^B{7eeM8TS3Pw*!9UkV7rM6i^#Z4ja_vln zt}Sg$47RR%#&r^~zR3jA|z zOpUHBe$#-{M!9yTMc0-#rUP47J$;-WoIaX^KAHa+z>a}FX=_HXIW_m4nb5VR?#y88 ztEcWP;H(|T%(bJYZ+vD2r_beh&4#WmezSwq=W^}Lfvzomo)c_c_0*jU{Bv#0jjkMjEQxi%I>*A~CUz-gn*WpQ+EX=4enb=A|yCBf;VIp~x5UkdCP=##dV2Ah*>r|i!% z=-N_uS+MohQ+GLV){c3)cGUFk!+p|c(&fRe_i(N_ zY18s6o`uYHEwDNH9H_tfnDg3{9_Fl1A5JxM7AKc=z{$Cs?{(3&#c#dBubiv((X}P# z4Zzk_H|MlznVdHSo0I*}-+at@W6I>L&qkb^bDFc*dF{({?IvL7)#nxGwJ&&6H1+sw z2G06$ZOHX8C)+Wmv9ngTXxUhc#ah`CO+9O+FIcTyD_g% z1kU)D>v(5$ZSmWs@GIAGKXh&P)a!Uxuyxh*ZwmGYtDDyV%H*ZK8>gCiiPPRdaPlhG z>L7G&@f%$Dm1}hfy0+xCJJ`DFj%C`k%vcTuo2TQWzxn8!akGr?9$?4Sxv-vb?B6iT z^iQ8XIo0f+IBRw|IQ`4I9)YI51=st01Q`id^YmaDbl2YtEo(mY_eN7s{ZU{wPY>(6 ze;a!=ntXmv+tD|lzdp~|j=qU~Ft{1}5H$7l_fW8!aXgHb ze%oJt^>MvqzAfe1gDkUd4{O=}^Yi)P=-T3U1lYZ!`8obbbZxmu9|g9qdg>kxcFe6? zUfai@Ym47FaM~!Zp<~gtrH$jj)>S`@8Ta$)@!C1HCEf{O$1^!QK5F{L=R|OFE89E? zU0eK41}C?2-#GT+T$-mNw1;TUR~(KO1b@ z+7j;^aQbgN`>&>Ne9i?Yx3XX7p=*oZ`QYSM&fx{<+LGIaVC$-&>N zd~N|Jw{re(Mb{R;+rZ}5{LFPby0+wY2iUsmse30lZIoko7rM6i-3?9~`jl_Em>=+r(`f`0TKCgpY<6n%=8))hopTC0DToQ(R!sW(T#^`EoghhSf};M$if_@mgj zD7f}5OHOM0lpOoM1z#WgAqBVop*43*W`%da?Wf~qU*!J%<-4GDg8Ngd_pPtTF0i_X zbsP^h=fLkCCILGJe)phVK5=26ytcQVud&M~tL^^%s#Df>uR-g}r>O1jjZ@Y3>_zfP zYrA{()V1C34XiJB|IHeirncwWkeBvpYkStOytGeO+q1^x+H)OE4|h!5?`Nm<_`aH< zQkUae%|J<4su?Lsvzm$0&qXs++6PPiYn2mI&H`asSF=*GY^&KQU6;nmJkABqJi5l@ z&g1;}&kY_#sqUD#Ce<7h$9x{JnsZ{j`S6_=t{$J>wU6@>pZU<#^LcT8u>G@5>ub-t zSOA=LVSPUjFNmg|&x;Fz)r{kK*k{MdF*0v`^+`?(gPVCTf~FpyMQfij@5Rv6llS6a z^Y(MD^|dGOCBV(Rmqb%f-b;bijN@UfSIjjcWJOOv&Q5;H+VmGjX1Zijm+)x z;LNT2gWS1Yj94pxhf=EBmiviX`oAJrt(@DH;Og;Nx%Mf?XcaW|jM1v#%&qmcr~YbS z+sOBguAkN6>Z!j5IQ5OC-TLksYl53&ycU{z#<&ky%{Up`a&73VPjXrt-0b%{XzKA< zxArOfy&jr+@?IZo-mVSnYft?Rz|DSdh^C(U8-Y{bSlZL?jls=+Z-SmbJaXF%;!j@v*q_2fMW zoV8_r?WsQ)+#I(dXzKCVz4j@`Z77<0+Smh}Hmt8bwml1*x#(+b$88w6Ic~$z)H7}) zz-q?vu$_#b>rG#MjOp4Q2{vZdw!FEvXD;+t+<4)ojb>oL_;}a&7g-_W-zhd=3OV9(fj$ z>yvyBs_p5&yqWK8Xvz05aPmDAEH~e+X!~&R{*>zGdkCePZ8_gZfYp+(_xB^=>hU=W zY`*#!L#~f@pF@rY8>3wF$H3L&GY)JFeT*U3N4sm}*xH`wGkLSmv!mH(KNFl#`}>(d zoX-UAAsw{gF#)BY34Fev5bXWAlhQVwt5c|_p6kfDIu%Vl-({QzKABV9dXCxYVC$7* zb_SYyzMnr6tmf%KHLky2t?yONLZf=MHm81xdp5Wk_Z&3!#61_R=4lL{u@d*ZS~ISG b`S%dc2ivChljwtEbOBi1{yBzn$MF9HW>Rmu diff --git a/piet-gpu/shader/tile_alloc.comp b/piet-gpu/shader/tile_alloc.comp index fd89bf7..21039c5 100644 --- a/piet-gpu/shader/tile_alloc.comp +++ b/piet-gpu/shader/tile_alloc.comp @@ -43,18 +43,17 @@ void main() { } int x0 = 0, y0 = 0, x1 = 0, y1 = 0; switch (tag) { - case Annotated_Fill: + case Annotated_Color: case Annotated_FillImage: - case Annotated_Stroke: case Annotated_BeginClip: case Annotated_EndClip: // Note: we take advantage of the fact that fills, strokes, and // clips have compatible layout. - AnnoFill fill = Annotated_Fill_read(conf.anno_alloc, ref); - x0 = int(floor(fill.bbox.x * SX)); - y0 = int(floor(fill.bbox.y * SY)); - x1 = int(ceil(fill.bbox.z * SX)); - y1 = int(ceil(fill.bbox.w * SY)); + AnnoClip clip = Annotated_BeginClip_read(conf.anno_alloc, ref); + x0 = int(floor(clip.bbox.x * SX)); + y0 = int(floor(clip.bbox.y * SY)); + x1 = int(ceil(clip.bbox.z * SX)); + y1 = int(ceil(clip.bbox.w * SY)); break; } x0 = clamp(x0, 0, int(conf.width_in_tiles)); diff --git a/piet-gpu/shader/tile_alloc.spv b/piet-gpu/shader/tile_alloc.spv index 66a9fd2ea90378fc27bb639f654d4095025c21d7..fc2e4483a512eafa37a80ce92058b9ac4d5a2490 100644 GIT binary patch literal 14692 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