From bd450ef46157e2b38a8abb2b074331da1bdbb203 Mon Sep 17 00:00:00 2001 From: Elias Naur Date: Sun, 29 Nov 2020 16:51:35 +0100 Subject: [PATCH 1/2] piet-gpu-types: remove unused Segment and SegChunk types Signed-off-by: Elias Naur --- piet-gpu-types/src/ptcl.rs | 19 ---------- piet-gpu/shader/ptcl.h | 74 -------------------------------------- 2 files changed, 93 deletions(-) diff --git a/piet-gpu-types/src/ptcl.rs b/piet-gpu-types/src/ptcl.rs index 86e4572..00da859 100644 --- a/piet-gpu-types/src/ptcl.rs +++ b/piet-gpu-types/src/ptcl.rs @@ -67,24 +67,5 @@ piet_gpu! { SolidMask(CmdSolidMask), Jump(CmdJump), } - - // TODO: strongly consider using f16. If so, these would be - // relative to the tile. We're doing f32 for now to minimize - // divergence from piet-metal originals. - struct Segment { - start: [f32; 2], - end: [f32; 2], - - // This is used for fills only, but we're including it in - // the general structure for simplicity. - y_edge: f32, - } - - struct SegChunk { - n: u32, - next: Ref, - // Actually a reference to a variable-sized slice. - segs: Ref, - } } } diff --git a/piet-gpu/shader/ptcl.h b/piet-gpu/shader/ptcl.h index db8d47b..d80d24f 100644 --- a/piet-gpu/shader/ptcl.h +++ b/piet-gpu/shader/ptcl.h @@ -48,14 +48,6 @@ struct CmdRef { uint offset; }; -struct SegmentRef { - uint offset; -}; - -struct SegChunkRef { - uint offset; -}; - struct CmdCircle { vec2 center; float radius; @@ -195,30 +187,6 @@ CmdRef Cmd_index(CmdRef ref, uint index) { return CmdRef(ref.offset + index * Cmd_size); } -struct Segment { - vec2 start; - vec2 end; - float y_edge; -}; - -#define Segment_size 20 - -SegmentRef Segment_index(SegmentRef ref, uint index) { - return SegmentRef(ref.offset + index * Segment_size); -} - -struct SegChunk { - uint n; - SegChunkRef next; - SegmentRef segs; -}; - -#define SegChunk_size 12 - -SegChunkRef SegChunk_index(SegChunkRef ref, uint index) { - return SegChunkRef(ref.offset + index * SegChunk_size); -} - CmdCircle CmdCircle_read(CmdCircleRef ref) { uint ix = ref.offset >> 2; uint raw0 = ptcl[ix + 0]; @@ -514,45 +482,3 @@ void Cmd_Jump_write(CmdRef ref, CmdJump s) { CmdJump_write(CmdJumpRef(ref.offset + 4), s); } -Segment Segment_read(SegmentRef ref) { - uint ix = ref.offset >> 2; - uint raw0 = ptcl[ix + 0]; - uint raw1 = ptcl[ix + 1]; - uint raw2 = ptcl[ix + 2]; - uint raw3 = ptcl[ix + 3]; - uint raw4 = ptcl[ix + 4]; - Segment s; - s.start = vec2(uintBitsToFloat(raw0), uintBitsToFloat(raw1)); - s.end = vec2(uintBitsToFloat(raw2), uintBitsToFloat(raw3)); - s.y_edge = uintBitsToFloat(raw4); - return s; -} - -void Segment_write(SegmentRef ref, Segment s) { - uint ix = ref.offset >> 2; - ptcl[ix + 0] = floatBitsToUint(s.start.x); - ptcl[ix + 1] = floatBitsToUint(s.start.y); - ptcl[ix + 2] = floatBitsToUint(s.end.x); - ptcl[ix + 3] = floatBitsToUint(s.end.y); - ptcl[ix + 4] = floatBitsToUint(s.y_edge); -} - -SegChunk SegChunk_read(SegChunkRef ref) { - uint ix = ref.offset >> 2; - uint raw0 = ptcl[ix + 0]; - uint raw1 = ptcl[ix + 1]; - uint raw2 = ptcl[ix + 2]; - SegChunk s; - s.n = raw0; - s.next = SegChunkRef(raw1); - s.segs = SegmentRef(raw2); - return s; -} - -void SegChunk_write(SegChunkRef ref, SegChunk s) { - uint ix = ref.offset >> 2; - ptcl[ix + 0] = s.n; - ptcl[ix + 1] = s.next.offset; - ptcl[ix + 2] = s.segs.offset; -} - From feeb459fa18ca1de79cb9095cf9f3d8dbd3e2575 Mon Sep 17 00:00:00 2001 From: Elias Naur Date: Sun, 29 Nov 2020 16:59:58 +0100 Subject: [PATCH 2/2] remove FillMask and FillMaskInv Obsoleted by BeginClip/EndClip. Updates #36 Signed-off-by: Elias Naur --- piet-gpu-types/src/annotated.rs | 6 --- piet-gpu-types/src/ptcl.rs | 7 ---- piet-gpu-types/src/scene.rs | 5 --- piet-gpu/shader/annotated.h | 61 +--------------------------- piet-gpu/shader/backdrop.comp | 2 - piet-gpu/shader/backdrop.spv | Bin 7264 -> 7248 bytes piet-gpu/shader/binning.comp | 2 - piet-gpu/shader/binning.spv | Bin 9872 -> 9856 bytes piet-gpu/shader/coarse.comp | 27 +------------ piet-gpu/shader/coarse.spv | Bin 42212 -> 36012 bytes piet-gpu/shader/elements.comp | 19 --------- piet-gpu/shader/elements.spv | Bin 62548 -> 58292 bytes piet-gpu/shader/kernel4.comp | 14 ------- piet-gpu/shader/kernel4.spv | Bin 34772 -> 31784 bytes piet-gpu/shader/ptcl.h | 69 ++++---------------------------- piet-gpu/shader/scene.h | 36 +---------------- piet-gpu/shader/tile_alloc.comp | 2 - piet-gpu/shader/tile_alloc.spv | Bin 8948 -> 8916 bytes 18 files changed, 12 insertions(+), 238 deletions(-) diff --git a/piet-gpu-types/src/annotated.rs b/piet-gpu-types/src/annotated.rs index cedbd3f..304726c 100644 --- a/piet-gpu-types/src/annotated.rs +++ b/piet-gpu-types/src/annotated.rs @@ -9,10 +9,6 @@ piet_gpu! { bbox: [f32; 4], rgba_color: u32, } - struct AnnoFillMask { - bbox: [f32; 4], - mask: f32, - } struct AnnoStroke { bbox: [f32; 4], rgba_color: u32, @@ -27,8 +23,6 @@ piet_gpu! { Nop, Stroke(AnnoStroke), Fill(AnnoFill), - FillMask(AnnoFillMask), - FillMaskInv(AnnoFillMask), BeginClip(AnnoClip), EndClip(AnnoClip), } diff --git a/piet-gpu-types/src/ptcl.rs b/piet-gpu-types/src/ptcl.rs index 00da859..7e7d10c 100644 --- a/piet-gpu-types/src/ptcl.rs +++ b/piet-gpu-types/src/ptcl.rs @@ -25,11 +25,6 @@ piet_gpu! { backdrop: i32, rgba_color: u32, } - struct CmdFillMask { - tile_ref: u32, - backdrop: i32, - mask: f32, - } struct CmdBeginClip { tile_ref: u32, backdrop: i32, @@ -57,8 +52,6 @@ piet_gpu! { Circle(CmdCircle), Line(CmdLine), Fill(CmdFill), - FillMask(CmdFillMask), - FillMaskInv(CmdFillMask), BeginClip(CmdBeginClip), BeginSolidClip(CmdBeginSolidClip), EndClip(CmdEndClip), diff --git a/piet-gpu-types/src/scene.rs b/piet-gpu-types/src/scene.rs index 855b500..e0adf4e 100644 --- a/piet-gpu-types/src/scene.rs +++ b/piet-gpu-types/src/scene.rs @@ -25,9 +25,6 @@ piet_gpu! { struct Fill { rgba_color: u32, } - struct FillMask { - mask: f32, - } struct Stroke { rgba_color: u32, } @@ -59,8 +56,6 @@ piet_gpu! { Fill(Fill), SetLineWidth(SetLineWidth), Transform(Transform), - FillMask(FillMask), - FillMaskInv(FillMask), BeginClip(Clip), EndClip(Clip), } diff --git a/piet-gpu/shader/annotated.h b/piet-gpu/shader/annotated.h index 677e473..2adacb1 100644 --- a/piet-gpu/shader/annotated.h +++ b/piet-gpu/shader/annotated.h @@ -4,10 +4,6 @@ struct AnnoFillRef { uint offset; }; -struct AnnoFillMaskRef { - uint offset; -}; - struct AnnoStrokeRef { uint offset; }; @@ -31,17 +27,6 @@ AnnoFillRef AnnoFill_index(AnnoFillRef ref, uint index) { return AnnoFillRef(ref.offset + index * AnnoFill_size); } -struct AnnoFillMask { - vec4 bbox; - float mask; -}; - -#define AnnoFillMask_size 20 - -AnnoFillMaskRef AnnoFillMask_index(AnnoFillMaskRef ref, uint index) { - return AnnoFillMaskRef(ref.offset + index * AnnoFillMask_size); -} - struct AnnoStroke { vec4 bbox; uint rgba_color; @@ -67,10 +52,8 @@ AnnoClipRef AnnoClip_index(AnnoClipRef ref, uint index) { #define Annotated_Nop 0 #define Annotated_Stroke 1 #define Annotated_Fill 2 -#define Annotated_FillMask 3 -#define Annotated_FillMaskInv 4 -#define Annotated_BeginClip 5 -#define Annotated_EndClip 6 +#define Annotated_BeginClip 3 +#define Annotated_EndClip 4 #define Annotated_size 28 AnnotatedRef Annotated_index(AnnotatedRef ref, uint index) { @@ -99,28 +82,6 @@ void AnnoFill_write(AnnoFillRef ref, AnnoFill s) { annotated[ix + 4] = s.rgba_color; } -AnnoFillMask AnnoFillMask_read(AnnoFillMaskRef ref) { - uint ix = ref.offset >> 2; - uint raw0 = annotated[ix + 0]; - uint raw1 = annotated[ix + 1]; - uint raw2 = annotated[ix + 2]; - uint raw3 = annotated[ix + 3]; - uint raw4 = annotated[ix + 4]; - AnnoFillMask s; - s.bbox = vec4(uintBitsToFloat(raw0), uintBitsToFloat(raw1), uintBitsToFloat(raw2), uintBitsToFloat(raw3)); - s.mask = uintBitsToFloat(raw4); - return s; -} - -void AnnoFillMask_write(AnnoFillMaskRef ref, AnnoFillMask s) { - uint ix = ref.offset >> 2; - annotated[ix + 0] = floatBitsToUint(s.bbox.x); - annotated[ix + 1] = floatBitsToUint(s.bbox.y); - annotated[ix + 2] = floatBitsToUint(s.bbox.z); - annotated[ix + 3] = floatBitsToUint(s.bbox.w); - annotated[ix + 4] = floatBitsToUint(s.mask); -} - AnnoStroke AnnoStroke_read(AnnoStrokeRef ref) { uint ix = ref.offset >> 2; uint raw0 = annotated[ix + 0]; @@ -177,14 +138,6 @@ AnnoFill Annotated_Fill_read(AnnotatedRef ref) { return AnnoFill_read(AnnoFillRef(ref.offset + 4)); } -AnnoFillMask Annotated_FillMask_read(AnnotatedRef ref) { - return AnnoFillMask_read(AnnoFillMaskRef(ref.offset + 4)); -} - -AnnoFillMask Annotated_FillMaskInv_read(AnnotatedRef ref) { - return AnnoFillMask_read(AnnoFillMaskRef(ref.offset + 4)); -} - AnnoClip Annotated_BeginClip_read(AnnotatedRef ref) { return AnnoClip_read(AnnoClipRef(ref.offset + 4)); } @@ -207,16 +160,6 @@ void Annotated_Fill_write(AnnotatedRef ref, AnnoFill s) { AnnoFill_write(AnnoFillRef(ref.offset + 4), s); } -void Annotated_FillMask_write(AnnotatedRef ref, AnnoFillMask s) { - annotated[ref.offset >> 2] = Annotated_FillMask; - AnnoFillMask_write(AnnoFillMaskRef(ref.offset + 4), s); -} - -void Annotated_FillMaskInv_write(AnnotatedRef ref, AnnoFillMask s) { - annotated[ref.offset >> 2] = Annotated_FillMaskInv; - AnnoFillMask_write(AnnoFillMaskRef(ref.offset + 4), s); -} - void Annotated_BeginClip_write(AnnotatedRef ref, AnnoClip s) { annotated[ref.offset >> 2] = Annotated_BeginClip; AnnoClip_write(AnnoClipRef(ref.offset + 4), s); diff --git a/piet-gpu/shader/backdrop.comp b/piet-gpu/shader/backdrop.comp index 6fa9f9f..9e235c9 100644 --- a/piet-gpu/shader/backdrop.comp +++ b/piet-gpu/shader/backdrop.comp @@ -55,8 +55,6 @@ void main() { uint tag = Annotated_tag(ref); switch (tag) { case Annotated_Fill: - case Annotated_FillMask: - case Annotated_FillMaskInv: case Annotated_BeginClip: PathRef path_ref = PathRef(element_ix * Path_size); Path path = Path_read(path_ref); diff --git a/piet-gpu/shader/backdrop.spv b/piet-gpu/shader/backdrop.spv index ee4dda8b01420e16d40b3ec7f84eb3bcdddcfc4d..54bf7368785403a703313344a287918e052694c9 100644 GIT binary patch delta 18 acmaE0alv9k7Y`%*+u*w)OF)^MVK)N0qqkBApigX delta 46 scmZqho#4A6OMsi7VK)Njzo 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
r24;sK@70uzQ%gUIx}r zJ>xD1t9yTs-xY9k)aE^63u%-=2g26uI~QaK=0xHs9#T0a}UJc2mQU#8^O-!ebid`z3P*2 z^~`k>Sj~Lg%fzwIJGPs_&h7r{?;JS?w3X+8=Yn&Y^DSV{6LY?e-ou>LZ>6c3vp9Qo z2iS8U*Tr36wL59fc{{yY{OsJ1wR>rKM!g?w4YcL+_5rZEG4H0AC+34- z=LvrZT%KbO!_`h?jq!N|UY=u*!u3=4dz0_?9s|EbZ+z_;`zf$F{JDMy{AsYhbI93q zK)W?gz3kOmgdl*OC9GaSO#EJ6-uDt0Ct!8QzfLcY?G3PbgqEu$s1Cf#rGD{0-P=O?B-T;-{9me+yRg zT>KN*!}sv&a!#S@cl5Yazo+N_)gSned+|ql_gZ`6{TW==_b>X=)Z_D4uzL94z~z{? z;eL**$LAfedicBG8%QoS`#W48_4xb)d<{N1H{OHmr=D^D1gn>ybCuW3(mS{9rZX8CRZo3xM_2W?XsR;VlSuU9Ha| z3!!Vv^TEPkwcIln1$%g3)wT$26`JRbIPr&r|5Na| zzt>&~>{!S7w-WN~+sfbz@o|hc@1fSvdRe#3zbd#j$JNl(J!kzJ=heY#$!Se+a`JC7 z@seBaK<^mTtDaW zp5t1**CghK*vk9EMsV*b>hakatRB7zxE!-7+!Ti@Ex_eH zWlOkz>ba+E1y(QbDO%sAjZMiS(23E^` zVHDWI`+~OJX$R8WdvW5A2LGq{d!lR0Ikgvf4_fXEa(%S>-DV89^}et-ntFWp0UIOt z1-U+{(O7V5zAsp=Z5->^AM99bv>&}ZH9r7+89t8D=6UY=U8`%({0D*6Vn9#yOu{zp`FFrzPfz*vk9jNpSC_>hU=ltR8*}xEymT z+>6vhI)RuecSzvW*a5lX> z_tJB~-b>ZBdyT1?htFr{gY$fL9$4;J|ILRB!2Z3sx?|6!SIhnBBJh8@KV6KjE&F>3 z_(EFlPjY><`!|Z0fsO6+gn4<*UJh438z1=<;7e)h8FwYvxVdM^^~=0hfsLy@b-x;} z9-mKujge;=xjy>OX56*loZHuc<%xAYIM>*9V0q5<8^B&;j?tEQH-goyr*Y+p_erq6 z+KemDxSPSr<0i0N+iuKpE7&zS?iPA^^0*CrGd_;dmUZ6_&b5>I??6+}HFqait-R*$ zf@hrb$@MF*IiF+XpQZOcZ!dqY=Fii&zC%e4_Y$l8owEC!kCt~b+SKBIf9)Us0NmfN z%g<;YgzKXopNGKZ@7FyHKdTt?2wWfa{EqaaU}I_X`{JkQJ^T#U_83jg^@?5ZQ^b_3 z%b%{fz5I!q>t}AWiT4D)+2_Z>a<4~Rswctc(5wHOZ=qY${5KZ-F0}~F!+&pLEAsQ- z5?Pq${EO1(-&c49JgnePwD8Zj@RwTnS6leE3+~@nzgF{{XOF?nqx>xV6kPoUa`&_9 zahh7LL332gemx6T%X#@3u$s?P-i!RZqtDX(w{@IHd&Yhatj%-PwaR0A0bIs?5w13e zmbhO4C$9F4{UTVKajls=wl9IpxUay~UZy4Pm%)jvJ!8KD)@EF5FOThO;4om34e+0I6vHuvX7W+@Y)*$vbz-qDo6zp1J{~1_qEN8g?cFxaf&S~5?Xxcq5e?k9C z+G{k=7ju{EpV+?wyPllKzXt37CQX02KKgt8{f4IfeXciguFb{4OVK=*pm}W$r(crh zwYfBXuFc(i_umiKo;CgfY+lwRb@(G#J=f}= zz-phSSqF1gi~pa&YPnYb0#+-p)xW}@p*fHCjQtx}n{i#cJhpehW!!h+YUQ>1cX;Az z&)9!}wHenM%47Q{xQzQRxLSFw{u`dS+B5cjur}km7xLJANm$062d-9LtMkGWS9`{` zfwdXeJ(b7S0WRZq!qv)abr?KxwP&pVwvjgDdTz*LTL4_fT?nq`zXz6kz{23f)t<47 zfVCOdb4(uFaIkxsYjknATI@@J-ILgtgsa8A6xiCvzBF7d_GQ45 zI#zq`0n3BE20RbVU9Nv(uK>1Axjt3|>z{joT%Y)_1a|$&Wo59M<9*IumFDoO?(owiRd|%h9}tEK9#U&3nj-^vQ8e#;LoedamKM!D{A_y&VD1 z-fGX-b->!pNt~R_cNLn)O0?v(GT59}rT4xzoPJ}*mG_zT;rf+1Zh)qq`^JV~HP36m z=PX9Q5nSE9GNwG=RW<=HRnKLv^5p9Mc@3J!YP96KI@ny-q&L_3v@x#Cbu+krWv-i} zsVCPhz-r0W@ms>x&DEH4b2XQ(!Hd*$nX5dxu7$on&0`&!xvovWZjDFKuSYZQ4d}D) z+Y&>cGSBVM)U%h{gB_dimpf>qnRnK*BiwP?th@Q_1Xed!adO=d+a@%RjcCbrW3c&c zN}tcRT^VOx!bcT+EO@_~XFVg~#wpjc8=88~ zcjVeLc3-eI_s?AAvF#65ORfii&EH)0m+PayH9D}iTR(B?wu0$8n#b7Jk2 zI48l?jN@nC=G6IQusJw~G4yfYPoY1R=DCn_Rjz+>I1TLj@^0yLu$tqyCH5I$$LBLp zu8-qApJ&x}&vkLm^&PP7O!L^0=DosrJJCGXccIU@ekS9}bN$>Feo?_M2VYV1oZDx? zja#1EXQQd7Zs&m2a&9}PTIz5fSS{!F`Czs3+`a&wb47c`UI^Caxnl0}*e(W_aW8?Z zmFM=Q@Wj=gv6q3h8P^)fW4jXUT<+U;touKIJ^0(TA3` zKM&5@jp5qW^vhhI1($Pu4z89x_PY5z&AGD2URy8JdiHn@TrG3I2+rKbbZ#~MGWQq2 z<=kI{tCf5F65P4VJ^m7!dggi=oVkqQTx$BY?(q@C@;H>{9v@79Sd9;%Kb+F=g$)f~KB5{wi24du$A~to>_Xwe0cN!D{6me*e=J(fz>ki_raOln9i-HUu)fai0v_+X5G8! zC)Bu`ej?4fA5EXS|A07U-Cu({rmV*g(bQA-*THJ3yD`*Kiywj2QuiN&)l&CWz(1jx zPv-HS_C~Fz7C(inr4~N}rxwPv7Hayn)}o(y9>>zG#bo-v8XrSHg=Q_L(x(TuXXLSh~;q_&9$FQe|n8i zr9Xq_+CNU8wZB80a_#TJ9aHA?cQo~^{U2bptlb!DS^IlnwXFT0V6}4X|AL!OInTe* z)U)>Y!CAX8T)Ucnt!qDrSRQB5T>F{yXVYBox%Byr|A4XT<-E95>RI1Bet6SdUvilj zo?Nt>i<)a{&E-NgkMn5B<@_4^xqku8ye^`5AABxYkXY`6T%Uz%p1j-O#whb{M^jJU z9bmOG?@oB~)^6TvUnf>#4}-VHo)1kudpJK>E$?&2Fn$5Jx-rdP?m4gzwuQm2Q=4m% z=jX4BfPFS{jJDSLU53r$Vp{5VNsawXy_9DCE~mF%e&#MioYYUBWow=_E($kBS--{5 z)KkCVV70P-i^Eet?XE}7IwbZI@YdK%qN%5TOM%r=zk?XRG+f=7<}bH? zi#+vP9()8g$7pM<-__VWuArrUSJt?j{wkXF`vkr9^Rsge;-r51tXcD{aRs{Z~cu~$V?PyJQ{tEGNNlFRCFbz_>p-1;4bZ7s0t z)aF{`so&aQpC25ft+jsFWAnI%mik>=V?R%?qglTj=&hfhx0?_r_0wn5nrDq8;KnHH zw+@bEXft*qbr@YGMc>rq>eme?DBTVrpCrk?t31XfG^CXvg=aCKvvzufxuV*3c# zb!u}h^3-oLa6dN3Xlt$C&DcC{q@{kJtnu#jH_@!$E%erJB>ncpN&WQMq2^iR=5S+_ z_1gkXJ@wlXtX9@Z#vBV71imByu?zu5L{8ms`J6 zupJ6^o!VTBJoP&aJPVs+w6)gnA#5J^(^9_&YCMAeL7Me@nBMxSjVI2qnp?l#f}aWR zE4cRlnx_Vb!=0n7?-6L~uBj8-$H2~=zkBY2>!bcI>+GiY@b{0j9Ys?!SFv+FkNs$H z5A99xZ^_!&li})fz|YYpfvuhE(v}>K0jv2=(K;UsR@2ut%k`a&Z3@^mX>^bZhZJGNxaOR$keL7st7|tV)?+mcMIe!MgYOZTGb#TqcgVkr!jA3on N{5`DH%|7SH{{h)l$M*mL literal 42212 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 diff --git a/piet-gpu/shader/elements.comp b/piet-gpu/shader/elements.comp index 7606554..568445b 100644 --- a/piet-gpu/shader/elements.comp +++ b/piet-gpu/shader/elements.comp @@ -129,8 +129,6 @@ State map_element(ElementRef ref) { c.pathseg_count = 1; break; case Element_Fill: - case Element_FillMask: - case Element_FillMaskInv: case Element_Stroke: case Element_BeginClip: c.flags = FLAG_RESET_BBOX; @@ -408,23 +406,6 @@ void main() { out_ref = AnnotatedRef((st.path_count - 1) * Annotated_size); Annotated_Fill_write(out_ref, anno_fill); break; - case Element_FillMask: - FillMask fill_mask = Element_FillMask_read(this_ref); - AnnoFillMask anno_fill_mask; - anno_fill_mask.mask = fill_mask.mask; - anno_fill_mask.bbox = st.bbox; - out_ref = AnnotatedRef((st.path_count - 1) * Annotated_size); - Annotated_FillMask_write(out_ref, anno_fill_mask); - break; - case Element_FillMaskInv: - fill_mask = Element_FillMaskInv_read(this_ref); - anno_fill_mask.mask = fill_mask.mask; - // The inverse fill conceptually takes up the entire screen. - // TODO: Tighten bounds to contain only affected paths. - anno_fill_mask.bbox = vec4(0, 0, 1e9, 1e9); - out_ref = AnnotatedRef((st.path_count - 1) * Annotated_size); - Annotated_FillMaskInv_write(out_ref, anno_fill_mask); - break; case Element_BeginClip: Clip begin_clip = Element_BeginClip_read(this_ref); AnnoClip anno_begin_clip = AnnoClip(begin_clip.bbox); diff --git a/piet-gpu/shader/elements.spv b/piet-gpu/shader/elements.spv index 73ff3f4b5b3b827ec48d85e8beee9758203ea656..28e3c30edfbb7f98f135c395bfbb18852e64d768 100644 GIT binary patch literal 58292 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 Y?^js>Y)^p35|6xOi5AHu`=%~R1#|+(Tuzuqg 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 diff --git a/piet-gpu/shader/kernel4.comp b/piet-gpu/shader/kernel4.comp index 6c98c4b..72ab396 100644 --- a/piet-gpu/shader/kernel4.comp +++ b/piet-gpu/shader/kernel4.comp @@ -155,20 +155,6 @@ void main() { rgb[k] = mix(rgb[k], fg_rgba.rgb, mask[k] * area[k] * fg_rgba.a); } break; - case Cmd_FillMask: - CmdFillMask fill_mask = Cmd_FillMask_read(cmd_ref); - area = computeArea(xy, fill_mask.backdrop, fill_mask.tile_ref); - for (uint k = 0; k < CHUNK; k++) { - mask[k] = mix(mask[k], fill_mask.mask, area[k]); - } - break; - case Cmd_FillMaskInv: - fill_mask = Cmd_FillMask_read(cmd_ref); - area = computeArea(xy, fill_mask.backdrop, fill_mask.tile_ref); - for (uint k = 0; k < CHUNK; k++) { - mask[k] = mix(mask[k], fill_mask.mask, 1.0 - area[k]); - } - break; case Cmd_BeginClip: case Cmd_BeginSolidClip: uint blend_slot = blend_sp % BLEND_STACK_SIZE; diff --git a/piet-gpu/shader/kernel4.spv b/piet-gpu/shader/kernel4.spv index 538e783526e6b89294d561a56016d15196b149da..808d7077de31636dd101bade005c49aba8df1c5a 100644 GIT binary patch literal 31784 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 dR|2c$d}~uH*U@U+lO4{{xlVXbb=V diff --git a/piet-gpu/shader/ptcl.h b/piet-gpu/shader/ptcl.h index d80d24f..0236183 100644 --- a/piet-gpu/shader/ptcl.h +++ b/piet-gpu/shader/ptcl.h @@ -16,10 +16,6 @@ struct CmdFillRef { uint offset; }; -struct CmdFillMaskRef { - uint offset; -}; - struct CmdBeginClipRef { uint offset; }; @@ -95,18 +91,6 @@ CmdFillRef CmdFill_index(CmdFillRef ref, uint index) { return CmdFillRef(ref.offset + index * CmdFill_size); } -struct CmdFillMask { - uint tile_ref; - int backdrop; - float mask; -}; - -#define CmdFillMask_size 12 - -CmdFillMaskRef CmdFillMask_index(CmdFillMaskRef ref, uint index) { - return CmdFillMaskRef(ref.offset + index * CmdFillMask_size); -} - struct CmdBeginClip { uint tile_ref; int backdrop; @@ -172,15 +156,13 @@ CmdJumpRef CmdJump_index(CmdJumpRef ref, uint index) { #define Cmd_Circle 1 #define Cmd_Line 2 #define Cmd_Fill 3 -#define Cmd_FillMask 4 -#define Cmd_FillMaskInv 5 -#define Cmd_BeginClip 6 -#define Cmd_BeginSolidClip 7 -#define Cmd_EndClip 8 -#define Cmd_Stroke 9 -#define Cmd_Solid 10 -#define Cmd_SolidMask 11 -#define Cmd_Jump 12 +#define Cmd_BeginClip 4 +#define Cmd_BeginSolidClip 5 +#define Cmd_EndClip 6 +#define Cmd_Stroke 7 +#define Cmd_Solid 8 +#define Cmd_SolidMask 9 +#define Cmd_Jump 10 #define Cmd_size 20 CmdRef Cmd_index(CmdRef ref, uint index) { @@ -266,25 +248,6 @@ void CmdFill_write(CmdFillRef ref, CmdFill s) { ptcl[ix + 2] = s.rgba_color; } -CmdFillMask CmdFillMask_read(CmdFillMaskRef ref) { - uint ix = ref.offset >> 2; - uint raw0 = ptcl[ix + 0]; - uint raw1 = ptcl[ix + 1]; - uint raw2 = ptcl[ix + 2]; - CmdFillMask s; - s.tile_ref = raw0; - s.backdrop = int(raw1); - s.mask = uintBitsToFloat(raw2); - return s; -} - -void CmdFillMask_write(CmdFillMaskRef ref, CmdFillMask s) { - uint ix = ref.offset >> 2; - ptcl[ix + 0] = s.tile_ref; - ptcl[ix + 1] = uint(s.backdrop); - ptcl[ix + 2] = floatBitsToUint(s.mask); -} - CmdBeginClip CmdBeginClip_read(CmdBeginClipRef ref) { uint ix = ref.offset >> 2; uint raw0 = ptcl[ix + 0]; @@ -382,14 +345,6 @@ CmdFill Cmd_Fill_read(CmdRef ref) { return CmdFill_read(CmdFillRef(ref.offset + 4)); } -CmdFillMask Cmd_FillMask_read(CmdRef ref) { - return CmdFillMask_read(CmdFillMaskRef(ref.offset + 4)); -} - -CmdFillMask Cmd_FillMaskInv_read(CmdRef ref) { - return CmdFillMask_read(CmdFillMaskRef(ref.offset + 4)); -} - CmdBeginClip Cmd_BeginClip_read(CmdRef ref) { return CmdBeginClip_read(CmdBeginClipRef(ref.offset + 4)); } @@ -437,16 +392,6 @@ void Cmd_Fill_write(CmdRef ref, CmdFill s) { CmdFill_write(CmdFillRef(ref.offset + 4), s); } -void Cmd_FillMask_write(CmdRef ref, CmdFillMask s) { - ptcl[ref.offset >> 2] = Cmd_FillMask; - CmdFillMask_write(CmdFillMaskRef(ref.offset + 4), s); -} - -void Cmd_FillMaskInv_write(CmdRef ref, CmdFillMask s) { - ptcl[ref.offset >> 2] = Cmd_FillMaskInv; - CmdFillMask_write(CmdFillMaskRef(ref.offset + 4), s); -} - void Cmd_BeginClip_write(CmdRef ref, CmdBeginClip s) { ptcl[ref.offset >> 2] = Cmd_BeginClip; CmdBeginClip_write(CmdBeginClipRef(ref.offset + 4), s); diff --git a/piet-gpu/shader/scene.h b/piet-gpu/shader/scene.h index 6558ad3..03a4884 100644 --- a/piet-gpu/shader/scene.h +++ b/piet-gpu/shader/scene.h @@ -16,10 +16,6 @@ struct FillRef { uint offset; }; -struct FillMaskRef { - uint offset; -}; - struct StrokeRef { uint offset; }; @@ -86,16 +82,6 @@ FillRef Fill_index(FillRef ref, uint index) { return FillRef(ref.offset + index * Fill_size); } -struct FillMask { - float mask; -}; - -#define FillMask_size 4 - -FillMaskRef FillMask_index(FillMaskRef ref, uint index) { - return FillMaskRef(ref.offset + index * FillMask_size); -} - struct Stroke { uint rgba_color; }; @@ -148,10 +134,8 @@ ClipRef Clip_index(ClipRef ref, uint index) { #define Element_Fill 8 #define Element_SetLineWidth 9 #define Element_Transform 10 -#define Element_FillMask 11 -#define Element_FillMaskInv 12 -#define Element_BeginClip 13 -#define Element_EndClip 14 +#define Element_BeginClip 11 +#define Element_EndClip 12 #define Element_size 36 ElementRef Element_index(ElementRef ref, uint index) { @@ -211,14 +195,6 @@ Fill Fill_read(FillRef ref) { return s; } -FillMask FillMask_read(FillMaskRef ref) { - uint ix = ref.offset >> 2; - uint raw0 = scene[ix + 0]; - FillMask s; - s.mask = uintBitsToFloat(raw0); - return s; -} - Stroke Stroke_read(StrokeRef ref) { uint ix = ref.offset >> 2; uint raw0 = scene[ix + 0]; @@ -304,14 +280,6 @@ Transform Element_Transform_read(ElementRef ref) { return Transform_read(TransformRef(ref.offset + 4)); } -FillMask Element_FillMask_read(ElementRef ref) { - return FillMask_read(FillMaskRef(ref.offset + 4)); -} - -FillMask Element_FillMaskInv_read(ElementRef ref) { - return FillMask_read(FillMaskRef(ref.offset + 4)); -} - Clip Element_BeginClip_read(ElementRef ref) { return Clip_read(ClipRef(ref.offset + 4)); } diff --git a/piet-gpu/shader/tile_alloc.comp b/piet-gpu/shader/tile_alloc.comp index de6e827..f8bbc0d 100644 --- a/piet-gpu/shader/tile_alloc.comp +++ b/piet-gpu/shader/tile_alloc.comp @@ -47,8 +47,6 @@ void main() { int x0 = 0, y0 = 0, x1 = 0, y1 = 0; switch (tag) { case Annotated_Fill: - case Annotated_FillMask: - case Annotated_FillMaskInv: case Annotated_Stroke: case Annotated_BeginClip: case Annotated_EndClip: diff --git a/piet-gpu/shader/tile_alloc.spv b/piet-gpu/shader/tile_alloc.spv index 93cdea6258378fa92ac0a87e231aa21e644e6d66..e901bad135fde888836ccb20256c400a5444927e 100644 GIT binary patch delta 2471 zcmZ{mO;24_6o&VKd!ZH)ky>i$mr?|!SQT4sD-~2~t+iGZ6&3LoQBf+U(5Q*YF~-D^ zlirbo{sA?O&7G+u<4^DhG;!v{iP3`f<9Tk+GN*&yWM#eYyFT{bYwvsE_sO3pJ6l`& z+f&NY#cGD#rIokmRu`8R=H{2rzPAdmrq)!+Qd(@{wlq{fU+tY8L8&b* zEzi%btk%w~l2uLn(3+(yXHPADXk{fGMSH(?rgpknT}j8T;nnoCHOs5DrD8q%Ox3&F zda~)pK-*}REi`7@>#g|}>e*`AM$f;2ZJ63F_&@jxrhcg4o6vb?0lc#-bLUp( z50!Wy`OYxnJK@eSxc!`AnNMBITher6qH`_l??~T~{R7s5eUFjY^sR-jG){MYP#IZ+ zUdE1Ne{%hQ;r*<00AuTz+GQH8*Sk0Mf&*IfTzIxs~bwdnXC^m2l*hcD(aTDH;n=#gdsks?( zEPgAvy!d8#dGTJji>nulr!85Yl7UZI-09y2w$T`qM0jfkD*KH_(Qzs3(^^sevit>$;5 zdAQGt=?%lxe1pI8CG}?ZfUP|U_Kln4zK8I}+;^;}zup_YhnO|i`jZ0B|3BnjgfD3x zo4ptAW{0pC#C>S$@rAh`Y@ND;cmVImK^Pmw)EtC3`s@cg&~H+H^_%w~f}*Fh(Lt~u z8yP!*J%ZUt9E}cvZ4__#VYr%;iZ?t4_qiC0y2E1ZaL!`>dMY?Z7j_XBb4|Bj6{nU(n{mJ&*MG7QLxcnfVKU9Ndq$h+uOfaew+4=`&zQdIBG( zI|){g(>)7T8z;}j{F|c|`OkqzvR6|2v3U8ppCVvUDi(SQ0I|p`G!Cwd4JMOLqHb;Ge yk@B5?C!KKP(ZO(1#E5Af{F-Qt%8<1RKUh!4K48_CdU|m zfpf(L7v8ENnz>W2j6cC2VB(!O#>6NEt3Jv$zS?>oz@wWYkDb!O__ z)t=I9W2ib>DxGc|Ypb_pYrJ2@MyRP@$6W0u_&>nV2H^j~TQT+hIX73$cuS6p^=?Mn zKs@T-BFA!mAPqq*Y(Wcb$D-gtFq2H1^8&;8BYFN#mR5(KhOak1@8~LJPSbQt4dI<- zkvqpC-&^4Q^&} zak%Tf)?HVimobmvFD}F1c%LgQ-`G`5?Q$xotM%V|da_{pak3nAiRzyfcp3g1e2R9> z1F<`1-UMA*@#csf*eKyOI#j`S(*H?q59ub%$9Q`wWz7V@wdNgQi+oM9OC)xJ)jV~# zA#cMhW^wV)=#%7X-iFvn7r3~QTjAFJk=n!Lc9*i0<^Tph%6ESo*!f<{7tjN?kh(Ly z9q;2}jBUi!T#PuH-vKT*?}Zne-wB_ie=-ow?*be6gytSaAJ{_bG5&tA<2M$~Hi6ZH zZw7m0ALn(pz}3w2n2f2N@El_G`WuaME3x8k2H?dzaW~vWnP&s}K&k%W#=h(xpc{|1 z41(1hd|Vl|;+64qV=woDZT&@lAos!5hA>*6ey^EvHBVcFvRm%SVSv`uN=E|vjKv2e zV)`gF1vbZAzrON_Jpp#i!Jh=16G#0NIP;th#C4no`=Y_4?B0Kd17LM`bP)eE_6vGk zS-Ckj>O+4Pd=c-W{N&4xZ9#hu?7PMedHxD}xn^a=!{9-@FA;1`B+gGCBRvXsq(`vW z-3ws#*xid@wMkNK=6{P?Y9&D1jmr#BTv$)N~QS1${iw#}_TRe{R zB-kAFDZ2UVS^$55@Al_qg1b^2tuOZVkG%;hmN*4hTPHjAuU6du@y6NyGj0C?KmF