blob: e858ac929c2596b4e01551fc0449a6b0f5c8db14 [file]
static constexpr char SKSL_MINIFIED_sksl_graphite_vert[] =
"$pure float curve_type_using_inf_support(float4 a){return isinf(a.z)?2.:float"
"(isinf(a.w));}$pure bool $k(float a){return a!=0.;}$pure bool $l(float a){return"
" a==2.;}$pure float $m(float2 a,float2 b,float2 c,float2 d,float2x2 e){float2"
" f=e*(fma(-2..xx,b,c)+a);float2 g=e*(fma(-2..xx,c,d)+b);return max(dot(f,f)"
",dot(g,g));}$pure float $n(float2 a,float2 b,float2 c,float2 d,float2x2 e){"
"float f=$m(a,b,c,d,e);return max(ceil(sqrt(3.*sqrt(f))),1.);}$pure float $o"
"(float2 a,float2 b,float2 c,float2 d,float2x2 e){float f=$m(a,b,c,d,e);return"
" ceil(log2(max(9.*f,1.))*.25);}$pure float $p(float2 a,float2 b,float2 c,float"
" d){float2 e=(min(min(a,b),c)+max(max(a,b),c))*.5;a-=e;b-=e;c-=e;float f=sqrt"
"(max(max(dot(a,a),dot(b,b)),dot(c,c)));float2 g=fma((-2.*d).xx,b,a)+c;float"
" h=abs(fma(-2.,d,2.));float i=max(0.,fma(f,4.,-1.));float j=length(g)*4.+i*"
"h;float k=4.*min(d,1.);return j/k;}$pure float $q(float2 a,float2 b,float2 c"
",float d){float e=$p(a,b,c,d);return max(ceil(sqrt(e)),1.);}$pure float $r("
"float2 a,float2 b,float2 c,float d){float e=$p(a,b,c,d);return ceil(log2(max"
"(e,1.))*.5);}$pure float2 $s(float2 c,float2 d){float2 e=c-d;if(e==0..xx)return"
" 0..xx;else{float f=1./max(abs(e.x),abs(e.y));return normalize(f*e);}}$pure"
" float $t(float2 c,float2 d){return clamp(dot(c,d),-1.,1.);}$pure float $u("
"float a,float b){float c=fma(a,.5,.5);return(c*b)*b>=1.?inversesqrt(c):sqrt"
"(c);}$pure float $v(float a){return.5/acos(max(1.-.25/a,-1.));}$pure float $w"
"(float c,float d,float e){return fma(d-c,e,c);}$pure float2 $w(float2 c,float2"
" d,float e){return fma(d-c,e.xx,c);}$pure float4 $w(float4 c,float4 d,float4"
" e){return fma(d-c,e,c);}$pure float2 tessellate_filled_curve(float2x2 a,float"
" b,float c,float4 d,float4 e,float f){float2 g;if($l(f))g=b!=0.?d.zw:(c!=0."
"?e.xy:d.xy);else{float2 h=d.xy;float2 i=d.zw;float2 j=e.xy;float2 k=e.zw;float"
" l=-1.;float m;if($k(f)){l=k.x;m=$r(a*h,a*i,a*j,l);i*=l;k=j;}else m=$o(h,i,"
"j,k,a);if(b>m){c=floor(ldexp(c,int(m-b)));b=m;}float n=floor(.5+ldexp(c,int"
"(5.-b)));if(0.<n&&n<32.){float o=n*.03125;float2 p=mix(h,i,o);float2 q=mix("
"i,j,o);float2 r=mix(j,k,o);float2 s=mix(p,q,o);float2 t=mix(q,r,o);float2 x"
"=mix(s,t,o);float y=mix(1.,l,o);float z=(l+1.)-y;float A=mix(y,z,o);g=l<0.?"
"x:s/A;}else g=n==0.?h:k;}return g;}$pure float4 tessellate_stroked_curve(float"
" a,float b,float2x2 c,float2 d,float e,float4 f,float4 g,float2 h,float2 i,"
"float j){float2 k=f.xy;float2 l=f.zw;float2 m=g.xy;float2 n=g.zw;float o=-1."
";if($k(j)){o=n.x;n=m;}float p;if(o<0.)if(k==l&&m==n)p=1.;else p=$n(k,l,m,n,"
"c);else if(k==l||l==m)p=1.;else p=$q(c*k,c*l,c*m,o);float q=i.x;float r=i.y"
";bool s=i.x==0.;float t;if(s){t=$v(.5);q=.5;}else t=$v(e*i.x);if(s){k=c*k;l"
"=c*l;m=c*m;n=c*n;h=c*h;}float2 u=$s(k==l?(l==m?n:m):l,k);float2 v=$s(n,n==m"
"?(m==l?k:l):m);float2 x=$s(k,h);if(u==0..xx){r=0.;if(o<0.){u=float2(1.,0.);"
"v=float2(-1.,0.);}else{o=-1.;u=x;v=x;if(x==0..xx){m=(n=k+q*float2(1.,0.));k"
"=(l=k-q*float2(1.,0.));x=(u=(v=float2(1.,0.)));}else m=(n=k+q*x);}}float y;"
"if(r>=0.)y=sign(r)+3.;else{float z=acos($t(x,u));float A=max(ceil(z*t),1.);"
"y=A+2.;y=min(y,b-2.);}float z=cross_length_2d(m-k,n-l);float A=abs(a)-y;if("
"A<0.){v=u;if(h!=k)u=x;z=cross_length_2d(u,v);}float B=$t(u,v);float C=acos("
"B);if(z<0.)C=-C;float D;float E=sign(a);if(A<0.){D=y-2.;p=1.;n=(m=(l=k));A+="
"D+1.;if(A<0.)A=0.;else{bool G=abs(z)*inversesqrt(dot(u,u)*dot(v,v))<.01;if("
"!G||dot(u,v)<0.)E=z<0.?min(E,0.):max(E,0.);}}else{float F=(b-y)-1.;D=max(ceil"
"(abs(C)*t),1.);D=min(D,F);p=min(p,(F-D)+1.);}float F=C/D;float G=(p+D)-1.;bool"
" H=A>=G;if(A>G)E=0.;if(abs(a)==2.&&r>0.)E*=$u(B,r);float2 I;float2 J;if(A!="
"0.&&!H){float2 K;float2 L;float2 M=l-k;float2 N=n-k;if(o>=0.){M*=o;L=.5*N-M"
";K=(o-1.)*N;l*=o;}else{float2 O=m-l;L=O-M;K=fma(-3..xx,O,N);}float2 O=L*(p*"
"2.);float2 P=M*(p*p);float Q=0.;float R=min(p-1.,A);float S=-abs(F);float U"
"=(1.+A)*abs(F);for(float V=32.;V>=1.;V*=.5){float W=Q+V;if(W<=R){float2 X=fma"
"(W.xx,K,O);X=fma(W.xx,X,P);float Y=dot(normalize(X),u);float Z=fma(W,S,U);Z"
"=min(Z,3.14159274);if(Y>=cos(Z))Q=W;}}float V=Q/p;float W=A-Q;float X=acos("
"clamp(u.x,-1.,1.));X=u.y>=0.?X:-X;float Y=fma(W,F,X);I=float2(cos(Y),sin(Y)"
");float2 Z=float2(-I.y,I.x);float aa=dot(Z,K);float ac=dot(Z,L);float ad=dot"
"(Z,M);float ae=max(ac*ac-aa*ad,0.);float af=sqrt(ae);if(ac>0.)af=-af;af-=ac"
";float ag=(-.5*af)*aa;float2 ah=abs(fma(af,af,ag))<abs(fma(aa,ad,ag))?float2"
"(af,aa):float2(ad,af);float ai=W!=0.&&ah.y!=0.?saturate(ah.x/ah.y):0.;float"
" aj=max(V,ai);float2 ak=$w(k,l,aj);float2 al=$w(l,m,aj);float2 am=$w(m,n,aj"
");float2 an=$w(ak,al,aj);float2 ao=$w(al,am,aj);float2 ap=$w(an,ao,aj);float"
" aq=$w(1.,o,aj);float ar=(o+1.)-aq;float as=$w(aq,ar,aj);if(aj!=ai)I=o>=0.?"
"$s(al*aq,ak*ar):$s(ao,an);J=o>=0.?an/as:ap;}else{I=A==0.?u:v;J=A==0.?k:n;}float2"
" K=float2(I.y,-I.x);J+=K*(q*E);if(s)return float4(J+d,inverse(c)*J);else return"
" float4(c*J+d,J);}float4 analytic_rrect_vertex_fn(uint a,float2 b,float2 c,"
"float d,float e,float4 f,float4 g,float4 h,float4 i,float j,float3x3 k,out float4"
" l,out float4 m,out float4 n,out float4 o,out float2 p,out float2 q,out float2"
" r){float w=1.;uint x=(a+1)%4;bool y=i.z<=0.;bool z=false;float4 A;float4 B"
";float4 C=1..xxxx;bool D=false;if(f.x<-1.){D=f.y>0.;A=D?h.xxzz:h.xzzx;B=h.yyww"
";if(f.y<0.){n=-f-2.;o=g;p=float2(0.,1.);}else{n=g;o=n;p=f.zw;w=p.y<0.?.414213568"
":sign(p.y);}}else if(any(greaterThan(f,0..xxxx))){A=h.xzzx;B=h.yyww;n=f;o=g"
";p=float2(0.,-1.);}else{A=g;B=h;C=-f;n=0..xxxx;o=0..xxxx;p=float2(0.,1.);z="
"true;}float2 E=float2(n[a],o[a]);if(a%2!=0)E=E.yx;float2 F=1..xx;if(all(greaterThan"
"(E,0..xx))){w=.414213568;F=E.yx;}float4 G=A-A.wxyz;float4 H=B-B.wxyz;float4"
" I=1./max(abs(G),max(abs(H),1..xxxx));G*=I;H*=I;float4 J=G*G+H*H;float4 K=sign"
"(J);float4 L=0..xxxx;float2 M=p.x.xx;if(any(equal(K,0..xxxx)))if(all(equal("
"K,0..xxxx))){G=float4(0.,1.,0.,-1.);H=float4(-1.,0.,1.,0.);J=1..xxxx;}else{"
"bool N=((K.x+K.y)+K.z)+K.w>2.5;float4 O=N?G.yzwx:H.yzwx;float4 P=N?H.yzwx:-"
"G.yzwx;G=mix(O,G,K);H=mix(P,H,K);J=mix(J.yzwx,J,K);C=mix(C.yzwx,C,K);if(!N&&"
"w==0.){M*=float2(K[a],K[x]);L=(K-1.)*p.x;p.y=1.;w=1.;}}float4 N=inversesqrt"
"(J);G*=N;H*=N;float2 O=-float2(G[x],H[x]);float2 P=float2(G[a],H[a]);float2"
" Q;bool R=false;if(d<0.)if(i.w<0.||e*i.z!=0.)R=true;else{float S=i.w;float2"
" T=E+(y?-M:M);if(w==1.||any(lessThanEqual(T,S.xx)))Q=T-S;else Q=T*b-S*c;}else"
" Q=(E+M)*(b+w*b.yx);if(R)Q=i.xy;else{Q-=E;Q=(float2(A[a],B[a])+O*Q.x)+P*Q.y"
";}m=(H*(A-Q.x)-G*(B-Q.y))+L;float3x3 S=inverse(k);float3 T=k*float3(Q,1.);l"
"=float4(S[0].xy-S[0].z*Q,S[1].xy-S[1].z*Q);if(z){float4 U=-H*(S[0].x-S[0].z"
"*A)+G*(S[0].y-S[0].z*B);float4 V=-H*(S[1].x-S[1].z*A)+G*(S[1].y-S[1].z*B);m"
"*=inversesqrt(U*U+V*V);m+=(1.-C)*abs(T.z);bool W=C==1..xxxx&&dot(abs(G*G.yzwx"
"+H*H.yzwx),1..xxxx)<.00024;if(W){float2 X=m.xy+m.zw;q.y=1.+min(min(X.x,X.y)"
",abs(T.z));}else q.y=1.+abs(T.z);}if(d>0.&&T.z>0.){float2x2 U=float2x2(l);float2"
" V=float2(C[a],C[x])*c;float2 W=((F.x*V.x)*perp(-P))*U;float2 X=((F.y*V.y)*"
"perp(O))*U;bool Y=all(notEqual(V,0..xx));if(w==1.&&Y){W=normalize(W);X=normalize"
"(X);if(dot(W,X)<-.8){float Z=sign(cross_length_2d(W,X));W=Z*perp(W);X=-Z*perp"
"(X);}}T.xy+=T.z*normalize(W+X);if(z)m-=T.z;else q.y=-T.z;}else if(!z)q.y=0."
";q.x=float(e!=0.?1.:(y?-1.:0.));if(D)l=float4(float2x2(H.x,-H.y,-G.x,G.y)*float2x2"
"(l));r=Q;return float4(T.xy,T.z*j,T.z);}float4 per_edge_aa_quad_vertex_fn(uint"
" a,float2 b,float4 c,float4 d,float4 e,float f,float3x3 g,out float4 h,out float2"
" i){uint k=(a+1)%4;float4 l=d-d.wxyz;float4 m=e-e.wxyz;float4 n=1./max(abs("
"l),max(abs(m),1..xxxx));l*=n;m*=n;float4 o=l*l+m*m;float4 p=sign(o);if(any("
"equal(p,0..xxxx)))if(all(equal(p,0..xxxx))){l=float4(0.,1.,0.,-1.);m=float4"
"(-1.,0.,1.,0.);o=1..xxxx;}else{bool q=((p.x+p.y)+p.z)+p.w>2.5;float4 r=q?l."
"yzwx:m.yzwx;float4 s=q?m.yzwx:-l.yzwx;l=mix(r,l,p);m=mix(s,m,p);o=mix(o.yzwx"
",o,p);c=mix(c.yzwx,c,p);}float4 q=inversesqrt(o);l*=q;m*=q;float2 r=-float2"
"(l[k],m[k]);float2 s=float2(l[a],m[a]);float2 t=float2(d[a],e[a]);h=m*(d-t."
"x)-l*(e-t.y);float3x3 u=inverse(g);float3 v=g*float3(t,1.);float4 w=-m*(u[0"
"].x-u[0].z*d)+l*(u[0].y-u[0].z*e);float4 x=-m*(u[1].x-u[1].z*d)+l*(u[1].y-u"
"[1].z*e);h*=inversesqrt(w*w+x*x);h+=(1.5-c)*abs(v.z);if(any(notEqual(b,0..xx"
"))&&v.z>0.){float2x2 y=float2x2(u[0].xy-u[0].z*t,u[1].xy-u[1].z*t);float2 z"
"=float2(c[a],c[k])*b;float2 A=(z.x*perp(-s))*y;float2 B=(z.y*perp(r))*y;bool"
" C=all(notEqual(z,0..xx));if(C){A=normalize(A);B=normalize(B);if(dot(A,B)<-"
".8){float D=sign(cross_length_2d(A,B));A=D*perp(A);B=-D*perp(B);}}v.xy+=v.z"
"*normalize(A+B);h-=v.z;}i=t;return float4(v.xy,v.z*f,v.z);}float4 circular_arc_vertex_fn"
"(float3 a,float4 b,float3 c,float3 d,float3 e,float3 f,float4 g,float h,float"
" i,float3x3 j,out float4 k,out float3 l,out float3 m,out float3 n,out float"
" o,out float4 p,out float2 q){float2 r=b.xy;float2 s=r;float t=min(dot(a.xy"
",d.xy)+d.z,0.);a.xy-=d.xy*t;float u=length(a.xy);if(a.z>0.)s+=a.xy*b.z;else"
" s+=a.xy*b.w;float3 v=j*float3(s,1.);float3 w=j*float3(r,1.);float2 x=v.xy-"
"w.xy;if(x!=0..xx){x=normalize(x);v.xy+=a.z*x;if(a.z>0.)x*=u;else x*=u*c.y;}"
"k=float4(x,c.xy);if(c.z>0.){l=e;m=f;n=0..xxx;}else{l=e;m=float3(0.,0.,1.);n"
"=f;}o=h;p=g;q=s;return float4(v.xy,i,1.);}float4 text_vertex_fn(float2 a,sampler2D"
" b,float4x4 c,float4x4 d,float2 e,float2 f,float2 g,float h,float i,out float2"
" j,out float2 k,out float2 l){a*=e;float2 m=h*a+g;float4 n=c*float4(m,0.,1."
");l=(inverse(d)*n).xy;j=a+f;k=j/float2(textureSize(b));return float4(n.xy,i"
"*n.w,n.w);}float4 coverage_mask_vertex_fn(float2 a,float3x3 b,float4 c,float4"
" d,float2 e,float f,float3x3 g,out float4 h,out float2 i,out half j,out float2"
" k){i=mix(c.xy,c.zw,a);float3 l=b*float3(i+e,1.);float3 m=inverse(g)*l;k=m."
"xy/m.z;if(all(lessThanEqual(d.xy,d.zw))){h=d;j=0.;}else{h=d.zwxy;j=1.;}return"
" float4(l.xy,f*l.z,l.z);}float4 cover_bounds_vertex_fn(float2 a,float4 b,float"
" c,float3x3 d,out float2 e){if(all(lessThanEqual(b.xy,b.zw))){a=mix(b.xy,b."
"zw,a);float3 f=d*float3(a,1.);e=a;return float4(f.xy,c*f.z,f.z);}else{a=mix"
"(b.zw,b.xy,a);float3 f=inverse(d)*float3(a,1.);float g=1./f.z;e=f.xy*g;return"
" float4(a*g,c*g,g);}}";