From b2a2c1a917ae31f95f7c675e05aa5632cd56a6f8 Mon Sep 17 00:00:00 2001 From: Glenn Watson Date: Wed, 11 Oct 2017 15:30:40 +1000 Subject: [PATCH] If a stacking context is isolated, disable subpixel AA on it. This is a workaround / hack for #1839, until we properly support subpixel AA on transparent surfaces. It extends the set of conditions that disable subpixel AA on a stacking context. Fixes #1839. --- webrender/src/frame_builder.rs | 2 +- webrender/src/tiling.rs | 8 ++++++++ wrench/reftests/text/isolated-text.png | Bin 0 -> 6737 bytes wrench/reftests/text/isolated-text.yaml | 14 ++++++++++++++ wrench/reftests/text/reftest.list | 2 ++ wrench/src/yaml_helper.rs | 3 +++ 6 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 wrench/reftests/text/isolated-text.png create mode 100644 wrench/reftests/text/isolated-text.yaml diff --git a/webrender/src/frame_builder.rs b/webrender/src/frame_builder.rs index b9a30de858..48e9a85161 100644 --- a/webrender/src/frame_builder.rs +++ b/webrender/src/frame_builder.rs @@ -1153,7 +1153,7 @@ impl FrameBuilder { // we handle subpixel blending. if let Some(sc_index) = self.stacking_context_stack.last() { let stacking_context = &self.stacking_context_store[sc_index.0]; - if stacking_context.composite_ops.count() > 0 { + if !stacking_context.allow_subpixel_aa { render_mode = FontRenderMode::Alpha; } } diff --git a/webrender/src/tiling.rs b/webrender/src/tiling.rs index 0453951d07..2a1813493c 100644 --- a/webrender/src/tiling.rs +++ b/webrender/src/tiling.rs @@ -1601,6 +1601,11 @@ pub struct StackingContext { /// Current stacking context visibility of backface. pub is_backface_visible: bool, + + /// Allow subpixel AA for text runs on this stacking context. + /// This is a temporary hack while we don't support subpixel AA + /// on transparent stacking contexts. + pub allow_subpixel_aa: bool, } impl StackingContext { @@ -1618,6 +1623,8 @@ impl StackingContext { TransformStyle::Flat => ContextIsolation::None, TransformStyle::Preserve3D => ContextIsolation::Items, }; + let allow_subpixel_aa = composite_ops.count() == 0 && + isolation == ContextIsolation::None; StackingContext { pipeline_id, reference_frame_offset, @@ -1630,6 +1637,7 @@ impl StackingContext { is_pipeline_root, is_visible: false, is_backface_visible, + allow_subpixel_aa, } } diff --git a/wrench/reftests/text/isolated-text.png b/wrench/reftests/text/isolated-text.png new file mode 100644 index 0000000000000000000000000000000000000000..7b310e78dcb2ec25cfa7797615b58bbdfe19c72f GIT binary patch literal 6737 zcmcIpWmHsM+de4LNJ&eVAQGa4NQ0yxEl78Rqyhs-HzJ~ROE*%3fHVRU(%mH?4bH&u z?s=Yfee3)C{rFe|%z|@f?S1d-zT!R+FI43T@o4ZM2qIKekkx>o8^z!~KMof7N!k?E z0e)e+Nh@mMfG=Mhi*N{{!BLcz(t4A&m+qsbHF?_8IyAO80WT#n*@-$iS-M{xaf7s2Ys|HGxi-0D||or=S5T4zR9 zR?I8JX^_&Fz={gqeAV>GIB^6H5&ct_kN4(3nfJsp2?|o&*C{0)-|vp04UdVDb8z5J zNlmrRgXBUiIX!06zI=?c`|Mu-Jxaa#ovH-vH!qbxeOjgml zaox;E@TiQz=sEr^#Us&fMW*DU($YM=8Y>bg%3oYu-2G@xQP0B0(UC3YnT(^OWA)s% zB9oX{IyAgBk}Fp$>b0N7r%Fgj_)u~4?j3S+T=+txTfykggvk%o{#+x=T>aOtTE!RF z$6DIj>er~N5OFsTk6QSpVzv1z*r{S})7JJtFI~{ufoR64f0pP;NU54ue}6v-3CTM$ z4pj(ZSIdZYoULOL6{T%#Z0zmr{eJoPI9rQL-Ow;5DT!)rV`IiJw$W{~{pU|Y`-##j zWHWWXz!Yk?XE0s#^)(9i#@pL$u?5!q;|GcMAm2a&QO_8|)@|5`OgSwX$;Qvruvhg? zQbk%TqiPaefw%CZf3vZ(n;ouny+Qrm92p)C&^3mU%gM=YjmQX&P{jv_hUOF&;y_Ew z%OhRC_~w&8d?1Cs?@re|N9{TnrR^n|-X%iPv5-$^6z zuSY?yuICfH(`_J$|0Uerw&0YK`(?m*iSBA!5Vo-U7V*l;ipoTj*B|=9G?AON`Z3+z z&rY^SvERLWmn7&&<9CwFKs{boQ6aCXNd{$=m*2LlrQu4%lL;l@FI1N8?eCY7lEMHm zS=!hL11hO$G)ASvfhTd-r;Gt;4tR?T2k10VrZaCwsG$EiEljz{G@(@AcI= z6tLV8hTqoxF?M}@UD$J%s;{qaX@5WV;J`&C{mHmlKygt~Ta|f_%kjo@^iC4kpG&`a zBMdE_?akWQ+jlIr1ug&n&85%ba~?l6R5yV-Q7;+q?dy}4le_iw=~H5W98S&rm%B2| z(x#?NEr{Ru$HvA?z6W675E6C;9*yzO4I77`N5EiE0$Qgw8EU}tX+ zjvRstD=NbD%P7`%O7Fg(jNPM?c+!zpG1JfSN?-qddV0)#-SVuK7J9I!i@!tuv6YpT zstGaq`Ro>!me~LtG%;8~*hJl6>9^kQW*1O(ZfU5izw7SqR)u{9^*{f!hz((4VoDZi z(R_?L?WwC1oNIy6Dt#fvz`%e4+%^Z7$BHy@2nafrd7D|4tc%P|90{tQIl1{2Eb2}m zVjuI5CvO`0bmQ71q)QDIljV2Cusyyt&Nq6W79Sj))H%+UI(c0jn9fvN;_uDY4;8AE zjQ{FOyk8_AN6$`a-q_SM3Sdt-!^*~%Tq^2&;S%Kinb$b~{d?jB4>2(@ThOC9NXhd+ zcuC3q@ySU|2Zz#;=H_qTw!ntQrlu5ln@>KdH%3L_ml?M%@W7-j-Y!cU8q$S?g^@ut z!Y+*S4XAO)Lx=elAp`CM%0cPDz=Xh^!eBX93{N^~4Jaq~I}7po!_`@z#%eX*f}; zXKr%7p`fC|3O#a|;`6?|sFF&4fV!CXTEsn*mOVL}b;frD4JfDG3d~XOg+c$rn9+pFN};qfH|pYj(_30u_VUunjJ zqobT32^?flWK7JLuU{W2J%7$dL_{Q25JkzWw2#kxoDhf#=Cc`Q%*Aa>!S(A1CBzH> z9IWDhxyrEJe7=xdS;?0@e>^1NJSLwi=t$ZZcAHL#lauqS`?dxi9v(CF==F*$8V49F zWZJKgy%`b3kIxDu6ah7mKq*f=xE!Y{-z~t-4QU?ReSASrOKX2Z-PP6Ao;Oya%j>-y zLTS?#Nq&ctQoh;ylr(U&6?Mw1e#P0ryA7#nl(5DbS04 zy6-pjyF>$a1gJsUY_{InSV=)4YrX%ork2)6m-(Kaura$@^;t2WGaS$5KY!GsC?4c| z{CI~(#5M0A`FP`JO;pB&NfZylFC#wQ^r$5!CPtdz?@|yEL7&5^{8jMEYMcax#nx;+ zZ!-$9qqF1CPo)qcHPP!h_{ZUpjvw^nhLOlh@MD;18M+_WQi4w6+0W%a>>RoFj& z{tP7P?CGI(?0BK4rwE!HGk}zoGb-7C7!4>`MtSB=_~xaPlCQdmeFy_BeH zM8a0na$KUtmFs*5C=_`g#xS5i!oK6sc)ZkhGrP2*AxVpi90QFNO=aaMsV2+*Pt+%INwV5X z3_q&G64{WW^<)sbGlN{qbd*O%Mx+_-9USiT(M$NL0LMWdsHLbFAvFsW508L=6*@T? zRnv5Hs~LaTZ`oSMUi`#ejpRc@!t=UXEuJvCesT$iQ*BQ8T&sWPx8`PCD27@fl#7dt zU?xMsNf?|f_4v1RH5=cuoYkj)GaJn$tfsk#L8-e%ghi?F z!owH*uVHxj__=v`tm+SUM5Bs^9Bpk$(z4C7#1_{3?={Rm(;hG*SwXtV@ zAodV%d-aP+Lc+Mv?F!+sj9BT4!i8>OVkSK@0_ALLYZGKE)<6{AC)3tcYX~Pu5WR}v zzkgp@LHOwCNTu!p7Z<5t{!Fd?=YQ%sm{vGr*5ld*I7>T{$JW-iJc6Jg&Dg5T4ZU0sc z8lI{$cbp*`o#1~@8dMrTo3^NUNM~Fp7cU?+HMKM`ABv7J zqIy*(GPEjv6L;TwvAl>l+Vb>NP*oLdR8Y!(VY1vFBKU*3pt(0VZ2b%gOUnRCTIZYyp6&ub_hbVq&_)tIq15#I4xB7E^)X$3_^+Gk{DW`#i z>l*NIx~&Lu@AG}fF;(FI0Hw>hx>i>f=CYhcD{8naDkubiUV20mQ;FRW3x_`e>W*O( zXNZ{UXQ1RYau_{}KBKx>C72ucvaxA&ZU+Z&{oI8@)hqd*Qq`r1NfCb-tl4nC;KjY@ zx>P3SkBN!Ph|`_k!NKlD)R|D~J{>J>RJy3w3i3~@yom`T1u%7mh4*A-Ws~M_$aCMs zzWwN}VLhU%#uc_ZLJ1hDJsA3`MqKYSUu~;h9=o(;QnCZuCnqQ82E<*CGgfv<8I^X% z%&~zOp5xj9TztqF8Hj3>v=Lr98Uj1{fyO z96o2e5x{+c9pav*rlepZ1%&i4_96^>)>Olq%|DdEp@7y_33k=A@U*nMcZFTPn^>Lz z#UB3k>xQ$lGXNRY+>jB9iiTz;!n1qIoB%rHS74}e^(ttbB!PQ|HXg>C)yJj;0r~TI z6|MzVU0X}emDpG8>EYqg;ITsyaOP-x(n?NBqM9il1Avg5l_fdlDZ}NqG0+C;6L-2Z znG1*0&v-Flh_C)h@(mEoo;AOf`5#Gf2>DYik2VZFBZJru9Yc z)eAae+zOxV)w_PWU6A43=g^FC6KjeUpD_~+q@R@@S4r{l@1molRd-Sm>_b${o&;;L z=;B24$OeN`hd#kbFHBu4%F1p*fXf(UEncuw_;j;!!nc4ekX2Q^4G=amHiqfte&XVYEtb?Z z!zRxMXy5>0V-ye|qvSD=w70(xj8%MUY7{8iDv)WRzXE}|Rl3G1X~HDQ$;lTWV3JT% zM}S(I0BwKS4wCSr7mI*9z5rZU0bs#HEg0lp-@CoI_67@)vCy#(NXlvlk%X+78M7a-HvQ}p zP*BXLlHy{5ZheL;jtVoE;AY{QMn*;rKIc4UW@ZOr5|`N}T~)Mj!qQCEwMd58Bkd4r z48UGvWe znNHMZhR^L>`8Ywit}Y^1tUIe@3yqN9TwP9dmdDlH`A5gc9Uxa?K%$n-FXRltR{-^`I zDg``K+o*(_!Z^B30FJ=q0A#^u4zqQHUnmR1VuvRt zu#An3W##2(PmdkjdV1t9>Wi|{KYiM`qo!7xU9u8p(2|mtMgS7VBOxIce*O`g$xrr^ z<;$m&#@NFxEIkdcSA(m86P3z-Az7wlK3#43%&*>dl->9Erw}w#?_Z6@>8&&(7uM9& zbg*{l)rzDG$Km~U5ICJ_*)+qjPIa@f^7Ef5(R}^(iML(quiGbD-UF?veyg_#M;&w! zsq5)QL`M@Ce0xIzn6s-lo`r;z^afZBIAJDUULqi@P{8-^l1!%K9GslEz?GtB2HkNC zalyfu=)naW8{5Th&Cm-CjX*FR0l8%L*B9lf8fzkUl_bVp@`6`YZ`XQB06FJ+{aFZ) zi^Cp9u?mTc)02~vi*I4IT4`m2@{JsP1;`{gS8K;7h z5?ftQ(cHkwYB8zw!rr{FRA7EZ$QjFE@uHsJS;`6e$k^JD?}#0$BR>3bB> zQ72W^2`(YNdp8=KgekBG_jq_HGRhgmyzg+RWpvtCG;e&I4NK0sk3K!bn5NpYnm>Y! z;(>nf+?)aCty@fBe|~;`_qe#)-`&I>o|}sXx<_+0!*4Y}Rch2svol%I!;$G52(AXe zkSWq)=H*p;8T`oS%%R3dcSchUh-X4lQh2k^Io|yyFeB5h@%Z;JMdDXPUAwfD6_Rz= zqRBLn(tr;JHXNU@OR_e3?&UDagyL|px?gG*X??XBVfMZ_$e#AuinZLk*xcDs_P<6h zDwgSJ4rPdi>}+puV`Ww>=C4NRp;Kz?@$Ln%V)xkCx|YJ#?1v@jatjN4E$HT}Y(bOq z>y?XQSZ@FN;<=6QwrQ6NuLsPtzP3gj@4w>FYg^RyL{Cp|?av=)jYZTIaugIv_Q$L`kI(F% zTKmahGS?@l2YS`Pz*-*o%V(-sM$z??pwm(joS0;9s!B%K=*@rSPnz&;a9RO!s;qk?xIZzB14i0R9SQ{s&P#|G|_z$9tFQtVW z+ejDvkPliekCef@4;w_aHjp3qtq1Qev-!?r{RE;7@_7ZJj#Y;6>l>hXfN$sm(5kff zK^o+<*yKe7W=>sT&%ZqoAy#x;d5SPc9*PWorNT{f6j;{Eii;LAbv=c&;1v$CMOX+`}7{F7?r>T>+&+dX2 z18H6k82)mj=Ew{&ADWN#wY9i^IDgkYF-JdI$oFBIE%pzsl2uZ|^FG;n2YQL+$rBnd z)UmO#33!$Zq7DYw-|N%g+6_%jERP@8mULPEb0hvzCMua{mErmVTSG$wcyqJrIpCqt zVq{>D7R2_?$9GdN$tG@VC@CpbI?f8Nt*>W;00G9qpq-P1Uo(UJZaMof@}Gwsn_*M=3MsDqW<@NLGb_jt8C&wSBAb;5?23b5uv7Oq^kcPmwvdu$v6INo)vyw37!!_ NigK#5< { make_rotation(transform_origin, args[0].parse().unwrap(), 0.0, 1.0, 0.0) } + "perspective" if args.len() == 1 => { + LayoutTransform::create_perspective(args[0].parse().unwrap()) + } _ => { println!("unknown function {}", function); break;