From c4f5a69a0d24e4ad47df952b4164521cfaeef982 Mon Sep 17 00:00:00 2001 From: Elias Naur Date: Fri, 18 Dec 2020 00:55:21 +0100 Subject: [PATCH] implement variable output sizing Signed-off-by: Elias Naur --- piet-gpu/shader/backdrop.spv | Bin 7632 -> 7752 bytes piet-gpu/shader/binning.spv | Bin 11600 -> 11704 bytes piet-gpu/shader/coarse.comp | 4 ++-- piet-gpu/shader/coarse.spv | Bin 39668 -> 39892 bytes piet-gpu/shader/elements.spv | Bin 59316 -> 59452 bytes piet-gpu/shader/kernel4.comp | 2 +- piet-gpu/shader/kernel4.spv | Bin 34160 -> 34304 bytes piet-gpu/shader/path_coarse.spv | Bin 32248 -> 32368 bytes piet-gpu/shader/setup.h | 6 ++---- piet-gpu/shader/tile_alloc.comp | 8 ++++---- piet-gpu/shader/tile_alloc.spv | Bin 10308 -> 10620 bytes piet-gpu/src/lib.rs | 6 +++--- 12 files changed, 12 insertions(+), 14 deletions(-) diff --git a/piet-gpu/shader/backdrop.spv b/piet-gpu/shader/backdrop.spv index defe30e7d26b76850948dab2ceca8b9f7bbeb11e..72b24bf01fb41395717af80456da0e14334f2038 100644 GIT binary patch literal 7752 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 TcUjvQ*E`Q!Qe2;Pv9ta^#!n5> diff --git a/piet-gpu/shader/binning.spv b/piet-gpu/shader/binning.spv index da2df7626715da68de5a935589a93e42e6fd548b..d92b919acd88f4ff32a0e1de8cf29812140c1727 100644 GIT binary patch delta 203 zcmcZ*wIg~%A4@np!!ia21|}db&rB)Fh|kQ6FUibFEoNX~V}Qsp1LZPOGt)Cl5Rz;_ zS&%*!AO%HM2rI}rm#7egO{0^n_=1HMsDfN6Sy518963jh1 delta 115 zcmdlHeIaT?9}7Dh!!ia22ByhpS;Qrofvlv=y!fQV;#44$fei>jvMiJTvWUyF0$Bx# yB^kx3=@=^5HXE{5GH<@b!NJVT$*^qlLvH!aEIcNRjBJxFc@Hx(Z~n`>TOI%<(;K4z diff --git a/piet-gpu/shader/coarse.comp b/piet-gpu/shader/coarse.comp index f835c2b..c739f91 100644 --- a/piet-gpu/shader/coarse.comp +++ b/piet-gpu/shader/coarse.comp @@ -83,7 +83,7 @@ void main() { // Per-tile state uint tile_x = gl_LocalInvocationID.x % N_TILE_X; uint tile_y = gl_LocalInvocationID.x / N_TILE_X; - uint this_tile_ix = (bin_tile_y + tile_y) * WIDTH_IN_TILES + bin_tile_x + tile_x; + uint this_tile_ix = (bin_tile_y + tile_y) * conf.width_in_tiles + bin_tile_x + tile_x; CmdRef cmd_ref = CmdRef(conf.ptcl_base + this_tile_ix * PTCL_INITIAL_ALLOC); uint cmd_limit = cmd_ref.offset + PTCL_INITIAL_ALLOC - 2 * Cmd_size; // The nesting depth of the clip stack @@ -370,7 +370,7 @@ void main() { rd_ix += N_TILE; if (rd_ix >= ready_ix && partition_ix >= n_partitions) break; } - if (bin_tile_x + tile_x < WIDTH_IN_TILES && bin_tile_y + tile_y < HEIGHT_IN_TILES) { + if (bin_tile_x + tile_x < conf.width_in_tiles && bin_tile_y + tile_y < conf.height_in_tiles) { Cmd_End_write(cmd_ref); } } diff --git a/piet-gpu/shader/coarse.spv b/piet-gpu/shader/coarse.spv index e0d89e5607670266959fadf3d08093111a327ae2..0b3e125ab03b49429d2bf9e65e735c6aff7807a8 100644 GIT binary patch literal 39892 zcma)_2Y_8w^}R1l2_^L2LzNDpcLE7SdKZuqCdnijGRcHwLX+M>qza0tpwdA=K@n*V z9c-xBTaY4PK~w}O^8dc~?wUDy;Q!~<<5_F%efHUB-*fM~@6Kdwn|JkLRW(nwKs8_0 z+gUY^#j1Hxs%pWiv(b;;^ME}!oYg;Z!_79|SciqHwuYZRi&Vp^4*GW5w631%8on}b zReg)LDC5-^Q^Z++TO0quTs;hFXXdecjvKqrK4bUXW!!`rGsey8KcTmKTyM|x?r{@) zW_C~L?>V+xzxfKkp6L^MXHP60I`AlSkk8K?JN5SVO`z{2OSwniq)D^7`-e1hn$*?P z+dZ+utD_nYpVsBTwP%mqR;`^{RMo7W6Un6MvoQTm)2H|C+SA*+fA^$Dd^L~6H`e0t z_-Qi_HIMP*`;NEo~_xu5lCkdi!QN&+uv~w2U7&v%72J+Ozs+&YsY}K}06s zVD?DU#J{at(ir5^LCj_9u?O_e?3>zcmd*LqJ<2?ngB!Bx+w@cODDzZn&C~qVJ*S?x z<9a6cPXTvS3so!955@h!3I%>-4mNjV787*-D7AC!>iTc&eiZ8 z*WWd{tW^Tk6IrWO@o&zvaJAN4W1DGxAlna#v1Sot-MM18Gybm#&2zTSV2sXceeljb z(|4ObtG{ddgyus`1S2`_xd^-Q1GeSFqj7${p~)oy0jy%FP@>u#^Spc~`p z-LIR@9g|vjHZlO>YqY>jdLpZ z7+Pa{<-R_UOEW%lkJ4v5xN+32mE2=!-!?V(Z9lPQ(RXm)*^%CHb0uCURPM(e@N4GW zQSA&ip98uln^I#wHIFiw9V%}MUz{PxyW&78(}O_(}yX5S2T^BPO<*tzmjV8$}9 zUGZz?)miNZ9zAX1;PnJ;%&YD(lv_u&2Yk>MY%XdZ=EuC=Dh73PoYK`hX_u+hEej<_g`XdmEor#QT7o=dGjKzd1*4 zy^VFMc?_+yy*dz1aQzxmh#Db~HHWZd!BR zU8Wa{GDmffp*3|>eQ?%P`!?62<}tLEC8~b-klzOuF*H}puB#16n=INY9xDd(Hs@yE z9o4bTIT~xF4vo61d6YSG>o=E%pEmcJn#bJtg2k$n(c=4otTR(f&JDStHLsCR7`MI$ zoCHq3r#55nK6_f@@@V9%<}s9Sdv!XT9Q14W$US&UY24;IcuGA7Ui*9?&3b~CELEFH zTGO)_pB&EyH*;*S&TGcCoQ=8V9z*#pSX~Hb?s1%}56sQLx)RM=d=lU0Jd0JA*5kah z{MUj1pBs>QUpyGEt-1u<%zKII$~yMob^Sj~Fz8Fh+~x+alTR0OTroJuQq|Sv9F3Fi zP2hi>XmG$>d;6+luFnn5wODm+Jy(4_{121NedSoIFBY+{8H~Mnb$uPX`N8`?gl;-o zrF_&iuFJ0!@vj?dE2s^al8E4$D7IAMM zjJrT}H@NZDY21WqgWpxy;MvQ~XVCWQ>-gbOUxOXhT{Z9Rnbza|&N=QkRs*+J57F<{ zJ*{u%3C(+s++$kzv~jtfI{7ZDK2P*xyJt@7?K@6C@4?#qJZDTJj&lrXIP)wGF6UXH z$p_~d(d2{ktl8v)^Q_zC^*rs>MosQxc4JLjz?<{7R|kP-bj|GYv&c0aF&A&Edf>@x z8h9wLwrUnU`JYhuojjLcdv!*W59WVvlh^sTRiA<<&X>TM@A{_SV7+f?@;Xjib!Rc| z{=so=)iVWtp}_wr@OuRw#s+B4*;Xw&h})|*!DVgMYT+YW_$DoU`xd@K3*Wtk@6o~! zZsCWt@QE$FyM-Uq!e_Sdli+^lam_W({V6T>bKpn&AzAN@3tH?Kw(x7<<9nvp-vv7x z?|dfrjyt$-=G3t>`)1GBZH#-Yv%0l8uD_?hr?2VV)NezdK8}hvEpCZMUSCBY-8X$w z&*bKHF87!|uKxCkr_UVfoYqE+{wcG%aYr52&>hnFs=_zoaXtVy#x!ldxth}5GkFSM zV`EIbc5IF3e?o5znSYo%-z&)~rol1uVe8@@MGSuD zzI|}bJJ0r6)_awj#{_C&@BQh{TJzey2h2BDw=%Z*8t>bv|DJslx_Wn;ek`2@_bh1d zsP4nxH8j@8Ahm}|jr*!`A2F`q0UJK;)f3?jduR1s`IMen%|MOm8{>Y4Uf$1tSM#C! zc}MlUnxFC$yJz@q-Tm=Gv=h5$_SFXU7o+#_9&lRMET8Ai?W}c_W`=iG zFT>qcyhikY>-uz5uQ-m^XD2izVzpJTq4^wdE#3ytnlf&DPye*88SEG5T7=Cqp>Ou| z=I2p+wIZAn)-i`w8^9UUm~LoyI<~FaOy5TA&T3TQHx!Titv+>~j|DdZAvpfH!SU_Y zsoG}tjdxF)>owYVL6q<5=6YSN;etndb-iPXd;N_q{Fb?RM|B&VwG1x993DaAEm~vF z?}F!k|I=3e5Uu$<+FtzvT+a9V25;_A^Lei3$?ugG|3ATbTYhu&9qR3i$#8Ly*S zv(TDxJF0cj8rMmELS5r#Xt_tYhEc`1QXgCB<$l-$y}4(GRa3zIyvgismLP78bxhT- z-Z!(s-M!h9ZPl@ZG1{wBz(f0n=Y4qde6>}d1vk%adv%q5#a{V5d{*}{ji9dU7Whz& z+N#^(Oy9`mn_x}>xU+f;oHz5-;;al?pv|TMun0hxTeKc$wp_E%uMXC;1|&vDWr# zw-)=JEqw2}ct>?O-1}o0W71qc?bVbP-q*s9Y2oLz@atOm4Ri6%>Tb9>jQ7RTIPb*P zt-ZQ$F2DBbffhahA9^3rUOnAn|6U7!t%bkd!ry7(@3rv7_+Ty1%@T0#0sIW3neUQw z**mIb;I6CmS$!@ap6^=thAn*K7CxomW2w=DoOdKpRehAI<@?9#aF1v{lc<$`e6%z) zKl{gWA95_WE^vF}`^RcvkMLESw88yZ+Jf-qY0i=7p>p0l3zhS#mGfq-^XfOeh-a>9 zixwKEq@gWYXs%zsWed$`9kmq;&2_4cXlU(&&oUX8XB&MytchA%1GhJxb5?6unlw^I56k#fz|DM{z9VXzx?|U%cWn6DU~`ch%bztR)&^i>sjW&b z8`e0w{+ps@U49XjYuC0_ZL{WEgN>zTjkc+6%^I~ee%50g>*ddIv~No@=k4j$jA5*u z=#8b_d3L6Etmk?({RrATG-HjS*RF1?UFg+};n>~iv)dQ#yqgLnNNHU0_&sAm>;7zren1k^Dz4O9}d=E%{BU7Ut4qS z?bVTB?drxGM{hjGX*1qL`o!bb+VEG?Hi^EupWCa+wN1@fQ|OK57;XAbqfe~qVCPoT z)<>UMGisZfv5uiPmSeQ(?|bLO^5u=O)U+L6*iNWzYQ{Q|-dK*&rvIt*iFF#-SZdl% zr;qK7+NNf#GwF?W8cm!2=h4Uie6X?9+*23O>#y$kiwf@fQ@gy-JO^r@EwstC_Ju;T zCi;E3(A;BcHx`=fRlBXw%vUT@*=!V}9$jO9Ji*bCO&dvL~&MC+*So7eW`YQ9U& z7p?isntNX~-i0;yewKI_qrLzBP`;PJGybaD-}|BC@2L5hn%`CPoojwi&8<=5k74m; zt@new#@LU9TeI+~a6kLPPlj8db?e%m1&{3t@Y;p%wQzIy9{(k<^S05<{mXFDYv}F^ zxz9Li+OMmzV^-!<-RBtb|JA%ceTLA#Q6qZ(+t8fn4v5bYYRUU92@@v|pDWBmyS4i{ z+<8}ozgc6)$lsz@vu@7!Z+iESy7A<`Q^=lrug1np{FNw5_R#uZeU0gOx$hU$!bjCS z`Hz9mN5Y9W5zZDG*a7W_r{aCqkTJ9(Lp-=RxBqJ{gt zxwMaJ;eHR+p7p#08By?8;j0vU7R6e!=I*b@EFOpB<&QV`X*;eD_w(g#xLWKhxX7y7 zG3)Pwvm~BvIve}Z=Sa`*V`#Q5I6Kfrj&u#*w@?V#sEOB)??LUYk-hIbOYVEllHb$9 zeJ@wqeJ59P-^Z2Q_i-ineO$Qrci+Q>+xs4_jgltCC;a!hM%j+I^Q*a^Gi#`%K|Gt#ChgeU}x!6L#Nah1>fstK`1N zD!K2mO71(XlKT#;U*nj{U;S%yYH+@yYH;ReJ1stRk-<`Q*h(?&MJ2M8w&0-vhS>7*WY(l;o5yy74CDF z@2bM}_gz)^WVr9D!nOOZD%{?8RpHuwR~0@3?z^gR*W#_ zu-fC`H~Cci0@&ki{Iz|arsijz_&qj~Sj~BSM!TNobK7H#%RD#K`dRom?~U+lY3dnw z6WDRiopCqA)laL(-2!&3`VQphXRMmo&sWFp#0(G9e+}+)o!?DtiTQOjZHaj|Sk2G( zGwON10akYn=hWIa;p+N1pP%1q$^Txk&xvLJ--fH}@8`Qb{`Z4h*ZTmPdg}Bb*gB~j z!)F4u#P|-lwblb@>WT3%*cj@@@Hs*)F&+iC=KUC&`uX+R9|x-$#~6>$t0l&h;MN#V zp{b{SPlMGG!{-&XoR{x`%`N=85Ne0~8=K0gO1&M(2*!hZ#JZ1VdxSnXt5=K2lT zaoYB+n!hvlTd=xw`#dN29C)4o9;{aG^*M0$#C#5{<~-T!e*mjrK{Kw;g=*sG>D|xb z7YgjNVDy&?{Ko>nT;Nw~{O@Ys>Q%7!4Eukvu0PZNh329CueIIY`;On${{+_0abolF z`OzF4^S9b&Z_K~b|AXeC{hzhnKIh;KurcnWe%|~31y(zf=DhOPX~uG1amKy_c5L{& zV6SiY!F%-op}kGhPn-FwC0}zhrhQ_(4>o4b6+0JbTyQM&C~J z&^~W%x6gbXV9!f-}i2sV~BKT{T> z_prv=hSSu{U!1uX2AiL2cQ47seowHD@mmyb?UTb|aJ9S8oNo!Rhx2J$oTlb{;>1}J zT&`^?xN&nnmWJ!2o-xaS%k?h{*H7KLXCC`ExJun;%Yn_qwd!vU=D7mBhk5F=JWb6! z#kt3<49-2q_XNph6|lC4se31JMu63x2ghesc)7;a;N==uhwG!Bd(#?Vb?ccpYr?N7 zYO@wxKlP0J2w2_sX{q7baP!jUx%4}pTH>w)R?Aw~1^dkMJWX5t)&pzHevrquA=ovA zZv;1Ha@ZKG=4X56841rk+B0?&ur}|pUe}v~efQ!V&Mnu+bDeW#ug&kPx!yMidmin* zKDVUbiss?it!uk|=H3QujO^=e!D_ib$+w^x%h=+K-40w{6Whbpa!u?A_HeIh+kvKL z9C7081TJg2Gu-Ph^%xBvC8xP&xjwEb@$Ba?kNdzj2A=r4fXh60g{vjckAgkSQ`=aY znt6&7XE$(}=k9Q8_bBIWG~@RGdmmLliCA7AdxF((ukTZPfsLc?^|%kchjVM&o2KU6 z;>^7-xSV@Gcscj}aOYOf+y{Ww^BH^~*f{E`?LlB`t1WYV46Gi0Fxc~vy?qE+O}|_l zYMzheZZA(A?OV@}cK4@iwa9G^Y!{>=Epz~%Wq9Ilr0eI(e! znrl0Pre+@E#2E)JYkm~m&xqK&;ALIL!}U>5eJ6meud%F^Tt9Qqoc67?$@p$;j-N=& zypzD{#`CjF9@}KF_ukZQ3S7;#>#t4C`SW>bpYcb7ebx$}3bzJ{*9+H2-FQ9pYVn^2 zRtujF_VYgbzYngDdVFSp%Q45mU03c&GvWHE=ktCR*jU=Uj%L&6oNDW*sd-Mt=6Wo> z_e$|`HMS1N*M9ciH&3Mh1kFSHNwwWRIiCzRMshp_td{$x`~;e@%t4&7r-98S{0y+M z9;xpmXM#_sspncg3#^{=aJHDH?s`t8S4+%uz-3L(h3k`h!Fgb{=I2xMbLV{cD4Mp! zxd5!5^Y=-xvDK~nr|3Prmb6_+Q*+JY#JLFU{5cPDYa3sCxpjA}ea2o4wmw<=C1ADO z545S3=hC`o{H0*)eOrAGz6`A9UT_UpfIVD;wolVOM>7v`;#>(fPHOlWuv%He&%&*t zwv4+9tnS(`rYuLP3W?z0CuI9ZqK6k;rmklQ?p9k)S^O~;l@4fZc?%duZwK;b? zz5BvGalQf8C;Xdm=gzsl2d<_WOtPaU6x>!h_N34C z--o;3)Z_C5u)4W_mtLOl3qJzqJJ>VejQKHGTli1Fj?H(XpMuq%rDbpa4D2{h(`TZK~d9ilCqxX1+pRKF^ zmPTo+-_Uzq*z?~;-(L6DRX^wQ=Ruxd=Q5Ty$7HTKU~8f8@9E{K=O4g>^(02dJdds| z`~|RMQ_q*cYA@1K&p(14r_Fl$J7q6})t&nldbu_8_bgro??|t%{W*FybMt=nXRw<0 zE5E-am%pHCi{D=hzjB|yhORC5gTH|ttL}V%qE}1Yzk|!`;vaB*a&P=6_;s3oj+g6` zJpKhvzGWV7qHFWHWi;z}3#^uT{|&y66CV59a5eKDjsH7f$EZ8+8}w?K_dRgt^>a6I z|AVeAao-24#ZEen_r9^uV!D@~ltt;4EhVyns-T`;N`ZHN=o;QDI z#9oUgqV`X|*S>#lgwT-{Z=>OQ35@UQ2@2VqXgUP;vg3hN~s7Wx$S6PhQJ{ zlb7}~FMnRFJ@J`H7?(f@!9jBf+ zJAl>wj_11FD?7r?Pn&D<_Y>5T%TC~&OZ|6->yvXg8azr)bG%%i^7GBlxy1V@wldys zaO;?OyMxEl^fR7ZAMqaa-m8thC)m$Ud%yGUO}`J#L;Jq9-9B^g2R25Yi}nYrNo*gxt57=VO0y|&!Z$DTcb@z;XI?dS5B{q-Q^jAih zF_Oc{V6|LB^5bd7G6!+So(eXX@YBG?%6p^J!KYJa_3Ya-)Mz=MXM&BR?s`t4S4+&Z zz-7(OhU=4ke-2o!eCKg4+;glgan1v)=UP170$ZP~{UWeh_Odp$@?2VXKaUhbwBSUsO5SAf;Z?`T)Tjjb);(LMuKcl{UB%Z=%Gw9kRnv|U9n&v&$|!K>k; zuKlz0YRTsd;Hd@wBG@(L9oaQtHTS*e>&svd&zH6@(Qc$!b8+H+1#Fz`m+Qc4<$k#y z?tamhaW{a~&GlM(x#z`sox{0e%V$_@_K9;7*zuYFX0U5jcl_t+)#86E*nD&DZUZkz zQ;*MA!Rn5`gfzr8mwDU=H;?=-&HZ3~)RV^pVB=^rk8jeeCFX-*_ga3w z{}5QM{EqOQ7M}sQn*RnO?}i?RJ64$Xphs}8)9>LjNaelaNp>!O`qiU zB)F{6Q}9tV_4qsuRuBI!xE%96xZjJ_-S(a^YL6Jj(y$>&H+2O=U0E{$R5yE?g96LbD8sVVE2hRKTq#r&gy@lshP7l=juhU zdmz`vAHixb(VX)IdbRk!0@nWt*4#<_KY`U=rRDkd&tPkyEuYnY0jnGHWqNsH{uS&z z;je+qJ@z-a+O_PJ_`D7;_t@Xz`l);VeJA-3u)jlOeC-+gPp~<>&f6*1@CI04@8j+P z?bbN;vX{@Gw|@4C^)K*LTK4dpV72^AQk$CNr_npUkG}Pp(z?8b?)-`UHr(gMtmhrL z>v8XBi{HCoZN~UFz1;cUqjx@gpW)u8=d?8r?el=O+c)+$mjB?RpSn16%!`k)bMI?| ztC_F+tpn^~9Bu71HRFgAr&EnMsn;;LTAo|9sl|W3+CTHo4_EWP;k*liGq1JZF2;5rhr!9Vqg0-dA^4Jywmo-`(u9g}t2~MusmY}JbtJqvU zKXP?>YG|K%meGgYb1z*MuI4oxpXK1@GMpXmeQ0^O@0oU^Y0GuF0$5wl$BJO%sk=sh zXI?FFR|c!)nPL^N&x7jm839&zyuV{Fk8M@3dF2^qHMrVi)_|+&o4Tvz zS$0kEhds-#g|01eKLR$N)NO6BTKSy14%~6t@|?OZSlzk(xq;l6KBuk^&d(D3yBG32 zr)~gV4Ig#K`f~!cd$`XM>hak@ zT<{&iPmo;B$0)cy>KU^WxcvR$o#FbaXWVG8dig9d25yep@+`3nSlx56E4@6=5@W$W zOQ>u2-+ri>hv#{BaL)5?V7X)ccdUDW*QHl?>__R<9D5%6USNN(SeySQM4t8S1O8oY z+Z!zRXUBe??+d=0-Z9z|Z$Ge_@r)}^y#2xYYBR1p&ol>sjp=>!AbJn?mimD-HTQzp zdyjiZuAXPAgTdCO^_l7rG;Mj#ITWmxy?hur^J)7yZ7R+9;>14!{9*BrMAznhXBdIT zfe)vdhijGVlV`D`z{V+`#k%0?@fi;`Mm~Gw`ecp?V9#Y@aOqVO;p*|}1{>q~IuE%% zIaiaxIro#ma%~6V-vf56`A?yjd+s@H)zRQf=^dlZ^I;9Gmvzhhz2Mdyr=h94@BR1t z)4^)VX$Cks^?~K)a16b^$zdk=7RKwNt<1q(l0!e(c%F;w!`W!+`CK^`tTv05amRr( z&iUo~m3wb9cw(LaF7GiX!bfpmQjgCk!0O>Afy*%`!@V!5$LAEVdibf}^1gH$Tp#uL zoDMGUOJ~6KQ_p?rOt5-+UpfnJj@oixIvcER4bGvL=e~3<*!z;YcK5Veu9x$`A9lT* zkFG7BEf;{*ay?!M_VD`G_DPzW`%COO@;l9^z^&KOMQG}YeKA^d9D+&!x00XyzeKy)Os*Zz-~$J`GoUjIq|m&rvn!H>Tr_lR8}q{;)cI z23=d$@>#H&b;{gV!JRwrH9rSe^LZ=3vv)PzvD#eM7wA1)m$uK-zCtrEabkZFZ0tv= z_h|gDfqTDE&okP!VD*go64-w~@)%>hCw&>Nrk}OYre-b7!#SPX@qQj%56<;}9ax^& zH-htdbOTtP&!d~bejYhSTjJdeR&#FS$`kJvu)f-iE6?ZAtzw$>`YOGL^-{l$re^Nq z@}8ic^LhvP!_MoS=-Tpm^fj$}!z89_@pKpVWkRwu-rJ`qt`cU`9An+#_OZ4T#IYU`S=0Yc;@LGUMD|9Q_nr*8L-+c zTE_hdoN>-C*Do=C3@+~lKY^=xFK{3K6zt(X*7ht-&032S=V##Zy8k)c^RE6RW8ELW z0ITOd@Jp~-V*Cp1wVv-uzlN*nXYSh6tWk2Xm*>7+diLre+HYcbA$Q z9_FskUubIPE;d*1)qex$x_AvN&pQ4N&b|6|usrwbe}KJLJ4RdL{S&O_{xGgQ@!kOI ztIfFb)cs#zW19P0^d9D}{w7V$+{NX7P|w`&g0q%)z;fq$kN$01uJQkXuO+@d+H!5a z56-ojoV~Esvq$IgLZ{6t#?1@QIOmh=XP&9KeVO+b@XXPU@6vTV-z#>&N3kc>6obSW_JAAog{X0!dgV&;0cdY+zUoD@h z%Yu#Py}7(UFNdxz=X-gu|E6Cb&&Ef-GT6UOqn>fA zfQ_5`kX*maI|6K6?Wy~!aP|1C1~!Iso10u8{k?A20B5iJcL?N(wH7$n?V4bDuG^1* zy>1<&E%DX{t2vi(<%zcrSYK_%mFK!$7i>(g+x6)^yl&Okqp5k_ip%}4p1C&yXD$BC z1i3c&?Mx<#oITJmZ{Cu3wqA zpF{GI^sdYIWtn3eaNd(`5B7M6w+ZTUF3)OPdM@p1J9@{N4Q${kv28w zH=g5-lkq!&^$Fh@UcUbu4cABA^R)}Thv!S%7@C@K#n!;_kK^N?dAFTg74SokmHB_F4XSCDt{+^54c)>KB7%6`R-Z!hwlaV z_w(~ius2*E_4w=qE`L9NU%0=YpE3Kv^-<6Fwf(`y(q^p>r1!Aa+76(pS!=QD{WCG; z>T>_hz1&`&f0wUca{Cy*{;q2H!SF}m*+YlG^-=f!_%Jyf3eNlN+}n_65=clW1z@FLqAvtv%q}kEVd-e)bTqIvRW-y}I*f zyuE*GWhkz7N+&eGGY;!w+cYX>ENr9!>v4n!3*$@*maOGxT|W{&B76cW!<#K1=^onrq0tNUmS(KP&9!?4JKQP2K(SOL`CYyZSF^YMwu_-%nk`uWA17MCxdK z&%tkKt}XM+^>yDQj=gicUw%t7-~V72XD|6PfTd_2OVHd)i_kAgGnb|5^Ed3~fZa>s zFShVkTli}&{EZg=cESCD&O9{ZXCFKVHji?j{Q<82aD9$n0IPYgaj(vySIa(m39Od= z{ztId^4R8`hwr^`uSuVU+u&-kw}Y)+>>Y5m z*gL`2AogK!wb=dpn64%E`Qd8&R>K;9Q+olha~jvN+TEA_&DY^H_p1BS+~xWw_CjFS zlYP7}T>o6Fa((po`dg&7du@tyZ7zpxMViO*G_TEN=~tk6ZLUP0YjJVL4J)|+|4}9P z|39kaBU<>HE!_YAsM3F@l2W#_uxORDLD}u|oE5X&uYjtJ#Kpj_m#;yX^W?XA1k8M?O z8Fw|fT6wLm4j-uFYR}j;z}k%Kxsb=U7PyT25x81;t*#9psN-tS*mc0#jO#g-$F?50 zjJrNut-Mw@fDhDhwP);xU~R^AZ^&cY7+l8P1g_@aLe4#4Q}93?S9`{82G(X=_n17k zEy144T%%io)neZo>^X^j8?ajJ+k&la?Aw9WV&5KYjbh(H8!h*M9l_3NT*qq9Jzx~r zYasUkx&Dd06WBWC`q&w)f9?Tted0eF?D~_-7_ge-ccI^v=J;GYa(x`{ePV2F_Z}k7 zJ){%cYBY}#H18q){lQgf-a}TWPma4YPQAQ__drw6HM}QS%{+2$_ks_=)wE|#dxN!^ zlQ=np__qu}^SKep#gX>r3xIdbD?i&Yy)!f&eXT%9E@2=XGfwYtxeJI$(2MkKSB;W;%j#Wv++9^(%AzIGTELJq)at zTo=awaJag;8dGkr=5i$1=QVY6l_%Hr(MQreHl&&B2J{=%*xWXznfE62IqzM>(5K9E zJeqpWbRTGl%qtd_O)fz`^-q8ac3<}rr$j6DXd z>oj^4R*pYRPpr*!;~^f4M&TTccxZyY&;Ne%oR5-z|G=PqTho)9*mDexvA9uM-$o z*6-vNentyFx8N6oKUMSOd?MU=%KCl+O+EEJ39Od-nuA*Ea0*y0^*t4=R@V14_yF@5 zLwm-a4%TM9T#G!mGr?utv*2pwXZ_jmfjX}Cj6Dae&A8S?9@}}~GVb|sweqw60{B23 zS9`{O60FU*)>a7 z16MPSpLyGm`)9%C;2g%#$Mb#_{pV=zh3r+i{>kBLuzW{c8J_F_Y zINtsI#oF#(7iX`J!8VrWu?x+;z7zefH23;P>9g0r#JF;=U*E!SDfk`WJ8Pc3{bjgu z%f0;-H1*W&I%k^=*=l0&(?s*sIyw8hmUz*2WG|&6)^n2HMPx^gm?t%U2vj^@c zhI=6A^Z~eI%5(Z4ntIOZLtwR>Q)8%Qjo$&Q<(v+H)tcwD`Fnj2!_B9h=MgmZJS#m4 z9>B+WjN$oE(=T&91}^7%9In)pCxFp_Vl~3s%cH{wY|kJjXwS zn@>5<&(YMg_FsSp@NphvxOO%DGS@G`Bay_tK~C{~%6T_kY42Q`Y?rH1*W|UtqP= z-56@A#hYNY)cq~6TI#+F_}?`1$vocE-mdl3;vKkJYVj_306*t7rnOMhueBEa_;?&c zvli3oXV!QI{VbZbm`$Hryhog}7XN`eCOLYaeIHFdwID=8OD&9{mRigMR!c4Bg{zgd zXoH(i=CKy-XzHm&2Usn&=mZbo=e)+W7Hayn*5YJ*JWixpi{t1&QR5TnPoi0iQ|MER zVZst`?>U4`=Z1t*S;9sF=bARqp4@@OMum~c4Mez z?Ms5yvi7CGYUSFOhMP}0&oXH0S^Ki!tlb!{T}{8%wO>dqj|*t7{e1dQ(p>MS==039 z9AnkXd6!31&-zvXtGT}9vLZaWXg3!%*VLNJrDz@((UQx>HTHA=5}J8kM(=s>xnNCV zc^>5YtX1>my%O9QW!@{JsVDDMz-ndQBjCwfyLqeKL#)JJ72XHX=~fU6tR{N?U}1F?Ms>^il%7I}ULWo@v}Mvl?eTE8o?d0b9Q{XSh|KU1%uS-;QF zTQ5IzM-nIX(`S>KXN~K?jZxNbT{QL7Z#}SDS-Q@@SC zYN_90jNcfpZcOu+TfZZ)Z3=ds+FXk~_1g?Q9-Cvdwbt)yY#yJbrG8h{cryLxXx8uZ z^w!VM&h3el`suSn&9lbM;l?QIw*{Jd>bE6Wt*qZx@YGMc>ropy&rtoghPTGv22DNn z+ZL>r`b{L4?cnOhG=I7En}lsgu5+7Jibgz{k~FTzuR6% zvwk(u62=A z-%hiBchXzG)98;OPU@%6%$jG7Q{cuZ>(_&(p86dPRx9h*3s3#DyB@Wvw8WkUZjC)1 zO+EGN1FNNer;^JIxVkaTUvB+Q$2JS>I<>hLdFs~>J_nm)w3YRn5B+YM$Jc17-`8tw zjqajZzi-f6zx(JtJ7-z%W6{)IV<)!bz~+*F z19m)IAN4m`_lfi#{w|WX6KHDYF800LudvJ2t(AG7O!Mbb^J6;|Je*!#yX#al&u7t3 z1FJm+HZSXUI$Yfx&ZPG+2lX>(YR)M(hqG#~p7oy#Hg388^Wf?}e|e722dkNv^_82$ zdDuP)wtm{IwLE*{Q(*nIS$BE%#zkPSAIE4*J{N;q^SJ~~-F%$$Qm~qFom-yqmw{Wy iUyi1pJ^pF1n)N?}`g)G91gl>`Gp^@bE$7a6s{ao_@A5eS literal 39668 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 ZgI?lmiKllBTrJ)wZEIHdIAeL!{{Y0@@$diu delta 7866 zcmZvg37D2u702IUW>^$79E$*RL>Y5s(Nai2L5EaSzLR8E&!_rC%&n~7@15_=^Umb>+~@xP|8wrS_nv#+d+~d8Yv}{e zm3As^vq!rmDM_|V+9wZf=(J?lc5RdX?USTU`uwh4x|SwMGOn&+?6}%l6M;!v{?l5P zmQ;2rDNnmrc3)mumiDVWqA(PB+ML;AXV*?n%9FC>MELaDnYB|HCO@eauYu2)Q#--1 z+D~g?FHO#qAJAl5)52DkJl2Xo-abj+uI$uz3;OsuJ6|*R+4S_imMi z15jtpo;hs_TXZD{w(u%X4uaPd=MGI3|va$s)Pi}-yY?x3C))elh7Cvp0)#ZSG9>N**q2HHH$!i(E3;lkuJ_rwPoZ9Dw zvaGx))Z`G{9;Uavf;0`Ro;7({6244fW4D;MF z44z`Q41?cEJgYFc3$O}yH=I!e@HXb~@sxXkT186Vf(y=s21{N!C5Sq5Ze6@^B z4h3&x{Ej)F!_d^v$H!_N3|9LXytt?x4p+Cb7ZtT5z{bZ`NJcQ>L6B-%X5d2USLCsn z@5A3<^1BJ}bXk%d30M1qiSA$y_V&%sbTFoN+)yo zG1)QjVYHtVS9>g2?Twtzad3kTX7Ufvhl6J@sXqEUnVNnv*$8m!xkeTcHAHHT2alv3 zz%IM*g@54wu!c!!uFF%j_S{%! z`pIb8Vzx8E#!+u9uAmO=Dzv!*FO#!)L1#_r+;<8ZxY@TJtiQUs_=KFP#mc8BNmrjyQ8fc3i`C5p>#H6SXBn~YY?N8Fh&TtVW^0{`v(akOC+aHt z&jraM{yeZF)noVb!Op8Kc7IMfV@gHeb5YKrh35jW-s=0=2&zdxtgWazA0&&lT>#csJt8j7>R<`VVp>GJ5Ugfvz4wdItOLKod>vejrY&Z> z1Z*7j*xypHtI*~OtbY#8L8o1f_a(!eMeQ)rpT-+=|yvhZp&#g&DCJ1*#Re~kvk^BUIWfgb1mGZ z7pF;9I7{I=l$ga4daacl?{oaMt){J|c@>I{vjF>T zJ_xSHN!DPvjpkM8vEB}TiC#T+cL&&oxq8RQ_4BTEQYUbt@V^tB_m^K^p7Sph2gb{C z7Y+kx)=vI?z8g(jWau7n>-YIyH1&9&*MZgY@AG|d^&vDLp@QjL4{-vG@jl-VR(F^E z=;e|A4d8tGe*jnW6^r+IBV4`p`}_c!HscQU9|Q`qt4&}hbN4aXgK+hDpC1CNS&-rL zFq~k-X?mYGgX4YH-^tYUi@6>F_w)Soll>4;L%h$Ag4Ocx^N--_27QcP?m{-RpdW)h zZ*7m$%j1210_^+j7;V}6Jc8o0Xx^na2wn11jPX7{36@)wJ+S=@JceG~Nw(0dxhvo2 zr?PwbX_TjEaf|*OtoC$vFaH9xC3~NL36jN4`3zWJ^@#Xvb}#=5W#&Z?gg-`(B=xfmw(fAFIT^a25$C!39P?*`2H5`0XVn$ zk?R+`*_P$!Wt45S*v;?2YAW#&W{1xoH+G3Zl`({_af$};nJpTsPTRlAg4mKb0NXYfm zZoRyj<>M`sH)*l@x4~*}W%+mqv?Y7T-v!BHz3+kbRgZ}8XZ7*{%KNm4_#s%$);b>_ zp;<3}(fNA$2b#8+?Vn)dsK=f^2D=JvvFCpk>*W(PaI^2HVExs@_cO5hac=8Hu3zlt z^DIAKpnOh?-TWJ@_J#SW`wz(Vd)2*19KU1#J^Ce@wpjmv!H!gq_`ZqW<8cWMWL$~w zBrRrZ16C_ZXVg~|N?*WH2HJsLffeG)efrv?smHhu zV8^2G(>!oH1XC9;y%Avf&F?Li@NKxGBT;+7;2&BM)7wjxifEO1--$Zp*DY$lE-u12kdk0m|p4r)4LbG1B!RqU#R3(RByb#3-(uH zb))%UAhkh7X&q9$82CIdANYOr$C|+rY!}akmv?GdINm@Ij!r#i8 zEkm&wf$6Emc0}cO9Jo;&RZY{Uk?7iv1iM0gV%4M7UlZICwDqH?xy@texuQ~8HbJ^c)Zic0>{weZaM?3mcN_E!PRSN z@p+C18&R8g)2&3D09JQZqv++POxq-|nzo7ba%_cUImR;~Zb{>0dU<@ib>Ox5I7nOm zr?B@qZ6}~hrecdPx*ja|gW3yQ1GtV}-8rVvs|`+uHRWPDL^1zK&w#5(zGi}_(c+Vq z>!aPTa+Y6Zx^?!>)p|vZ&jHWQyqaE)v%z0=I&;yr#ccDk)0vMlj~1tM4p=RJI_JXG z^QW@_ZbWTyI_H7a<8l5G4mEf;Bp{vlf#R)CTPG~vGGFqHa3RcUX(A9AD{0UtHH=?#U zp=-hFaYFJqq3ghLLMy=X?1aq8^$@q@z?Jm!IH6VG4fr@{W%~Tw?uDB{aY8qN<#9r{ zfal?@ZnPWe)gr^Ug4OaTv<9voCv+QF&GD=0<&oUmJ0yF4Wp?kt31f41*Jjzh6J;$e zvU?X;EuY=H;p+M9-UBzHw#e?iVD-qZJhFQqII_DAEN{;4{Sf!z!1eU<$nFO4Ci3N= g_36m@`&K;w+RB9#7v(0nT3j32Hf>xze^tZ(00G$E%m4rY diff --git a/piet-gpu/shader/kernel4.comp b/piet-gpu/shader/kernel4.comp index 0183f33..0ba1ee9 100644 --- a/piet-gpu/shader/kernel4.comp +++ b/piet-gpu/shader/kernel4.comp @@ -91,7 +91,7 @@ void main() { return; } - uint tile_ix = gl_WorkGroupID.y * WIDTH_IN_TILES + gl_WorkGroupID.x; + uint tile_ix = gl_WorkGroupID.y * conf.width_in_tiles + gl_WorkGroupID.x; CmdRef cmd_ref = CmdRef(conf.ptcl_base + tile_ix * PTCL_INITIAL_ALLOC); uvec2 xy_uint = uvec2(gl_GlobalInvocationID.x, gl_LocalInvocationID.y + TILE_HEIGHT_PX * gl_WorkGroupID.y); diff --git a/piet-gpu/shader/kernel4.spv b/piet-gpu/shader/kernel4.spv index f7acb7f2dbd1f53f027ba12fb957b0ac1a1c7af5..9b4f1826c5a704cd7f08a634acbac394ba39880e 100644 GIT binary patch literal 34304 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 literal 34160 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 diff --git a/piet-gpu/shader/path_coarse.spv b/piet-gpu/shader/path_coarse.spv index 6b2e3b34d62b2467b387cb4203e62762acd9ea86..3e4392cf9c12347746b1ced7e5bb363ef54a9f07 100644 GIT binary patch literal 32368 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 B8Sel9 diff --git a/piet-gpu/shader/setup.h b/piet-gpu/shader/setup.h index 9a7d580..bcfa510 100644 --- a/piet-gpu/shader/setup.h +++ b/piet-gpu/shader/setup.h @@ -10,10 +10,6 @@ #define LG_WG_FACTOR 1 #define WG_FACTOR (1<YUy`)XW39OioJ4dmlG96wj?s_9jU(iE-z^EhFXbfpy&@1B3m;Nm7@L`)cr&`v=yPNA^4G z@H(%y(o&pJUj+3Itg8$ar&YR&hqO>4S>H2K9`0Y$-P<$V4<&wlMyax;_}M`%h4BbI zMgARExw3BRvUb$raQIR|~9itCcTTujg4;80&xuT550Gj8Zvn`JCl zKCYX3(($^+uU_xf?+`dJyblWO|U&aiVL--T!{FXO9| zB?^oPSOxwoOVA58Sp&lYa*rVjJOp;ZM=_j#D)vb<=g()UpJI2x7gl^Or1O*l*_>a}LM9FY}wr z*k<(auu*eLAxS5SdSjyKfnb~yMGpe2MbU%7{8fvZ)S|{%)B^gW=v46cxuS=__ir@a zUvwG{ow3vDV6`YZ1I%Bws7Wnqj72S=KZ+g-{vlWNFnAQrZ}jjKht4Q^1o&`96rBm? zuUgck7B$AA7SJC>XMt_Gxjecf;cDTZ4YoVsZ-u9d5ikerP9mTUt``2Iz!nYv(Qvgc zu9x46xnPT$*tz-_^X>2ha4f?&#SOT4Iq~U4^5YRK9>wOt-OW}KczNc-jZu%71z;Bx z`~ieCZF7w>}S zi(d)vB#-*|CFcEK4$#z5l5a|z;1+Ba{T=JA&Oo&7qS|w)=n$^kzNCC z!m8`YN^D4_kXPC9=8pL3jB#>zd~rC#4#A&Q*@x#*2E*oPS{j81$mMsAFSTG1W_f06kf0n7CrjrJJWxz5{; zmAA8;N%$TIACGlTs?#>bnQEiWPl0XolZ@Ei(_r=3-7{b{Ke`rs0<0DtdsZJK-?8W5 z>YvBU_B=#!WtOA@R*Rx9fV~qI*a4Qi=ohgbpVpt2m$9!feDuGX`L&VjHLy9xIp_a6 z#8t-|@CMi*b#JTuC5Fi@CXQrpf?aIzx4690mUiN-kGdFK?3KF{$idN8_szO46s*YFMN+q-|Pz0g)uHez~3 zl4O#RNo8{8qnfJhjUEmyl>SbwfwtieWX!pRjo?&lA!JAFb zWG7^D>ACEuGsk3z=^WTWXp-gcT6m%2w!Xc)2GnxNy!1@2zGeZQ?m|>9*^r*k)wgdd z2FLMYid{Bic)D7irGu$jNt3Qf1#W4 z5ZH=U3@gev6gB+^(vvl{bw^Olm_xl!u&3b->A9Mp@^**D7jm_BrKOKDn*h#HxuKw0MFU>^2B!*YX9e8YV6QcNJu#*R$0(Uou z$hRd^;l`*(%rvkI3O*g~1|w$%Ja3SWBgH~9!4}gQJDCMmcVXUdxkWw3>%d=P-zUEk zdp%sOAN&jPv%x;U6R+to@kHv z@1Ul`uTRu!2A6JR*#-oQUnm~`ZQvG?mSN-gTfpjPiwkH4TS(m_UXJx~G5T(2EKk>r zug%{9DxL05cj0~@fL)+3^%l6gyV{EN zaZ~D@3^g|;{xiuGFxvP_JA4$!d6HV$UlX<~{c1ve{xQ@pM!Z?u!A7b(RX5hhsr2n& zs5zB5&hK%sjrf2qxZEDNnyJ^P=w{Sgvm- z+H+uY%^SqZn`rz9e22iZv4tF+9#iyG8^`=S*keAzh~2#aR*&7i2v+ke>tu()YH?!6 z!2dq6m(bKdOS1XG%l0xvabvN_QLtJ}`U==P;RMIQau@w7*7j-rUvdI_lHsHO^`c)J zwNkJ({^9ih4T!6bH{eaMLF(RC`D+Y|JDE6&y#;o$!QTd3Joaxmckh4~vp_d{ n%1?&7QjA;a4xC6Eh2I627Jd(|*1(8UQ7b)_6GLB29;*5q<>FRR diff --git a/piet-gpu/src/lib.rs b/piet-gpu/src/lib.rs index c1ab974..c0bf0d7 100644 --- a/piet-gpu/src/lib.rs +++ b/piet-gpu/src/lib.rs @@ -222,8 +222,8 @@ impl Renderer { let state_buf = session.create_buffer(1 * 1024 * 1024, dev)?; let image_dev = session.create_image2d(WIDTH as u32, HEIGHT as u32, dev)?; - let mut config_buf_host = session.create_buffer(7*4, host)?; - let config_buf_dev = session.create_buffer(7*4, dev)?; + let mut config_buf_host = session.create_buffer(9*4, host)?; + let config_buf_dev = session.create_buffer(9*4, dev)?; // TODO: constants const PATH_SIZE: usize = 12; @@ -241,7 +241,7 @@ impl Renderer { alloc += (n_pathseg * PATHSEG_SIZE + 3) & !3; let anno_base = alloc; alloc += (n_paths * ANNO_SIZE + 3) & !3; - config_buf_host.write(&[n_paths as u32, n_pathseg as u32, tile_base as u32, bin_base as u32, ptcl_base as u32, pathseg_base as u32, anno_base as u32])?; + config_buf_host.write(&[n_paths as u32, n_pathseg as u32, WIDTH_IN_TILES as u32, HEIGHT_IN_TILES as u32, tile_base as u32, bin_base as u32, ptcl_base as u32, pathseg_base as u32, anno_base as u32])?; let mut memory_buf_host = session.create_buffer(2*4, host)?; let memory_buf_dev = session.create_buffer(128 * 1024 * 1024, dev)?;