From deb071cc2cc974dcc37a5fb46429cb18747178d2 Mon Sep 17 00:00:00 2001 From: Ondrej Stava Date: Thu, 13 Feb 2020 14:21:24 -0800 Subject: [PATCH 01/16] Fixing undefined behavior in basisu_etc.cpp The value inside the static cast can be negative. Casting a negative floating point value to an unsigned integer is an undefined behavior and we were running into issues when executing the code with an address sanitizer turned on. Not sure if this is the proper way to fix this but it seems to work ok. Either way, the undefined behavior should be fixed. --- basisu_etc.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/basisu_etc.cpp b/basisu_etc.cpp index 244f1d2..2a23afb 100644 --- a/basisu_etc.cpp +++ b/basisu_etc.cpp @@ -730,9 +730,9 @@ namespace basisu const float avg_delta_g_f = static_cast(delta_sum_g) / 8; const float avg_delta_b_f = static_cast(delta_sum_b) / 8; - const int br1 = clamp(static_cast((m_avg_color[0] - avg_delta_r_f) * m_limit / 255.0f + .5f), 0, m_limit); - const int bg1 = clamp(static_cast((m_avg_color[1] - avg_delta_g_f) * m_limit / 255.0f + .5f), 0, m_limit); - const int bb1 = clamp(static_cast((m_avg_color[2] - avg_delta_b_f) * m_limit / 255.0f + .5f), 0, m_limit); + const int br1 = clamp(static_cast((m_avg_color[0] - avg_delta_r_f) * m_limit / 255.0f + .5f), 0, m_limit); + const int bg1 = clamp(static_cast((m_avg_color[1] - avg_delta_g_f) * m_limit / 255.0f + .5f), 0, m_limit); + const int bb1 = clamp(static_cast((m_avg_color[2] - avg_delta_b_f) * m_limit / 255.0f + .5f), 0, m_limit); #if BASISU_DEBUG_ETC_ENCODER_DEEPER printf("Second refinement trial %u, avg_delta %f %f %f\n", i, avg_delta_r_f, avg_delta_g_f, avg_delta_b_f); From e5a4f1b92010078383e1134f321418e13e6fc9a0 Mon Sep 17 00:00:00 2001 From: Rich Geldreich Date: Wed, 18 Mar 2020 05:09:50 -0400 Subject: [PATCH 02/16] Update README.md --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 303595f..254569e 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # basis_universal -Basis Universal GPU Texture and Texture Video Compression Codec +Basis Universal Supercompressed GPU Texture Codec -Basis Universal is a ["supercompressed"](http://gamma.cs.unc.edu/GST/gst.pdf) compressed GPU texture and [compressed texture video](http://gamma.cs.unc.edu/MPTC/) compression system that outputs a highly compressed intermediate file format (.basis) that can be quickly transcoded to a [very wide variety](https://github.com/BinomialLLC/basis_universal/wiki/OpenGL-texture-format-enums-table) of GPU compressed and uncompressed pixel formats: ASTC 4x4 L/LA/RGB/RGBA, PVRTC1 4bpp RGB/RGBA, PVRTC2 RGB/RGBA, BC7 mode 6 RGB, BC7 mode 5 RGB/RGBA, BC1-5 RGB/RGBA/X/XY, ETC1 RGB, ETC2 RGBA, ATC RGB/RGBA, ETC2 EAC R11 and RG11, FXT1 RGB, and uncompressed raster image formats 8888/565/4444. +Basis Universal is a ["supercompressed"](http://gamma.cs.unc.edu/GST/gst.pdf) GPU texture compression system that outputs a highly compressed intermediate file format (.basis) that can be quickly transcoded to a [very wide variety](https://github.com/BinomialLLC/basis_universal/wiki/OpenGL-texture-format-enums-table) of GPU compressed and uncompressed pixel formats: ASTC 4x4 L/LA/RGB/RGBA, PVRTC1 4bpp RGB/RGBA, PVRTC2 RGB/RGBA, BC7 mode 6 RGB, BC7 mode 5 RGB/RGBA, BC1-5 RGB/RGBA/X/XY, ETC1 RGB, ETC2 RGBA, ATC RGB/RGBA, ETC2 EAC R11 and RG11, FXT1 RGB, and uncompressed raster image formats 8888/565/4444. Basis files support non-uniform texture arrays, so cubemaps, volume textures, texture arrays, mipmap levels, video sequences, or arbitrary texture "tiles" can be stored in a single file. The compressor is able to exploit color and pattern correlations across the entire file, so multiple images with mipmaps can be stored very efficiently in a single file. @@ -11,7 +11,7 @@ The transcoder has been fuzz tested using [zzuf](https://www.linux.com/news/fuzz So far, we've compiled the code using MSVS 2019, under Ubuntu x64 using cmake with either clang 3.8 or gcc 5.4, and emscripten 1.35 to asm.js. (Be sure to use this version or later of emcc, as earlier versions fail with internal errors/exceptions during compilation.) The compressor is multithreaded by default, but this can be disabled using the -no_multithreading command line option. The transcoder is currently single threaded. -A simple asm.js Texture Video demo is [here](http://binomial.biz/TextureVideoTest/). +Basis Universal supports "skip blocks" in compressed texture arrays, which makes it useful for basic compressed texture video applications. Note that Basis Universal is still at heart a GPU texture compression system, not a video codec, so bitrates will be larger than even MPEG1 (average .25-.5 bpp for ETC1S). ### Important Usage Notes From c0ac65d89bb15d6a82c5c3788780de4986588b76 Mon Sep 17 00:00:00 2001 From: Rich Geldreich Date: Wed, 18 Mar 2020 05:11:52 -0400 Subject: [PATCH 03/16] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 254569e..40c162f 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ The transcoder has been fuzz tested using [zzuf](https://www.linux.com/news/fuzz So far, we've compiled the code using MSVS 2019, under Ubuntu x64 using cmake with either clang 3.8 or gcc 5.4, and emscripten 1.35 to asm.js. (Be sure to use this version or later of emcc, as earlier versions fail with internal errors/exceptions during compilation.) The compressor is multithreaded by default, but this can be disabled using the -no_multithreading command line option. The transcoder is currently single threaded. -Basis Universal supports "skip blocks" in compressed texture arrays, which makes it useful for basic compressed texture video applications. Note that Basis Universal is still at heart a GPU texture compression system, not a video codec, so bitrates will be larger than even MPEG1 (average .25-.5 bpp for ETC1S). +Basis Universal supports "skip blocks" in compressed texture arrays, which makes it useful for basic compressed texture video applications. Note that Basis Universal is still at heart a GPU texture compression system, not a video codec, so bitrates will be larger than even MPEG1. ### Important Usage Notes From d0ee14e1fb34ce92adf877a20e3a8226ced6dcdd Mon Sep 17 00:00:00 2001 From: Rich Geldreich Date: Fri, 20 Mar 2020 01:57:12 -0400 Subject: [PATCH 04/16] new files --- webgl/texture/assets/kodim03.basis | Bin 0 -> 85304 bytes webgl/texture/assets/kodim03_uastc.basis | Bin 0 -> 393316 bytes webgl/texture/assets/kodim26_uastc_1024.basis | Bin 0 -> 1048676 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 webgl/texture/assets/kodim03.basis create mode 100644 webgl/texture/assets/kodim03_uastc.basis create mode 100644 webgl/texture/assets/kodim26_uastc_1024.basis diff --git a/webgl/texture/assets/kodim03.basis b/webgl/texture/assets/kodim03.basis new file mode 100644 index 0000000000000000000000000000000000000000..e493163a9fec1cf9aad569f826e7493f532c9f7b GIT binary patch literal 85304 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 fO^_6cDGUGW6x=~IS4ea-Fi&|fwH#|Rd1 literal 0 HcmV?d00001 diff --git a/webgl/texture/assets/kodim03_uastc.basis b/webgl/texture/assets/kodim03_uastc.basis new file mode 100644 index 0000000000000000000000000000000000000000..07469c0b4c7f4519263a6dd9ddaa197a5e888267 GIT binary patch literal 393316 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

@5rFuIg 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%0AFR;g(t2EwuHi|LaSck1YC^Qi1~Diz9z)0 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�eZ&08lwMbs^VqJ$ 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 literal 0 HcmV?d00001 diff --git a/webgl/texture/assets/kodim26_uastc_1024.basis b/webgl/texture/assets/kodim26_uastc_1024.basis new file mode 100644 index 0000000000000000000000000000000000000000..671d188ee878c197ce384de12c7cf939e1cd5d00 GIT binary patch literal 1048676 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

OdgP=v6LEZl8fP=|%pQMy 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�++ai3XK1@oY83yM$AB;Gp#uI_Ds}|*-Uf+#wP$K{ zdmvspx$V_&Bcoqr>2zH?LOxZ^g$@+{Z_rme9`-Os*;bH0f@+U*_HrNtDqp>lca{=L zgl4zihtt_tnKA3xrNMf4(SY~$`g%BDx3rUYj!esP*Xj05M%_7mmUMt>3JFE<9Z?#4 zm347g>ptks(A34lyZ`6c8#MogUQa-;kI!~9Z`l$;0`h(9xxVpec01>*R#0a|(E5cZ z{8LOkzFcn7LP#jndaRmp`_saQZx@x%idfhrzn~#LKqI)ZC(}%obNvbsDsa8dBRk{u z0hcX%bb(NVP2L+b;MDZnc)df!SrZQa|ES_$YO#I-*b~72HZ4waqb}F$d_lus{Jh{3 z-?4H*nrPu{v7PQkv-vUr6fyB^0d~QV|=vA63I* zLr}=HFrNyK(Y(GPcL*-Q1wB^t_yA=a&m{v#zj7Zr_Qet4cwjw=%e>e&bi6p04L6q$ z&~RdxnW`0U1k8M#be)!VCwE20_g2Ti|34qTS8HlCJtz3|#Oc+%ghDp{XWMLj0GSqb zyxjexZT+TWwHm;~Z2Zr**?fS;E$xtnx@ccZpvUkhhHO3buy*EOX^Bpr=cI9q&|x#D zh&cl*s`Yv(Lwo>f-?N2jid)wTJI{w_>KCD$w3luAbw$<~pX2MS zk52x^w@w01Y`U;*29ImGO#CZ5e?Z{JcoZW+L_E((DhEFQ%lS3tKY)MmX7U5TdQn*a z-vamvq|)dA1HR+6Xn|UPddP3uzz0xgWc&Zwb}_8~=YR-83g^e`|2YvD|AT%Pia7uz z+HT|nyv7U`qw(-@#xExnGRGa_8F~{Fd1&9h!=OhMNnVKN=TX1M|FCVZAbPz4%&p+6 zO|p_8&K)=&T`|7mI#BrP#ivj6k=O4=)OrK>e&apZ>kZ0kcvLWY*tS3k1=S%!B>q9(L$cIni|M4%! zRro<=<84EB?#ZraDF1f+>047ykA!@FXbgTY<#7|!=fL^^yFX&2C0W@f^JDU}t|s;D z`J3|_M=|A(M?A5Z<6+Q0&c^@w!;tzp#^3A0j=}nSpZ$V7qi>-=BBLtA&&KU4N*7r-@doSMm z*w6f{_LEN*8>cLL+UO_}x`F}bF@B0$}fQ}!azHsn+3jgcZgJDN;iooBdjfC|Jr}ANW2f)V<5>eXVwy>UIA>_B`BPSBy zPj~>S?5p^BXk1?a_b+>WLFa_z`j0rC0qY^MfKP#Z4Umlw{k!=ZNYGR85b~2t;Wq#Q zfWLzC4`TEzRzkbVN!p~CK@E7gxqJYb(&OTx*xT-Nv!=EXgh^oi;1Os@8sZJJ9|)gY z!+e0I)K=XBSxWWm$B#SVIKXI;8d>>af=whWvqL}Z_S9%kouo^1;{^=y0gujAG~$0a zgU8n!|@dCd;%HqSM>S-h!-IKf9C_df&=ZcdLCb?*9)@s_PM^E zzn7K*A7DeTm#pb=Nxz=mY$JH;4dF@lc6NL~ll28y`2*N|fOFnJ;47$nf`c$$0r~d- zzVb!BeRli#j-Bsy>DK1TOrGDF{SY6>ZjT{bb6(Eq1E^OV0UvPiokQ$KTg(Rpcll~Q zAo|ghF)@4A|HPS#cA`AsJ2UF8-~|Ysm=T7ZAAxPBb*K3N6=nk-=|oTVe~~``WfC^s z^HM%SEVmEL4RZ#A|Dv1fY$?>K5#M(IukN2~{*J0oKkGh`*Qj`o8XUhr9{k@JpX2y_ za;5Q!(I)TD{J1;x0**)27E-`C7ayfA!clNw_0r>r=>n(q_ zAuI6*0q0jT#0O~n#|)WlthU4PF?ims&A4pTp)-0rMi-$0$~B_7d;qDia=-A`1Kt?N z_}f?yLgtI+oO!;IR~5eN=mziyL?*;(ME%_GdZQFrx%~lVv7- z?u#~a)%5S96=v$1ey9%PZ4pr5Z2Zr*$yHV!<()qnFA!BncI@08jm~emGA}q}f@#EB ztM;p`klpNx>ZF2p4S3ZMAK)4gbA z-q@D7xK%;`3UXaMWYrb>&}~@%k0Stj&NHq|y0o*Q|JZy$%@tS=8RLII5x5-u)~XGl z7nnle0_&^L`u6`hAF%QNW9~iRn#$Vk;hjbhK?4T_#6Un)babTHMHGfPvl@c4*1_uueGE*+8O|vjl$Ei_6H)7U5paE2|4YZqM{ONY z1oZE{}=8~ zUbtI`TnBi{cf#>RHJaDi_cD)-9qNfh^xfY8*vZD|GyWHND7g}oc$_?+Jz=nXMdNxe ze0XNci{IbZ%<_{eZ^7|Ad-a;LBkP6UHB=;pgnjgV?|=@?-Q3DXh1s8_{Q}IgS&mH+MWpx!e4L_^PPKyLYpe3lP6X1(RSKmIpntJyZhpvoFWK`@EdY48 z1PQb?qx+Y)_5;%cBzd`C_jKW#lby?pq@s+!VgECaZ9l&2<*^di6_m6Ud><8DD-l8d z8Tcn^Fasdci{OnK^`R2$Ni;(I3D`>YAtTEp?zeCqsRjKChZ7C;{XA0RB3o8K{<$pp zrVO5E2L?~#=LK4tA>UsEPY*PO&FB0V{LGN}RP4;tX8Hl7{fJs>xNTALUlY&AM?${; zj=UpSuj{lH*VhDpKaBoU0#c0lAESTB03i2gsxP+WYN1}?0?u!zT423KngQSAvxV~~ z@h92;k`J(C_ydLypr7CzWpf(;8|DYvUjXBOFJQO5tgT6Z!P@l&Y^-gpKj#AkKt4cV z05wva8hOVJ^!~rh?9yc(@)~{94S`c9!~WHc59{)+A^)ACe?9vBeUicd2L92>I@nBf zs>F!*YvX@>{RaHc{F+dop*iL|hQKYwwDK{4?>~LU_eTB$t_^QSegw{d_Lr?EAE0=L z`63>D{_sC~#gDc7xE>hbdH*SJ{&0pGm@f(c0J2|SKH$=^;?;lvIIOP4T ztAhC&69$${eNo2$rVaL!aK+Q|IqB%Uh&X+6Th(T#7Hcwts*oITn>2-6r4# zOJIh@8`J~*=}>iUw_C>R`&$11s)@Cr`|@6GY<^$1d-t$mb@la827NsfU#A96ce&E6 z^(F5go+%bb&aF3|cJ<0;`~u4G-DGWDD?b1MrYouKCx~kdkoo{p4^ZhQuAMK?SWqNA zx9*kRcj*tsKSItjN8l88PJdOOyYxKL6ciMQ1s(m)`Cfy+o1^n~Qkh-7^#KGQpng4Y zf^FOM)Pu9avVsGaIR#`2a@0K;nP0FMikv_>scG zLfef?szGl<=0_xMma+K}S_%S1&LsaK_7QE`ycr}QxW4cD0Hi}Jui-XrGgE(FoX~jc zv}vdBRzW?nPz!g!dy*DO_QRbG^)2e~0Uh1g`~YTwr|Xu>>I0bhEB)vIFx!KY^PF#j z=zM{}48DH|_ri?wSQj1dbrx<`tX|+r%iPl!U+aDGy|Z@hW)9`acOG1L?eMe@gOd4T z@b5^8u71#LH~YN6{Fphq>}+w(6I-ZFh`0LY3xo{lWECB_`iu+c@inksu(QlPz2$9< zJ`Hm6dD5V4Lq7fp_Wa0ve4}0;XA9`{F2YW87xmnE@@2O_2ZLXi(4;;<7k8WG1K9B+ z@)KOIZ2Wui{d0@o>aE{E!PUZa)lZ8SFFtzoXu;vjIA34w@g%9N*`%hab4RI)vETf% z5&M6ge>QSN+WlK}{l$9n0b*6$B$WDxGBa@L{>jBDwMW>dOb{?mofG0i(W7u@(XT$MG`kp6tU@G~+?OFXIP**Q|i2-}`=2 z8u^s^@&V%O9rT=^U69C@;k&7=!5mx09}o=ocqr#^KM4pF@T(XeXW-qo!oRsli~R@a zK2cwQ#Q$X9Bp>j>0r2>5OneRV0Yp7=MG)=Br{S{kPZIx=eUcBzSz?I)Gb{e&B>=;u z;Qz-LcCT7A8QrLX%a)quarkJg9BwnxKY+ylISZBnVI$?!@jy6VwO)j-yx^%az87`J znE)gnCi@Cm-c4P z*#EB~?f>`U@#6@Tv!<84Kir*?50Y{zv{`-<^cVEQ1Sz4%kL&fBBkAf2XrjK?d)N0! zB82+!gNxyM0&sjC@PUc^c=GQRLqp+ev|DdU66pJ7!KJRyciZ`E^cA|_dJ=Y*E7|mI zLNQV{!ubaoso^M|+6RtA-va{d$k-~sV}?~yb4@s?&F>~M;ApyT_7csGgn$$lE`w*mYn;7|M=Bi@xD z+}tWvfsn7i+<^DJXnzun|LN6@wO3vI&*%ZLe<7|&K;@Z7u>6OWSrYh{Ea(_SYfKr0F0-Bb@|75?u ze8800(#DXB0tA(|?~0--uLt?r&_D2DB>pG+rucxb z#s9i}fVSy^gNTkNWpa9+idgVzsSRCCyu_Kr|78Db`2h9CQGZnllB=i}ga4L+-vRID zr1nEQ3922sz86@n_N_OcLH<5uzijkjYmL$t^9A%)n;*dbqxIzjoVE<}(gY?%J}xXO z!42XY9gZ}+;4S{)S>XDMQZKKgqr`Z-iv-&V zY`p_-bC}hT?r17gZ;;h<*Ow2VUPah;u#^l63BHRQ&h|yRgfv`^p`tO1n5g2eXXYQ9 z-K=lpdmhMP2@<;xf&BZ`8fT6qXwQaWh`ip!2TRV4d5ZPo$XN^VcJcA{A1f++eSJ9^ zmCMJ*sA$@wvUTk%)={_`E9AHs^!dn!R_MF9o-UWBJ|5zX==h+vq;ukknp}4<(PlT3 ze83rRRv*B8A$`K=2Hk%ENx%m8e*J;})2%(V@4TgEg^g$FJ3M}K&0gblfxXi=hmFQ@ z3QE~2DYUHM@U#czoTPIyWY;IRdA4hf{*rTzzJ2R9HI*IH*9tBziDXX5;;Z=p-EZN0 zibW{hkRMO=0e}9h$!D(~`?*20W-&-$$j8SwEBFBz^YJm61$z9BT&vqnp)K5;#rOsK z+lGaQPntGr!+@>s4diw3f9Ffns$z#tGma;jFQD^2&gcQy_z!h^IOErMZdOJ{Pyl^C zbHFbE)D!CiWipoms#}ZhLA!K#+NgVnK@Sib(QwD%<+2-dN40C0>x=oD%Y!DL|IUe_ z7fk8{ax_o++(6?Lp#R11YltuX61d&`VYQ*JYumJ4q?zkT5%}ffUzp?rsLX!L&rU3N zA0B@9RvQlqBJn@juP+~<)@sM2Sj7gqBL7<;l9>1tFV)OG|tn14M zC{#A%!@l#p$$bMa5BNo?<~;^XaXM_}c^ zX8;7C*KkhihRSAK^ot#6RdGFg691EZQ+xo4|HC<4C9S{2$3r|Mp4J@xf6Woj@NMq> zw?X|S0{@f!dh-Egwly3ZxVoD#LH$E~qTEGW>RSa20K1WW(8nVY7u7J;pM7{F{wMn+ zAE4OkCIta^QwE)v(*6g0Mt|TT!XvP*-%u_(py6aFhs$Jk2ED~_Jb_rkf}6zuWM8rM zbG-q44281|y}rl)##_iNsSiRDsQ)D_jgiYya`hUvzCgyX{xPs#B@=-AvGLlB#@)lfpQy!K5mWf@0uv` zOZey|?V=UK{^c*AJ(q93 zR(l`i(R@pXpMP#^ay{(2CcdqC7P>g}SrFZf`hScbA%^Z$JN^%6VKV-|&m719D_d~R zOjvYw0#YwGM@yeb`mNp}Sdk3%B8~BIR{yVi`iSxOXYm>N`;dKVi6^>ZY38Q^{Dkv2 z4f*~Z*nBfOK8*GKo_JIdN?W@L;>&>V@zZIUpHG#|LJ2K6d7xiH5{L)nbiwufzyhL_ z{y0)khvJ2ATRH%Lp-N7+M>!nV&+&hFMveM^CjRe3;(t>APfeJA{$6Cuejj(_<#{?- zAna%OJ(662d%yzZQ+0kH-ipA$q1!UJDVdg@w)XZgUhCS5{0o_rgWu!7;eVXpQ9J&R z`HU~|za~HaeIQES`Hk6&Y`A8PFS-#O%mKZThjK?AfKnGk;(xMF@&UrG-ld%95dU5+ zK=O%GLC^5LoEr?oNzZ0=^$f=PcIvmKU;9oK!5jV;2p`G(0J872 z)?uW`Ka9Cwa6SXU2Po`$H2%+^>ltKZQFGn)^IFQ=L;OEx0mlwiesEy@6KMxUef5$; zEzNhp40ii)EE@HLq$U^YYjU*ZFha5DJ5C(bkANcOpcMi6iw%kY)pI=siM;a?v$Xq= zALoL;mJd*8S)oQvl`VZwn}5iHdVM*)A95rdn@~Ij;xi_nH{B^JgNd)>CkXIWg$0BE zS$x-didEGE?{m!8;qN3LaBseV^$!dPcn?=xyFVmAAMmw&0HyXG&}`58VVsBi#ZQ-^799}ZSC+n$iF!gz_*(@Kx-oIb+0a%aQG-~IDBclxQ*>K*2eY-+W zY{z^d&KK2nnDiumMBqt7{Xd=Z!=oX^2Wr^ma$Wp*Ip&I;-Icv2Vj3DW_q;U!1=1?XmIXFP>w_EV$`>*2}#0o}IC82+ztWb1R0_}^4t zcQ%d2|KKl($IE2CfcXA|4<9~6ZST2ZolT2=#c^(#HJ*zhr<@QXkFo-@S% zL7%^V4Xk&EVLVCe^HWkLZp3|e*;4-KAD&&!0zdv*etXAgensfaGZ_|E~_&iyj`{RbRZ|dOx z`sxF8nqV6L8~p*5J25@+rzMLo?RM_(g~B1Q5BmGG-IaQQnUv1QhirTr{|h)_edku_ zW8FMO3_k$*4)ZJYzFPb~dcM@WGIUDCboJl~T*zH$1bBwT|73qa;4iY9X41iTVjp9| z8i@lZL4FSCC$N79;1hvx?zwF6Qv|C2VXwzy%$^4x*WC*DYrS**#Wv5j&c34F+@oXS z_uJo89((n8nYRpi{XwnhdEKX*VZJrR2OKezROtPsMt(vVKfBq`I|I4HEn*J*d=T&= zY9+85+sD%p>&W>bzYjkMw+!U(ZT$va;v$ZxEm{y$gZ1H(3c$n0`=h>m05x8Oyp?V^ z|KAhIZ0;sau@&B)_H%R&guzGw*zrjbZt1l+~ z14#T&_Up?B06s?|c+Y;u|0p%C1?@*Bmuq2s*3te4QXYMFbp3-b`~+Ek1Yy#x#{`Y!=3OyVDgL@wi**N*#diYmQl)}##b`jQtyxDNm@+4A=4pNOK z8}cRYXV@x{750xS^9%yN)=kQMj9*_C6oMSDpbmZ|^8wUhLavf0Q59LDjJylrFQ>W( zbjYdl!tb7?zqx$m7KwjN^{Mm7yQ={3=o!x!xITz$po3&GzLTq@cRlZj&R~>` zNNxH}z6TY17f9ED8M%CgSJ;$6{aaV)#q)$^W96{udDs_EzexA&1-3K5@oxHgC6BMu z8~$!d^S|VJ&ULIOoqP@72mFI7yZXgI{5|8&podQ`Pj_jrKPuIT;rN#u-Fn3>JgI$6 zEtf>NBT3g)mgv^ao51fA{0Z3?_ZjhWth@~e4g8@>>$?Q_T9I}TT<@>d2k*HZm$+rF zX|4r>L1cq$IL+NUJ}S5?D&?T!JWUhPqK`))p5Y1g3#Ud+JqxcZ`h9!qwaYYoz3lwZ zdTc0&g`-w@_9<>Y(`8;c_y=gQqG4NgX7%>!oz;qNeQCbpC1xuM6AH=eC;Q^lOKU24 zkY^~e(v7?{6W5Dp^#2-+{_EmRQ~3YCOvcV*gQkv><-3TEpOfre6pDlm36gdtFkWtoUXDt|x#bgHigt zxSHG$t;+Sh$EWIw#>i{+bvEAsFNpMduda|!rbL?z`fzGhC`TZLe0bmkc%Y{s@juxY zFKE>BZv-Xova@G79hqhF`i%IW{ynhYEB2pY`I-NPe}JM4v@)NUN2Q7r=1iaEQ>p0! zBpAu$_iz5u1%A)^`3I1EK&1r}|Ht?rUqWRxSEc0*r2PzKU|^^Yjx$#cJX@rU$QvO$ z1bBZ-(A)i-no8I2x+r;Fuztx&>#`6>)|id#lY9Vqf2bFCH1Gjh)sHY=)KedjOkHVf zb})ZOXZ8IXr!KZZ)O-PIln8u)L!YE|e}*NQ8KVFP`{1o!5A z<_7}k`U3UL7a;2ktQl^sFChCi2Hn_VGba0>|J&nn9#y3(h)Omh<-fMSFZky-E^_#e*GQQ2pwQJV&A7|5I?KtoQtYq*r z>rek=#)J{w8 ziz_k=7*T-fn)mv`=d!mgg~%@9cymuM3z*=A>%U7iPoUmBn~%Q~|GvC7k>TCdBV?H` zOMch@@g^PjWAomdkBlya^#C4E691EZlYD?dAHeb@;%plLw*YZ*J_6udJB!@-o~fX} zhZ=*tpzpKoc>CjHAQwM;A@t?l_0*cEu{V=_CjVHzc=5z(bHQKE;^-@F)y~I|iwKGa zYZCvHeN*`YI)?#_9sq7%{Cl07^tes*mN-A>K{r0={+bMa21{ss59$gU-`CE^|47d)uwE|{GKWLo?U960afs!}uM)Cn9{?~DLMhTGX0z3A8rQ*09 zFAVRW)YEZM%uI++hjTWU?QA!G8cfvy3VrJE0Z!|~*KBj-O?$}dNxqg3xVLl4wy`Zl zhXw$>8}Q!mJ+&cZMbWJd{KDm%j{KbU4eHpia>%TxpXS*ybR6o~DyVEmRMep+tiJ+@ z|H*#xPQ?yy?vo}pPNn+~92rpu|C{0i#41o~H+r2B41V4L3*8a5rqL_=Er0S$Ml8(z z`R8xZ-?Nk6#;)QU|SL2{8#eje{nnn^Z)rsf$M!~xDekdrDt&UBR;ZFeutLvCyrG@zRuV3 z0m4t-koWD18u59ho>2e6=r_nP64>uhY7Kq^|H)5~#Q$X96d&*<{)hN;nWx^K<7|uA z`~>!Vq@Vo{zw{Hp_`i020ji9T!oXj#7)hRv8y^XNt{Ck?sO_-;ImE=kdKCQ8Ytp~1P?H4FxGJxj3h8dZXWV z`rp3U_STi3z+X?I?FJw9KkxrBp(>$DC~Ot!uJY-+iXT^{{~zFgs!1!6^35Zm@_W&u zPwzrd>(Dh$P*2gexp`|>bFP1}tG~GxUK2?4GP~qr$*UU0@m{Su13wdAs4OflD6YfL zsP~Cd3j~t2?p8=Dm&;-Nx@duoL($cTs*ga+lsaT!{2y1P!Yx1iI#LdY{Vgv{Cf}R=p8+J4L;nRH{qHK6@eA?f`@_&Mlg+CM{)j)xt z%DrP%RT+MMnEHQ!_r36fOJUIK!@ofhi6*KnVFf@Ie)LN z1)v82%8TVczlityc=>?70PsK5C#Cmi?aKJYVgG+-6IZTvu|+kxbFZCS@~ZEmI{P<; zFVtlce16YWS~Tp>zrc^d5dX(|3>?qrF!}y4d^95vu7-RE|2NF&!hfN*AOrsYe(>PI zh{`ti4uKOU<=S| z;P(?XztIj}OYL}wf0sOc8fEf&XZb?Dnt^YCF|Mzlpu%;Xmne8IbG`5@iBE2VWCHzB zj=4sK7g6N(7>~#3CrfF4h<~_IAM&+)fO<|`7)RRj9@O{aC}EQETD?|+TEdCZ>Sxy02S5^|K4f~O z^WYMT)1H}uyLa!#e$=0u_bT391EM{8#-+x6=Mvg<$RqD%5l9Y|f~Xa5CY}(cx;d`A zRE3lrq~6w`Vv%CmPm}xxg1uflr1lwo?{Kr{2W@|NHbS;{2-3ALVDK}`7bLcWe0=be z)4a;V&C(R!C;x8D55Q^z*v1A9S+)1qHh1uEg+s2Szo5#5pCG9hpmuy4?S6UvvjsPz z^KZa>N8)esQmmKn*r5ae8b=H=M)Lf=wyzWYNbCE-E{Wzx$m3HZr=>Rzo<1`5UHAC7 zxahAwzHS?v-+(7i*j$Sa@3i?Q$A;GbU$?#v`Tu*CLuka-0FKI@2cjx}H%x~PB z?V2nFFyDw_U(Y{_kqJqe&H(@o-|-;kC3E&$G&?zFEzC( z$}yiSj9hSh0R-1d@qn7-1G29$d;nby1!dRK1K7ft zwi&Pd!=*0+M$FpTZIoX25ghnFlK7wOm;HGt_)nB^mquG~h9v%X^*hRs6HNON*N(?c zVZC+Qw2tHVa_HFvjz{nTPRfxq{)hNA-Hw=Nl>g|HVZ@j96 zBak|I)UHu!rK#P-?{{a(LQwgPpFa35I%~wsWWOV~55otr@%QlUk)1Xj;?Je)-$6di zd@JympD8zfKU}q3n%M(Y()=Ne2Z{g5zD^>TVWoX2!gL9Kp6*eSv_8Mce>-{n5bd}| z;(xMFh4gmaOs>&pj(H+N3->bT~IsN|@WdC+v+*CXcj`KbiX zmHq`u{7=4*Dl7R)05}j(pyR{!<^#M2<9u`ppYhuUKl?^*2K?VPYmY0&r;z^&_+JBq z2OF->#Zl7y078ypq>Hhq@x?8cpTqbc`~crI@uFWB)~5IX#r0bC2VvPn)p#NcjRdXQ z!K*rOM27m7EI@pvWgg;d#>%x2k0Sg9zm^XW7eT&3BNt%)x+q;hkLfl0KCJ&K`dTpt z$O#0$>_2gziNAZT%7J=?7|&oeN@G-6#QF!a|D}$x;-_uVjZTx) zxIWr{uQzCl51?iWy^+!f`~%|TW1$|KDLiiK@2)F&@=b7lk~gKm5Ed1dNtyVy0Ku1Cq&KRprDI825kX7tqJ@Oe*BDo9?LINOv?o0jW%t`sJM*MDeC4>J1b*=Q)hJ6gFl~k3G6Ss;8OLy>ihbas-Wrg{zLa&rT1^)r>E;P z{D=LEUF~82P%i+-qk)f~qRJkHBRlx~!sG&!qx^=(|EYI8?|4>tR#O8yH$slBIm*Xf z=3KcFf~c7yH0TZ=^zIx^XlNHCz9j;2zTS%yHtN7%A}i2CgTLG&P=v8tZ9HiSjNfOx ziF=ladMomV@xp!;l9_Tjia%lQbbDKzLz@gR#SFJY;X->yvHwwJPb@}Bq;qd<@J_3mY0P4^i*N`Y7|g9TIlL$1H;Ufx7z-Mo0<&w?hyVJWPiD0Kdfh z)@+~7?gu?Udi2stuQ;cgW zq4WFkhk=7F|B-^P#EyPhWRgFjsO3IRf-hn zr}qH5Ne+H|_Q2o3S+kqMix(+cw4Tj>M_D>|re2_ieZP{|NA{^`c-*C2WBxmd|H(e7 z59l>tI<&~C`M7Sb{-Vxc3{38y?34Ni#R_v}GyjGXoF9f;effYX*FVPg?*ZH^SbunG zc_=e!t(G4Hmbfh5Cyy^aff)SH`coR~3$T8IBp;v{TEh4XN)X-1{h8`hAHIWJAb6f3 zUjU!v|CSH1qpJ;KKCMy6%0nAy|7touw&GHy@96%<^*!~lK|)^K%1o@c=kx2&cahg~ z?@g_GgW3NFd_dg1S;Ykd-~YI(=5W^DZ;-BoAcOS}gw-VE*G?(~qZzRWenrDpdgIU5 z7M%n_!BF!)bbbtZzGOes%*Q-iDK2KduB~%_Qp>m&ho{>Mu1~v1&tInStM1IwiujQ! zN1fStuWrDn=Dm0C8g0lgpp@KKdnWZ4Q4h+GU_PKueZFy4;7thiG=hzD8GpW%6mxXHKy0`7ST8Rh=I=aZV|^{Z0eXDM^CkTSi*g1V`GH0N zF--9RIuV^NP>q+5_`OKt@5E>GY5#*7N(&QXUH?4teCpfRiB>ZBpPj$R@gwUUq&p+1 zcL?$E$83FuU55G$0v&Ly_2vhPUOy{~ZeJb^dVw;Cmlr)j`?23%F4VT8{r1!iN^Cof zNQ)eK@9^JQ7l)y=;k~V=Ox}K)gYKd%i>$lc;MQhnFu@|NQcB+m5n2`2Sz$1A_K_<^whW zA7J}SU<2(M8xU>M_ouo|JGx$9%%B@3dvjw^^4-^#ZznA~^JAA)BSwr_g1iD2bPnj% zb1KF=c&E%4zI*^#Z(%^(>$%UNjVw7c`2G$7_+7WGXa#M=Dah~m(+o}V za`AA27XFqGFA*V9X`=FXj_R@@%+M7m-&+&M0@WZ55VmpiU0qe za`uz&_kE0?C;0%Oe8I7Ji@f#Sn!HJB>STpT{7?2tK0xO`!ooa*(+MLY9MTttbdoH1 za=|95NlCXQzU|?C8s@d)yYc&*u>Q4xXNOFW`soAAlb-N#lY9W>D&6Hb>Q$44V_s;A z9!^Fi{wMpU_yBQy%l^HxgVDZ0!EP;v+8`>?*U@}SaPmip|Koaoz-ReHMw z|8?lbyP0OnU_3qG`H8GINaBC8Px1lbDz~SK9-i31V48RU{u9XuknbBRwIKq)!O7+qdwK>9hy3t{xZXUi|G)|mQV*bbWZ(&@uRFgY~LzM*|xFH)#wRI`E$$ zzy5=76@USD`_Fs;c9VAFQdL}JtC1iJK8%PN#QRsn7r8OW5I+IGLGUlH?KcQ~&{xzO ztfL2b$H#hq7kn+aQPKS|zcGo!7if@!2=uQ_z#khd;@FKUbKS`11AMA{<7?0-F!=y5 zCY6SI0`%ug_3EjhL4xbE5rf=;wNa%=nt(1JrY~Vf{?|0}Km7OAu89)Q{2! z>IK9>e!^Ijc$~!RH~uKiSpA~8T|xkif(G;iOH6Rq5sDDIWlR z>AZ-I^Nwz;48Jao!}0T8kEM?TKtE587gZ*0t9;Q*pbUiZa)?1=14PnF_&$0je|^8? zb+w!DeSmBQ9J$~0fuivI%)Sm?{@c-n1o}x8;JmTdz+>VAP^OQ|2BYhGyB7G>zL;NyCzoA+0sc1TXZ%xr z0jC^M3sKc0_%5^(G+OA~+=3Tn)=RZBk7K4Zt^XMn{mGDj5Aby+QfxL?+W1cdKT2k+ zZ+(GFogdQm1T?;jDvv?L@ct&mQNsJx{ks@?Jbj&jPXP{u-AFz_ z2c!+5# zIM5zZTY{}`#kK1|=ih@OqrT@$e*WHKLw*2u3(ybwT7AGfLF2zt=Py4t`^A-^LGT-- z_xwXCElNHxT;+G~*5PSr?8bFSq;mAgKK>Giw@b!SGX*@|@$YH zc*q&xJZa4IA?X}%oF_AK*?a;zqo7Vc!IQ4XPQTKFzaQMhcpu{aq6dYA5RwOffo31; z#^dYo0f!BI0A>S9O4O0n#|qjmzSn7J|KYHJLAr?+#qFQYsK(1{j3?^gf0cs9|BR~< zLUerr&@+IS3!E1Czg?A{>u?+N-EMBs|KMLpo{!ka4t|Q)uU=t(KQ#h<;kTDO6eaS)`W6&HJXwVB6}cGm@xlKduYbfg z0r9tTXU&?mAz?>o|F-|SK7f*Uz1}+o_yCK=Ns}?Z)Gdql3n*mQU!BdG)a15Z50g8y zCHudbvqLHSd3?^0teqPsBjIkFiup)7Y2AV!ydEw9zr;;(H*VYjy}*VY;Aijt)%gO+ z%k~@i01d)?z~zH1A5dC~$4BR|jqVq)dYEv|z;}&a-+HnyOO_?uDU*@-pX{6B1HzLo z(0YJhnEGAEg&sxR=_Atm&Pa{iwR2~G?B{T9Yys^Lm^u;s99m1`tvcP_ap+c<8uD9r z-Y?s4^>WUT@)d@BW0DUb@qdmqb3io8><0dSbnB~ZHFEiI3o{qTMHxY$|0nT3*)KTn zk~HCVKi9uEtck$)TUySg#DUi6mr+m)FkE(AM&f_6AFlG340aWH*_Sz#rIe-UU8N0r z-)L}I&!`Dd$%yGs%Y9>n#`~eZd;qn!$J&UcmF{6pi~l|b`58{CVrhmH$R3*=(!Nz@%7~cC>6I^M5hmeDksk)*iWEuyf*c=$BPZqu^-`X85%MC>6_St zLL+`A`2epXKCTD98y_3CQpIw236G29Wz2F?5Akpb=+F0Z=+!ppKL|cRv4-}avogfn z6ek=Y{uD^B$M8MqqzX#H^^alouE7ULp6wlxU?~}?l%wGr#*Ih9tF6HRA91e9(TZe_ z9I2h)LrN~^8h_%-AL0EM&gkEd^rN$TQvygnK=<@HeivatP2(9c#QSMK!S$(~mQwxd z)Em^*0KEVNhatX1t#CuL!S8G|LT%f8+Y|VPuj2z0)pWkU3!{H1)q9!Y_&&rFVJztJ zp!12-Kl?Kge89UUT*TENKi~_LDySbctLq_F9{`sHzlr)}D2m^S{8YdNDpfe1_a}`H zV0`}(50QKTHA@P?Y8c`j!cy2H@C~)<55f!(GEayiloUtG|KH*N^o}@woeJ^gb#3er!z5&09Z171wj46<&*gI70J zLo_tW2atXPl>?GbIRYQBe1(64tG~5txb9X0y635NF%fSu+f$7J(MF${taI&ou z$pJqnJ*nt90flS|;sTyl74gsY*tfS$o$H~5t!$J}whKVtFFB8AVyU_0HS9n7&b;c4 z(7-3hyK1>Uz^RZzeiP0x)idgLT0aP{I zYxsH4J+{@lXq@C`tezvit3BkG*SvEbQp{~XKN9fxIvW2o-v+#!XwKkUyfegu`=8+h z4EMj{B*e2d0^s|YMxHO(S3A2!@H8|(hm`QVk$!tlYBnF=n!)R72KXFg!; zW3ztP2z>8)uU32?f22It4){R8yX=<6KF`nvw4R@@IF0KYiZwju@1L0j3bpka_%|Z;8|e*&HC~*W>v??pnfMfViz8tb zxjQT++olgEudctFS1iWkkncdVxiJ6Z`R>#TTmAW(RpKECL5yJ3(^`U{>v zu6go3tcQ=wj)&WO*i`5C|Al>=LBB)v@9}OFG`e$g0-f&+cZ6CPbbVge0k5b%L-KH* zpSov9-OYpk3)A8}WUotPfA(MO{V;qX%I9 zQc3>+QXil`{J3PC;^M)!egm^`J?vT6-k;ww@M?E@aRTd;Sq|F<{}eH#CmtKj*OB@7 zWM4PISfB7J##e$CbbdkZWx(TkuO8Gpzd$(k(wTx5Q?@i2ZRKYcBS*S#S^q#5Ka+d_ z8J~yGU&RRzU>88g1Ja$fD^{)q|AV~7Saye=bjUcJ`%0e+)GSJINU6iOV81|IK)~P^ zsO!?6t|tKRSbDuxY2L5*;G9!J&>O$U`%{l=AHCz)mS+pz1>d>}`3i|wjsE^nNVCQz z{rtB;j+2?|Da3(hdU0>da&2Vn`@wQl3sT7m@n*; zZ|icX!Lb^bW5Z?Qf5;c$y=>0<2jI(r_w^7##=udLOgk+g-l`7t6{{VQN6zhi16x=zvlRjBc>6-EnxTh-I8F1&p zE_^*;LEt>%xv1K=$6(|0s~aDD;ng+E0ytOteAP)0f^Sf-^|3bx&96pMG%M(U;Bv)@ z3;2BvOPK-RB?DwTvq1HTsL6swJ@*Y6YAYLbd|y^K^!IYmSA9Rlc)nQw4}9Td zeEs-*Nc<1_pKfnT5Vt4Pt3VtMN^>3awne+~6FOo)WITSV;j^Z-82=J~AHTs}B^J`< zswGpVnngX0ii&zlZT+sjpZSnp_ST_8F{({dedYu3{8tzM$DQFgie~ZVL+}wi@Ti=A zv35=&!X6ENQ%S*JAMk3UX;Du*!}CMWx2E_2IKP91UgHm8KN;)~s7QQie|JB>Y_wiS zx3uKt%_nw5^C91w-qLFE0eCz}{7?3Une*F}Ip5E4RT<;j<-7X1yo4mz(uc{(AA5rt_p-vLxf1DN9kc}nDg(540Gp8A^%$Tt9f$P&~E`T6zb z1Jd=tEQ_>bIbCo)mRTq*lhqF!@`*X8*3s)>xIZDE*g7p9a<~0iKEMY2zc|SQMW-Mi z*b6=Yn?ikl9rJf;jWp0 z*Ka^=yo7)7$0v{fZ}-#BHytfBgM0*J2I(O^!C$b8_CB0nO#a-enKja9aK3atLGaO# z;~OeBRKoR2n!?{Da{xi_nf-!lHNv2mKXK_su*vaLpKqGAT0rv+aF7_J_Ahr+T4eB* zjnMn|L2^{|wt>V4&W4Muk(<6Ic7gOZkVz9$eKXwD!9V$s++Psw%GhI3d6D z;v%WJ_5_@dXQVW7XF*nV4)m8pKls9i`xmP(Lf=z@^%4H5eiaeWa+FRIjQ{;V`q542 z!TJS4JP5DH$nhoD+q6HQ#scd9tzA4F^25cOBsFEO`Uhp)QjQBa5i)vfJ?sf49H6Ka zC%``+@IOZ9cq8{G{@DY>1RyE+E%)j8o>3@$YO5MMPL2NR;v1c2QC(qvVfg@-PbB$( z$`#m8gu(y#m<8+Z!uR1HU_XTQTFDUaSAk!D2JmNQG8y>!v+;HK2vBICFBk!MI~@fk z;Mpr6z!;AYpu_Pg>Y|hg9_lbj1%7zE+`cHj9HC~MU8|b!2t$@1I%7P@#P8Y9f9X$v zJZm2hEAS2c9nvs*e6e40&1O{d`!sBqv}PtsSM03O6*)IG(=^;zbS@VA|D_5Jb}(Pz z-aHQb6(-M@11gYIWN3j7r2Xhve}6#t%>Iq}{WPQSpX2?^=cxhnBX&o2y^#MH>I<}- zh~npOFLK(E(cevChWtp!Yaz68k!P-UfH(BkT$+y|={CGfwNYY^)fxDsEVI<`0V5A4^NpI5y^9)s@jxS#z4 z;5P%kyA54Wk)AE_@f?6p!O9e7yXR-qQ?#fE1>zs`alm6EzGm?b@YTk6JM9OIzN}wA z;b|beA2^UN#zROhM@)Sc{C;8IS46$Rw6$x%e{c$uj{>I<&f!X#dbjv|;Qgw1gnSGZ ze8PWW_>XwZ2hdw()~1zO-uIaQ(BbEUtS3PB)8cE@7r^f;LJu%tSMlmC?Sx1ZTXi~D z5AovT;Tr`=et021+P@G_C!gQS#T!Bv0LBlwp85c4?WiG+2Um0g zf5AN&e!bABNxdB{9ky*h`f0|J)(}r6k6+(@_y^0#23<S(O!+h6ZMpf*<>F{GS z8`=Nb`T~mhK1MzO$Hz$gPxiyD?|$Y3!2e9wSUMqcSoSD;_70T$lfl`T7TE{=Y6d$1L+wIBrzJVtV_^tEK zzBRt$NaOg;8gJkOn0zYgQ1EAeflDEE>J!@S*w3rl%;XDbJ3X0#4omHOyi_g#B{FCh7eCueBA0{b2{{CK7kXtcfOSPVYDaWoni^mL4wLW~oSWTkq0_?|-Yh?+Bbwzp? z@nL7+3%tC%I4GM}ITrXhs~iei2*meso*($_ZSNk&`0Y8JhW&y6-loGfdIfm!@lf}x zpbu7mfHs`{yja<3?%cT`3E15Kr(dUp*UqN5)-9e9E^B2?`G3MjL+?SvK%0(P7cjU;CfdBV!+w@yEyiWeW*ZK#9bFLft z0B2wXLOeWg_UVw=Jz6I78w~l8I?iPqT+l!iAd_LHSRLPKZS*U+pWiK!i{{26r=(q% z{8q;%|BWy%?rLu`}>TTe6}*SkGt`Cc2W)h%m;WulAk)}p=kxLzg9Zwl4m=_Tt$@AR=UJv5zIAQ@!#aq@)J zq2BI1h+C5QpX`(R0Ci$mi|+25`FGV5p>|FT`n#e0y^E(5uL$Xl9#l=Jj+<1;793XAi-j$ceLg+V8&O7eLe&q8V;n691F^khNB)BfbUvAO3Mc z46OIVRSmU}c34IG69E5D;(xMF>H|i(qBR-)2aLCnZH#WcF}hB@0g?~M%>S#TK>47@ zH1q-Pzs6|nYrDCPkaXHx@Q=g|@V&MP#QPD#Xfnl|#Q$WUdS#BlKN6YoIV+xF{EhLg ze;Z?b8`eKGA7I3@C$XP0LW{LM-HPxggn9Uy!y;e_#}c?kTZ z6f+^amK#b(n=q$fs4rl^`*qe^YmpZ>yK0LtxsR(s-Kz!-SXRzL^Z@oc95uJ~Z zRSWnW===wzB^{p!`4{#RW8+`=U4-%ef8hi0C+N=`_yDNiREH0s#~1Sj%>GC|pmG+h zhozVagwuibWAa>dp4CI6n-CvRGz0zx@R30;OKp{)FlkH9M82|J8xY2b-+_NYl8c$y z`ZaUvm{3+?mae&-^d&#R)AfB>+M|SFi~l#bQl`jtBcka&ra8_zb+^#i52&m z5X3>tz|wH%_Flc_po+jXu*6k*v`mTi|HFBjo)hRPFMyAW&TX%{SaY#P9c(W`963iR z0JC*-$mbBYYO7SvhJM_@{%>bPzQ1Q7UI##aLf?52z`v0AAF=1pzJJK`CD+$#(5rA5 z{6A{&;OU6^O@bP1ZgpX`ds$^nY%I?2PfchcsZeQAQXJ_0$?ubW%qI+bYX$n|qCtK7 z^g)!R5G7ekF06hm9B7sV_5KY0^>7WCPXK;_%@4qAmkE6U{N0K69|1i*y+M6VB7eY$ z$7%Mj7Cwj1;}wQb(KFQ>^6^XMC|eS>2vOs@arlS}`u2|4z5w>m=yCAw@#l?w2Hu1I z{!9PDFU|)z0IJe6)lq}@FOnoh!uqZIQ(7LOfoB=tXXJQMPXi+wBMHo3LJflX2Id1M zzK>4;LA^z5wokJGpeHco_ru>X;i0&(3Glj$hJC@8iXA)Gloi#axBE^1%lt*)7uHOT z21&(`??IWX;Jze}?{rdWDbfHRz_Etr!pZRif0K*WF!#W0Tnc!K@Jn!#;`nzE!w+Oy zXNoJjfZsnz>fz^vlDc*FPepg*I70qFDdZ0zIqZ+fA0Yh%N&H{iUl31Pb@2b2P~jS> zK`(+(e6$4`@5DnXnG1)@N_|n~R&yZVV(9k^#^Vg1rGP!*yASI55%{0%*IOUJ!F)kD z8|}dN)7RA(;FV_ByN=SDzvyC?>Oad1QN26bT|Rhf;|~x&MjQcB|LMrt8h2Se2J-EZ znW)bAlfSpAzT!_?Mi0R9>-N(%9f2r+9Be)s;Zy=}fh)Jq%d zKjN%fF!lMGe)ah$&v|0|%v+FP{prf^;bHLp`+uAd@UlP~)nmG@Eo1q6-E?C-Js-~( z)S1}XJCfDUD%xI}Y-cB{r6*_NX%PSK8efr8;mq=3I=3E=9t9SkbY}G@q@N(k2atW8 zn>WJ;u>M;lAE1-Bcyi#`kQ#Ws(D72;j7lcnZfQx!|8hYQJBad&YuhXP3`T#rt@cVcvKQ>9h4#gqci@x zH3sRTjK3!xuOs~!Nj(Fv+X0li;b#84zboEMjzx~Vf zP%nFoH%dyLmDo+lYQE(!7~i)w`n_2@P6*8A^?eET=V>u>O^r*UFs$!u>~|*;S%W6n z#c5rGla7O?&V8@v=&eg#OG*4s_H|~Jv_8OaKh;+skZ!>Nzkt5$3qtz4wREMBE-r(q z-v{?A3?H)lHiMU@tI<=>fWOGtU6m-9*SGyEIA363VRKfmGpiUq$ZxXxxKXA!k|81JFE84W^7^f8#?Z^ z!84(WWHNgHxZcB?QoReLwm@a(A|@4*st%AD~dVoa3!T zL+xFgS>r}&%)Fm^jN*46a637!sT1e{YzIw`YFY6&8{j7KKiSuDN8o(pdA9W30(`sb z5ipD8{-$916;H0z-mO%0p8P#rzj6G?K8(j_eE_WgYSkB{_lNzU==CD( z8^?%%|3I|f6|Mzu|27{Wj4e%7?v&ts=ck`4V^Mmsw1)Fa%h3YF)1Hb&m50BPnsE`n zVw^spuUz5A^h=re6!uk}at?&UM!%Q-d@k^ciGo~ohoJH+R& zVDw6FwfO*y#}o#Afbs7}eLTi%5FZ8n{Rt!!?3T6`@{_Qi0R2~t*Rek-!w=xk*Y0CP zFFxtv41NdYt{{`Bxmwp>KaQp#1Qu(Mu1?U;1 z9vAx~YIeueAgRxVwtU_(XL!Gn$0Pf~6ESGeL6oNq;0zob7>G#!1CkHWjeG1O1Bnc% z&*=GISRT3w#ligbgje$k^7F|3lYK=R_S>_RFm8MQ3qGJR<1a`*jPR>do&2ZrUuue! zzw^=Lx$u79yeSpEl#EpU&hPRK%t|i*W~X( z{yt>CwjKa00{(qIV9XH5fVG`EgI~a3kgr4)IDPgDNN!l~^VjugAZaMKLibtycP6Lj zsfY!imfApVLahJ&|CF^2i%KUjpqAh?c5m*_269WZJ`YV{Q{1^10EN)eFpvx`S~}8$z(1$Qej5=y`$+v zWwIwv;F8n{eJcu^^~3xC2PM0hDOsYxmf2&&#xMaG8_&36Qy+X4_PWqa7Gj9_;h89pg+fn$4{}P)%0#Qy14NE z(Pq~aV*G-E@g@BPYSkAgg+D`m*X0=kD>RMC-yRTPiVp~nKP4DwEqXl~k_AE!r5pl2 zB4WepP24EQPcN#fzz=p>%Zk{^t&GnH$p`2Hq=P4$Y3-Y^=QqLveTbccYJI+bd_cI; zf8aQ=kWKAFnGT! zvc-OlpxH0aZ3gRY4EULi5J6S`>J1w5@pTRY+Hdd{`@aAGn0phjCbDe}bSD842AK*}L?9sAC=LwH z6G3SO5oHima0rSth}t45DmGRC0cSLV1EQedKx=DkacH_V4y~ZH;?TB3t6)2e2xw%K zytS(m)SYurj_=&>-B)$5eHKZocI~RYYybaR>tCPh3$XDVB>pFD-lh>)b`u%2NBu1= zEKsb+U4-?h*z9A#|EhXd;6!5LL!`ALK;{fyry<}QCC8ffpM!FZUm+9{EU^Ut=4bf= zuDJg|FR%s68?YM{YZ}3^5=KjM5ekR(8szWeL(Aa-XZQ!uM|f+uyh8PD7=OvmB8cah zb{@bC#!S%uH=w83#;1^W0`-l&16RDAsoxD835oxxbD{{x7hMLe_cE1>M8FrW@t>8i zi~aSep~91gu1Ng*U_PK?S@il4FCMZlvPQ7%MCBhHKDyVrGx`66!S=r+ex3ZLsG1rw zK%H+M>-H1q%@BM8X)9(tS1$bwPb*?7A2E7%Nd6ALLUZivAsGQ&_&9!gvlrAWu0Hbv z`+eqpM;?!~sk9zF(2G4h@W<~jy%LA?J#jsO{9$+RN#FR~-}%H|goJD0Jfdw8ry?4& z8c&Jtz{B6IXjtI=14TLaTGjZQ_X0t+Jki58{Er6*Y3@vQN zWSYyz>yM&fVg|iGSUQD1gw%)pQbTWP&c+%DMgV<*PT8`OJ9D6ZBIN7C@7p7H>Rb1> zzlB44Uc&DOa=xWLJbe2gM^X-7ZsDLQ)`!*sUm#sm5#h*#`(uO(%m13F;r|cf@EvHL z5cmL8_hPpLqB`&mK=0pm?URA!rKLU^_k)@-Cc+#Ex3Lcp#A^@Rf>xEeui6k{_NEoq zZ;K(LaE9G&DUU-QH!W2afND`02N8 zc%Q6CPx1kzo?W)OzFixhSH;8Q&WFFj@tJr5_@B&X{V9K*@%WSZ1SDVJI_(%oK*Loq zn`Zudf=Z8%9seMUz48@U*B^;LK@ zQ$N8U=Z{)T1>iq^t7;!|QR96!x*zxl364)^@-gK2Z`3v+@&~@+rzes>-zk3h6mOuK z56Sb9Hg#Np=mMC`FYrXLY2bfy{>nQy$zh4FHL6h63)Y7JZLpp!YF$C8;*qS?d@4+O zKoN7vcmUE?&%Z+WG7`f4N8|^Pwl@6$691F-|1}?=SX{~Ce-jhNpUU3}%dkj2xJPG! z--h=A@21cB6K+4^{78&wJGiWDvKyYn4rl1;`}Vet>BRvjket<5qi*Y8F&Ml@xO(-A zrL(|)4DkZ%VvzV4ykQ}KKs&xpsI&T{4*>5I691F-*Tx5gNvI#!;lJ5VGVuAwO)@qlI1|>NeP6QpUp0RyF0NMT3*ZL^ z;y>;WSa~XK@=hyNJ}Wh)-HS>2Q*IvJ4f&Vy0Q9u|nUPs9K_8IaI0~cemm6S*$C<%X zE04=OYdMCo2nSWh+QiZ6H|_L^@aL23J2S7_D1fru~n~!_wD`YF?e4a z9_2>cz*cVVVnO!FF?A(&U=tS)6i=|LDuCP6Ohfr>YclGVSNA~gJH{j zb9&}SRlS45xq3?J_H`D0cMLZg891hW?HNA0FWC^sJv5jpcOe=tF^%8cXf9j?}=Q^?=um2?*E zg7|Va{(^3cuV-xC?u*k-{G~kOH3GzG&Ov4@Cv^0pMqKZni|InUBJRE7zhUo;l<_#q zH2X)sb;7M}-*GRYcu*iWqc(<&A5~}#UhmoL z?*+vK0fIlp`SD`#FR}QZgU1u#`$fE=f4aebw2-ZTsNn5n>*s;L9Pp+l^o-Czgu3z%jl2qa5%4%~T?HjEa?(=g%$@tPrgh8?5Gb%kq@IAiQSLd5 zIN_--s(9>}r0*9;!7i9BPhHUh@h9BV4Bn3|{D~P4D|Hhug+F8T05d?p!A>gKdt{_v zCCe85xD4|jm%4x)LHdr8va)iB;W$@tLyRh-fQn_FH)>;;%|(4%WRAS^a?1k{iT^u9 zM}9ohyGz@6x#{gIJ07(qxI^F=8o%#J{7>4ol+7M+5(pe1P;q@931>8!r`0C%wgbcqINOZEf)Zpobtxn31Ei%)lvN z?AWn@C(b(s87edU&(rdB>pGun|VG3N9WbIZ=F6H-Z5eg{I87<2+H$!`8Bje zce!odmRFBwAhNyyX_I__0#OY9Z>JhR(o!8Xl)jJge>JY>4EUGs%w_o@9IsB|f7bsF z_!0ZhVf)Pg5Ap6|7XP2KQmy|%e}Rct9|ZNRL5u!g$NMUCw%POR$ssf7Ud-V zCvE8pW5`+%LcRfy(Z5fiAin_g1=$Vjfnk3ew(-%*j9431D{}T5(pLQlME7Lk{Tcmy zqP_sBFQ|~sIkv#(sPk!|9yy~R5Ia3Xi16hxy^ql7zn376+#K`* z>2O4YesnWae*pMVCjV0TwS0g!{7>R#X^D&bDX#Er?FE--t1tIJ_pgg2?G5B;O^H{@ z$aMD(QXUU#Wxk?|-on^x`YHzLbF;4m^~Uc7(Xpt^&_nRPJ%Rnx(=i?TQ6_QxU1tdu7^4$Hlbhb;e+0vPT~?V;Qb76MmzcJ zFn{RtILGDT6^UsN%m=!!p!pFIWiKpX~FG z>!H)8N%hD=rFX&4dI$0R;2(aXmzu=oqp$@%kJHP2~AONPGiUPd@ zP(SCvj80fzKO7!;cqo@68{0r!@2=jSBZq8tjNiYkzo?B5NI0*K7r+NZE)U*a zx3x8I-NO01+uRo5tEBIRC01_2$&k+h`j31Ke&E051A^-4EFF>kU0OI0aSdjn2eIY& z{M$IdPof5h&w93XEn7bjH%|%AFU0$+^#kN^y@Xx>X~TE}z9$T>4F4XXN@siFl0Lw% z%)@*2yo9iz&+;2UZ<9OL%%w}$?VVJ7q&7Yv!EEx_)&jR5dA-@=OSe3lw&?!r&4J_Q zNlDjmk0K&^azf| z`~zknNc>OQU&{xOdV8B{rfMV15ok~w*}V7Q!(nIVpzAr9w@Dg9IbDp zyLm_--nfLHhsD7;DaLgF0q1~slFUSkVcl^!Kxd$rS^w$t9;^*`4bPkZEgxWQCT8(} zHK6~e!NJmBZWzBgI^zAVB&Qbn>jWh2-OupF(2f_(UX3rqddQ@Hfa3f1FNAgaIgeE9 zQ3d^>;_b@~N*3KgyxFbRD1Lrtp>(%XR>1)tQs|_=lpI*)W2eIB^?5!@4~tS}IfCyn zdjB$0B%re6|0Z^oJ|%WDmlG zz(ZJ%;zu(3o8BD{oPIa*1{;C}c)Yd`P8hIN;p3HmEV*QN6USFGo2@h}vfML&iaA{0 zvz`$Dp?EUv*^1{NoChD{<0a2*H~HAO4krs&9}Ee;Xrh%5P^5Oo@E__2umeQ8@59BO zf#b6Fyc@cu-~i~MLs0kh-avS&wx@lHRrL_ILPqvBPBWbvxbmnirJa{|ve*eJBS;3jm|5j?fKsMit#Q&sC@&Qz2=X2k8 zesQp)&?jrn20K(Q+NoTj^Puhi^6M@*ZCA7_F?T8XCkfVTWW725+Qn1m8iWRHo;5k? z*>*0}Ys#9s6ZY0?QoMXaIg(M^v$KEr;fGAeKjz*GMNj#MxU(H|Gj6jgz(5qK3%PmMh1Nx6g zv-sXCcpJPaKhMW!>?_Ib8#};0(R-6)^gTTWALDp^_I+7pM{OMbc19P)>9<#A&3A!( z{rmRU{HiZ2zQrA=kHB9^@BxaG)=WGA<|FVEW8)nS#SNiJ!EAj)U8B&^lR=-s%r#@s z)mlEu7u64Tpfi|y4jBJOy~g8(c>?XWa73*u z%;jy*L(sVdlRp9f2O@7zjOVrCf07TNURa;_eMD-ow6LW0$AJoPN`0g+6Z&*HhTT5!YJ9t4u z))&yk|7oIkt}c&!y}XWL{UXZn^vR=BUflGst*ft<>A-ybWqkn>|C2U9Xwgp{t{m9X zViM1{wy{A9>8d(A&=-8DdVhqmdjIx5DXdULdyM~8_<-aCz+djh zMZ&vq==KJX%1QZ~!a|R!FTi2+7e3Py^!C!MF97&iqy8Y&LxlVh*8h~SgUjH5HJ`!c z7vSNA+Xp-U@gP{2cLw~lgd=hq2>iysuP>0$%<2iK@RU-z!odx(dVNfN0+J6P*VnNt zj==qZi5la76W|+maGCf3(3`En{o4${8+riv0lX=9mn*Y@a8Gygu7|B>ARmSRm_aaq zg@=mZf8q^RFLxh27!(GB1T8*P^lV4mRmizK<-^!l2R(-ZMzF#77MpS*9#U0rT;?-Y zC|IbD?=b;BAlhEA1VSQM{>dba(c_2U5aoMj51XOF|5$AccAJpzAU~kBxod%$Btr=G zIw-(1=iavAnNRqY<@4J306Cljwom!&@VOEAx4-az^MD^v^8vsH!bb1|8ujoI z>Wh4XHaw4yhL5Ml_pD9+p0s7rj;?}NjDA0!A1ZiD3+@aE+za}8+^B`8hik>(Y&{X^ zZzj8_2K3>~Ku-?eBX-MX>Mb(-36t>;^C9$Sz4~LJjny};XBGhk;Nvwa<+mtgvx(Q5 z;|w2f4eUDgRadR&*TDZh>!9|mFaVC=@9jMX<~JO#^r@Z!$p_>`O!>_Jk1DKP13~XD z2TcL&1DoQKmBU=gck*yafo?0-|5ML*|C64eHa@^+kw1WaaO7BYNUZFj8Gk}OgT51i ze?0#z2jpZl@c-Aw2ZVWYzcp?BhwX2F6edgK2+?489WbLuQ}5EXm}@Ga(N>7RWaj6b zrIwYzcQo4LdT2l;ek~u+RzFb{|8H~pg>6R!ltU8$KIqShu3efuG9WNZwS6rgK*kFM zWjKsX{^7xv?LlLdg|Oa#*P(Rv%=>G$bQ(9$-XG?diHD(n^s>=y=d+fqv~86oIZrJP zF2Xnb|7$)VL1G-Vt|+rR!!JSq4py35hdHY_|v(gDu%g=soMs`hFU)?co#Sf%tZ_$+?E z+slf|1FNRnslH#-$$aF$5(%ltyNqJ4_u}VODbL0;=pvRxOG|dX~6I_@Ppe;Ti zuhb=#*RSVfc60(ip*wHw(}B&ub5)dXvwcn+#`|sK+bQznqt3h8#|zG&K<&J{Uz}z0 zKt(7hu7s|-yV5EL)+lT~|3DFA--XeM`6ROcq;s4{G|k(xdDGncJ$v-%t&tx<@&S~8 z`)Nx%r*AeF`kdar+CT&UlYD?;N@K3KExqf8Djt}+tt%Y1J?Y|jzne?ufEx<($yt04 z%L$C{G2ZNp^#Gv#@W!)+dUT@~f?hy+x;Gxqc4z4m1M5ad9Svge*4i0^6~FyScQhqF5UyHRLCDt7Hf+Sfck-}y7R`rFqf4)e+Bv zYy;%pi~~L$0WUAPwC66guOj@}chB}2VEoJE;~Oyu-xlmNG1Sk4H8tht@y-tFBUaC- zDnCB={&7xf+EU;P4l#QAhKS`4Y+RQ4`T2ofz#4}$+>-K zy{XZq8xJQq9Pj`Fr8#d}?Zp?ZPc150e59c#IK<}GsNuVYLcN2JXU=$_14)sa14iw6 z)_K8I`#9Ty^=f=?sfzdi4Bs0=xPz?%&7H6q@4?#{{4X7~kX~MuaZGxA?!+P(za;)w zY~13>5s7woRK<%(2k07y))=4}W5%rBd}{*KZ{BgRx6RD1aC;cUL*jpX;p(JQlGB6c z7=!*FQ~(It;oHu3tS`5}ksthm^VNJng5=z+Qd83(u^u5-B&1e4gm(Wk1nLpa@%M-E z4DFdax8KYkIqdM&$_H5Qu$UFmJH4N!nKiS2EgxXb+ilr1({!8f1Fr|3_sj}`A00n0 za_c#d>h^!|-+9V&4Ao(WunXB*- z?+6SJ*n=#edbhJnN(2ADGLeb*|M&Fp>jQ{)hp(&fZh{2#{TRH@`hR2t!C#HxDEqlG z;Rah@5b!_aF(mZ_Nj`uAAc^E%IKQBd&t@dx_*5N;*N6452^)VAhW-5`V1Wf2RxBj> z0BVKM4O!WDq$4;@4NIV2^i^F`Sn&yPy#c(#`t*zX0&u-JAD*c<_^CeW4#f@&O4S9Yki}##FEGn^$1`o(}6r zReRg?1aWkRJEdM9tK$PmJ|H0$;(g`Nhj@JneV*{_^Lzoo4@ABIwb2}HhW!6(uT6!U z@cTncJU;ok;@K-ZvC5y0-)AxXPcUO67u3p?P~SSIN!VIh0rZ1-&57@u`)eFu@kaf7 zmcN(2ylFwd;$i&X(vk@L^Goqx98m5+TXiSVAEzT%s9y&R3lbJMGzB*8ZUTOR4gr2) zbNHL_dh26ZA0VW zd+?|4?UWf1ZVCK@kl`EV?_0P(et-NcnaGLJ&qq?1Oc#ZVg5vYJ^sE7rO0P{udU|>q z*GF~aAKRb@_#a3GJ%*H%wYh!X^$mjEv()69PvFbpqna{a2!hIo0A zDfcht7)CGxWb}QZV7?7JpUe{m@#kB6nsV!r_XU-T*TIpZEr5z44iiKP@Yh`gDj$DzJxq`=60eBnExGpb|eMEQLAASOT|5 zTmSRgnL-xG?oP8M9Ycawczo&)IeSN~dFG$+K8@1D$|t3E<{AlsKgQd8`_)5w3X)<* ziL%67#dl{khW+X^*-XyWWBD0Pd`h-Q7OMmEteWou{g+>1dfJ90643w0`mZGZCvB1s zAm=O6X8B{NAE=5aQO|e(6CXh83s4HdHuO^LL~qb-+SxiA6C0Ct|HnXxF?-gtD*p+2{93Mm`QiO3Nz7A7mdAR|B>pFD zDlX2Te}I{8K*-pMMceg|B3~aFiv>b!72f+?KLDl}<^Ohk0LcgN<3gh72W2iv>s$XL zJqogaNn4}d;6hy$KY)khcrQ{<;A`s(JQ(0Cp8c>gct2Jb26Gju?!i4nUVR2+PT(*-u@8<{Zix%V?ho#?%B z;R4{Ap`!Yk;sKHTR*!*D0!g)zHh=M(tE=bu2blYeg?OEXs8Tj={g20b+-1LBZA|h3 z)*Ps~W;K%u2*4RL9SHp2JnKP}z&fUYdHcfp3-ZU)2c<5}QR97uOOC4lV08u?*?Wx#*|P;VeJ-_f^8GhTqq7swm;)-#2E!$c?H$l#ojxV?~%FKf3I4Tb!F{_-?2 z@B!)RFW~6oEm!hFM?>cW{%8E*wgvXTF?#y2pairy_>OXu4T$Vrmmo6H70DtE1JN^#yucGQovXfr*(5Nq{t==HXXGlcS0n`5JH!Utc z{`qsb0?5Z;{Q0=AszHxY!R@4I54*Zv10`B$aqPJ7qMOI({`l%pAC39~G7(qcf`kLr z>opSp=M2#0qE3d9rw;{o4G!#ziX2Yzqa*hws`*B3e1Kx<7T14FM5opIDLDS0tvATT zBb$)<0i?}8R4+QG8?0w-GhO6=1J;K`y}`d?fKQ$>s%`vg;{&qiSXVCg(>d^}`U$g> z^#`@_0Wy(?$t|N9AJqP8YV+{MK~oR*4VnIGU|)#u*2V|88k}oCj-&jo1@!juPSzJ7 z@jq$vsrSocd^6LgP`{WNLG3ECo&af+^#;lK09T_s4F3Pfw8jKM{J)L`orL56*Y5=U zpI5TZL4YdoA_O)Q4L(2?z1jiB4)ZDe!|MM{27jVj|4$0|e*_!T=#$9xna>cq*=nS@ezVZHr-UvDsBrvsxm$f95DfBg6L1xP+Xnh1}I+zsOWAdVqxmnX?hUsyljOgg7<12&INYJ<&CetsLV@ z4&vZ?viSafsTW}L*tC@s2#|4ehK^5$rv5*PpFiP!6`$R=lEMG#_LJ+OoL1pOz8*X| zIv`VD4*m*)Ur@BNzX$mr=KbxOZH>h6b#{BLv@8 zJ!l{Y=ys^Q{MNFz_<5w#&-dl<4`ZGK+lhb?`TTEY<qDkJ!rp~lA#{?t{OVU#hmVllPOy)4*v~AjKs>&2`Cu6*?hdK@% zj;8ME*m@1MF5=AlKKppIHS`D6E5-Fo!M%YQ;Gnvi2sF7H%tvQANDg`t%l<-Ell44n zz&2Te(9IA299=7+V12%B$b|j&TJ;08@d1q9Kh_si``gZ&DW+H32`PA2;c*(Y&eYw? zS{OY)P4~mc)^Lq_0_6OvjSo;nR@wzmV$R2`(5J?t53@Poa-XopygP8I+WIpA<9(Rl zRhts@9I|wf{asvdFeMY_uU%F!zO2-rYuJ>hZC27P;a&O~KgvZYL~Z_m!2kG1%?moU z)i=cWIj6a=CAaguypwB|?e=K2L;u%&0Pj}J+Q5r31y+NeUOEdizSjOy*B4O7v&E_F z4KnkI$$y(KK!tRr)*T(u?M#x>&r52(%7mFp~1=&S2D$&Uj?R+lFJ!ha%pHCzI{@RjDyBIu$&xUL*fBucBSEqy`bz%PFO-MZZzir>F z(%D!SEpu8O9olmm^k;1O`;z>z*Mf7{OYQxw5nVGr)` z-La1zz8~7~C~1@V0wn$?Z89H2*M9NntyRhu_lEsFti=QBF+lu948&XH78V{G6Rfa{ zq5Jy|g?+8#Do39>KGa8ap7TfX*7sW$O+DPRZ?Fdb?|>?lcH9bvj>7$u>>Y-9oy~KR zLB+g@)9nz6|4)3kxAjc7k!{yU@&Re0{Nvxg+8j&;KostyP&9z3FF@KPACR!u`td;{ zG_wQL>Znv!D<_im2F<20^#(1~_0zwS54ibi%{RdpX7)HL^HxInY((OJ(kA(U1T!n@ z+7Wcdl4A?mYPM$7sttp>CXUl-xiRU$_3}VizlOT59WwJ!dnUUb>a!B@0rm?<%X>*$ zf2%^z&@-ry_|^3Wg(jcs4FW#bR$qYR1EdbaPPuKbyLo2fGFPEUgwoc$G#YAfmtXzc zR^>VRlI*V#P>2=Ug;-30I%0&gVG%s{IBxoyN<+qSgG1ZgqW6NLD*A8Oh90!Hlo-F!!fsV{)}8;qbyJwX!xlQzi*P#+zT0quZR>qISW zfcc5V=aW9e=R|#H!v9a=|Abl{RzCpNr+5c_H3adrSket)eZ98)Q|5I;nW@*KuxLd8 zO8?4csuTvdatjAX`J?$LVF&yN;t$@b`2)L(8jlwEi)u@tpgtiNwPHPOTn`c2!{!ID z_qRqdj8lOD{Y6ziTpON**DHQMYFqD+pHp??jFGO812?V4MHq$BHk21`;0euiAVlE| z^e5z_V{nf$BCgxcy}?KJB2&>uuwC{+ynj=CQ>Dm7v>R;y2e5zif6#rl6THglc#{$J zLLC#4hF+lt9)4Q6VkWBx$PnJOo+41;hc3!3ypIXhMv)Wln~vu@CdXZk9`rn?*`+H& z5P~n-ls~rx>MPVzFc*UT%%inteBvkle5EIZccy6Q3*@{v1u?>opqI(=DLM5NEaoAk z;PTdWb6Px53@vJh(Q|pjI=dA$eB_&q)?=GqvTDncT0W{wvS#%ClgiRtN?;FT;v3{> zWJ5|r3Y-u04H>=ui|Tw%f=|)7{=V$})MMp;zxw_G{$FdFbP-y}c;JzBGUUSpA0UVD zdL#$`6Uhe<@d4WM1t7nG)emrG*H=aSCragbc+ymQQD5={=4K4uhj@V!X7=#%`Wz2q zexP1y3i0T8EU+8s1pq!~^aYteNPRnG=~xW_f4n=LdwDhrvi%2{-0jjaMT}aoo+0`C z@~U&KR~68LS1x)G{$Pab5vt-5@ZrG!&(wccvL}Nz&?i2Ep$9&A9dXzGZWB;BK81~ubL0~suc{BW8+1qLi`i9RrmYL{xEZB>o3*#v=K~fl_3cE zzqNVPx<4S^KMp~>Kj44UiLoEwYF;0Cy^OxAn2Atf*2@X&kQi~xVZLLxJb$S7_k=>` zxO#5|r{ez4lblUkVv#p?4(59m+SmpS{}bhU0{G|fUi^#teh=HJ`G9tM0Gt2Y_<*S^ zX5jq#A7H#Ce!Qf4eL1HEpeJD09t}js6@2_YRn=$tALdhSd_Y@$L0Eq>ctTxYfQ8>k z+GDo??=>0;^#srv4(R6%-ffU<%o)i^<00kiWhf!jo1Zb_hqnII)Dy(dYs{zdMeqR$ zo;x?1E>8wZl-ZHO9Qcm)3}4`apCLtrs@?(f2x-pO|JQs#^56p56YBhRqZN*e_avF4 zpkJH~j;DcMKxZ##z4rPOV??As&dgy$L|5x(?=zrh?6s0fe##P&P!4t#IFII0^TmG-{uWr{x{5$UIsc+vga+;{X9Q zeg{3mDRT#ZSZeEc1#0&6Le!9q1^Fiq{}dDKx6Tvv{8z>^^$*Sf*ua||Sr0+m`Lum* zbE7Z#k<%jo&dg%s6Qr}9i=dvs&7-lMJwxOi;8T`gnhttxFp1kif|H$%Z?CwxxLvz; zL0l(@uzYoWLB+-FQ>&KZ_yG2K9=XhS=$oUud)8idLh|!{K(Dg}oKy5M3UcdU)r6#@ zKBV#x?Z(dIgG&Iu)=P)eUEluB;B5 z*!7qBXLXlZrni^0HyiGrJm0QP$XS`*y31P+1$!WAZc|qBap$}A>9=`>uRwp|XloWv zx7S@7N-ypQJ16%8h@Y5Kl%droN2o_At@x0|%O8qA&tpE9x5DQ&H8n`bXVW1^bUvi( z&WpR9%P#gzQZ~2ab8PS7DO&@>A*2b~OHJvYSDhBn$<2I; zs}NRpIk|Na`|kh+kO{Zr{T!6jFwVrd%mCdOyUxSl>PQ z2_aHw%g_p zugWvwn|P~MhFjHTB~Npm%-XHWn{JLz&8#Lmxz&w_KLw-vZWh;!&o1uD4wvd`s<1oP z$?7ti{Wu-!aj!thOIFzK39VATjU1Im%b|a1XwSqUcj=#AhbUl~acN;e`RIKSTaV9z zFl4xXMYy+5g{kfX7|#sfEp>4m5HRr3ezzOrl9E>A_u-fL-`XDPgJBsHIjr7b2mBAQ zqS28pwaEkCj|99-;D6Gl?7bYiI$G&aN#3_JSDT~zD?im2u!9mDB>pGupya@=J8zqz zP|ltDKW9g2tv6_`g%9uzm=LEg-!i8)b?%+@uxz=%@=8jQ6Pi0FA1_E?eJH!Ka;zEp zc`78UgasD|llY&s!_3MYjjc>wuE zU#68=+>=fEVcD|8ud6o*@$O;UceYd)*8HLySsN*aozxT5#s}m%^;vDlIisBOAyN+_ z{y}fx%X)*-(g`}7)7Ek}3j`Zz1pZh%cs`a_sAg|?1HbEw+>ns72?^x5zI5!Pbq*N+ ztJi-}uiKp~g2_dP<3A0a=vaP+5Qk^O#(agU^FgD~Adb0?NDc|saQrXvKWS6SK-3Gq z@1`R%(xW+_>IP0{t49o9F*myf4pMH%Q-!GGH` zt3#ZxY>2+l4~Ro7{#WHgB+P)$!~P)5r@$uNbQ95VMmj=wZzkBWt9{gZg3S4(N+2`S>TPqCcvAtc_>RkHxC*+S(tIKmYaD=8hI;k99 zVj}YNHkIRt(HuEAq^B#D;ohbq+}l7IMHUx>UgF-0&IqCz;7@WI=1XdLu-mDpUC!2u zOj8jARFnAECe9M@I2>W~CJUd;g=py{j13)9{4a+V-ELAU)%KCwtbN7x5_}F1)256$ z_aT45b&M&^`~e~{@Frc+OP5AM(053!giHgC^O5H#`^z<2m#L4S=I7Iz%D9>V(k4Gm&=9_rtrtEinMSLae*u2`(~e4pYopx_!boIL;6+Td@WY|6d; zDL38xK(Xxqg6&QYoWj+TsQ9H@=o12>X;zz|Q|F|2TqN zA?zZj-gPW-yW3@H4fHJneF<&-G4;d#%Cl!HI2>d=AMh(?91U;GAFD zaDJALsE3oY9{cQrB0W=)4g&uTvuVTk_0vrt{~xa%*)6EDA#2uxZm~5N&T`~(F|wzn zE`rr-zd@NUm;7G_y$rMM(iZQJpI>d)n^0vc!gwE^PneN#zEp;q|B>VR0b%Z3D^u<~ z1Vez?8GZktPx}6pZI`X68shI4>Op-OO+2oc3i<_5%|gv*d~Ln}wbU&%>71}P=m$bf zk#@Xjvj9)dOg#ZMzUeFV1U2}8k%7Q>R3h&u%;V*y02jdYalrS1_7^k%2k5Xi%+}a$ z<8xhA_ZRaI=hiSc4>P(X{wHlJ)~+PEEBO1x2=aSpgPx#&Yoom#oDk8NKgvmb4EYB@ zad3wfw)>Ia-lYBa{^14q_p*Q!zxUs_bbA;I)h!JE zDU`p+R`4S29X`JvFB|lUmZ;jNieJ|Dypo?w7j@OAb?yncL#}x5&kILIqs&d#*ksup z-!*LvkOV02+{Ifd|MadlMzFl&uZXYoIdf$**wxkX)$#EtzG$=!^Zmu)1qysU)FPp* zI~V$=i$J{fxgCmibw@Q41VJ2lc4{>t&rjO?&i3m574~-WMn!sTdqTEv--&tOJbym@ zG;rweo|{FRyMC^0>>k5Yh<{M%jFMN`G-N@`OEbl?^o=VhW9HM>Jiy$J}=2}_|x26 zfs-&K7${Kdn>tYa=|woN0{9WYUH^6M0=#i4Bg>~HCuGNCy3xn)&f0*&gpbj_m}krL-4YZ$tAl$PX+nz z5a#T)p8|T5{=q0XkNzkz_ZuXb(`|NSVdUZ2VaeZY$laPBZc%1-7DtrEaK;^7@Z>`4 zVVyA!1yU}`JF?H8>s^sSL3KsbTG0ES-GkHc6rmShyw+E+ezV>N?}riRq0M+R(uh~m z7SBX}o)Bw#xU*;^n?DOj%%i<2m(I?^UsnfL2R`i*Y{krF(89m)3 zP*l~a9TaQ(UQZb*lYi48*?<12L>Sx3c;$-lIlE1H6NDSzL48Q`S_d=g$v}1cKVbb5 z>Czz9jsS(Pm4O=Vw?6;*^&xrKT5DUITT*e2vH^BH9)Ew*)o08PiQxrBaA(1vmC8N0 z@D^kf&ArrL%!7FLZm}tAQ@Z{J_3eU-{DY-ImJJaL^-Md6wstUVw+Qa1ylOh&EA^JJ zv!k5Ljq0e5f7a}ujO$jSATbl4-hh;boDg(mg!!R^6MT{!VWr%UYb2ICu57eY<>%NW z^(hgJ<)CeT!4p6>U7V=9^ndj<^6~g)&dm~Xz>?2FYX3>pO zN!qn%*ze=9f*-k4qM!R@e*ebLLzhM|>@%Cy=ZEWOo?!BPq+MJ8Mf*%*HclLJ+2Z{MV-eC3 z!3$7!HnOI`bKlZ{CS0#OsEOKWaO1lCFP(V?NA8q?J~veQe!0R;#13~jsib6))Qyw$ zo`UBe_6A?+w-cf&+y?YaSeJTdtPaXMdq&=;dz?{W%c3U#%l?6ohG(?Q9GMz(@u{3g4G#;Vrg$o@({morFsW|0u>9S#<5dM2C< z-APiG|eN*2>sQyx&H}iZZTB-egoFE+u5P}4I_B@9)0|tw4%KmT>)aOwomfMQzTni$Jbp zH$MJ?-x>7{=V+Eg<=U}FDrcLQ%*hD-57zjZ~@(ciiCkPq5+){!T2IxrhiyAx)O&>ep2iG_>r z-m{UUnF`K-yB!$e!?YAeLeh|{x$tkG_T%D_~y~<3b<43COgNRzqNK-O>|B4 zwPrS^*jtp;UWEL%4JpmLko)K=%r^;=*H3O6 zqpe|06AC93cooRx!=82rw|R24gxOuMSoXsGSqozwDS1lQQuchDU1$f|hN7v!F%bc0 zd)21v9z8FcBu33A&^GgP#zuXiS`=(uV(tL#W`a!9LstE{4C)`$mVVpo4)kB`x|-FG zV83$w^$H_YGci)E8&V+$eFEb8wAn#;t!t30OSebA6dnykC)%S5kCW=&f%z}mG#9T} z*sVrszmBTFi!De_h0V?^Od{7Q?|~TqFr%*lg!H2s>hD8G5Vkbh#TIdMc{B$(iI*gz zY#h&G3;!>N9X9JueD%@~EF%<_1TQWO@l<-CVc=IO$KPi*SdUntiWUE;Z5V%X_*Iw7 zp@FP_2Kb2_zohMY%o^>-KUd*lSCKGxH8%0v3g-X60Q&Aqz+YfD(yq)HBAkssg74xj zPvn%liv6F=8}vkH`27OaAK*WvZB1wJ<^vE>>wTQCf%yH;&PUo*t-C1#K97cf#A31b z>x*?kPU_Rc`#($q@mz2|ykUKndOJAZGSe}`!>>&KE`FuxFN4iL{n>r0qFXzLANYA%C@`OZ|5f}!VN)7yQDIp zAh@ugsZc2kxZ~Tu_~aT&V%A^=AwUX;I{l08W$s4$K9g~Ku4LLJTeP=oKZxdZJpKph zBRC_b|0t;MjYmxf(W*KRG#d{>X8USBAVVMUIj-D`tEpEb9)s^0yjxQf=c;wSNPdTV z0r-IZfVXWekadNM52$9_V{NL}#s^@3pw#qPiSE(%_MPbJmYbJ*pyooz|3XLXxr|yd z=oKfaZ3a=8koZ>{{!Uin_Ruu^AK-OYlyFmp=T-A*Y~KVbRHzzzc#R!U)a9dE|seFkmTX!Q@c4utgr zhZ3-89n~00CKi`CzB{}&Qmhv#0zO86=S#hQmFHHyPPrd(QgkxU?2O?-UE^J%eS!NH zzFJf$le-H0^m8{Hp_D*0tJz7}3ikY%@4#y$ay}<**XDlg`5CqX)yU-U@^<+3-ioqd zhlG3Ij02O4sIxigQR!D-9OR=b$w?QFa!i{X6E<#k>;dm9Z|?d%9DX8Y=H<0*n^IX> zdM)W6&Y0eug(FYILw$ucl9&R0*`AX*jvHrOY1M`J+{3r;#aax06qTNJXO%AG=c@Py zSoDYhUtW=h#9Z>Kduw3oCH3BGddeOUo$x~ z*BgkqA~QK0i+SGwIK=*J^`>z@-r0P@r*KbXrTuE0I2BH=FT}8?zLu5RI6dG9AN+jg zINoD?^PLAnJ-@+^UaY+u1??g6CwYA8S3?UoBU?^}QHgNWsCmdRzZq1~YO1zeT+86u zQ}ekr%IQiaiT7Ra>Y|4n^bqt(^I&hX|0np*!$^Kum@*=LMoG%614|zR z^?Jl8AQg?I`^c594>REp6>9oR>v+&;?^>=J|4$h=ZXA-844XR?iHGWCxo5dI&TN!b zv&U!euXcYNwF9mn^CNKmy@5~2yWDU7GLCrJfNj!7X^TtasZxyhb$nKBZ}EEwpkG#E zBVev~pIJTL?eDRCi}|J4M$EYIKRP-^uzZVvFVW;%Ttn{&1zhv_oQp1vE{*Pu)JkWA zqic8bswNzH`R-jD=wHOQ*dcNCc(^$1zaa6W*-gu?cL2{$-0!mAIN3N^x^oCW+AW?_ zm9lUCN$A$(zTcSN;~c)=Ec2}2zf1`HS}z8#UZ3;`_Cu2rl7AHU?S!V``~|#c=NU5m zLI;(8s_Y!b%N6^+J2mr^OO{8LGsp%kWRtRb-aM4&;|bR% z-%@+1hS_EEesg;u`G>Gq{&+9QD`D|JAF#hWoWE9u|7(G5$neP+#q%1|zmQ+l$>7+O zp?tm}O6UUq70jQQA|bLjb>Q!BwrD8pt6P?z;p6pf00RD{VleO}o+TpKQ(D;mlJCRE z=Rtpx*Qd=sVF`F2)+y>O?K@)*;tCP)0fhxmHT~zcbMgD34IkHpCCPRDtpWe1u>Mk# z51^ij;Lvb9{4!kGReN#0o675{ThgR`8WYXpJ79cH zDZSeGfXJ=zzSqJB*vIu}{oQX_221*`eRmbU-8;dlBdT1T#vZ>q{&{S?S-kzGitERo zNACVcWjIx#uspLn}RBU%~$PMEE_fDE^uMox$hS zysonDY%?&N&EVQnL#{6A&!UW^|lbgB^C!C zc!lSkN}oq8-ZwMD;YZ4Zf~z~efAB=g3-)Ii0Y$gR4E{g3eeW#%&{m$~(=%%=#?Op| za5o5etMq332ee5+5iGu%#Q&tNjSt99)nVfS0RLdfSx?3TXz@3b{`X{+zZ_iVhzEF7 zBR-&9U&RMtHb7~Yz`0##OcxcY^&*@18(E5k;tK$a;O%oh0DC;Ynh($t zA3$w&;Lt|)9CP{f3Eo0YJ|KJl7x4ia@f1ODz4TMW$%x?5X}F##kuOBr3E}=3rsDHL zb$?6aY_=ptWfow71AcxH%uq-<7? zATGoQ;Po12#7X};)N{2nlC$+sy$3sLZ6DcQ3h}adyn%O-XttRX)YG!&bpJ*Vxz)Rk zMD9i|W&brFkk(M$H#yR`Qcse879m(aMin~go$UX_yuoO1|h7C3Sp9lRXJd*yjgyyWKBEHF1QtHtpYzLF8# zWXH_m%B*>D1BxLY;C}ue>u4Qao(gX#bT()4zv}%0s*ZD5w{Gc6!!({nd8S zjhm&7YZ{27D2SY zW&b8wX;FHSk#N9@G0HK@(T6+uQu7L|fL~bmg7wGep&JFg2gMoGDL*hf+25q?`lxQWuHjY49rCoRXr62g&o3Hnqc7?VqoiKW!X}$uG_kpd&fyAyI!ufxp=| z(|Ldq5)N2?aTX+`f_;3Avk9V|uPs@7X-S!O|M$ya98Yledk7^s{rYwBY2W-IJ;C4K z^RE|cZ9iVu^zW1Szx&NumMDbNQ_wzN?D?DUV@$qt58xkqjK7%v$0Xn%g3i3=>Plvy zR3!M9`M>1#YO`ZDI@`5FLc4YoM7k4lLH|D9_BQ9X4eH!Ue?yI(c7G#zeAlxo|3CA* zBV}G`zau`JT%Yh3G3@A~?E3F+i#WnX*{>JD?te<*7!T<#;<0ANu)+9_+5O|mb}0Ac zgV~4v!v0~!KwVs{%|@=$k0Z}VS!{_IA#y+U#4&A*r*|OW$#p%z1$#UkqIDu+{DQxn z!QX(FvB&&h;APfdUyHr<@II(5Evhp>bn7s*t^bZ~${m&GexHH;?;IERI9T2k%gR}Q zcl5=`(yW$J6TthqojRfHXAqHzHxi$2WWWERb_e*!uVKEa*M5wzcYTc8<{t0jUU@xd zfgvd1a%vo4{)>;VJ^T9%XC(Sy55qgXtgI#WZYGW=Xw50z24_>E>*Z?v&Ek=;qo2hy zKum*1JVUwYm|nZf52%5n@NkH{vwmGq0>2SnI1Dc=9qb<aQhU-A#6O>N>DK->^N z3HS;G@ntgoPx0;Z0b%E*tMIy6Vu$Ju)rr#1p55tr9l&4hV`RHT{29Jx$1gcPNc(1@ zZt+ys{|$OPc7S)E>$aY$Fr3q#i7ze;H)rwkkJZ7zcB0@~^G72h>KBgZFi+ zgMWMa`)6Vbu+|*uw?Fgoei&p26ox7bi$=F&;thU-@O{8>=)dIy$o7-*4wb8(>wZwR z|L|<(VaOj)#XICN@x6JT=hgWG5b*&1zLBkkIKQC}6hFlNd&S6)tFdk3pIOM*&aJF} zUtOQP8|&|%Q~2sQj)$mRt;6E|;>hCT&Be_!vws-=Brq7VCm>=#DoR;B3DNVm>v)G0 z4CbTkwOqiq$O9 zAMXU!+VX+y)7QW(`^s+yKHY%2=w|x)DT|%FA9&poc_FV_6hG?cDGLYw(#*#DQC`o!6u4k5zXvgAxh$qBv4Dx(mYf}Q?M}F$E4Tp3re=gwZ zmhp`IFyqyn7*?rpR+5vADKg+)bU!Qqa0s}%x7SHJy)+RO1ZY>TCE!2!-8crIz76!4cltjGBJG;~Dxlo)L0MYfqWd+w_sH@;_zsX-WDShRggYZ5S zxwrY-vB$kumH&X-3LT=9DOLFe@c82O#pn4B@F&PmRmIn{^9hWPJ@+PVHs9d8BxUrH z6ga-OU*@yU6`8K!J;gZ=5dUrvr!z_?!m8pvC}bjE(}TA!Lp;HTsPvVSFkiso&g}K= zI{~|X(De7W#XB&~L!bQnV2fZ8F7w&8Ki}`0bkBIN6AO#8;QcX*$-l4%JLO7xORcx> zI^3S$vYWT<(%;7Ol`6koW;S8zxC>F4lVlKI=2mZt^yrTNslT79gXmQ~K=2UXj@Qwy zH;29P=2Uod3WNoL_ZBrtF6-u2adN9%U;kYFbK+}$_j~I)(26``}}BtF$>^ z9smAh5DZ}Q`5V-zgX8<**bR6JsqrluVrPI{?6%)Y{}bmgsQlff&f8nOA3l1b&EH?| zd-OHL_g6r?MfxAF;Qmv!eO;EY@%Q;V{)7BcvVElO+SnGK&qSn9nF%gS^uFh08I@Ex z298BkEb2H^GJ}(a1g}~W|6kz$TGjEHqXWOX$FSqC=bd;*Eho*IF=GZgb>omR{YqYH zvZDq6Qx<-I*dKlzxgV9{6&bmIKjsUVe2XP5o{h1kTeclo`U=s;dMzGuWtW!kM>UYw zBi%I9&ET%9Wz~~S&MPZdd>+5vG@&WDX``I=?+>ZqRpXt+kEDG+i^bE$#cX~+EyEwk z_YH_-J%Fy4)%ctBuadvlW}m&xw&(w$?oHsDIJ>s-dys*Hj!_|fX0g5tQpP_ZRfuFgMXF zFxS7T#9|h%Hy|(DUDoW??9DIzm)C71T}v(sEe$PQq<4SrTPrJXFi4dHEyg{!K;$WR z^lVwDGHEoI@D(TKlMZ4WmKtzmMWOJm-$wIrsc|y`tpf z?}IzuFprNJ`(2^=8hppW`{1(TJk5^~mkk>)PuV!g{ZDaE0w>%(+9oypjlUZ6`r%#m zwFW;BTrZ#$`ih&>3%K>?5eEUDL4Nr(IDj_4A0hTn_kw*@()s@l7T{+I0wtx%kC4F! z$P-!ttjHszfQC{Y{s;O36aEM6kGCZcAHb{+V8&ws|BK-anezRK zvMh=Z!1bv(f6)a0zs2~Ul?V8r(w8&w=cjlTzfa{2lUZpjRUqW+fwzJBl>;a$i`^TR z7{^=5pZmMMXT*tdN_%hw5x}X(Pe9OPeU5(EF?+*EPs={AktoO(I{v=*a zf@hJllE;G6t>&wt+?Q`oAHcl-{gVADy@2|)`Zb&rb)pxof8SSM0B;X*p>|N<-pqNc z=7kO)GQ_t-g{x@ok z+Me&FY3}|q_n%omKyL10sz(?#1o~AR8ASU79NkR&2`G$w#h&^Cs-8hR$ap;K>E)W$ zHLJm2K{acdoNTl(26$G`gn^3O~@fJ8*8a*D-4a&fsW&X3FQtNe+{J_|GUuthX-;z<+LiNDtUzrFMD#|uTJn{Ph^EYm(&oU|hfD*fM zvLwJxd$yV*w92~=?XvLch4KC8_3ayG+UK!S==%0q2K1h}Kg@c2GV}XEZq7XqiiOpE zI(6;=eDzaV5E`J_4|iL5L1?&0)<>#}dQ(@QGegrekqvynlrC5w&~t#@06V`n;Ah}j zfeyW~+LQEQZBj7k|5i-y+G`I>wMQ1~itDME+cy`>W@{B)a|fY~7Klam7cV;$M8kZ&??TJt{8?*LUJcmrUpTO?c1T_RKBcG`_3!@vm(i zl;S1ZMZdO3V~I4?@XU!F>kNMxg8m8$BD0P!Js0!P(Rt{dS+m6AM*L5`-{6j5-mlC! z4xZ;&?{C^)Sumad_A8atN@{&4<}coHma1RhDc%{c->Kg~M4wb_+17C!`0e5R-87zGxdPV&xnUWLo&PtT} zBjnrVrOR5!Wn&nVIkZs%(-28boxr63S6`t1PI$m^Qx^lFZ+H zYuP1S|K4%L3)r8h1~6k);ro$!e9es;@jvx;0e(jAb^;VzCoc3}=Ju~R0`jF^9BXbj zlwwm_-vIu0|7iVi!-%$3KCng=5AIa&y;Kc)ma3~g4&Ej5?w&|4N-pYE#8X`9&|wA= z%W9)^qajaa#a$lS{R&jX9J$J@EwQH z4I(-wC%5c!c~w~l@IjI`M8! zGB+qqUr>EgcS-3N+^cs zsa&_0kFuVgn|@?}OBkdzmp@@1FZd7izA=^x;>8qxS4_y71m!T+m)R`!AuW77WvApF!%fXN5&w6je3 z|KZc8P47P{-w*VLaVmFTCRP&QPK%@|?M3TBugLHZ_}|6{XzK0qKAwJL_%z0RwWm;+ z7Xk-IylQbpiJrv`WM)L=JAsD>*0bF00R{aezd&* z`u3UoC%3tpliD5j2RfdqVSnT{6LM0KXBnJt;r_olztcQD;&DBBS&W2z5PlLSAK{O+Wnw^#gXPxAqA?GVV$Y`uW?v9Vs?IR4Mie1D}V zwc|ReL0SuxeyvvcuZu5!efw+t`0>MWf=KH{=l`b<84^O_eNo?mrB+w06p@jwaeiFu zqo?xc)1lrL$BM<41F-*Kp#k^=Q0O1&)YjzJN9E_qnq{VX0h@KXQO$neGM{%%_<(NV zCV#;lYf3xf{ipo_B(y)Gc93BS?_H~RGlyGS;o}jd(&xWU+VU0`@~2wswlu%7nXaGn zvwud{O8`3(3N!g_k5OSP<#?xdmVLNf81F8uqwEiqFjm3uFXsL+Vjd;oT*YwG9M=$BWRr^kLEOuXCZk7vZUjeY?peu9DjnS6jrA7H8% zVDbUX<7LLY^>6&YRNDLAM3;QMyLLv-4E)cG{|EVi|I9ytQNQ4Ji<9Ssc6nCe>_rVy z`B}NOK(kJCY+vK`5O;XQ_@9X89t)7&JzD4=hVqpUthS9hwAkc-M^1I!xbKNj@GzR) z$Hm2?*?5 z82?fXsk(B18_0iy9zc!N0N@`fT-)duU<3VeQpa`Zf5)v?8fYZ*B=h=!Uj606s;5tK ziz0_u;roA@UAZ9NexlD_si?NVz(Ugqji7>+B659^Hncxzp0wz$1q@^r`kAclJ*mT z7~`urlfMAqBOEiISAHu^et!7u7@$Aaps_`x9zIzAJab?~G_JoN7W{a&Z=Zy*SDba3 zTs$5YVth|PZVxNwH5HwMsaO&dW7uN&F@M#d6{m>c@kFX`X4tLN`uwtl^l#nYbP=Qp zclC#QZ`1zz8uypEKjvZ+Ut!`;M5%qPo#w>N42g(dehc=GCszjthOS`^4cqndaeFJI zIDhUe-XFgL@tyGcf)Dv+L9(vy0j(rC6OPB+hJ5`;|3#dzY;t~>{EJBT{Ws@=9zM8Z z)N_mSXHotJL4z_^-de^%qN8tB^ z{O^B=f5}^OOn6^8Yxry=+E%;|^!@uXPiHz#1HZhID|Ej9MAFNonqD^ES7MzhB2n ztoN@HwsgAAt4_{qcrg|84_B9Em0M=mNSfxmncHt}Om1$h_wPLD(g^Tds2pyCDu(OV zCe^J?CYpWx%&ws5qVHC2){<}M(D>eB%=6=E z+$Q6NMn6Hgm+=Jk32jiD--(J~&T2OF@d~|7=Z{DC@MWuN*s3_AJ{_bQ`1buD$NNlt zt|+DOegj!zmu$DtE`cmr;n7Yxjs1$#bJg>{lTqq+w+u99_pDZj(<8Kd!0&2NM{W@@ zll{u#(6G|75E!2s{R&3>J^m+5{(@?xgnELFijp3xW8h!l_dZ@1ZzwX55npqsD#4#H zniKbJ4&>`U)%%0upZo&r{VBh{efuv#y?%hk&p>m}4NFms#KOT<+g{r)bi zH!5?tgp>&VyI}o)FL=I{=Nig2l)gc=lYrkMoSoT&d49~rOuQdhY1B6uG?xwK<$FbP z5ooy%jvmxAy8QVS(8t{I<@UZkQTFPw-7I0v{3h2A^ZMMhUaTSzNCcFpj{exL7h?Ja zFk_xp0QCbP4|PJ-4{MvxKl&|WBTM}9p~e#`!+Qq)XU6PrTf&Ep_5Lo-Nd8dh4S&G~ zIT`p3KtDL}6QunFaCg4)a;ATPIX}Tovj?}K`a2F;w;db?P~33KJUW?0Ga!CzS{P$` z0Q67m1u`^pFn^NZei0J9|9%%~{BPo0n7@zTO7ata0P@w~C+G`_RtGA(A3!qkKkx?v z>fH{f2i|c8#eHK;-TejwI|ZLOBn3?c<^Px1Fq#YfPz1&wg#Z45E9m)61r)%y{li$7 zG?rSwDgV$U{~zxTKkgU;k4<1w|I_U?_xrm2H2+~b|IPjW|McgzgFGm_884yr>&@i@ z66M23$_y>K?WNE*3U4kSkTG|brOA)KG~W}R$HS=l_@i64jK}%@#8sC!;CguI7eMI) zM6&yo|GmRyHQ$iMK`#s3Kk^rFD{GB<`sv1g0{K}qe-T+9O7j4|h(Ehzs0;5VsBCouU3(4VhdYjfL1dPYGQ2mFaB$A*oLcEQ`n zc!P=m6Va+=EEcy5wK91ARj%&%9l_#u69&+~wx@0J&R-MeOB+ zvHty0%F=E~G4Lce4~^_f?>`@HTChPVEw3uE>5cye@a#p>LW)9XqI;_QRQ^~tsLJoH zT))rQk3eIYJ|wVvXI+CK0XuXiD3H?#zwT3gE*Qe~;b+9*Onrc&g-;l2FUam-5K#Hk z<{qE>TPfgeRSBpWRA3Ya{i;S=bG!3deHWMa>3)4Q(h9mfnQXO8cOnuDLg5IQe1P`G z6rQR@-h*;JT|nUOY7Hv`KZIi^I|y0L_d`hB>?m!cgznu2A$2^Y>sVC#6NzGj#~m%~ z9F8`~w*C~oEcL}WC_gA3TU_j((qY!l+I;JU9UOudg+u<-lz+$hN|>3?H*>KSiiL! z$BDK-cwq0oE=Vr-w~ikj3bA@;(2RIAjhvZ{>+6RN%FM0@Klps&WL~!}Z(B(8F~An+ zKkED8-o|^(+#hD_*U)&p)Hf8tujzVwA({jE!I$}EBPPUr6@ACE$g5~}ae^)`@VN4c zgDPj|{%v1x<0XI}!jIVtFW?K+zPO{9IsHN07L)$M@EXq|d0*=< zqGjVlA~Mrsfp4f1{<7G~-Sh16nxdql!9_fg+^Baro9Xld#`C+66#?F#ZYk#0vZdWn z6TNqn<7N2yO>5Vc#+wn#Z{YfI8Tk2W34u0MclgAy6S}3l%cy*RkKW=vknfMwlDh6L z;CDxWWcDxzazM=Wn~OJXY`>6LSVAbHIAl>K)erD`0v)3rFDk z_=zy@{^}XrwnL;paB2tQKg@04+;TsY9v_d6;ff&TBKt1fA1!X!ls<019`qe$`>MY| zs&DK|L-lwzw?1>r$-N)_{|14dpvb7V2!?uwsZhVMo4uutv}{pe7nkcPfj_VNKyGf- z8!Slr5A+6}FWqf#A(UmTk5gTc>kKX6vG9|0cHHp|Y~**rqz~sKJ}em(zwI|a?eXfH2M&xt@*?QhV|94bLG7g`k0O8d zvQAg_MRPYC9uFTLpBeix`U~)M_(esCBK5wn#ysw@IA+ss0|R-6yPnBZKR&!O<36{%4_o zy1oC~-Erx0bVxxZ-B`LrKi7)Hy$F=z+V`v3Uw+#0-GJDBbt5MOYl9_yjBK5jIA z{w|!-1DMk@F!_t9@lKSU0qbG@6Fmd-{$ln|gyAXGA0Y`P1KvvJDNdUF1I2}S)_T$P z0MkQ4D1Cz>^MnIg)#g(2GafZ7Y-v41Bpf@|GiZHywBNvZicUb}^>5A$K+2)lIKfiX z62|v$TVOprLE&de=*yREMUTt-qKVR92`OQL{G@k*FYvoX*BgLeIrK=$3l3RjPs_34 zeF&Ai|4lxCSwFC(Q7?euTa6sOK*+xxVK03}?Ag-|jm>IJ;r~OZ7`1?zuJ6ywgMNG9 zXYbco&%pA682X=^>Kmx|Y`-S{g7S)xvPd8!i#frCBZCFVS^4t4fvsr7$IO_?2gpw@ z1APG7cl7Bo5#dggko(g$9>53hxQU-9kYfF8`)bDi!2Z2w)JHI5+Aq*}eDUV}6X^Z{ zuxY6j&PU%S>vyx~8ub7;#_K3XF*1LGw;Jlu)b!%U~hWbr= zSGwMurl0?Dy}3F3Y>p2gtJ<6R0A0#bAE=*}_CFLo=R`vi-On#yYBg|n@axQS{n>I! zIXde`O!b;%GiP!LsM&FS{WJz2AfLVbbjVH)_P^sg!tW=4v+H2DJ18q6$fx0mDjDfk z80+ngLk@HM&s+}uSAzG9+|5FLxCBZKfcxhnYta{ri;Bn7cweEEJ5l`x!3~7+|7Y+4 zRfAX+Y>5EI*M!;*dLlLV_u$QXn3MZN;G%;5gh(nuVN*9)UmeP2ZBj~?M}fbqLMls3 z8R|DB>0ZLk1gIfeD(iVNpR@hjn&cO2aX&!P-p78`Prq~^gU40ZE=We^{QjAK@^K@K z_5biNhv_x5{@#?|r};O?caAXn^U()RtTS71MXS=o`3hb>jT>Q?@>(vWFz@eFCV{3S88MpzVGG^a8_=O-(Leto~#_!h?3 zZ!_%tw4WX|Vr4$hnK858UZJd{`wQSf*gMHPMaaZXa|b>-7MLBhcFys&I>oBB6-DhO z-2-!?cmGts6Y6h&UIY35;iK!twc=87sh_f#u8*L)q4~c5jDLZ9lDU0m>?WH${$0M_oZ)X&wQGcu<8MN-Z-u!a=p> z{QQ~6=f~t5w)u2}{C2k`5wXjk1HZBR%03(E`Mf^koIXst@`FbM6Yq;wz3gC#R2{~w zZa?&7doI)?(EaW&x`z{GZKU|IGC_=I7xR0F#XV4*4|RK;<+ zS;Yw_icW}DyFot%+po7g-+N;!@FUGV|GGUs0=5?o~@|A76G z7psHUwY41`=OKTKa!$`--h?C44y!UeXeoTbAGNyyk5AvO-QdwB_Zv3!FKiJ7`3vw1 z?C=fn2VsjsGs8<4)k6OOs=puQzt3m$6=lPy{Jvj~q--Ma1?17Mx!20)60d@aW(h%G z6PG){%d+%pHulpgv^H3WWsfBe4#xbz!GHZW{ySv%S^ve{CjAN<^#oghUC32VNz8sZ zX^tyu6BZ7m(O<)VO;w@oBP|tCOA2Bm!d<>b?&BsjBnQ?L%k!#MwiSTC)+3?+XysQ| z_O)kACEfdg|7{lF%t4`0x zgC4*I4v3!2#fh_6#_v;~SEn}kpq_3h&nweYzo(Ngx_5US;C%t%(Hkd>l2GDCOQ=`? zhQo-L&8?rgJh6de+8#ANNHl=IAnZQ`e0;^}-V&zekT2vn`*@h!W5$WIThi-?4dR)3 zKACaiW{wp4eG@dF1Ac>M&aYOarS<8?e7Rzz5pSYMaM(K#sr|x{)(1?Y`&VlRw>jIf zJfJ*2vUND-3q;#yrT*bm>6ED3ckjk@+~4VQKfw#zF0Bo3JGQNE^-t3(i!6|--+;Yc z0!%eES|3lNAATW)=ko(!wxIgoWy)$Zp@X)@p57m8@XrGSeS;>H_P?{o5jZewvVNod z3J~No!LlGp+oI)C?5}qq@;eG3Yrin+8>a52^#58>+ofN=>-ugc)C<6a3o+{({rRy8=3veL`@U!nipN#Bt#tMaS zazkozwO@X_H+D?im^kqy>iC>h&t509Eb$Y9nq=s03)JVzgAQ-78r;hZ^4sOs(m5M` zfYTWXJK&rbtl7dI)cC|^@&OsdV}E|@)}9_x{pj$B>1acR$xqPE4kzF@s6NI}@7>m1 zy#P}$fIqK#aX#MB$Un$m2~2!IsuYMjc04`|=&xsusCs$k`DVtcRDS}g6uzX#_4Vux z_$tlIV{Ofg2*2fkbXl}tz#Ai9raNuyF94sy&m<-vAg{43MHa3CYYt(PZkUX;eYtra z$~G!U&r|glTD=_|17VHd_hAjk${j4e4zcABsNacXbnT7U;rU<`h&ZW8x+NK9)NDo4 z!N4~|YykYp+<#_F=lfyB81Dl=KpzjK=g?z4hwhLU=s7ApsUHwLO%n;O%2IlBqN5${ zzenSL_Mmy;S@s=QIUzE%)g7C^EVCkn>mFghIi?@~CcU^V`0?My+=jj%^w%v}*Qme8 zj4c!Y{?nKoCs>=his~;g)LQ`cU~%7HNj)a4Vl5sDeg?n?$#(Mc)*X(*^#XP!q+MlB z+m(B54{saSV^nxhc+e=Gx~6-}Ga~$XL~y4gdD4FGO;3b*N26iH3RB`{+ejg6T1!(t z;h*j=Gv7~$s~v@CSOaAL@f-QP7VV3Qp7gxO0)YQGiO^g=fL$MK?-{<^Rp`&@(zb0| zvw94+X5j3ep;i@zp4`EK!}_AiK2jE6kT>rjHgkq)Z0gEQd$ZOQjC+EsFOXOx?dZ5Q zI6fqamyiH_L~@u`5F_n>OaSLE1w}R0bDHoyexJbfy2|oaKGnY-p@50GIl8K{LHXEU z&NC?Hr<~)rKWIu~)CGY%=l4R?bWJcf{eJ9p@bl)Rn(4ng`8 zJ44V*`Q^fh$DZA+yT`714o~1|sS#ry&ldK{7_&P<_YU(Be*zz&?Bz$fcN>xwCA=Km zUvNNOAk3@uo=VYD++U!7Z6M51wT*cEKRiE7{I8H^zT45`*@8fwP$w*wE>$e~ITh>s zh3V19(uy;6ruqiB)$nBY_?!G5ru;U&f1tnjq4NKo68EKJzrtx}-M~NJw$q5ynSWG+ zzJmO)hOTe77&CSL|3Q9=yyal3M@PNKj7RxbEhOg&_-C#7`0N+iH61VD{&w5%t*kNp z*^vBq{r&b?za!8)QUm>LVD`I~J;8t^29v*nXRzla0`v$h13}Hq<24sE@%X0SeQ14x z=fbm-8)D&oZN%e=za$nVzEAw8dV@xN0hKKT|HFcBfDiHQHe^tA`3>-|Ah(H}dZq4U z|LXDl$K9NXz;A$AH~(PPtR=MrGe-o~%HPxh@)8iBPlRbC^uMbFnWZsa+7HQdDmypE zvtjvqH>`$cXSEayj{&~ZeB;~!q)t2sWarBdFa+o{?ei*3j_7dz$fJL=76lT6tFWLB z-hZ1WR0yJ~B8e4{-$j6buc_X!_<>d4%kc7k5~Qp8-oT+Q2h|Ad{yFB zVXYRqD^fNRmo{6KXLYN8Q@}^$QD6Vj!T`YA8MRIs;3w$B%W=r{{Z9IL^|@`^+95JS z;IVJ$w`}nHn~(c>O-tPa{{9u*%muqL7VLt4KMX!bQ9{=fluS{=te);k_d|H+!|I^M zvuJOvp_`g-snlQDVu1c9W9_{1ocaeV@znwqc?bR0kL_Xkg_VK;t`q!4>TZ(IpMDIr zl=`D8wVhxl9*h{rS4=)2f0VChU^bcU-e`ZWR z0;U3~@b;fRe9A@gtJH22$N~Nz<+`7Lgh-Fo-SwB3pAGxa7zWY0jm4xsT};d z1YBgF2SZXKLZSkHVhwn{< zuFCpGKxN~NzgND{J8yC0Vm|mO!Osq8BG~B1V6Hzxll*^jV?LgGf0AuR=1I#1ZKcr` z2mc5UM>>Kx-?sk-*dmQjm@)57cYih#d`F<*h)yt~0)IUkf8&=mOpW<|HNDgFI9ozm z4)y-g77>M`gl5;@WP7t~{9*sRv+(x|=QP&r|;Q zNE~hjJFM+kzl4f|!f8KzuZN2-Ub}P6)xwIZk0<92+_=)~h9&FQDLK10MkD!bgQc|3 z8B12;cT)=wfW9%rS-5uXk9A1~Q2Wk;=QpE2ANJ43csb-nP_A%|Fi2rlv6R$){{Yt; zV}199Z7b%Il}?pAI3v9}!t*@8>~&+mL98D>GT5H>56C}4;qj<*Pfzl=60E+r^RjQ} zm9e?Ai62mMrEL-Ev8qw;u)A;w_yH=1PwV?rUni>&3cqUyf0)WY>VCAZZ4iC@gK2*N zcX4O|jqiV__zciz^Kd^#o#Un4*PXX498a+^hC)Tz4Ql@h=r)KCLF;4acs8IsV0zS% zcUb?x#Q)lKD|lP0@T(0n{lFjiLh3sxk7p0LM%)lUUOUX;c{w`}NqYl6os8sD3;p?k zcUu8|Jt0d5KHJ%dchwZWmDg01J0O82;t2IXuOWGTg#)l_fl^R`v86mD*CApE3?LpL z%g%Z5eNA3lHX176vcMa{j%aJg#Q)5A!z=VjzX6S*5&w4*sFm?V6aN6_^Nkrd=|}jM z<^#b0FCrZH%fw8U6!a3Fzz0xIKqmeVTj*4Z0xSee1gK9E`0Z!R{o|-@D?wSF#5Upt z_+J#=`}%Qm?Ol9&sVOeOreknQCn@F}6F54!B1C@Y*Yvj+XO+N_@mUs zj7h}JSvAh$V1O{PXb+6X$WV_Rwia$#5$KImiy3oadrm4saP}22urMHN>c^+^VCS|$ zTo?jUk6VLo1v16d-)xGwhV|;e7eIy=US*r!n)m~R+5iRnPw_VM`*O?b*}psydV#;d zF1)|Y<^R+1*!{Owf7I9iWk_7j%VTjQy;+55EBZnb1O4tjec6Xv)N_CQrKpmPn#%{U zV#A&d5}LzBvL0S*JN*dRTEw#euBb#cwJl6 zp*qClzOg?6FRt(Q8@WMVXSBGidnA`sp@8ji-^#%yx{J!C({3O-SZ^&V&ZwEiSsFJc0 z=Z^W;iE!zzMIQ*1OE$Bdc&ejO{Hkm%d|->lA`dUA36{a5){ z_jSVc5Q{l!qGO_3k>~BcGob#VPmbOf`ak&AG1q4Umq_ zekdLJ%oH&HMpa6KI z8(uD|guK4=JsfXs5gf0UP5TG%jeesqGmOg-x^)zmgPwp||JVQ!y@MWe>~^}oU(^Zo84zpf=-HH50Vk%z6gD^ECd4dIsDfabsdCo&VqVtC*U@mUx@|3V0S6Z~X!_g#B+x z30ow9+0QQ*@c&GqjyNp*OZZ->W8!~i%;W>)zX?D;4*z;_Ic|!(S^qUR6bd4 zxakJ`O(I?gJvHS6ECm>s^fUn32ZR{&_hH7B<&+=30Kxr&PN8!5>2DgGi8oOMYNb*h zXb=8(SpQ#a>?fF+X)dPmK8=6z2$YF`nQO-XrRvxBU_E+)I9xlJ_UGF>eh8KC zdfA~ZRWD$56x^E1CcN6e>nH` z%bbxXoC>CO>2xFVLU!9!?BDp6lu-MEzxfep|0jI5vj)x%^@D298u7mk{TJE~#(cFN zP9PkQ{I6pkL_mkKt?dKh48!;#?%w?^ZGYG0W4;~;9qm_&h6j4X!?rLO#h<^n(WTs> zl^`T5I#i15#WlyC8u2Vu&tW*1oZTC>5`4EtVk<#X(7PquSOrT#{e%bHFv;t$co3~o zi2(QpKJW#)N1QqW@hq@kydCrtG3OsZ>*YZYP?$&g<(cdE$9z6D*3Sb1`8$08xnu${ zUdRJKz@c5b`U;!q0my|;hyxjuD-v62)iW6H&Ng_v_jM`BYriNWe0LJkD2oH86t>z5 zr;4g?;7NX~uvpjmyEW0-5`@5S_==|O2SaT?3t#nHd_HlFZ`*~h3HV=X((3H+;wNp@ z^zy;UPrQfD@eJ8U@dFYV--J$cmVN=U$Fq7h)N^D+sZh!jXQ`j^QUum#G{OHYZgfhD z>%m^aY9X@pMm}fKiR;^lX2OtE$(;GasTgD7k!-uW6sO#?Y$fvKOsyF%zE@M*t68(^URr}6oJ zd;QFOKeJzfY{0u#wkTxymGX*<>U-)3V@>@9g6RGNOg`X({127lA$yPh6?Di3Rz)P^ zUU~SY{j_giEH6JB%|`C;EVOLi@0qh-SB$}L$m&WsfZ!q{woay`+ z`xh&eKD)|?frR)Oo`uguvI7*~^5dW>*|DJaZ|tvN`0xOq59a#+x5ea}){Xgo1R73} z+^C;_zRc+*@I7>YzwKp9?|i`h{XQ`9J~M8_|IgDt;{P*$V*Fo?`!9rj+l6DD`Xx$f zc?;5~=Jm(S^F^jW7Q@ur z3pB7g>!8@Ph2x=$I&wPHugX}$RluL)_oaOHJAc69W9&gPhSamc!t+L{)CO6yBq91! zML!@i`6)uP;aU(3Lmy_(M&$lw0faSrPTC0dhK7YmChRZS0Qh}@9`~CNC*%w5^CBVM zsLQFFcwCZ`ue5;rI*4D!9G{dEI!U9n5MaD-8I-xJu&|~^CbJOCgE;Beoz;akFWFT} zM+wwhSaw3~+wbvykob1tCGXsm8o{N{MP46lOpCp)AiJezF)1| zVAJ|s@bn0uJ}|zRm=|*Y%_;q#?Ytv=0M9pxCsl0ZJFo3+^R|d61U=lftfyx~FQq1Z znCKm`2cCcAMS{a$^rwq;n~ck6Gn`TWBE>-NI3))Ld@vcjH0a5&nD75^z1tmOTw&b7e;EnqShC(gSBK;yg+iCLRJM3M;3)^RP zdHVEAq-zKDk{Ev@s73`%AGyQQ)K6gd-k~D^|93Ri7wG2Q{sH`byUYctWP{%^Uznx3 zvBv%T75E0ci+*KBe}OFs&zJL+^!As+wioH8deJV(^Wgk{(yMa|%R#@>Jpi`Xt1SPq zgC{FUjK=ol{qDM+dzI~P>n{lKf9nbL=qvD}9ENxBd_qk8&y3x&geVJVD~$g9?2Y)r z29jm?lkMTqI)gv?`xB0;whJ+XKu_jkMei&D$dce;h~IX2 zeDLq_FLODmakG{xp}##3(4=Huv$vnvN@`;(v=Cspg5Sr9ai8SZ;SKG6echWtxZY_$ z0q}=t=J7EE2kc<~8R>%L8;w-4LG6Z80(F*&ms#yHGkq;0Tpzub&e(>YQ`TYwWHeY>v`2FEt(v}B%RYE`Lf-O|c z^F@_CAr`G7Dg0VCUBZ1j1I8=t`5ibSOA(+$HKa>HKTr3&OMz~8vgdZs75%{fjwPVr zBp+&Knfu?A4`>^bf%O4YH$yb5YSmK{AAs?6p~e`G1U-BK)E874>lczxLIUL9YcwHm z`{RBBkrsfzLEoiWa<_l<`#B?sOiPq$X~@(JQCm7b>U*CAGZp-MX}#)SoF{LPPJp*D zz7siaKI1&L?bwyUtDL3)gW#7-`wL*bA-=+x`%fluzZ}j2|G;*Zwa>P+g?i2OwHfkm zu>Z9FEWd=-2P8o^M%<54+y4VyA24Jfrca=s-_Dw3b|?Her6w|vUxwba5m*cVngMVY z$)QHWh+mP*{GXxU)2_-Fyo+q|vaI#_Ufd;6u}IR^a9 zY$LwK_b*JE%~o_i+~~iT5kEuXKgaXCg6L4RCH{+30k8jV8JHg}hxJO(24e51@2?gvail&Ee9~m=pY>yUo#Db86CW=bzX?9?9kLBR zzZu3mig9;+=cV{nz#{lH3@C2pZ8|odKTYxYCst>L_#mm}@`crC!zH#%odi+gcj4VZO0`hK!ooqxIUMf*9G|hZ81FgZKC6{ruc( zV-3p*kO-*GCF6bmln=mz0CV{E|Mv1t?=nsP`Jj%DL*(9dsP+j$&!btraeqYS@r{)| ztqMj16g7}<4}D@6u4PT5`wPsX`wKMo8w>(+3;GR;2s^d<%A1aRW|XBz3t?;*zlg=X z0eBzTs;q)%A>HpTMn47`p_@B??a4QUtm6OP5$}#U5{r|e}N%Jzy5sT1xII3uQPsYalSOZj!Z57GHgpI z@EyHhKYuX={QLIbI3MTm^<~gEi~)UvhG0$XGVm>oU#Q2U!Nhmi#_d}>jEZ)QMo>Pt<@PjAiy?g}9!F}b;VgP}!M%;>Qv|Em7s#@M%+xVWU-U$GXkjJI=h zVSL1hH@&ty=x`A(?ltXqA3f9sWmH?7vpjS5)eMIcVpnJ2lUMw4))W`w{#0F`pw{2A z2G07WXt%UeII2QJo@Cq{3+oRL&&;f;A(pkaR1s}v5x=**S8)&Y&dVO8a3#p%odNxY zIRMR;J5<~=z%W8+unU!6x#ckFo;}BN^>!2v??ZW@!TQh-to4x5*CYWFIdyKg`E{a2OY?Wxuh4=M`xEh!vx(;o82-~niw%<%zk zc}D!N1pWgi_FFdm3H9-LbbV*)L;SZeUXvmiuk}H3!%TjH^!t$MCpcfRhyDV1>>*oL zt=}+P0W}bYXE~mj_iv+Lpm99K#Q)6L93QYj!$!9F$H9}0@*md=n9~Q4AH*yK#RG_g z($itPO^(mxCun^CG5rIXu{l0~_ck65OhQQEkC^`e|C1Y$H+~*TxAXdRjfg`2EPt6&@IuD3_{}FA^#08}KIZ4i+1+9Lo-YVa%N*Cg*}l2s zmrwWdCpfS_&S-z(^-;~A^3hE4Xd zEafHtc9s(+vs*OjH|Y0O0IHB#jG@sdJpU6M3F%@Ip>IO;Z)1S3DDyD!0ZE|m=arN_ zHRj*(j%CVwrWjKFbC>=jed&a zDA2qhbfgo_m;B4<=TFYHIL)^PeD4xy!}V}!a{n^VzkII5q{on`WYE9N=#O}G%Xq3k zLRIjo>uHa=)_}PsHdJ`e#Q)5g$p?frd|y_Wfoy-~q^i}=T#;t+ucrJpsMX;8E<0w7 zsdRRY^M~F~`u*_}92q^Ci?#JeKER0Ynf!n@`6-G=$;7b4>-ZFHgOX?&*Tf(M*MHRM2gtp z&(g>TfSwBXD`ffykeOZtI@A;V3Ts9M3*h=%){hw9hx8qtw(seZPCme2Tq{M^B=`j^ zQlA1q9`|eH6Jn4MzvN)zql9rcpC;eEL5J|CqHOrn#b-ycjjs>`8Mg21mG3%ESu@?S zL^vcIh5al?Z0i8gsrJjIvW&J!A-G5L0TjCec>h?0!1^jx+5w{t13xZ3RKOaEI20cb z>zDsLJb(@~6u-3N7$3ZHNd>K5YH zz0l`^KD-?F7cj>Mka5ddYo4I2`e=5i0!J436NtO8SW}%%`FL}9{lC4OlzzG5Le1_D z>Mz>+wqSD)#XJ@Dx|$nWo%a6YZNWO2WnUv`}Ec=F4m#W`Pn!@iImU4Z@ShaH{a zKCK?~_hnZpKRH2o__=d>y&^#UE_xNL8S`KNaS0^QpX>-Yr?LyYS?~=OX<-zc|F4FLP1fMZ6KvA>v+x} zPIPNkWjXjeMxe7Hq$+B2}t$Q0hA$E7e{?#)sSd%QhM0)DbwH@B^5 zzl7ygy&e2yH^o&TNfoitkbUPJluaY~t5NWNK`tzgP%4Ax8M(rTgDjwaAL{XRx==JW z74-bph~^7`F(5T-ETk;}|8s)p!GIX0#v#JWDlZS}$sT8M`+y$}hk#*)66y)mzHXrZ zOZWgh^v|GZRfcrnLA~YGzx>mz&@H)5u(+UlHjtRH2@RRgCivKS@gz_S_H0WYt7xxcN1a0G~U0J;y|gZcsXXY~Wjn7jkb#&XuV zDlc!}-t%UFUP0?1I^cY^s`$w0LPHYL$sW$r%)NM56olE2gal?R-(Q7R?mcR`q`2rk z);nC&U)^XOm~XiR{0{o*rXs%xyAG6o07ftUYz<_78P!jqp_}?kRwQeI*Vr$3XWU#X z#(VkOdLd66yGnoO+%_rP;m&qWQ87o0i^-k7(KUm8{GQt!^qDkiKK3h6eU1GP(}bsm zrD=LoKY?#lY!w?izBbk~1i^GT=&-ERvBNH;DhdRx(43k%HSQG%*BeyvIb=_8tU!s| zXuZFMEg?Vxzu7!3p0JniD4dLT+8Ip^jgNnE0O=o8tpExDKZD0JxSN z|K9SQknhKOd=EtVO)&ifn0|shod6*g{L4d68|F7(zhkamfXN3$#oDUyV2-Mv)z}%B z&%+Hs&td-nIGS=`IF$diUch~>2iTWDfxwdB2K{C8^;B+GVf)xo5Vnoy?`3E`f&aPx zwrAomeGwD?Gh-$nz>62a$^=Mifu<(`o@O2|GiEOn+FNbSv$4#x>ErC|41RbHs($s@ zT!Eg<#qN)68yvBJ-ML+RLp+1OU-Ql{ z^YhwyMn5}WUnM>!=I_ajwMwL-8qV`=Xn(uK?=@I&9|`^e;n+W*olzekF8Gzg??dV- zeY`vPpHMNQ-d#Jmj$V$$)bc1}zdlzx>`w=Lfv9?_O^!>B3*UyShbHItxYzaBsrxybC}fVY(6I>`2$3pV0Y3qoa7Ve!!N%)m)ITpI1j64!TU| z%e3?9^YOrlN2`9dH`W&*TljhSiC%PngK^j&(c(b3;$uD@GV(P%ZU0TYmtEg=Jvx5s zRLBehuQ;d77sx3P5`_%G-QIteH}fZ2M1WfRIGg}l6CG&Fp;w*V=;*CI4d zz=3-cCIXQ)y@<4TR_MxfM?WR_1@KmM$&tRB;+;9&v4sT;ylz%HKJRw}QW?gH8Ea6_ zPV28acc=LQgCXqaFqE3oS#+v1UnT?n1oM1d(~ZfIN+(QN_autq3&;gltR*L7dRrpk zo47H+2TbeR35XFVfh8;lJp*yWo`v}U@W#T7fSYW33meb}5HTD|Az+>lxcG?hK3hL8 ziuMQX!J16#1B`y6@>@YIxNB`#ePwr%%yk;@19w_Mf4>#<;bMIBIX`f!O~BUMh$C4d z72l{0hw=1VTe_YA``c#^0e=D9Z;!_F%DOm|I)=2mJzc=@k?ufwc>KM&B0Y6zy1!g0 zCDcQ_as9#|7TWAj;`)U@z|U%e+oP0|&~MOk4(M(dph~3!VmnkorU*~PEtvZgwcF8x z>NkiNSEy>LmfvY5LBsc}?!Sg|2g7ScNeb0(Fv-|&kjV#-Negn=?g6)vaH`=*3gt)m z4E;aE`%Heso$Tf`ZL=)n!7zEm?ubNmA$7-hN7#yew_^9T`Q|7aT_8oHMJKOU^S8%d ze-3zCgRV-teid(xa&ruIaIb!r&xUud*?cxbZ$C{o`U3b19I){fvLmL09*iAW?>I*` zJ~wus)6X|RFGfD#92Y<0xo?fVdkeN-vUmiyn`eAW|G9L3D%#I(5R6c$srF;P!N2Dl zn0f<6=}Wp_-(m1vcqV))vLkMf`bDiDeH!-@0K9p!i|~l8q*s(d0{sEs8F;JT%wBhL zBX^-))`iojV{!hUsy|qHWADZKy-@FKroMssd}qd=@CVczUL?Oq`wg6(eyJMPFOm-r zzCOXX^V*1gU;GUGOTJaFQU9`=aYArTOjZ0g*83Z9y?>U$bUr?gZ~nbMl;_JQgg0T2 z^_O^hogv9Xzvy`xSz{v!)Mi|h_Y-sfn;Vl?Kk@eiz5nj>RQ-IParaL@sT%K5v->>l z@7L|lhhg_0)EJof-dwCGb+^0^qhE5T-FrNH-s$0c0trscu8XUS)5qyOhtvLlZwwl^ zdYkei@^`=avz2HJi3UJ@oDKNJ`AcCeZw`%E_paV-<6fn;kSg##iZu2C9x26%QTk-Gsq0fItZazktNYb^(__)@V6L*kU~#eAxCYk6&S~+A z;G+ae>0}9flNjZN*DnrX2~QcKuGl!0OGT`VfP@#zh-st?(FHHclq~v0CUUB zdJwI;A5uaOzq_?|=w8fnTWFbKY(i z;QNwtc%j1xLLOe>P=3)F^8ITf3K7)zM>|{aVucowaPAGj3COSA@OBU9WJFzSKe|v1 z^`n80!Xv)F4sJ)8nYey{8Owc8i_2GA4;IJw?%xvfeY^!bIQ;V}s7FX2Jz5Zjhb=My8p8TOMr_Zoa zSbuvo?Dp4X`P&^r#Ur7V$Uestg9 zOBVY}mH%TtfLSlV^bg=2oW(_~JQzr!n(AsF7_Z?igML5&`5Mq~ntT2*`v)-V1(gw$_{3j8t^OOo zf9Cc{dmfTLk+32E?<*FI(FV5tceW?*!46P%isj9Xb^A^Fdm68i6V|g>jd*_^l5ezR zr94rU$Y6UnZjNsD_P}4j0{P=#6i;|O`tR{SZ^ipQNGj-uIDEu~`iABn5A*Y+Z9-r8 zefz-`hFn}Qzw+<5Pgb|IhFcEw2t0`d`nNLI*WB2%7u3&l!Ou?pMs3gc;%gV0{OwJC zVE=x+pam8X>;u~3+DeS?OnBMe4xdkh;o92@OXpQ~5^Ux>t z?~uNR=j9c;UmpH8j^obL`FhN?g2g|oDvfb|dg8Ij9`q!cE;X4|p~iZ7XY7{utVZ5d zwUMu>uw(@cE0J~Tfq1hooAd&z6joEc0Q34~#>{?x(66vDA1{$YKHiJ2|NmJ+=llJZ zyvuaF*7shrA;B=~{jB$jVEzEAexM%utKj+wkv-)H@UKYPFCpsk(KGn`+w-wsdw>_& z@TaAea|h1X1-%UCle_(4^*rP4C4ZMdN&WonrY6w7l2y9vbjw{y1*Z zsjcn%7wi5%=Dq|zrt@w4IWw6hlgT;>A=`)`wn~JcRhbZk(8dxJ)k#b2iXhq`Cy6W+ zjf|a;AWG1Rzoji|VyP|EQmSH^v4tRJ!VnTU-}RiCs2=b8&)=`__kQ1*A3wJ6_tlDaPMtl8<}H7~fJx2W*RUc@)}2^`(HKkOx!;S^ zK4Ih{wVc1dy0Qs9w=EDw*VA~i$;f}yO@{uXUV{2~Ue7$B-<7fGh9VvD>MJ9~&pgnH zz%Mr@rLFWNrYHRSuA6+Lpfs=JiXhFEXBY9jGNv4GpD?XkF6!;MwA|hS`2v6U2V{6H z9n+w15C0CyE52Y*U!zg$5-Icp5ZOV>IRJHr;vA_AwIgHZ6%SgfK>t^s8b0vkqPD>6 z`t7?1<9PQX0~hu==o@6>{ei=n)gP+!F2z#c4Z5(?F!Ie>P0p{4B6rcJ84(f8j?y2Q z&|bdcPpbb(BD{!$w;^k3qv826F;o#hF|{-^cg4oWggBBLgmWDKSG_^xc#08UO1+u) zG{pIrSEsMXA$MjqGl{P^_=1bzG*3xHBh9UkV%tsHI)|_B$0ecu!0mk8uS+Avo51A# z|1Q5lJfz!%e*NsvwV?F^W`}{V-1?;dG-JIPi$Ch!D}Dg-x$0$%@G=RH3(zvDL;^q0-yg5Mvk)i%(wBR@P16G^@q?4!ZpAjVdW#( z_?yZ4Wm7hF8vS)JvJbR~=@%W(UW)vO-3JfsP24N%34eg4``4}m=Y2HDs<&VJyefEa z#oPDe4gEm6M&(}X2{>B^AhTSR`>=1TN=zkMvMlaJa?yL!H+|Ub>n~o!LhbtmXXz+0 zC^RCCYfw-SZL;us-qn_UUlBAjt(CZ~ou*aOO~|L%P*sf;aP{(E7n~Wh5dN2cacN{hj_CeV)-Y;gQBg|5%=)CTS5t=k+8D=+z|lxT zNiDx0_tFlBP(7VHGF3^AyXDGnKkYP{45+qS#xf)j{C(7)fu4TWd3+Q4eyY`(y|V*= z@8KAgXvJvobB^1K{~0UcdhVMlr%ty+G>ZOnvU|g*bZ_+frS&aSr$e zw+Av#zGMg2*k_*RedJrN#Pz0hkk8q>ujB?djEq%@4STs8L%X!*^!x3lt94g`9U3-9 z{Qtq8U=0e2=%TMGY&Q4+{fO>ro;Yp!@j$1G{~BDCg#DNE)`B14`I;Xfurtbn0>$&C z8L`Tvd6ciG>$~1B#jT-Tc+ADYT6+8e7Xnw^mUf$x9Wa=mKQCMkU2;2JZAWdaCyk{| zyGx=8jrVi@75)|A`v>NnR8V}+#1sr9c^XwlT&%kXaPS7(*s%k-0Ws80L zZmZuTwqkE`tRWWqoc2rh9@fEMKm@kj z0qPQJ+#4M778~q#EWTeelho$-^Lm1aXRJ@xa0Y`}cg|^TikQ4tA$Oe}gM+q7Pd6BWpMtx< zA0SfW{yIYk#Qau%{kzWZ@A`d9$$gtY!5S|%Ct365`RF_DfbPlJKw=itcsOwezB8V< zE2%kXaF|f9Ag*8>S740(rv9FT_g4p?oJ1Rc&fn5B=iv{P2P+Sbu<8*M+Kxx#$VF(rd6_n17!oMXy!Woz^EX@-8OMf9-D{t^TLZ2jMuefQ|?&p*7BBzsN= z_ykM0M|{15Hqm+c)RS(UZ>os4%&lL;-SJaEE)eo3GS%dk9 z;#X@tyLF%j_*LJ#7QgeaqOu> z_4XK>e}I2`P;a+lb8Y;aP=A1`T+F1TD9IG1?1eGIuWo;Up#kp?sN|jk;l1q-NVVw+ zh*F>@AXO6aBI;jJt5Ht?`Ze&UEI>{-xfgp2zHtgj5nr!xVt4QMD0el|DcQ#`joCKD z7@OyNIelU|`~-7M?x$0fhr^Y!S0*?-a#GKK{e%5#k5NkldeQZrMb>5Y`%8A-SLkj0 z6j5iZjoV9~|MFE8Wnt&1GWaLIHERz1g_fQ* z$?LDa9N~+nMSnk_=611U5ei0X<(;*#Rlc#y#f$v^Bw8$K8R)mHLw(klbV{*q?`o?! z$8#I*5VyS}#Tt49-E^Pjsn2ly$gA*=sG(O`di0ikWcAmt`2$Jma|`4jCffJ|sGpZ# zdSd+WUq+yy9)6$9HuJbWa!(}cV~`{nm+-&s58&$!rqTL@!$lI0aYQvsyG-1>*`Fl& zN@sd~?|Og!Z+~AH@6Q>&7W#s|?)r|$lVy=2qVjm}`tB5cMwgStn~wLM4ZPKs=Z^-jV#+-ekx@^I|M)b;>ELd+}Oh2ZkG-*^1i{#<9}L;`hj`#Bq?2d+WM;JcFp|! za(cD3y--Nwn_G81Jz+k-Ir6cUe}JkillSf_f1o<>bKKKLZ4@pM7b5piK13g$5Ao-? z?O#^CltSNd#?l7JzgXB~%cw*e|DSJtUfLINJRhSl=`a7oe>EQjcMC<@Ou>a8FFxEFPkgpy8yIAW zJAqLITv_M(P&l8y#rHq|;Ug>GU;SPGD^p($&C0W^WZ++l*w(`CL~a#{g`;Xf?oZ@XIqfec&hK#=j<=y);x94SUUdS0)OeF;I=GWMnHd^>j*myzWWsSlC| z5taF=h?QtbiX`&(#w9ksKm7mDzp2TWVn4T0!peAlz`e>O4d$%z;t3d4wGLTwFO>d! z(O;yg;gYz6ce&fw9Q2?3)L&#c$i;59|L9-eo$frbMmPEDgtXwBo=*Qlyqo5~&yHu( zmfZ7ndb0Q1? zvYy6$drt=i&Lj_9&GNw|W8EgO04 zTI1O>8uvrCzDF@by$;y>+ambez*t$j2M_)fwJZYkLc(Q`#7d&`6MiFl0 z^9!8AP+uf3@v1Y4em3~#?T@Zrl|WCsJ+CjATA5s#hKky%(Dz9fO?>j{fQ*^m^^pHk zD1TGmzma%z^vcVh{NOfzNBDruc`Znu-ovDTULk!S>8IA;K=lOa_S_ZmVoLBWs{<_8Gvy7C2t`~V#)53$66KO|@-`cFocPDIH7!25?T9t3%1{&OvZ0Z^k93mXg>ay$74|t0YkcE1II3Fbg(9e{Qty4=a-W8tD>m>_^gUXvVZ|82PQ@g{3$$N@K{f>nI4#KK>W=Y ziMh@e3!3O9dtZiZ4vS+ukw;gNfSeZGgYwp`6JQ<9hh3HNi>t z@2^L=Kk*4$qK7FOJ6#D$|6!L&PCFOAM+5HGj+1K=HQQ_;phqh{8Q<_hQsc!qmcA|Cp#?X}#t@%8!a z2jKChrQbeWSGn%T5fCWA`G>jwnw)&c~Nx@La3;yt6Y13)l zw1XM`J1FTUY<>laB^uvX#zA1^Lp9p9RmMQ1cddu z&0j;`w|DnvyoFy=L_8mW;n6E87wQKLJ3nTqIJ>|D^*~P{pDbcZ!c&sTx)U>f-%ZXY zA-*>sdXvA7eCd;K*yx1j$5QOkU9zYP3R9$l}+^M%ho>}t{fEP~z7VuUo{cYi+&`jHPkyek=dR(s-$LKkhC4 zzG_nQz%yM{`mAO2H!}OIh!y&>j$fr{nxmu_yci&^y6;?W^v~Q%f6L z{Q>Z&{8PMIH6;uBrgVbCh9;DFZ&=V-BUXcd!YeA%d{;t7ZvOek{E5{60e&T6#{&7! zE0%f;#`XV0e}HaA_c5d)8zega5le`c=*(uq8ga^#eaiBe;Ckad&appgXg$13F$FaL z_CU=_X5{AT8FkIq#earq%L5OudBu@q;}ieV zi^DCU^Lt(6;~RLN$J^lZe{j9BhJh{2L)4bsWbB}Y^lCHlh-S2Q_AJwaGd1NjiNcFKKM1l)@1Y7YcZ4cgnI@?pL zkI#EUIW8~rULHMvaDMdW0WVWuMd?Nip?H5e`1)V(#`s%gqrpRtJdTjT3aN5)(nig>3@sr8BTr~kGUB2`s%1BSeM?w_|(%pzkmK^==GgL zd)Qg^>o;n2lnIGjd7}Enx+vY3e7!)QcAB|8GHE>gcV2HH`sMVO`KTE9+CO7kpVW1K zgnEaCk$wfY`!?^`Z|{Kn1MbJ)S8ed>V>x%+{cESmO}vK>Cq65(ftN=yy-!X1b>!(W zb>9EF&ab-sCf~mc8NcD15%z=~F^|^sgI?iJCzmS83H|TReO}$Y_+?q0eE&RSKpOM` zq?8Yc4fSQVqVSO({OL%2_1LeWH}^Z@<9vR+i9@_NPb1PcAZmFl(OA(~|FunJC#N+f zq!Hsrx*9;UCmBH{glS81RjmB(65!KRF2L(`*`s-sAhS`GZ|eS)#_1Bh7WO;ii~ zF*j%>IH*#gYzKdOYxNeiZv^wT$M(TL6zI&m2>bzrwTl!DDnOW%YiEap5#;~t_a}k> zx~BxIe_S7ZJ*JK!G@pVM5pk9y_@ro0VX~td-YNNvmtVa6;yd*+-IHBZFM#R+XxMzj z7w3#;`jJLz);>#LT@5}^{iY)kL5y@$fBdp$&R3-Qe2L){mwe9I9+kn z#y5*G8OqOIL;NB*aD!~721^y1Z4Z3CsfE=x!LH!AI=?UYeQf@3jEV7P8O-HQ`W-uT zqDuo^iM}1!qlCuOb;=6^7k53~u9y4KM$|U`vdZQ!z--y(sae<0MB)k@kHwa>V&cpqj&qHuEIQ_K6# zqmu)bH-m^6`5QW8KZ&FO{D_J@Obqb5&#h#Io0FTji)gKPuioHm{L<&F^T`Ui!X@LC z26_#;_=|y2$6S7mu7E#bpa%K_-`AUW|Js_*V#>?ufTinVkUPszKcQl;nd*_r%DxJW zIwbz}ET!)@@FA)lUE7+%-#@oqvg24$M-A#94uSHr+MF4{$XVQjL{w(x>kIf3s_5TV zyy=Vey(Hh&bJ&%cP-qUu_&4m8Gua^>QaRW8#SYB>4b+crj5FYu)=h~2z0M&`j^13l z0h0#zCTbb}S&KK!1A!muep@^zc%efsI*)C0ek*@K=np6ilB;ds$Lv)1{A3;@&!uq# zx=}rrcl8HUMK0&@e>-4*`l)Mt6Ydx42h`;c&^@PXqg;l?cz}XFZ;iJ+zn|iLdUx@8 z?nw-vea_qbUqZVsf50_9-jCd_|0dqwX)LcMz#p4+X1U;HUOfJHc(?G z(#x#lWz-|q$%)IM=e7ohgvcsT->#23DC@R#P)y7;;O)QTePR3^_58r^sHFMs{HBYK zW>Wi*cisK_5%%4HF)<9k#AMF$V{#|Xc z?-!9|eQrI{BHh#d4_cq`@BD)Q>FX1=ude%B*vo;(rv<2oM;YpQ^1t- zeX6!^eycwU`}_ZETgNGD`2o<^^Cgz3Fz2m4D8RRB*igDARZR&y+O703&A*TP!l5;> zytMKS^uL9LQH=Gj?HA?)n7exM`hqlHAprxQrDb1hyxyjFxVxpJgYz<f|JySf_scU~8)`2dUohruS)3lRDPRQG+3 zf19FoQ7UC0dIC>9NopdR-$dInGf&OupV!4-uWP@hX%lO_8*Sn7udG9@&EsF)f*Z&4 z+4W!DzZ0t`Ak4)k8XEnW(wX-MI3WO^7kI~N8|c+wy|U99AE)a@imz4Wp6-1cki+3@ zM{7O5I{X1|MsiMzn4h5Qq)!U0blPB`Z25Li>x;C zPwA#A$8zu}VO*3MMymH`xnI_RxT^95Fxe z@%=fi$?aITu8SXSx@7?0u*1gsuMSF7HUN(Nf;wy&cZ9g>HGv{Ku@;XP_%wxCaz_)G zGE&U*E9%0(iM4p2_YV=1F6nOIX{AK(k|#H@wElzmk$=F@y$8H){tBTT9QMS8WnIT$ z!Qf2qkFMvK&z`te3O}SDI_OZB+g0P|yVV3#rv% zZW(+1MFYQiubw9;%LA&fl2N@?U0spStA{?Ls^<5$U-cd^j^_7L2cimm%~~5tS>Ur? zY-_vzYI?pm{TH|-XW{iHK6%5xfn^W!aoj?O<~H;v{(L^p1;929m>rd;oHy#R~J96`; zlAm7{_CI+%-^CEh#7s~4uHa=-l--G?GjM;vP;>)~9NBwShLujMt(J!ZRQ#qCEH;N|%2iuKw zGcC`*GZK9I-=6*$eL>bYB6Go*#rS?L-agj<<@D-f+-rS7Jlp@OJyT}4wfQS(i%oy= z>%q^WTj6n)HQpaVrfGI*N_}p=aFcrP3~cD?b8hImIYhNGz-7hIaOq5O;F7n0?4}oCF+eIEH7@cocz>(Mx8m`yIH>yDg&h#DwAHt#(aM!Uy4UsX=?jBf zR;d3_8wotDeW@+b7R0@jRko9ooxs!jKGoHzuNS3*Yk7AS*Cw&>(!ES*!#s6o+l(1VoK)k;053khh(&#p@jmkmDo9gm%Ql_^`nHh~A$ic_WMYe10Rrh5^|;%WBj0 z2z6-d64sAnQ*>%M&PVkIivq0m0O7rJ=KKh!yRjw4^(6cS-sw!sm}rvM*vLR1K+Qu= z=W?g}8%2&mx!T9u@gG`J!x_EDSoH#NuQ^wLP8VL|d-nyC97` zy@M`y~e z5#1M7PxS1T?6y=wF3h?kwLdwv2<(IUgm*!FW20e@cVyqCtiK=Nv+X7|hl|>PI zH{QA54*6hCwfce&s)v6{rj%Ig1+H{n!heMLKTjvlrRxl5F z^Y8PAgS)==2Vk@`yu}ZYoz-ALWMI%i2E`blpV-^VC#c1r!tqXMt1|J@!)?a;lFq;2 z`P8K+DC7tDJXZs4BV|D9Ia$=KZhb)-9}lFRjm{4y2rbqlhOi%boBvB_3;hAF_4cIX zVd++SLQ-yet4^Pgg&et;1F3vFHh3N=lre_{5=Z;4vS>($K|F?1}AU+3BC;Zc78)$`Az z`gc+-aYu%_KjZKE|2rRm;{RH`yg15tZra7lpC2(|Eye$Z{q`OW{qCz(!>E2=%=bf8 zYg@+*Q0Pb0^9-L!^(}R`1Dcbg(jG3JdW^^5qn*p{xsCCd#E|I;)64po8ts!?y>KMiKf`X7zsUExL8BI%#Cs_}?987^k&6>N5hiij$B1W6 zebN7d-KrkmADr5>1odThw_tdG0O~0gQhaYbVXg0n^ba@?%FF+<6Cm&pe%r}oyx#xh z=X}Cgg6c@SsIA2f1n)Sz_!|8Z_^V*@C6kRb;J9L6+06;$~8M*&D3JP zPD&FgrjG5Hc{iUC|JLR$etVAi@hXo|i9gsc-N?sNEjE7pNvxIWydvbc*JU>v^BvEB zcQey)kgIE5{s7(7KNNkZHg`aU^MatRPJK<17iP6f56-N0rd^zEbGJ>))61= z71~070Q3fVy#JI(0~{xg$B*EAQD9i3_j}3>i5m86f4Qon_Zr1fZIDu#VGe?xk)_#7 zE55hk5aoD86dIO(QDpJw3?NQXawPP9TiEVL7ovibObt-ntORg=w_6xAetV5Qlige@d5=e@W8O3ky;-w@W2=c=xM8jl_f=qqTeuyuKa``c zc{9HL9pdY?`2VlGjupXL^bL>QSxi=A2zc_&T!1J2svy?DmF#hJV~|@iYGBpTYWN$~vn*f?qE`<{sA5I)txM>5R-ae_qcO^YkMNT6!9J7zA4u(K&_r)4kPz(STK#;=KN}`1D3Eq)MW?1 z@RoNZG?S5E51WE79IfzV44%xd+F~vA3<}S;-!YfTog2Ox>gCWcuZ!=my4;SiBEOM&`+(z`=N>_ z%W(Q3Zls%N73|fc%XJ0|TRCRT3Tj)y#!oOgu z1|NBgtJrX#`=D&y(2E;)DaR$B#^el66dOw>7{zi0@NhtCfbO`uUZ^lO}EeKNtQL)i}@iYclKasorp1`T`l( z54-nW>C(e^JG-AL*^j7l`Y*e$Y2^Bl30lO04+Fi)*2jtAyNO&VC&fpI|GjqL#iox= zZ~eThUS0DD0_uvs%6b2Dh(PXtF4Pa$l30m@|D1e7&pB2@@1?HsW(x3kX6PaSByCQ#0@2Yiv<$MgH?zpG!EIOT76pYu7NT~UO4Q{&-+zbDsueBt?oHqY;8W$M5DWB>m8&Hb(M ze+7JzLnS{9EsU1i^y-kklrM=XJo!BH&V_)!1!ehV_@5Zn^t4+2JCoK>cmJuYfBn<_ zmZN{^`_l#Bp_ewmwi61V}6@88~EPK=k(}Zjfv6iLFmY&CWpTyqeH)r zJG0d+-=r>1nwHohgpjdfuGlz#d4}^(+;s)H_9@5xcx~*tk<0bVM=M#Eu89ZtKIf+N z6CYL1TX#K_M6`>Gd;Ckzhj;GXJl(vgPvO?=zB~JpRDFDLocP}g469{_j2M&!T0Bj4T9bP<2N zVk`&f@k+cMUz|%(2DqDfcYtfjGh%2kG%K054g3Hn%QhqT!p|ILOXncETUG9B{%pK( zeR}wyn86yN8WF*y#JVA0V3XOHg7wuK{D8pCZHNV)ZbRAFiz*VtPlH1I|C%ol0ewLz z48B!wfWyE}@&9}l{EH7sUC-k}xhb%?r(^ZAv_w60yEBt*1Jww}-=UPg^||@obMh zjgCp1YE!nnGEx6Xl8eKcCS-0Qy&vfeQT1-=?mb#IH&$~m)i4wKVe)gU$}-qpeLasd zEwG-99skTFi1E#({ly9Sw6*xZ*8eUp-`L-NS6o2WOf_bmAd*w|yS$!@QskcbEU5|b z>b1BA$y(+X8Hwi?xw8>bvDuA>92;sk({;yJGiOdFjo4NhYkkUdC>GRK2fZj{L|?S- z{zP7T{JQ3c*YR!YZ^7qvzW*{pKhJd2cPmcawNEb^cKOcjjlfg)HjbHp=sZz)N(UbR zp3^P5x%2X&?2Im+(mRxokyHM=QmLpX_f?q02H+oEd6n`?1O1*8DRPqu1B&XhToI)} zJ#l4s=#TV6eXsQjk)nabRoT6WXn@zt&%3#~P<(G{O!0cg!_R+=QM_0-NZI`-5U&w0 z&G*~W%DelNRZRzzfx!E3+8+3Q{6&L7ziq*M;EP@Dp{E)Cc;KEVsUu(93Ibnp1o8RA zZ>!=ynpnBcuNwRoU93qFbigfg^6F7d z8}2Q>|Aos@f$WL;VwZ-wgO|?#9QrM{6<7;XetUJ*xIn~9Kk#(~*873<4%~83LX7(M z+LgfnLrFqRBJ!<~pKpzq13$O8gX?>=m9e*uw-0Z$#5+(K0h*6!5Ay$&7jA?>f6{?W zM(Mhw*@c&eM2JXEbQRfCgOI#L6W;Wb$>8trZ#!2>HmkI9y=i|3lC%FRdB!mYBSWfB z_v`^aeKc9$kK$$j<9dA;B7VG$QuF`QHeMga|*WGpKZ{j(dLMI^I z-=N4e+`k|uhq*PhK7hYkZg0x6<`2QRWh7 zFx;^H``meX?6Jlqb%2Mo zTYd4$6Qe&L6mzyc$(ei=eEu@No?#RCb99q;4D>x|)dwW;-~)V}-`p!--ZS>{?!kOK z{z|O-YOIhZukW}lBOLmP^YiT`C$)0uB_>z3h#?myS=Od4TrXeLIB?M5&k{+Mhq^fZ z{^_;UAApDpC$x24+JExo&(t~a2i(nWf%Vkv?vJKDhTg!ExdGmwQ71CvBdq!YgcKAc zBna(m58D=LjF*{*`Y@9p#uwu~k0x-P$l8MY9uyK5BE{&~o5PX=C9+pz?l z6&*8`b~kJy7XBt_XENn;&{C|64?H7?4!ZtbKOk63)O6iOT=?;v` zK^^ep$>6gu3+<%~Kt0sP>hG=R!~cW-uOfzZL+A;to6sMSamj$j;*X46vRLYl_nXJ~ zkTI{1PfWqxgLwQ;=P$bL^+5a|K9br^=nqh>haZf|g(e4iRtCNA)t)km3mk6PGU+Dd z2b8!Tvpb9DO6w6sMr1|`@xRbk<+(^%tDfK`UQh59J+zvLc>O~6I`3y)_+RJ`P>E!L zY?D|qd&DlZW$W1leE;KYlSb;SBX*d-kPqO!TIs?{flsaX=UwsmY9@PvOUfR45!i~0 zg|^JeMA#+_$v$G2o|5wJ{)NBcbF3$H4*f;RO^nION9;ON{*v%~LR&S!ciCLhC^%VW zw`@MvXS%6n==w&IC9|vM{jq~8j?dMo8zsvyOk>Ua#_@M-{SS^WJfG06N~-lQQ1$?a z=lk#Rzoo^E?e~9v^7Fr-uf@mznSE&;k(MIc@d(80vFWleHT{U_KcbT;fBz;~ ze*RPe+cTVCLL?dQX>0ZJ$@eD*l2aQ_FOTsX<~MB5glm_;_bi-eXJ7B&s}hEy|APFN zmX=n2eIHG~7=&EOgAGYd?4pp6&pMhyOT@(3bzklEmQGHD9P>LuO_(dIOdM^ zl&a;3*^=O_BeNS;JlJ@=5#seDcBOwZ`c4xP>Ax-FxA~`1dw69wi{sR_~j{$6-`|03_W_#1sU z=Yd~`2m}dI^kAT8evMpnOw1c@^#|DSm5?7`4cNhqi9fwaasdhEMY{dh+=fs&QX8-^0h>MT9M4P_NJQ7hj!$f3s-C0++6b zX>+j^D~0?3p*^5aJR^QADkA3Lg?U9XvYIVhUOHy^BZ~iNiKDt~#7Fdh+)3T&b;#4C z$9h*a$A1}-yzfa|ju2_OA9>B!x4j>#^0A*b*R$<_=UW9<#u5vY(frhd%pvt_?^hkR zu5#LVGJlm?;XOks9fJB(+uw}eqrSxm2Svl9MC9rcVKhQtu|zegCaU%H?Y((E#=d<* z`@(F?*|estiy|dZPfW-kUE9v@%p^NDNHa9t6L&CURtq9-CIR;JRI)Np=quid{<$gp z)GH-$5SxtoXSyZO=Z@3dX!B6;L$%-|e0ou_UX$sEh>Kgf68XxT?{<}HH5iIr`HHE!e%E||W9uV-IDp}zfj0t6U+<@iWXApL zb7gagtdcw>RH36#6IJj$$>+N!{xrT^UM{p%u`^yYC5B%nV)jx1-y1C>^wKeUi5q^) z>(h$coc^ZOgR)wEGu@wKJW3U=;7``!qv#eqTB~?=(o<2f z=MO^hz3(HvK3C!5M4V~@dbyD;`RRsaY5AH|mzQDrZ~^Lk?)ct5VBhUr)t)U|fhUaN z{R*Ea`F=WKR(=T{0)h_r2$oiezS=W&37mG{!+Uh3(m}fe?-)J67XhQ z5*}&D@IyXM+fcW`B-7V7Aa_m}0>#C4{fU=Wn>(K!#3BDI3w(=mp;(uz z?)~n|qN!PoygH2L`#f5$V5Pvz%19|A1)i?lC_b>BWi<`~L=Akdi$A*z@u?t@{^OUw z1OMcdKcx6S*XRHbtKJ!W|0R^~Z!rAy)pyJHMFEduCB3$b{3B6f&jShEz8r1>F&LOR zoL64581bA`-x+Se_XW8QD`uIFwIlY~Ua+MoUWSd1(ou90{t&0)AM5JM3K8K_T%8 zd-v(0&W`!2`y+0)vKz(&_!ES-VnfMvg@K!G*NwphMDoJG>q>42tfP4Xt`^lG~cz+~Tn``39)HBB6jcs~>oGW!0kMIIW1BpB*_0{_VI2rzVzriZLFQ zmxqL?j8i0PqOak{kEIyTXP*u1^A!30)E^M7A-iQ&En0+3{oaY>^8RU|t%_Hd4zD=; z5dHwql@Hore6|Ee?WlJomg+aczg?AFIxhVY^(VNxQawMRoqB~x)$S|EsDKl%s--PS z)wzJ&vsOkpy&+^63mEeuy*V_9lu1_q1RDc`p0dTUt!{{TbrmSp*{g(*I-j?&KLjsCemWjjZTz#5MxDEex6xS4@k0DBv{lb(Qw
L;_#EgQ_%3wY(i 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%0A{#0JRaBN26 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 z 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

`9Voxu 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

&ei0Y{bL)V4N&eD)xdO2pg;(7Cavxg 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 Gf&T-rfts%X literal 0 HcmV?d00001 From 982903450548cfe32a4834c782098657a5c8dc82 Mon Sep 17 00:00:00 2001 From: Rich Geldreich Date: Fri, 20 Mar 2020 01:57:19 -0400 Subject: [PATCH 05/16] new files --- webgl/gltf/assets/kodim26_uastc.basis | Bin 0 -> 1241060 bytes webgl/gltf/three.min.js | 1 + 2 files changed, 1 insertion(+) create mode 100644 webgl/gltf/assets/kodim26_uastc.basis create mode 100644 webgl/gltf/three.min.js diff --git a/webgl/gltf/assets/kodim26_uastc.basis b/webgl/gltf/assets/kodim26_uastc.basis new file mode 100644 index 0000000000000000000000000000000000000000..69ad796cc8a855fa1e85a962d101c7ce9c0a0201 GIT binary patch literal 1241060 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 Z{y^#vxDt^1L#aQM`a`Kd{ImMQ{|63ii+KP5 literal 0 HcmV?d00001 diff --git a/webgl/gltf/three.min.js b/webgl/gltf/three.min.js new file mode 100644 index 0000000..3e56587 --- /dev/null +++ b/webgl/gltf/three.min.js @@ -0,0 +1 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e=e||self).THREE={})}(this,function(e){"use strict";void 0===Number.EPSILON&&(Number.EPSILON=Math.pow(2,-52)),void 0===Number.isInteger&&(Number.isInteger=function(e){return"number"==typeof e&&isFinite(e)&&Math.floor(e)===e}),void 0===Math.sign&&(Math.sign=function(e){return e<0?-1:e>0?1:+e}),"name"in Function.prototype==!1&&Object.defineProperty(Function.prototype,"name",{get:function(){return this.toString().match(/^\s*function\s*([^\(\s]*)/)[1]}}),void 0===Object.assign&&(Object.assign=function(e){if(null==e)throw new TypeError("Cannot convert undefined or null to object");for(var t=Object(e),n=1;n>8&255]+Vt[e>>16&255]+Vt[e>>24&255]+"-"+Vt[255&t]+Vt[t>>8&255]+"-"+Vt[t>>16&15|64]+Vt[t>>24&255]+"-"+Vt[63&n|128]+Vt[n>>8&255]+"-"+Vt[n>>16&255]+Vt[n>>24&255]+Vt[255&i]+Vt[i>>8&255]+Vt[i>>16&255]+Vt[i>>24&255]).toUpperCase()},clamp:function(e,t,n){return Math.max(t,Math.min(n,e))},euclideanModulo:function(e,t){return(e%t+t)%t},mapLinear:function(e,t,n,i,r){return i+(e-t)*(r-i)/(n-t)},lerp:function(e,t,n){return(1-n)*e+n*t},smoothstep:function(e,t,n){return e<=t?0:e>=n?1:(e=(e-t)/(n-t))*e*(3-2*e)},smootherstep:function(e,t,n){return e<=t?0:e>=n?1:(e=(e-t)/(n-t))*e*e*(e*(6*e-15)+10)},randInt:function(e,t){return e+Math.floor(Math.random()*(t-e+1))},randFloat:function(e,t){return e+Math.random()*(t-e)},randFloatSpread:function(e){return e*(.5-Math.random())},degToRad:function(e){return e*Wt.DEG2RAD},radToDeg:function(e){return e*Wt.RAD2DEG},isPowerOfTwo:function(e){return 0==(e&e-1)&&0!==e},ceilPowerOfTwo:function(e){return Math.pow(2,Math.ceil(Math.log(e)/Math.LN2))},floorPowerOfTwo:function(e){return Math.pow(2,Math.floor(Math.log(e)/Math.LN2))},setQuaternionFromProperEuler:function(e,t,n,i,r){var a=Math.cos,o=Math.sin,s=a(n/2),c=o(n/2),l=a((t+i)/2),h=o((t+i)/2),u=a((t-i)/2),p=o((t-i)/2),d=a((i-t)/2),f=o((i-t)/2);"XYX"===r?e.set(s*h,c*u,c*p,s*l):"YZY"===r?e.set(c*p,s*h,c*u,s*l):"ZXZ"===r?e.set(c*u,c*p,s*h,s*l):"XZX"===r?e.set(s*h,c*f,c*d,s*l):"YXY"===r?e.set(c*d,s*h,c*f,s*l):"ZYZ"===r?e.set(c*f,c*d,s*h,s*l):console.warn("THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order.")}};function qt(e,t){this.x=e||0,this.y=t||0}function Xt(){this.elements=[1,0,0,0,1,0,0,0,1],arguments.length>0&&console.error("THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.")}Object.defineProperties(qt.prototype,{width:{get:function(){return this.x},set:function(e){this.x=e}},height:{get:function(){return this.y},set:function(e){this.y=e}}}),Object.assign(qt.prototype,{isVector2:!0,set:function(e,t){return this.x=e,this.y=t,this},setScalar:function(e){return this.x=e,this.y=e,this},setX:function(e){return this.x=e,this},setY:function(e){return this.y=e,this},setComponent:function(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;default:throw new Error("index is out of range: "+e)}return this},getComponent:function(e){switch(e){case 0:return this.x;case 1:return this.y;default:throw new Error("index is out of range: "+e)}},clone:function(){return new this.constructor(this.x,this.y)},copy:function(e){return this.x=e.x,this.y=e.y,this},add:function(e,t){return void 0!==t?(console.warn("THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(e,t)):(this.x+=e.x,this.y+=e.y,this)},addScalar:function(e){return this.x+=e,this.y+=e,this},addVectors:function(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this},addScaledVector:function(e,t){return this.x+=e.x*t,this.y+=e.y*t,this},sub:function(e,t){return void 0!==t?(console.warn("THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(e,t)):(this.x-=e.x,this.y-=e.y,this)},subScalar:function(e){return this.x-=e,this.y-=e,this},subVectors:function(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this},multiply:function(e){return this.x*=e.x,this.y*=e.y,this},multiplyScalar:function(e){return this.x*=e,this.y*=e,this},divide:function(e){return this.x/=e.x,this.y/=e.y,this},divideScalar:function(e){return this.multiplyScalar(1/e)},applyMatrix3:function(e){var t=this.x,n=this.y,i=e.elements;return this.x=i[0]*t+i[3]*n+i[6],this.y=i[1]*t+i[4]*n+i[7],this},min:function(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this},max:function(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this},clamp:function(e,t){return this.x=Math.max(e.x,Math.min(t.x,this.x)),this.y=Math.max(e.y,Math.min(t.y,this.y)),this},clampScalar:function(e,t){return this.x=Math.max(e,Math.min(t,this.x)),this.y=Math.max(e,Math.min(t,this.y)),this},clampLength:function(e,t){var n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(e,Math.min(t,n)))},floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this},ceil:function(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this},round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this},roundToZero:function(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this},negate:function(){return this.x=-this.x,this.y=-this.y,this},dot:function(e){return this.x*e.x+this.y*e.y},cross:function(e){return this.x*e.y-this.y*e.x},lengthSq:function(){return this.x*this.x+this.y*this.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},manhattanLength:function(){return Math.abs(this.x)+Math.abs(this.y)},normalize:function(){return this.divideScalar(this.length()||1)},angle:function(){return Math.atan2(-this.y,-this.x)+Math.PI},distanceTo:function(e){return Math.sqrt(this.distanceToSquared(e))},distanceToSquared:function(e){var t=this.x-e.x,n=this.y-e.y;return t*t+n*n},manhattanDistanceTo:function(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)},setLength:function(e){return this.normalize().multiplyScalar(e)},lerp:function(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this},lerpVectors:function(e,t,n){return this.subVectors(t,e).multiplyScalar(n).add(e)},equals:function(e){return e.x===this.x&&e.y===this.y},fromArray:function(e,t){return void 0===t&&(t=0),this.x=e[t],this.y=e[t+1],this},toArray:function(e,t){return void 0===e&&(e=[]),void 0===t&&(t=0),e[t]=this.x,e[t+1]=this.y,e},fromBufferAttribute:function(e,t,n){return void 0!==n&&console.warn("THREE.Vector2: offset has been removed from .fromBufferAttribute()."),this.x=e.getX(t),this.y=e.getY(t),this},rotateAround:function(e,t){var n=Math.cos(t),i=Math.sin(t),r=this.x-e.x,a=this.y-e.y;return this.x=r*n-a*i+e.x,this.y=r*i+a*n+e.y,this}}),Object.assign(Xt.prototype,{isMatrix3:!0,set:function(e,t,n,i,r,a,o,s,c){var l=this.elements;return l[0]=e,l[1]=i,l[2]=o,l[3]=t,l[4]=r,l[5]=s,l[6]=n,l[7]=a,l[8]=c,this},identity:function(){return this.set(1,0,0,0,1,0,0,0,1),this},clone:function(){return(new this.constructor).fromArray(this.elements)},copy:function(e){var t=this.elements,n=e.elements;return t[0]=n[0],t[1]=n[1],t[2]=n[2],t[3]=n[3],t[4]=n[4],t[5]=n[5],t[6]=n[6],t[7]=n[7],t[8]=n[8],this},extractBasis:function(e,t,n){return e.setFromMatrix3Column(this,0),t.setFromMatrix3Column(this,1),n.setFromMatrix3Column(this,2),this},setFromMatrix4:function(e){var t=e.elements;return this.set(t[0],t[4],t[8],t[1],t[5],t[9],t[2],t[6],t[10]),this},multiply:function(e){return this.multiplyMatrices(this,e)},premultiply:function(e){return this.multiplyMatrices(e,this)},multiplyMatrices:function(e,t){var n=e.elements,i=t.elements,r=this.elements,a=n[0],o=n[3],s=n[6],c=n[1],l=n[4],h=n[7],u=n[2],p=n[5],d=n[8],f=i[0],m=i[3],g=i[6],v=i[1],y=i[4],x=i[7],b=i[2],_=i[5],w=i[8];return r[0]=a*f+o*v+s*b,r[3]=a*m+o*y+s*_,r[6]=a*g+o*x+s*w,r[1]=c*f+l*v+h*b,r[4]=c*m+l*y+h*_,r[7]=c*g+l*x+h*w,r[2]=u*f+p*v+d*b,r[5]=u*m+p*y+d*_,r[8]=u*g+p*x+d*w,this},multiplyScalar:function(e){var t=this.elements;return t[0]*=e,t[3]*=e,t[6]*=e,t[1]*=e,t[4]*=e,t[7]*=e,t[2]*=e,t[5]*=e,t[8]*=e,this},determinant:function(){var e=this.elements,t=e[0],n=e[1],i=e[2],r=e[3],a=e[4],o=e[5],s=e[6],c=e[7],l=e[8];return t*a*l-t*o*c-n*r*l+n*o*s+i*r*c-i*a*s},getInverse:function(e,t){e&&e.isMatrix4&&console.error("THREE.Matrix3: .getInverse() no longer takes a Matrix4 argument.");var n=e.elements,i=this.elements,r=n[0],a=n[1],o=n[2],s=n[3],c=n[4],l=n[5],h=n[6],u=n[7],p=n[8],d=p*c-l*u,f=l*h-p*s,m=u*s-c*h,g=r*d+a*f+o*m;if(0===g){var v="THREE.Matrix3: .getInverse() can't invert matrix, determinant is 0";if(!0===t)throw new Error(v);return console.warn(v),this.identity()}var y=1/g;return i[0]=d*y,i[1]=(o*u-p*a)*y,i[2]=(l*a-o*c)*y,i[3]=f*y,i[4]=(p*r-o*h)*y,i[5]=(o*s-l*r)*y,i[6]=m*y,i[7]=(a*h-u*r)*y,i[8]=(c*r-a*s)*y,this},transpose:function(){var e,t=this.elements;return e=t[1],t[1]=t[3],t[3]=e,e=t[2],t[2]=t[6],t[6]=e,e=t[5],t[5]=t[7],t[7]=e,this},getNormalMatrix:function(e){return this.setFromMatrix4(e).getInverse(this).transpose()},transposeIntoArray:function(e){var t=this.elements;return e[0]=t[0],e[1]=t[3],e[2]=t[6],e[3]=t[1],e[4]=t[4],e[5]=t[7],e[6]=t[2],e[7]=t[5],e[8]=t[8],this},setUvTransform:function(e,t,n,i,r,a,o){var s=Math.cos(r),c=Math.sin(r);this.set(n*s,n*c,-n*(s*a+c*o)+a+e,-i*c,i*s,-i*(-c*a+s*o)+o+t,0,0,1)},scale:function(e,t){var n=this.elements;return n[0]*=e,n[3]*=e,n[6]*=e,n[1]*=t,n[4]*=t,n[7]*=t,this},rotate:function(e){var t=Math.cos(e),n=Math.sin(e),i=this.elements,r=i[0],a=i[3],o=i[6],s=i[1],c=i[4],l=i[7];return i[0]=t*r+n*s,i[3]=t*a+n*c,i[6]=t*o+n*l,i[1]=-n*r+t*s,i[4]=-n*a+t*c,i[7]=-n*o+t*l,this},translate:function(e,t){var n=this.elements;return n[0]+=e*n[2],n[3]+=e*n[5],n[6]+=e*n[8],n[1]+=t*n[2],n[4]+=t*n[5],n[7]+=t*n[8],this},equals:function(e){for(var t=this.elements,n=e.elements,i=0;i<9;i++)if(t[i]!==n[i])return!1;return!0},fromArray:function(e,t){void 0===t&&(t=0);for(var n=0;n<9;n++)this.elements[n]=e[n+t];return this},toArray:function(e,t){void 0===e&&(e=[]),void 0===t&&(t=0);var n=this.elements;return e[t]=n[0],e[t+1]=n[1],e[t+2]=n[2],e[t+3]=n[3],e[t+4]=n[4],e[t+5]=n[5],e[t+6]=n[6],e[t+7]=n[7],e[t+8]=n[8],e}});var Yt={getDataURL:function(e){var t;if("undefined"==typeof HTMLCanvasElement)return e.src;if(e instanceof HTMLCanvasElement)t=e;else{void 0===jt&&(jt=document.createElementNS("http://www.w3.org/1999/xhtml","canvas")),jt.width=e.width,jt.height=e.height;var n=jt.getContext("2d");e instanceof ImageData?n.putImageData(e,0,0):n.drawImage(e,0,0,e.width,e.height),t=jt}return t.width>2048||t.height>2048?t.toDataURL("image/jpeg",.6):t.toDataURL("image/png")}},Zt=0;function Jt(e,t,n,i,r,a,o,s,c,l){Object.defineProperty(this,"id",{value:Zt++}),this.uuid=Wt.generateUUID(),this.name="",this.image=void 0!==e?e:Jt.DEFAULT_IMAGE,this.mipmaps=[],this.mapping=void 0!==t?t:Jt.DEFAULT_MAPPING,this.wrapS=void 0!==n?n:ie,this.wrapT=void 0!==i?i:ie,this.magFilter=void 0!==r?r:ce,this.minFilter=void 0!==a?a:he,this.anisotropy=void 0!==c?c:1,this.format=void 0!==o?o:Te,this.internalFormat=null,this.type=void 0!==s?s:ue,this.offset=new qt(0,0),this.repeat=new qt(1,1),this.center=new qt(0,0),this.rotation=0,this.matrixAutoUpdate=!0,this.matrix=new Xt,this.generateMipmaps=!0,this.premultiplyAlpha=!1,this.flipY=!0,this.unpackAlignment=4,this.encoding=void 0!==l?l:Tt,this.version=0,this.onUpdate=null}function Qt(e,t,n,i){this.x=e||0,this.y=t||0,this.z=n||0,this.w=void 0!==i?i:1}function Kt(e,t,n){this.width=e,this.height=t,this.scissor=new Qt(0,0,e,t),this.scissorTest=!1,this.viewport=new Qt(0,0,e,t),n=n||{},this.texture=new Jt(void 0,n.mapping,n.wrapS,n.wrapT,n.magFilter,n.minFilter,n.format,n.type,n.anisotropy,n.encoding),this.texture.image={},this.texture.image.width=e,this.texture.image.height=t,this.texture.generateMipmaps=void 0!==n.generateMipmaps&&n.generateMipmaps,this.texture.minFilter=void 0!==n.minFilter?n.minFilter:ce,this.depthBuffer=void 0===n.depthBuffer||n.depthBuffer,this.stencilBuffer=void 0===n.stencilBuffer||n.stencilBuffer,this.depthTexture=void 0!==n.depthTexture?n.depthTexture:null}function $t(e,t,n){Kt.call(this,e,t,n),this.samples=4}function en(e,t,n,i){this._x=e||0,this._y=t||0,this._z=n||0,this._w=void 0!==i?i:1}Jt.DEFAULT_IMAGE=void 0,Jt.DEFAULT_MAPPING=300,Jt.prototype=Object.assign(Object.create(Ht.prototype),{constructor:Jt,isTexture:!0,updateMatrix:function(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y)},clone:function(){return(new this.constructor).copy(this)},copy:function(e){return this.name=e.name,this.image=e.image,this.mipmaps=e.mipmaps.slice(0),this.mapping=e.mapping,this.wrapS=e.wrapS,this.wrapT=e.wrapT,this.magFilter=e.magFilter,this.minFilter=e.minFilter,this.anisotropy=e.anisotropy,this.format=e.format,this.internalFormat=e.internalFormat,this.type=e.type,this.offset.copy(e.offset),this.repeat.copy(e.repeat),this.center.copy(e.center),this.rotation=e.rotation,this.matrixAutoUpdate=e.matrixAutoUpdate,this.matrix.copy(e.matrix),this.generateMipmaps=e.generateMipmaps,this.premultiplyAlpha=e.premultiplyAlpha,this.flipY=e.flipY,this.unpackAlignment=e.unpackAlignment,this.encoding=e.encoding,this},toJSON:function(e){var t=void 0===e||"string"==typeof e;if(!t&&void 0!==e.textures[this.uuid])return e.textures[this.uuid];var n={metadata:{version:4.5,type:"Texture",generator:"Texture.toJSON"},uuid:this.uuid,name:this.name,mapping:this.mapping,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],center:[this.center.x,this.center.y],rotation:this.rotation,wrap:[this.wrapS,this.wrapT],format:this.format,type:this.type,encoding:this.encoding,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};if(void 0!==this.image){var i=this.image;if(void 0===i.uuid&&(i.uuid=Wt.generateUUID()),!t&&void 0===e.images[i.uuid]){var r;if(Array.isArray(i)){r=[];for(var a=0,o=i.length;a1)switch(this.wrapS){case ne:e.x=e.x-Math.floor(e.x);break;case ie:e.x=e.x<0?0:1;break;case re:1===Math.abs(Math.floor(e.x)%2)?e.x=Math.ceil(e.x)-e.x:e.x=e.x-Math.floor(e.x)}if(e.y<0||e.y>1)switch(this.wrapT){case ne:e.y=e.y-Math.floor(e.y);break;case ie:e.y=e.y<0?0:1;break;case re:1===Math.abs(Math.floor(e.y)%2)?e.y=Math.ceil(e.y)-e.y:e.y=e.y-Math.floor(e.y)}return this.flipY&&(e.y=1-e.y),e}}),Object.defineProperty(Jt.prototype,"needsUpdate",{set:function(e){!0===e&&this.version++}}),Object.defineProperties(Qt.prototype,{width:{get:function(){return this.z},set:function(e){this.z=e}},height:{get:function(){return this.w},set:function(e){this.w=e}}}),Object.assign(Qt.prototype,{isVector4:!0,set:function(e,t,n,i){return this.x=e,this.y=t,this.z=n,this.w=i,this},setScalar:function(e){return this.x=e,this.y=e,this.z=e,this.w=e,this},setX:function(e){return this.x=e,this},setY:function(e){return this.y=e,this},setZ:function(e){return this.z=e,this},setW:function(e){return this.w=e,this},setComponent:function(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;case 3:this.w=t;break;default:throw new Error("index is out of range: "+e)}return this},getComponent:function(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error("index is out of range: "+e)}},clone:function(){return new this.constructor(this.x,this.y,this.z,this.w)},copy:function(e){return this.x=e.x,this.y=e.y,this.z=e.z,this.w=void 0!==e.w?e.w:1,this},add:function(e,t){return void 0!==t?(console.warn("THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(e,t)):(this.x+=e.x,this.y+=e.y,this.z+=e.z,this.w+=e.w,this)},addScalar:function(e){return this.x+=e,this.y+=e,this.z+=e,this.w+=e,this},addVectors:function(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this.z=e.z+t.z,this.w=e.w+t.w,this},addScaledVector:function(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this.w+=e.w*t,this},sub:function(e,t){return void 0!==t?(console.warn("THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(e,t)):(this.x-=e.x,this.y-=e.y,this.z-=e.z,this.w-=e.w,this)},subScalar:function(e){return this.x-=e,this.y-=e,this.z-=e,this.w-=e,this},subVectors:function(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this.w=e.w-t.w,this},multiplyScalar:function(e){return this.x*=e,this.y*=e,this.z*=e,this.w*=e,this},applyMatrix4:function(e){var t=this.x,n=this.y,i=this.z,r=this.w,a=e.elements;return this.x=a[0]*t+a[4]*n+a[8]*i+a[12]*r,this.y=a[1]*t+a[5]*n+a[9]*i+a[13]*r,this.z=a[2]*t+a[6]*n+a[10]*i+a[14]*r,this.w=a[3]*t+a[7]*n+a[11]*i+a[15]*r,this},divideScalar:function(e){return this.multiplyScalar(1/e)},setAxisAngleFromQuaternion:function(e){this.w=2*Math.acos(e.w);var t=Math.sqrt(1-e.w*e.w);return t<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=e.x/t,this.y=e.y/t,this.z=e.z/t),this},setAxisAngleFromRotationMatrix:function(e){var t,n,i,r,a=e.elements,o=a[0],s=a[4],c=a[8],l=a[1],h=a[5],u=a[9],p=a[2],d=a[6],f=a[10];if(Math.abs(s-l)<.01&&Math.abs(c-p)<.01&&Math.abs(u-d)<.01){if(Math.abs(s+l)<.1&&Math.abs(c+p)<.1&&Math.abs(u+d)<.1&&Math.abs(o+h+f-3)<.1)return this.set(1,0,0,0),this;t=Math.PI;var m=(o+1)/2,g=(h+1)/2,v=(f+1)/2,y=(s+l)/4,x=(c+p)/4,b=(u+d)/4;return m>g&&m>v?m<.01?(n=0,i=.707106781,r=.707106781):(i=y/(n=Math.sqrt(m)),r=x/n):g>v?g<.01?(n=.707106781,i=0,r=.707106781):(n=y/(i=Math.sqrt(g)),r=b/i):v<.01?(n=.707106781,i=.707106781,r=0):(n=x/(r=Math.sqrt(v)),i=b/r),this.set(n,i,r,t),this}var _=Math.sqrt((d-u)*(d-u)+(c-p)*(c-p)+(l-s)*(l-s));return Math.abs(_)<.001&&(_=1),this.x=(d-u)/_,this.y=(c-p)/_,this.z=(l-s)/_,this.w=Math.acos((o+h+f-1)/2),this},min:function(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this.z=Math.min(this.z,e.z),this.w=Math.min(this.w,e.w),this},max:function(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this.z=Math.max(this.z,e.z),this.w=Math.max(this.w,e.w),this},clamp:function(e,t){return this.x=Math.max(e.x,Math.min(t.x,this.x)),this.y=Math.max(e.y,Math.min(t.y,this.y)),this.z=Math.max(e.z,Math.min(t.z,this.z)),this.w=Math.max(e.w,Math.min(t.w,this.w)),this},clampScalar:function(e,t){return this.x=Math.max(e,Math.min(t,this.x)),this.y=Math.max(e,Math.min(t,this.y)),this.z=Math.max(e,Math.min(t,this.z)),this.w=Math.max(e,Math.min(t,this.w)),this},clampLength:function(e,t){var n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(e,Math.min(t,n)))},floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this.w=Math.floor(this.w),this},ceil:function(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this.w=Math.ceil(this.w),this},round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this.w=Math.round(this.w),this},roundToZero:function(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z),this.w=this.w<0?Math.ceil(this.w):Math.floor(this.w),this},negate:function(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this.w=-this.w,this},dot:function(e){return this.x*e.x+this.y*e.y+this.z*e.z+this.w*e.w},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},manhattanLength:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)},normalize:function(){return this.divideScalar(this.length()||1)},setLength:function(e){return this.normalize().multiplyScalar(e)},lerp:function(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this.z+=(e.z-this.z)*t,this.w+=(e.w-this.w)*t,this},lerpVectors:function(e,t,n){return this.subVectors(t,e).multiplyScalar(n).add(e)},equals:function(e){return e.x===this.x&&e.y===this.y&&e.z===this.z&&e.w===this.w},fromArray:function(e,t){return void 0===t&&(t=0),this.x=e[t],this.y=e[t+1],this.z=e[t+2],this.w=e[t+3],this},toArray:function(e,t){return void 0===e&&(e=[]),void 0===t&&(t=0),e[t]=this.x,e[t+1]=this.y,e[t+2]=this.z,e[t+3]=this.w,e},fromBufferAttribute:function(e,t,n){return void 0!==n&&console.warn("THREE.Vector4: offset has been removed from .fromBufferAttribute()."),this.x=e.getX(t),this.y=e.getY(t),this.z=e.getZ(t),this.w=e.getW(t),this}}),Kt.prototype=Object.assign(Object.create(Ht.prototype),{constructor:Kt,isWebGLRenderTarget:!0,setSize:function(e,t){this.width===e&&this.height===t||(this.width=e,this.height=t,this.texture.image.width=e,this.texture.image.height=t,this.dispose()),this.viewport.set(0,0,e,t),this.scissor.set(0,0,e,t)},clone:function(){return(new this.constructor).copy(this)},copy:function(e){return this.width=e.width,this.height=e.height,this.viewport.copy(e.viewport),this.texture=e.texture.clone(),this.depthBuffer=e.depthBuffer,this.stencilBuffer=e.stencilBuffer,this.depthTexture=e.depthTexture,this},dispose:function(){this.dispatchEvent({type:"dispose"})}}),$t.prototype=Object.assign(Object.create(Kt.prototype),{constructor:$t,isWebGLMultisampleRenderTarget:!0,copy:function(e){return Kt.prototype.copy.call(this,e),this.samples=e.samples,this}}),Object.assign(en,{slerp:function(e,t,n,i){return n.copy(e).slerp(t,i)},slerpFlat:function(e,t,n,i,r,a,o){var s=n[i+0],c=n[i+1],l=n[i+2],h=n[i+3],u=r[a+0],p=r[a+1],d=r[a+2],f=r[a+3];if(h!==f||s!==u||c!==p||l!==d){var m=1-o,g=s*u+c*p+l*d+h*f,v=g>=0?1:-1,y=1-g*g;if(y>Number.EPSILON){var x=Math.sqrt(y),b=Math.atan2(x,g*v);m=Math.sin(m*b)/x,o=Math.sin(o*b)/x}var _=o*v;if(s=s*m+u*_,c=c*m+p*_,l=l*m+d*_,h=h*m+f*_,m===1-o){var w=1/Math.sqrt(s*s+c*c+l*l+h*h);s*=w,c*=w,l*=w,h*=w}}e[t]=s,e[t+1]=c,e[t+2]=l,e[t+3]=h}}),Object.defineProperties(en.prototype,{x:{get:function(){return this._x},set:function(e){this._x=e,this._onChangeCallback()}},y:{get:function(){return this._y},set:function(e){this._y=e,this._onChangeCallback()}},z:{get:function(){return this._z},set:function(e){this._z=e,this._onChangeCallback()}},w:{get:function(){return this._w},set:function(e){this._w=e,this._onChangeCallback()}}}),Object.assign(en.prototype,{isQuaternion:!0,set:function(e,t,n,i){return this._x=e,this._y=t,this._z=n,this._w=i,this._onChangeCallback(),this},clone:function(){return new this.constructor(this._x,this._y,this._z,this._w)},copy:function(e){return this._x=e.x,this._y=e.y,this._z=e.z,this._w=e.w,this._onChangeCallback(),this},setFromEuler:function(e,t){if(!e||!e.isEuler)throw new Error("THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.");var n=e._x,i=e._y,r=e._z,a=e.order,o=Math.cos,s=Math.sin,c=o(n/2),l=o(i/2),h=o(r/2),u=s(n/2),p=s(i/2),d=s(r/2);return"XYZ"===a?(this._x=u*l*h+c*p*d,this._y=c*p*h-u*l*d,this._z=c*l*d+u*p*h,this._w=c*l*h-u*p*d):"YXZ"===a?(this._x=u*l*h+c*p*d,this._y=c*p*h-u*l*d,this._z=c*l*d-u*p*h,this._w=c*l*h+u*p*d):"ZXY"===a?(this._x=u*l*h-c*p*d,this._y=c*p*h+u*l*d,this._z=c*l*d+u*p*h,this._w=c*l*h-u*p*d):"ZYX"===a?(this._x=u*l*h-c*p*d,this._y=c*p*h+u*l*d,this._z=c*l*d-u*p*h,this._w=c*l*h+u*p*d):"YZX"===a?(this._x=u*l*h+c*p*d,this._y=c*p*h+u*l*d,this._z=c*l*d-u*p*h,this._w=c*l*h-u*p*d):"XZY"===a&&(this._x=u*l*h-c*p*d,this._y=c*p*h-u*l*d,this._z=c*l*d+u*p*h,this._w=c*l*h+u*p*d),!1!==t&&this._onChangeCallback(),this},setFromAxisAngle:function(e,t){var n=t/2,i=Math.sin(n);return this._x=e.x*i,this._y=e.y*i,this._z=e.z*i,this._w=Math.cos(n),this._onChangeCallback(),this},setFromRotationMatrix:function(e){var t,n=e.elements,i=n[0],r=n[4],a=n[8],o=n[1],s=n[5],c=n[9],l=n[2],h=n[6],u=n[10],p=i+s+u;return p>0?(t=.5/Math.sqrt(p+1),this._w=.25/t,this._x=(h-c)*t,this._y=(a-l)*t,this._z=(o-r)*t):i>s&&i>u?(t=2*Math.sqrt(1+i-s-u),this._w=(h-c)/t,this._x=.25*t,this._y=(r+o)/t,this._z=(a+l)/t):s>u?(t=2*Math.sqrt(1+s-i-u),this._w=(a-l)/t,this._x=(r+o)/t,this._y=.25*t,this._z=(c+h)/t):(t=2*Math.sqrt(1+u-i-s),this._w=(o-r)/t,this._x=(a+l)/t,this._y=(c+h)/t,this._z=.25*t),this._onChangeCallback(),this},setFromUnitVectors:function(e,t){var n=e.dot(t)+1;return n<1e-6?(n=0,Math.abs(e.x)>Math.abs(e.z)?(this._x=-e.y,this._y=e.x,this._z=0,this._w=n):(this._x=0,this._y=-e.z,this._z=e.y,this._w=n)):(this._x=e.y*t.z-e.z*t.y,this._y=e.z*t.x-e.x*t.z,this._z=e.x*t.y-e.y*t.x,this._w=n),this.normalize()},angleTo:function(e){return 2*Math.acos(Math.abs(Wt.clamp(this.dot(e),-1,1)))},rotateTowards:function(e,t){var n=this.angleTo(e);if(0===n)return this;var i=Math.min(1,t/n);return this.slerp(e,i),this},inverse:function(){return this.conjugate()},conjugate:function(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this},dot:function(e){return this._x*e._x+this._y*e._y+this._z*e._z+this._w*e._w},lengthSq:function(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w},length:function(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)},normalize:function(){var e=this.length();return 0===e?(this._x=0,this._y=0,this._z=0,this._w=1):(e=1/e,this._x=this._x*e,this._y=this._y*e,this._z=this._z*e,this._w=this._w*e),this._onChangeCallback(),this},multiply:function(e,t){return void 0!==t?(console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."),this.multiplyQuaternions(e,t)):this.multiplyQuaternions(this,e)},premultiply:function(e){return this.multiplyQuaternions(e,this)},multiplyQuaternions:function(e,t){var n=e._x,i=e._y,r=e._z,a=e._w,o=t._x,s=t._y,c=t._z,l=t._w;return this._x=n*l+a*o+i*c-r*s,this._y=i*l+a*s+r*o-n*c,this._z=r*l+a*c+n*s-i*o,this._w=a*l-n*o-i*s-r*c,this._onChangeCallback(),this},slerp:function(e,t){if(0===t)return this;if(1===t)return this.copy(e);var n=this._x,i=this._y,r=this._z,a=this._w,o=a*e._w+n*e._x+i*e._y+r*e._z;if(o<0?(this._w=-e._w,this._x=-e._x,this._y=-e._y,this._z=-e._z,o=-o):this.copy(e),o>=1)return this._w=a,this._x=n,this._y=i,this._z=r,this;var s=1-o*o;if(s<=Number.EPSILON){var c=1-t;return this._w=c*a+t*this._w,this._x=c*n+t*this._x,this._y=c*i+t*this._y,this._z=c*r+t*this._z,this.normalize(),this._onChangeCallback(),this}var l=Math.sqrt(s),h=Math.atan2(l,o),u=Math.sin((1-t)*h)/l,p=Math.sin(t*h)/l;return this._w=a*u+this._w*p,this._x=n*u+this._x*p,this._y=i*u+this._y*p,this._z=r*u+this._z*p,this._onChangeCallback(),this},equals:function(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._w===this._w},fromArray:function(e,t){return void 0===t&&(t=0),this._x=e[t],this._y=e[t+1],this._z=e[t+2],this._w=e[t+3],this._onChangeCallback(),this},toArray:function(e,t){return void 0===e&&(e=[]),void 0===t&&(t=0),e[t]=this._x,e[t+1]=this._y,e[t+2]=this._z,e[t+3]=this._w,e},_onChange:function(e){return this._onChangeCallback=e,this},_onChangeCallback:function(){}});var tn=new rn,nn=new en;function rn(e,t,n){this.x=e||0,this.y=t||0,this.z=n||0}Object.assign(rn.prototype,{isVector3:!0,set:function(e,t,n){return this.x=e,this.y=t,this.z=n,this},setScalar:function(e){return this.x=e,this.y=e,this.z=e,this},setX:function(e){return this.x=e,this},setY:function(e){return this.y=e,this},setZ:function(e){return this.z=e,this},setComponent:function(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;default:throw new Error("index is out of range: "+e)}return this},getComponent:function(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+e)}},clone:function(){return new this.constructor(this.x,this.y,this.z)},copy:function(e){return this.x=e.x,this.y=e.y,this.z=e.z,this},add:function(e,t){return void 0!==t?(console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(e,t)):(this.x+=e.x,this.y+=e.y,this.z+=e.z,this)},addScalar:function(e){return this.x+=e,this.y+=e,this.z+=e,this},addVectors:function(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this.z=e.z+t.z,this},addScaledVector:function(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this},sub:function(e,t){return void 0!==t?(console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(e,t)):(this.x-=e.x,this.y-=e.y,this.z-=e.z,this)},subScalar:function(e){return this.x-=e,this.y-=e,this.z-=e,this},subVectors:function(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this},multiply:function(e,t){return void 0!==t?(console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."),this.multiplyVectors(e,t)):(this.x*=e.x,this.y*=e.y,this.z*=e.z,this)},multiplyScalar:function(e){return this.x*=e,this.y*=e,this.z*=e,this},multiplyVectors:function(e,t){return this.x=e.x*t.x,this.y=e.y*t.y,this.z=e.z*t.z,this},applyEuler:function(e){return e&&e.isEuler||console.error("THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order."),this.applyQuaternion(nn.setFromEuler(e))},applyAxisAngle:function(e,t){return this.applyQuaternion(nn.setFromAxisAngle(e,t))},applyMatrix3:function(e){var t=this.x,n=this.y,i=this.z,r=e.elements;return this.x=r[0]*t+r[3]*n+r[6]*i,this.y=r[1]*t+r[4]*n+r[7]*i,this.z=r[2]*t+r[5]*n+r[8]*i,this},applyNormalMatrix:function(e){return this.applyMatrix3(e).normalize()},applyMatrix4:function(e){var t=this.x,n=this.y,i=this.z,r=e.elements,a=1/(r[3]*t+r[7]*n+r[11]*i+r[15]);return this.x=(r[0]*t+r[4]*n+r[8]*i+r[12])*a,this.y=(r[1]*t+r[5]*n+r[9]*i+r[13])*a,this.z=(r[2]*t+r[6]*n+r[10]*i+r[14])*a,this},applyQuaternion:function(e){var t=this.x,n=this.y,i=this.z,r=e.x,a=e.y,o=e.z,s=e.w,c=s*t+a*i-o*n,l=s*n+o*t-r*i,h=s*i+r*n-a*t,u=-r*t-a*n-o*i;return this.x=c*s+u*-r+l*-o-h*-a,this.y=l*s+u*-a+h*-r-c*-o,this.z=h*s+u*-o+c*-a-l*-r,this},project:function(e){return this.applyMatrix4(e.matrixWorldInverse).applyMatrix4(e.projectionMatrix)},unproject:function(e){return this.applyMatrix4(e.projectionMatrixInverse).applyMatrix4(e.matrixWorld)},transformDirection:function(e){var t=this.x,n=this.y,i=this.z,r=e.elements;return this.x=r[0]*t+r[4]*n+r[8]*i,this.y=r[1]*t+r[5]*n+r[9]*i,this.z=r[2]*t+r[6]*n+r[10]*i,this.normalize()},divide:function(e){return this.x/=e.x,this.y/=e.y,this.z/=e.z,this},divideScalar:function(e){return this.multiplyScalar(1/e)},min:function(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this.z=Math.min(this.z,e.z),this},max:function(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this.z=Math.max(this.z,e.z),this},clamp:function(e,t){return this.x=Math.max(e.x,Math.min(t.x,this.x)),this.y=Math.max(e.y,Math.min(t.y,this.y)),this.z=Math.max(e.z,Math.min(t.z,this.z)),this},clampScalar:function(e,t){return this.x=Math.max(e,Math.min(t,this.x)),this.y=Math.max(e,Math.min(t,this.y)),this.z=Math.max(e,Math.min(t,this.z)),this},clampLength:function(e,t){var n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(e,Math.min(t,n)))},floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this},ceil:function(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this},round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this},roundToZero:function(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z),this},negate:function(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this},dot:function(e){return this.x*e.x+this.y*e.y+this.z*e.z},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)},manhattanLength:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)},normalize:function(){return this.divideScalar(this.length()||1)},setLength:function(e){return this.normalize().multiplyScalar(e)},lerp:function(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this.z+=(e.z-this.z)*t,this},lerpVectors:function(e,t,n){return this.subVectors(t,e).multiplyScalar(n).add(e)},cross:function(e,t){return void 0!==t?(console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."),this.crossVectors(e,t)):this.crossVectors(this,e)},crossVectors:function(e,t){var n=e.x,i=e.y,r=e.z,a=t.x,o=t.y,s=t.z;return this.x=i*s-r*o,this.y=r*a-n*s,this.z=n*o-i*a,this},projectOnVector:function(e){var t=e.lengthSq();if(0===t)return this.set(0,0,0);var n=e.dot(this)/t;return this.copy(e).multiplyScalar(n)},projectOnPlane:function(e){return tn.copy(this).projectOnVector(e),this.sub(tn)},reflect:function(e){return this.sub(tn.copy(e).multiplyScalar(2*this.dot(e)))},angleTo:function(e){var t=Math.sqrt(this.lengthSq()*e.lengthSq());if(0===t)return Math.PI/2;var n=this.dot(e)/t;return Math.acos(Wt.clamp(n,-1,1))},distanceTo:function(e){return Math.sqrt(this.distanceToSquared(e))},distanceToSquared:function(e){var t=this.x-e.x,n=this.y-e.y,i=this.z-e.z;return t*t+n*n+i*i},manhattanDistanceTo:function(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)+Math.abs(this.z-e.z)},setFromSpherical:function(e){return this.setFromSphericalCoords(e.radius,e.phi,e.theta)},setFromSphericalCoords:function(e,t,n){var i=Math.sin(t)*e;return this.x=i*Math.sin(n),this.y=Math.cos(t)*e,this.z=i*Math.cos(n),this},setFromCylindrical:function(e){return this.setFromCylindricalCoords(e.radius,e.theta,e.y)},setFromCylindricalCoords:function(e,t,n){return this.x=e*Math.sin(t),this.y=n,this.z=e*Math.cos(t),this},setFromMatrixPosition:function(e){var t=e.elements;return this.x=t[12],this.y=t[13],this.z=t[14],this},setFromMatrixScale:function(e){var t=this.setFromMatrixColumn(e,0).length(),n=this.setFromMatrixColumn(e,1).length(),i=this.setFromMatrixColumn(e,2).length();return this.x=t,this.y=n,this.z=i,this},setFromMatrixColumn:function(e,t){return this.fromArray(e.elements,4*t)},setFromMatrix3Column:function(e,t){return this.fromArray(e.elements,3*t)},equals:function(e){return e.x===this.x&&e.y===this.y&&e.z===this.z},fromArray:function(e,t){return void 0===t&&(t=0),this.x=e[t],this.y=e[t+1],this.z=e[t+2],this},toArray:function(e,t){return void 0===e&&(e=[]),void 0===t&&(t=0),e[t]=this.x,e[t+1]=this.y,e[t+2]=this.z,e},fromBufferAttribute:function(e,t,n){return void 0!==n&&console.warn("THREE.Vector3: offset has been removed from .fromBufferAttribute()."),this.x=e.getX(t),this.y=e.getY(t),this.z=e.getZ(t),this}});var an=new rn,on=new pn,sn=new rn(0,0,0),cn=new rn(1,1,1),ln=new rn,hn=new rn,un=new rn;function pn(){this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],arguments.length>0&&console.error("THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.")}Object.assign(pn.prototype,{isMatrix4:!0,set:function(e,t,n,i,r,a,o,s,c,l,h,u,p,d,f,m){var g=this.elements;return g[0]=e,g[4]=t,g[8]=n,g[12]=i,g[1]=r,g[5]=a,g[9]=o,g[13]=s,g[2]=c,g[6]=l,g[10]=h,g[14]=u,g[3]=p,g[7]=d,g[11]=f,g[15]=m,this},identity:function(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this},clone:function(){return(new pn).fromArray(this.elements)},copy:function(e){var t=this.elements,n=e.elements;return t[0]=n[0],t[1]=n[1],t[2]=n[2],t[3]=n[3],t[4]=n[4],t[5]=n[5],t[6]=n[6],t[7]=n[7],t[8]=n[8],t[9]=n[9],t[10]=n[10],t[11]=n[11],t[12]=n[12],t[13]=n[13],t[14]=n[14],t[15]=n[15],this},copyPosition:function(e){var t=this.elements,n=e.elements;return t[12]=n[12],t[13]=n[13],t[14]=n[14],this},extractBasis:function(e,t,n){return e.setFromMatrixColumn(this,0),t.setFromMatrixColumn(this,1),n.setFromMatrixColumn(this,2),this},makeBasis:function(e,t,n){return this.set(e.x,t.x,n.x,0,e.y,t.y,n.y,0,e.z,t.z,n.z,0,0,0,0,1),this},extractRotation:function(e){var t=this.elements,n=e.elements,i=1/an.setFromMatrixColumn(e,0).length(),r=1/an.setFromMatrixColumn(e,1).length(),a=1/an.setFromMatrixColumn(e,2).length();return t[0]=n[0]*i,t[1]=n[1]*i,t[2]=n[2]*i,t[3]=0,t[4]=n[4]*r,t[5]=n[5]*r,t[6]=n[6]*r,t[7]=0,t[8]=n[8]*a,t[9]=n[9]*a,t[10]=n[10]*a,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,this},makeRotationFromEuler:function(e){e&&e.isEuler||console.error("THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.");var t=this.elements,n=e.x,i=e.y,r=e.z,a=Math.cos(n),o=Math.sin(n),s=Math.cos(i),c=Math.sin(i),l=Math.cos(r),h=Math.sin(r);if("XYZ"===e.order){var u=a*l,p=a*h,d=o*l,f=o*h;t[0]=s*l,t[4]=-s*h,t[8]=c,t[1]=p+d*c,t[5]=u-f*c,t[9]=-o*s,t[2]=f-u*c,t[6]=d+p*c,t[10]=a*s}else if("YXZ"===e.order){var m=s*l,g=s*h,v=c*l,y=c*h;t[0]=m+y*o,t[4]=v*o-g,t[8]=a*c,t[1]=a*h,t[5]=a*l,t[9]=-o,t[2]=g*o-v,t[6]=y+m*o,t[10]=a*s}else if("ZXY"===e.order){m=s*l,g=s*h,v=c*l,y=c*h;t[0]=m-y*o,t[4]=-a*h,t[8]=v+g*o,t[1]=g+v*o,t[5]=a*l,t[9]=y-m*o,t[2]=-a*c,t[6]=o,t[10]=a*s}else if("ZYX"===e.order){u=a*l,p=a*h,d=o*l,f=o*h;t[0]=s*l,t[4]=d*c-p,t[8]=u*c+f,t[1]=s*h,t[5]=f*c+u,t[9]=p*c-d,t[2]=-c,t[6]=o*s,t[10]=a*s}else if("YZX"===e.order){var x=a*s,b=a*c,_=o*s,w=o*c;t[0]=s*l,t[4]=w-x*h,t[8]=_*h+b,t[1]=h,t[5]=a*l,t[9]=-o*l,t[2]=-c*l,t[6]=b*h+_,t[10]=x-w*h}else if("XZY"===e.order){x=a*s,b=a*c,_=o*s,w=o*c;t[0]=s*l,t[4]=-h,t[8]=c*l,t[1]=x*h+w,t[5]=a*l,t[9]=b*h-_,t[2]=_*h-b,t[6]=o*l,t[10]=w*h+x}return t[3]=0,t[7]=0,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,this},makeRotationFromQuaternion:function(e){return this.compose(sn,e,cn)},lookAt:function(e,t,n){var i=this.elements;return un.subVectors(e,t),0===un.lengthSq()&&(un.z=1),un.normalize(),ln.crossVectors(n,un),0===ln.lengthSq()&&(1===Math.abs(n.z)?un.x+=1e-4:un.z+=1e-4,un.normalize(),ln.crossVectors(n,un)),ln.normalize(),hn.crossVectors(un,ln),i[0]=ln.x,i[4]=hn.x,i[8]=un.x,i[1]=ln.y,i[5]=hn.y,i[9]=un.y,i[2]=ln.z,i[6]=hn.z,i[10]=un.z,this},multiply:function(e,t){return void 0!==t?(console.warn("THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead."),this.multiplyMatrices(e,t)):this.multiplyMatrices(this,e)},premultiply:function(e){return this.multiplyMatrices(e,this)},multiplyMatrices:function(e,t){var n=e.elements,i=t.elements,r=this.elements,a=n[0],o=n[4],s=n[8],c=n[12],l=n[1],h=n[5],u=n[9],p=n[13],d=n[2],f=n[6],m=n[10],g=n[14],v=n[3],y=n[7],x=n[11],b=n[15],_=i[0],w=i[4],M=i[8],S=i[12],T=i[1],E=i[5],A=i[9],L=i[13],R=i[2],P=i[6],C=i[10],O=i[14],D=i[3],I=i[7],N=i[11],B=i[15];return r[0]=a*_+o*T+s*R+c*D,r[4]=a*w+o*E+s*P+c*I,r[8]=a*M+o*A+s*C+c*N,r[12]=a*S+o*L+s*O+c*B,r[1]=l*_+h*T+u*R+p*D,r[5]=l*w+h*E+u*P+p*I,r[9]=l*M+h*A+u*C+p*N,r[13]=l*S+h*L+u*O+p*B,r[2]=d*_+f*T+m*R+g*D,r[6]=d*w+f*E+m*P+g*I,r[10]=d*M+f*A+m*C+g*N,r[14]=d*S+f*L+m*O+g*B,r[3]=v*_+y*T+x*R+b*D,r[7]=v*w+y*E+x*P+b*I,r[11]=v*M+y*A+x*C+b*N,r[15]=v*S+y*L+x*O+b*B,this},multiplyScalar:function(e){var t=this.elements;return t[0]*=e,t[4]*=e,t[8]*=e,t[12]*=e,t[1]*=e,t[5]*=e,t[9]*=e,t[13]*=e,t[2]*=e,t[6]*=e,t[10]*=e,t[14]*=e,t[3]*=e,t[7]*=e,t[11]*=e,t[15]*=e,this},determinant:function(){var e=this.elements,t=e[0],n=e[4],i=e[8],r=e[12],a=e[1],o=e[5],s=e[9],c=e[13],l=e[2],h=e[6],u=e[10],p=e[14];return e[3]*(+r*s*h-i*c*h-r*o*u+n*c*u+i*o*p-n*s*p)+e[7]*(+t*s*p-t*c*u+r*a*u-i*a*p+i*c*l-r*s*l)+e[11]*(+t*c*h-t*o*p-r*a*h+n*a*p+r*o*l-n*c*l)+e[15]*(-i*o*l-t*s*h+t*o*u+i*a*h-n*a*u+n*s*l)},transpose:function(){var e,t=this.elements;return e=t[1],t[1]=t[4],t[4]=e,e=t[2],t[2]=t[8],t[8]=e,e=t[6],t[6]=t[9],t[9]=e,e=t[3],t[3]=t[12],t[12]=e,e=t[7],t[7]=t[13],t[13]=e,e=t[11],t[11]=t[14],t[14]=e,this},setPosition:function(e,t,n){var i=this.elements;return e.isVector3?(i[12]=e.x,i[13]=e.y,i[14]=e.z):(i[12]=e,i[13]=t,i[14]=n),this},getInverse:function(e,t){var n=this.elements,i=e.elements,r=i[0],a=i[1],o=i[2],s=i[3],c=i[4],l=i[5],h=i[6],u=i[7],p=i[8],d=i[9],f=i[10],m=i[11],g=i[12],v=i[13],y=i[14],x=i[15],b=d*y*u-v*f*u+v*h*m-l*y*m-d*h*x+l*f*x,_=g*f*u-p*y*u-g*h*m+c*y*m+p*h*x-c*f*x,w=p*v*u-g*d*u+g*l*m-c*v*m-p*l*x+c*d*x,M=g*d*h-p*v*h-g*l*f+c*v*f+p*l*y-c*d*y,S=r*b+a*_+o*w+s*M;if(0===S){var T="THREE.Matrix4: .getInverse() can't invert matrix, determinant is 0";if(!0===t)throw new Error(T);return console.warn(T),this.identity()}var E=1/S;return n[0]=b*E,n[1]=(v*f*s-d*y*s-v*o*m+a*y*m+d*o*x-a*f*x)*E,n[2]=(l*y*s-v*h*s+v*o*u-a*y*u-l*o*x+a*h*x)*E,n[3]=(d*h*s-l*f*s-d*o*u+a*f*u+l*o*m-a*h*m)*E,n[4]=_*E,n[5]=(p*y*s-g*f*s+g*o*m-r*y*m-p*o*x+r*f*x)*E,n[6]=(g*h*s-c*y*s-g*o*u+r*y*u+c*o*x-r*h*x)*E,n[7]=(c*f*s-p*h*s+p*o*u-r*f*u-c*o*m+r*h*m)*E,n[8]=w*E,n[9]=(g*d*s-p*v*s-g*a*m+r*v*m+p*a*x-r*d*x)*E,n[10]=(c*v*s-g*l*s+g*a*u-r*v*u-c*a*x+r*l*x)*E,n[11]=(p*l*s-c*d*s-p*a*u+r*d*u+c*a*m-r*l*m)*E,n[12]=M*E,n[13]=(p*v*o-g*d*o+g*a*f-r*v*f-p*a*y+r*d*y)*E,n[14]=(g*l*o-c*v*o-g*a*h+r*v*h+c*a*y-r*l*y)*E,n[15]=(c*d*o-p*l*o+p*a*h-r*d*h-c*a*f+r*l*f)*E,this},scale:function(e){var t=this.elements,n=e.x,i=e.y,r=e.z;return t[0]*=n,t[4]*=i,t[8]*=r,t[1]*=n,t[5]*=i,t[9]*=r,t[2]*=n,t[6]*=i,t[10]*=r,t[3]*=n,t[7]*=i,t[11]*=r,this},getMaxScaleOnAxis:function(){var e=this.elements,t=e[0]*e[0]+e[1]*e[1]+e[2]*e[2],n=e[4]*e[4]+e[5]*e[5]+e[6]*e[6],i=e[8]*e[8]+e[9]*e[9]+e[10]*e[10];return Math.sqrt(Math.max(t,n,i))},makeTranslation:function(e,t,n){return this.set(1,0,0,e,0,1,0,t,0,0,1,n,0,0,0,1),this},makeRotationX:function(e){var t=Math.cos(e),n=Math.sin(e);return this.set(1,0,0,0,0,t,-n,0,0,n,t,0,0,0,0,1),this},makeRotationY:function(e){var t=Math.cos(e),n=Math.sin(e);return this.set(t,0,n,0,0,1,0,0,-n,0,t,0,0,0,0,1),this},makeRotationZ:function(e){var t=Math.cos(e),n=Math.sin(e);return this.set(t,-n,0,0,n,t,0,0,0,0,1,0,0,0,0,1),this},makeRotationAxis:function(e,t){var n=Math.cos(t),i=Math.sin(t),r=1-n,a=e.x,o=e.y,s=e.z,c=r*a,l=r*o;return this.set(c*a+n,c*o-i*s,c*s+i*o,0,c*o+i*s,l*o+n,l*s-i*a,0,c*s-i*o,l*s+i*a,r*s*s+n,0,0,0,0,1),this},makeScale:function(e,t,n){return this.set(e,0,0,0,0,t,0,0,0,0,n,0,0,0,0,1),this},makeShear:function(e,t,n){return this.set(1,t,n,0,e,1,n,0,e,t,1,0,0,0,0,1),this},compose:function(e,t,n){var i=this.elements,r=t._x,a=t._y,o=t._z,s=t._w,c=r+r,l=a+a,h=o+o,u=r*c,p=r*l,d=r*h,f=a*l,m=a*h,g=o*h,v=s*c,y=s*l,x=s*h,b=n.x,_=n.y,w=n.z;return i[0]=(1-(f+g))*b,i[1]=(p+x)*b,i[2]=(d-y)*b,i[3]=0,i[4]=(p-x)*_,i[5]=(1-(u+g))*_,i[6]=(m+v)*_,i[7]=0,i[8]=(d+y)*w,i[9]=(m-v)*w,i[10]=(1-(u+f))*w,i[11]=0,i[12]=e.x,i[13]=e.y,i[14]=e.z,i[15]=1,this},decompose:function(e,t,n){var i=this.elements,r=an.set(i[0],i[1],i[2]).length(),a=an.set(i[4],i[5],i[6]).length(),o=an.set(i[8],i[9],i[10]).length();this.determinant()<0&&(r=-r),e.x=i[12],e.y=i[13],e.z=i[14],on.copy(this);var s=1/r,c=1/a,l=1/o;return on.elements[0]*=s,on.elements[1]*=s,on.elements[2]*=s,on.elements[4]*=c,on.elements[5]*=c,on.elements[6]*=c,on.elements[8]*=l,on.elements[9]*=l,on.elements[10]*=l,t.setFromRotationMatrix(on),n.x=r,n.y=a,n.z=o,this},makePerspective:function(e,t,n,i,r,a){void 0===a&&console.warn("THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.");var o=this.elements,s=2*r/(t-e),c=2*r/(n-i),l=(t+e)/(t-e),h=(n+i)/(n-i),u=-(a+r)/(a-r),p=-2*a*r/(a-r);return o[0]=s,o[4]=0,o[8]=l,o[12]=0,o[1]=0,o[5]=c,o[9]=h,o[13]=0,o[2]=0,o[6]=0,o[10]=u,o[14]=p,o[3]=0,o[7]=0,o[11]=-1,o[15]=0,this},makeOrthographic:function(e,t,n,i,r,a){var o=this.elements,s=1/(t-e),c=1/(n-i),l=1/(a-r),h=(t+e)*s,u=(n+i)*c,p=(a+r)*l;return o[0]=2*s,o[4]=0,o[8]=0,o[12]=-h,o[1]=0,o[5]=2*c,o[9]=0,o[13]=-u,o[2]=0,o[6]=0,o[10]=-2*l,o[14]=-p,o[3]=0,o[7]=0,o[11]=0,o[15]=1,this},equals:function(e){for(var t=this.elements,n=e.elements,i=0;i<16;i++)if(t[i]!==n[i])return!1;return!0},fromArray:function(e,t){void 0===t&&(t=0);for(var n=0;n<16;n++)this.elements[n]=e[n+t];return this},toArray:function(e,t){void 0===e&&(e=[]),void 0===t&&(t=0);var n=this.elements;return e[t]=n[0],e[t+1]=n[1],e[t+2]=n[2],e[t+3]=n[3],e[t+4]=n[4],e[t+5]=n[5],e[t+6]=n[6],e[t+7]=n[7],e[t+8]=n[8],e[t+9]=n[9],e[t+10]=n[10],e[t+11]=n[11],e[t+12]=n[12],e[t+13]=n[13],e[t+14]=n[14],e[t+15]=n[15],e}});var dn=new pn,fn=new en;function mn(e,t,n,i){this._x=e||0,this._y=t||0,this._z=n||0,this._order=i||mn.DefaultOrder}function gn(){this.mask=1}mn.RotationOrders=["XYZ","YZX","ZXY","XZY","YXZ","ZYX"],mn.DefaultOrder="XYZ",Object.defineProperties(mn.prototype,{x:{get:function(){return this._x},set:function(e){this._x=e,this._onChangeCallback()}},y:{get:function(){return this._y},set:function(e){this._y=e,this._onChangeCallback()}},z:{get:function(){return this._z},set:function(e){this._z=e,this._onChangeCallback()}},order:{get:function(){return this._order},set:function(e){this._order=e,this._onChangeCallback()}}}),Object.assign(mn.prototype,{isEuler:!0,set:function(e,t,n,i){return this._x=e,this._y=t,this._z=n,this._order=i||this._order,this._onChangeCallback(),this},clone:function(){return new this.constructor(this._x,this._y,this._z,this._order)},copy:function(e){return this._x=e._x,this._y=e._y,this._z=e._z,this._order=e._order,this._onChangeCallback(),this},setFromRotationMatrix:function(e,t,n){var i=Wt.clamp,r=e.elements,a=r[0],o=r[4],s=r[8],c=r[1],l=r[5],h=r[9],u=r[2],p=r[6],d=r[10];return"XYZ"===(t=t||this._order)?(this._y=Math.asin(i(s,-1,1)),Math.abs(s)<.9999999?(this._x=Math.atan2(-h,d),this._z=Math.atan2(-o,a)):(this._x=Math.atan2(p,l),this._z=0)):"YXZ"===t?(this._x=Math.asin(-i(h,-1,1)),Math.abs(h)<.9999999?(this._y=Math.atan2(s,d),this._z=Math.atan2(c,l)):(this._y=Math.atan2(-u,a),this._z=0)):"ZXY"===t?(this._x=Math.asin(i(p,-1,1)),Math.abs(p)<.9999999?(this._y=Math.atan2(-u,d),this._z=Math.atan2(-o,l)):(this._y=0,this._z=Math.atan2(c,a))):"ZYX"===t?(this._y=Math.asin(-i(u,-1,1)),Math.abs(u)<.9999999?(this._x=Math.atan2(p,d),this._z=Math.atan2(c,a)):(this._x=0,this._z=Math.atan2(-o,l))):"YZX"===t?(this._z=Math.asin(i(c,-1,1)),Math.abs(c)<.9999999?(this._x=Math.atan2(-h,l),this._y=Math.atan2(-u,a)):(this._x=0,this._y=Math.atan2(s,d))):"XZY"===t?(this._z=Math.asin(-i(o,-1,1)),Math.abs(o)<.9999999?(this._x=Math.atan2(p,l),this._y=Math.atan2(s,a)):(this._x=Math.atan2(-h,d),this._y=0)):console.warn("THREE.Euler: .setFromRotationMatrix() given unsupported order: "+t),this._order=t,!1!==n&&this._onChangeCallback(),this},setFromQuaternion:function(e,t,n){return dn.makeRotationFromQuaternion(e),this.setFromRotationMatrix(dn,t,n)},setFromVector3:function(e,t){return this.set(e.x,e.y,e.z,t||this._order)},reorder:function(e){return fn.setFromEuler(this),this.setFromQuaternion(fn,e)},equals:function(e){return e._x===this._x&&e._y===this._y&&e._z===this._z&&e._order===this._order},fromArray:function(e){return this._x=e[0],this._y=e[1],this._z=e[2],void 0!==e[3]&&(this._order=e[3]),this._onChangeCallback(),this},toArray:function(e,t){return void 0===e&&(e=[]),void 0===t&&(t=0),e[t]=this._x,e[t+1]=this._y,e[t+2]=this._z,e[t+3]=this._order,e},toVector3:function(e){return e?e.set(this._x,this._y,this._z):new rn(this._x,this._y,this._z)},_onChange:function(e){return this._onChangeCallback=e,this},_onChangeCallback:function(){}}),Object.assign(gn.prototype,{set:function(e){this.mask=1<1){for(var t=0;t1){for(var t=0;t0){i.children=[];for(s=0;s0&&(n.geometries=u),p.length>0&&(n.materials=p),d.length>0&&(n.textures=d),f.length>0&&(n.images=f),o.length>0&&(n.shapes=o)}return n.object=i,n;function m(e){var t=[];for(var n in e){var i=e[n];delete i.metadata,t.push(i)}return t}},clone:function(e){return(new this.constructor).copy(this,e)},copy:function(e,t){if(void 0===t&&(t=!0),this.name=e.name,this.up.copy(e.up),this.position.copy(e.position),this.quaternion.copy(e.quaternion),this.scale.copy(e.scale),this.matrix.copy(e.matrix),this.matrixWorld.copy(e.matrixWorld),this.matrixAutoUpdate=e.matrixAutoUpdate,this.matrixWorldNeedsUpdate=e.matrixWorldNeedsUpdate,this.layers.mask=e.layers.mask,this.visible=e.visible,this.castShadow=e.castShadow,this.receiveShadow=e.receiveShadow,this.frustumCulled=e.frustumCulled,this.renderOrder=e.renderOrder,this.userData=JSON.parse(JSON.stringify(e.userData)),!0===t)for(var n=0;ns)return!1}return!0}Object.assign(Wn.prototype,{isBox3:!0,set:function(e,t){return this.min.copy(e),this.max.copy(t),this},setFromArray:function(e){for(var t=1/0,n=1/0,i=1/0,r=-1/0,a=-1/0,o=-1/0,s=0,c=e.length;sr&&(r=l),h>a&&(a=h),u>o&&(o=u)}return this.min.set(t,n,i),this.max.set(r,a,o),this},setFromBufferAttribute:function(e){for(var t=1/0,n=1/0,i=1/0,r=-1/0,a=-1/0,o=-1/0,s=0,c=e.count;sr&&(r=l),h>a&&(a=h),u>o&&(o=u)}return this.min.set(t,n,i),this.max.set(r,a,o),this},setFromPoints:function(e){this.makeEmpty();for(var t=0,n=e.length;tthis.max.x||e.ythis.max.y||e.zthis.max.z)},containsBox:function(e){return this.min.x<=e.min.x&&e.max.x<=this.max.x&&this.min.y<=e.min.y&&e.max.y<=this.max.y&&this.min.z<=e.min.z&&e.max.z<=this.max.z},getParameter:function(e,t){return void 0===t&&(console.warn("THREE.Box3: .getParameter() target is now required"),t=new rn),t.set((e.x-this.min.x)/(this.max.x-this.min.x),(e.y-this.min.y)/(this.max.y-this.min.y),(e.z-this.min.z)/(this.max.z-this.min.z))},intersectsBox:function(e){return!(e.max.xthis.max.x||e.max.ythis.max.y||e.max.zthis.max.z)},intersectsSphere:function(e){return this.clampPoint(e.center,Dn),Dn.distanceToSquared(e.center)<=e.radius*e.radius},intersectsPlane:function(e){var t,n;return e.normal.x>0?(t=e.normal.x*this.min.x,n=e.normal.x*this.max.x):(t=e.normal.x*this.max.x,n=e.normal.x*this.min.x),e.normal.y>0?(t+=e.normal.y*this.min.y,n+=e.normal.y*this.max.y):(t+=e.normal.y*this.max.y,n+=e.normal.y*this.min.y),e.normal.z>0?(t+=e.normal.z*this.min.z,n+=e.normal.z*this.max.z):(t+=e.normal.z*this.max.z,n+=e.normal.z*this.min.z),t<=-e.constant&&n>=-e.constant},intersectsTriangle:function(e){if(this.isEmpty())return!1;this.getCenter(Hn),Vn.subVectors(this.max,Hn),Nn.subVectors(e.a,Hn),Bn.subVectors(e.b,Hn),zn.subVectors(e.c,Hn),Fn.subVectors(Bn,Nn),Un.subVectors(zn,Bn),Gn.subVectors(Nn,zn);var t=[0,-Fn.z,Fn.y,0,-Un.z,Un.y,0,-Gn.z,Gn.y,Fn.z,0,-Fn.x,Un.z,0,-Un.x,Gn.z,0,-Gn.x,-Fn.y,Fn.x,0,-Un.y,Un.x,0,-Gn.y,Gn.x,0];return!!qn(t,Nn,Bn,zn,Vn)&&(!!qn(t=[1,0,0,0,1,0,0,0,1],Nn,Bn,zn,Vn)&&(kn.crossVectors(Fn,Un),qn(t=[kn.x,kn.y,kn.z],Nn,Bn,zn,Vn)))},clampPoint:function(e,t){return void 0===t&&(console.warn("THREE.Box3: .clampPoint() target is now required"),t=new rn),t.copy(e).clamp(this.min,this.max)},distanceToPoint:function(e){return Dn.copy(e).clamp(this.min,this.max).sub(e).length()},getBoundingSphere:function(e){return void 0===e&&console.error("THREE.Box3: .getBoundingSphere() target is now required"),this.getCenter(e.center),e.radius=.5*this.getSize(Dn).length(),e},intersect:function(e){return this.min.max(e.min),this.max.min(e.max),this.isEmpty()&&this.makeEmpty(),this},union:function(e){return this.min.min(e.min),this.max.max(e.max),this},applyMatrix4:function(e){return this.isEmpty()?this:(On[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(e),On[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(e),On[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(e),On[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(e),On[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(e),On[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(e),On[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(e),On[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(e),this.setFromPoints(On),this)},translate:function(e){return this.min.add(e),this.max.add(e),this},equals:function(e){return e.min.equals(this.min)&&e.max.equals(this.max)}});var Xn=new Wn;function Yn(e,t){this.center=void 0!==e?e:new rn,this.radius=void 0!==t?t:0}Object.assign(Yn.prototype,{set:function(e,t){return this.center.copy(e),this.radius=t,this},setFromPoints:function(e,t){var n=this.center;void 0!==t?n.copy(t):Xn.setFromPoints(e).getCenter(n);for(var i=0,r=0,a=e.length;rthis.radius*this.radius&&(t.sub(this.center).normalize(),t.multiplyScalar(this.radius).add(this.center)),t},getBoundingBox:function(e){return void 0===e&&(console.warn("THREE.Sphere: .getBoundingBox() target is now required"),e=new Wn),e.set(this.center,this.center),e.expandByScalar(this.radius),e},applyMatrix4:function(e){return this.center.applyMatrix4(e),this.radius=this.radius*e.getMaxScaleOnAxis(),this},translate:function(e){return this.center.add(e),this},equals:function(e){return e.center.equals(this.center)&&e.radius===this.radius}});var Zn=new rn,Jn=new rn,Qn=new rn,Kn=new rn,$n=new rn,ei=new rn,ti=new rn;function ni(e,t){this.origin=void 0!==e?e:new rn,this.direction=void 0!==t?t:new rn(0,0,-1)}Object.assign(ni.prototype,{set:function(e,t){return this.origin.copy(e),this.direction.copy(t),this},clone:function(){return(new this.constructor).copy(this)},copy:function(e){return this.origin.copy(e.origin),this.direction.copy(e.direction),this},at:function(e,t){return void 0===t&&(console.warn("THREE.Ray: .at() target is now required"),t=new rn),t.copy(this.direction).multiplyScalar(e).add(this.origin)},lookAt:function(e){return this.direction.copy(e).sub(this.origin).normalize(),this},recast:function(e){return this.origin.copy(this.at(e,Zn)),this},closestPointToPoint:function(e,t){void 0===t&&(console.warn("THREE.Ray: .closestPointToPoint() target is now required"),t=new rn),t.subVectors(e,this.origin);var n=t.dot(this.direction);return n<0?t.copy(this.origin):t.copy(this.direction).multiplyScalar(n).add(this.origin)},distanceToPoint:function(e){return Math.sqrt(this.distanceSqToPoint(e))},distanceSqToPoint:function(e){var t=Zn.subVectors(e,this.origin).dot(this.direction);return t<0?this.origin.distanceToSquared(e):(Zn.copy(this.direction).multiplyScalar(t).add(this.origin),Zn.distanceToSquared(e))},distanceSqToSegment:function(e,t,n,i){Jn.copy(e).add(t).multiplyScalar(.5),Qn.copy(t).sub(e).normalize(),Kn.copy(this.origin).sub(Jn);var r,a,o,s,c=.5*e.distanceTo(t),l=-this.direction.dot(Qn),h=Kn.dot(this.direction),u=-Kn.dot(Qn),p=Kn.lengthSq(),d=Math.abs(1-l*l);if(d>0)if(a=l*h-u,s=c*d,(r=l*u-h)>=0)if(a>=-s)if(a<=s){var f=1/d;o=(r*=f)*(r+l*(a*=f)+2*h)+a*(l*r+a+2*u)+p}else a=c,o=-(r=Math.max(0,-(l*a+h)))*r+a*(a+2*u)+p;else a=-c,o=-(r=Math.max(0,-(l*a+h)))*r+a*(a+2*u)+p;else a<=-s?o=-(r=Math.max(0,-(-l*c+h)))*r+(a=r>0?-c:Math.min(Math.max(-c,-u),c))*(a+2*u)+p:a<=s?(r=0,o=(a=Math.min(Math.max(-c,-u),c))*(a+2*u)+p):o=-(r=Math.max(0,-(l*c+h)))*r+(a=r>0?c:Math.min(Math.max(-c,-u),c))*(a+2*u)+p;else a=l>0?-c:c,o=-(r=Math.max(0,-(l*a+h)))*r+a*(a+2*u)+p;return n&&n.copy(this.direction).multiplyScalar(r).add(this.origin),i&&i.copy(Qn).multiplyScalar(a).add(Jn),o},intersectSphere:function(e,t){Zn.subVectors(e.center,this.origin);var n=Zn.dot(this.direction),i=Zn.dot(Zn)-n*n,r=e.radius*e.radius;if(i>r)return null;var a=Math.sqrt(r-i),o=n-a,s=n+a;return o<0&&s<0?null:o<0?this.at(s,t):this.at(o,t)},intersectsSphere:function(e){return this.distanceSqToPoint(e.center)<=e.radius*e.radius},distanceToPlane:function(e){var t=e.normal.dot(this.direction);if(0===t)return 0===e.distanceToPoint(this.origin)?0:null;var n=-(this.origin.dot(e.normal)+e.constant)/t;return n>=0?n:null},intersectPlane:function(e,t){var n=this.distanceToPlane(e);return null===n?null:this.at(n,t)},intersectsPlane:function(e){var t=e.distanceToPoint(this.origin);return 0===t||e.normal.dot(this.direction)*t<0},intersectBox:function(e,t){var n,i,r,a,o,s,c=1/this.direction.x,l=1/this.direction.y,h=1/this.direction.z,u=this.origin;return c>=0?(n=(e.min.x-u.x)*c,i=(e.max.x-u.x)*c):(n=(e.max.x-u.x)*c,i=(e.min.x-u.x)*c),l>=0?(r=(e.min.y-u.y)*l,a=(e.max.y-u.y)*l):(r=(e.max.y-u.y)*l,a=(e.min.y-u.y)*l),n>a||r>i?null:((r>n||n!=n)&&(n=r),(a=0?(o=(e.min.z-u.z)*h,s=(e.max.z-u.z)*h):(o=(e.max.z-u.z)*h,s=(e.min.z-u.z)*h),n>s||o>i?null:((o>n||n!=n)&&(n=o),(s=0?n:i,t)))},intersectsBox:function(e){return null!==this.intersectBox(e,Zn)},intersectTriangle:function(e,t,n,i,r){$n.subVectors(t,e),ei.subVectors(n,e),ti.crossVectors($n,ei);var a,o=this.direction.dot(ti);if(o>0){if(i)return null;a=1}else{if(!(o<0))return null;a=-1,o=-o}Kn.subVectors(this.origin,e);var s=a*this.direction.dot(ei.crossVectors(Kn,ei));if(s<0)return null;var c=a*this.direction.dot($n.cross(Kn));if(c<0)return null;if(s+c>o)return null;var l=-a*Kn.dot(ti);return l<0?null:this.at(l/o,r)},applyMatrix4:function(e){return this.origin.applyMatrix4(e),this.direction.transformDirection(e),this},equals:function(e){return e.origin.equals(this.origin)&&e.direction.equals(this.direction)}});var ii=new rn,ri=new rn,ai=new Xt;function oi(e,t){this.normal=void 0!==e?e:new rn(1,0,0),this.constant=void 0!==t?t:0}Object.assign(oi.prototype,{isPlane:!0,set:function(e,t){return this.normal.copy(e),this.constant=t,this},setComponents:function(e,t,n,i){return this.normal.set(e,t,n),this.constant=i,this},setFromNormalAndCoplanarPoint:function(e,t){return this.normal.copy(e),this.constant=-t.dot(this.normal),this},setFromCoplanarPoints:function(e,t,n){var i=ii.subVectors(n,t).cross(ri.subVectors(e,t)).normalize();return this.setFromNormalAndCoplanarPoint(i,e),this},clone:function(){return(new this.constructor).copy(this)},copy:function(e){return this.normal.copy(e.normal),this.constant=e.constant,this},normalize:function(){var e=1/this.normal.length();return this.normal.multiplyScalar(e),this.constant*=e,this},negate:function(){return this.constant*=-1,this.normal.negate(),this},distanceToPoint:function(e){return this.normal.dot(e)+this.constant},distanceToSphere:function(e){return this.distanceToPoint(e.center)-e.radius},projectPoint:function(e,t){return void 0===t&&(console.warn("THREE.Plane: .projectPoint() target is now required"),t=new rn),t.copy(this.normal).multiplyScalar(-this.distanceToPoint(e)).add(e)},intersectLine:function(e,t){void 0===t&&(console.warn("THREE.Plane: .intersectLine() target is now required"),t=new rn);var n=e.delta(ii),i=this.normal.dot(n);if(0===i)return 0===this.distanceToPoint(e.start)?t.copy(e.start):void 0;var r=-(e.start.dot(this.normal)+this.constant)/i;return r<0||r>1?void 0:t.copy(n).multiplyScalar(r).add(e.start)},intersectsLine:function(e){var t=this.distanceToPoint(e.start),n=this.distanceToPoint(e.end);return t<0&&n>0||n<0&&t>0},intersectsBox:function(e){return e.intersectsPlane(this)},intersectsSphere:function(e){return e.intersectsPlane(this)},coplanarPoint:function(e){return void 0===e&&(console.warn("THREE.Plane: .coplanarPoint() target is now required"),e=new rn),e.copy(this.normal).multiplyScalar(-this.constant)},applyMatrix4:function(e,t){var n=t||ai.getNormalMatrix(e),i=this.coplanarPoint(ii).applyMatrix4(e),r=this.normal.applyMatrix3(n).normalize();return this.constant=-i.dot(r),this},translate:function(e){return this.constant-=e.dot(this.normal),this},equals:function(e){return e.normal.equals(this.normal)&&e.constant===this.constant}});var si=new rn,ci=new rn,li=new rn,hi=new rn,ui=new rn,pi=new rn,di=new rn,fi=new rn,mi=new rn,gi=new rn;function vi(e,t,n){this.a=void 0!==e?e:new rn,this.b=void 0!==t?t:new rn,this.c=void 0!==n?n:new rn}Object.assign(vi,{getNormal:function(e,t,n,i){void 0===i&&(console.warn("THREE.Triangle: .getNormal() target is now required"),i=new rn),i.subVectors(n,t),si.subVectors(e,t),i.cross(si);var r=i.lengthSq();return r>0?i.multiplyScalar(1/Math.sqrt(r)):i.set(0,0,0)},getBarycoord:function(e,t,n,i,r){si.subVectors(i,t),ci.subVectors(n,t),li.subVectors(e,t);var a=si.dot(si),o=si.dot(ci),s=si.dot(li),c=ci.dot(ci),l=ci.dot(li),h=a*c-o*o;if(void 0===r&&(console.warn("THREE.Triangle: .getBarycoord() target is now required"),r=new rn),0===h)return r.set(-2,-1,-1);var u=1/h,p=(c*s-o*l)*u,d=(a*l-o*s)*u;return r.set(1-p-d,d,p)},containsPoint:function(e,t,n,i){return vi.getBarycoord(e,t,n,i,hi),hi.x>=0&&hi.y>=0&&hi.x+hi.y<=1},getUV:function(e,t,n,i,r,a,o,s){return this.getBarycoord(e,t,n,i,hi),s.set(0,0),s.addScaledVector(r,hi.x),s.addScaledVector(a,hi.y),s.addScaledVector(o,hi.z),s},isFrontFacing:function(e,t,n,i){return si.subVectors(n,t),ci.subVectors(e,t),si.cross(ci).dot(i)<0}}),Object.assign(vi.prototype,{set:function(e,t,n){return this.a.copy(e),this.b.copy(t),this.c.copy(n),this},setFromPointsAndIndices:function(e,t,n,i){return this.a.copy(e[t]),this.b.copy(e[n]),this.c.copy(e[i]),this},clone:function(){return(new this.constructor).copy(this)},copy:function(e){return this.a.copy(e.a),this.b.copy(e.b),this.c.copy(e.c),this},getArea:function(){return si.subVectors(this.c,this.b),ci.subVectors(this.a,this.b),.5*si.cross(ci).length()},getMidpoint:function(e){return void 0===e&&(console.warn("THREE.Triangle: .getMidpoint() target is now required"),e=new rn),e.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)},getNormal:function(e){return vi.getNormal(this.a,this.b,this.c,e)},getPlane:function(e){return void 0===e&&(console.warn("THREE.Triangle: .getPlane() target is now required"),e=new oi),e.setFromCoplanarPoints(this.a,this.b,this.c)},getBarycoord:function(e,t){return vi.getBarycoord(e,this.a,this.b,this.c,t)},getUV:function(e,t,n,i,r){return vi.getUV(e,this.a,this.b,this.c,t,n,i,r)},containsPoint:function(e){return vi.containsPoint(e,this.a,this.b,this.c)},isFrontFacing:function(e){return vi.isFrontFacing(this.a,this.b,this.c,e)},intersectsBox:function(e){return e.intersectsTriangle(this)},closestPointToPoint:function(e,t){void 0===t&&(console.warn("THREE.Triangle: .closestPointToPoint() target is now required"),t=new rn);var n,i,r=this.a,a=this.b,o=this.c;ui.subVectors(a,r),pi.subVectors(o,r),fi.subVectors(e,r);var s=ui.dot(fi),c=pi.dot(fi);if(s<=0&&c<=0)return t.copy(r);mi.subVectors(e,a);var l=ui.dot(mi),h=pi.dot(mi);if(l>=0&&h<=l)return t.copy(a);var u=s*h-l*c;if(u<=0&&s>=0&&l<=0)return n=s/(s-l),t.copy(r).addScaledVector(ui,n);gi.subVectors(e,o);var p=ui.dot(gi),d=pi.dot(gi);if(d>=0&&p<=d)return t.copy(o);var f=p*c-s*d;if(f<=0&&c>=0&&d<=0)return i=c/(c-d),t.copy(r).addScaledVector(pi,i);var m=l*d-p*h;if(m<=0&&h-l>=0&&p-d>=0)return di.subVectors(o,a),i=(h-l)/(h-l+(p-d)),t.copy(a).addScaledVector(di,i);var g=1/(m+f+u);return n=f*g,i=u*g,t.copy(r).addScaledVector(ui,n).addScaledVector(pi,i)},equals:function(e){return e.a.equals(this.a)&&e.b.equals(this.b)&&e.c.equals(this.c)}});var yi={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},xi={h:0,s:0,l:0},bi={h:0,s:0,l:0};function _i(e,t,n){return void 0===t&&void 0===n?this.set(e):this.setRGB(e,t,n)}function wi(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+6*(t-e)*n:n<.5?t:n<2/3?e+6*(t-e)*(2/3-n):e}function Mi(e){return e<.04045?.0773993808*e:Math.pow(.9478672986*e+.0521327014,2.4)}function Si(e){return e<.0031308?12.92*e:1.055*Math.pow(e,.41666)-.055}function Ti(e,t,n,i,r,a){this.a=e,this.b=t,this.c=n,this.normal=i&&i.isVector3?i:new rn,this.vertexNormals=Array.isArray(i)?i:[],this.color=r&&r.isColor?r:new _i,this.vertexColors=Array.isArray(r)?r:[],this.materialIndex=void 0!==a?a:0}Object.assign(_i.prototype,{isColor:!0,r:1,g:1,b:1,set:function(e){return e&&e.isColor?this.copy(e):"number"==typeof e?this.setHex(e):"string"==typeof e&&this.setStyle(e),this},setScalar:function(e){return this.r=e,this.g=e,this.b=e,this},setHex:function(e){return e=Math.floor(e),this.r=(e>>16&255)/255,this.g=(e>>8&255)/255,this.b=(255&e)/255,this},setRGB:function(e,t,n){return this.r=e,this.g=t,this.b=n,this},setHSL:function(e,t,n){if(e=Wt.euclideanModulo(e,1),t=Wt.clamp(t,0,1),n=Wt.clamp(n,0,1),0===t)this.r=this.g=this.b=n;else{var i=n<=.5?n*(1+t):n+t-n*t,r=2*n-i;this.r=wi(r,i,e+1/3),this.g=wi(r,i,e),this.b=wi(r,i,e-1/3)}return this},setStyle:function(e){function t(t){void 0!==t&&parseFloat(t)<1&&console.warn("THREE.Color: Alpha component of "+e+" will be ignored.")}var n;if(n=/^((?:rgb|hsl)a?)\(\s*([^\)]*)\)/.exec(e)){var i,r=n[1],a=n[2];switch(r){case"rgb":case"rgba":if(i=/^(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(a))return this.r=Math.min(255,parseInt(i[1],10))/255,this.g=Math.min(255,parseInt(i[2],10))/255,this.b=Math.min(255,parseInt(i[3],10))/255,t(i[5]),this;if(i=/^(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(a))return this.r=Math.min(100,parseInt(i[1],10))/100,this.g=Math.min(100,parseInt(i[2],10))/100,this.b=Math.min(100,parseInt(i[3],10))/100,t(i[5]),this;break;case"hsl":case"hsla":if(i=/^([0-9]*\.?[0-9]+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(a)){var o=parseFloat(i[1])/360,s=parseInt(i[2],10)/100,c=parseInt(i[3],10)/100;return t(i[5]),this.setHSL(o,s,c)}}}else if(n=/^\#([A-Fa-f0-9]+)$/.exec(e)){var l=n[1],h=l.length;if(3===h)return this.r=parseInt(l.charAt(0)+l.charAt(0),16)/255,this.g=parseInt(l.charAt(1)+l.charAt(1),16)/255,this.b=parseInt(l.charAt(2)+l.charAt(2),16)/255,this;if(6===h)return this.r=parseInt(l.charAt(0)+l.charAt(1),16)/255,this.g=parseInt(l.charAt(2)+l.charAt(3),16)/255,this.b=parseInt(l.charAt(4)+l.charAt(5),16)/255,this}return e&&e.length>0?this.setColorName(e):this},setColorName:function(e){var t=yi[e];return void 0!==t?this.setHex(t):console.warn("THREE.Color: Unknown color "+e),this},clone:function(){return new this.constructor(this.r,this.g,this.b)},copy:function(e){return this.r=e.r,this.g=e.g,this.b=e.b,this},copyGammaToLinear:function(e,t){return void 0===t&&(t=2),this.r=Math.pow(e.r,t),this.g=Math.pow(e.g,t),this.b=Math.pow(e.b,t),this},copyLinearToGamma:function(e,t){void 0===t&&(t=2);var n=t>0?1/t:1;return this.r=Math.pow(e.r,n),this.g=Math.pow(e.g,n),this.b=Math.pow(e.b,n),this},convertGammaToLinear:function(e){return this.copyGammaToLinear(this,e),this},convertLinearToGamma:function(e){return this.copyLinearToGamma(this,e),this},copySRGBToLinear:function(e){return this.r=Mi(e.r),this.g=Mi(e.g),this.b=Mi(e.b),this},copyLinearToSRGB:function(e){return this.r=Si(e.r),this.g=Si(e.g),this.b=Si(e.b),this},convertSRGBToLinear:function(){return this.copySRGBToLinear(this),this},convertLinearToSRGB:function(){return this.copyLinearToSRGB(this),this},getHex:function(){return 255*this.r<<16^255*this.g<<8^255*this.b<<0},getHexString:function(){return("000000"+this.getHex().toString(16)).slice(-6)},getHSL:function(e){void 0===e&&(console.warn("THREE.Color: .getHSL() target is now required"),e={h:0,s:0,l:0});var t,n,i=this.r,r=this.g,a=this.b,o=Math.max(i,r,a),s=Math.min(i,r,a),c=(s+o)/2;if(s===o)t=0,n=0;else{var l=o-s;switch(n=c<=.5?l/(o+s):l/(2-o-s),o){case i:t=(r-a)/l+(r0&&(n.alphaTest=this.alphaTest),!0===this.premultipliedAlpha&&(n.premultipliedAlpha=this.premultipliedAlpha),!0===this.wireframe&&(n.wireframe=this.wireframe),this.wireframeLinewidth>1&&(n.wireframeLinewidth=this.wireframeLinewidth),"round"!==this.wireframeLinecap&&(n.wireframeLinecap=this.wireframeLinecap),"round"!==this.wireframeLinejoin&&(n.wireframeLinejoin=this.wireframeLinejoin),!0===this.morphTargets&&(n.morphTargets=!0),!0===this.morphNormals&&(n.morphNormals=!0),!0===this.skinning&&(n.skinning=!0),!1===this.visible&&(n.visible=!1),!1===this.toneMapped&&(n.toneMapped=!1),"{}"!==JSON.stringify(this.userData)&&(n.userData=this.userData),t){var r=i(e.textures),a=i(e.images);r.length>0&&(n.textures=r),a.length>0&&(n.images=a)}return n},clone:function(){return(new this.constructor).copy(this)},copy:function(e){this.name=e.name,this.fog=e.fog,this.blending=e.blending,this.side=e.side,this.flatShading=e.flatShading,this.vertexColors=e.vertexColors,this.opacity=e.opacity,this.transparent=e.transparent,this.blendSrc=e.blendSrc,this.blendDst=e.blendDst,this.blendEquation=e.blendEquation,this.blendSrcAlpha=e.blendSrcAlpha,this.blendDstAlpha=e.blendDstAlpha,this.blendEquationAlpha=e.blendEquationAlpha,this.depthFunc=e.depthFunc,this.depthTest=e.depthTest,this.depthWrite=e.depthWrite,this.stencilWriteMask=e.stencilWriteMask,this.stencilFunc=e.stencilFunc,this.stencilRef=e.stencilRef,this.stencilFuncMask=e.stencilFuncMask,this.stencilFail=e.stencilFail,this.stencilZFail=e.stencilZFail,this.stencilZPass=e.stencilZPass,this.stencilWrite=e.stencilWrite;var t=e.clippingPlanes,n=null;if(null!==t){var i=t.length;n=new Array(i);for(var r=0;r!==i;++r)n[r]=t[r].clone()}return this.clippingPlanes=n,this.clipIntersection=e.clipIntersection,this.clipShadows=e.clipShadows,this.shadowSide=e.shadowSide,this.colorWrite=e.colorWrite,this.precision=e.precision,this.polygonOffset=e.polygonOffset,this.polygonOffsetFactor=e.polygonOffsetFactor,this.polygonOffsetUnits=e.polygonOffsetUnits,this.dithering=e.dithering,this.alphaTest=e.alphaTest,this.premultipliedAlpha=e.premultipliedAlpha,this.visible=e.visible,this.toneMapped=e.toneMapped,this.userData=JSON.parse(JSON.stringify(e.userData)),this},dispose:function(){this.dispatchEvent({type:"dispose"})}}),Object.defineProperty(Ai.prototype,"needsUpdate",{set:function(e){!0===e&&this.version++}}),Li.prototype=Object.create(Ai.prototype),Li.prototype.constructor=Li,Li.prototype.isMeshBasicMaterial=!0,Li.prototype.copy=function(e){return Ai.prototype.copy.call(this,e),this.color.copy(e.color),this.map=e.map,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.specularMap=e.specularMap,this.alphaMap=e.alphaMap,this.envMap=e.envMap,this.combine=e.combine,this.reflectivity=e.reflectivity,this.refractionRatio=e.refractionRatio,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.skinning=e.skinning,this.morphTargets=e.morphTargets,this};var Ri=new rn;function Pi(e,t,n){if(Array.isArray(e))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.name="",this.array=e,this.itemSize=t,this.count=void 0!==e?e.length/t:0,this.normalized=!0===n,this.usage=Ut,this.updateRange={offset:0,count:-1},this.version=0}function Ci(e,t,n){Pi.call(this,new Int8Array(e),t,n)}function Oi(e,t,n){Pi.call(this,new Uint8Array(e),t,n)}function Di(e,t,n){Pi.call(this,new Uint8ClampedArray(e),t,n)}function Ii(e,t,n){Pi.call(this,new Int16Array(e),t,n)}function Ni(e,t,n){Pi.call(this,new Uint16Array(e),t,n)}function Bi(e,t,n){Pi.call(this,new Int32Array(e),t,n)}function zi(e,t,n){Pi.call(this,new Uint32Array(e),t,n)}function Fi(e,t,n){Pi.call(this,new Float32Array(e),t,n)}function Ui(e,t,n){Pi.call(this,new Float64Array(e),t,n)}function Gi(){this.vertices=[],this.normals=[],this.colors=[],this.uvs=[],this.uvs2=[],this.groups=[],this.morphTargets={},this.skinWeights=[],this.skinIndices=[],this.boundingBox=null,this.boundingSphere=null,this.verticesNeedUpdate=!1,this.normalsNeedUpdate=!1,this.colorsNeedUpdate=!1,this.uvsNeedUpdate=!1,this.groupsNeedUpdate=!1}function Hi(e){if(0===e.length)return-1/0;for(var t=e[0],n=1,i=e.length;nt&&(t=e[n]);return t}Object.defineProperty(Pi.prototype,"needsUpdate",{set:function(e){!0===e&&this.version++}}),Object.assign(Pi.prototype,{isBufferAttribute:!0,onUploadCallback:function(){},setUsage:function(e){return this.usage=e,this},copy:function(e){return this.name=e.name,this.array=new e.array.constructor(e.array),this.itemSize=e.itemSize,this.count=e.count,this.normalized=e.normalized,this.usage=e.usage,this},copyAt:function(e,t,n){e*=this.itemSize,n*=t.itemSize;for(var i=0,r=this.itemSize;i0,o=r[1]&&r[1].length>0,s=e.morphTargets,c=s.length;if(c>0){t=[];for(var l=0;l0){h=[];for(l=0;l0&&0===n.length&&console.error("THREE.DirectGeometry: Faceless geometries are not supported.");for(l=0;l65535?zi:Ni)(e,1):this.index=e},getAttribute:function(e){return this.attributes[e]},setAttribute:function(e,t){return this.attributes[e]=t,this},deleteAttribute:function(e){return delete this.attributes[e],this},addGroup:function(e,t,n){this.groups.push({start:e,count:t,materialIndex:void 0!==n?n:0})},clearGroups:function(){this.groups=[]},setDrawRange:function(e,t){this.drawRange.start=e,this.drawRange.count=t},applyMatrix4:function(e){var t=this.attributes.position;void 0!==t&&(t.applyMatrix4(e),t.needsUpdate=!0);var n=this.attributes.normal;if(void 0!==n){var i=(new Xt).getNormalMatrix(e);n.applyNormalMatrix(i),n.needsUpdate=!0}var r=this.attributes.tangent;return void 0!==r&&(r.transformDirection(e),r.needsUpdate=!0),null!==this.boundingBox&&this.computeBoundingBox(),null!==this.boundingSphere&&this.computeBoundingSphere(),this},rotateX:function(e){return ki.makeRotationX(e),this.applyMatrix4(ki),this},rotateY:function(e){return ki.makeRotationY(e),this.applyMatrix4(ki),this},rotateZ:function(e){return ki.makeRotationZ(e),this.applyMatrix4(ki),this},translate:function(e,t,n){return ki.makeTranslation(e,t,n),this.applyMatrix4(ki),this},scale:function(e,t,n){return ki.makeScale(e,t,n),this.applyMatrix4(ki),this},lookAt:function(e){return ji.lookAt(e),ji.updateMatrix(),this.applyMatrix4(ji.matrix),this},center:function(){return this.computeBoundingBox(),this.boundingBox.getCenter(Wi).negate(),this.translate(Wi.x,Wi.y,Wi.z),this},setFromObject:function(e){var t=e.geometry;if(e.isPoints||e.isLine){var n=new Fi(3*t.vertices.length,3),i=new Fi(3*t.colors.length,3);if(this.setAttribute("position",n.copyVector3sArray(t.vertices)),this.setAttribute("color",i.copyColorsArray(t.colors)),t.lineDistances&&t.lineDistances.length===t.vertices.length){var r=new Fi(t.lineDistances.length,1);this.setAttribute("lineDistance",r.copyArray(t.lineDistances))}null!==t.boundingSphere&&(this.boundingSphere=t.boundingSphere.clone()),null!==t.boundingBox&&(this.boundingBox=t.boundingBox.clone())}else e.isMesh&&t&&t.isGeometry&&this.fromGeometry(t);return this},setFromPoints:function(e){for(var t=[],n=0,i=e.length;n0){var n=new Float32Array(3*e.normals.length);this.setAttribute("normal",new Pi(n,3).copyVector3sArray(e.normals))}if(e.colors.length>0){var i=new Float32Array(3*e.colors.length);this.setAttribute("color",new Pi(i,3).copyColorsArray(e.colors))}if(e.uvs.length>0){var r=new Float32Array(2*e.uvs.length);this.setAttribute("uv",new Pi(r,2).copyVector2sArray(e.uvs))}if(e.uvs2.length>0){var a=new Float32Array(2*e.uvs2.length);this.setAttribute("uv2",new Pi(a,2).copyVector2sArray(e.uvs2))}for(var o in this.groups=e.groups,e.morphTargets){for(var s=[],c=e.morphTargets[o],l=0,h=c.length;l0){var d=new Fi(4*e.skinIndices.length,4);this.setAttribute("skinIndex",d.copyVector4sArray(e.skinIndices))}if(e.skinWeights.length>0){var f=new Fi(4*e.skinWeights.length,4);this.setAttribute("skinWeight",f.copyVector4sArray(e.skinWeights))}return null!==e.boundingSphere&&(this.boundingSphere=e.boundingSphere.clone()),null!==e.boundingBox&&(this.boundingBox=e.boundingBox.clone()),this},computeBoundingBox:function(){null===this.boundingBox&&(this.boundingBox=new Wn);var e=this.attributes.position,t=this.morphAttributes.position;if(void 0!==e){if(this.boundingBox.setFromBufferAttribute(e),t)for(var n=0,i=t.length;n0&&(e.userData=this.userData),void 0!==this.parameters){var t=this.parameters;for(var n in t)void 0!==t[n]&&(e[n]=t[n]);return e}e.data={attributes:{}};var i=this.index;null!==i&&(e.data.index={type:i.array.constructor.name,array:Array.prototype.slice.call(i.array)});var r=this.attributes;for(var n in r){var a=(p=r[n]).toJSON();""!==p.name&&(a.name=p.name),e.data.attributes[n]=a}var o={},s=!1;for(var n in this.morphAttributes){for(var c=this.morphAttributes[n],l=[],h=0,u=c.length;h0&&(o[n]=l,s=!0)}s&&(e.data.morphAttributes=o,e.data.morphTargetsRelative=this.morphTargetsRelative);var d=this.groups;d.length>0&&(e.data.groups=JSON.parse(JSON.stringify(d)));var f=this.boundingSphere;return null!==f&&(e.data.boundingSphere={center:f.center.toArray(),radius:f.radius}),e},clone:function(){return(new Zi).copy(this)},copy:function(e){var t,n,i;this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null,this.name=e.name;var r=e.index;null!==r&&this.setIndex(r.clone());var a=e.attributes;for(t in a){var o=a[t];this.setAttribute(t,o.clone())}var s=e.morphAttributes;for(t in s){var c=[],l=s[t];for(n=0,i=l.length;nn.far?null:{distance:h,point:pr.clone(),object:e}}function mr(e,t,n,i,r,a,o,s,c,l,h,u){$i.fromBufferAttribute(r,l),er.fromBufferAttribute(r,h),tr.fromBufferAttribute(r,u);var p=e.morphTargetInfluences;if(t.morphTargets&&a&&p){ar.set(0,0,0),or.set(0,0,0),sr.set(0,0,0);for(var d=0,f=a.length;d0){var o=r[a[0]];if(void 0!==o)for(this.morphTargetInfluences=[],this.morphTargetDictionary={},e=0,t=o.length;e0&&console.error("THREE.Mesh.updateMorphTargets() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.")}},raycast:function(e,t){var n,i=this.geometry,r=this.material,a=this.matrixWorld;if(void 0!==r&&(null===i.boundingSphere&&i.computeBoundingSphere(),Ki.copy(i.boundingSphere),Ki.applyMatrix4(a),!1!==e.ray.intersectsSphere(Ki)&&(Ji.getInverse(a),Qi.copy(e.ray).applyMatrix4(Ji),null===i.boundingBox||!1!==Qi.intersectsBox(i.boundingBox))))if(i.isBufferGeometry){var o,s,c,l,h,u,p,d,f,m=i.index,g=i.attributes.position,v=i.morphAttributes.position,y=i.morphTargetsRelative,x=i.attributes.uv,b=i.attributes.uv2,_=i.groups,w=i.drawRange;if(null!==m)if(Array.isArray(r))for(l=0,u=_.length;l0&&(E=P);for(var C=0,O=R.length;C0)for(l=0;l0&&(this.normalsNeedUpdate=!0)},computeFlatVertexNormals:function(){var e,t,n;for(this.computeFaceNormals(),e=0,t=this.faces.length;e0&&(this.normalsNeedUpdate=!0)},computeMorphNormals:function(){var e,t,n,i,r;for(n=0,i=this.faces.length;n=0;n--){var f=p[n];for(this.faces.splice(f,1),o=0,s=this.faceVertexUvs.length;o0,g=d.vertexNormals.length>0,v=1!==d.color.r||1!==d.color.g||1!==d.color.b,y=d.vertexColors.length>0,x=0;if(x=M(x,0,0),x=M(x,1,!0),x=M(x,2,!1),x=M(x,3,f),x=M(x,4,m),x=M(x,5,g),x=M(x,6,v),x=M(x,7,y),o.push(x),o.push(d.a,d.b,d.c),o.push(d.materialIndex),f){var b=this.faceVertexUvs[0][r];o.push(E(b[0]),E(b[1]),E(b[2]))}if(m&&o.push(S(d.normal)),g){var _=d.vertexNormals;o.push(S(_[0]),S(_[1]),S(_[2]))}if(v&&o.push(T(d.color)),y){var w=d.vertexColors;o.push(T(w[0]),T(w[1]),T(w[2]))}}function M(e,t,n){return n?e|1<0&&(e.data.colors=l),u.length>0&&(e.data.uvs=[u]),e.data.faces=o,e},clone:function(){return(new br).copy(this)},copy:function(e){var t,n,i,r,a,o;this.vertices=[],this.colors=[],this.faces=[],this.faceVertexUvs=[[]],this.morphTargets=[],this.morphNormals=[],this.skinWeights=[],this.skinIndices=[],this.lineDistances=[],this.boundingBox=null,this.boundingSphere=null,this.name=e.name;var s=e.vertices;for(t=0,n=s.length;t0?1:-1,h.push(R.x,R.y,R.z),u.push(y/m),u.push(1-x/g),A+=1}}for(x=0;x0&&(t.defines=this.defines),t.vertexShader=this.vertexShader,t.fragmentShader=this.fragmentShader;var r={};for(var a in this.extensions)!0===this.extensions[a]&&(r[a]=!0);return Object.keys(r).length>0&&(t.extensions=r),t},Rr.prototype=Object.assign(Object.create(Pn.prototype),{constructor:Rr,isCamera:!0,copy:function(e,t){return Pn.prototype.copy.call(this,e,t),this.matrixWorldInverse.copy(e.matrixWorldInverse),this.projectionMatrix.copy(e.projectionMatrix),this.projectionMatrixInverse.copy(e.projectionMatrixInverse),this},getWorldDirection:function(e){void 0===e&&(console.warn("THREE.Camera: .getWorldDirection() target is now required"),e=new rn),this.updateMatrixWorld(!0);var t=this.matrixWorld.elements;return e.set(-t[8],-t[9],-t[10]).normalize()},updateMatrixWorld:function(e){Pn.prototype.updateMatrixWorld.call(this,e),this.matrixWorldInverse.getInverse(this.matrixWorld)},updateWorldMatrix:function(e,t){Pn.prototype.updateWorldMatrix.call(this,e,t),this.matrixWorldInverse.getInverse(this.matrixWorld)},clone:function(){return(new this.constructor).copy(this)}}),Pr.prototype=Object.assign(Object.create(Rr.prototype),{constructor:Pr,isPerspectiveCamera:!0,copy:function(e,t){return Rr.prototype.copy.call(this,e,t),this.fov=e.fov,this.zoom=e.zoom,this.near=e.near,this.far=e.far,this.focus=e.focus,this.aspect=e.aspect,this.view=null===e.view?null:Object.assign({},e.view),this.filmGauge=e.filmGauge,this.filmOffset=e.filmOffset,this},setFocalLength:function(e){var t=.5*this.getFilmHeight()/e;this.fov=2*Wt.RAD2DEG*Math.atan(t),this.updateProjectionMatrix()},getFocalLength:function(){var e=Math.tan(.5*Wt.DEG2RAD*this.fov);return.5*this.getFilmHeight()/e},getEffectiveFOV:function(){return 2*Wt.RAD2DEG*Math.atan(Math.tan(.5*Wt.DEG2RAD*this.fov)/this.zoom)},getFilmWidth:function(){return this.filmGauge*Math.min(this.aspect,1)},getFilmHeight:function(){return this.filmGauge/Math.max(this.aspect,1)},setViewOffset:function(e,t,n,i,r,a){this.aspect=e/t,null===this.view&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=e,this.view.fullHeight=t,this.view.offsetX=n,this.view.offsetY=i,this.view.width=r,this.view.height=a,this.updateProjectionMatrix()},clearViewOffset:function(){null!==this.view&&(this.view.enabled=!1),this.updateProjectionMatrix()},updateProjectionMatrix:function(){var e=this.near,t=e*Math.tan(.5*Wt.DEG2RAD*this.fov)/this.zoom,n=2*t,i=this.aspect*n,r=-.5*i,a=this.view;if(null!==this.view&&this.view.enabled){var o=a.fullWidth,s=a.fullHeight;r+=a.offsetX*i/o,t-=a.offsetY*n/s,i*=a.width/o,n*=a.height/s}var c=this.filmOffset;0!==c&&(r+=e*c/this.getFilmWidth()),this.projectionMatrix.makePerspective(r,r+i,t,t-n,e,this.far),this.projectionMatrixInverse.getInverse(this.projectionMatrix)},toJSON:function(e){var t=Pn.prototype.toJSON.call(this,e);return t.object.fov=this.fov,t.object.zoom=this.zoom,t.object.near=this.near,t.object.far=this.far,t.object.focus=this.focus,t.object.aspect=this.aspect,null!==this.view&&(t.object.view=Object.assign({},this.view)),t.object.filmGauge=this.filmGauge,t.object.filmOffset=this.filmOffset,t}});var Cr=90,Or=1;function Dr(e,t,n,i){Pn.call(this),this.type="CubeCamera";var r=new Pr(Cr,Or,e,t);r.up.set(0,-1,0),r.lookAt(new rn(1,0,0)),this.add(r);var a=new Pr(Cr,Or,e,t);a.up.set(0,-1,0),a.lookAt(new rn(-1,0,0)),this.add(a);var o=new Pr(Cr,Or,e,t);o.up.set(0,0,1),o.lookAt(new rn(0,1,0)),this.add(o);var s=new Pr(Cr,Or,e,t);s.up.set(0,0,-1),s.lookAt(new rn(0,-1,0)),this.add(s);var c=new Pr(Cr,Or,e,t);c.up.set(0,-1,0),c.lookAt(new rn(0,0,1)),this.add(c);var l=new Pr(Cr,Or,e,t);l.up.set(0,-1,0),l.lookAt(new rn(0,0,-1)),this.add(l),i=i||{format:Se,magFilter:ce,minFilter:ce},this.renderTarget=new Ir(n,i),this.renderTarget.texture.name="CubeCamera",this.update=function(e,t){null===this.parent&&this.updateMatrixWorld();var n=e.getRenderTarget(),i=this.renderTarget,h=i.texture.generateMipmaps;i.texture.generateMipmaps=!1,e.setRenderTarget(i,0),e.render(t,r),e.setRenderTarget(i,1),e.render(t,a),e.setRenderTarget(i,2),e.render(t,o),e.setRenderTarget(i,3),e.render(t,s),e.setRenderTarget(i,4),e.render(t,c),i.texture.generateMipmaps=h,e.setRenderTarget(i,5),e.render(t,l),e.setRenderTarget(n)},this.clear=function(e,t,n,i){for(var r=e.getRenderTarget(),a=this.renderTarget,o=0;o<6;o++)e.setRenderTarget(a,o),e.clear(t,n,i);e.setRenderTarget(r)}}function Ir(e,t,n){Number.isInteger(t)&&(console.warn("THREE.WebGLCubeRenderTarget: constructor signature is now WebGLCubeRenderTarget( size, options )"),t=n),Kt.call(this,e,e,t)}function Nr(e,t,n,i,r,a,o,s,c,l,h,u){Jt.call(this,null,a,o,s,c,l,i,r,h,u),this.image={data:e||null,width:t||1,height:n||1},this.magFilter=void 0!==c?c:ae,this.minFilter=void 0!==l?l:ae,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1,this.needsUpdate=!0}Dr.prototype=Object.create(Pn.prototype),Dr.prototype.constructor=Dr,Ir.prototype=Object.create(Kt.prototype),Ir.prototype.constructor=Ir,Ir.prototype.isWebGLCubeRenderTarget=!0,Ir.prototype.fromEquirectangularTexture=function(e,t){this.texture.type=t.type,this.texture.format=t.format,this.texture.encoding=t.encoding;var n=new Cn,i={uniforms:{tEquirect:{value:null}},vertexShader:["varying vec3 vWorldDirection;","vec3 transformDirection( in vec3 dir, in mat4 matrix ) {","\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );","}","void main() {","\tvWorldDirection = transformDirection( position, modelMatrix );","\t#include ","\t#include ","}"].join("\n"),fragmentShader:["uniform sampler2D tEquirect;","varying vec3 vWorldDirection;","#define RECIPROCAL_PI 0.31830988618","#define RECIPROCAL_PI2 0.15915494","void main() {","\tvec3 direction = normalize( vWorldDirection );","\tvec2 sampleUV;","\tsampleUV.y = asin( clamp( direction.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;","\tsampleUV.x = atan( direction.z, direction.x ) * RECIPROCAL_PI2 + 0.5;","\tgl_FragColor = texture2D( tEquirect, sampleUV );","}"].join("\n")},r=new Lr({type:"CubemapFromEquirect",uniforms:Mr(i.uniforms),vertexShader:i.vertexShader,fragmentShader:i.fragmentShader,side:c,blending:h});r.uniforms.tEquirect.value=t;var a=new dr(new wr(5,5,5),r);n.add(a);var o=new Dr(1,10,1);return o.renderTarget=this,o.renderTarget.texture.name="CubeCameraTexture",o.update(e,n),a.geometry.dispose(),a.material.dispose(),this},Nr.prototype=Object.create(Jt.prototype),Nr.prototype.constructor=Nr,Nr.prototype.isDataTexture=!0;var Br=new Yn,zr=new rn;function Fr(e,t,n,i,r,a){this.planes=[void 0!==e?e:new oi,void 0!==t?t:new oi,void 0!==n?n:new oi,void 0!==i?i:new oi,void 0!==r?r:new oi,void 0!==a?a:new oi]}Object.assign(Fr.prototype,{set:function(e,t,n,i,r,a){var o=this.planes;return o[0].copy(e),o[1].copy(t),o[2].copy(n),o[3].copy(i),o[4].copy(r),o[5].copy(a),this},clone:function(){return(new this.constructor).copy(this)},copy:function(e){for(var t=this.planes,n=0;n<6;n++)t[n].copy(e.planes[n]);return this},setFromProjectionMatrix:function(e){var t=this.planes,n=e.elements,i=n[0],r=n[1],a=n[2],o=n[3],s=n[4],c=n[5],l=n[6],h=n[7],u=n[8],p=n[9],d=n[10],f=n[11],m=n[12],g=n[13],v=n[14],y=n[15];return t[0].setComponents(o-i,h-s,f-u,y-m).normalize(),t[1].setComponents(o+i,h+s,f+u,y+m).normalize(),t[2].setComponents(o+r,h+c,f+p,y+g).normalize(),t[3].setComponents(o-r,h-c,f-p,y-g).normalize(),t[4].setComponents(o-a,h-l,f-d,y-v).normalize(),t[5].setComponents(o+a,h+l,f+d,y+v).normalize(),this},intersectsObject:function(e){var t=e.geometry;return null===t.boundingSphere&&t.computeBoundingSphere(),Br.copy(t.boundingSphere).applyMatrix4(e.matrixWorld),this.intersectsSphere(Br)},intersectsSprite:function(e){return Br.center.set(0,0,0),Br.radius=.7071067811865476,Br.applyMatrix4(e.matrixWorld),this.intersectsSphere(Br)},intersectsSphere:function(e){for(var t=this.planes,n=e.center,i=-e.radius,r=0;r<6;r++){if(t[r].distanceToPoint(n)0?e.max.x:e.min.x,zr.y=i.normal.y>0?e.max.y:e.min.y,zr.z=i.normal.z>0?e.max.z:e.min.z,i.distanceToPoint(zr)<0)return!1}return!0},containsPoint:function(e){for(var t=this.planes,n=0;n<6;n++)if(t[n].distanceToPoint(e)<0)return!1;return!0}});var Ur={common:{diffuse:{value:new _i(15658734)},opacity:{value:1},map:{value:null},uvTransform:{value:new Xt},uv2Transform:{value:new Xt},alphaMap:{value:null}},specularmap:{specularMap:{value:null}},envmap:{envMap:{value:null},flipEnvMap:{value:-1},reflectivity:{value:1},refractionRatio:{value:.98},maxMipLevel:{value:0}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1}},emissivemap:{emissiveMap:{value:null}},bumpmap:{bumpMap:{value:null},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalScale:{value:new qt(1,1)}},displacementmap:{displacementMap:{value:null},displacementScale:{value:1},displacementBias:{value:0}},roughnessmap:{roughnessMap:{value:null}},metalnessmap:{metalnessMap:{value:null}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new _i(16777215)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowBias:{},shadowRadius:{},shadowMapSize:{}}},spotShadowMap:{value:[]},spotShadowMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}}},points:{diffuse:{value:new _i(15658734)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},uvTransform:{value:new Xt}},sprite:{diffuse:{value:new _i(15658734)},opacity:{value:1},center:{value:new qt(.5,.5)},rotation:{value:0},map:{value:null},alphaMap:{value:null},uvTransform:{value:new Xt}}};function Gr(){var e=null,t=!1,n=null;function i(r,a){!1!==t&&(n(r,a),e.requestAnimationFrame(i))}return{start:function(){!0!==t&&null!==n&&(e.requestAnimationFrame(i),t=!0)},stop:function(){t=!1},setAnimationLoop:function(e){n=e},setContext:function(t){e=t}}}function Hr(e,t){var n=t.isWebGL2,i=new WeakMap;return{get:function(e){return e.isInterleavedBufferAttribute&&(e=e.data),i.get(e)},remove:function(t){t.isInterleavedBufferAttribute&&(t=t.data);var n=i.get(t);n&&(e.deleteBuffer(n.buffer),i.delete(t))},update:function(t,r){t.isInterleavedBufferAttribute&&(t=t.data);var a=i.get(t);void 0===a?i.set(t,function(t,n){var i=t.array,r=t.usage,a=e.createBuffer();e.bindBuffer(n,a),e.bufferData(n,i,r),t.onUploadCallback();var o=5126;return i instanceof Float32Array?o=5126:i instanceof Float64Array?console.warn("THREE.WebGLAttributes: Unsupported data buffer format: Float64Array."):i instanceof Uint16Array?o=5123:i instanceof Int16Array?o=5122:i instanceof Uint32Array?o=5125:i instanceof Int32Array?o=5124:i instanceof Int8Array?o=5120:i instanceof Uint8Array&&(o=5121),{buffer:a,type:o,bytesPerElement:i.BYTES_PER_ELEMENT,version:t.version}}(t,r)):a.version 0.0 ) {\n\t\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t}\n\treturn distanceFalloff;\n#else\n\tif( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\n\t\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\n\t}\n\treturn 1.0;\n#endif\n}\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\n\treturn ( 1.0 - specularColor ) * fresnel + specularColor;\n}\nvec3 F_Schlick_RoughnessDependent( const in vec3 F0, const in float dotNV, const in float roughness ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotNV - 6.98316 ) * dotNV );\n\tvec3 Fr = max( vec3( 1.0 - roughness ), F0 ) - F0;\n\treturn Fr * fresnel + F0;\n}\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\treturn 1.0 / ( gl * gv );\n}\nfloat G_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\treturn 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n\tfloat a2 = pow2( alpha );\n\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n\treturn RECIPROCAL_PI * a2 / pow2( denom );\n}\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( incidentLight.direction + viewDir );\n\tfloat dotNL = saturate( dot( normal, incidentLight.direction ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\tfloat D = D_GGX( alpha, dotNH );\n\treturn F * ( G * D );\n}\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\n\tconst float LUT_SIZE = 64.0;\n\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\n\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\n\tfloat dotNV = saturate( dot( N, V ) );\n\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\treturn uv;\n}\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\n\tfloat l = length( f );\n\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\n}\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\n\tfloat x = dot( v1, v2 );\n\tfloat y = abs( x );\n\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\n\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\n\tfloat v = a / b;\n\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n\treturn cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n\tvec3 lightNormal = cross( v1, v2 );\n\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n\tvec3 T1, T2;\n\tT1 = normalize( V - N * dot( V, N ) );\n\tT2 = - cross( N, T1 );\n\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n\tvec3 coords[ 4 ];\n\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n\tcoords[ 0 ] = normalize( coords[ 0 ] );\n\tcoords[ 1 ] = normalize( coords[ 1 ] );\n\tcoords[ 2 ] = normalize( coords[ 2 ] );\n\tcoords[ 3 ] = normalize( coords[ 3 ] );\n\tvec3 vectorFormFactor = vec3( 0.0 );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n\treturn vec3( result );\n}\nvec3 BRDF_Specular_GGX_Environment( const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\treturn specularColor * brdf.x + brdf.y;\n}\nvoid BRDF_Specular_Multiscattering_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tvec3 F = F_Schlick_RoughnessDependent( specularColor, dotNV, roughness );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\tvec3 FssEss = F * brdf.x + brdf.y;\n\tfloat Ess = brdf.x + brdf.y;\n\tfloat Ems = 1.0 - Ess;\n\tvec3 Favg = specularColor + ( 1.0 - specularColor ) * 0.047619;\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n\tsingleScatter += FssEss;\n\tmultiScatter += Fms * Ems;\n}\nfloat G_BlinnPhong_Implicit( ) {\n\treturn 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n}\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\n\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\n}\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\n\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\n}\n#if defined( USE_SHEEN )\nfloat D_Charlie(float roughness, float NoH) {\n\tfloat invAlpha = 1.0 / roughness;\n\tfloat cos2h = NoH * NoH;\n\tfloat sin2h = max(1.0 - cos2h, 0.0078125);\treturn (2.0 + invAlpha) * pow(sin2h, invAlpha * 0.5) / (2.0 * PI);\n}\nfloat V_Neubelt(float NoV, float NoL) {\n\treturn saturate(1.0 / (4.0 * (NoL + NoV - NoL * NoV)));\n}\nvec3 BRDF_Specular_Sheen( const in float roughness, const in vec3 L, const in GeometricContext geometry, vec3 specularColor ) {\n\tvec3 N = geometry.normal;\n\tvec3 V = geometry.viewDir;\n\tvec3 H = normalize( V + L );\n\tfloat dotNH = saturate( dot( N, H ) );\n\treturn specularColor * D_Charlie( roughness, dotNH ) * V_Neubelt( dot(N, V), dot(N, L) );\n}\n#endif",bumpmap_pars_fragment:"#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n\t\treturn vec2( dBx, dBy );\n\t}\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\n\t\tvec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\n\t\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\n\t\tvec3 vN = surf_norm;\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\t\tfloat fDet = dot( vSigmaX, R1 );\n\t\tfDet *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\t}\n#endif",clipping_planes_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvec4 plane;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\tplane = clippingPlanes[ i ];\n\t\tif ( dot( vViewPosition, plane.xyz ) > plane.w ) discard;\n\t}\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\tbool clipped = true;\n\t\t#pragma unroll_loop\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vViewPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t}\n\t\tif ( clipped ) discard;\n\t#endif\n#endif",clipping_planes_pars_fragment:"#if NUM_CLIPPING_PLANES > 0\n\t#if ! defined( STANDARD ) && ! defined( PHONG ) && ! defined( MATCAP ) && ! defined( TOON )\n\t\tvarying vec3 vViewPosition;\n\t#endif\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif",clipping_planes_pars_vertex:"#if NUM_CLIPPING_PLANES > 0 && ! defined( STANDARD ) && ! defined( PHONG ) && ! defined( MATCAP ) && ! defined( TOON )\n\tvarying vec3 vViewPosition;\n#endif",clipping_planes_vertex:"#if NUM_CLIPPING_PLANES > 0 && ! defined( STANDARD ) && ! defined( PHONG ) && ! defined( MATCAP ) && ! defined( TOON )\n\tvViewPosition = - mvPosition.xyz;\n#endif",color_fragment:"#ifdef USE_COLOR\n\tdiffuseColor.rgb *= vColor;\n#endif",color_pars_fragment:"#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif",color_pars_vertex:"#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif",color_vertex:"#ifdef USE_COLOR\n\tvColor.xyz = color.xyz;\n#endif",common:"#define PI 3.14159265359\n#define PI2 6.28318530718\n#define PI_HALF 1.5707963267949\n#define RECIPROCAL_PI 0.31830988618\n#define RECIPROCAL_PI2 0.15915494\n#define LOG2 1.442695\n#define EPSILON 1e-6\n#ifndef saturate\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\n#define whiteComplement(a) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\nhighp float rand( const in vec2 uv ) {\n\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\n\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n\treturn fract(sin(sn) * c);\n}\n#ifdef HIGH_PRECISION\n\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\n#else\n\tfloat max3( vec3 v ) { return max( max( v.x, v.y ), v.z ); }\n\tfloat precisionSafeLength( vec3 v ) {\n\t\tfloat maxComponent = max3( abs( v ) );\n\t\treturn length( v / maxComponent ) * maxComponent;\n\t}\n#endif\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\nstruct GeometricContext {\n\tvec3 position;\n\tvec3 normal;\n\tvec3 viewDir;\n#ifdef CLEARCOAT\n\tvec3 clearcoatNormal;\n#endif\n};\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\tfloat distance = dot( planeNormal, point - pointOnPlane );\n\treturn - distance * planeNormal + point;\n}\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn sign( dot( point - pointOnPlane, planeNormal ) );\n}\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\n}\nmat3 transposeMat3( const in mat3 m ) {\n\tmat3 tmp;\n\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\n\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\n\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\n\treturn tmp;\n}\nfloat linearToRelativeLuminance( const in vec3 color ) {\n\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\n\treturn dot( weights, color.rgb );\n}\nbool isPerspectiveMatrix( mat4 m ) {\n return m[ 2 ][ 3 ] == - 1.0;\n}",cube_uv_reflection_fragment:"#ifdef ENVMAP_TYPE_CUBE_UV\n#define cubeUV_maxMipLevel 8.0\n#define cubeUV_minMipLevel 4.0\n#define cubeUV_maxTileSize 256.0\n#define cubeUV_minTileSize 16.0\nfloat getFace(vec3 direction) {\n vec3 absDirection = abs(direction);\n float face = -1.0;\n if (absDirection.x > absDirection.z) {\n if (absDirection.x > absDirection.y)\n face = direction.x > 0.0 ? 0.0 : 3.0;\n else\n face = direction.y > 0.0 ? 1.0 : 4.0;\n } else {\n if (absDirection.z > absDirection.y)\n face = direction.z > 0.0 ? 2.0 : 5.0;\n else\n face = direction.y > 0.0 ? 1.0 : 4.0;\n }\n return face;\n}\nvec2 getUV(vec3 direction, float face) {\n vec2 uv;\n if (face == 0.0) {\n uv = vec2(-direction.z, direction.y) / abs(direction.x);\n } else if (face == 1.0) {\n uv = vec2(direction.x, -direction.z) / abs(direction.y);\n } else if (face == 2.0) {\n uv = direction.xy / abs(direction.z);\n } else if (face == 3.0) {\n uv = vec2(direction.z, direction.y) / abs(direction.x);\n } else if (face == 4.0) {\n uv = direction.xz / abs(direction.y);\n } else {\n uv = vec2(-direction.x, direction.y) / abs(direction.z);\n }\n return 0.5 * (uv + 1.0);\n}\nvec3 bilinearCubeUV(sampler2D envMap, vec3 direction, float mipInt) {\n float face = getFace(direction);\n float filterInt = max(cubeUV_minMipLevel - mipInt, 0.0);\n mipInt = max(mipInt, cubeUV_minMipLevel);\n float faceSize = exp2(mipInt);\n float texelSize = 1.0 / (3.0 * cubeUV_maxTileSize);\n vec2 uv = getUV(direction, face) * (faceSize - 1.0);\n vec2 f = fract(uv);\n uv += 0.5 - f;\n if (face > 2.0) {\n uv.y += faceSize;\n face -= 3.0;\n }\n uv.x += face * faceSize;\n if(mipInt < cubeUV_maxMipLevel){\n uv.y += 2.0 * cubeUV_maxTileSize;\n }\n uv.y += filterInt * 2.0 * cubeUV_minTileSize;\n uv.x += 3.0 * max(0.0, cubeUV_maxTileSize - 2.0 * faceSize);\n uv *= texelSize;\n vec3 tl = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n uv.x += texelSize;\n vec3 tr = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n uv.y += texelSize;\n vec3 br = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n uv.x -= texelSize;\n vec3 bl = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n vec3 tm = mix(tl, tr, f.x);\n vec3 bm = mix(bl, br, f.x);\n return mix(tm, bm, f.y);\n}\n#define r0 1.0\n#define v0 0.339\n#define m0 -2.0\n#define r1 0.8\n#define v1 0.276\n#define m1 -1.0\n#define r4 0.4\n#define v4 0.046\n#define m4 2.0\n#define r5 0.305\n#define v5 0.016\n#define m5 3.0\n#define r6 0.21\n#define v6 0.0038\n#define m6 4.0\nfloat roughnessToMip(float roughness) {\n float mip = 0.0;\n if (roughness >= r1) {\n mip = (r0 - roughness) * (m1 - m0) / (r0 - r1) + m0;\n } else if (roughness >= r4) {\n mip = (r1 - roughness) * (m4 - m1) / (r1 - r4) + m1;\n } else if (roughness >= r5) {\n mip = (r4 - roughness) * (m5 - m4) / (r4 - r5) + m4;\n } else if (roughness >= r6) {\n mip = (r5 - roughness) * (m6 - m5) / (r5 - r6) + m5;\n } else {\n mip = -2.0 * log2(1.16 * roughness); }\n return mip;\n}\nvec4 textureCubeUV(sampler2D envMap, vec3 sampleDir, float roughness) {\n float mip = clamp(roughnessToMip(roughness), m0, cubeUV_maxMipLevel);\n float mipF = fract(mip);\n float mipInt = floor(mip);\n vec3 color0 = bilinearCubeUV(envMap, sampleDir, mipInt);\n if (mipF == 0.0) {\n return vec4(color0, 1.0);\n } else {\n vec3 color1 = bilinearCubeUV(envMap, sampleDir, mipInt + 1.0);\n return vec4(mix(color0, color1, mipF), 1.0);\n }\n}\n#endif",defaultnormal_vertex:"vec3 transformedNormal = objectNormal;\n#ifdef USE_INSTANCING\n\tmat3 m = mat3( instanceMatrix );\n\ttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\n\ttransformedNormal = m * transformedNormal;\n#endif\ntransformedNormal = normalMatrix * transformedNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n#ifdef USE_TANGENT\n\tvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#ifdef FLIP_SIDED\n\t\ttransformedTangent = - transformedTangent;\n\t#endif\n#endif",displacementmap_pars_vertex:"#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif",displacementmap_vertex:"#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );\n#endif",emissivemap_fragment:"#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\n\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif",emissivemap_pars_fragment:"#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif",encodings_fragment:"gl_FragColor = linearToOutputTexel( gl_FragColor );",encodings_pars_fragment:"\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( gammaFactor ) ), value.a );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( 1.0 / gammaFactor ) ), value.a );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\n}\nvec4 LinearTosRGB( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\n}\nvec4 RGBEToLinear( in vec4 value ) {\n\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\nvec4 LinearToRGBE( in vec4 value ) {\n\tfloat maxComponent = max( max( value.r, value.g ), value.b );\n\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * value.a * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\n\tM = ceil( M * 255.0 ) / 255.0;\n\treturn vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat D = max( maxRange / maxRGB, 1.0 );\n\tD = clamp( floor( D ) / 255.0, 0.0, 1.0 );\n\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\n}\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\nvec4 LinearToLogLuv( in vec4 value ) {\n\tvec3 Xp_Y_XYZp = cLogLuvM * value.rgb;\n\tXp_Y_XYZp = max( Xp_Y_XYZp, vec3( 1e-6, 1e-6, 1e-6 ) );\n\tvec4 vResult;\n\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n\tvResult.w = fract( Le );\n\tvResult.z = ( Le - ( floor( vResult.w * 255.0 ) ) / 255.0 ) / 255.0;\n\treturn vResult;\n}\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\nvec4 LogLuvToLinear( in vec4 value ) {\n\tfloat Le = value.z * 255.0 + value.w;\n\tvec3 Xp_Y_XYZp;\n\tXp_Y_XYZp.y = exp2( ( Le - 127.0 ) / 2.0 );\n\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n\tvec3 vRGB = cLogLuvInverseM * Xp_Y_XYZp.rgb;\n\treturn vec4( max( vRGB, 0.0 ), 1.0 );\n}",envmap_fragment:"#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvec3 cameraToFrag;\n\t\t\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\n\t\t#endif\n\t#else\n\t\tvec3 reflectVec = vReflect;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\tvec4 envColor = textureCubeUV( envMap, reflectVec, 0.0 );\n\t#elif defined( ENVMAP_TYPE_EQUIREC )\n\t\tvec2 sampleUV;\n\t\treflectVec = normalize( reflectVec );\n\t\tsampleUV.y = asin( clamp( reflectVec.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\t\tsampleUV.x = atan( reflectVec.z, reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\n\t\tvec4 envColor = texture2D( envMap, sampleUV );\n\t#elif defined( ENVMAP_TYPE_SPHERE )\n\t\treflectVec = normalize( reflectVec );\n\t\tvec3 reflectView = normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0, 0.0, 1.0 ) );\n\t\tvec4 envColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5 );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\t#ifndef ENVMAP_TYPE_CUBE_UV\n\t\tenvColor = envMapTexelToLinear( envColor );\n\t#endif\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\t#endif\n#endif",envmap_common_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float envMapIntensity;\n\tuniform float flipEnvMap;\n\tuniform int maxMipLevel;\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\t\n#endif",envmap_pars_fragment:"#ifdef USE_ENVMAP\n\tuniform float reflectivity;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\tvarying vec3 vWorldPosition;\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif",envmap_pars_vertex:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) ||defined( PHONG )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\t\n\t\tvarying vec3 vWorldPosition;\n\t#else\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\t#endif\n#endif",envmap_physical_pars_fragment:"#if defined( USE_ENVMAP )\n\t#ifdef ENVMAP_MODE_REFRACTION\n\t\tuniform float refractionRatio;\n\t#endif\n\tvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\n\t\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\n\t\t#else\n\t\t\tvec4 envMapColor = vec4( 0.0 );\n\t\t#endif\n\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t}\n\tfloat getSpecularMIPLevel( const in float roughness, const in int maxMIPLevel ) {\n\t\tfloat maxMIPLevelScalar = float( maxMIPLevel );\n\t\tfloat sigma = PI * roughness * roughness / ( 1.0 + roughness );\n\t\tfloat desiredMIPLevel = maxMIPLevelScalar + log2( sigma );\n\t\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\n\t}\n\tvec3 getLightProbeIndirectRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in int maxMIPLevel ) {\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t vec3 reflectVec = reflect( -viewDir, normal );\n\t\t reflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n\t\t#else\n\t\t vec3 reflectVec = refract( -viewDir, normal, refractionRatio );\n\t\t#endif\n\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\tfloat specularMIPLevel = getSpecularMIPLevel( roughness, maxMIPLevel );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\n\t\t#elif defined( ENVMAP_TYPE_EQUIREC )\n\t\t\tvec2 sampleUV;\n\t\t\tsampleUV.y = asin( clamp( reflectVec.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\t\t\tsampleUV.x = atan( reflectVec.z, reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = texture2DLodEXT( envMap, sampleUV, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = texture2D( envMap, sampleUV, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_SPHERE )\n\t\t\tvec3 reflectView = normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0,0.0,1.0 ) );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = texture2DLodEXT( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#endif\n\t\treturn envMapColor.rgb * envMapIntensity;\n\t}\n#endif",envmap_vertex:"#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvWorldPosition = worldPosition.xyz;\n\t#else\n\t\tvec3 cameraToVertex;\n\t\tif ( isOrthographic ) { \n\t\t\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#endif\n#endif",fog_vertex:"#ifdef USE_FOG\n\tfogDepth = -mvPosition.z;\n#endif",fog_pars_vertex:"#ifdef USE_FOG\n\tvarying float fogDepth;\n#endif",fog_fragment:"#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * fogDepth * fogDepth );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, fogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif",fog_pars_fragment:"#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float fogDepth;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif",gradientmap_pars_fragment:"#ifdef USE_GRADIENTMAP\n\tuniform sampler2D gradientMap;\n#endif\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\tfloat dotNL = dot( normal, lightDirection );\n\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\t#ifdef USE_GRADIENTMAP\n\t\treturn texture2D( gradientMap, coord ).rgb;\n\t#else\n\t\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\n\t#endif\n}",lightmap_fragment:"#ifdef USE_LIGHTMAP\n\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\treflectedLight.indirectDiffuse += PI * lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n#endif",lightmap_pars_fragment:"#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif",lights_lambert_vertex:"vec3 diffuse = vec3( 1.0 );\nGeometricContext geometry;\ngeometry.position = mvPosition.xyz;\ngeometry.normal = normalize( transformedNormal );\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz );\nGeometricContext backGeometry;\nbackGeometry.position = geometry.position;\nbackGeometry.normal = -geometry.normal;\nbackGeometry.viewDir = geometry.viewDir;\nvLightFront = vec3( 0.0 );\nvIndirectFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\n\tvLightBack = vec3( 0.0 );\n\tvIndirectBack = vec3( 0.0 );\n#endif\nIncidentLight directLight;\nfloat dotNL;\nvec3 directLightColor_Diffuse;\n#if NUM_POINT_LIGHTS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tgetPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tgetSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n#endif\n#if NUM_DIR_LIGHTS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tgetDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\tvIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\n\t\t#endif\n\t}\n#endif",lights_pars_begin:"uniform bool receiveShadow;\nuniform vec3 ambientLightColor;\nuniform vec3 lightProbe[ 9 ];\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\n\tfloat x = normal.x, y = normal.y, z = normal.z;\n\tvec3 result = shCoefficients[ 0 ] * 0.886227;\n\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\n\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\n\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\n\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\n\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\n\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\n\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\n\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\n\treturn result;\n}\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in GeometricContext geometry ) {\n\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\n\treturn irradiance;\n}\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treturn irradiance;\n}\n#if NUM_DIR_LIGHTS > 0\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t};\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\tvoid getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tdirectLight.color = directionalLight.color;\n\t\tdirectLight.direction = directionalLight.direction;\n\t\tdirectLight.visible = true;\n\t}\n#endif\n#if NUM_POINT_LIGHTS > 0\n\tstruct PointLight {\n\t\tvec3 position;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t};\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n\tvoid getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = pointLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tdirectLight.color = pointLight.color;\n\t\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\n\t\tdirectLight.visible = ( directLight.color != vec3( 0.0 ) );\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tstruct SpotLight {\n\t\tvec3 position;\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tfloat coneCos;\n\t\tfloat penumbraCos;\n\t};\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\tvoid getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = spotLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tfloat angleCos = dot( directLight.direction, spotLight.direction );\n\t\tif ( angleCos > spotLight.coneCos ) {\n\t\t\tfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\t\tdirectLight.color = spotLight.color;\n\t\t\tdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tdirectLight.visible = true;\n\t\t} else {\n\t\t\tdirectLight.color = vec3( 0.0 );\n\t\t\tdirectLight.visible = false;\n\t\t}\n\t}\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n\tstruct RectAreaLight {\n\t\tvec3 color;\n\t\tvec3 position;\n\t\tvec3 halfWidth;\n\t\tvec3 halfHeight;\n\t};\n\tuniform sampler2D ltc_1;\tuniform sampler2D ltc_2;\n\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {\n\t\tfloat dotNL = dot( geometry.normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tirradiance *= PI;\n\t\t#endif\n\t\treturn irradiance;\n\t}\n#endif",lights_toon_fragment:"ToonMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;",lights_toon_pars_fragment:"varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct ToonMaterial {\n\tvec3\tdiffuseColor;\n\tvec3\tspecularColor;\n\tfloat\tspecularShininess;\n\tfloat\tspecularStrength;\n};\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Toon\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Toon\n#define Material_LightProbeLOD( material )\t(0)",lights_phong_fragment:"BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;",lights_phong_pars_fragment:"varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct BlinnPhongMaterial {\n\tvec3\tdiffuseColor;\n\tvec3\tspecularColor;\n\tfloat\tspecularShininess;\n\tfloat\tspecularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong\n#define Material_LightProbeLOD( material )\t(0)",lights_physical_fragment:"PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\nmaterial.specularRoughness = max( roughnessFactor, 0.0525 );material.specularRoughness += geometryRoughness;\nmaterial.specularRoughness = min( material.specularRoughness, 1.0 );\n#ifdef REFLECTIVITY\n\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\n#endif\n#ifdef CLEARCOAT\n\tmaterial.clearcoat = saturate( clearcoat );\tmaterial.clearcoatRoughness = max( clearcoatRoughness, 0.0525 );\n\tmaterial.clearcoatRoughness += geometryRoughness;\n\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\n#endif\n#ifdef USE_SHEEN\n\tmaterial.sheenColor = sheen;\n#endif",lights_physical_pars_fragment:"struct PhysicalMaterial {\n\tvec3\tdiffuseColor;\n\tfloat\tspecularRoughness;\n\tvec3\tspecularColor;\n#ifdef CLEARCOAT\n\tfloat clearcoat;\n\tfloat clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tvec3 sheenColor;\n#endif\n};\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\nfloat clearcoatDHRApprox( const in float roughness, const in float dotNL ) {\n\treturn DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometry.normal;\n\t\tvec3 viewDir = geometry.viewDir;\n\t\tvec3 position = geometry.position;\n\t\tvec3 lightPos = rectAreaLight.position;\n\t\tvec3 halfWidth = rectAreaLight.halfWidth;\n\t\tvec3 halfHeight = rectAreaLight.halfHeight;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = material.specularRoughness;\n\t\tvec3 rectCoords[ 4 ];\n\t\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\t\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\n\t\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\n\t\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\n\t\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\n\t\tvec4 t1 = texture2D( ltc_1, uv );\n\t\tvec4 t2 = texture2D( ltc_2, uv );\n\t\tmat3 mInv = mat3(\n\t\t\tvec3( t1.x, 0, t1.y ),\n\t\t\tvec3( 0, 1, 0 ),\n\t\t\tvec3( t1.z, 0, t1.w )\n\t\t);\n\t\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\n\t\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n\t\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n\t}\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNL = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\n\t\tvec3 ccIrradiance = ccDotNL * directLight.color;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tccIrradiance *= PI;\n\t\t#endif\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t\treflectedLight.directSpecular += ccIrradiance * material.clearcoat * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\t#ifdef USE_SHEEN\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_Sheen(\n\t\t\tmaterial.specularRoughness,\n\t\t\tdirectLight.direction,\n\t\t\tgeometry,\n\t\t\tmaterial.sheenColor\n\t\t);\n\t#else\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.normal, material.specularColor, material.specularRoughness);\n\t#endif\n\treflectedLight.directDiffuse += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n\t#ifdef CLEARCOAT\n\t\tfloat ccDotNV = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular += clearcoatRadiance * material.clearcoat * BRDF_Specular_GGX_Environment( geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\t\tfloat ccDotNL = ccDotNV;\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\t#else\n\t\tfloat clearcoatDHR = 0.0;\n\t#endif\n\tfloat clearcoatInv = 1.0 - clearcoatDHR;\n\tvec3 singleScattering = vec3( 0.0 );\n\tvec3 multiScattering = vec3( 0.0 );\n\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n\tBRDF_Specular_Multiscattering_Environment( geometry, material.specularColor, material.specularRoughness, singleScattering, multiScattering );\n\tvec3 diffuse = material.diffuseColor * ( 1.0 - ( singleScattering + multiScattering ) );\n\treflectedLight.indirectSpecular += clearcoatInv * radiance * singleScattering;\n\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\n\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\n}\n#define RE_Direct\t\t\t\tRE_Direct_Physical\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}",lights_fragment_begin:"\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\n#ifdef CLEARCOAT\n\tgeometry.clearcoatNormal = clearcoatNormal;\n#endif\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\tPointLight pointLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLightShadow;\n\t#endif\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n\t\tpointLightShadow = pointLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\tSpotLight spotLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLightShadow;\n\t#endif\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\tspotLightShadow = spotLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\tDirectionalLight directionalLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLightShadow;\n\t#endif\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\tRectAreaLight rectAreaLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if defined( RE_IndirectDiffuse )\n\tvec3 iblIrradiance = vec3( 0.0 );\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\tirradiance += getLightProbeIrradiance( lightProbe, geometry );\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\t\t#pragma unroll_loop\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t}\n\t#endif\n#endif\n#if defined( RE_IndirectSpecular )\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearcoatRadiance = vec3( 0.0 );\n#endif",lights_fragment_maps:"#if defined( RE_IndirectDiffuse )\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\tvec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tlightMapIrradiance *= PI;\n\t\t#endif\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tiblIrradiance += getLightProbeIndirectIrradiance( geometry, maxMipLevel );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\tradiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.normal, material.specularRoughness, maxMipLevel );\n\t#ifdef CLEARCOAT\n\t\tclearcoatRadiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness, maxMipLevel );\n\t#endif\n#endif",lights_fragment_end:"#if defined( RE_IndirectDiffuse )\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\n#endif",logdepthbuf_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif",logdepthbuf_pars_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tuniform float logDepthBufFC;\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif",logdepthbuf_pars_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t\tvarying float vIsPerspective;\n\t#else\n\t\tuniform float logDepthBufFC;\n\t#endif\n#endif",logdepthbuf_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\n\t#else\n\t\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\n\t\t\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\n\t\t\tgl_Position.z *= gl_Position.w;\n\t\t}\n\t#endif\n#endif",map_fragment:"#ifdef USE_MAP\n\tvec4 texelColor = texture2D( map, vUv );\n\ttexelColor = mapTexelToLinear( texelColor );\n\tdiffuseColor *= texelColor;\n#endif",map_pars_fragment:"#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif",map_particle_fragment:"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n#endif\n#ifdef USE_MAP\n\tvec4 mapTexel = texture2D( map, uv );\n\tdiffuseColor *= mapTexelToLinear( mapTexel );\n#endif\n#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\n#endif",map_particle_pars_fragment:"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\tuniform mat3 uvTransform;\n#endif\n#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif",metalnessmap_fragment:"float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif",metalnessmap_pars_fragment:"#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif",morphnormal_vertex:"#ifdef USE_MORPHNORMALS\n\tobjectNormal *= morphTargetBaseInfluence;\n\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\n\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\n\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\n\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\n#endif",morphtarget_pars_vertex:"#ifdef USE_MORPHTARGETS\n\tuniform float morphTargetBaseInfluence;\n\t#ifndef USE_MORPHNORMALS\n\tuniform float morphTargetInfluences[ 8 ];\n\t#else\n\tuniform float morphTargetInfluences[ 4 ];\n\t#endif\n#endif",morphtarget_vertex:"#ifdef USE_MORPHTARGETS\n\ttransformed *= morphTargetBaseInfluence;\n\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\n\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\n\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\n\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\n\t#ifndef USE_MORPHNORMALS\n\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\n\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\n\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\n\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\n\t#endif\n#endif",normal_fragment_begin:"#ifdef FLAT_SHADED\n\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n\t#ifdef USE_TANGENT\n\t\tvec3 tangent = normalize( vTangent );\n\t\tvec3 bitangent = normalize( vBitangent );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\ttangent = tangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t\tbitangent = bitangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t#endif\n\t\t#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )\n\t\t\tmat3 vTBN = mat3( tangent, bitangent, normal );\n\t\t#endif\n\t#endif\n#endif\nvec3 geometryNormal = normal;",normal_fragment_maps:"#ifdef OBJECTSPACE_NORMALMAP\n\tnormal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t#ifdef FLIP_SIDED\n\t\tnormal = - normal;\n\t#endif\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n\tnormal = normalize( normalMatrix * normal );\n#elif defined( TANGENTSPACE_NORMALMAP )\n\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\tmapN.xy *= normalScale;\n\t#ifdef USE_TANGENT\n\t\tnormal = normalize( vTBN * mapN );\n\t#else\n\t\tnormal = perturbNormal2Arb( -vViewPosition, normal, mapN );\n\t#endif\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\n#endif",normalmap_pars_fragment:"#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n#endif\n#ifdef OBJECTSPACE_NORMALMAP\n\tuniform mat3 normalMatrix;\n#endif\n#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\n\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN ) {\n\t\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\n\t\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\n\t\tvec2 st0 = dFdx( vUv.st );\n\t\tvec2 st1 = dFdy( vUv.st );\n\t\tfloat scale = sign( st1.t * st0.s - st0.t * st1.s );\n\t\tvec3 S = normalize( ( q0 * st1.t - q1 * st0.t ) * scale );\n\t\tvec3 T = normalize( ( - q0 * st1.s + q1 * st0.s ) * scale );\n\t\tvec3 N = normalize( surf_norm );\n\t\tmat3 tsn = mat3( S, T, N );\n\t\tmapN.xy *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\treturn normalize( tsn * mapN );\n\t}\n#endif",clearcoat_normal_fragment_begin:"#ifdef CLEARCOAT\n\tvec3 clearcoatNormal = geometryNormal;\n#endif",clearcoat_normal_fragment_maps:"#ifdef USE_CLEARCOAT_NORMALMAP\n\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;\n\tclearcoatMapN.xy *= clearcoatNormalScale;\n\t#ifdef USE_TANGENT\n\t\tclearcoatNormal = normalize( vTBN * clearcoatMapN );\n\t#else\n\t\tclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN );\n\t#endif\n#endif",clearcoat_normalmap_pars_fragment:"#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform sampler2D clearcoatNormalMap;\n\tuniform vec2 clearcoatNormalScale;\n#endif",packing:"vec3 packNormalToRGB( const in vec3 normal ) {\n\treturn normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n\treturn 2.0 * rgb.xyz - 1.0;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\nconst float ShiftRight8 = 1. / 256.;\nvec4 packDepthToRGBA( const in float v ) {\n\tvec4 r = vec4( fract( v * PackFactors ), v );\n\tr.yzw -= r.xyz * ShiftRight8;\treturn r * PackUpscale;\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors );\n}\nvec4 pack2HalfToRGBA( vec2 v ) {\n\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ));\n\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w);\n}\nvec2 unpackRGBATo2Half( vec4 v ) {\n\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\n\treturn linearClipZ * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn (( near + viewZ ) * far ) / (( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\n}",premultiplied_alpha_fragment:"#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif",project_vertex:"vec4 mvPosition = vec4( transformed, 1.0 );\n#ifdef USE_INSTANCING\n\tmvPosition = instanceMatrix * mvPosition;\n#endif\nmvPosition = modelViewMatrix * mvPosition;\ngl_Position = projectionMatrix * mvPosition;",dithering_fragment:"#ifdef DITHERING\n\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif",dithering_pars_fragment:"#ifdef DITHERING\n\tvec3 dithering( vec3 color ) {\n\t\tfloat grid_position = rand( gl_FragCoord.xy );\n\t\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n\t\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n\t\treturn color + dither_shift_RGB;\n\t}\n#endif",roughnessmap_fragment:"float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\troughnessFactor *= texelRoughness.g;\n#endif",roughnessmap_pars_fragment:"#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif",shadowmap_pars_fragment:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n\t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n\t}\n\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\n\t\treturn unpackRGBATo2Half( texture2D( shadow, uv ) );\n\t}\n\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\n\t\tfloat occlusion = 1.0;\n\t\tvec2 distribution = texture2DDistribution( shadow, uv );\n\t\tfloat hard_shadow = step( compare , distribution.x );\n\t\tif (hard_shadow != 1.0 ) {\n\t\t\tfloat distance = compare - distribution.x ;\n\t\t\tfloat variance = max( 0.00000, distribution.y * distribution.y );\n\t\t\tfloat softness_probability = variance / (variance + distance * distance );\t\t\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 );\t\t\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\n\t\t}\n\t\treturn occlusion;\n\t}\n\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tfloat shadow = 1.0;\n\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\tshadowCoord.z += shadowBias;\n\t\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n\t\tbool inFrustum = all( inFrustumVec );\n\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n\t\tbool frustumTest = all( frustumTestVec );\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tfloat dx2 = dx0 / 2.0;\n\t\t\tfloat dy2 = dy0 / 2.0;\n\t\t\tfloat dx3 = dx1 / 2.0;\n\t\t\tfloat dy3 = dy1 / 2.0;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 17.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx = texelSize.x;\n\t\t\tfloat dy = texelSize.y;\n\t\t\tvec2 uv = shadowCoord.xy;\n\t\t\tvec2 f = fract( uv * shadowMapSize + 0.5 );\n\t\t\tuv -= f * texelSize;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ), \n\t\t\t\t\t\t texture2DCompare( shadowMap, uv + + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t\t f.x ),\n\t\t\t\t\t f.y )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_VSM )\n\t\t\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#else\n\t\t\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn shadow;\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\t\tdp += shadowBias;\n\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\n\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t#endif\n\t}\n#endif",shadowmap_pars_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n#endif",shadowmap_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * worldPosition;\n\t}\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * worldPosition;\n\t}\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * worldPosition;\n\t}\n\t#endif\n#endif",shadowmask_pars_fragment:"float getShadowMask() {\n\tfloat shadow = 1.0;\n\t#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tdirectionalLight = directionalLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t}\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tspotLight = spotLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t}\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tpointLight = pointLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t}\n\t#endif\n\t#endif\n\treturn shadow;\n}",skinbase_vertex:"#ifdef USE_SKINNING\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif",skinning_pars_vertex:"#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\t#ifdef BONE_TEXTURE\n\t\tuniform highp sampler2D boneTexture;\n\t\tuniform int boneTextureSize;\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tfloat j = i * 4.0;\n\t\t\tfloat x = mod( j, float( boneTextureSize ) );\n\t\t\tfloat y = floor( j / float( boneTextureSize ) );\n\t\t\tfloat dx = 1.0 / float( boneTextureSize );\n\t\t\tfloat dy = 1.0 / float( boneTextureSize );\n\t\t\ty = dy * ( y + 0.5 );\n\t\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\t\treturn bone;\n\t\t}\n\t#else\n\t\tuniform mat4 boneMatrices[ MAX_BONES ];\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tmat4 bone = boneMatrices[ int(i) ];\n\t\t\treturn bone;\n\t\t}\n\t#endif\n#endif",skinning_vertex:"#ifdef USE_SKINNING\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\ttransformed = ( bindMatrixInverse * skinned ).xyz;\n#endif",skinnormal_vertex:"#ifdef USE_SKINNING\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n\t#ifdef USE_TANGENT\n\t\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#endif\n#endif",specularmap_fragment:"float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif",specularmap_pars_fragment:"#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif",tonemapping_fragment:"#if defined( TONE_MAPPING )\n\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif",tonemapping_pars_fragment:"#ifndef saturate\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\nuniform float toneMappingExposure;\nuniform float toneMappingWhitePoint;\nvec3 LinearToneMapping( vec3 color ) {\n\treturn toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\n#define Uncharted2Helper( x ) max( ( ( x * ( 0.15 * x + 0.10 * 0.50 ) + 0.20 * 0.02 ) / ( x * ( 0.15 * x + 0.50 ) + 0.20 * 0.30 ) ) - 0.02 / 0.30, vec3( 0.0 ) )\nvec3 Uncharted2ToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( Uncharted2Helper( color ) / Uncharted2Helper( vec3( toneMappingWhitePoint ) ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\nvec3 ACESFilmicToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( ( color * ( 2.51 * color + 0.03 ) ) / ( color * ( 2.43 * color + 0.59 ) + 0.14 ) );\n}",uv_pars_fragment:"#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) )\n\tvarying vec2 vUv;\n#endif",uv_pars_vertex:"#ifdef USE_UV\n\t#ifdef UVS_VERTEX_ONLY\n\t\tvec2 vUv;\n\t#else\n\t\tvarying vec2 vUv;\n\t#endif\n\tuniform mat3 uvTransform;\n#endif",uv_vertex:"#ifdef USE_UV\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n#endif",uv2_pars_fragment:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvarying vec2 vUv2;\n#endif",uv2_pars_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tattribute vec2 uv2;\n\tvarying vec2 vUv2;\n\tuniform mat3 uv2Transform;\n#endif",uv2_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;\n#endif",worldpos_vertex:"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )\n\tvec4 worldPosition = vec4( transformed, 1.0 );\n\t#ifdef USE_INSTANCING\n\t\tworldPosition = instanceMatrix * worldPosition;\n\t#endif\n\tworldPosition = modelMatrix * worldPosition;\n#endif",background_frag:"uniform sampler2D t2D;\nvarying vec2 vUv;\nvoid main() {\n\tvec4 texColor = texture2D( t2D, vUv );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}",background_vert:"varying vec2 vUv;\nuniform mat3 uvTransform;\nvoid main() {\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\tgl_Position = vec4( position.xy, 1.0, 1.0 );\n}",cube_frag:"#include \nuniform float opacity;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 vReflect = vWorldDirection;\n\t#include \n\tgl_FragColor = envColor;\n\tgl_FragColor.a *= opacity;\n\t#include \n\t#include \n}",cube_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n\tgl_Position.z = gl_Position.w;\n}",depth_frag:"#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( fragCoordZ );\n\t#endif\n}",depth_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvHighPrecisionZW = gl_Position.zw;\n}",distanceRGBA_frag:"#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main () {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include \n\t#include \n\t#include \n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist );\n\tgl_FragColor = packDepthToRGBA( dist );\n}",distanceRGBA_vert:"#define DISTANCE\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvWorldPosition = worldPosition.xyz;\n}",equirect_frag:"uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV;\n\tsampleUV.y = asin( clamp( direction.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\tsampleUV.x = atan( direction.z, direction.x ) * RECIPROCAL_PI2 + 0.5;\n\tvec4 texColor = texture2D( tEquirect, sampleUV );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}",equirect_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}",linedashed_frag:"uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}",linedashed_vert:"uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvLineDistance = scale * lineDistance;\n\tvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}",meshbasic_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\treflectedLight.indirectDiffuse += lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}",meshbasic_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef USE_ENVMAP\n\t#include \n\t#include \n\t#include \n\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshlambert_frag:"uniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\treflectedLight.indirectDiffuse = getAmbientLightIrradiance( ambientLightColor );\n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;\n\t#else\n\t\treflectedLight.indirectDiffuse += vIndirectFront;\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\n\t#else\n\t\treflectedLight.directDiffuse = vLightFront;\n\t#endif\n\treflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshlambert_vert:"#define LAMBERT\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshmatcap_frag:"#define MATCAP\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 viewDir = normalize( vViewPosition );\n\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\n\tvec3 y = cross( viewDir, x );\n\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\n\t#ifdef USE_MATCAP\n\t\tvec4 matcapColor = texture2D( matcap, uv );\n\t\tmatcapColor = matcapTexelToLinear( matcapColor );\n\t#else\n\t\tvec4 matcapColor = vec4( 1.0 );\n\t#endif\n\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}",meshmatcap_vert:"#define MATCAP\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifndef FLAT_SHADED\n\t\tvNormal = normalize( transformedNormal );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n}",meshtoon_frag:"#define TOON\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshtoon_vert:"#define TOON\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}",meshphong_frag:"#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphong_vert:"#define PHONG\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphysical_frag:"#define STANDARD\n#ifdef PHYSICAL\n\t#define REFLECTIVITY\n\t#define CLEARCOAT\n\t#define TRANSPARENCY\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef TRANSPARENCY\n\tuniform float transparency;\n#endif\n#ifdef REFLECTIVITY\n\tuniform float reflectivity;\n#endif\n#ifdef CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tuniform vec3 sheen;\n#endif\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#ifdef TRANSPARENCY\n\t\tdiffuseColor.a *= saturate( 1. - transparency + linearToRelativeLuminance( reflectedLight.directSpecular + reflectedLight.indirectSpecular ) );\n\t#endif\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphysical_vert:"#define STANDARD\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}",normal_frag:"#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n}",normal_vert:"#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}",points_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}",points_vert:"uniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_PointSize = size;\n\t#ifdef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n}",shadow_frag:"uniform vec3 color;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include \n\t#include \n\t#include \n}",shadow_vert:"#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",sprite_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n}",sprite_vert:"uniform float rotation;\nuniform vec2 center;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n\tvec2 scale;\n\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n\t#ifndef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) scale *= - mvPosition.z;\n\t#endif\n\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n\tvec2 rotatedPosition;\n\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n\tmvPosition.xy += rotatedPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}"},Wr={basic:{uniforms:Sr([Ur.common,Ur.specularmap,Ur.envmap,Ur.aomap,Ur.lightmap,Ur.fog]),vertexShader:jr.meshbasic_vert,fragmentShader:jr.meshbasic_frag},lambert:{uniforms:Sr([Ur.common,Ur.specularmap,Ur.envmap,Ur.aomap,Ur.lightmap,Ur.emissivemap,Ur.fog,Ur.lights,{emissive:{value:new _i(0)}}]),vertexShader:jr.meshlambert_vert,fragmentShader:jr.meshlambert_frag},phong:{uniforms:Sr([Ur.common,Ur.specularmap,Ur.envmap,Ur.aomap,Ur.lightmap,Ur.emissivemap,Ur.bumpmap,Ur.normalmap,Ur.displacementmap,Ur.fog,Ur.lights,{emissive:{value:new _i(0)},specular:{value:new _i(1118481)},shininess:{value:30}}]),vertexShader:jr.meshphong_vert,fragmentShader:jr.meshphong_frag},standard:{uniforms:Sr([Ur.common,Ur.envmap,Ur.aomap,Ur.lightmap,Ur.emissivemap,Ur.bumpmap,Ur.normalmap,Ur.displacementmap,Ur.roughnessmap,Ur.metalnessmap,Ur.fog,Ur.lights,{emissive:{value:new _i(0)},roughness:{value:.5},metalness:{value:.5},envMapIntensity:{value:1}}]),vertexShader:jr.meshphysical_vert,fragmentShader:jr.meshphysical_frag},toon:{uniforms:Sr([Ur.common,Ur.specularmap,Ur.aomap,Ur.lightmap,Ur.emissivemap,Ur.bumpmap,Ur.normalmap,Ur.displacementmap,Ur.gradientmap,Ur.fog,Ur.lights,{emissive:{value:new _i(0)},specular:{value:new _i(1118481)},shininess:{value:30}}]),vertexShader:jr.meshtoon_vert,fragmentShader:jr.meshtoon_frag},matcap:{uniforms:Sr([Ur.common,Ur.bumpmap,Ur.normalmap,Ur.displacementmap,Ur.fog,{matcap:{value:null}}]),vertexShader:jr.meshmatcap_vert,fragmentShader:jr.meshmatcap_frag},points:{uniforms:Sr([Ur.points,Ur.fog]),vertexShader:jr.points_vert,fragmentShader:jr.points_frag},dashed:{uniforms:Sr([Ur.common,Ur.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:jr.linedashed_vert,fragmentShader:jr.linedashed_frag},depth:{uniforms:Sr([Ur.common,Ur.displacementmap]),vertexShader:jr.depth_vert,fragmentShader:jr.depth_frag},normal:{uniforms:Sr([Ur.common,Ur.bumpmap,Ur.normalmap,Ur.displacementmap,{opacity:{value:1}}]),vertexShader:jr.normal_vert,fragmentShader:jr.normal_frag},sprite:{uniforms:Sr([Ur.sprite,Ur.fog]),vertexShader:jr.sprite_vert,fragmentShader:jr.sprite_frag},background:{uniforms:{uvTransform:{value:new Xt},t2D:{value:null}},vertexShader:jr.background_vert,fragmentShader:jr.background_frag},cube:{uniforms:Sr([Ur.envmap,{opacity:{value:1}}]),vertexShader:jr.cube_vert,fragmentShader:jr.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:jr.equirect_vert,fragmentShader:jr.equirect_frag},distanceRGBA:{uniforms:Sr([Ur.common,Ur.displacementmap,{referencePosition:{value:new rn},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:jr.distanceRGBA_vert,fragmentShader:jr.distanceRGBA_frag},shadow:{uniforms:Sr([Ur.lights,Ur.fog,{color:{value:new _i(0)},opacity:{value:1}}]),vertexShader:jr.shadow_vert,fragmentShader:jr.shadow_frag}};function qr(e,t,n,i){var r,a,o=new _i(0),l=0,h=null,u=0,p=null;function d(e,n){t.buffers.color.setClear(e.r,e.g,e.b,n,i)}return{getClearColor:function(){return o},setClearColor:function(e,t){o.set(e),d(o,l=void 0!==t?t:1)},getClearAlpha:function(){return l},setClearAlpha:function(e){d(o,l=e)},render:function(t,i,f,m){var g=i.background,v=e.xr,y=v.getSession&&v.getSession();if(y&&"additive"===y.environmentBlendMode&&(g=null),null===g?d(o,l):g&&g.isColor&&(d(g,1),m=!0),(e.autoClear||m)&&e.clear(e.autoClearColor,e.autoClearDepth,e.autoClearStencil),g&&(g.isCubeTexture||g.isWebGLCubeRenderTarget||g.mapping===ee)){void 0===a&&((a=new dr(new wr(1,1,1),new Lr({type:"BackgroundCubeMaterial",uniforms:Mr(Wr.cube.uniforms),vertexShader:Wr.cube.vertexShader,fragmentShader:Wr.cube.fragmentShader,side:c,depthTest:!1,depthWrite:!1,fog:!1}))).geometry.deleteAttribute("normal"),a.geometry.deleteAttribute("uv"),a.onBeforeRender=function(e,t,n){this.matrixWorld.copyPosition(n.matrixWorld)},Object.defineProperty(a.material,"envMap",{get:function(){return this.uniforms.envMap.value}}),n.update(a));var x=g.isWebGLCubeRenderTarget?g.texture:g;a.material.uniforms.envMap.value=x,a.material.uniforms.flipEnvMap.value=x.isCubeTexture?-1:1,h===g&&u===x.version&&p===e.toneMapping||(a.material.needsUpdate=!0,h=g,u=x.version,p=e.toneMapping),t.unshift(a,a.geometry,a.material,0,0,null)}else g&&g.isTexture&&(void 0===r&&((r=new dr(new kr(2,2),new Lr({type:"BackgroundMaterial",uniforms:Mr(Wr.background.uniforms),vertexShader:Wr.background.vertexShader,fragmentShader:Wr.background.fragmentShader,side:s,depthTest:!1,depthWrite:!1,fog:!1}))).geometry.deleteAttribute("normal"),Object.defineProperty(r.material,"map",{get:function(){return this.uniforms.t2D.value}}),n.update(r)),r.material.uniforms.t2D.value=g,!0===g.matrixAutoUpdate&&g.updateMatrix(),r.material.uniforms.uvTransform.value.copy(g.matrix),h===g&&u===g.version&&p===e.toneMapping||(r.material.needsUpdate=!0,h=g,u=g.version,p=e.toneMapping),t.unshift(r,r.geometry,r.material,0,0,null))}}}function Xr(e,t,n,i){var r,a=i.isWebGL2;this.setMode=function(e){r=e},this.render=function(t,i){e.drawArrays(r,t,i),n.update(i,r)},this.renderInstances=function(i,o,s,c){if(0!==c){var l,h;if(a)l=e,h="drawArraysInstanced";else if(h="drawArraysInstancedANGLE",null===(l=t.get("ANGLE_instanced_arrays")))return void console.error("THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");l[h](r,o,s,c),n.update(s,r,c)}}}function Yr(e,t,n){var i;function r(t){if("highp"===t){if(e.getShaderPrecisionFormat(35633,36338).precision>0&&e.getShaderPrecisionFormat(35632,36338).precision>0)return"highp";t="mediump"}return"mediump"===t&&e.getShaderPrecisionFormat(35633,36337).precision>0&&e.getShaderPrecisionFormat(35632,36337).precision>0?"mediump":"lowp"}var a="undefined"!=typeof WebGL2RenderingContext&&e instanceof WebGL2RenderingContext||"undefined"!=typeof WebGL2ComputeRenderingContext&&e instanceof WebGL2ComputeRenderingContext,o=void 0!==n.precision?n.precision:"highp",s=r(o);s!==o&&(console.warn("THREE.WebGLRenderer:",o,"not supported, using",s,"instead."),o=s);var c=!0===n.logarithmicDepthBuffer,l=e.getParameter(34930),h=e.getParameter(35660),u=e.getParameter(3379),p=e.getParameter(34076),d=e.getParameter(34921),f=e.getParameter(36347),m=e.getParameter(36348),g=e.getParameter(36349),v=h>0,y=a||!!t.get("OES_texture_float");return{isWebGL2:a,getMaxAnisotropy:function(){if(void 0!==i)return i;var n=t.get("EXT_texture_filter_anisotropic");return i=null!==n?e.getParameter(n.MAX_TEXTURE_MAX_ANISOTROPY_EXT):0},getMaxPrecision:r,precision:o,logarithmicDepthBuffer:c,maxTextures:l,maxVertexTextures:h,maxTextureSize:u,maxCubemapSize:p,maxAttributes:d,maxVertexUniforms:f,maxVaryings:m,maxFragmentUniforms:g,vertexTextures:v,floatFragmentTextures:y,floatVertexTextures:v&&y,maxSamples:a?e.getParameter(36183):0}}function Zr(){var e=this,t=null,n=0,i=!1,r=!1,a=new oi,o=new Xt,s={value:null,needsUpdate:!1};function c(){s.value!==t&&(s.value=t,s.needsUpdate=n>0),e.numPlanes=n,e.numIntersection=0}function l(t,n,i,r){var c=null!==t?t.length:0,l=null;if(0!==c){if(l=s.value,!0!==r||null===l){var h=i+4*c,u=n.matrixWorldInverse;o.getNormalMatrix(u),(null===l||l.length65535?zi:Ni)(n,1);d.version=o,t.update(d,34963);var f=r.get(e);f&&t.remove(f),r.set(e,d)}return{get:function(e,t){var r=i.get(t);return r||(t.addEventListener("dispose",a),t.isBufferGeometry?r=t:t.isGeometry&&(void 0===t._bufferGeometry&&(t._bufferGeometry=(new Zi).setFromObject(e)),r=t._bufferGeometry),i.set(t,r),n.memory.geometries++,r)},update:function(e){var n=e.index,i=e.attributes;for(var r in null!==n&&t.update(n,34963),i)t.update(i[r],34962);var a=e.morphAttributes;for(var r in a)for(var o=a[r],s=0,c=o.length;s0)return e;var r=t*n,a=ha[r];if(void 0===a&&(a=new Float32Array(r),ha[r]=a),0!==t){i.toArray(a,0);for(var o=1,s=0;o!==t;++o)s+=n,e[o].toArray(a,s)}return a}function ga(e,t){if(e.length!==t.length)return!1;for(var n=0,i=e.length;n/gm;function uo(e){return e.replace(ho,po)}function po(e,t){var n=jr[t];if(void 0===n)throw new Error("Can not resolve #include <"+t+">");return uo(n)}var fo=/#pragma unroll_loop[\s]+?for \( int i \= (\d+)\; i < (\d+)\; i \+\+ \) \{([\s\S]+?)(?=\})\}/g;function mo(e){return e.replace(fo,go)}function go(e,t,n,i){for(var r="",a=parseInt(t);a0?e.gammaFactor:1,b=n.isWebGL2?"":function(e){return[e.extensionDerivatives||e.envMapCubeUV||e.bumpMap||e.tangentSpaceNormalMap||e.clearcoatNormalMap||e.flatShading||"physical"===e.shaderID?"#extension GL_OES_standard_derivatives : enable":"",(e.extensionFragDepth||e.logarithmicDepthBuffer)&&e.rendererExtensionFragDepth?"#extension GL_EXT_frag_depth : enable":"",e.extensionDrawBuffers&&e.rendererExtensionDrawBuffers?"#extension GL_EXT_draw_buffers : require":"",(e.extensionShaderTextureLOD||e.envMap)&&e.rendererExtensionShaderTextureLod?"#extension GL_EXT_shader_texture_lod : enable":""].filter(so).join("\n")}(n),_=function(e){var t=[];for(var n in e){var i=e[n];!1!==i&&t.push("#define "+n+" "+i)}return t.join("\n")}(p),w=u.createProgram();if(n.isRawShaderMaterial?((i=[_].filter(so).join("\n")).length>0&&(i+="\n"),(s=[b,_].filter(so).join("\n")).length>0&&(s+="\n")):(i=[vo(n),"#define SHADER_NAME "+n.shaderName,_,n.instancing?"#define USE_INSTANCING":"",n.supportsVertexTextures?"#define VERTEX_TEXTURES":"","#define GAMMA_FACTOR "+x,"#define MAX_BONES "+n.maxBones,n.useFog&&n.fog?"#define USE_FOG":"",n.useFog&&n.fogExp2?"#define FOG_EXP2":"",n.map?"#define USE_MAP":"",n.envMap?"#define USE_ENVMAP":"",n.envMap?"#define "+v:"",n.lightMap?"#define USE_LIGHTMAP":"",n.aoMap?"#define USE_AOMAP":"",n.emissiveMap?"#define USE_EMISSIVEMAP":"",n.bumpMap?"#define USE_BUMPMAP":"",n.normalMap?"#define USE_NORMALMAP":"",n.normalMap&&n.objectSpaceNormalMap?"#define OBJECTSPACE_NORMALMAP":"",n.normalMap&&n.tangentSpaceNormalMap?"#define TANGENTSPACE_NORMALMAP":"",n.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",n.displacementMap&&n.supportsVertexTextures?"#define USE_DISPLACEMENTMAP":"",n.specularMap?"#define USE_SPECULARMAP":"",n.roughnessMap?"#define USE_ROUGHNESSMAP":"",n.metalnessMap?"#define USE_METALNESSMAP":"",n.alphaMap?"#define USE_ALPHAMAP":"",n.vertexTangents?"#define USE_TANGENT":"",n.vertexColors?"#define USE_COLOR":"",n.vertexUvs?"#define USE_UV":"",n.uvsVertexOnly?"#define UVS_VERTEX_ONLY":"",n.flatShading?"#define FLAT_SHADED":"",n.skinning?"#define USE_SKINNING":"",n.useVertexTexture?"#define BONE_TEXTURE":"",n.morphTargets?"#define USE_MORPHTARGETS":"",n.morphNormals&&!1===n.flatShading?"#define USE_MORPHNORMALS":"",n.doubleSided?"#define DOUBLE_SIDED":"",n.flipSided?"#define FLIP_SIDED":"",n.shadowMapEnabled?"#define USE_SHADOWMAP":"",n.shadowMapEnabled?"#define "+m:"",n.sizeAttenuation?"#define USE_SIZEATTENUATION":"",n.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",n.logarithmicDepthBuffer&&n.rendererExtensionFragDepth?"#define USE_LOGDEPTHBUF_EXT":"","uniform mat4 modelMatrix;","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform mat4 viewMatrix;","uniform mat3 normalMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;","#ifdef USE_INSTANCING"," attribute mat4 instanceMatrix;","#endif","attribute vec3 position;","attribute vec3 normal;","attribute vec2 uv;","#ifdef USE_TANGENT","\tattribute vec4 tangent;","#endif","#ifdef USE_COLOR","\tattribute vec3 color;","#endif","#ifdef USE_MORPHTARGETS","\tattribute vec3 morphTarget0;","\tattribute vec3 morphTarget1;","\tattribute vec3 morphTarget2;","\tattribute vec3 morphTarget3;","\t#ifdef USE_MORPHNORMALS","\t\tattribute vec3 morphNormal0;","\t\tattribute vec3 morphNormal1;","\t\tattribute vec3 morphNormal2;","\t\tattribute vec3 morphNormal3;","\t#else","\t\tattribute vec3 morphTarget4;","\t\tattribute vec3 morphTarget5;","\t\tattribute vec3 morphTarget6;","\t\tattribute vec3 morphTarget7;","\t#endif","#endif","#ifdef USE_SKINNING","\tattribute vec4 skinIndex;","\tattribute vec4 skinWeight;","#endif","\n"].filter(so).join("\n"),s=[b,vo(n),"#define SHADER_NAME "+n.shaderName,_,n.alphaTest?"#define ALPHATEST "+n.alphaTest+(n.alphaTest%1?"":".0"):"","#define GAMMA_FACTOR "+x,n.useFog&&n.fog?"#define USE_FOG":"",n.useFog&&n.fogExp2?"#define FOG_EXP2":"",n.map?"#define USE_MAP":"",n.matcap?"#define USE_MATCAP":"",n.envMap?"#define USE_ENVMAP":"",n.envMap?"#define "+g:"",n.envMap?"#define "+v:"",n.envMap?"#define "+y:"",n.lightMap?"#define USE_LIGHTMAP":"",n.aoMap?"#define USE_AOMAP":"",n.emissiveMap?"#define USE_EMISSIVEMAP":"",n.bumpMap?"#define USE_BUMPMAP":"",n.normalMap?"#define USE_NORMALMAP":"",n.normalMap&&n.objectSpaceNormalMap?"#define OBJECTSPACE_NORMALMAP":"",n.normalMap&&n.tangentSpaceNormalMap?"#define TANGENTSPACE_NORMALMAP":"",n.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",n.specularMap?"#define USE_SPECULARMAP":"",n.roughnessMap?"#define USE_ROUGHNESSMAP":"",n.metalnessMap?"#define USE_METALNESSMAP":"",n.alphaMap?"#define USE_ALPHAMAP":"",n.sheen?"#define USE_SHEEN":"",n.vertexTangents?"#define USE_TANGENT":"",n.vertexColors?"#define USE_COLOR":"",n.vertexUvs?"#define USE_UV":"",n.uvsVertexOnly?"#define UVS_VERTEX_ONLY":"",n.gradientMap?"#define USE_GRADIENTMAP":"",n.flatShading?"#define FLAT_SHADED":"",n.doubleSided?"#define DOUBLE_SIDED":"",n.flipSided?"#define FLIP_SIDED":"",n.shadowMapEnabled?"#define USE_SHADOWMAP":"",n.shadowMapEnabled?"#define "+m:"",n.premultipliedAlpha?"#define PREMULTIPLIED_ALPHA":"",n.physicallyCorrectLights?"#define PHYSICALLY_CORRECT_LIGHTS":"",n.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",n.logarithmicDepthBuffer&&n.rendererExtensionFragDepth?"#define USE_LOGDEPTHBUF_EXT":"",(n.extensionShaderTextureLOD||n.envMap)&&n.rendererExtensionShaderTextureLod?"#define TEXTURE_LOD_EXT":"","uniform mat4 viewMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;",n.toneMapping!==k?"#define TONE_MAPPING":"",n.toneMapping!==k?jr.tonemapping_pars_fragment:"",n.toneMapping!==k?oo("toneMapping",n.toneMapping):"",n.dithering?"#define DITHERING":"",n.outputEncoding||n.mapEncoding||n.matcapEncoding||n.envMapEncoding||n.emissiveMapEncoding||n.lightMapEncoding?jr.encodings_pars_fragment:"",n.mapEncoding?ao("mapTexelToLinear",n.mapEncoding):"",n.matcapEncoding?ao("matcapTexelToLinear",n.matcapEncoding):"",n.envMapEncoding?ao("envMapTexelToLinear",n.envMapEncoding):"",n.emissiveMapEncoding?ao("emissiveMapTexelToLinear",n.emissiveMapEncoding):"",n.lightMapEncoding?ao("lightMapTexelToLinear",n.lightMapEncoding):"",n.outputEncoding?(c="linearToOutputTexel",l=n.outputEncoding,h=io(l),"vec4 "+c+"( vec4 value ) { return LinearTo"+h[0]+h[1]+"; }"):"",n.depthPacking?"#define DEPTH_PACKING "+n.depthPacking:"","\n"].filter(so).join("\n")),d=lo(d=co(d=uo(d),n),n),f=lo(f=co(f=uo(f),n),n),d=mo(d),f=mo(f),n.isWebGL2&&!n.isRawShaderMaterial){var M=!1,S=/^\s*#version\s+300\s+es\s*\n/;n.isShaderMaterial&&null!==d.match(S)&&null!==f.match(S)&&(M=!0,d=d.replace(S,""),f=f.replace(S,"")),i=["#version 300 es\n","#define attribute in","#define varying out","#define texture2D texture"].join("\n")+"\n"+i,s=["#version 300 es\n","#define varying in",M?"":"out highp vec4 pc_fragColor;",M?"":"#define gl_FragColor pc_fragColor","#define gl_FragDepthEXT gl_FragDepth","#define texture2D texture","#define textureCube texture","#define texture2DProj textureProj","#define texture2DLodEXT textureLod","#define texture2DProjLodEXT textureProjLod","#define textureCubeLodEXT textureLod","#define texture2DGradEXT textureGrad","#define texture2DProjGradEXT textureProjGrad","#define textureCubeGradEXT textureGrad"].join("\n")+"\n"+s}var T,E,A=s+f,L=to(u,35633,i+d),R=to(u,35632,A);if(u.attachShader(w,L),u.attachShader(w,R),void 0!==n.index0AttributeName?u.bindAttribLocation(w,0,n.index0AttributeName):!0===n.morphTargets&&u.bindAttribLocation(w,0,"position"),u.linkProgram(w),e.debug.checkShaderErrors){var P=u.getProgramInfoLog(w).trim(),C=u.getShaderInfoLog(L).trim(),O=u.getShaderInfoLog(R).trim(),D=!0,I=!0;if(!1===u.getProgramParameter(w,35714)){D=!1;var N=ro(u,L,"vertex"),B=ro(u,R,"fragment");console.error("THREE.WebGLProgram: shader error: ",u.getError(),"35715",u.getProgramParameter(w,35715),"gl.getProgramInfoLog",P,N,B)}else""!==P?console.warn("THREE.WebGLProgram: gl.getProgramInfoLog()",P):""!==C&&""!==O||(I=!1);I&&(this.diagnostics={runnable:D,programLog:P,vertexShader:{log:C,prefix:i},fragmentShader:{log:O,prefix:s}})}return u.detachShader(w,L),u.detachShader(w,R),u.deleteShader(L),u.deleteShader(R),this.getUniforms=function(){return void 0===T&&(T=new eo(u,w)),T},this.getAttributes=function(){return void 0===E&&(E=function(e,t){for(var n={},i=e.getProgramParameter(t,35721),r=0;r0,maxBones:S,useVertexTexture:o,morphTargets:i.morphTargets,morphNormals:i.morphNormals,maxMorphTargets:e.maxMorphTargets,maxMorphNormals:e.maxMorphNormals,numDirLights:d.directional.length,numPointLights:d.point.length,numSpotLights:d.spot.length,numRectAreaLights:d.rectArea.length,numHemiLights:d.hemi.length,numDirLightShadows:d.directionalShadowMap.length,numPointLightShadows:d.pointShadowMap.length,numSpotLightShadows:d.spotShadowMap.length,numClippingPlanes:v,numClipIntersection:y,dithering:i.dithering,shadowMapEnabled:e.shadowMap.enabled&&m.length>0,shadowMapType:e.shadowMap.type,toneMapping:i.toneMapped?e.toneMapping:k,physicallyCorrectLights:e.physicallyCorrectLights,premultipliedAlpha:i.premultipliedAlpha,alphaTest:i.alphaTest,doubleSided:i.side===l,flipSided:i.side===c,depthPacking:void 0!==i.depthPacking&&i.depthPacking,index0AttributeName:i.index0AttributeName,extensionDerivatives:i.extensions&&i.extensions.derivatives,extensionFragDepth:i.extensions&&i.extensions.fragDepth,extensionDrawbuffers:i.extensions&&i.extensions.drawBuffers,extensionShaderTextureLOD:i.extensions&&i.extensions.shaderTextureLOD,rendererExtensionFragDepth:r||null!==t.get("EXT_frag_depth"),rendererExtensionDrawBuffers:r||null!==t.get("WEBGL_draw_buffers"),rendererExtensionShaderTextureLod:r||null!==t.get("EXT_shader_texture_lod"),onBeforeCompile:i.onBeforeCompile}},this.getProgramCacheKey=function(t){var n=[];if(t.shaderID?n.push(t.shaderID):(n.push(t.fragmentShader),n.push(t.vertexShader)),void 0!==t.defines)for(var i in t.defines)n.push(i),n.push(t.defines[i]);if(void 0===t.isRawShaderMaterial){for(var r=0;r1&&n.sort(e||_o),i.length>1&&i.sort(t||wo)}}}function So(){var e=new WeakMap;function t(n){var i=n.target;i.removeEventListener("dispose",t),e.delete(i)}return{get:function(n,i){var r,a=e.get(n);return void 0===a?(r=new Mo,e.set(n,new WeakMap),e.get(n).set(i,r),n.addEventListener("dispose",t)):void 0===(r=a.get(i))&&(r=new Mo,a.set(i,r)),r},dispose:function(){e=new WeakMap}}}function To(){var e={};return{get:function(t){if(void 0!==e[t.id])return e[t.id];var n;switch(t.type){case"DirectionalLight":n={direction:new rn,color:new _i};break;case"SpotLight":n={position:new rn,direction:new rn,color:new _i,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case"PointLight":n={position:new rn,color:new _i,distance:0,decay:0};break;case"HemisphereLight":n={direction:new rn,skyColor:new _i,groundColor:new _i};break;case"RectAreaLight":n={color:new _i,position:new rn,halfWidth:new rn,halfHeight:new rn}}return e[t.id]=n,n}}}var Eo=0;function Ao(e,t){return(t.castShadow?1:0)-(e.castShadow?1:0)}function Lo(){for(var e,t=new To,n=(e={},{get:function(t){if(void 0!==e[t.id])return e[t.id];var n;switch(t.type){case"DirectionalLight":case"SpotLight":n={shadowBias:0,shadowRadius:1,shadowMapSize:new qt};break;case"PointLight":n={shadowBias:0,shadowRadius:1,shadowMapSize:new qt,shadowCameraNear:1,shadowCameraFar:1e3}}return e[t.id]=n,n}}),i={version:0,hash:{directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,numDirectionalShadows:-1,numPointShadows:-1,numSpotShadows:-1},ambient:[0,0,0],probe:[],directional:[],directionalShadow:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotShadow:[],spotShadowMap:[],spotShadowMatrix:[],rectArea:[],point:[],pointShadow:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[]},r=0;r<9;r++)i.probe.push(new rn);var a=new rn,o=new pn,s=new pn;return{setup:function(e,r,c){for(var l=0,h=0,u=0,p=0;p<9;p++)i.probe[p].set(0,0,0);var d=0,f=0,m=0,g=0,v=0,y=0,x=0,b=0,_=c.matrixWorldInverse;e.sort(Ao),p=0;for(var w=e.length;p0:!0===c.isGeometry&&(p=c.morphTargets&&c.morphTargets.length>0));var d=!1;!0===t.isSkinnedMesh&&(!0===n.skinning?d=!0:console.warn("THREE.WebGLShadowMap: THREE.SkinnedMesh with material.skinning set to false:",t)),l=h(p,d,!0===t.isInstancedMesh)}else l=u;if(e.localClippingEnabled&&!0===n.clipShadows&&0!==n.clippingPlanes.length){var f=l.uuid,v=n.uuid,y=m[f];void 0===y&&(y={},m[f]=y);var x=y[v];void 0===x&&(x=l.clone(),y[v]=x),l=x}return l.visible=n.visible,l.wireframe=n.wireframe,l.side=s===o?null!==n.shadowSide?n.shadowSide:n.side:null!==n.shadowSide?n.shadowSide:g[n.side],l.clipShadows=n.clipShadows,l.clippingPlanes=n.clippingPlanes,l.clipIntersection=n.clipIntersection,l.wireframeLinewidth=n.wireframeLinewidth,l.linewidth=n.linewidth,!0===i.isPointLight&&!0===l.isMeshDistanceMaterial&&(l.referencePosition.setFromMatrixPosition(i.matrixWorld),l.nearDistance=r,l.farDistance=a),l}function E(n,r,a,s,c){if(!1!==n.visible){if(n.layers.test(r.layers)&&(n.isMesh||n.isLine||n.isPoints)&&(n.castShadow||n.receiveShadow&&c===o)&&(!n.frustumCulled||i.intersectsObject(n))){n.modelViewMatrix.multiplyMatrices(a.matrixWorldInverse,n.matrixWorld);var l=t.update(n),h=n.material;if(Array.isArray(h))for(var u=l.groups,p=0,d=u.length;pn||a.y>n)&&(console.warn("THREE.WebGLShadowMap:",v,"has shadow exceeding max texture size, reducing"),a.x>n&&(u.x=Math.floor(n/x.x),a.x=u.x*x.x,y.mapSize.x=u.x),a.y>n&&(u.y=Math.floor(n/x.y),a.y=u.y*x.y,y.mapSize.y=u.y)),null===y.map&&!y.isPointLightShadow&&this.type===o){var b={minFilter:ce,magFilter:ce,format:Te};y.map=new Kt(a.x,a.y,b),y.map.texture.name=v.name+".shadowMap",y.mapPass=new Kt(a.x,a.y,b),y.camera.updateProjectionMatrix()}if(null===y.map){b={minFilter:ae,magFilter:ae,format:Te};y.map=new Kt(a.x,a.y,b),y.map.texture.name=v.name+".shadowMap",y.camera.updateProjectionMatrix()}e.setRenderTarget(y.map),e.clear();for(var M=y.getViewportCount(),S=0;S=1):-1!==ue.indexOf("OpenGL ES")&&(he=parseFloat(/^OpenGL\ ES\ ([0-9])/.exec(ue)[1]),le=he>=2);var pe=null,de={},fe=new Qt,me=new Qt;function ge(t,n,i){var r=new Uint8Array(4),a=e.createTexture();e.bindTexture(t,a),e.texParameteri(t,10241,9728),e.texParameteri(t,10240,9728);for(var o=0;oi||e.height>i)&&(r=i/Math.max(e.width,e.height)),r<1||!0===t){if("undefined"!=typeof HTMLImageElement&&e instanceof HTMLImageElement||"undefined"!=typeof HTMLCanvasElement&&e instanceof HTMLCanvasElement||"undefined"!=typeof ImageBitmap&&e instanceof ImageBitmap){var a=t?Wt.floorPowerOfTwo:Math.floor,o=a(r*e.width),c=a(r*e.height);void 0===s&&(s=m(o,c));var l=n?m(o,c):s;return l.width=o,l.height=c,l.getContext("2d").drawImage(e,0,0,o,c),console.warn("THREE.WebGLRenderer: Texture has been resized from ("+e.width+"x"+e.height+") to ("+o+"x"+c+")."),l}return"data"in e&&console.warn("THREE.WebGLRenderer: Image in DataTexture is too big ("+e.width+"x"+e.height+")."),e}return e}function v(e){return Wt.isPowerOfTwo(e.width)&&Wt.isPowerOfTwo(e.height)}function y(e,t){return e.generateMipmaps&&t&&e.minFilter!==ae&&e.minFilter!==ce}function x(t,n,r,a){e.generateMipmap(t),i.get(n).__maxMipLevel=Math.log(Math.max(r,a))*Math.LOG2E}function b(n,i,r){if(!1===c)return i;if(null!==n){if(void 0!==e[n])return e[n];console.warn("THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '"+n+"'")}var a=i;return 6403===i&&(5126===r&&(a=33326),5131===r&&(a=33325),5121===r&&(a=33321)),6407===i&&(5126===r&&(a=34837),5131===r&&(a=34843),5121===r&&(a=32849)),6408===i&&(5126===r&&(a=34836),5131===r&&(a=34842),5121===r&&(a=32856)),33325===a||33326===a||34842===a||34836===a?t.get("EXT_color_buffer_float"):34843!==a&&34837!==a||console.warn("THREE.WebGLRenderer: Floating point textures with RGB format not supported. Please use RGBA instead."),a}function _(e){return e===ae||e===oe||e===se?9728:9729}function w(t){var n=t.target;n.removeEventListener("dispose",w),function(t){var n=i.get(t);if(void 0===n.__webglInit)return;e.deleteTexture(n.__webglTexture),i.remove(t)}(n),n.isVideoTexture&&d.delete(n),o.memory.textures--}function M(t){var n=t.target;n.removeEventListener("dispose",M),function(t){var n=i.get(t),r=i.get(t.texture);if(!t)return;void 0!==r.__webglTexture&&e.deleteTexture(r.__webglTexture);t.depthTexture&&t.depthTexture.dispose();if(t.isWebGLCubeRenderTarget)for(var a=0;a<6;a++)e.deleteFramebuffer(n.__webglFramebuffer[a]),n.__webglDepthbuffer&&e.deleteRenderbuffer(n.__webglDepthbuffer[a]);else e.deleteFramebuffer(n.__webglFramebuffer),n.__webglDepthbuffer&&e.deleteRenderbuffer(n.__webglDepthbuffer);i.remove(t.texture),i.remove(t)}(n),o.memory.textures--}var S=0;function T(e,t){var r=i.get(e);if(e.isVideoTexture&&function(e){var t=o.render.frame;d.get(e)!==t&&(d.set(e,t),e.update())}(e),e.version>0&&r.__version!==e.version){var a=e.image;if(void 0===a)console.warn("THREE.WebGLRenderer: Texture marked for update but image is undefined");else{if(!1!==a.complete)return void O(r,e,t);console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete")}}n.activeTexture(33984+t),n.bindTexture(3553,r.__webglTexture)}function E(t,r){if(6===t.image.length){var o=i.get(t);if(t.version>0&&o.__version!==t.version){C(o,t),n.activeTexture(33984+r),n.bindTexture(34067,o.__webglTexture),e.pixelStorei(37440,t.flipY);for(var s=t&&(t.isCompressedTexture||t.image[0].isCompressedTexture),l=t.image[0]&&t.image[0].isDataTexture,u=[],p=0;p<6;p++)u[p]=s||l?l?t.image[p].image:t.image[p]:g(t.image[p],!1,!0,h);var d,f=u[0],m=v(f)||c,_=a.convert(t.format),w=a.convert(t.type),M=b(t.internalFormat,_,w);if(P(34067,t,m),s){for(p=0;p<6;p++){d=u[p].mipmaps;for(var S=0;S1||i.get(a).__currentAnisotropy)&&(e.texParameterf(n,s.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(a.anisotropy,r.getMaxAnisotropy())),i.get(a).__currentAnisotropy=a.anisotropy)}}function C(t,n){void 0===t.__webglInit&&(t.__webglInit=!0,n.addEventListener("dispose",w),t.__webglTexture=e.createTexture(),o.memory.textures++)}function O(t,i,r){var o=3553;i.isDataTexture2DArray&&(o=35866),i.isDataTexture3D&&(o=32879),C(t,i),n.activeTexture(33984+r),n.bindTexture(o,t.__webglTexture),e.pixelStorei(37440,i.flipY),e.pixelStorei(37441,i.premultiplyAlpha),e.pixelStorei(3317,i.unpackAlignment);var s=function(e){return!c&&(e.wrapS!==ie||e.wrapT!==ie||e.minFilter!==ae&&e.minFilter!==ce)}(i)&&!1===v(i.image),l=g(i.image,s,!1,u),h=v(l)||c,p=a.convert(i.format),d=a.convert(i.type),f=b(i.internalFormat,p,d);P(o,i,h);var m,_=i.mipmaps;if(i.isDepthTexture){if(f=6402,i.type===ve){if(!1===c)throw new Error("Float Depth Texture only supported in WebGL2.0");f=36012}else c&&(f=33189);i.format===Re&&6402===f&&i.type!==fe&&i.type!==ge&&(console.warn("THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture."),i.type=fe,d=a.convert(i.type)),i.format===Pe&&(f=34041,i.type!==we&&(console.warn("THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture."),i.type=we,d=a.convert(i.type))),n.texImage2D(3553,0,f,l.width,l.height,0,p,d,null)}else if(i.isDataTexture)if(_.length>0&&h){for(var w=0,M=_.length;w0&&h){for(w=0,M=_.length;w=l&&console.warn("THREE.WebGLTextures: Trying to use "+e+" texture units while this GPU supports only "+l),S+=1,e},this.resetTextureUnits=function(){S=0},this.setTexture2D=T,this.setTexture2DArray=function(e,t){var r=i.get(e);e.version>0&&r.__version!==e.version?O(r,e,t):(n.activeTexture(33984+t),n.bindTexture(35866,r.__webglTexture))},this.setTexture3D=function(e,t){var r=i.get(e);e.version>0&&r.__version!==e.version?O(r,e,t):(n.activeTexture(33984+t),n.bindTexture(32879,r.__webglTexture))},this.setTextureCube=E,this.setTextureCubeDynamic=A,this.setupRenderTarget=function(t){var r=i.get(t),s=i.get(t.texture);t.addEventListener("dispose",M),s.__webglTexture=e.createTexture(),o.memory.textures++;var l=!0===t.isWebGLCubeRenderTarget,h=!0===t.isWebGLMultisampleRenderTarget,u=v(t)||c;if(l){r.__webglFramebuffer=[];for(var p=0;p<6;p++)r.__webglFramebuffer[p]=e.createFramebuffer()}else if(r.__webglFramebuffer=e.createFramebuffer(),h)if(c){r.__webglMultisampledFramebuffer=e.createFramebuffer(),r.__webglColorRenderbuffer=e.createRenderbuffer(),e.bindRenderbuffer(36161,r.__webglColorRenderbuffer);var d=a.convert(t.texture.format),f=a.convert(t.texture.type),m=b(t.texture.internalFormat,d,f),g=B(t);e.renderbufferStorageMultisample(36161,g,m,t.width,t.height),e.bindFramebuffer(36160,r.__webglMultisampledFramebuffer),e.framebufferRenderbuffer(36160,36064,36161,r.__webglColorRenderbuffer),e.bindRenderbuffer(36161,null),t.depthBuffer&&(r.__webglDepthRenderbuffer=e.createRenderbuffer(),I(r.__webglDepthRenderbuffer,t,!0)),e.bindFramebuffer(36160,null)}else console.warn("THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.");if(l){for(n.bindTexture(34067,s.__webglTexture),P(34067,t.texture,u),p=0;p<6;p++)D(r.__webglFramebuffer[p],t,36064,34069+p);y(t.texture,u)&&x(34067,t.texture,t.width,t.height),n.bindTexture(34067,null)}else n.bindTexture(3553,s.__webglTexture),P(3553,t.texture,u),D(r.__webglFramebuffer,t,36064,3553),y(t.texture,u)&&x(3553,t.texture,t.width,t.height),n.bindTexture(3553,null);t.depthBuffer&&N(t)},this.updateRenderTargetMipmap=function(e){var t=e.texture;if(y(t,v(e)||c)){var r=e.isWebGLCubeRenderTarget?34067:3553,a=i.get(t).__webglTexture;n.bindTexture(r,a),x(r,t,e.width,e.height),n.bindTexture(r,null)}},this.updateMultisampleRenderTarget=function(t){if(t.isWebGLMultisampleRenderTarget)if(c){var n=i.get(t);e.bindFramebuffer(36008,n.__webglMultisampledFramebuffer),e.bindFramebuffer(36009,n.__webglFramebuffer);var r=t.width,a=t.height,o=16384;t.depthBuffer&&(o|=256),t.stencilBuffer&&(o|=1024),e.blitFramebuffer(0,0,r,a,0,0,r,a,o,9728)}else console.warn("THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.")},this.safeSetTexture2D=function(e,t){e&&e.isWebGLRenderTarget&&(!1===z&&(console.warn("THREE.WebGLTextures.safeSetTexture2D: don't use render targets as textures. Use their .texture property instead."),z=!0),e=e.texture),T(e,t)},this.safeSetTextureCube=function(e,t){e&&e.isWebGLCubeRenderTarget&&(!1===F&&(console.warn("THREE.WebGLTextures.safeSetTextureCube: don't use cube render targets as textures. Use their .texture property instead."),F=!0),e=e.texture),e&&e.isCubeTexture||Array.isArray(e.image)&&6===e.image.length?E(e,t):A(e,t)}}function Fo(e,t,n){var i=n.isWebGL2;return{convert:function(e){var n;if(e===ue)return 5121;if(e===xe)return 32819;if(e===be)return 32820;if(e===_e)return 33635;if(e===pe)return 5120;if(e===de)return 5122;if(e===fe)return 5123;if(e===me)return 5124;if(e===ge)return 5125;if(e===ve)return 5126;if(e===ye)return i?5131:null!==(n=t.get("OES_texture_half_float"))?n.HALF_FLOAT_OES:null;if(e===Me)return 6406;if(e===Se)return 6407;if(e===Te)return 6408;if(e===Ee)return 6409;if(e===Ae)return 6410;if(e===Re)return 6402;if(e===Pe)return 34041;if(e===Ce)return 6403;if(e===Oe)return 36244;if(e===De)return 33319;if(e===Ie)return 33320;if(e===Ne)return 36248;if(e===Be)return 36249;if(e===ze||e===Fe||e===Ue||e===Ge){if(null===(n=t.get("WEBGL_compressed_texture_s3tc")))return null;if(e===ze)return n.COMPRESSED_RGB_S3TC_DXT1_EXT;if(e===Fe)return n.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(e===Ue)return n.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(e===Ge)return n.COMPRESSED_RGBA_S3TC_DXT5_EXT}if(e===He)return null!==(n=t.get("EXT_texture_compression_bptc"))?n.COMPRESSED_RGBA_BPTC_UNORM_EXT:null;if(e===Ve||e===ke||e===je||e===We){if(null===(n=t.get("WEBGL_compressed_texture_pvrtc")))return null;if(e===Ve)return n.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(e===ke)return n.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(e===je)return n.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(e===We)return n.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}if(e===qe)return null!==(n=t.get("WEBGL_compressed_texture_etc1"))?n.COMPRESSED_RGB_ETC1_WEBGL:null;if((e===Xe||e===Ye)&&null!==(n=t.get("WEBGL_compressed_texture_etc"))){if(e===Xe)return n.COMPRESSED_RGB8_ETC2;if(e===Ye)return n.COMPRESSED_RGBA8_ETC2_EAC}return e===Ze||e===Je||e===Qe||e===Ke||e===$e||e===et||e===tt||e===nt||e===it||e===rt||e===at||e===ot||e===st||e===ct||e===lt||e===ht||e===ut||e===pt||e===dt||e===ft||e===mt||e===gt||e===vt||e===yt||e===xt||e===bt||e===_t||e===wt?null!==(n=t.get("WEBGL_compressed_texture_astc"))?e:null:e===we?i?34042:null!==(n=t.get("WEBGL_depth_texture"))?n.UNSIGNED_INT_24_8_WEBGL:null:void 0}}}function Uo(e){Pr.call(this),this.cameras=e||[]}function Go(){Pn.call(this),this.type="Group"}function Ho(e,t){var n=this,i=null,r=1,a=null,o="local-floor",s=null,c=[],l=new Map,h=new Pr;h.layers.enable(1),h.viewport=new Qt;var u=new Pr;u.layers.enable(2),u.viewport=new Qt;var p=new Uo([h,u]);p.layers.enable(1),p.layers.enable(2);var d=null,f=null;function m(e){var t=l.get(e.inputSource);t&&(t.targetRay&&t.targetRay.dispatchEvent({type:e.type}),t.grip&&t.grip.dispatchEvent({type:e.type}))}function g(){l.forEach(function(e,t){e.targetRay&&(e.targetRay.dispatchEvent({type:"disconnected",data:t}),e.targetRay.visible=!1),e.grip&&(e.grip.dispatchEvent({type:"disconnected",data:t}),e.grip.visible=!1)}),l.clear(),e.setFramebuffer(null),e.setRenderTarget(e.getRenderTarget()),M.stop(),n.isPresenting=!1,n.dispatchEvent({type:"sessionend"})}function v(e){a=e,M.setContext(i),M.start(),n.isPresenting=!0,n.dispatchEvent({type:"sessionstart"})}function y(e){for(var t=i.inputSources,n=0;n=0){var l=r[s];if(void 0!==l){var h=l.normalized,u=l.itemSize,p=_.get(l);if(void 0===p)continue;var d=p.buffer,y=p.type,x=p.bytesPerElement;if(l.isInterleavedBufferAttribute){var b=l.data,w=b.stride,M=l.offset;b&&b.isInstancedInterleavedBuffer?(v.enableAttributeAndDivisor(c,b.meshPerAttribute),void 0===t.maxInstancedCount&&(t.maxInstancedCount=b.meshPerAttribute*b.count)):v.enableAttribute(c),f.bindBuffer(34962,d),f.vertexAttribPointer(c,u,y,h,w*x,M*x)}else l.isInstancedBufferAttribute?(v.enableAttributeAndDivisor(c,l.meshPerAttribute),void 0===t.maxInstancedCount&&(t.maxInstancedCount=l.meshPerAttribute*l.count)):v.enableAttribute(c),f.bindBuffer(34962,d),f.vertexAttribPointer(c,u,y,h,0,0)}else if("instanceMatrix"===s){var p=_.get(e.instanceMatrix);if(void 0===p)continue;var d=p.buffer,y=p.type;v.enableAttributeAndDivisor(c+0,1),v.enableAttributeAndDivisor(c+1,1),v.enableAttributeAndDivisor(c+2,1),v.enableAttributeAndDivisor(c+3,1),f.bindBuffer(34962,d),f.vertexAttribPointer(c+0,4,y,!1,64,0),f.vertexAttribPointer(c+1,4,y,!1,64,16),f.vertexAttribPointer(c+2,4,y,!1,64,32),f.vertexAttribPointer(c+3,4,y,!1,64,48)}else if(void 0!==o){var S=o[s];if(void 0!==S)switch(S.length){case 2:f.vertexAttrib2fv(c,S);break;case 3:f.vertexAttrib3fv(c,S);break;case 4:f.vertexAttrib4fv(c,S);break;default:f.vertexAttrib1fv(c,S)}}}}v.disableUnusedAttributes()}(r,n,i,s),null!==l&&f.bindBuffer(34963,u.buffer));var y=null!==l?l.count:h.count,x=n.drawRange.start*p,b=n.drawRange.count*p,M=null!==a?a.start*p:0,S=null!==a?a.count*p:1/0,T=Math.max(x,M),E=Math.min(y,x+b,M+S)-1,A=Math.max(0,E-T+1);if(0!==A){if(r.isMesh)!0===i.wireframe?(v.setLineWidth(i.wireframeLinewidth*se()),d.setMode(1)):d.setMode(4);else if(r.isLine){var C=i.linewidth;void 0===C&&(C=1),v.setLineWidth(C*se()),r.isLineSegments?d.setMode(1):r.isLineLoop?d.setMode(2):d.setMode(3)}else r.isPoints?d.setMode(0):r.isSprite&&d.setMode(4);r.isInstancedMesh?d.renderInstances(n,T,A,r.count):n.isInstancedBufferGeometry?d.renderInstances(n,T,A,n.maxInstancedCount):d.render(T,A)}},this.compile=function(e,t){(d=E.get(e,t)).init(),e.traverse(function(e){e.isLight&&(d.pushLight(e),e.castShadow&&d.pushShadow(e))}),d.setupLights(t);var n={};e.traverse(function(t){if(t.material)if(Array.isArray(t.material))for(var i=0;i=0&&e.numSupportedMorphTargets++}if(e.morphNormals){e.numSupportedMorphNormals=0;for(p=0;p=0&&e.numSupportedMorphNormals++}var f=i.uniforms;(e.isShaderMaterial||e.isRawShaderMaterial)&&!0!==e.clipping||(i.numClippingPlanes=ne.numPlanes,i.numIntersection=ne.numIntersection,f.clippingPlanes=ne.uniform),i.fog=t.fog,i.needsLights=function(e){return e.isMeshLambertMaterial||e.isMeshToonMaterial||e.isMeshPhongMaterial||e.isMeshStandardMaterial||e.isShadowMaterial||e.isShaderMaterial&&!0===e.lights}(e),i.lightsStateVersion=o,i.needsLights&&(f.ambientLightColor.value=r.state.ambient,f.lightProbe.value=r.state.probe,f.directionalLights.value=r.state.directional,f.directionalLightShadows.value=r.state.directionalShadow,f.spotLights.value=r.state.spot,f.spotLightShadows.value=r.state.spotShadow,f.rectAreaLights.value=r.state.rectArea,f.pointLights.value=r.state.point,f.pointLightShadows.value=r.state.pointShadow,f.hemisphereLights.value=r.state.hemi,f.directionalShadowMap.value=r.state.directionalShadowMap,f.directionalShadowMatrix.value=r.state.directionalShadowMatrix,f.spotShadowMap.value=r.state.spotShadowMap,f.spotShadowMatrix.value=r.state.spotShadowMatrix,f.pointShadowMap.value=r.state.pointShadowMap,f.pointShadowMatrix.value=r.state.pointShadowMatrix);var m=i.program.getUniforms(),g=eo.seqWithValue(m.seq,f);i.uniformsList=g}function Ee(e,t,n,i){b.resetTextureUnits();var r=t.fog,a=n.isMeshStandardMaterial?t.environment:null,o=x.get(n),s=d.state.lights;if(ie&&(re||e!==H)){var l=e===H&&n.id===U;ne.setState(n.clippingPlanes,n.clipIntersection,n.clipShadows,e,o,l)}n.version===o.__version?void 0===o.program?Se(n,t,i):n.fog&&o.fog!==r?Se(n,t,i):o.environment!==a?Se(n,t,i):o.needsLights&&o.lightsStateVersion!==s.state.version?Se(n,t,i):void 0===o.numClippingPlanes||o.numClippingPlanes===ne.numPlanes&&o.numIntersection===ne.numIntersection?o.outputEncoding!==O.outputEncoding&&Se(n,t,i):Se(n,t,i):(Se(n,t,i),o.__version=n.version);var h,u,p=!1,m=!1,y=!1,_=o.program,w=_.getUniforms(),M=o.uniforms;if(v.useProgram(_.program)&&(p=!0,m=!0,y=!0),n.id!==U&&(U=n.id,m=!0),p||H!==e){if(w.setValue(f,"projectionMatrix",e.projectionMatrix),g.logarithmicDepthBuffer&&w.setValue(f,"logDepthBufFC",2/(Math.log(e.far+1)/Math.LN2)),H!==e&&(H=e,m=!0,y=!0),n.isShaderMaterial||n.isMeshPhongMaterial||n.isMeshToonMaterial||n.isMeshStandardMaterial||n.envMap){var S=w.map.cameraPosition;void 0!==S&&S.setValue(f,oe.setFromMatrixPosition(e.matrixWorld))}(n.isMeshPhongMaterial||n.isMeshToonMaterial||n.isMeshLambertMaterial||n.isMeshBasicMaterial||n.isMeshStandardMaterial||n.isShaderMaterial)&&w.setValue(f,"isOrthographic",!0===e.isOrthographicCamera),(n.isMeshPhongMaterial||n.isMeshToonMaterial||n.isMeshLambertMaterial||n.isMeshBasicMaterial||n.isMeshStandardMaterial||n.isShaderMaterial||n.skinning)&&w.setValue(f,"viewMatrix",e.matrixWorldInverse)}if(n.skinning){w.setOptional(f,i,"bindMatrix"),w.setOptional(f,i,"bindMatrixInverse");var T=i.skeleton;if(T){var E=T.bones;if(g.floatVertexTextures){if(void 0===T.boneTexture){var A=Math.sqrt(4*E.length);A=Wt.ceilPowerOfTwo(A),A=Math.max(A,4);var L=new Float32Array(A*A*4);L.set(T.boneMatrices);var R=new Nr(L,A,A,Te,ve);T.boneMatrices=L,T.boneTexture=R,T.boneTextureSize=A}w.setValue(f,"boneTexture",T.boneTexture,b),w.setValue(f,"boneTextureSize",T.boneTextureSize)}else w.setOptional(f,T,"boneMatrices")}}return(m||o.receiveShadow!==i.receiveShadow)&&(o.receiveShadow=i.receiveShadow,w.setValue(f,"receiveShadow",i.receiveShadow)),m&&(w.setValue(f,"toneMappingExposure",O.toneMappingExposure),w.setValue(f,"toneMappingWhitePoint",O.toneMappingWhitePoint),o.needsLights&&(u=y,(h=M).ambientLightColor.needsUpdate=u,h.lightProbe.needsUpdate=u,h.directionalLights.needsUpdate=u,h.directionalLightShadows.needsUpdate=u,h.pointLights.needsUpdate=u,h.pointLightShadows.needsUpdate=u,h.spotLights.needsUpdate=u,h.spotLightShadows.needsUpdate=u,h.rectAreaLights.needsUpdate=u,h.hemisphereLights.needsUpdate=u),r&&n.fog&&function(e,t){e.fogColor.value.copy(t.color),t.isFog?(e.fogNear.value=t.near,e.fogFar.value=t.far):t.isFogExp2&&(e.fogDensity.value=t.density)}(M,r),n.isMeshBasicMaterial?Ae(M,n):n.isMeshLambertMaterial?(Ae(M,n),function(e,t){t.emissiveMap&&(e.emissiveMap.value=t.emissiveMap)}(M,n)):n.isMeshToonMaterial?(Ae(M,n),function(e,t){e.specular.value.copy(t.specular),e.shininess.value=Math.max(t.shininess,1e-4),t.gradientMap&&(e.gradientMap.value=t.gradientMap);t.emissiveMap&&(e.emissiveMap.value=t.emissiveMap);t.bumpMap&&(e.bumpMap.value=t.bumpMap,e.bumpScale.value=t.bumpScale,t.side===c&&(e.bumpScale.value*=-1));t.normalMap&&(e.normalMap.value=t.normalMap,e.normalScale.value.copy(t.normalScale),t.side===c&&e.normalScale.value.negate());t.displacementMap&&(e.displacementMap.value=t.displacementMap,e.displacementScale.value=t.displacementScale,e.displacementBias.value=t.displacementBias)}(M,n)):n.isMeshPhongMaterial?(Ae(M,n),function(e,t){e.specular.value.copy(t.specular),e.shininess.value=Math.max(t.shininess,1e-4),t.emissiveMap&&(e.emissiveMap.value=t.emissiveMap);t.bumpMap&&(e.bumpMap.value=t.bumpMap,e.bumpScale.value=t.bumpScale,t.side===c&&(e.bumpScale.value*=-1));t.normalMap&&(e.normalMap.value=t.normalMap,e.normalScale.value.copy(t.normalScale),t.side===c&&e.normalScale.value.negate());t.displacementMap&&(e.displacementMap.value=t.displacementMap,e.displacementScale.value=t.displacementScale,e.displacementBias.value=t.displacementBias)}(M,n)):n.isMeshStandardMaterial?(Ae(M,n,a),n.isMeshPhysicalMaterial?function(e,t,n){Le(e,t,n),e.reflectivity.value=t.reflectivity,e.clearcoat.value=t.clearcoat,e.clearcoatRoughness.value=t.clearcoatRoughness,t.sheen&&e.sheen.value.copy(t.sheen);t.clearcoatNormalMap&&(e.clearcoatNormalScale.value.copy(t.clearcoatNormalScale),e.clearcoatNormalMap.value=t.clearcoatNormalMap,t.side===c&&e.clearcoatNormalScale.value.negate());e.transparency.value=t.transparency}(M,n,a):Le(M,n,a)):n.isMeshMatcapMaterial?(Ae(M,n),function(e,t){t.matcap&&(e.matcap.value=t.matcap);t.bumpMap&&(e.bumpMap.value=t.bumpMap,e.bumpScale.value=t.bumpScale,t.side===c&&(e.bumpScale.value*=-1));t.normalMap&&(e.normalMap.value=t.normalMap,e.normalScale.value.copy(t.normalScale),t.side===c&&e.normalScale.value.negate());t.displacementMap&&(e.displacementMap.value=t.displacementMap,e.displacementScale.value=t.displacementScale,e.displacementBias.value=t.displacementBias)}(M,n)):n.isMeshDepthMaterial?(Ae(M,n),function(e,t){t.displacementMap&&(e.displacementMap.value=t.displacementMap,e.displacementScale.value=t.displacementScale,e.displacementBias.value=t.displacementBias)}(M,n)):n.isMeshDistanceMaterial?(Ae(M,n),function(e,t){t.displacementMap&&(e.displacementMap.value=t.displacementMap,e.displacementScale.value=t.displacementScale,e.displacementBias.value=t.displacementBias);e.referencePosition.value.copy(t.referencePosition),e.nearDistance.value=t.nearDistance,e.farDistance.value=t.farDistance}(M,n)):n.isMeshNormalMaterial?(Ae(M,n),function(e,t){t.bumpMap&&(e.bumpMap.value=t.bumpMap,e.bumpScale.value=t.bumpScale,t.side===c&&(e.bumpScale.value*=-1));t.normalMap&&(e.normalMap.value=t.normalMap,e.normalScale.value.copy(t.normalScale),t.side===c&&e.normalScale.value.negate());t.displacementMap&&(e.displacementMap.value=t.displacementMap,e.displacementScale.value=t.displacementScale,e.displacementBias.value=t.displacementBias)}(M,n)):n.isLineBasicMaterial?(function(e,t){e.diffuse.value.copy(t.color),e.opacity.value=t.opacity}(M,n),n.isLineDashedMaterial&&function(e,t){e.dashSize.value=t.dashSize,e.totalSize.value=t.dashSize+t.gapSize,e.scale.value=t.scale}(M,n)):n.isPointsMaterial?function(e,t){e.diffuse.value.copy(t.color),e.opacity.value=t.opacity,e.size.value=t.size*Z,e.scale.value=.5*Y,t.map&&(e.map.value=t.map);t.alphaMap&&(e.alphaMap.value=t.alphaMap);var n;t.map?n=t.map:t.alphaMap&&(n=t.alphaMap);void 0!==n&&(!0===n.matrixAutoUpdate&&n.updateMatrix(),e.uvTransform.value.copy(n.matrix))}(M,n):n.isSpriteMaterial?function(e,t){e.diffuse.value.copy(t.color),e.opacity.value=t.opacity,e.rotation.value=t.rotation,t.map&&(e.map.value=t.map);t.alphaMap&&(e.alphaMap.value=t.alphaMap);var n;t.map?n=t.map:t.alphaMap&&(n=t.alphaMap);void 0!==n&&(!0===n.matrixAutoUpdate&&n.updateMatrix(),e.uvTransform.value.copy(n.matrix))}(M,n):n.isShadowMaterial&&(M.color.value.copy(n.color),M.opacity.value=n.opacity),void 0!==M.ltc_1&&(M.ltc_1.value=Ur.LTC_1),void 0!==M.ltc_2&&(M.ltc_2.value=Ur.LTC_2),eo.upload(f,o.uniformsList,M,b),n.isShaderMaterial&&(n.uniformsNeedUpdate=!1)),n.isShaderMaterial&&!0===n.uniformsNeedUpdate&&(eo.upload(f,o.uniformsList,M,b),n.uniformsNeedUpdate=!1),n.isSpriteMaterial&&w.setValue(f,"center",i.center),w.setValue(f,"modelViewMatrix",i.modelViewMatrix),w.setValue(f,"normalMatrix",i.normalMatrix),w.setValue(f,"modelMatrix",i.matrixWorld),_}function Ae(e,t,n){e.opacity.value=t.opacity,t.color&&e.diffuse.value.copy(t.color),t.emissive&&e.emissive.value.copy(t.emissive).multiplyScalar(t.emissiveIntensity),t.map&&(e.map.value=t.map),t.alphaMap&&(e.alphaMap.value=t.alphaMap),t.specularMap&&(e.specularMap.value=t.specularMap);var i,r,a=t.envMap||n;a&&(e.envMap.value=a,e.flipEnvMap.value=a.isCubeTexture?-1:1,e.reflectivity.value=t.reflectivity,e.refractionRatio.value=t.refractionRatio,e.maxMipLevel.value=x.get(a).__maxMipLevel),t.lightMap&&(e.lightMap.value=t.lightMap,e.lightMapIntensity.value=t.lightMapIntensity),t.aoMap&&(e.aoMap.value=t.aoMap,e.aoMapIntensity.value=t.aoMapIntensity),t.map?i=t.map:t.specularMap?i=t.specularMap:t.displacementMap?i=t.displacementMap:t.normalMap?i=t.normalMap:t.bumpMap?i=t.bumpMap:t.roughnessMap?i=t.roughnessMap:t.metalnessMap?i=t.metalnessMap:t.alphaMap?i=t.alphaMap:t.emissiveMap&&(i=t.emissiveMap),void 0!==i&&(i.isWebGLRenderTarget&&(i=i.texture),!0===i.matrixAutoUpdate&&i.updateMatrix(),e.uvTransform.value.copy(i.matrix)),t.aoMap?r=t.aoMap:t.lightMap&&(r=t.lightMap),void 0!==r&&(r.isWebGLRenderTarget&&(r=r.texture),!0===r.matrixAutoUpdate&&r.updateMatrix(),e.uv2Transform.value.copy(r.matrix))}function Le(e,t,n){e.roughness.value=t.roughness,e.metalness.value=t.metalness,t.roughnessMap&&(e.roughnessMap.value=t.roughnessMap),t.metalnessMap&&(e.metalnessMap.value=t.metalnessMap),t.emissiveMap&&(e.emissiveMap.value=t.emissiveMap),t.bumpMap&&(e.bumpMap.value=t.bumpMap,e.bumpScale.value=t.bumpScale,t.side===c&&(e.bumpScale.value*=-1)),t.normalMap&&(e.normalMap.value=t.normalMap,e.normalScale.value.copy(t.normalScale),t.side===c&&e.normalScale.value.negate()),t.displacementMap&&(e.displacementMap.value=t.displacementMap,e.displacementScale.value=t.displacementScale,e.displacementBias.value=t.displacementBias),(t.envMap||n)&&(e.envMapIntensity.value=t.envMapIntensity)}_e.setAnimationLoop(function(e){he.isPresenting||be&&be(e)}),"undefined"!=typeof window&&_e.setContext(window),this.setAnimationLoop=function(e){be=e,he.setAnimationLoop(e),_e.start()},this.render=function(e,t){var n,i;if(void 0!==arguments[2]&&(console.warn("THREE.WebGLRenderer.render(): the renderTarget argument has been removed. Use .setRenderTarget() instead."),n=arguments[2]),void 0!==arguments[3]&&(console.warn("THREE.WebGLRenderer.render(): the forceClear argument has been removed. Use .clear() instead."),i=arguments[3]),t&&t.isCamera){if(!D){G.geometry=null,G.program=null,G.wireframe=!1,U=-1,H=null,!0===e.autoUpdate&&e.updateMatrixWorld(),null===t.parent&&t.updateMatrixWorld(),he.enabled&&he.isPresenting&&(t=he.getCamera(t)),(d=E.get(e,t)).init(),e.onBeforeRender(O,e,t,n||z),ae.multiplyMatrices(t.projectionMatrix,t.matrixWorldInverse),te.setFromProjectionMatrix(ae),re=this.localClippingEnabled,ie=ne.init(this.clippingPlanes,re,t),(p=T.get(e,t)).init(),function e(t,n,i,r){if(!1===t.visible)return;var a=t.layers.test(n.layers);if(a)if(t.isGroup)i=t.renderOrder;else if(t.isLOD)!0===t.autoUpdate&&t.update(n);else if(t.isLight)d.pushLight(t),t.castShadow&&d.pushShadow(t);else if(t.isSprite){if(!t.frustumCulled||te.intersectsSprite(t)){r&&oe.setFromMatrixPosition(t.matrixWorld).applyMatrix4(ae);var o=M.update(t),s=t.material;s.visible&&p.push(t,o,s,i,oe.z,null)}}else if(t.isImmediateRenderObject)r&&oe.setFromMatrixPosition(t.matrixWorld).applyMatrix4(ae),p.push(t,null,t.material,i,oe.z,null);else if((t.isMesh||t.isLine||t.isPoints)&&(t.isSkinnedMesh&&t.skeleton.frame!==y.render.frame&&(t.skeleton.update(),t.skeleton.frame=y.render.frame),!t.frustumCulled||te.intersectsObject(t))){r&&oe.setFromMatrixPosition(t.matrixWorld).applyMatrix4(ae);var o=M.update(t),s=t.material;if(Array.isArray(s))for(var c=o.groups,l=0,h=c.length;l=0&&t<=e.width-i&&n>=0&&n<=e.height-r&&f.readPixels(t,n,i,r,C.convert(h),C.convert(u),a):console.error("THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.")}finally{c&&f.bindFramebuffer(36160,F)}}}else console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.")},this.copyFramebufferToTexture=function(e,t,n){void 0===n&&(n=0);var i=Math.pow(2,-n),r=Math.floor(t.image.width*i),a=Math.floor(t.image.height*i),o=C.convert(t.format);b.setTexture2D(t,0),f.copyTexImage2D(3553,n,o,e.x,e.y,r,a,0),v.unbindTexture()},this.copyTextureToTexture=function(e,t,n,i){var r=t.image.width,a=t.image.height,o=C.convert(n.format),s=C.convert(n.type);b.setTexture2D(n,0),t.isDataTexture?f.texSubImage2D(3553,i||0,e.x,e.y,r,a,o,s,t.image.data):f.texSubImage2D(3553,i||0,e.x,e.y,o,s,t.image),v.unbindTexture()},this.initTexture=function(e){b.setTexture2D(e,0),v.unbindTexture()},"undefined"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}function ko(e,t){this.name="",this.color=new _i(e),this.density=void 0!==t?t:25e-5}function jo(e,t,n){this.name="",this.color=new _i(e),this.near=void 0!==t?t:1,this.far=void 0!==n?n:1e3}function Wo(e,t){this.array=e,this.stride=t,this.count=void 0!==e?e.length/t:0,this.usage=Ut,this.updateRange={offset:0,count:-1},this.version=0}Uo.prototype=Object.assign(Object.create(Pr.prototype),{constructor:Uo,isArrayCamera:!0}),Go.prototype=Object.assign(Object.create(Pn.prototype),{constructor:Go,isGroup:!0}),Object.assign(Ho.prototype,Ht.prototype),Object.assign(ko.prototype,{isFogExp2:!0,clone:function(){return new ko(this.color,this.density)},toJSON:function(){return{type:"FogExp2",color:this.color.getHex(),density:this.density}}}),Object.assign(jo.prototype,{isFog:!0,clone:function(){return new jo(this.color,this.near,this.far)},toJSON:function(){return{type:"Fog",color:this.color.getHex(),near:this.near,far:this.far}}}),Object.defineProperty(Wo.prototype,"needsUpdate",{set:function(e){!0===e&&this.version++}}),Object.assign(Wo.prototype,{isInterleavedBuffer:!0,onUploadCallback:function(){},setUsage:function(e){return this.usage=e,this},copy:function(e){return this.array=new e.array.constructor(e.array),this.count=e.count,this.stride=e.stride,this.usage=e.usage,this},copyAt:function(e,t,n){e*=this.stride,n*=t.stride;for(var i=0,r=this.stride;ie.far||t.push({distance:s,point:Jo.clone(),uv:vi.getUV(Jo,ns,is,rs,as,os,ss,new qt),face:null,object:this})}},clone:function(){return new this.constructor(this.material).copy(this)},copy:function(e){return Pn.prototype.copy.call(this,e),void 0!==e.center&&this.center.copy(e.center),this}});var hs=new rn,us=new rn;function ps(){Pn.call(this),this._currentLevel=0,this.type="LOD",Object.defineProperties(this,{levels:{enumerable:!0,value:[]}}),this.autoUpdate=!0}function ds(e,t){e&&e.isGeometry&&console.error("THREE.SkinnedMesh no longer supports THREE.Geometry. Use THREE.BufferGeometry instead."),dr.call(this,e,t),this.type="SkinnedMesh",this.bindMode="attached",this.bindMatrix=new pn,this.bindMatrixInverse=new pn}ps.prototype=Object.assign(Object.create(Pn.prototype),{constructor:ps,isLOD:!0,copy:function(e){Pn.prototype.copy.call(this,e,!1);for(var t=e.levels,n=0,i=t.length;n0){for(var n=1,i=t.length;n0){hs.setFromMatrixPosition(this.matrixWorld);var n=e.ray.origin.distanceTo(hs);this.getObjectForDistance(n).raycast(e,t)}},update:function(e){var t=this.levels;if(t.length>1){hs.setFromMatrixPosition(e.matrixWorld),us.setFromMatrixPosition(this.matrixWorld);var n=hs.distanceTo(us)/e.zoom;t[0].object.visible=!0;for(var i=1,r=t.length;i=t[i].distance;i++)t[i-1].object.visible=!1,t[i].object.visible=!0;for(this._currentLevel=i-1;i0&&(bs[0].instanceId=r,bs[0].object=this,t.push(bs[0]),bs.length=0)},setMatrixAt:function(e,t){t.toArray(this.instanceMatrix.array,16*e)},updateMorphTargets:function(){}}),Ms.prototype=Object.create(Ai.prototype),Ms.prototype.constructor=Ms,Ms.prototype.isLineBasicMaterial=!0,Ms.prototype.copy=function(e){return Ai.prototype.copy.call(this,e),this.color.copy(e.color),this.linewidth=e.linewidth,this.linecap=e.linecap,this.linejoin=e.linejoin,this};var Ss=new rn,Ts=new rn,Es=new pn,As=new ni,Ls=new Yn;function Rs(e,t,n){1===n&&console.error("THREE.Line: parameter THREE.LinePieces no longer supported. Use THREE.LineSegments instead."),Pn.call(this),this.type="Line",this.geometry=void 0!==e?e:new Zi,this.material=void 0!==t?t:new Ms}Rs.prototype=Object.assign(Object.create(Pn.prototype),{constructor:Rs,isLine:!0,computeLineDistances:function(){var e=this.geometry;if(e.isBufferGeometry)if(null===e.index){for(var t=e.attributes.position,n=[0],i=1,r=t.count;io))h.applyMatrix4(this.matrixWorld),(_=e.ray.origin.distanceTo(h))e.far||t.push({distance:_,point:l.clone().applyMatrix4(this.matrixWorld),index:m,face:null,faceIndex:null,object:this})}else for(m=0,g=d.length/3-1;mo))h.applyMatrix4(this.matrixWorld),(_=e.ray.origin.distanceTo(h))e.far||t.push({distance:_,point:l.clone().applyMatrix4(this.matrixWorld),index:m,face:null,faceIndex:null,object:this})}}else if(n.isGeometry){var x=n.vertices,b=x.length;for(m=0;mo))h.applyMatrix4(this.matrixWorld),(_=e.ray.origin.distanceTo(h))e.far||t.push({distance:_,point:l.clone().applyMatrix4(this.matrixWorld),index:m,face:null,faceIndex:null,object:this})}}}},clone:function(){return new this.constructor(this.geometry,this.material).copy(this)}});var Ps=new rn,Cs=new rn;function Os(e,t){Rs.call(this,e,t),this.type="LineSegments"}function Ds(e,t){Rs.call(this,e,t),this.type="LineLoop"}function Is(e){Ai.call(this),this.type="PointsMaterial",this.color=new _i(16777215),this.map=null,this.alphaMap=null,this.size=1,this.sizeAttenuation=!0,this.morphTargets=!1,this.setValues(e)}Os.prototype=Object.assign(Object.create(Rs.prototype),{constructor:Os,isLineSegments:!0,computeLineDistances:function(){var e=this.geometry;if(e.isBufferGeometry)if(null===e.index){for(var t=e.attributes.position,n=[],i=0,r=t.count;ir.far)return;a.push({distance:l,distanceToRay:Math.sqrt(s),point:c,index:t,face:null,object:o})}}function Hs(e,t,n,i,r,a,o,s,c){Jt.call(this,e,t,n,i,r,a,o,s,c),this.format=void 0!==o?o:Se,this.minFilter=void 0!==a?a:ce,this.magFilter=void 0!==r?r:ce,this.generateMipmaps=!1}function Vs(e,t,n,i,r,a,o,s,c,l,h,u){Jt.call(this,null,a,o,s,c,l,i,r,h,u),this.image={width:t,height:n},this.mipmaps=e,this.flipY=!1,this.generateMipmaps=!1}function ks(e,t,n,i,r,a,o,s,c){Jt.call(this,e,t,n,i,r,a,o,s,c),this.needsUpdate=!0}function js(e,t,n,i,r,a,o,s,c,l){if((l=void 0!==l?l:Re)!==Re&&l!==Pe)throw new Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat");void 0===n&&l===Re&&(n=fe),void 0===n&&l===Pe&&(n=we),Jt.call(this,null,i,r,a,o,s,l,n,c),this.image={width:e,height:t},this.magFilter=void 0!==o?o:ae,this.minFilter=void 0!==s?s:ae,this.flipY=!1,this.generateMipmaps=!1}function Ws(e){Zi.call(this),this.type="WireframeGeometry";var t,n,i,r,a,o,s,c,l,h,u=[],p=[0,0],d={},f=["a","b","c"];if(e&&e.isGeometry){var m=e.faces;for(t=0,i=m.length;t=0?(e(g-1e-5,m,u),p.subVectors(h,u)):(e(g+1e-5,m,u),p.subVectors(u,h)),m-1e-5>=0?(e(g,m-1e-5,u),d.subVectors(h,u)):(e(g,m+1e-5,u),d.subVectors(u,h)),l.crossVectors(p,d).normalize(),s.push(l.x,l.y,l.z),c.push(g,m)}}for(i=0;i.9&&o<.1&&(t<.2&&(a[e+0]+=1),n<.2&&(a[e+2]+=1),i<.2&&(a[e+4]+=1))}}()}(),this.setAttribute("position",new Fi(r,3)),this.setAttribute("normal",new Fi(r.slice(),3)),this.setAttribute("uv",new Fi(a,2)),0===i?this.computeVertexNormals():this.normalizeNormals()}function Js(e,t){br.call(this),this.type="TetrahedronGeometry",this.parameters={radius:e,detail:t},this.fromBufferGeometry(new Qs(e,t)),this.mergeVertices()}function Qs(e,t){Zs.call(this,[1,1,1,-1,-1,1,-1,1,-1,1,-1,-1],[2,1,0,0,3,2,1,3,0,2,3,1],e,t),this.type="TetrahedronBufferGeometry",this.parameters={radius:e,detail:t}}function Ks(e,t){br.call(this),this.type="OctahedronGeometry",this.parameters={radius:e,detail:t},this.fromBufferGeometry(new $s(e,t)),this.mergeVertices()}function $s(e,t){Zs.call(this,[1,0,0,-1,0,0,0,1,0,0,-1,0,0,0,1,0,0,-1],[0,2,4,0,4,3,0,3,5,0,5,2,1,2,5,1,5,3,1,3,4,1,4,2],e,t),this.type="OctahedronBufferGeometry",this.parameters={radius:e,detail:t}}function ec(e,t){br.call(this),this.type="IcosahedronGeometry",this.parameters={radius:e,detail:t},this.fromBufferGeometry(new tc(e,t)),this.mergeVertices()}function tc(e,t){var n=(1+Math.sqrt(5))/2,i=[-1,n,0,1,n,0,-1,-n,0,1,-n,0,0,-1,n,0,1,n,0,-1,-n,0,1,-n,n,0,-1,n,0,1,-n,0,-1,-n,0,1];Zs.call(this,i,[0,11,5,0,5,1,0,1,7,0,7,10,0,10,11,1,5,9,5,11,4,11,10,2,10,7,6,7,1,8,3,9,4,3,4,2,3,2,6,3,6,8,3,8,9,4,9,5,2,4,11,6,2,10,8,6,7,9,8,1],e,t),this.type="IcosahedronBufferGeometry",this.parameters={radius:e,detail:t}}function nc(e,t){br.call(this),this.type="DodecahedronGeometry",this.parameters={radius:e,detail:t},this.fromBufferGeometry(new ic(e,t)),this.mergeVertices()}function ic(e,t){var n=(1+Math.sqrt(5))/2,i=1/n,r=[-1,-1,-1,-1,-1,1,-1,1,-1,-1,1,1,1,-1,-1,1,-1,1,1,1,-1,1,1,1,0,-i,-n,0,-i,n,0,i,-n,0,i,n,-i,-n,0,-i,n,0,i,-n,0,i,n,0,-n,0,-i,n,0,-i,-n,0,i,n,0,i];Zs.call(this,r,[3,11,7,3,7,15,3,15,13,7,19,17,7,17,6,7,6,15,17,4,8,17,8,10,17,10,6,8,0,16,8,16,2,8,2,10,0,12,1,0,1,18,0,18,16,6,10,2,6,2,13,6,13,15,2,16,18,2,18,3,2,3,13,18,1,9,18,9,11,18,11,3,4,14,12,4,12,0,4,0,8,11,9,5,11,5,19,11,19,7,19,5,14,19,14,4,19,4,17,1,12,14,1,14,5,1,5,9],e,t),this.type="DodecahedronBufferGeometry",this.parameters={radius:e,detail:t}}function rc(e,t,n,i,r,a){br.call(this),this.type="TubeGeometry",this.parameters={path:e,tubularSegments:t,radius:n,radialSegments:i,closed:r},void 0!==a&&console.warn("THREE.TubeGeometry: taper has been removed.");var o=new ac(e,t,n,i,r);this.tangents=o.tangents,this.normals=o.normals,this.binormals=o.binormals,this.fromBufferGeometry(o),this.mergeVertices()}function ac(e,t,n,i,r){Zi.call(this),this.type="TubeBufferGeometry",this.parameters={path:e,tubularSegments:t,radius:n,radialSegments:i,closed:r},t=t||64,n=n||1,i=i||8,r=r||!1;var a=e.computeFrenetFrames(t,r);this.tangents=a.tangents,this.normals=a.normals,this.binormals=a.binormals;var o,s,c=new rn,l=new rn,h=new qt,u=new rn,p=[],d=[],f=[],m=[];function g(r){u=e.getPointAt(r/t,u);var o=a.normals[r],h=a.binormals[r];for(s=0;s<=i;s++){var f=s/i*Math.PI*2,m=Math.sin(f),g=-Math.cos(f);l.x=g*o.x+m*h.x,l.y=g*o.y+m*h.y,l.z=g*o.z+m*h.z,l.normalize(),d.push(l.x,l.y,l.z),c.x=u.x+n*l.x,c.y=u.y+n*l.y,c.z=u.z+n*l.z,p.push(c.x,c.y,c.z)}}!function(){for(o=0;o0){var o=r[a[0]];if(void 0!==o)for(this.morphTargetInfluences=[],this.morphTargetDictionary={},e=0,t=o.length;e0&&console.error("THREE.Points.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.")}},clone:function(){return new this.constructor(this.geometry,this.material).copy(this)}}),Hs.prototype=Object.assign(Object.create(Jt.prototype),{constructor:Hs,isVideoTexture:!0,update:function(){var e=this.image;e.readyState>=e.HAVE_CURRENT_DATA&&(this.needsUpdate=!0)}}),Vs.prototype=Object.create(Jt.prototype),Vs.prototype.constructor=Vs,Vs.prototype.isCompressedTexture=!0,ks.prototype=Object.create(Jt.prototype),ks.prototype.constructor=ks,ks.prototype.isCanvasTexture=!0,js.prototype=Object.create(Jt.prototype),js.prototype.constructor=js,js.prototype.isDepthTexture=!0,Ws.prototype=Object.create(Zi.prototype),Ws.prototype.constructor=Ws,qs.prototype=Object.create(br.prototype),qs.prototype.constructor=qs,Xs.prototype=Object.create(Zi.prototype),Xs.prototype.constructor=Xs,Ys.prototype=Object.create(br.prototype),Ys.prototype.constructor=Ys,Zs.prototype=Object.create(Zi.prototype),Zs.prototype.constructor=Zs,Js.prototype=Object.create(br.prototype),Js.prototype.constructor=Js,Qs.prototype=Object.create(Zs.prototype),Qs.prototype.constructor=Qs,Ks.prototype=Object.create(br.prototype),Ks.prototype.constructor=Ks,$s.prototype=Object.create(Zs.prototype),$s.prototype.constructor=$s,ec.prototype=Object.create(br.prototype),ec.prototype.constructor=ec,tc.prototype=Object.create(Zs.prototype),tc.prototype.constructor=tc,nc.prototype=Object.create(br.prototype),nc.prototype.constructor=nc,ic.prototype=Object.create(Zs.prototype),ic.prototype.constructor=ic,rc.prototype=Object.create(br.prototype),rc.prototype.constructor=rc,ac.prototype=Object.create(Zi.prototype),ac.prototype.constructor=ac,ac.prototype.toJSON=function(){var e=Zi.prototype.toJSON.call(this);return e.path=this.parameters.path.toJSON(),e},oc.prototype=Object.create(br.prototype),oc.prototype.constructor=oc,sc.prototype=Object.create(Zi.prototype),sc.prototype.constructor=sc,cc.prototype=Object.create(br.prototype),cc.prototype.constructor=cc,lc.prototype=Object.create(Zi.prototype),lc.prototype.constructor=lc;var hc=function(e,t,n){n=n||2;var i,r,a,o,s,c,l,h=t&&t.length,u=h?t[0]*n:e.length,p=uc(e,0,u,n,!0),d=[];if(!p||p.next===p.prev)return d;if(h&&(p=function(e,t,n,i){var r,a,o,s,c,l=[];for(r=0,a=t.length;r80*n){i=a=e[0],r=o=e[1];for(var f=n;fa&&(a=s),c>o&&(o=c);l=0!==(l=Math.max(a-i,o-r))?1/l:0}return dc(p,d,n,i,r,l),d};function uc(e,t,n,i,r){var a,o;if(r===function(e,t,n,i){for(var r=0,a=t,o=n-i;a0)for(a=t;a=t;a-=i)o=Rc(a,e[a],e[a+1],o);return o&&Tc(o,o.next)&&(Pc(o),o=o.next),o}function pc(e,t){if(!e)return e;t||(t=e);var n,i=e;do{if(n=!1,i.steiner||!Tc(i,i.next)&&0!==Sc(i.prev,i,i.next))i=i.next;else{if(Pc(i),(i=t=i.prev)===i.next)break;n=!0}}while(n||i!==t);return t}function dc(e,t,n,i,r,a,o){if(e){!o&&a&&function(e,t,n,i){var r=e;do{null===r.z&&(r.z=bc(r.x,r.y,t,n,i)),r.prevZ=r.prev,r.nextZ=r.next,r=r.next}while(r!==e);r.prevZ.nextZ=null,r.prevZ=null,function(e){var t,n,i,r,a,o,s,c,l=1;do{for(n=e,e=null,a=null,o=0;n;){for(o++,i=n,s=0,t=0;t0||c>0&&i;)0!==s&&(0===c||!i||n.z<=i.z)?(r=n,n=n.nextZ,s--):(r=i,i=i.nextZ,c--),a?a.nextZ=r:e=r,r.prevZ=a,a=r;n=i}a.nextZ=null,l*=2}while(o>1)}(r)}(e,i,r,a);for(var s,c,l=e;e.prev!==e.next;)if(s=e.prev,c=e.next,a?mc(e,i,r,a):fc(e))t.push(s.i/n),t.push(e.i/n),t.push(c.i/n),Pc(e),e=c.next,l=c.next;else if((e=c)===l){o?1===o?dc(e=gc(e,t,n),t,n,i,r,a,2):2===o&&vc(e,t,n,i,r,a):dc(pc(e),t,n,i,r,a,1);break}}}function fc(e){var t=e.prev,n=e,i=e.next;if(Sc(t,n,i)>=0)return!1;for(var r=e.next.next;r!==e.prev;){if(wc(t.x,t.y,n.x,n.y,i.x,i.y,r.x,r.y)&&Sc(r.prev,r,r.next)>=0)return!1;r=r.next}return!0}function mc(e,t,n,i){var r=e.prev,a=e,o=e.next;if(Sc(r,a,o)>=0)return!1;for(var s=r.xa.x?r.x>o.x?r.x:o.x:a.x>o.x?a.x:o.x,h=r.y>a.y?r.y>o.y?r.y:o.y:a.y>o.y?a.y:o.y,u=bc(s,c,t,n,i),p=bc(l,h,t,n,i),d=e.prevZ,f=e.nextZ;d&&d.z>=u&&f&&f.z<=p;){if(d!==e.prev&&d!==e.next&&wc(r.x,r.y,a.x,a.y,o.x,o.y,d.x,d.y)&&Sc(d.prev,d,d.next)>=0)return!1;if(d=d.prevZ,f!==e.prev&&f!==e.next&&wc(r.x,r.y,a.x,a.y,o.x,o.y,f.x,f.y)&&Sc(f.prev,f,f.next)>=0)return!1;f=f.nextZ}for(;d&&d.z>=u;){if(d!==e.prev&&d!==e.next&&wc(r.x,r.y,a.x,a.y,o.x,o.y,d.x,d.y)&&Sc(d.prev,d,d.next)>=0)return!1;d=d.prevZ}for(;f&&f.z<=p;){if(f!==e.prev&&f!==e.next&&wc(r.x,r.y,a.x,a.y,o.x,o.y,f.x,f.y)&&Sc(f.prev,f,f.next)>=0)return!1;f=f.nextZ}return!0}function gc(e,t,n){var i=e;do{var r=i.prev,a=i.next.next;!Tc(r,a)&&Ec(r,i,i.next,a)&&Ac(r,a)&&Ac(a,r)&&(t.push(r.i/n),t.push(i.i/n),t.push(a.i/n),Pc(i),Pc(i.next),i=e=a),i=i.next}while(i!==e);return i}function vc(e,t,n,i,r,a){var o=e;do{for(var s=o.next.next;s!==o.prev;){if(o.i!==s.i&&Mc(o,s)){var c=Lc(o,s);return o=pc(o,o.next),c=pc(c,c.next),dc(o,t,n,i,r,a),void dc(c,t,n,i,r,a)}s=s.next}o=o.next}while(o!==e)}function yc(e,t){return e.x-t.x}function xc(e,t){if(t=function(e,t){var n,i=t,r=e.x,a=e.y,o=-1/0;do{if(a<=i.y&&a>=i.next.y&&i.next.y!==i.y){var s=i.x+(a-i.y)*(i.next.x-i.x)/(i.next.y-i.y);if(s<=r&&s>o){if(o=s,s===r){if(a===i.y)return i;if(a===i.next.y)return i.next}n=i.x=i.x&&i.x>=h&&r!==i.x&&wc(an.x)&&Ac(i,e)&&(n=i,p=c),i=i.next;return n}(e,t)){var n=Lc(t,e);pc(n,n.next)}}function bc(e,t,n,i,r){return(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=32767*(e-n)*r)|e<<8))|e<<4))|e<<2))|e<<1))|(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=32767*(t-i)*r)|t<<8))|t<<4))|t<<2))|t<<1))<<1}function _c(e){var t=e,n=e;do{(t.x=0&&(e-o)*(i-s)-(n-o)*(t-s)>=0&&(n-o)*(a-s)-(r-o)*(i-s)>=0}function Mc(e,t){return e.next.i!==t.i&&e.prev.i!==t.i&&!function(e,t){var n=e;do{if(n.i!==e.i&&n.next.i!==e.i&&n.i!==t.i&&n.next.i!==t.i&&Ec(n,n.next,e,t))return!0;n=n.next}while(n!==e);return!1}(e,t)&&Ac(e,t)&&Ac(t,e)&&function(e,t){var n=e,i=!1,r=(e.x+t.x)/2,a=(e.y+t.y)/2;do{n.y>a!=n.next.y>a&&n.next.y!==n.y&&r<(n.next.x-n.x)*(a-n.y)/(n.next.y-n.y)+n.x&&(i=!i),n=n.next}while(n!==e);return i}(e,t)}function Sc(e,t,n){return(t.y-e.y)*(n.x-t.x)-(t.x-e.x)*(n.y-t.y)}function Tc(e,t){return e.x===t.x&&e.y===t.y}function Ec(e,t,n,i){return!!(Tc(e,n)&&Tc(t,i)||Tc(e,i)&&Tc(n,t))||Sc(e,t,n)>0!=Sc(e,t,i)>0&&Sc(n,i,e)>0!=Sc(n,i,t)>0}function Ac(e,t){return Sc(e.prev,e,e.next)<0?Sc(e,t,e.next)>=0&&Sc(e,e.prev,t)>=0:Sc(e,t,e.prev)<0||Sc(e,e.next,t)<0}function Lc(e,t){var n=new Cc(e.i,e.x,e.y),i=new Cc(t.i,t.x,t.y),r=e.next,a=t.prev;return e.next=t,t.prev=e,n.next=r,r.prev=n,i.next=n,n.prev=i,a.next=i,i.prev=a,i}function Rc(e,t,n,i){var r=new Cc(e,t,n);return i?(r.next=i.next,r.prev=i,i.next.prev=r,i.next=r):(r.prev=r,r.next=r),r}function Pc(e){e.next.prev=e.prev,e.prev.next=e.next,e.prevZ&&(e.prevZ.nextZ=e.nextZ),e.nextZ&&(e.nextZ.prevZ=e.prevZ)}function Cc(e,t,n){this.i=e,this.x=t,this.y=n,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}var Oc={area:function(e){for(var t=e.length,n=0,i=t-1,r=0;r2&&e[t-1].equals(e[0])&&e.pop()}function Ic(e,t){for(var n=0;nNumber.EPSILON){var p=Math.sqrt(h),d=Math.sqrt(c*c+l*l),f=t.x-s/p,m=t.y+o/p,g=((n.x-l/d-f)*l-(n.y+c/d-m)*c)/(o*l-s*c),v=(i=f+o*g-e.x)*i+(r=m+s*g-e.y)*r;if(v<=2)return new qt(i,r);a=Math.sqrt(v/2)}else{var y=!1;o>Number.EPSILON?c>Number.EPSILON&&(y=!0):o<-Number.EPSILON?c<-Number.EPSILON&&(y=!0):Math.sign(s)===Math.sign(l)&&(y=!0),y?(i=-s,r=o,a=Math.sqrt(h)):(i=o,r=s,a=Math.sqrt(h/2))}return new qt(i/a,r/a)}for(var G=[],H=0,V=R.length,k=V-1,j=H+1;H=0;C--){for(D=C/d,I=h*Math.cos(D*Math.PI/2),O=u*Math.sin(D*Math.PI/2)+p,H=0,V=R.length;H=0;){n=H,(i=H-1)<0&&(i=e.length-1);var r=0,a=s+2*d;for(r=0;r0)&&f.push(w,M,T),(c!==n-1||l0&&v(!0),t>0&&v(!1)),this.setIndex(l),this.setAttribute("position",new Fi(h,3)),this.setAttribute("normal",new Fi(u,3)),this.setAttribute("uv",new Fi(p,2))}function $c(e,t,n,i,r,a,o){Qc.call(this,0,e,t,n,i,r,a,o),this.type="ConeGeometry",this.parameters={radius:e,height:t,radialSegments:n,heightSegments:i,openEnded:r,thetaStart:a,thetaLength:o}}function el(e,t,n,i,r,a,o){Kc.call(this,0,e,t,n,i,r,a,o),this.type="ConeBufferGeometry",this.parameters={radius:e,height:t,radialSegments:n,heightSegments:i,openEnded:r,thetaStart:a,thetaLength:o}}function tl(e,t,n,i){br.call(this),this.type="CircleGeometry",this.parameters={radius:e,segments:t,thetaStart:n,thetaLength:i},this.fromBufferGeometry(new nl(e,t,n,i)),this.mergeVertices()}function nl(e,t,n,i){Zi.call(this),this.type="CircleBufferGeometry",this.parameters={radius:e,segments:t,thetaStart:n,thetaLength:i},e=e||1,t=void 0!==t?Math.max(3,t):8,n=void 0!==n?n:0,i=void 0!==i?i:2*Math.PI;var r,a,o=[],s=[],c=[],l=[],h=new rn,u=new qt;for(s.push(0,0,0),c.push(0,0,1),l.push(.5,.5),a=0,r=3;a<=t;a++,r+=3){var p=n+a/t*i;h.x=e*Math.cos(p),h.y=e*Math.sin(p),s.push(h.x,h.y,h.z),c.push(0,0,1),u.x=(s[r]/e+1)/2,u.y=(s[r+1]/e+1)/2,l.push(u.x,u.y)}for(r=1;r<=t;r++)o.push(r,r+1,0);this.setIndex(o),this.setAttribute("position",new Fi(s,3)),this.setAttribute("normal",new Fi(c,3)),this.setAttribute("uv",new Fi(l,2))}Uc.prototype=Object.create(br.prototype),Uc.prototype.constructor=Uc,Gc.prototype=Object.create(Bc.prototype),Gc.prototype.constructor=Gc,Hc.prototype=Object.create(br.prototype),Hc.prototype.constructor=Hc,Vc.prototype=Object.create(Zi.prototype),Vc.prototype.constructor=Vc,kc.prototype=Object.create(br.prototype),kc.prototype.constructor=kc,jc.prototype=Object.create(Zi.prototype),jc.prototype.constructor=jc,Wc.prototype=Object.create(br.prototype),Wc.prototype.constructor=Wc,qc.prototype=Object.create(Zi.prototype),qc.prototype.constructor=qc,Xc.prototype=Object.create(br.prototype),Xc.prototype.constructor=Xc,Xc.prototype.toJSON=function(){var e=br.prototype.toJSON.call(this);return Zc(this.parameters.shapes,e)},Yc.prototype=Object.create(Zi.prototype),Yc.prototype.constructor=Yc,Yc.prototype.toJSON=function(){var e=Zi.prototype.toJSON.call(this);return Zc(this.parameters.shapes,e)},Jc.prototype=Object.create(Zi.prototype),Jc.prototype.constructor=Jc,Qc.prototype=Object.create(br.prototype),Qc.prototype.constructor=Qc,Kc.prototype=Object.create(Zi.prototype),Kc.prototype.constructor=Kc,$c.prototype=Object.create(Qc.prototype),$c.prototype.constructor=$c,el.prototype=Object.create(Kc.prototype),el.prototype.constructor=el,tl.prototype=Object.create(br.prototype),tl.prototype.constructor=tl,nl.prototype=Object.create(Zi.prototype),nl.prototype.constructor=nl;var il=Object.freeze({__proto__:null,WireframeGeometry:Ws,ParametricGeometry:qs,ParametricBufferGeometry:Xs,TetrahedronGeometry:Js,TetrahedronBufferGeometry:Qs,OctahedronGeometry:Ks,OctahedronBufferGeometry:$s,IcosahedronGeometry:ec,IcosahedronBufferGeometry:tc,DodecahedronGeometry:nc,DodecahedronBufferGeometry:ic,PolyhedronGeometry:Ys,PolyhedronBufferGeometry:Zs,TubeGeometry:rc,TubeBufferGeometry:ac,TorusKnotGeometry:oc,TorusKnotBufferGeometry:sc,TorusGeometry:cc,TorusBufferGeometry:lc,TextGeometry:Uc,TextBufferGeometry:Gc,SphereGeometry:Hc,SphereBufferGeometry:Vc,RingGeometry:kc,RingBufferGeometry:jc,PlaneGeometry:Vr,PlaneBufferGeometry:kr,LatheGeometry:Wc,LatheBufferGeometry:qc,ShapeGeometry:Xc,ShapeBufferGeometry:Yc,ExtrudeGeometry:Nc,ExtrudeBufferGeometry:Bc,EdgesGeometry:Jc,ConeGeometry:$c,ConeBufferGeometry:el,CylinderGeometry:Qc,CylinderBufferGeometry:Kc,CircleGeometry:tl,CircleBufferGeometry:nl,BoxGeometry:_r,BoxBufferGeometry:wr});function rl(e){Ai.call(this),this.type="ShadowMaterial",this.color=new _i(0),this.transparent=!0,this.setValues(e)}function al(e){Lr.call(this,e),this.type="RawShaderMaterial"}function ol(e){Ai.call(this),this.defines={STANDARD:""},this.type="MeshStandardMaterial",this.color=new _i(16777215),this.roughness=1,this.metalness=0,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new _i(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=Nt,this.normalScale=new qt(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.roughnessMap=null,this.metalnessMap=null,this.alphaMap=null,this.envMap=null,this.envMapIntensity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.skinning=!1,this.morphTargets=!1,this.morphNormals=!1,this.vertexTangents=!1,this.setValues(e)}function sl(e){ol.call(this),this.defines={STANDARD:"",PHYSICAL:""},this.type="MeshPhysicalMaterial",this.reflectivity=.5,this.clearcoat=0,this.clearcoatRoughness=0,this.sheen=null,this.clearcoatNormalScale=new qt(1,1),this.clearcoatNormalMap=null,this.transparency=0,this.setValues(e)}function cl(e){Ai.call(this),this.type="MeshPhongMaterial",this.color=new _i(16777215),this.specular=new _i(1118481),this.shininess=30,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new _i(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=Nt,this.normalScale=new qt(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.combine=G,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.skinning=!1,this.morphTargets=!1,this.morphNormals=!1,this.setValues(e)}function ll(e){Ai.call(this),this.defines={TOON:""},this.type="MeshToonMaterial",this.color=new _i(16777215),this.specular=new _i(1118481),this.shininess=30,this.map=null,this.gradientMap=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new _i(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=Nt,this.normalScale=new qt(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.specularMap=null,this.alphaMap=null,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.skinning=!1,this.morphTargets=!1,this.morphNormals=!1,this.setValues(e)}function hl(e){Ai.call(this),this.type="MeshNormalMaterial",this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=Nt,this.normalScale=new qt(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.skinning=!1,this.morphTargets=!1,this.morphNormals=!1,this.setValues(e)}function ul(e){Ai.call(this),this.type="MeshLambertMaterial",this.color=new _i(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new _i(0),this.emissiveIntensity=1,this.emissiveMap=null,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.combine=G,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.skinning=!1,this.morphTargets=!1,this.morphNormals=!1,this.setValues(e)}function pl(e){Ai.call(this),this.defines={MATCAP:""},this.type="MeshMatcapMaterial",this.color=new _i(16777215),this.matcap=null,this.map=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=Nt,this.normalScale=new qt(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.alphaMap=null,this.skinning=!1,this.morphTargets=!1,this.morphNormals=!1,this.setValues(e)}function dl(e){Ms.call(this),this.type="LineDashedMaterial",this.scale=1,this.dashSize=3,this.gapSize=1,this.setValues(e)}rl.prototype=Object.create(Ai.prototype),rl.prototype.constructor=rl,rl.prototype.isShadowMaterial=!0,rl.prototype.copy=function(e){return Ai.prototype.copy.call(this,e),this.color.copy(e.color),this},al.prototype=Object.create(Lr.prototype),al.prototype.constructor=al,al.prototype.isRawShaderMaterial=!0,ol.prototype=Object.create(Ai.prototype),ol.prototype.constructor=ol,ol.prototype.isMeshStandardMaterial=!0,ol.prototype.copy=function(e){return Ai.prototype.copy.call(this,e),this.defines={STANDARD:""},this.color.copy(e.color),this.roughness=e.roughness,this.metalness=e.metalness,this.map=e.map,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.emissive.copy(e.emissive),this.emissiveMap=e.emissiveMap,this.emissiveIntensity=e.emissiveIntensity,this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.roughnessMap=e.roughnessMap,this.metalnessMap=e.metalnessMap,this.alphaMap=e.alphaMap,this.envMap=e.envMap,this.envMapIntensity=e.envMapIntensity,this.refractionRatio=e.refractionRatio,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.skinning=e.skinning,this.morphTargets=e.morphTargets,this.morphNormals=e.morphNormals,this.vertexTangents=e.vertexTangents,this},sl.prototype=Object.create(ol.prototype),sl.prototype.constructor=sl,sl.prototype.isMeshPhysicalMaterial=!0,sl.prototype.copy=function(e){return ol.prototype.copy.call(this,e),this.defines={STANDARD:"",PHYSICAL:""},this.reflectivity=e.reflectivity,this.clearcoat=e.clearcoat,this.clearcoatRoughness=e.clearcoatRoughness,e.sheen?this.sheen=(this.sheen||new _i).copy(e.sheen):this.sheen=null,this.clearcoatNormalMap=e.clearcoatNormalMap,this.clearcoatNormalScale.copy(e.clearcoatNormalScale),this.transparency=e.transparency,this},cl.prototype=Object.create(Ai.prototype),cl.prototype.constructor=cl,cl.prototype.isMeshPhongMaterial=!0,cl.prototype.copy=function(e){return Ai.prototype.copy.call(this,e),this.color.copy(e.color),this.specular.copy(e.specular),this.shininess=e.shininess,this.map=e.map,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.emissive.copy(e.emissive),this.emissiveMap=e.emissiveMap,this.emissiveIntensity=e.emissiveIntensity,this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.specularMap=e.specularMap,this.alphaMap=e.alphaMap,this.envMap=e.envMap,this.combine=e.combine,this.reflectivity=e.reflectivity,this.refractionRatio=e.refractionRatio,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.skinning=e.skinning,this.morphTargets=e.morphTargets,this.morphNormals=e.morphNormals,this},ll.prototype=Object.create(Ai.prototype),ll.prototype.constructor=ll,ll.prototype.isMeshToonMaterial=!0,ll.prototype.copy=function(e){return Ai.prototype.copy.call(this,e),this.color.copy(e.color),this.specular.copy(e.specular),this.shininess=e.shininess,this.map=e.map,this.gradientMap=e.gradientMap,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.emissive.copy(e.emissive),this.emissiveMap=e.emissiveMap,this.emissiveIntensity=e.emissiveIntensity,this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.specularMap=e.specularMap,this.alphaMap=e.alphaMap,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.skinning=e.skinning,this.morphTargets=e.morphTargets,this.morphNormals=e.morphNormals,this},hl.prototype=Object.create(Ai.prototype),hl.prototype.constructor=hl,hl.prototype.isMeshNormalMaterial=!0,hl.prototype.copy=function(e){return Ai.prototype.copy.call(this,e),this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.skinning=e.skinning,this.morphTargets=e.morphTargets,this.morphNormals=e.morphNormals,this},ul.prototype=Object.create(Ai.prototype),ul.prototype.constructor=ul,ul.prototype.isMeshLambertMaterial=!0,ul.prototype.copy=function(e){return Ai.prototype.copy.call(this,e),this.color.copy(e.color),this.map=e.map,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.emissive.copy(e.emissive),this.emissiveMap=e.emissiveMap,this.emissiveIntensity=e.emissiveIntensity,this.specularMap=e.specularMap,this.alphaMap=e.alphaMap,this.envMap=e.envMap,this.combine=e.combine,this.reflectivity=e.reflectivity,this.refractionRatio=e.refractionRatio,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.skinning=e.skinning,this.morphTargets=e.morphTargets,this.morphNormals=e.morphNormals,this},pl.prototype=Object.create(Ai.prototype),pl.prototype.constructor=pl,pl.prototype.isMeshMatcapMaterial=!0,pl.prototype.copy=function(e){return Ai.prototype.copy.call(this,e),this.defines={MATCAP:""},this.color.copy(e.color),this.matcap=e.matcap,this.map=e.map,this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.alphaMap=e.alphaMap,this.skinning=e.skinning,this.morphTargets=e.morphTargets,this.morphNormals=e.morphNormals,this},dl.prototype=Object.create(Ms.prototype),dl.prototype.constructor=dl,dl.prototype.isLineDashedMaterial=!0,dl.prototype.copy=function(e){return Ms.prototype.copy.call(this,e),this.scale=e.scale,this.dashSize=e.dashSize,this.gapSize=e.gapSize,this};var fl=Object.freeze({__proto__:null,ShadowMaterial:rl,SpriteMaterial:Zo,RawShaderMaterial:al,ShaderMaterial:Lr,PointsMaterial:Is,MeshPhysicalMaterial:sl,MeshStandardMaterial:ol,MeshPhongMaterial:cl,MeshToonMaterial:ll,MeshNormalMaterial:hl,MeshLambertMaterial:ul,MeshDepthMaterial:Co,MeshDistanceMaterial:Oo,MeshBasicMaterial:Li,MeshMatcapMaterial:pl,LineDashedMaterial:dl,LineBasicMaterial:Ms,Material:Ai}),ml={arraySlice:function(e,t,n){return ml.isTypedArray(e)?new e.constructor(e.subarray(t,void 0!==n?n:e.length)):e.slice(t,n)},convertArray:function(e,t,n){return!e||!n&&e.constructor===t?e:"number"==typeof t.BYTES_PER_ELEMENT?new t(e):Array.prototype.slice.call(e)},isTypedArray:function(e){return ArrayBuffer.isView(e)&&!(e instanceof DataView)},getKeyframeOrder:function(e){for(var t=e.length,n=new Array(t),i=0;i!==t;++i)n[i]=i;return n.sort(function(t,n){return e[t]-e[n]}),n},sortedArray:function(e,t,n){for(var i=e.length,r=new e.constructor(i),a=0,o=0;o!==i;++a)for(var s=n[a]*t,c=0;c!==t;++c)r[o++]=e[s+c];return r},flattenJSON:function(e,t,n,i){for(var r=1,a=e[0];void 0!==a&&void 0===a[i];)a=e[r++];if(void 0!==a){var o=a[i];if(void 0!==o)if(Array.isArray(o))do{void 0!==(o=a[i])&&(t.push(a.time),n.push.apply(n,o)),a=e[r++]}while(void 0!==a);else if(void 0!==o.toArray)do{void 0!==(o=a[i])&&(t.push(a.time),o.toArray(n,n.length)),a=e[r++]}while(void 0!==a);else do{void 0!==(o=a[i])&&(t.push(a.time),n.push(o)),a=e[r++]}while(void 0!==a)}},subclip:function(e,t,n,i,r){r=r||30;var a=e.clone();a.name=t;for(var o=[],s=0;s=i)){h.push(c.times[p]);for(var f=0;fa.tracks[s].times[0]&&(m=a.tracks[s].times[0]);for(s=0;s=r)break e;var s=t[1];e=(r=t[--n-1]))break t}a=n,n=0}for(;n>>1;et;)--a;if(++a,0!==r||a!==i){r>=a&&(r=(a=Math.max(a,1))-1);var o=this.getValueSize();this.times=ml.arraySlice(n,r,a),this.values=ml.arraySlice(this.values,r*o,a*o)}return this},validate:function(){var e=!0,t=this.getValueSize();t-Math.floor(t)!=0&&(console.error("THREE.KeyframeTrack: Invalid value size in track.",this),e=!1);var n=this.times,i=this.values,r=n.length;0===r&&(console.error("THREE.KeyframeTrack: Track is empty.",this),e=!1);for(var a=null,o=0;o!==r;o++){var s=n[o];if("number"==typeof s&&isNaN(s)){console.error("THREE.KeyframeTrack: Time is not a valid number.",this,o,s),e=!1;break}if(null!==a&&a>s){console.error("THREE.KeyframeTrack: Out of order keys.",this,o,s,a),e=!1;break}a=s}if(void 0!==i&&ml.isTypedArray(i)){o=0;for(var c=i.length;o!==c;++o){var l=i[o];if(isNaN(l)){console.error("THREE.KeyframeTrack: Value is not a valid number.",this,o,l),e=!1;break}}}return e},optimize:function(){for(var e=ml.arraySlice(this.times),t=ml.arraySlice(this.values),n=this.getValueSize(),i=2302===this.getInterpolation(),r=1,a=e.length-1,o=1;o0){e[r]=e[a];for(f=a*n,m=r*n,p=0;p!==n;++p)t[m+p]=t[f+p];++r}return r!==e.length?(this.times=ml.arraySlice(e,0,r),this.values=ml.arraySlice(t,0,r*n)):(this.times=e,this.values=t),this},clone:function(){var e=ml.arraySlice(this.times,0),t=ml.arraySlice(this.values,0),n=new(0,this.constructor)(this.name,e,t);return n.createInterpolant=this.createInterpolant,n}}),_l.prototype=Object.assign(Object.create(bl.prototype),{constructor:_l,ValueTypeName:"bool",ValueBufferType:Array,DefaultInterpolation:2300,InterpolantFactoryMethodLinear:void 0,InterpolantFactoryMethodSmooth:void 0}),wl.prototype=Object.assign(Object.create(bl.prototype),{constructor:wl,ValueTypeName:"color"}),Ml.prototype=Object.assign(Object.create(bl.prototype),{constructor:Ml,ValueTypeName:"number"}),Sl.prototype=Object.assign(Object.create(gl.prototype),{constructor:Sl,interpolate_:function(e,t,n,i){for(var r=this.resultBuffer,a=this.sampleValues,o=this.valueSize,s=e*o,c=(n-t)/(i-t),l=s+o;s!==l;s+=4)en.slerpFlat(r,0,a,s-o,a,s,c);return r}}),Tl.prototype=Object.assign(Object.create(bl.prototype),{constructor:Tl,ValueTypeName:"quaternion",DefaultInterpolation:2301,InterpolantFactoryMethodLinear:function(e){return new Sl(this.times,this.values,this.getValueSize(),e)},InterpolantFactoryMethodSmooth:void 0}),El.prototype=Object.assign(Object.create(bl.prototype),{constructor:El,ValueTypeName:"string",ValueBufferType:Array,DefaultInterpolation:2300,InterpolantFactoryMethodLinear:void 0,InterpolantFactoryMethodSmooth:void 0}),Al.prototype=Object.assign(Object.create(bl.prototype),{constructor:Al,ValueTypeName:"vector"}),Object.assign(Ll,{parse:function(e){for(var t=[],n=e.tracks,i=1/(e.fps||1),r=0,a=n.length;r!==a;++r)t.push(Rl(n[r]).scale(i));return new Ll(e.name,e.duration,t)},toJSON:function(e){for(var t=[],n=e.tracks,i={name:e.name,duration:e.duration,tracks:t,uuid:e.uuid},r=0,a=n.length;r!==a;++r)t.push(bl.toJSON(n[r]));return i},CreateFromMorphTargetSequence:function(e,t,n,i){for(var r=t.length,a=[],o=0;o1){var l=i[u=c[1]];l||(i[u]=l=[]),l.push(s)}}var h=[];for(var u in i)h.push(Ll.CreateFromMorphTargetSequence(u,i[u],t,n));return h},parseAnimation:function(e,t){if(!e)return console.error("THREE.AnimationClip: No animation in JSONLoader data."),null;for(var n=function(e,t,n,i,r){if(0!==n.length){var a=[],o=[];ml.flattenJSON(n,a,o,i),0!==a.length&&r.push(new e(t,a,o))}},i=[],r=e.name||"default",a=e.length||-1,o=e.fps||30,s=e.hierarchy||[],c=0;c0||0===e.search(/^data\:image\/jpeg/);r.format=i?Se:Te,r.needsUpdate=!0,void 0!==t&&t(r)},n,i),r}}),Object.assign(Vl.prototype,{getPoint:function(){return console.warn("THREE.Curve: .getPoint() not implemented."),null},getPointAt:function(e,t){var n=this.getUtoTmapping(e);return this.getPoint(n,t)},getPoints:function(e){void 0===e&&(e=5);for(var t=[],n=0;n<=e;n++)t.push(this.getPoint(n/e));return t},getSpacedPoints:function(e){void 0===e&&(e=5);for(var t=[],n=0;n<=e;n++)t.push(this.getPointAt(n/e));return t},getLength:function(){var e=this.getLengths();return e[e.length-1]},getLengths:function(e){if(void 0===e&&(e=this.arcLengthDivisions),this.cacheArcLengths&&this.cacheArcLengths.length===e+1&&!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;var t,n,i=[],r=this.getPoint(0),a=0;for(i.push(0),n=1;n<=e;n++)a+=(t=this.getPoint(n/e)).distanceTo(r),i.push(a),r=t;return this.cacheArcLengths=i,i},updateArcLengths:function(){this.needsUpdate=!0,this.getLengths()},getUtoTmapping:function(e,t){var n,i=this.getLengths(),r=0,a=i.length;n=t||e*i[a-1];for(var o,s=0,c=a-1;s<=c;)if((o=i[r=Math.floor(s+(c-s)/2)]-n)<0)s=r+1;else{if(!(o>0)){c=r;break}c=r-1}if(i[r=c]===n)return r/(a-1);var l=i[r];return(r+(n-l)/(i[r+1]-l))/(a-1)},getTangent:function(e){var t=e-1e-4,n=e+1e-4;t<0&&(t=0),n>1&&(n=1);var i=this.getPoint(t);return this.getPoint(n).clone().sub(i).normalize()},getTangentAt:function(e){var t=this.getUtoTmapping(e);return this.getTangent(t)},computeFrenetFrames:function(e,t){var n,i,r,a=new rn,o=[],s=[],c=[],l=new rn,h=new pn;for(n=0;n<=e;n++)i=n/e,o[n]=this.getTangentAt(i),o[n].normalize();s[0]=new rn,c[0]=new rn;var u=Number.MAX_VALUE,p=Math.abs(o[0].x),d=Math.abs(o[0].y),f=Math.abs(o[0].z);for(p<=u&&(u=p,a.set(1,0,0)),d<=u&&(u=d,a.set(0,1,0)),f<=u&&a.set(0,0,1),l.crossVectors(o[0],a).normalize(),s[0].crossVectors(o[0],l),c[0].crossVectors(o[0],s[0]),n=1;n<=e;n++)s[n]=s[n-1].clone(),c[n]=c[n-1].clone(),l.crossVectors(o[n-1],o[n]),l.length()>Number.EPSILON&&(l.normalize(),r=Math.acos(Wt.clamp(o[n-1].dot(o[n]),-1,1)),s[n].applyMatrix4(h.makeRotationAxis(l,r))),c[n].crossVectors(o[n],s[n]);if(!0===t)for(r=Math.acos(Wt.clamp(s[0].dot(s[e]),-1,1)),r/=e,o[0].dot(l.crossVectors(s[0],s[e]))>0&&(r=-r),n=1;n<=e;n++)s[n].applyMatrix4(h.makeRotationAxis(o[n],r*n)),c[n].crossVectors(o[n],s[n]);return{tangents:o,normals:s,binormals:c}},clone:function(){return(new this.constructor).copy(this)},copy:function(e){return this.arcLengthDivisions=e.arcLengthDivisions,this},toJSON:function(){var e={metadata:{version:4.5,type:"Curve",generator:"Curve.toJSON"}};return e.arcLengthDivisions=this.arcLengthDivisions,e.type=this.type,e},fromJSON:function(e){return this.arcLengthDivisions=e.arcLengthDivisions,this}}),kl.prototype=Object.create(Vl.prototype),kl.prototype.constructor=kl,kl.prototype.isEllipseCurve=!0,kl.prototype.getPoint=function(e,t){for(var n=t||new qt,i=2*Math.PI,r=this.aEndAngle-this.aStartAngle,a=Math.abs(r)i;)r-=i;r0?0:(Math.floor(Math.abs(h)/c)+1)*c:0===u&&h===c-1&&(h=c-2,u=1),this.closed||h>0?n=s[(h-1)%c]:(ql.subVectors(s[0],s[1]).add(s[0]),n=ql),i=s[h%c],r=s[(h+1)%c],this.closed||h+2i.length-2?i.length-1:a+1],h=i[a>i.length-3?i.length-1:a+2];return n.set(Ql(o,s.x,c.x,l.x,h.x),Ql(o,s.y,c.y,l.y,h.y)),n},oh.prototype.copy=function(e){Vl.prototype.copy.call(this,e),this.points=[];for(var t=0,n=e.points.length;t=t){var r=n[i]-t,a=this.curves[i],o=a.getLength(),s=0===o?0:1-r/o;return a.getPointAt(s)}i++}return null},getLength:function(){var e=this.getCurveLengths();return e[e.length-1]},updateArcLengths:function(){this.needsUpdate=!0,this.cacheLengths=null,this.getCurveLengths()},getCurveLengths:function(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;for(var e=[],t=0,n=0,i=this.curves.length;n1&&!n[n.length-1].equals(n[0])&&n.push(n[0]),n},copy:function(e){Vl.prototype.copy.call(this,e),this.curves=[];for(var t=0,n=e.curves.length;t0){var l=c.getPoint(0);l.equals(this.currentPoint)||this.lineTo(l.x,l.y)}this.curves.push(c);var h=c.getPoint(1);return this.currentPoint.copy(h),this},copy:function(e){return ch.prototype.copy.call(this,e),this.currentPoint.copy(e.currentPoint),this},toJSON:function(){var e=ch.prototype.toJSON.call(this);return e.currentPoint=this.currentPoint.toArray(),e},fromJSON:function(e){return ch.prototype.fromJSON.call(this,e),this.currentPoint.fromArray(e.currentPoint),this}}),hh.prototype=Object.assign(Object.create(lh.prototype),{constructor:hh,getPointsHoles:function(e){for(var t=[],n=0,i=this.holes.length;n0:i.vertexColors=e.vertexColors),void 0!==e.uniforms)for(var r in e.uniforms){var a=e.uniforms[r];switch(i.uniforms[r]={},a.type){case"t":i.uniforms[r].value=n(a.value);break;case"c":i.uniforms[r].value=(new _i).setHex(a.value);break;case"v2":i.uniforms[r].value=(new qt).fromArray(a.value);break;case"v3":i.uniforms[r].value=(new rn).fromArray(a.value);break;case"v4":i.uniforms[r].value=(new Qt).fromArray(a.value);break;case"m3":i.uniforms[r].value=(new Xt).fromArray(a.value);case"m4":i.uniforms[r].value=(new pn).fromArray(a.value);break;default:i.uniforms[r].value=a.value}}if(void 0!==e.defines&&(i.defines=e.defines),void 0!==e.vertexShader&&(i.vertexShader=e.vertexShader),void 0!==e.fragmentShader&&(i.fragmentShader=e.fragmentShader),void 0!==e.extensions)for(var o in e.extensions)i.extensions[o]=e.extensions[o];if(void 0!==e.shading&&(i.flatShading=1===e.shading),void 0!==e.size&&(i.size=e.size),void 0!==e.sizeAttenuation&&(i.sizeAttenuation=e.sizeAttenuation),void 0!==e.map&&(i.map=n(e.map)),void 0!==e.matcap&&(i.matcap=n(e.matcap)),void 0!==e.alphaMap&&(i.alphaMap=n(e.alphaMap)),void 0!==e.bumpMap&&(i.bumpMap=n(e.bumpMap)),void 0!==e.bumpScale&&(i.bumpScale=e.bumpScale),void 0!==e.normalMap&&(i.normalMap=n(e.normalMap)),void 0!==e.normalMapType&&(i.normalMapType=e.normalMapType),void 0!==e.normalScale){var s=e.normalScale;!1===Array.isArray(s)&&(s=[s,s]),i.normalScale=(new qt).fromArray(s)}return void 0!==e.displacementMap&&(i.displacementMap=n(e.displacementMap)),void 0!==e.displacementScale&&(i.displacementScale=e.displacementScale),void 0!==e.displacementBias&&(i.displacementBias=e.displacementBias),void 0!==e.roughnessMap&&(i.roughnessMap=n(e.roughnessMap)),void 0!==e.metalnessMap&&(i.metalnessMap=n(e.metalnessMap)),void 0!==e.emissiveMap&&(i.emissiveMap=n(e.emissiveMap)),void 0!==e.emissiveIntensity&&(i.emissiveIntensity=e.emissiveIntensity),void 0!==e.specularMap&&(i.specularMap=n(e.specularMap)),void 0!==e.envMap&&(i.envMap=n(e.envMap)),void 0!==e.envMapIntensity&&(i.envMapIntensity=e.envMapIntensity),void 0!==e.reflectivity&&(i.reflectivity=e.reflectivity),void 0!==e.refractionRatio&&(i.refractionRatio=e.refractionRatio),void 0!==e.lightMap&&(i.lightMap=n(e.lightMap)),void 0!==e.lightMapIntensity&&(i.lightMapIntensity=e.lightMapIntensity),void 0!==e.aoMap&&(i.aoMap=n(e.aoMap)),void 0!==e.aoMapIntensity&&(i.aoMapIntensity=e.aoMapIntensity),void 0!==e.gradientMap&&(i.gradientMap=n(e.gradientMap)),void 0!==e.clearcoatNormalMap&&(i.clearcoatNormalMap=n(e.clearcoatNormalMap)),void 0!==e.clearcoatNormalScale&&(i.clearcoatNormalScale=(new qt).fromArray(e.clearcoatNormalScale)),i},setTextures:function(e){return this.textures=e,this}});var Sh={decodeText:function(e){if("undefined"!=typeof TextDecoder)return(new TextDecoder).decode(e);for(var t="",n=0,i=e.length;n0){var a=new Ul(new Cl(t));a.setCrossOrigin(this.crossOrigin);for(var o=0,s=e.length;o0?new ds(o,s):new dr(o,s);break;case"InstancedMesh":o=r(e.geometry),s=a(e.material);var c=e.count,l=e.instanceMatrix;(i=new ws(o,s,c)).instanceMatrix=new Pi(new Float32Array(l.array),16);break;case"LOD":i=new ps;break;case"Line":i=new Rs(r(e.geometry),a(e.material),e.mode);break;case"LineLoop":i=new Ds(r(e.geometry),a(e.material));break;case"LineSegments":i=new Os(r(e.geometry),a(e.material));break;case"PointCloud":case"Points":i=new Us(r(e.geometry),a(e.material));break;case"Sprite":i=new cs(a(e.material));break;case"Group":i=new Go;break;default:i=new Pn}if(i.uuid=e.uuid,void 0!==e.name&&(i.name=e.name),void 0!==e.matrix?(i.matrix.fromArray(e.matrix),void 0!==e.matrixAutoUpdate&&(i.matrixAutoUpdate=e.matrixAutoUpdate),i.matrixAutoUpdate&&i.matrix.decompose(i.position,i.quaternion,i.scale)):(void 0!==e.position&&i.position.fromArray(e.position),void 0!==e.rotation&&i.rotation.fromArray(e.rotation),void 0!==e.quaternion&&i.quaternion.fromArray(e.quaternion),void 0!==e.scale&&i.scale.fromArray(e.scale)),void 0!==e.castShadow&&(i.castShadow=e.castShadow),void 0!==e.receiveShadow&&(i.receiveShadow=e.receiveShadow),e.shadow&&(void 0!==e.shadow.bias&&(i.shadow.bias=e.shadow.bias),void 0!==e.shadow.radius&&(i.shadow.radius=e.shadow.radius),void 0!==e.shadow.mapSize&&i.shadow.mapSize.fromArray(e.shadow.mapSize),void 0!==e.shadow.camera&&(i.shadow.camera=this.parseObject(e.shadow.camera))),void 0!==e.visible&&(i.visible=e.visible),void 0!==e.frustumCulled&&(i.frustumCulled=e.frustumCulled),void 0!==e.renderOrder&&(i.renderOrder=e.renderOrder),void 0!==e.userData&&(i.userData=e.userData),void 0!==e.layers&&(i.layers.mask=e.layers),void 0!==e.children)for(var h=e.children,u=0;uNumber.EPSILON){if(l<0&&(o=t[a],c=-c,s=t[r],l=-l),e.ys.y)continue;if(e.y===o.y){if(e.x===o.x)return!0}else{var h=l*(e.x-o.x)-c*(e.y-o.y);if(0===h)return!0;if(h<0)continue;i=!i}}else{if(e.y!==o.y)continue;if(s.x<=e.x&&e.x<=o.x||o.x<=e.x&&e.x<=s.x)return!0}}return i}var r=Oc.isClockWise,a=this.subPaths;if(0===a.length)return[];if(!0===t)return n(a);var o,s,c,l=[];if(1===a.length)return s=a[0],(c=new hh).curves=s.curves,l.push(c),l;var h=!r(a[0].getPoints());h=e?!h:h;var u,p,d=[],f=[],m=[],g=0;f[g]=void 0,m[g]=[];for(var v=0,y=a.length;v1){for(var x=!1,b=[],_=0,w=f.length;_0&&(x||(m=d))}v=0;for(var L=f.length;v0){this.source.connect(this.filters[0]);for(var e=1,t=this.filters.length;e0){this.source.disconnect(this.filters[0]);for(var e=1,t=this.filters.length;e=.5)for(var a=0;a!==r;++a)e[t+a]=e[n+a]},_slerp:function(e,t,n,i){en.slerpFlat(e,t,e,t,e,n,i)},_lerp:function(e,t,n,i,r){for(var a=1-i,o=0;o!==r;++o){var s=t+o;e[s]=e[s]*a+e[n+o]*i}}});var cu=new RegExp("[\\[\\]\\.:\\/]","g"),lu="[^"+"\\[\\]\\.:\\/".replace("\\.","")+"]",hu=/((?:WC+[\/:])*)/.source.replace("WC","[^\\[\\]\\.:\\/]"),uu=/(WCOD+)?/.source.replace("WCOD",lu),pu=/(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC","[^\\[\\]\\.:\\/]"),du=/\.(WC+)(?:\[(.+)\])?/.source.replace("WC","[^\\[\\]\\.:\\/]"),fu=new RegExp("^"+hu+uu+pu+du+"$"),mu=["material","materials","bones"];function gu(e,t,n){var i=n||vu.parseTrackName(t);this._targetGroup=e,this._bindings=e.subscribe_(t,i)}function vu(e,t,n){this.path=t,this.parsedPath=n||vu.parseTrackName(t),this.node=vu.findNode(e,this.parsedPath.nodeName)||e,this.rootNode=e}function yu(){this.uuid=Wt.generateUUID(),this._objects=Array.prototype.slice.call(arguments),this.nCachedObjects_=0;var e={};this._indicesByUUID=e;for(var t=0,n=arguments.length;t!==n;++t)e[arguments[t].uuid]=t;this._paths=[],this._parsedPaths=[],this._bindings=[],this._bindingsIndicesByPath={};var i=this;this.stats={objects:{get total(){return i._objects.length},get inUse(){return this.total-i.nCachedObjects_}},get bindingsPerObject(){return i._bindings.length}}}function xu(e,t,n){this._mixer=e,this._clip=t,this._localRoot=n||null;for(var i=t.tracks,r=i.length,a=new Array(r),o={endingStart:St,endingEnd:St},s=0;s!==r;++s){var c=i[s].createInterpolant(null);a[s]=c,c.settings=o}this._interpolantSettings=o,this._interpolants=a,this._propertyBindings=new Array(r),this._cacheIndex=null,this._byClipCacheIndex=null,this._timeScaleInterpolant=null,this._weightInterpolant=null,this.loop=Mt,this._loopCount=-1,this._startTime=null,this.time=0,this.timeScale=1,this._effectiveTimeScale=1,this.weight=1,this._effectiveWeight=1,this.repetitions=1/0,this.paused=!1,this.enabled=!0,this.clampWhenFinished=!1,this.zeroSlopeAtStart=!0,this.zeroSlopeAtEnd=!0}function bu(e){this._root=e,this._initMemoryManager(),this._accuIndex=0,this.time=0,this.timeScale=1}function _u(e){"string"==typeof e&&(console.warn("THREE.Uniform: Type parameter is no longer needed."),e=arguments[1]),this.value=e}function wu(e,t,n){Wo.call(this,e,t),this.meshPerAttribute=n||1}function Mu(e,t,n,i){this.ray=new ni(e,t),this.near=n||0,this.far=i||1/0,this.camera=null,this.layers=new gn,this.params={Mesh:{},Line:{threshold:1},LOD:{},Points:{threshold:1},Sprite:{}},Object.defineProperties(this.params,{PointCloud:{get:function(){return console.warn("THREE.Raycaster: params.PointCloud has been renamed to params.Points."),this.Points}}})}function Su(e,t){return e.distance-t.distance}function Tu(e,t,n,i){if(e.layers.test(t.layers)&&e.raycast(t,n),!0===i)for(var r=e.children,a=0,o=r.length;a=t){var h=t++,u=e[h];n[u.uuid]=l,e[l]=u,n[c]=h,e[h]=s;for(var p=0,d=r;p!==d;++p){var f=i[p],m=f[h],g=f[l];f[l]=m,f[h]=g}}}this.nCachedObjects_=t},uncache:function(){for(var e=this._objects,t=e.length,n=this.nCachedObjects_,i=this._indicesByUUID,r=this._bindings,a=r.length,o=0,s=arguments.length;o!==s;++o){var c=arguments[o].uuid,l=i[c];if(void 0!==l)if(delete i[c],l0)for(var c=this._interpolants,l=this._propertyBindings,h=0,u=c.length;h!==u;++h)c[h].evaluate(o),l[h].accumulate(i,s)}else this._updateWeight(e)},_updateWeight:function(e){var t=0;if(this.enabled){t=this.weight;var n=this._weightInterpolant;if(null!==n){var i=n.evaluate(e)[0];t*=i,e>n.parameterPositions[1]&&(this.stopFading(),0===i&&(this.enabled=!1))}}return this._effectiveWeight=t,t},_updateTimeScale:function(e){var t=0;if(!this.paused){t=this.timeScale;var n=this._timeScaleInterpolant;if(null!==n)t*=n.evaluate(e)[0],e>n.parameterPositions[1]&&(this.stopWarping(),0===t?this.paused=!0:this.timeScale=t)}return this._effectiveTimeScale=t,t},_updateTime:function(e){var t=this.time+e,n=this._clip.duration,i=this.loop,r=this._loopCount,a=2202===i;if(0===e)return-1===r?t:a&&1==(1&r)?n-t:t;if(2200===i){-1===r&&(this._loopCount=0,this._setEndings(!0,!0,!1));e:{if(t>=n)t=n;else{if(!(t<0)){this.time=t;break e}t=0}this.clampWhenFinished?this.paused=!0:this.enabled=!1,this.time=t,this._mixer.dispatchEvent({type:"finished",action:this,direction:e<0?-1:1})}}else{if(-1===r&&(e>=0?(r=0,this._setEndings(!0,0===this.repetitions,a)):this._setEndings(0===this.repetitions,!0,a)),t>=n||t<0){var o=Math.floor(t/n);t-=n*o,r+=Math.abs(o);var s=this.repetitions-r;if(s<=0)this.clampWhenFinished?this.paused=!0:this.enabled=!1,t=e>0?n:0,this.time=t,this._mixer.dispatchEvent({type:"finished",action:this,direction:e>0?1:-1});else{if(1===s){var c=e<0;this._setEndings(c,!c,a)}else this._setEndings(!1,!1,a);this._loopCount=r,this.time=t,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:o})}}else this.time=t;if(a&&1==(1&r))return n-t}return t},_setEndings:function(e,t,n){var i=this._interpolantSettings;n?(i.endingStart=2401,i.endingEnd=2401):(i.endingStart=e?this.zeroSlopeAtStart?2401:St:2402,i.endingEnd=t?this.zeroSlopeAtEnd?2401:St:2402)},_scheduleFading:function(e,t,n){var i=this._mixer,r=i.time,a=this._weightInterpolant;null===a&&(a=i._lendControlInterpolant(),this._weightInterpolant=a);var o=a.parameterPositions,s=a.sampleValues;return o[0]=r,s[0]=t,o[1]=r+e,s[1]=n,this}}),bu.prototype=Object.assign(Object.create(Ht.prototype),{constructor:bu,_bindAction:function(e,t){var n=e._localRoot||this._root,i=e._clip.tracks,r=i.length,a=e._propertyBindings,o=e._interpolants,s=n.uuid,c=this._bindingsByRootAndName,l=c[s];void 0===l&&(l={},c[s]=l);for(var h=0;h!==r;++h){var u=i[h],p=u.name,d=l[p];if(void 0!==d)a[h]=d;else{if(void 0!==(d=a[h])){null===d._cacheIndex&&(++d.referenceCount,this._addInactiveBinding(d,s,p));continue}var f=t&&t._propertyBindings[h].binding.parsedPath;++(d=new su(vu.create(n,p,f),u.ValueTypeName,u.getValueSize())).referenceCount,this._addInactiveBinding(d,s,p),a[h]=d}o[h].resultBuffer=d.buffer}},_activateAction:function(e){if(!this._isActiveAction(e)){if(null===e._cacheIndex){var t=(e._localRoot||this._root).uuid,n=e._clip.uuid,i=this._actionsByClip[n];this._bindAction(e,i&&i.knownActions[0]),this._addInactiveAction(e,n,t)}for(var r=e._propertyBindings,a=0,o=r.length;a!==o;++a){var s=r[a];0==s.useCount++&&(this._lendBinding(s),s.saveOriginalState())}this._lendAction(e)}},_deactivateAction:function(e){if(this._isActiveAction(e)){for(var t=e._propertyBindings,n=0,i=t.length;n!==i;++n){var r=t[n];0==--r.useCount&&(r.restoreOriginalState(),this._takeBackBinding(r))}this._takeBackAction(e)}},_initMemoryManager:function(){this._actions=[],this._nActiveActions=0,this._actionsByClip={},this._bindings=[],this._nActiveBindings=0,this._bindingsByRootAndName={},this._controlInterpolants=[],this._nActiveControlInterpolants=0;var e=this;this.stats={actions:{get total(){return e._actions.length},get inUse(){return e._nActiveActions}},bindings:{get total(){return e._bindings.length},get inUse(){return e._nActiveBindings}},controlInterpolants:{get total(){return e._controlInterpolants.length},get inUse(){return e._nActiveControlInterpolants}}}},_isActiveAction:function(e){var t=e._cacheIndex;return null!==t&&tthis.max.x||e.ythis.max.y)},containsBox:function(e){return this.min.x<=e.min.x&&e.max.x<=this.max.x&&this.min.y<=e.min.y&&e.max.y<=this.max.y},getParameter:function(e,t){return void 0===t&&(console.warn("THREE.Box2: .getParameter() target is now required"),t=new qt),t.set((e.x-this.min.x)/(this.max.x-this.min.x),(e.y-this.min.y)/(this.max.y-this.min.y))},intersectsBox:function(e){return!(e.max.xthis.max.x||e.max.ythis.max.y)},clampPoint:function(e,t){return void 0===t&&(console.warn("THREE.Box2: .clampPoint() target is now required"),t=new qt),t.copy(e).clamp(this.min,this.max)},distanceToPoint:function(e){return Lu.copy(e).clamp(this.min,this.max).sub(e).length()},intersect:function(e){return this.min.max(e.min),this.max.min(e.max),this},union:function(e){return this.min.min(e.min),this.max.max(e.max),this},translate:function(e){return this.min.add(e),this.max.add(e),this},equals:function(e){return e.min.equals(this.min)&&e.max.equals(this.max)}});var Pu=new rn,Cu=new rn;function Ou(e,t){this.start=void 0!==e?e:new rn,this.end=void 0!==t?t:new rn}function Du(e){Pn.call(this),this.material=e,this.render=function(){}}Object.assign(Ou.prototype,{set:function(e,t){return this.start.copy(e),this.end.copy(t),this},clone:function(){return(new this.constructor).copy(this)},copy:function(e){return this.start.copy(e.start),this.end.copy(e.end),this},getCenter:function(e){return void 0===e&&(console.warn("THREE.Line3: .getCenter() target is now required"),e=new rn),e.addVectors(this.start,this.end).multiplyScalar(.5)},delta:function(e){return void 0===e&&(console.warn("THREE.Line3: .delta() target is now required"),e=new rn),e.subVectors(this.end,this.start)},distanceSq:function(){return this.start.distanceToSquared(this.end)},distance:function(){return this.start.distanceTo(this.end)},at:function(e,t){return void 0===t&&(console.warn("THREE.Line3: .at() target is now required"),t=new rn),this.delta(t).multiplyScalar(e).add(this.start)},closestPointToPointParameter:function(e,t){Pu.subVectors(e,this.start),Cu.subVectors(this.end,this.start);var n=Cu.dot(Cu),i=Cu.dot(Pu)/n;return t&&(i=Wt.clamp(i,0,1)),i},closestPointToPoint:function(e,t,n){var i=this.closestPointToPointParameter(e,t);return void 0===n&&(console.warn("THREE.Line3: .closestPointToPoint() target is now required"),n=new rn),this.delta(n).multiplyScalar(i).add(this.start)},applyMatrix4:function(e){return this.start.applyMatrix4(e),this.end.applyMatrix4(e),this},equals:function(e){return e.start.equals(this.start)&&e.end.equals(this.end)}}),Du.prototype=Object.create(Pn.prototype),Du.prototype.constructor=Du,Du.prototype.isImmediateRenderObject=!0;var Iu=new rn;function Nu(e,t){Pn.call(this),this.light=e,this.light.updateMatrixWorld(),this.matrix=e.matrixWorld,this.matrixAutoUpdate=!1,this.color=t;for(var n=new Zi,i=[0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,-1,0,1,0,0,0,0,1,1,0,0,0,0,-1,1],r=0,a=1;r<32;r++,a++){var o=r/32*Math.PI*2,s=a/32*Math.PI*2;i.push(Math.cos(o),Math.sin(o),1,Math.cos(s),Math.sin(s),1)}n.setAttribute("position",new Fi(i,3));var c=new Ms({fog:!1});this.cone=new Os(n,c),this.add(this.cone),this.update()}Nu.prototype=Object.create(Pn.prototype),Nu.prototype.constructor=Nu,Nu.prototype.dispose=function(){this.cone.geometry.dispose(),this.cone.material.dispose()},Nu.prototype.update=function(){this.light.updateMatrixWorld();var e=this.light.distance?this.light.distance:1e3,t=e*Math.tan(this.light.angle);this.cone.scale.set(t,t,e),Iu.setFromMatrixPosition(this.light.target.matrixWorld),this.cone.lookAt(Iu),void 0!==this.color?this.cone.material.color.set(this.color):this.cone.material.color.copy(this.light.color)};var Bu=new rn,zu=new pn,Fu=new pn;function Uu(e){for(var t=function e(t){var n=[];t&&t.isBone&&n.push(t);for(var i=0;i.99999)this.quaternion.set(0,0,0,1);else if(e.y<-.99999)this.quaternion.set(1,0,0,0);else{sp.set(e.z,0,-e.x).normalize();var t=Math.acos(e.y);this.quaternion.setFromAxisAngle(sp,t)}},cp.prototype.setLength=function(e,t,n){void 0===t&&(t=.2*e),void 0===n&&(n=.2*t),this.line.scale.set(1,Math.max(1e-4,e-t),1),this.line.updateMatrix(),this.cone.scale.set(n,t,n),this.cone.position.y=e,this.cone.updateMatrix()},cp.prototype.setColor=function(e){this.line.material.color.set(e),this.cone.material.color.set(e)},cp.prototype.copy=function(e){return Pn.prototype.copy.call(this,e,!1),this.line.copy(e.line),this.cone.copy(e.cone),this},cp.prototype.clone=function(){return(new this.constructor).copy(this)},lp.prototype=Object.create(Os.prototype),lp.prototype.constructor=lp;var hp=4,up=8,pp=Math.pow(2,up),dp=[.125,.215,.35,.446,.526,.582],fp=up-hp+1+dp.length,mp=20,gp={};gp[Tt]=0,gp[Et]=1,gp[Lt]=2,gp[Pt]=3,gp[Ct]=4,gp[Ot]=5,gp[At]=6;var vp,yp,xp,bp,_p=new yh,wp=(vp=mp,yp=new Float32Array(vp),xp=new rn(0,1,0),(bp=new al({defines:{n:vp},uniforms:{envMap:{value:null},samples:{value:1},weights:{value:yp},latitudinal:{value:!1},dTheta:{value:0},mipInt:{value:0},poleAxis:{value:xp},inputEncoding:{value:gp[Tt]},outputEncoding:{value:gp[Tt]}},vertexShader:"\nprecision mediump float;\nprecision mediump int;\nattribute vec3 position;\nattribute vec2 uv;\nattribute float faceIndex;\nvarying vec3 vOutputDirection;\nvec3 getDirection(vec2 uv, float face) {\n\tuv = 2.0 * uv - 1.0;\n\tvec3 direction = vec3(uv, 1.0);\n\tif (face == 0.0) {\n\t\tdirection = direction.zyx;\n\t\tdirection.z *= -1.0;\n\t} else if (face == 1.0) {\n\t\tdirection = direction.xzy;\n\t\tdirection.z *= -1.0;\n\t} else if (face == 3.0) {\n\t\tdirection = direction.zyx;\n\t\tdirection.x *= -1.0;\n\t} else if (face == 4.0) {\n\t\tdirection = direction.xzy;\n\t\tdirection.y *= -1.0;\n\t} else if (face == 5.0) {\n\t\tdirection.xz *= -1.0;\n\t}\n\treturn direction;\n}\nvoid main() {\n\tvOutputDirection = getDirection(uv, faceIndex);\n\tgl_Position = vec4( position, 1.0 );\n}\n\t",fragmentShader:"\nprecision mediump float;\nprecision mediump int;\nvarying vec3 vOutputDirection;\nuniform sampler2D envMap;\nuniform int samples;\nuniform float weights[n];\nuniform bool latitudinal;\nuniform float dTheta;\nuniform float mipInt;\nuniform vec3 poleAxis;\n\n\nuniform int inputEncoding;\nuniform int outputEncoding;\n\n#include \n\nvec4 inputTexelToLinear(vec4 value){\n\tif(inputEncoding == 0){\n\t\treturn value;\n\t}else if(inputEncoding == 1){\n\t\treturn sRGBToLinear(value);\n\t}else if(inputEncoding == 2){\n\t\treturn RGBEToLinear(value);\n\t}else if(inputEncoding == 3){\n\t\treturn RGBMToLinear(value, 7.0);\n\t}else if(inputEncoding == 4){\n\t\treturn RGBMToLinear(value, 16.0);\n\t}else if(inputEncoding == 5){\n\t\treturn RGBDToLinear(value, 256.0);\n\t}else{\n\t\treturn GammaToLinear(value, 2.2);\n\t}\n}\n\nvec4 linearToOutputTexel(vec4 value){\n\tif(outputEncoding == 0){\n\t\treturn value;\n\t}else if(outputEncoding == 1){\n\t\treturn LinearTosRGB(value);\n\t}else if(outputEncoding == 2){\n\t\treturn LinearToRGBE(value);\n\t}else if(outputEncoding == 3){\n\t\treturn LinearToRGBM(value, 7.0);\n\t}else if(outputEncoding == 4){\n\t\treturn LinearToRGBM(value, 16.0);\n\t}else if(outputEncoding == 5){\n\t\treturn LinearToRGBD(value, 256.0);\n\t}else{\n\t\treturn LinearToGamma(value, 2.2);\n\t}\n}\n\nvec4 envMapTexelToLinear(vec4 color) {\n\treturn inputTexelToLinear(color);\n}\n\t\n\n#define ENVMAP_TYPE_CUBE_UV\n#include \n\nvoid main() {\n\tgl_FragColor = vec4(0.0);\n\tfor (int i = 0; i < n; i++) {\n\t\tif (i >= samples)\n\t\t\tbreak;\n\t\tfor (int dir = -1; dir < 2; dir += 2) {\n\t\t\tif (i == 0 && dir == 1)\n\t\t\t\tcontinue;\n\t\t\tvec3 axis = latitudinal ? poleAxis : cross(poleAxis, vOutputDirection);\n\t\t\tif (all(equal(axis, vec3(0.0))))\n\t\t\t\taxis = cross(vec3(0.0, 1.0, 0.0), vOutputDirection);\n\t\t\taxis = normalize(axis);\n\t\t\tfloat theta = dTheta * float(dir * i);\n\t\t\tfloat cosTheta = cos(theta);\n\t\t\t// Rodrigues' axis-angle rotation\n\t\t\tvec3 sampleDirection = vOutputDirection * cosTheta\n\t\t\t\t\t+ cross(axis, vOutputDirection) * sin(theta)\n\t\t\t\t\t+ axis * dot(axis, vOutputDirection) * (1.0 - cosTheta);\n\t\t\tgl_FragColor.rgb +=\n\t\t\t\t\tweights[i] * bilinearCubeUV(envMap, sampleDirection, mipInt);\n\t\t}\n\t}\n\tgl_FragColor = linearToOutputTexel(gl_FragColor);\n}\n\t\t",blending:h,depthTest:!1,depthWrite:!1})).type="SphericalGaussianBlur",bp),Mp=null,Sp=null,Tp=function(){for(var e=[],t=[],n=[],i=up,r=0;rup-hp?o=dp[r-up+hp-1]:0==r&&(o=0),n.push(o);for(var s=1/(a-1),c=-s/2,l=1+s/2,h=[c,c,l,c,l,l,c,c,l,l,c,l],u=new Float32Array(108),p=new Float32Array(72),d=new Float32Array(36),f=0;f<6;f++){var m=f%3*2/3-1,g=f>2?0:-1,v=[m,g,0,m+2/3,g,0,m+2/3,g+1,0,m,g,0,m+2/3,g+1,0,m,g+1,0];u.set(v,18*f),p.set(h,12*f);var y=[f,f,f,f,f,f];d.set(y,6*f)}var x=new Zi;x.setAttribute("position",new Pi(u,3)),x.setAttribute("uv",new Pi(p,2)),x.setAttribute("faceIndex",new Pi(d,1)),e.push(x),i>hp&&i--}return{_lodPlanes:e,_sizeLods:t,_sigmas:n}}(),Ep=Tp._lodPlanes,Ap=Tp._sizeLods,Lp=Tp._sigmas,Rp=null,Pp=null,Cp=null,Op=(1+Math.sqrt(5))/2,Dp=1/Op,Ip=[new rn(1,1,1),new rn(-1,1,1),new rn(1,1,-1),new rn(-1,1,-1),new rn(0,Op,Dp),new rn(0,Op,-Dp),new rn(Dp,0,Op),new rn(-Dp,0,Op),new rn(Op,Dp,0),new rn(-Op,Dp,0)];function Np(e){Pp=e,Fp(wp)}function Bp(e){var t={magFilter:ae,minFilter:ae,generateMipmaps:!1,type:e?e.type:ue,format:e?e.format:Le,encoding:e?e.encoding:Lt,depthBuffer:!1,stencilBuffer:!1},n=Up(t);return n.depthBuffer=!e,Rp=Up(t),n}function zp(e){Rp.dispose(),Pp.setRenderTarget(Cp),e.scissorTest=!1,e.setSize(e.width,e.height)}function Fp(e){var t=new Cn;t.add(new dr(Ep[0],e)),Pp.compile(t,_p)}function Up(e){var t=new Kt(3*pp,3*pp,e);return t.texture.mapping=ee,t.texture.name="PMREM.cubeUv",t.scissorTest=!0,t}function Gp(e,t,n,i,r){e.viewport.set(t,n,i,r),e.scissor.set(t,n,i,r)}function Hp(e){var t=Pp.autoClear;Pp.autoClear=!1;for(var n=1;nmp&&console.warn("sigmaRadians, "+r+", is too large and will clip, as it requested "+p+" samples when the maximum is set to "+mp);for(var d=[],f=0,m=0;mup-hp?i-up+hp:0),3*y,2*y),Pp.setRenderTarget(t),Pp.render(s,_p)}function jp(){var e=new al({uniforms:{envMap:{value:null},texelSize:{value:new qt(1,1)},inputEncoding:{value:gp[Tt]},outputEncoding:{value:gp[Tt]}},vertexShader:"\nprecision mediump float;\nprecision mediump int;\nattribute vec3 position;\nattribute vec2 uv;\nattribute float faceIndex;\nvarying vec3 vOutputDirection;\nvec3 getDirection(vec2 uv, float face) {\n\tuv = 2.0 * uv - 1.0;\n\tvec3 direction = vec3(uv, 1.0);\n\tif (face == 0.0) {\n\t\tdirection = direction.zyx;\n\t\tdirection.z *= -1.0;\n\t} else if (face == 1.0) {\n\t\tdirection = direction.xzy;\n\t\tdirection.z *= -1.0;\n\t} else if (face == 3.0) {\n\t\tdirection = direction.zyx;\n\t\tdirection.x *= -1.0;\n\t} else if (face == 4.0) {\n\t\tdirection = direction.xzy;\n\t\tdirection.y *= -1.0;\n\t} else if (face == 5.0) {\n\t\tdirection.xz *= -1.0;\n\t}\n\treturn direction;\n}\nvoid main() {\n\tvOutputDirection = getDirection(uv, faceIndex);\n\tgl_Position = vec4( position, 1.0 );\n}\n\t",fragmentShader:"\nprecision mediump float;\nprecision mediump int;\nvarying vec3 vOutputDirection;\nuniform sampler2D envMap;\nuniform vec2 texelSize;\n\n\nuniform int inputEncoding;\nuniform int outputEncoding;\n\n#include \n\nvec4 inputTexelToLinear(vec4 value){\n\tif(inputEncoding == 0){\n\t\treturn value;\n\t}else if(inputEncoding == 1){\n\t\treturn sRGBToLinear(value);\n\t}else if(inputEncoding == 2){\n\t\treturn RGBEToLinear(value);\n\t}else if(inputEncoding == 3){\n\t\treturn RGBMToLinear(value, 7.0);\n\t}else if(inputEncoding == 4){\n\t\treturn RGBMToLinear(value, 16.0);\n\t}else if(inputEncoding == 5){\n\t\treturn RGBDToLinear(value, 256.0);\n\t}else{\n\t\treturn GammaToLinear(value, 2.2);\n\t}\n}\n\nvec4 linearToOutputTexel(vec4 value){\n\tif(outputEncoding == 0){\n\t\treturn value;\n\t}else if(outputEncoding == 1){\n\t\treturn LinearTosRGB(value);\n\t}else if(outputEncoding == 2){\n\t\treturn LinearToRGBE(value);\n\t}else if(outputEncoding == 3){\n\t\treturn LinearToRGBM(value, 7.0);\n\t}else if(outputEncoding == 4){\n\t\treturn LinearToRGBM(value, 16.0);\n\t}else if(outputEncoding == 5){\n\t\treturn LinearToRGBD(value, 256.0);\n\t}else{\n\t\treturn LinearToGamma(value, 2.2);\n\t}\n}\n\nvec4 envMapTexelToLinear(vec4 color) {\n\treturn inputTexelToLinear(color);\n}\n\t\n\n#define RECIPROCAL_PI 0.31830988618\n#define RECIPROCAL_PI2 0.15915494\n\nvoid main() {\n\tgl_FragColor = vec4(0.0);\n\tvec3 outputDirection = normalize(vOutputDirection);\n\tvec2 uv;\n\tuv.y = asin(clamp(outputDirection.y, -1.0, 1.0)) * RECIPROCAL_PI + 0.5;\n\tuv.x = atan(outputDirection.z, outputDirection.x) * RECIPROCAL_PI2 + 0.5;\n\tvec2 f = fract(uv / texelSize - 0.5);\n\tuv -= f * texelSize;\n\tvec3 tl = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n\tuv.x += texelSize.x;\n\tvec3 tr = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n\tuv.y += texelSize.y;\n\tvec3 br = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n\tuv.x -= texelSize.x;\n\tvec3 bl = envMapTexelToLinear(texture2D(envMap, uv)).rgb;\n\tvec3 tm = mix(tl, tr, f.x);\n\tvec3 bm = mix(bl, br, f.x);\n\tgl_FragColor.rgb = mix(tm, bm, f.y);\n\tgl_FragColor = linearToOutputTexel(gl_FragColor);\n}\n\t\t",blending:h,depthTest:!1,depthWrite:!1});return e.type="EquirectangularToCubeUV",e}function Wp(){var e=new al({uniforms:{envMap:{value:null},inputEncoding:{value:gp[Tt]},outputEncoding:{value:gp[Tt]}},vertexShader:"\nprecision mediump float;\nprecision mediump int;\nattribute vec3 position;\nattribute vec2 uv;\nattribute float faceIndex;\nvarying vec3 vOutputDirection;\nvec3 getDirection(vec2 uv, float face) {\n\tuv = 2.0 * uv - 1.0;\n\tvec3 direction = vec3(uv, 1.0);\n\tif (face == 0.0) {\n\t\tdirection = direction.zyx;\n\t\tdirection.z *= -1.0;\n\t} else if (face == 1.0) {\n\t\tdirection = direction.xzy;\n\t\tdirection.z *= -1.0;\n\t} else if (face == 3.0) {\n\t\tdirection = direction.zyx;\n\t\tdirection.x *= -1.0;\n\t} else if (face == 4.0) {\n\t\tdirection = direction.xzy;\n\t\tdirection.y *= -1.0;\n\t} else if (face == 5.0) {\n\t\tdirection.xz *= -1.0;\n\t}\n\treturn direction;\n}\nvoid main() {\n\tvOutputDirection = getDirection(uv, faceIndex);\n\tgl_Position = vec4( position, 1.0 );\n}\n\t",fragmentShader:"\nprecision mediump float;\nprecision mediump int;\nvarying vec3 vOutputDirection;\nuniform samplerCube envMap;\n\n\nuniform int inputEncoding;\nuniform int outputEncoding;\n\n#include \n\nvec4 inputTexelToLinear(vec4 value){\n\tif(inputEncoding == 0){\n\t\treturn value;\n\t}else if(inputEncoding == 1){\n\t\treturn sRGBToLinear(value);\n\t}else if(inputEncoding == 2){\n\t\treturn RGBEToLinear(value);\n\t}else if(inputEncoding == 3){\n\t\treturn RGBMToLinear(value, 7.0);\n\t}else if(inputEncoding == 4){\n\t\treturn RGBMToLinear(value, 16.0);\n\t}else if(inputEncoding == 5){\n\t\treturn RGBDToLinear(value, 256.0);\n\t}else{\n\t\treturn GammaToLinear(value, 2.2);\n\t}\n}\n\nvec4 linearToOutputTexel(vec4 value){\n\tif(outputEncoding == 0){\n\t\treturn value;\n\t}else if(outputEncoding == 1){\n\t\treturn LinearTosRGB(value);\n\t}else if(outputEncoding == 2){\n\t\treturn LinearToRGBE(value);\n\t}else if(outputEncoding == 3){\n\t\treturn LinearToRGBM(value, 7.0);\n\t}else if(outputEncoding == 4){\n\t\treturn LinearToRGBM(value, 16.0);\n\t}else if(outputEncoding == 5){\n\t\treturn LinearToRGBD(value, 256.0);\n\t}else{\n\t\treturn LinearToGamma(value, 2.2);\n\t}\n}\n\nvec4 envMapTexelToLinear(vec4 color) {\n\treturn inputTexelToLinear(color);\n}\n\t\n\nvoid main() {\n\tgl_FragColor = vec4(0.0);\n\tgl_FragColor.rgb = envMapTexelToLinear(textureCube(envMap, vec3( - vOutputDirection.x, vOutputDirection.yz ))).rgb;\n\tgl_FragColor = linearToOutputTexel(gl_FragColor);\n}\n\t\t",blending:h,depthTest:!1,depthWrite:!1});return e.type="CubemapToCubeUV",e}Np.prototype={constructor:Np,fromScene:function(e,t,n,i){void 0===t&&(t=0),void 0===n&&(n=.1),void 0===i&&(i=100),Cp=Pp.getRenderTarget();var r=Bp();return function(e,t,n,i){var r=new Pr(90,1,t,n),a=[1,1,1,1,-1,1],o=[1,1,-1,-1,-1,1],s=Pp.outputEncoding,c=Pp.toneMapping,l=Pp.toneMappingExposure,h=Pp.getClearColor(),u=Pp.getClearAlpha();Pp.toneMapping=j,Pp.toneMappingExposure=1,Pp.outputEncoding=Tt,e.scale.z*=-1;var p=e.background;if(p&&p.isColor){p.convertSRGBToLinear();var d=Math.max(p.r,p.g,p.b),f=Math.min(Math.max(Math.ceil(Math.log2(d)),-128),127);p=p.multiplyScalar(Math.pow(2,-f));var m=(f+128)/255;Pp.setClearColor(p,m),e.background=null}for(var g=0;g<6;g++){var v=g%3;0==v?(r.up.set(0,a[g],0),r.lookAt(o[g],0,0)):1==v?(r.up.set(0,0,a[g]),r.lookAt(0,o[g],0)):(r.up.set(0,a[g],0),r.lookAt(0,0,o[g])),Gp(i,v*pp,g>2?pp:0,pp,pp),Pp.setRenderTarget(i),Pp.render(e,r)}Pp.toneMapping=c,Pp.toneMappingExposure=l,Pp.outputEncoding=s,Pp.setClearColor(h,u),e.scale.z*=-1}(e,n,i,r),t>0&&Vp(r,0,0,t),Hp(r),zp(r),r},fromEquirectangular:function(e){return e.magFilter=ae,e.minFilter=ae,e.generateMipmaps=!1,this.fromCubemap(e)},fromCubemap:function(e){Cp=Pp.getRenderTarget();var t=Bp(e);return function(e,t){var n=new Cn;e.isCubeTexture?null==Sp&&(Sp=Wp()):null==Mp&&(Mp=jp());var i=e.isCubeTexture?Sp:Mp;n.add(new dr(Ep[0],i));var r=i.uniforms;r.envMap.value=e,e.isCubeTexture||r.texelSize.value.set(1/e.image.width,1/e.image.height);r.inputEncoding.value=gp[e.encoding],r.outputEncoding.value=gp[e.encoding],Gp(t,0,0,3*pp,2*pp),Pp.setRenderTarget(t),Pp.render(n,_p)}(e,t),Hp(t),zp(t),t},compileCubemapShader:function(){null==Sp&&Fp(Sp=Wp())},compileEquirectangularShader:function(){null==Mp&&Fp(Mp=jp())},dispose:function(){wp.dispose(),null!=Sp&&Sp.dispose(),null!=Mp&&Mp.dispose();for(var e=0;e Date: Fri, 20 Mar 2020 01:57:23 -0400 Subject: [PATCH 06/16] new files --- transcoder/basisu_transcoder_uastc.h | 294 +++++++++++++++++++++++++++ 1 file changed, 294 insertions(+) create mode 100644 transcoder/basisu_transcoder_uastc.h diff --git a/transcoder/basisu_transcoder_uastc.h b/transcoder/basisu_transcoder_uastc.h new file mode 100644 index 0000000..47383e3 --- /dev/null +++ b/transcoder/basisu_transcoder_uastc.h @@ -0,0 +1,294 @@ +// basisu_transcoder_uastc.h +#pragma once +#include "basisu_transcoder_internal.h" + +namespace basist +{ + struct color_quad_u8 + { + uint8_t m_c[4]; + }; + + const uint32_t TOTAL_UASTC_MODES = 19; + const uint32_t UASTC_MODE_INDEX_SOLID_COLOR = 8; + + const uint32_t TOTAL_ASTC_BC7_COMMON_PARTITIONS2 = 30; + const uint32_t TOTAL_ASTC_BC7_COMMON_PARTITIONS3 = 11; + const uint32_t TOTAL_BC7_3_ASTC2_COMMON_PARTITIONS = 19; + + extern const uint8_t g_uastc_mode_weight_bits[TOTAL_UASTC_MODES]; + extern const uint8_t g_uastc_mode_weight_ranges[TOTAL_UASTC_MODES]; + extern const uint8_t g_uastc_mode_endpoint_ranges[TOTAL_UASTC_MODES]; + extern const uint8_t g_uastc_mode_subsets[TOTAL_UASTC_MODES]; + extern const uint8_t g_uastc_mode_planes[TOTAL_UASTC_MODES]; + extern const uint8_t g_uastc_mode_comps[TOTAL_UASTC_MODES]; + extern const uint8_t g_uastc_mode_has_etc1_bias[TOTAL_UASTC_MODES]; + extern const uint8_t g_uastc_mode_has_bc1_hint0[TOTAL_UASTC_MODES]; + extern const uint8_t g_uastc_mode_has_bc1_hint1[TOTAL_UASTC_MODES]; + extern const uint8_t g_uastc_mode_has_alpha[TOTAL_UASTC_MODES]; + extern const uint8_t g_uastc_mode_is_la[TOTAL_UASTC_MODES]; + + struct astc_bc7_common_partition2_desc + { + uint8_t m_bc7; + uint16_t m_astc; + bool m_invert; + }; + + extern const astc_bc7_common_partition2_desc g_astc_bc7_common_partitions2[TOTAL_ASTC_BC7_COMMON_PARTITIONS2]; + + struct bc73_astc2_common_partition_desc + { + uint8_t m_bc73; + uint16_t m_astc2; + uint8_t k; // 0-5 - how to modify the BC7 3-subset pattern to match the ASTC pattern (LSB=invert) + }; + + extern const bc73_astc2_common_partition_desc g_bc7_3_astc2_common_partitions[TOTAL_BC7_3_ASTC2_COMMON_PARTITIONS]; + + struct astc_bc7_common_partition3_desc + { + uint8_t m_bc7; + uint16_t m_astc; + uint8_t m_astc_to_bc7_perm; // converts ASTC to BC7 partition using g_astc_bc7_partition_index_perm_tables[][] + }; + + extern const astc_bc7_common_partition3_desc g_astc_bc7_common_partitions3[TOTAL_ASTC_BC7_COMMON_PARTITIONS3]; + + extern const uint8_t g_astc_bc7_patterns2[TOTAL_ASTC_BC7_COMMON_PARTITIONS2][16]; + extern const uint8_t g_astc_bc7_patterns3[TOTAL_ASTC_BC7_COMMON_PARTITIONS3][16]; + extern const uint8_t g_bc7_3_astc2_patterns2[TOTAL_BC7_3_ASTC2_COMMON_PARTITIONS][16]; + + extern const uint8_t g_astc_bc7_pattern2_anchors[TOTAL_ASTC_BC7_COMMON_PARTITIONS2][3]; + extern const uint8_t g_astc_bc7_pattern3_anchors[TOTAL_ASTC_BC7_COMMON_PARTITIONS3][3]; + extern const uint8_t g_bc7_3_astc2_patterns2_anchors[TOTAL_BC7_3_ASTC2_COMMON_PARTITIONS][3]; + + extern const uint32_t g_uastc_mode_huff_codes[TOTAL_UASTC_MODES + 1][2]; + + extern const uint8_t g_astc_to_bc7_partition_index_perm_tables[6][3]; + extern const uint8_t g_bc7_to_astc_partition_index_perm_tables[6][3]; // inverse of g_astc_to_bc7_partition_index_perm_tables + + extern const uint8_t* s_uastc_to_bc1_weights[6]; + + uint32_t bc7_convert_partition_index_3_to_2(uint32_t p, uint32_t k); + + inline uint32_t astc_interpolate(uint32_t l, uint32_t h, uint32_t w, bool srgb) + { + if (srgb) + { + l = (l << 8) | 0x80; + h = (h << 8) | 0x80; + } + else + { + l = (l << 8) | l; + h = (h << 8) | h; + } + + uint32_t k = (l * (64 - w) + h * w + 32) >> 6; + + return k >> 8; + } + + struct astc_block_desc + { + int m_weight_range; // weight BISE range + + int m_subsets; // number of ASTC partitions + int m_partition_seed; // partition pattern seed + int m_cem; // color endpoint mode used by all subsets + + int m_ccs; // color component selector (dual plane only) + bool m_dual_plane; // true if dual plane + + // Weight and endpoint BISE values. + // Note these values are NOT linear, they must be BISE encoded. See Table 97 and Table 107. + uint8_t m_endpoints[18]; // endpoint values, in RR GG BB etc. order + uint8_t m_weights[64]; // weight index values, raster order, in P0 P1, P0 P1, etc. or P0, P0, P0, P0, etc. order + }; + + const uint32_t BC7ENC_TOTAL_ASTC_RANGES = 21; + + // See tables 81, 93, 18.13.Endpoint Unquantization + const uint32_t TOTAL_ASTC_RANGES = 21; + extern const int g_astc_bise_range_table[TOTAL_ASTC_RANGES][3]; + + struct astc_quant_bin + { + uint8_t m_unquant; // unquantized value + uint8_t m_index; // sorted index + }; + + extern astc_quant_bin g_astc_unquant[BC7ENC_TOTAL_ASTC_RANGES][256]; // [ASTC encoded endpoint index] + + int astc_get_levels(int range); + bool astc_is_valid_endpoint_range(uint32_t range); + uint32_t unquant_astc_endpoint(uint32_t packed_bits, uint32_t packed_trits, uint32_t packed_quints, uint32_t range); + uint32_t unquant_astc_endpoint_val(uint32_t packed_val, uint32_t range); + + const uint8_t* get_anchor_indices(uint32_t subsets, uint32_t mode, uint32_t common_pattern, const uint8_t*& pPartition_pattern); + + // BC7 + const uint32_t BC7ENC_BLOCK_SIZE = 16; + + struct bc7_block + { + uint64_t m_qwords[2]; + }; + + struct bc7_optimization_results + { + uint32_t m_mode; + uint32_t m_partition; + uint8_t m_selectors[16]; + uint8_t m_alpha_selectors[16]; + color_quad_u8 m_low[3]; + color_quad_u8 m_high[3]; + uint32_t m_pbits[3][2]; + uint32_t m_index_selector; + uint32_t m_rotation; + }; + + extern const uint32_t g_bc7_weights1[2]; + extern const uint32_t g_bc7_weights2[4]; + extern const uint32_t g_bc7_weights3[8]; + extern const uint32_t g_bc7_weights4[16]; + extern const uint32_t g_astc_weights4[16]; + extern const uint32_t g_astc_weights5[32]; + extern const uint32_t g_astc_weights_3levels[3]; + extern const uint8_t g_bc7_partition1[16]; + extern const uint8_t g_bc7_partition2[64 * 16]; + extern const uint8_t g_bc7_partition3[64 * 16]; + extern const uint8_t g_bc7_table_anchor_index_second_subset[64]; + extern const uint8_t g_bc7_table_anchor_index_third_subset_1[64]; + extern const uint8_t g_bc7_table_anchor_index_third_subset_2[64]; + extern const uint8_t g_bc7_num_subsets[8]; + extern const uint8_t g_bc7_partition_bits[8]; + extern const uint8_t g_bc7_color_index_bitcount[8]; + extern const uint8_t g_bc7_mode_has_p_bits[8]; + extern const uint8_t g_bc7_mode_has_shared_p_bits[8]; + extern const uint8_t g_bc7_color_precision_table[8]; + extern const int8_t g_bc7_alpha_precision_table[8]; + extern const uint8_t g_bc7_alpha_index_bitcount[8]; + + inline bool get_bc7_mode_has_seperate_alpha_selectors(int mode) { return (mode == 4) || (mode == 5); } + inline int get_bc7_color_index_size(int mode, int index_selection_bit) { return g_bc7_color_index_bitcount[mode] + index_selection_bit; } + inline int get_bc7_alpha_index_size(int mode, int index_selection_bit) { return g_bc7_alpha_index_bitcount[mode] - index_selection_bit; } + + struct endpoint_err + { + uint16_t m_error; uint8_t m_lo; uint8_t m_hi; + }; + + extern endpoint_err g_bc7_mode_6_optimal_endpoints[256][2]; // [c][pbit] + const uint32_t BC7ENC_MODE_6_OPTIMAL_INDEX = 5; + + extern endpoint_err g_bc7_mode_5_optimal_endpoints[256]; // [c] + const uint32_t BC7ENC_MODE_5_OPTIMAL_INDEX = 1; + + // Packs a BC7 block from a high-level description. Handles all BC7 modes. + void encode_bc7_block(void* pBlock, const bc7_optimization_results* pResults); + + // Packs an ASTC block + // Constraints: Always 4x4, all subset CEM's must be equal, only tested with LDR CEM's. + bool pack_astc_block(uint32_t* pDst, const astc_block_desc* pBlock, uint32_t mode); + + void pack_astc_solid_block(void* pDst_block, const color32& color); + +#ifdef _DEBUG + int astc_compute_texel_partition(int seed, int x, int y, int z, int partitioncount, bool small_block); +#endif + + struct uastc_block + { + union + { + uint8_t m_bytes[16]; + uint32_t m_dwords[4]; + uint64_t m_qwords[2]; + }; + }; + + struct unpacked_uastc_block + { + astc_block_desc m_astc; + + uint32_t m_mode; + uint32_t m_common_pattern; + + color32 m_solid_color; + + bool m_bc1_hint0; + bool m_bc1_hint1; + + bool m_etc1_flip; + bool m_etc1_diff; + uint32_t m_etc1_inten0; + uint32_t m_etc1_inten1; + + uint32_t m_etc1_bias; + + uint32_t m_etc2_hints; + + uint32_t m_etc1_selector; + uint32_t m_etc1_r, m_etc1_g, m_etc1_b; + }; + + color32 apply_etc1_bias(const color32 &block_color, uint32_t bias, uint32_t limit, uint32_t subblock); + + struct decoder_etc_block; + struct eac_block; + + bool unpack_uastc(uint32_t mode, uint32_t common_pattern, const color32& solid_color, const astc_block_desc& astc, color32* pPixels, bool srgb); + bool unpack_uastc(const unpacked_uastc_block& unpacked_blk, color32* pPixels, bool srgb); + + bool unpack_uastc(const uastc_block& blk, color32* pPixels, bool srgb); + bool unpack_uastc(const uastc_block& blk, unpacked_uastc_block& unpacked, bool undo_blue_contract, bool read_hints = true); + + bool transcode_uastc_to_astc(const uastc_block& src_blk, void* pDst); + + bool transcode_uastc_to_bc7(const unpacked_uastc_block& unpacked_src_blk, bc7_optimization_results& dst_blk); + bool transcode_uastc_to_bc7(const uastc_block& src_blk, bc7_optimization_results& dst_blk); + bool transcode_uastc_to_bc7(const uastc_block& src_blk, void* pDst); + + void transcode_uastc_to_etc1(unpacked_uastc_block& unpacked_src_blk, color32 block_pixels[4][4], void* pDst); + bool transcode_uastc_to_etc1(const uastc_block& src_blk, void* pDst); + bool transcode_uastc_to_etc1(const uastc_block& src_blk, void* pDst, uint32_t channel); + + void transcode_uastc_to_etc2_eac_a8(unpacked_uastc_block& unpacked_src_blk, color32 block_pixels[4][4], void* pDst); + bool transcode_uastc_to_etc2_rgba(const uastc_block& src_blk, void* pDst); + + // Packs 16 scalar values to BC4. Same PSNR as stb_dxt's BC4 encoder, around 13% faster. + void encode_bc4(void* pDst, const uint8_t* pPixels, uint32_t stride); + + void encode_bc1_solid_block(void* pDst, uint32_t fr, uint32_t fg, uint32_t fb); + + enum + { + cEncodeBC1HighQuality = 1, + cEncodeBC1HigherQuality = 2, + cEncodeBC1UseSelectors = 4, + }; + void encode_bc1(void* pDst, const uint8_t* pPixels, uint32_t flags); + + // Alternate PCA-free encoder, around 15% faster, same (or slightly higher) avg. PSNR + void encode_bc1_alt(void* pDst, const uint8_t* pPixels, uint32_t flags); + + void transcode_uastc_to_bc1_hint0(const unpacked_uastc_block& unpacked_src_blk, void* pDst); + void transcode_uastc_to_bc1_hint1(const unpacked_uastc_block& unpacked_src_blk, const color32 block_pixels[4][4], void* pDst, bool high_quality); + + bool transcode_uastc_to_bc1(const uastc_block& src_blk, void* pDst, bool high_quality); + bool transcode_uastc_to_bc3(const uastc_block& src_blk, void* pDst, bool high_quality); + bool transcode_uastc_to_bc4(const uastc_block& src_blk, void* pDst, bool high_quality, uint32_t chan0); + bool transcode_uastc_to_bc5(const uastc_block& src_blk, void* pDst, bool high_quality, uint32_t chan0, uint32_t chan1); + + bool transcode_uastc_to_etc2_eac_r11(const uastc_block& src_blk, void* pDst, bool high_quality, uint32_t chan0); + bool transcode_uastc_to_etc2_eac_rg11(const uastc_block& src_blk, void* pDst, bool high_quality, uint32_t chan0, uint32_t chan1); + + bool transcode_uastc_to_pvrtc1_4_rgb(const uastc_block* pSrc_blocks, void* pDst_blocks, uint32_t num_blocks_x, uint32_t num_blocks_y, bool high_quality, bool from_alpha); + bool transcode_uastc_to_pvrtc1_4_rgba(const uastc_block* pSrc_blocks, void* pDst_blocks, uint32_t num_blocks_x, uint32_t num_blocks_y, bool high_quality); + + // uastc_init() MUST be called before using this module. + void uastc_init(); + +} // namespace basist \ No newline at end of file From 02036ae0b23ffb840ad25e9381df133f612c9238 Mon Sep 17 00:00:00 2001 From: Rich Geldreich Date: Fri, 20 Mar 2020 01:57:46 -0400 Subject: [PATCH 07/16] new files --- CppProperties.json | 21 + basisu_uastc_enc.cpp | 4090 ++++++++++++++++++++++++++++++++++++++++++ basisu_uastc_enc.h | 125 ++ 3 files changed, 4236 insertions(+) create mode 100644 CppProperties.json create mode 100644 basisu_uastc_enc.cpp create mode 100644 basisu_uastc_enc.h diff --git a/CppProperties.json b/CppProperties.json new file mode 100644 index 0000000..6017def --- /dev/null +++ b/CppProperties.json @@ -0,0 +1,21 @@ +{ + "configurations": [ + { + "inheritEnvironments": [ + "msvc_x64" + ], + "name": "x64-Release", + "includePath": [ + "${env.INCLUDE}", + "${workspaceRoot}\\**" + ], + "defines": [ + "WIN32", + "NDEBUG", + "UNICODE", + "_UNICODE" + ], + "intelliSenseMode": "windows-msvc-x64" + } + ] +} \ No newline at end of file diff --git a/basisu_uastc_enc.cpp b/basisu_uastc_enc.cpp new file mode 100644 index 0000000..ba5083a --- /dev/null +++ b/basisu_uastc_enc.cpp @@ -0,0 +1,4090 @@ +// basisu_uastc_enc.cpp +// Copyright (C) 2019-2020 Binomial LLC. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +#include "basisu_uastc_enc.h" +#include "basisu_astc_decomp.h" +#include "basisu_gpu_texture.h" +#include "basisu_bc7enc.h" + +#ifdef _DEBUG +// When BASISU_VALIDATE_UASTC_ENC is 1, we pack and unpack to/from UASTC and ASTC, then validate that each codec returns the exact same results. This is slower. +#define BASISU_VALIDATE_UASTC_ENC 1 +#endif + +#define BASISU_SUPPORT_FORCE_MODE 0 + +using namespace basist; + +namespace basisu +{ + const uint32_t MAX_ENCODE_RESULTS = 512; + +#if BASISU_VALIDATE_UASTC_ENC + static void validate_func(bool condition, int line) + { + if (!condition) + { + fprintf(stderr, "basisu_uastc_enc: Internal validation failed on line %u!\n", line); + } + } + + #define VALIDATE(c) validate_func(c, __LINE__); +#else + #define VALIDATE(c) +#endif + + enum dxt_constants + { + cDXT1SelectorBits = 2U, cDXT1SelectorValues = 1U << cDXT1SelectorBits, cDXT1SelectorMask = cDXT1SelectorValues - 1U, + cDXT5SelectorBits = 3U, cDXT5SelectorValues = 1U << cDXT5SelectorBits, cDXT5SelectorMask = cDXT5SelectorValues - 1U, + }; + + struct dxt1_block + { + enum { cTotalEndpointBytes = 2, cTotalSelectorBytes = 4 }; + + uint8_t m_low_color[cTotalEndpointBytes]; + uint8_t m_high_color[cTotalEndpointBytes]; + uint8_t m_selectors[cTotalSelectorBytes]; + + inline void clear() { basisu::clear_obj(*this); } + + inline uint32_t get_high_color() const { return m_high_color[0] | (m_high_color[1] << 8U); } + inline uint32_t get_low_color() const { return m_low_color[0] | (m_low_color[1] << 8U); } + inline void set_low_color(uint16_t c) { m_low_color[0] = static_cast(c & 0xFF); m_low_color[1] = static_cast((c >> 8) & 0xFF); } + inline void set_high_color(uint16_t c) { m_high_color[0] = static_cast(c & 0xFF); m_high_color[1] = static_cast((c >> 8) & 0xFF); } + inline uint32_t get_selector(uint32_t x, uint32_t y) const { assert((x < 4U) && (y < 4U)); return (m_selectors[y] >> (x * cDXT1SelectorBits))& cDXT1SelectorMask; } + inline void set_selector(uint32_t x, uint32_t y, uint32_t val) { assert((x < 4U) && (y < 4U) && (val < 4U)); m_selectors[y] &= (~(cDXT1SelectorMask << (x * cDXT1SelectorBits))); m_selectors[y] |= (val << (x * cDXT1SelectorBits)); } + + static uint16_t pack_color(const color_rgba& color, bool scaled, uint32_t bias = 127U) + { + uint32_t r = color.r, g = color.g, b = color.b; + if (scaled) + { + r = (r * 31U + bias) / 255U; + g = (g * 63U + bias) / 255U; + b = (b * 31U + bias) / 255U; + } + return static_cast(basisu::minimum(b, 31U) | (basisu::minimum(g, 63U) << 5U) | (basisu::minimum(r, 31U) << 11U)); + } + + static uint16_t pack_unscaled_color(uint32_t r, uint32_t g, uint32_t b) { return static_cast(b | (g << 5U) | (r << 11U)); } + }; + +#define UASTC_WRITE_MODE_DESCS 0 + + static inline void uastc_write_bits(uint8_t* pBuf, uint32_t& bit_offset, uint64_t code, uint32_t codesize, const char* pDesc) + { + (void)pDesc; + +#if UASTC_WRITE_MODE_DESCS + if (pDesc) + printf("%s: %u %u\n", pDesc, bit_offset, codesize); +#endif + + assert((codesize == 64) || (code < (1ULL << codesize))); + + while (codesize) + { + uint32_t byte_bit_offset = bit_offset & 7; + uint32_t bits_to_write = basisu::minimum(codesize, 8 - byte_bit_offset); + + pBuf[bit_offset >> 3] |= (code << byte_bit_offset); + + code >>= bits_to_write; + codesize -= bits_to_write; + bit_offset += bits_to_write; + } + } + + void pack_uastc(basist::uastc_block& blk, const uastc_encode_results& result, const etc_block& etc1_blk, uint32_t etc1_bias, const eac_a8_block& etc_eac_a8_blk, bool bc1_hint0, bool bc1_hint1) + { + if ((g_uastc_mode_has_alpha[result.m_uastc_mode]) && (result.m_uastc_mode != UASTC_MODE_INDEX_SOLID_COLOR)) + { + assert(etc_eac_a8_blk.m_multiplier >= 1); + } + + uint8_t buf[32]; + memset(buf, 0, sizeof(buf)); + + uint32_t block_bit_offset = 0; + +#if UASTC_WRITE_MODE_DESCS + printf("**** Mode: %u\n", result.m_uastc_mode); +#endif + + uastc_write_bits(buf, block_bit_offset, g_uastc_mode_huff_codes[result.m_uastc_mode][0], g_uastc_mode_huff_codes[result.m_uastc_mode][1], "mode"); + + if (result.m_uastc_mode == UASTC_MODE_INDEX_SOLID_COLOR) + { + uastc_write_bits(buf, block_bit_offset, result.m_solid_color.r, 8, "R"); + uastc_write_bits(buf, block_bit_offset, result.m_solid_color.g, 8, "G"); + uastc_write_bits(buf, block_bit_offset, result.m_solid_color.b, 8, "B"); + uastc_write_bits(buf, block_bit_offset, result.m_solid_color.a, 8, "A"); + + uastc_write_bits(buf, block_bit_offset, etc1_blk.get_diff_bit(), 1, "ETC1D"); + uastc_write_bits(buf, block_bit_offset, etc1_blk.get_inten_table(0), 3, "ETC1I"); + uastc_write_bits(buf, block_bit_offset, etc1_blk.get_selector(0, 0), 2, "ETC1S"); + + uint32_t r, g, b; + if (etc1_blk.get_diff_bit()) + etc_block::unpack_color5(r, g, b, etc1_blk.get_base5_color(), false); + else + etc_block::unpack_color4(r, g, b, etc1_blk.get_base4_color(0), false); + + uastc_write_bits(buf, block_bit_offset, r, 5, "ETC1R"); + uastc_write_bits(buf, block_bit_offset, g, 5, "ETC1G"); + uastc_write_bits(buf, block_bit_offset, b, 5, "ETC1B"); + + memcpy(&blk, buf, sizeof(blk)); + return; + } + + if (g_uastc_mode_has_bc1_hint0[result.m_uastc_mode]) + uastc_write_bits(buf, block_bit_offset, bc1_hint0, 1, "BC1H0"); + else + { + assert(bc1_hint0 == false); + } + + if (g_uastc_mode_has_bc1_hint1[result.m_uastc_mode]) + uastc_write_bits(buf, block_bit_offset, bc1_hint1, 1, "BC1H1"); + else + { + assert(bc1_hint1 == false); + } + + uastc_write_bits(buf, block_bit_offset, etc1_blk.get_flip_bit(), 1, "ETC1F"); + uastc_write_bits(buf, block_bit_offset, etc1_blk.get_diff_bit(), 1, "ETC1D"); + uastc_write_bits(buf, block_bit_offset, etc1_blk.get_inten_table(0), 3, "ETC1I0"); + uastc_write_bits(buf, block_bit_offset, etc1_blk.get_inten_table(1), 3, "ETC1I1"); + + if (g_uastc_mode_has_etc1_bias[result.m_uastc_mode]) + uastc_write_bits(buf, block_bit_offset, etc1_bias, 5, "ETC1BIAS"); + else + { + assert(etc1_bias == 0); + } + + if (g_uastc_mode_has_alpha[result.m_uastc_mode]) + { + const uint32_t etc2_hints = etc_eac_a8_blk.m_table | (etc_eac_a8_blk.m_multiplier << 4); + + assert(etc2_hints > 0 && etc2_hints <= 0xFF); + uastc_write_bits(buf, block_bit_offset, etc2_hints, 8, "ETC2TM"); + } + + uint32_t subsets = 1; + switch (result.m_uastc_mode) + { + case 2: + case 4: + case 7: + case 9: + case 16: + uastc_write_bits(buf, block_bit_offset, result.m_common_pattern, 5, "PAT"); + subsets = 2; + break; + case 3: + uastc_write_bits(buf, block_bit_offset, result.m_common_pattern, 4, "PAT"); + subsets = 3; + break; + default: + break; + } + +#ifdef _DEBUG + uint32_t part_seed = 0; + switch (result.m_uastc_mode) + { + case 2: + case 4: + case 9: + case 16: + part_seed = g_astc_bc7_common_partitions2[result.m_common_pattern].m_astc; + break; + case 3: + part_seed = g_astc_bc7_common_partitions3[result.m_common_pattern].m_astc; + break; + case 7: + part_seed = g_bc7_3_astc2_common_partitions[result.m_common_pattern].m_astc2; + break; + default: + break; + } +#endif + + uint32_t total_planes = 1; + switch (result.m_uastc_mode) + { + case 6: + case 11: + case 13: + uastc_write_bits(buf, block_bit_offset, result.m_astc.m_ccs, 2, "COMPSEL"); + total_planes = 2; + break; + case 17: + // CCS field is always 3 for dual plane LA. + assert(result.m_astc.m_ccs == 3); + total_planes = 2; + break; + default: + break; + } + + uint8_t weights[32]; + memcpy(weights, result.m_astc.m_weights, 16 * total_planes); + + uint8_t endpoints[18]; + memcpy(endpoints, result.m_astc.m_endpoints, sizeof(endpoints)); + + const uint32_t total_comps = g_uastc_mode_comps[result.m_uastc_mode]; + + // LLAA + // LLAA LLAA + // LLAA LLAA LLAA + // RRGGBB + // RRGGBB RRGGBB + // RRGGBB RRGGBB RRGGBB + // RRGGBBAA + // RRGGBBAA RRGGBBAA + + const uint32_t weight_bits = g_uastc_mode_weight_bits[result.m_uastc_mode]; + + const uint8_t* pPartition_pattern; + const uint8_t* pSubset_anchor_indices = basist::get_anchor_indices(subsets, result.m_uastc_mode, result.m_common_pattern, pPartition_pattern); + + for (uint32_t plane_index = 0; plane_index < total_planes; plane_index++) + { + for (uint32_t subset_index = 0; subset_index < subsets; subset_index++) + { + const uint32_t anchor_index = pSubset_anchor_indices[subset_index]; + +#ifdef _DEBUG + if (subsets >= 2) + { + for (uint32_t i = 0; i < 16; i++) + { + const uint32_t part_index = astc_compute_texel_partition(part_seed, i & 3, i >> 2, 0, subsets, true); + if (part_index == subset_index) + { + assert(anchor_index == i); + break; + } + } + } + else + { + assert(!anchor_index); + } +#endif + + // Check anchor weight's MSB - if it's set then invert this subset's weights and swap the endpoints + if (weights[anchor_index * total_planes + plane_index] & (1 << (weight_bits - 1))) + { + for (uint32_t i = 0; i < 16; i++) + { + const uint32_t part_index = pPartition_pattern[i]; + +#ifdef _DEBUG + if (subsets >= 2) + { + assert(part_index == (uint32_t)astc_compute_texel_partition(part_seed, i & 3, i >> 2, 0, subsets, true)); + } + else + { + assert(!part_index); + } +#endif + + if (part_index == subset_index) + weights[i * total_planes + plane_index] = ((1 << weight_bits) - 1) - weights[i * total_planes + plane_index]; + } + + if (total_planes == 2) + { + for (int c = 0; c < (int)total_comps; c++) + { + const uint32_t comp_plane = (total_comps == 2) ? c : ((c == result.m_astc.m_ccs) ? 1 : 0); + + if (comp_plane == plane_index) + std::swap(endpoints[c * 2 + 0], endpoints[c * 2 + 1]); + } + } + else + { + for (uint32_t c = 0; c < total_comps; c++) + std::swap(endpoints[subset_index * total_comps * 2 + c * 2 + 0], endpoints[subset_index * total_comps * 2 + c * 2 + 1]); + } + } + } // subset_index + } // plane_index + + const uint32_t total_values = total_comps * 2 * subsets; + const uint32_t endpoint_range = g_uastc_mode_endpoint_ranges[result.m_uastc_mode]; + + uint32_t bit_values[18]; + uint32_t tq_values[8]; + uint32_t total_tq_values = 0; + uint32_t tq_accum = 0; + uint32_t tq_mul = 1; + + const uint32_t ep_bits = g_astc_bise_range_table[endpoint_range][0]; + const uint32_t ep_trits = g_astc_bise_range_table[endpoint_range][1]; + const uint32_t ep_quints = g_astc_bise_range_table[endpoint_range][2]; + + for (uint32_t i = 0; i < total_values; i++) + { + uint32_t val = endpoints[i]; + + uint32_t bits = val & ((1 << ep_bits) - 1); + uint32_t tq = val >> ep_bits; + + bit_values[i] = bits; + + if (ep_trits) + { + assert(tq < 3); + tq_accum += tq * tq_mul; + tq_mul *= 3; + if (tq_mul == 243) + { + tq_values[total_tq_values++] = tq_accum; + tq_accum = 0; + tq_mul = 1; + } + } + else if (ep_quints) + { + assert(tq < 5); + tq_accum += tq * tq_mul; + tq_mul *= 5; + if (tq_mul == 125) + { + tq_values[total_tq_values++] = tq_accum; + tq_accum = 0; + tq_mul = 1; + } + } + } + + uint32_t total_endpoint_bits = 0; + + for (uint32_t i = 0; i < total_tq_values; i++) + { + const uint32_t num_bits = ep_trits ? 8 : 7; + uastc_write_bits(buf, block_bit_offset, tq_values[i], num_bits, "ETQ"); + total_endpoint_bits += num_bits; + } + + if (tq_mul > 1) + { + uint32_t num_bits; + if (ep_trits) + { + if (tq_mul == 3) + num_bits = 2; + else if (tq_mul == 9) + num_bits = 4; + else if (tq_mul == 27) + num_bits = 5; + else //if (tq_mul == 81) + num_bits = 7; + } + else + { + if (tq_mul == 5) + num_bits = 3; + else //if (tq_mul == 25) + num_bits = 5; + } + uastc_write_bits(buf, block_bit_offset, tq_accum, num_bits, "ETQ"); + total_endpoint_bits += num_bits; + } + + for (uint32_t i = 0; i < total_values; i++) + { + uastc_write_bits(buf, block_bit_offset, bit_values[i], ep_bits, "EBITS"); + total_endpoint_bits += ep_bits; + } + +#if UASTC_WRITE_MODE_DESCS + uint32_t weight_start = block_bit_offset; +#endif + + uint32_t total_weight_bits = 0; + const uint32_t plane_shift = (total_planes == 2) ? 1 : 0; + for (uint32_t i = 0; i < 16 * total_planes; i++) + { + uint32_t numbits = weight_bits; + for (uint32_t s = 0; s < subsets; s++) + { + if (pSubset_anchor_indices[s] == (i >> plane_shift)) + { + numbits--; + break; + } + } + + uastc_write_bits(buf, block_bit_offset, weights[i], numbits, nullptr); + + total_weight_bits += numbits; + } + +#if UASTC_WRITE_MODE_DESCS + printf("WEIGHTS: %u %u\n", weight_start, total_weight_bits); +#endif + + assert(block_bit_offset <= 128); + memcpy(&blk, buf, sizeof(blk)); + +#if UASTC_WRITE_MODE_DESCS + printf("Total bits: %u, endpoint bits: %u, weight bits: %u\n", block_bit_offset, total_endpoint_bits, total_weight_bits); +#endif + } + + // MODE 0 + // 0. DualPlane: 0, WeightRange: 8 (16), Subsets: 1, CEM: 8 (RGB Direct ), EndpointRange: 19 (192) MODE6 RGB + // 18. DualPlane: 0, WeightRange: 11 (32), Subsets: 1, CEM: 8 (RGB Direct ), EndpointRange: 11 (32) MODE6 RGB + static void astc_mode0_or_18(uint32_t mode, const color_rgba block[4][4], uastc_encode_results* pResults, uint32_t& total_results, bc7enc_compress_block_params& comp_params, const uint8_t *pForce_selectors = nullptr) + { + const uint32_t endpoint_range = (mode == 18) ? 11 : 19; + const uint32_t weight_range = (mode == 18) ? 11 : 8; + + color_cell_compressor_params ccell_params; + memset(&ccell_params, 0, sizeof(ccell_params)); + + ccell_params.m_num_pixels = 16; + ccell_params.m_pPixels = (color_quad_u8*)&block[0][0]; + ccell_params.m_num_selector_weights = (mode == 18) ? 32 : 16; + ccell_params.m_pSelector_weights = (mode == 18) ? g_astc_weights5 : g_astc_weights4; + ccell_params.m_pSelector_weightsx = (mode == 18) ? (const bc7enc_vec4F*)g_astc_weights5x : (const bc7enc_vec4F*)g_astc_weights4x; + ccell_params.m_astc_endpoint_range = endpoint_range; + ccell_params.m_weights[0] = 1; + ccell_params.m_weights[1] = 1; + ccell_params.m_weights[2] = 1; + ccell_params.m_weights[3] = 1; + ccell_params.m_pForce_selectors = pForce_selectors; + + color_cell_compressor_results ccell_results; + uint8_t ccell_result_selectors[16]; + uint8_t ccell_result_selectors_temp[16]; + memset(&ccell_results, 0, sizeof(ccell_results)); + ccell_results.m_pSelectors = &ccell_result_selectors[0]; + ccell_results.m_pSelectors_temp = &ccell_result_selectors_temp[0]; + + uint64_t part_err = color_cell_compression(255, &ccell_params, &ccell_results, &comp_params); + + // ASTC + astc_block_desc astc_results; + memset(&astc_results, 0, sizeof(astc_results)); + + astc_results.m_dual_plane = false; + astc_results.m_weight_range = weight_range;// (mode == 18) ? 11 : 8; + + astc_results.m_ccs = 0; + astc_results.m_subsets = 1; + astc_results.m_partition_seed = 0; + astc_results.m_cem = 8; + + astc_results.m_endpoints[0] = ccell_results.m_astc_low_endpoint.m_c[0]; + astc_results.m_endpoints[1] = ccell_results.m_astc_high_endpoint.m_c[0]; + astc_results.m_endpoints[2] = ccell_results.m_astc_low_endpoint.m_c[1]; + astc_results.m_endpoints[3] = ccell_results.m_astc_high_endpoint.m_c[1]; + astc_results.m_endpoints[4] = ccell_results.m_astc_low_endpoint.m_c[2]; + astc_results.m_endpoints[5] = ccell_results.m_astc_high_endpoint.m_c[2]; + + bool invert = false; + + if (pForce_selectors == nullptr) + { + int s0 = g_astc_unquant[endpoint_range][astc_results.m_endpoints[0]].m_unquant + g_astc_unquant[endpoint_range][astc_results.m_endpoints[2]].m_unquant + g_astc_unquant[endpoint_range][astc_results.m_endpoints[4]].m_unquant; + int s1 = g_astc_unquant[endpoint_range][astc_results.m_endpoints[1]].m_unquant + g_astc_unquant[endpoint_range][astc_results.m_endpoints[3]].m_unquant + g_astc_unquant[endpoint_range][astc_results.m_endpoints[5]].m_unquant; + if (s1 < s0) + { + std::swap(astc_results.m_endpoints[0], astc_results.m_endpoints[1]); + std::swap(astc_results.m_endpoints[2], astc_results.m_endpoints[3]); + std::swap(astc_results.m_endpoints[4], astc_results.m_endpoints[5]); + invert = true; + } + } + + for (uint32_t y = 0; y < 4; y++) + { + for (uint32_t x = 0; x < 4; x++) + { + astc_results.m_weights[x + y * 4] = ccell_result_selectors[x + y * 4]; + + if (invert) + astc_results.m_weights[x + y * 4] = ((mode == 18) ? 31 : 15) - astc_results.m_weights[x + y * 4]; + } + } + + assert(total_results < MAX_ENCODE_RESULTS); + if (total_results < MAX_ENCODE_RESULTS) + { + pResults[total_results].m_uastc_mode = mode; + pResults[total_results].m_common_pattern = 0; + pResults[total_results].m_astc = astc_results; + pResults[total_results].m_astc_err = part_err; + total_results++; + } + } + + // MODE 1 + // 1-subset, 2-bit indices, 8-bit endpoints, BC7 mode 3 + // DualPlane: 0, WeightRange: 2 (4), Subsets: 1, CEM: 8 (RGB Direct ), EndpointRange: 20 (256) MODE3 or MODE5 RGB + static void astc_mode1(const color_rgba block[4][4], uastc_encode_results* pResults, uint32_t& total_results, bc7enc_compress_block_params& comp_params) + { + color_cell_compressor_params ccell_params; + memset(&ccell_params, 0, sizeof(ccell_params)); + + ccell_params.m_num_pixels = 16; + ccell_params.m_pPixels = (color_quad_u8*)&block[0][0]; + ccell_params.m_num_selector_weights = 4; + ccell_params.m_pSelector_weights = g_bc7_weights2; + ccell_params.m_pSelector_weightsx = (const bc7enc_vec4F*)g_bc7_weights2x; + ccell_params.m_astc_endpoint_range = 20; + ccell_params.m_weights[0] = 1; + ccell_params.m_weights[1] = 1; + ccell_params.m_weights[2] = 1; + ccell_params.m_weights[3] = 1; + + color_cell_compressor_results ccell_results; + uint8_t ccell_result_selectors[16]; + uint8_t ccell_result_selectors_temp[16]; + memset(&ccell_results, 0, sizeof(ccell_results)); + ccell_results.m_pSelectors = &ccell_result_selectors[0]; + ccell_results.m_pSelectors_temp = &ccell_result_selectors_temp[0]; + + uint64_t part_err = color_cell_compression(255, &ccell_params, &ccell_results, &comp_params); + + // ASTC + astc_block_desc astc_results; + memset(&astc_results, 0, sizeof(astc_results)); + + astc_results.m_dual_plane = false; + astc_results.m_weight_range = 2; + + astc_results.m_ccs = 0; + astc_results.m_subsets = 1; + astc_results.m_partition_seed = 0; + astc_results.m_cem = 8; + + astc_results.m_endpoints[0] = ccell_results.m_astc_low_endpoint.m_c[0]; + astc_results.m_endpoints[1] = ccell_results.m_astc_high_endpoint.m_c[0]; + astc_results.m_endpoints[2] = ccell_results.m_astc_low_endpoint.m_c[1]; + astc_results.m_endpoints[3] = ccell_results.m_astc_high_endpoint.m_c[1]; + astc_results.m_endpoints[4] = ccell_results.m_astc_low_endpoint.m_c[2]; + astc_results.m_endpoints[5] = ccell_results.m_astc_high_endpoint.m_c[2]; + + const uint32_t range = 20; + + bool invert = false; + + int s0 = g_astc_unquant[range][astc_results.m_endpoints[0]].m_unquant + g_astc_unquant[range][astc_results.m_endpoints[2]].m_unquant + g_astc_unquant[range][astc_results.m_endpoints[4]].m_unquant; + int s1 = g_astc_unquant[range][astc_results.m_endpoints[1]].m_unquant + g_astc_unquant[range][astc_results.m_endpoints[3]].m_unquant + g_astc_unquant[range][astc_results.m_endpoints[5]].m_unquant; + if (s1 < s0) + { + std::swap(astc_results.m_endpoints[0], astc_results.m_endpoints[1]); + std::swap(astc_results.m_endpoints[2], astc_results.m_endpoints[3]); + std::swap(astc_results.m_endpoints[4], astc_results.m_endpoints[5]); + invert = true; + } + + for (uint32_t y = 0; y < 4; y++) + { + for (uint32_t x = 0; x < 4; x++) + { + astc_results.m_weights[x + y * 4] = ccell_result_selectors[x + y * 4]; + + if (invert) + astc_results.m_weights[x + y * 4] = 3 - astc_results.m_weights[x + y * 4]; + } + } + + assert(total_results < MAX_ENCODE_RESULTS); + if (total_results < MAX_ENCODE_RESULTS) + { + pResults[total_results].m_uastc_mode = 1; + pResults[total_results].m_common_pattern = 0; + pResults[total_results].m_astc = astc_results; + pResults[total_results].m_astc_err = part_err; + total_results++; + } + } + + static uint32_t estimate_partition2(uint32_t num_weights, uint32_t num_comps, const uint32_t* pWeights, const color_rgba block[4][4], const uint32_t weights[4]) + { + assert(pWeights[0] == 0 && pWeights[num_weights - 1] == 64); + + uint64_t best_err = UINT64_MAX; + uint32_t best_common_pattern = 0; + + for (uint32_t common_pattern = 0; common_pattern < TOTAL_ASTC_BC7_COMMON_PARTITIONS2; common_pattern++) + { + const uint32_t bc7_pattern = g_astc_bc7_common_partitions2[common_pattern].m_bc7; + + const uint8_t* pPartition = &g_bc7_partition2[bc7_pattern * 16]; + + color_quad_u8 subset_colors[2][16]; + uint32_t subset_total_colors[2] = { 0, 0 }; + for (uint32_t index = 0; index < 16; index++) + subset_colors[pPartition[index]][subset_total_colors[pPartition[index]]++] = ((const color_quad_u8*)block)[index]; + + uint64_t total_subset_err = 0; + for (uint32_t subset = 0; (subset < 2) && (total_subset_err < best_err); subset++) + total_subset_err += color_cell_compression_est_astc(num_weights, num_comps, pWeights, subset_total_colors[subset], &subset_colors[subset][0], best_err, weights); + + if (total_subset_err < best_err) + { + best_err = total_subset_err; + best_common_pattern = common_pattern; + } + } + + return best_common_pattern; + } + + // MODE 2 + // 2-subset, 3-bit indices, 4-bit endpoints, BC7 mode 1 + // DualPlane: 0, WeightRange: 5 (8), Subsets: 2, CEM: 8 (RGB Direct ), EndpointRange: 8 (16) MODE1 + static void astc_mode2(const color_rgba block[4][4], uastc_encode_results* pResults, uint32_t& total_results, bc7enc_compress_block_params& comp_params, bool estimate_partition) + { + uint32_t first_common_pattern = 0; + uint32_t last_common_pattern = TOTAL_ASTC_BC7_COMMON_PARTITIONS2; + + if (estimate_partition) + { + const uint32_t weights[4] = { 1, 1, 1, 1 }; + first_common_pattern = estimate_partition2(8, 3, g_bc7_weights3, block, weights); + last_common_pattern = first_common_pattern + 1; + } + + for (uint32_t common_pattern = first_common_pattern; common_pattern < last_common_pattern; common_pattern++) + { + const uint32_t bc7_pattern = g_astc_bc7_common_partitions2[common_pattern].m_bc7; + + color_rgba part_pixels[2][16]; + uint32_t part_pixel_index[4][4]; + uint32_t num_part_pixels[2] = { 0, 0 }; + + for (uint32_t y = 0; y < 4; y++) + { + for (uint32_t x = 0; x < 4; x++) + { + const uint32_t part = g_bc7_partition2[16 * bc7_pattern + x + y * 4]; + part_pixel_index[y][x] = num_part_pixels[part]; + part_pixels[part][num_part_pixels[part]++] = block[y][x]; + } + } + + color_cell_compressor_params ccell_params[2]; + color_cell_compressor_results ccell_results[2]; + uint8_t ccell_result_selectors[2][16]; + uint8_t ccell_result_selectors_temp[2][16]; + + uint64_t total_part_err = 0; + for (uint32_t part = 0; part < 2; part++) + { + memset(&ccell_params[part], 0, sizeof(ccell_params[part])); + + ccell_params[part].m_num_pixels = num_part_pixels[part]; + ccell_params[part].m_pPixels = (color_quad_u8*)&part_pixels[part][0]; + ccell_params[part].m_num_selector_weights = 8; + ccell_params[part].m_pSelector_weights = g_bc7_weights3; + ccell_params[part].m_pSelector_weightsx = (const bc7enc_vec4F*)g_bc7_weights3x; + ccell_params[part].m_astc_endpoint_range = 8; + ccell_params[part].m_weights[0] = 1; + ccell_params[part].m_weights[1] = 1; + ccell_params[part].m_weights[2] = 1; + ccell_params[part].m_weights[3] = 1; + + memset(&ccell_results[part], 0, sizeof(ccell_results[part])); + ccell_results[part].m_pSelectors = &ccell_result_selectors[part][0]; + ccell_results[part].m_pSelectors_temp = &ccell_result_selectors_temp[part][0]; + + uint64_t part_err = color_cell_compression(255, &ccell_params[part], &ccell_results[part], &comp_params); + total_part_err += part_err; + } // part + + { + // ASTC + astc_block_desc astc_results; + memset(&astc_results, 0, sizeof(astc_results)); + + astc_results.m_dual_plane = false; + astc_results.m_weight_range = 5; + + astc_results.m_ccs = 0; + astc_results.m_subsets = 2; + astc_results.m_partition_seed = g_astc_bc7_common_partitions2[common_pattern].m_astc; + astc_results.m_cem = 8; + + uint32_t p0 = 0; + uint32_t p1 = 1; + if (g_astc_bc7_common_partitions2[common_pattern].m_invert) + std::swap(p0, p1); + + astc_results.m_endpoints[0] = ccell_results[p0].m_astc_low_endpoint.m_c[0]; + astc_results.m_endpoints[1] = ccell_results[p0].m_astc_high_endpoint.m_c[0]; + astc_results.m_endpoints[2] = ccell_results[p0].m_astc_low_endpoint.m_c[1]; + astc_results.m_endpoints[3] = ccell_results[p0].m_astc_high_endpoint.m_c[1]; + astc_results.m_endpoints[4] = ccell_results[p0].m_astc_low_endpoint.m_c[2]; + astc_results.m_endpoints[5] = ccell_results[p0].m_astc_high_endpoint.m_c[2]; + + const uint32_t range = 8; + + bool invert[2] = { false, false }; + + int s0 = g_astc_unquant[range][astc_results.m_endpoints[0]].m_unquant + g_astc_unquant[range][astc_results.m_endpoints[2]].m_unquant + g_astc_unquant[range][astc_results.m_endpoints[4]].m_unquant; + int s1 = g_astc_unquant[range][astc_results.m_endpoints[1]].m_unquant + g_astc_unquant[range][astc_results.m_endpoints[3]].m_unquant + g_astc_unquant[range][astc_results.m_endpoints[5]].m_unquant; + if (s1 < s0) + { + std::swap(astc_results.m_endpoints[0], astc_results.m_endpoints[1]); + std::swap(astc_results.m_endpoints[2], astc_results.m_endpoints[3]); + std::swap(astc_results.m_endpoints[4], astc_results.m_endpoints[5]); + invert[0] = true; + } + + astc_results.m_endpoints[6] = ccell_results[p1].m_astc_low_endpoint.m_c[0]; + astc_results.m_endpoints[7] = ccell_results[p1].m_astc_high_endpoint.m_c[0]; + astc_results.m_endpoints[8] = ccell_results[p1].m_astc_low_endpoint.m_c[1]; + astc_results.m_endpoints[9] = ccell_results[p1].m_astc_high_endpoint.m_c[1]; + astc_results.m_endpoints[10] = ccell_results[p1].m_astc_low_endpoint.m_c[2]; + astc_results.m_endpoints[11] = ccell_results[p1].m_astc_high_endpoint.m_c[2]; + + s0 = g_astc_unquant[range][astc_results.m_endpoints[0 + 6]].m_unquant + g_astc_unquant[range][astc_results.m_endpoints[2 + 6]].m_unquant + g_astc_unquant[range][astc_results.m_endpoints[4 + 6]].m_unquant; + s1 = g_astc_unquant[range][astc_results.m_endpoints[1 + 6]].m_unquant + g_astc_unquant[range][astc_results.m_endpoints[3 + 6]].m_unquant + g_astc_unquant[range][astc_results.m_endpoints[5 + 6]].m_unquant; + + if (s1 < s0) + { + std::swap(astc_results.m_endpoints[0 + 6], astc_results.m_endpoints[1 + 6]); + std::swap(astc_results.m_endpoints[2 + 6], astc_results.m_endpoints[3 + 6]); + std::swap(astc_results.m_endpoints[4 + 6], astc_results.m_endpoints[5 + 6]); + invert[1] = true; + } + + for (uint32_t y = 0; y < 4; y++) + { + for (uint32_t x = 0; x < 4; x++) + { + const uint32_t bc7_part = g_bc7_partition2[16 * bc7_pattern + x + y * 4]; + + astc_results.m_weights[x + y * 4] = ccell_result_selectors[bc7_part][part_pixel_index[y][x]]; + + uint32_t astc_part = bc7_part; + if (g_astc_bc7_common_partitions2[common_pattern].m_invert) + astc_part = 1 - astc_part; + + if (invert[astc_part]) + astc_results.m_weights[x + y * 4] = 7 - astc_results.m_weights[x + y * 4]; + } + } + + assert(total_results < MAX_ENCODE_RESULTS); + if (total_results < MAX_ENCODE_RESULTS) + { + pResults[total_results].m_uastc_mode = 2; + pResults[total_results].m_common_pattern = common_pattern; + pResults[total_results].m_astc = astc_results; + pResults[total_results].m_astc_err = total_part_err; + total_results++; + } + } + + } // common_pattern + } + + // MODE 3 + // 3-subsets, 2-bit indices, [0,11] endpoints, BC7 mode 2 + // DualPlane: 0, WeightRange: 2 (4), Subsets: 3, CEM: 8 (RGB Direct ), EndpointRange: 7 (12) MODE2 + static void astc_mode3(const color_rgba block[4][4], uastc_encode_results* pResults, uint32_t& total_results, bc7enc_compress_block_params& comp_params, bool estimate_partition) + { + uint32_t first_common_pattern = 0; + uint32_t last_common_pattern = TOTAL_ASTC_BC7_COMMON_PARTITIONS3; + + if (estimate_partition) + { + uint64_t best_err = UINT64_MAX; + uint32_t best_common_pattern = 0; + const uint32_t weights[4] = { 1, 1, 1, 1 }; + + for (uint32_t common_pattern = 0; common_pattern < TOTAL_ASTC_BC7_COMMON_PARTITIONS3; common_pattern++) + { + const uint32_t bc7_pattern = g_astc_bc7_common_partitions3[common_pattern].m_bc7; + + const uint8_t* pPartition = &g_bc7_partition3[bc7_pattern * 16]; + + color_quad_u8 subset_colors[3][16]; + uint32_t subset_total_colors[3] = { 0, 0 }; + for (uint32_t index = 0; index < 16; index++) + subset_colors[pPartition[index]][subset_total_colors[pPartition[index]]++] = ((const color_quad_u8*)block)[index]; + + uint64_t total_subset_err = 0; + for (uint32_t subset = 0; (subset < 3) && (total_subset_err < best_err); subset++) + total_subset_err += color_cell_compression_est_astc(4, 3, g_bc7_weights2, subset_total_colors[subset], &subset_colors[subset][0], best_err, weights); + + if (total_subset_err < best_err) + { + best_err = total_subset_err; + best_common_pattern = common_pattern; + } + } + + first_common_pattern = best_common_pattern; + last_common_pattern = best_common_pattern + 1; + } + + for (uint32_t common_pattern = first_common_pattern; common_pattern < last_common_pattern; common_pattern++) + { + const uint32_t endpoint_range = 7; + + const uint32_t bc7_pattern = g_astc_bc7_common_partitions3[common_pattern].m_bc7; + + color_rgba part_pixels[3][16]; + uint32_t part_pixel_index[4][4]; + uint32_t num_part_pixels[3] = { 0, 0, 0 }; + + for (uint32_t y = 0; y < 4; y++) + { + for (uint32_t x = 0; x < 4; x++) + { + const uint32_t bc7_part = g_bc7_partition3[16 * bc7_pattern + x + y * 4]; + part_pixel_index[y][x] = num_part_pixels[bc7_part]; + part_pixels[bc7_part][num_part_pixels[bc7_part]++] = block[y][x]; + } + } + + color_cell_compressor_params ccell_params[3]; + color_cell_compressor_results ccell_results[3]; + uint8_t ccell_result_selectors[3][16]; + uint8_t ccell_result_selectors_temp[3][16]; + + uint64_t total_part_err = 0; + for (uint32_t bc7_part = 0; bc7_part < 3; bc7_part++) + { + memset(&ccell_params[bc7_part], 0, sizeof(ccell_params[bc7_part])); + + ccell_params[bc7_part].m_num_pixels = num_part_pixels[bc7_part]; + ccell_params[bc7_part].m_pPixels = (color_quad_u8*)&part_pixels[bc7_part][0]; + ccell_params[bc7_part].m_num_selector_weights = 4; + ccell_params[bc7_part].m_pSelector_weights = g_bc7_weights2; + ccell_params[bc7_part].m_pSelector_weightsx = (const bc7enc_vec4F*)g_bc7_weights2x; + ccell_params[bc7_part].m_astc_endpoint_range = endpoint_range; + ccell_params[bc7_part].m_weights[0] = 1; + ccell_params[bc7_part].m_weights[1] = 1; + ccell_params[bc7_part].m_weights[2] = 1; + ccell_params[bc7_part].m_weights[3] = 1; + + memset(&ccell_results[bc7_part], 0, sizeof(ccell_results[bc7_part])); + ccell_results[bc7_part].m_pSelectors = &ccell_result_selectors[bc7_part][0]; + ccell_results[bc7_part].m_pSelectors_temp = &ccell_result_selectors_temp[bc7_part][0]; + + uint64_t part_err = color_cell_compression(255, &ccell_params[bc7_part], &ccell_results[bc7_part], &comp_params); + total_part_err += part_err; + } // part + + { + // ASTC + astc_block_desc astc_results; + memset(&astc_results, 0, sizeof(astc_results)); + + astc_results.m_dual_plane = false; + astc_results.m_weight_range = 2; + + astc_results.m_ccs = 0; + astc_results.m_subsets = 3; + astc_results.m_partition_seed = g_astc_bc7_common_partitions3[common_pattern].m_astc; + astc_results.m_cem = 8; + + uint32_t astc_to_bc7_part[3]; // converts ASTC to BC7 partition index + const uint32_t perm = g_astc_bc7_common_partitions3[common_pattern].m_astc_to_bc7_perm; + astc_to_bc7_part[0] = g_astc_to_bc7_partition_index_perm_tables[perm][0]; + astc_to_bc7_part[1] = g_astc_to_bc7_partition_index_perm_tables[perm][1]; + astc_to_bc7_part[2] = g_astc_to_bc7_partition_index_perm_tables[perm][2]; + + bool invert_astc_part[3] = { false, false, false }; + + for (uint32_t astc_part = 0; astc_part < 3; astc_part++) + { + uint8_t* pEndpoints = &astc_results.m_endpoints[6 * astc_part]; + + pEndpoints[0] = ccell_results[astc_to_bc7_part[astc_part]].m_astc_low_endpoint.m_c[0]; + pEndpoints[1] = ccell_results[astc_to_bc7_part[astc_part]].m_astc_high_endpoint.m_c[0]; + pEndpoints[2] = ccell_results[astc_to_bc7_part[astc_part]].m_astc_low_endpoint.m_c[1]; + pEndpoints[3] = ccell_results[astc_to_bc7_part[astc_part]].m_astc_high_endpoint.m_c[1]; + pEndpoints[4] = ccell_results[astc_to_bc7_part[astc_part]].m_astc_low_endpoint.m_c[2]; + pEndpoints[5] = ccell_results[astc_to_bc7_part[astc_part]].m_astc_high_endpoint.m_c[2]; + + int s0 = g_astc_unquant[endpoint_range][pEndpoints[0]].m_unquant + g_astc_unquant[endpoint_range][pEndpoints[2]].m_unquant + g_astc_unquant[endpoint_range][pEndpoints[4]].m_unquant; + int s1 = g_astc_unquant[endpoint_range][pEndpoints[1]].m_unquant + g_astc_unquant[endpoint_range][pEndpoints[3]].m_unquant + g_astc_unquant[endpoint_range][pEndpoints[5]].m_unquant; + if (s1 < s0) + { + std::swap(pEndpoints[0], pEndpoints[1]); + std::swap(pEndpoints[2], pEndpoints[3]); + std::swap(pEndpoints[4], pEndpoints[5]); + invert_astc_part[astc_part] = true; + } + } + + for (uint32_t y = 0; y < 4; y++) + { + for (uint32_t x = 0; x < 4; x++) + { + const uint32_t bc7_part = g_bc7_partition3[16 * bc7_pattern + x + y * 4]; + + astc_results.m_weights[x + y * 4] = ccell_result_selectors[bc7_part][part_pixel_index[y][x]]; + + uint32_t astc_part = 0; + for (uint32_t i = 0; i < 3; i++) + { + if (astc_to_bc7_part[i] == bc7_part) + { + astc_part = i; + break; + } + } + + if (invert_astc_part[astc_part]) + astc_results.m_weights[x + y * 4] = 3 - astc_results.m_weights[x + y * 4]; + } + } + + assert(total_results < MAX_ENCODE_RESULTS); + if (total_results < MAX_ENCODE_RESULTS) + { + pResults[total_results].m_uastc_mode = 3; + pResults[total_results].m_common_pattern = common_pattern; + pResults[total_results].m_astc = astc_results; + pResults[total_results].m_astc_err = total_part_err; + total_results++; + } + + } + + } // common_pattern + } + + // MODE 4 + // DualPlane: 0, WeightRange: 2 (4), Subsets: 2, CEM: 8 (RGB Direct ), EndpointRange: 12 (40) MODE3 + static void astc_mode4(const color_rgba block[4][4], uastc_encode_results* pResults, uint32_t& total_results, bc7enc_compress_block_params& comp_params, bool estimate_partition) + { + //const uint32_t weight_range = 2; + const uint32_t endpoint_range = 12; + + uint32_t first_common_pattern = 0; + uint32_t last_common_pattern = TOTAL_ASTC_BC7_COMMON_PARTITIONS2; + + if (estimate_partition) + { + const uint32_t weights[4] = { 1, 1, 1, 1 }; + first_common_pattern = estimate_partition2(4, 3, g_bc7_weights2, block, weights); + last_common_pattern = first_common_pattern + 1; + } + + for (uint32_t common_pattern = first_common_pattern; common_pattern < last_common_pattern; common_pattern++) + { + const uint32_t bc7_pattern = g_astc_bc7_common_partitions2[common_pattern].m_bc7; + + color_rgba part_pixels[2][16]; + uint32_t part_pixel_index[4][4]; + uint32_t num_part_pixels[2] = { 0, 0 }; + + for (uint32_t y = 0; y < 4; y++) + { + for (uint32_t x = 0; x < 4; x++) + { + const uint32_t part = g_bc7_partition2[16 * bc7_pattern + x + y * 4]; + part_pixel_index[y][x] = num_part_pixels[part]; + part_pixels[part][num_part_pixels[part]++] = block[y][x]; + } + } + + color_cell_compressor_params ccell_params[2]; + color_cell_compressor_results ccell_results[2]; + uint8_t ccell_result_selectors[2][16]; + uint8_t ccell_result_selectors_temp[2][16]; + + uint64_t total_part_err = 0; + for (uint32_t part = 0; part < 2; part++) + { + memset(&ccell_params[part], 0, sizeof(ccell_params[part])); + + ccell_params[part].m_num_pixels = num_part_pixels[part]; + ccell_params[part].m_pPixels = (color_quad_u8*)&part_pixels[part][0]; + ccell_params[part].m_num_selector_weights = 4; + ccell_params[part].m_pSelector_weights = g_bc7_weights2; + ccell_params[part].m_pSelector_weightsx = (const bc7enc_vec4F*)g_bc7_weights2x; + ccell_params[part].m_astc_endpoint_range = endpoint_range; + ccell_params[part].m_weights[0] = 1; + ccell_params[part].m_weights[1] = 1; + ccell_params[part].m_weights[2] = 1; + ccell_params[part].m_weights[3] = 1; + + memset(&ccell_results[part], 0, sizeof(ccell_results[part])); + ccell_results[part].m_pSelectors = &ccell_result_selectors[part][0]; + ccell_results[part].m_pSelectors_temp = &ccell_result_selectors_temp[part][0]; + + uint64_t part_err = color_cell_compression(255, &ccell_params[part], &ccell_results[part], &comp_params); + total_part_err += part_err; + } // part + + // ASTC + astc_block_desc astc_results; + memset(&astc_results, 0, sizeof(astc_results)); + + astc_results.m_dual_plane = false; + astc_results.m_weight_range = 2; + + astc_results.m_ccs = 0; + astc_results.m_subsets = 2; + astc_results.m_partition_seed = g_astc_bc7_common_partitions2[common_pattern].m_astc; + astc_results.m_cem = 8; + + uint32_t p0 = 0; + uint32_t p1 = 1; + if (g_astc_bc7_common_partitions2[common_pattern].m_invert) + std::swap(p0, p1); + + astc_results.m_endpoints[0] = ccell_results[p0].m_astc_low_endpoint.m_c[0]; + astc_results.m_endpoints[1] = ccell_results[p0].m_astc_high_endpoint.m_c[0]; + astc_results.m_endpoints[2] = ccell_results[p0].m_astc_low_endpoint.m_c[1]; + astc_results.m_endpoints[3] = ccell_results[p0].m_astc_high_endpoint.m_c[1]; + astc_results.m_endpoints[4] = ccell_results[p0].m_astc_low_endpoint.m_c[2]; + astc_results.m_endpoints[5] = ccell_results[p0].m_astc_high_endpoint.m_c[2]; + + bool invert[2] = { false, false }; + + int s0 = g_astc_unquant[endpoint_range][astc_results.m_endpoints[0]].m_unquant + g_astc_unquant[endpoint_range][astc_results.m_endpoints[2]].m_unquant + g_astc_unquant[endpoint_range][astc_results.m_endpoints[4]].m_unquant; + int s1 = g_astc_unquant[endpoint_range][astc_results.m_endpoints[1]].m_unquant + g_astc_unquant[endpoint_range][astc_results.m_endpoints[3]].m_unquant + g_astc_unquant[endpoint_range][astc_results.m_endpoints[5]].m_unquant; + if (s1 < s0) + { + std::swap(astc_results.m_endpoints[0], astc_results.m_endpoints[1]); + std::swap(astc_results.m_endpoints[2], astc_results.m_endpoints[3]); + std::swap(astc_results.m_endpoints[4], astc_results.m_endpoints[5]); + invert[0] = true; + } + + astc_results.m_endpoints[6] = ccell_results[p1].m_astc_low_endpoint.m_c[0]; + astc_results.m_endpoints[7] = ccell_results[p1].m_astc_high_endpoint.m_c[0]; + astc_results.m_endpoints[8] = ccell_results[p1].m_astc_low_endpoint.m_c[1]; + astc_results.m_endpoints[9] = ccell_results[p1].m_astc_high_endpoint.m_c[1]; + astc_results.m_endpoints[10] = ccell_results[p1].m_astc_low_endpoint.m_c[2]; + astc_results.m_endpoints[11] = ccell_results[p1].m_astc_high_endpoint.m_c[2]; + + s0 = g_astc_unquant[endpoint_range][astc_results.m_endpoints[0 + 6]].m_unquant + g_astc_unquant[endpoint_range][astc_results.m_endpoints[2 + 6]].m_unquant + g_astc_unquant[endpoint_range][astc_results.m_endpoints[4 + 6]].m_unquant; + s1 = g_astc_unquant[endpoint_range][astc_results.m_endpoints[1 + 6]].m_unquant + g_astc_unquant[endpoint_range][astc_results.m_endpoints[3 + 6]].m_unquant + g_astc_unquant[endpoint_range][astc_results.m_endpoints[5 + 6]].m_unquant; + + if (s1 < s0) + { + std::swap(astc_results.m_endpoints[0 + 6], astc_results.m_endpoints[1 + 6]); + std::swap(astc_results.m_endpoints[2 + 6], astc_results.m_endpoints[3 + 6]); + std::swap(astc_results.m_endpoints[4 + 6], astc_results.m_endpoints[5 + 6]); + invert[1] = true; + } + + for (uint32_t y = 0; y < 4; y++) + { + for (uint32_t x = 0; x < 4; x++) + { + const uint32_t bc7_part = g_bc7_partition2[16 * bc7_pattern + x + y * 4]; + + astc_results.m_weights[x + y * 4] = ccell_result_selectors[bc7_part][part_pixel_index[y][x]]; + + uint32_t astc_part = bc7_part; + if (g_astc_bc7_common_partitions2[common_pattern].m_invert) + astc_part = 1 - astc_part; + + if (invert[astc_part]) + astc_results.m_weights[x + y * 4] = 3 - astc_results.m_weights[x + y * 4]; + } + } + + assert(total_results < MAX_ENCODE_RESULTS); + if (total_results < MAX_ENCODE_RESULTS) + { + pResults[total_results].m_uastc_mode = 4; + pResults[total_results].m_common_pattern = common_pattern; + pResults[total_results].m_astc = astc_results; + pResults[total_results].m_astc_err = total_part_err; + total_results++; + } + + } // common_pattern + } + + // MODE 5 + // DualPlane: 0, WeightRange: 5 (8), Subsets: 1, CEM: 8 (RGB Direct ), EndpointRange: 20 (256) BC7 MODE 6 (or MODE 1 1-subset) + static void astc_mode5(const color_rgba block[4][4], uastc_encode_results* pResults, uint32_t& total_results, bc7enc_compress_block_params& comp_params) + { + const uint32_t weight_range = 5; + const uint32_t endpoint_range = 20; + + color_cell_compressor_params ccell_params; + memset(&ccell_params, 0, sizeof(ccell_params)); + + ccell_params.m_num_pixels = 16; + ccell_params.m_pPixels = (color_quad_u8*)&block[0][0]; + ccell_params.m_num_selector_weights = 8; + ccell_params.m_pSelector_weights = g_bc7_weights3; + ccell_params.m_pSelector_weightsx = (const bc7enc_vec4F*)g_bc7_weights3x; + ccell_params.m_astc_endpoint_range = endpoint_range; + ccell_params.m_weights[0] = 1; + ccell_params.m_weights[1] = 1; + ccell_params.m_weights[2] = 1; + ccell_params.m_weights[3] = 1; + + color_cell_compressor_results ccell_results; + uint8_t ccell_result_selectors[16]; + uint8_t ccell_result_selectors_temp[16]; + memset(&ccell_results, 0, sizeof(ccell_results)); + ccell_results.m_pSelectors = &ccell_result_selectors[0]; + ccell_results.m_pSelectors_temp = &ccell_result_selectors_temp[0]; + + uint64_t part_err = color_cell_compression(255, &ccell_params, &ccell_results, &comp_params); + + // ASTC + astc_block_desc blk; + memset(&blk, 0, sizeof(blk)); + + blk.m_dual_plane = false; + blk.m_weight_range = weight_range; + + blk.m_ccs = 0; + blk.m_subsets = 1; + blk.m_partition_seed = 0; + blk.m_cem = 8; + + blk.m_endpoints[0] = ccell_results.m_astc_low_endpoint.m_c[0]; + blk.m_endpoints[1] = ccell_results.m_astc_high_endpoint.m_c[0]; + blk.m_endpoints[2] = ccell_results.m_astc_low_endpoint.m_c[1]; + blk.m_endpoints[3] = ccell_results.m_astc_high_endpoint.m_c[1]; + blk.m_endpoints[4] = ccell_results.m_astc_low_endpoint.m_c[2]; + blk.m_endpoints[5] = ccell_results.m_astc_high_endpoint.m_c[2]; + + bool invert = false; + + int s0 = g_astc_unquant[endpoint_range][blk.m_endpoints[0]].m_unquant + g_astc_unquant[endpoint_range][blk.m_endpoints[2]].m_unquant + g_astc_unquant[endpoint_range][blk.m_endpoints[4]].m_unquant; + int s1 = g_astc_unquant[endpoint_range][blk.m_endpoints[1]].m_unquant + g_astc_unquant[endpoint_range][blk.m_endpoints[3]].m_unquant + g_astc_unquant[endpoint_range][blk.m_endpoints[5]].m_unquant; + if (s1 < s0) + { + std::swap(blk.m_endpoints[0], blk.m_endpoints[1]); + std::swap(blk.m_endpoints[2], blk.m_endpoints[3]); + std::swap(blk.m_endpoints[4], blk.m_endpoints[5]); + invert = true; + } + + for (uint32_t y = 0; y < 4; y++) + { + for (uint32_t x = 0; x < 4; x++) + { + blk.m_weights[x + y * 4] = ccell_result_selectors[x + y * 4]; + + if (invert) + blk.m_weights[x + y * 4] = 7 - blk.m_weights[x + y * 4]; + } + } + + assert(total_results < MAX_ENCODE_RESULTS); + if (total_results < MAX_ENCODE_RESULTS) + { + pResults[total_results].m_uastc_mode = 5; + pResults[total_results].m_common_pattern = 0; + pResults[total_results].m_astc = blk; + pResults[total_results].m_astc_err = part_err; + total_results++; + } + } + + // MODE 6 + // DualPlane: 1, WeightRange: 2 (4), Subsets: 1, CEM: 8 (RGB Direct ), EndpointRange: 18 (160) BC7 MODE5 + static void astc_mode6(const color_rgba block[4][4], uastc_encode_results* pResults, uint32_t& total_results, bc7enc_compress_block_params& comp_params) + { + for (uint32_t rot_comp = 0; rot_comp < 3; rot_comp++) + { + const uint32_t weight_range = 2; + const uint32_t endpoint_range = 18; + + color_quad_u8 block_rgb[16]; + color_quad_u8 block_a[16]; + for (uint32_t i = 0; i < 16; i++) + { + block_rgb[i] = ((color_quad_u8*)&block[0][0])[i]; + block_a[i] = block_rgb[i]; + + uint8_t c = block_a[i].m_c[rot_comp]; + block_a[i].m_c[0] = c; + block_a[i].m_c[1] = c; + block_a[i].m_c[2] = c; + block_a[i].m_c[3] = 255; + + block_rgb[i].m_c[rot_comp] = 255; + } + + uint8_t ccell_result_selectors_temp[16]; + + color_cell_compressor_params ccell_params_rgb; + memset(&ccell_params_rgb, 0, sizeof(ccell_params_rgb)); + + ccell_params_rgb.m_num_pixels = 16; + ccell_params_rgb.m_pPixels = block_rgb; + ccell_params_rgb.m_num_selector_weights = 4; + ccell_params_rgb.m_pSelector_weights = g_bc7_weights2; + ccell_params_rgb.m_pSelector_weightsx = (const bc7enc_vec4F*)g_bc7_weights2x; + ccell_params_rgb.m_astc_endpoint_range = endpoint_range; + ccell_params_rgb.m_weights[0] = 1; + ccell_params_rgb.m_weights[1] = 1; + ccell_params_rgb.m_weights[2] = 1; + ccell_params_rgb.m_weights[3] = 1; + + color_cell_compressor_results ccell_results_rgb; + uint8_t ccell_result_selectors_rgb[16]; + memset(&ccell_results_rgb, 0, sizeof(ccell_results_rgb)); + ccell_results_rgb.m_pSelectors = &ccell_result_selectors_rgb[0]; + ccell_results_rgb.m_pSelectors_temp = &ccell_result_selectors_temp[0]; + + uint64_t part_err_rgb = color_cell_compression(255, &ccell_params_rgb, &ccell_results_rgb, &comp_params); + assert(ccell_results_rgb.m_low_endpoint.m_c[rot_comp] == ccell_results_rgb.m_high_endpoint.m_c[rot_comp]); + + color_cell_compressor_params ccell_params_a; + memset(&ccell_params_a, 0, sizeof(ccell_params_a)); + + ccell_params_a.m_num_pixels = 16; + ccell_params_a.m_pPixels = block_a; + ccell_params_a.m_num_selector_weights = 4; + ccell_params_a.m_pSelector_weights = g_bc7_weights2; + ccell_params_a.m_pSelector_weightsx = (const bc7enc_vec4F*)g_bc7_weights2x; + ccell_params_a.m_astc_endpoint_range = endpoint_range; + ccell_params_a.m_weights[0] = 1; + ccell_params_a.m_weights[1] = 1; + ccell_params_a.m_weights[2] = 1; + ccell_params_a.m_weights[3] = 1; + + color_cell_compressor_results ccell_results_a; + uint8_t ccell_result_selectors_a[16]; + memset(&ccell_results_a, 0, sizeof(ccell_results_a)); + ccell_results_a.m_pSelectors = &ccell_result_selectors_a[0]; + ccell_results_a.m_pSelectors_temp = &ccell_result_selectors_temp[0]; + + uint64_t part_err_a = color_cell_compression(255, &ccell_params_a, &ccell_results_a, &comp_params) / 3; + + uint64_t total_err = part_err_rgb + part_err_a; + + // ASTC + astc_block_desc blk; + memset(&blk, 0, sizeof(blk)); + + blk.m_dual_plane = true; + blk.m_weight_range = weight_range; + + blk.m_ccs = rot_comp; + blk.m_subsets = 1; + blk.m_partition_seed = 0; + blk.m_cem = 8; + + blk.m_endpoints[0] = (rot_comp == 0 ? ccell_results_a : ccell_results_rgb).m_astc_low_endpoint.m_c[0]; + blk.m_endpoints[1] = (rot_comp == 0 ? ccell_results_a : ccell_results_rgb).m_astc_high_endpoint.m_c[0]; + blk.m_endpoints[2] = (rot_comp == 1 ? ccell_results_a : ccell_results_rgb).m_astc_low_endpoint.m_c[1]; + blk.m_endpoints[3] = (rot_comp == 1 ? ccell_results_a : ccell_results_rgb).m_astc_high_endpoint.m_c[1]; + blk.m_endpoints[4] = (rot_comp == 2 ? ccell_results_a : ccell_results_rgb).m_astc_low_endpoint.m_c[2]; + blk.m_endpoints[5] = (rot_comp == 2 ? ccell_results_a : ccell_results_rgb).m_astc_high_endpoint.m_c[2]; + + bool invert = false; + + int s0 = g_astc_unquant[endpoint_range][blk.m_endpoints[0]].m_unquant + g_astc_unquant[endpoint_range][blk.m_endpoints[2]].m_unquant + g_astc_unquant[endpoint_range][blk.m_endpoints[4]].m_unquant; + int s1 = g_astc_unquant[endpoint_range][blk.m_endpoints[1]].m_unquant + g_astc_unquant[endpoint_range][blk.m_endpoints[3]].m_unquant + g_astc_unquant[endpoint_range][blk.m_endpoints[5]].m_unquant; + if (s1 < s0) + { + std::swap(blk.m_endpoints[0], blk.m_endpoints[1]); + std::swap(blk.m_endpoints[2], blk.m_endpoints[3]); + std::swap(blk.m_endpoints[4], blk.m_endpoints[5]); + invert = true; + } + + for (uint32_t y = 0; y < 4; y++) + { + for (uint32_t x = 0; x < 4; x++) + { + uint32_t rgb_index = ccell_result_selectors_rgb[x + y * 4]; + uint32_t a_index = ccell_result_selectors_a[x + y * 4]; + + if (invert) + { + rgb_index = 3 - rgb_index; + a_index = 3 - a_index; + } + + blk.m_weights[(x + y * 4) * 2 + 0] = (uint8_t)rgb_index; + blk.m_weights[(x + y * 4) * 2 + 1] = (uint8_t)a_index; + } + } + + assert(total_results < MAX_ENCODE_RESULTS); + if (total_results < MAX_ENCODE_RESULTS) + { + pResults[total_results].m_uastc_mode = 6; + pResults[total_results].m_common_pattern = 0; + pResults[total_results].m_astc = blk; + pResults[total_results].m_astc_err = total_err; + total_results++; + } + } // rot_comp + } + + // MODE 7 - 2 subset ASTC, 3 subset BC7 + // DualPlane: 0, WeightRange: 2 (4), Subsets: 2, CEM: 8 (RGB Direct ), EndpointRange: 12 (40) MODE2 + static void astc_mode7(const color_rgba block[4][4], uastc_encode_results* pResults, uint32_t& total_results, bc7enc_compress_block_params& comp_params, bool estimate_partition) + { + uint32_t first_common_pattern = 0; + uint32_t last_common_pattern = TOTAL_BC7_3_ASTC2_COMMON_PARTITIONS; + + if (estimate_partition) + { + uint64_t best_err = UINT64_MAX; + uint32_t best_common_pattern = 0; + const uint32_t weights[4] = { 1, 1, 1, 1 }; + + for (uint32_t common_pattern = 0; common_pattern < TOTAL_BC7_3_ASTC2_COMMON_PARTITIONS; common_pattern++) + { + const uint8_t* pPartition = &g_bc7_3_astc2_patterns2[common_pattern][0]; + +#ifdef _DEBUG + const uint32_t astc_pattern = g_bc7_3_astc2_common_partitions[common_pattern].m_astc2; + const uint32_t bc7_pattern = g_bc7_3_astc2_common_partitions[common_pattern].m_bc73; + const uint32_t common_pattern_k = g_bc7_3_astc2_common_partitions[common_pattern].k; + + for (uint32_t y = 0; y < 4; y++) + { + for (uint32_t x = 0; x < 4; x++) + { + const uint32_t astc_part = bc7_convert_partition_index_3_to_2(g_bc7_partition3[16 * bc7_pattern + x + y * 4], common_pattern_k); + assert((int)astc_part == astc_compute_texel_partition(astc_pattern, x, y, 0, 2, true)); + assert(astc_part == pPartition[x + y * 4]); + } + } +#endif + + color_quad_u8 subset_colors[2][16]; + uint32_t subset_total_colors[2] = { 0, 0 }; + for (uint32_t index = 0; index < 16; index++) + subset_colors[pPartition[index]][subset_total_colors[pPartition[index]]++] = ((const color_quad_u8*)block)[index]; + + uint64_t total_subset_err = 0; + for (uint32_t subset = 0; (subset < 2) && (total_subset_err < best_err); subset++) + total_subset_err += color_cell_compression_est_astc(4, 3, g_bc7_weights2, subset_total_colors[subset], &subset_colors[subset][0], best_err, weights); + + if (total_subset_err < best_err) + { + best_err = total_subset_err; + best_common_pattern = common_pattern; + } + } + + first_common_pattern = best_common_pattern; + last_common_pattern = best_common_pattern + 1; + } + + //const uint32_t weight_range = 2; + const uint32_t endpoint_range = 12; + + for (uint32_t common_pattern = first_common_pattern; common_pattern < last_common_pattern; common_pattern++) + { + const uint32_t astc_pattern = g_bc7_3_astc2_common_partitions[common_pattern].m_astc2; + const uint32_t bc7_pattern = g_bc7_3_astc2_common_partitions[common_pattern].m_bc73; + const uint32_t common_pattern_k = g_bc7_3_astc2_common_partitions[common_pattern].k; + + color_rgba part_pixels[2][16]; + uint32_t part_pixel_index[4][4]; + uint32_t num_part_pixels[2] = { 0, 0 }; + + for (uint32_t y = 0; y < 4; y++) + { + for (uint32_t x = 0; x < 4; x++) + { + const uint32_t astc_part = bc7_convert_partition_index_3_to_2(g_bc7_partition3[16 * bc7_pattern + x + y * 4], common_pattern_k); +#ifdef _DEBUG + assert((int)astc_part == astc_compute_texel_partition(astc_pattern, x, y, 0, 2, true)); +#endif + + part_pixel_index[y][x] = num_part_pixels[astc_part]; + part_pixels[astc_part][num_part_pixels[astc_part]++] = block[y][x]; + } + } + + color_cell_compressor_params ccell_params[2]; + color_cell_compressor_results ccell_results[2]; + uint8_t ccell_result_selectors[2][16]; + uint8_t ccell_result_selectors_temp[2][16]; + + uint64_t total_part_err = 0; + for (uint32_t part = 0; part < 2; part++) + { + memset(&ccell_params[part], 0, sizeof(ccell_params[part])); + + ccell_params[part].m_num_pixels = num_part_pixels[part]; + ccell_params[part].m_pPixels = (color_quad_u8*)&part_pixels[part][0]; + ccell_params[part].m_num_selector_weights = 4; + ccell_params[part].m_pSelector_weights = g_bc7_weights2; + ccell_params[part].m_pSelector_weightsx = (const bc7enc_vec4F*)g_bc7_weights2x; + ccell_params[part].m_astc_endpoint_range = endpoint_range; + ccell_params[part].m_weights[0] = 1; + ccell_params[part].m_weights[1] = 1; + ccell_params[part].m_weights[2] = 1; + ccell_params[part].m_weights[3] = 1; + + memset(&ccell_results[part], 0, sizeof(ccell_results[part])); + ccell_results[part].m_pSelectors = &ccell_result_selectors[part][0]; + ccell_results[part].m_pSelectors_temp = &ccell_result_selectors_temp[part][0]; + + uint64_t part_err = color_cell_compression(255, &ccell_params[part], &ccell_results[part], &comp_params); + total_part_err += part_err; + } // part + + // ASTC + astc_block_desc blk; + memset(&blk, 0, sizeof(blk)); + + blk.m_dual_plane = false; + blk.m_weight_range = 2; + + blk.m_ccs = 0; + blk.m_subsets = 2; + blk.m_partition_seed = astc_pattern; + blk.m_cem = 8; + + const uint32_t p0 = 0; + const uint32_t p1 = 1; + + blk.m_endpoints[0] = ccell_results[p0].m_astc_low_endpoint.m_c[0]; + blk.m_endpoints[1] = ccell_results[p0].m_astc_high_endpoint.m_c[0]; + blk.m_endpoints[2] = ccell_results[p0].m_astc_low_endpoint.m_c[1]; + blk.m_endpoints[3] = ccell_results[p0].m_astc_high_endpoint.m_c[1]; + blk.m_endpoints[4] = ccell_results[p0].m_astc_low_endpoint.m_c[2]; + blk.m_endpoints[5] = ccell_results[p0].m_astc_high_endpoint.m_c[2]; + + bool invert[2] = { false, false }; + + int s0 = g_astc_unquant[endpoint_range][blk.m_endpoints[0]].m_unquant + g_astc_unquant[endpoint_range][blk.m_endpoints[2]].m_unquant + g_astc_unquant[endpoint_range][blk.m_endpoints[4]].m_unquant; + int s1 = g_astc_unquant[endpoint_range][blk.m_endpoints[1]].m_unquant + g_astc_unquant[endpoint_range][blk.m_endpoints[3]].m_unquant + g_astc_unquant[endpoint_range][blk.m_endpoints[5]].m_unquant; + if (s1 < s0) + { + std::swap(blk.m_endpoints[0], blk.m_endpoints[1]); + std::swap(blk.m_endpoints[2], blk.m_endpoints[3]); + std::swap(blk.m_endpoints[4], blk.m_endpoints[5]); + invert[0] = true; + } + + blk.m_endpoints[6] = ccell_results[p1].m_astc_low_endpoint.m_c[0]; + blk.m_endpoints[7] = ccell_results[p1].m_astc_high_endpoint.m_c[0]; + blk.m_endpoints[8] = ccell_results[p1].m_astc_low_endpoint.m_c[1]; + blk.m_endpoints[9] = ccell_results[p1].m_astc_high_endpoint.m_c[1]; + blk.m_endpoints[10] = ccell_results[p1].m_astc_low_endpoint.m_c[2]; + blk.m_endpoints[11] = ccell_results[p1].m_astc_high_endpoint.m_c[2]; + + s0 = g_astc_unquant[endpoint_range][blk.m_endpoints[0 + 6]].m_unquant + g_astc_unquant[endpoint_range][blk.m_endpoints[2 + 6]].m_unquant + g_astc_unquant[endpoint_range][blk.m_endpoints[4 + 6]].m_unquant; + s1 = g_astc_unquant[endpoint_range][blk.m_endpoints[1 + 6]].m_unquant + g_astc_unquant[endpoint_range][blk.m_endpoints[3 + 6]].m_unquant + g_astc_unquant[endpoint_range][blk.m_endpoints[5 + 6]].m_unquant; + + if (s1 < s0) + { + std::swap(blk.m_endpoints[0 + 6], blk.m_endpoints[1 + 6]); + std::swap(blk.m_endpoints[2 + 6], blk.m_endpoints[3 + 6]); + std::swap(blk.m_endpoints[4 + 6], blk.m_endpoints[5 + 6]); + invert[1] = true; + } + + for (uint32_t y = 0; y < 4; y++) + { + for (uint32_t x = 0; x < 4; x++) + { + const uint32_t astc_part = bc7_convert_partition_index_3_to_2(g_bc7_partition3[16 * bc7_pattern + x + y * 4], common_pattern_k); + + blk.m_weights[x + y * 4] = ccell_result_selectors[astc_part][part_pixel_index[y][x]]; + + if (invert[astc_part]) + blk.m_weights[x + y * 4] = 3 - blk.m_weights[x + y * 4]; + } + } + + assert(total_results < MAX_ENCODE_RESULTS); + if (total_results < MAX_ENCODE_RESULTS) + { + pResults[total_results].m_uastc_mode = 7; + pResults[total_results].m_common_pattern = common_pattern; + pResults[total_results].m_astc = blk; + pResults[total_results].m_astc_err = total_part_err; + total_results++; + } + + } // common_pattern + } + + static void estimate_partition2_list(uint32_t num_weights, uint32_t num_comps, const uint32_t* pWeights, const color_rgba block[4][4], uint32_t* pParts, uint32_t max_parts, const uint32_t weights[4]) + { + assert(pWeights[0] == 0 && pWeights[num_weights - 1] == 64); + + const uint32_t MAX_PARTS = 8; + assert(max_parts <= MAX_PARTS); + + uint64_t part_error[MAX_PARTS]; + memset(part_error, 0xFF, sizeof(part_error)); + memset(pParts, 0, sizeof(pParts[0]) * max_parts); + + for (uint32_t common_pattern = 0; common_pattern < TOTAL_ASTC_BC7_COMMON_PARTITIONS2; common_pattern++) + { + const uint32_t bc7_pattern = g_astc_bc7_common_partitions2[common_pattern].m_bc7; + + const uint8_t* pPartition = &g_bc7_partition2[bc7_pattern * 16]; + + color_quad_u8 subset_colors[2][16]; + uint32_t subset_total_colors[2] = { 0, 0 }; + for (uint32_t index = 0; index < 16; index++) + subset_colors[pPartition[index]][subset_total_colors[pPartition[index]]++] = ((const color_quad_u8*)block)[index]; + + uint64_t total_subset_err = 0; + for (uint32_t subset = 0; subset < 2; subset++) + total_subset_err += color_cell_compression_est_astc(num_weights, num_comps, pWeights, subset_total_colors[subset], &subset_colors[subset][0], UINT64_MAX, weights); + + for (int i = 0; i < (int)max_parts; i++) + { + if (total_subset_err < part_error[i]) + { + for (int j = max_parts - 1; j > i; --j) + { + pParts[j] = pParts[j - 1]; + part_error[j] = part_error[j - 1]; + } + + pParts[i] = common_pattern; + part_error[i] = total_subset_err; + + break; + } + } + } + +#ifdef _DEBUG + for (uint32_t i = 0; i < max_parts - 1; i++) + { + assert(part_error[i] <= part_error[i + 1]); + } +#endif + } + + // 9. DualPlane: 0, WeightRange: 2 (4), Subsets: 2, CEM: 12 (RGBA Direct), EndpointRange: 8 (16) - BC7 MODE 7 + // 16. DualPlane: 0, WeightRange : 2 (4), Subsets : 2, CEM: 4 (LA Direct), EndpointRange : 20 (256) - BC7 MODE 7 + static void astc_mode9_or_16(uint32_t mode, const color_rgba source_block[4][4], uastc_encode_results* pResults, uint32_t& total_results, bc7enc_compress_block_params& comp_params, uint32_t estimate_partition_list_size) + { + assert(mode == 9 || mode == 16); + + const color_rgba* pBlock = &source_block[0][0]; + + color_rgba temp_block[16]; + if (mode == 16) + { + for (uint32_t i = 0; i < 16; i++) + { + if (mode == 16) + { + assert(pBlock[i].r == pBlock[i].g); + assert(pBlock[i].r == pBlock[i].b); + } + + const uint32_t l = pBlock[i].r; + const uint32_t a = pBlock[i].a; + + // Use (l,0,0,a) not (l,l,l,a) so both components are treated equally. + temp_block[i].set_noclamp_rgba(l, 0, 0, a); + } + + pBlock = temp_block; + } + + const uint32_t weights[4] = { 1, 1, 1, 1 }; + + //const uint32_t weight_range = 2; + const uint32_t endpoint_range = (mode == 16) ? 20 : 8; + + uint32_t first_common_pattern = 0; + uint32_t last_common_pattern = TOTAL_ASTC_BC7_COMMON_PARTITIONS2; + bool use_part_list = false; + + const uint32_t MAX_PARTS = 8; + uint32_t parts[MAX_PARTS]; + + if (estimate_partition_list_size == 1) + { + first_common_pattern = estimate_partition2(4, 4, g_bc7_weights2, (const color_rgba(*)[4])pBlock, weights); + last_common_pattern = first_common_pattern + 1; + } + else if (estimate_partition_list_size > 0) + { + assert(estimate_partition_list_size <= MAX_PARTS); + estimate_partition_list_size = std::min(estimate_partition_list_size, MAX_PARTS); + + estimate_partition2_list(4, 4, g_bc7_weights2, (const color_rgba(*)[4])pBlock, parts, estimate_partition_list_size, weights); + + first_common_pattern = 0; + last_common_pattern = estimate_partition_list_size; + use_part_list = true; + +#ifdef _DEBUG + assert(parts[0] == estimate_partition2(4, 4, g_bc7_weights2, (const color_rgba(*)[4])pBlock, weights)); +#endif + } + + for (uint32_t common_pattern_iter = first_common_pattern; common_pattern_iter < last_common_pattern; common_pattern_iter++) + { + const uint32_t common_pattern = use_part_list ? parts[common_pattern_iter] : common_pattern_iter; + + const uint32_t bc7_pattern = g_astc_bc7_common_partitions2[common_pattern].m_bc7; + + color_rgba part_pixels[2][16]; + uint32_t part_pixel_index[4][4]; + uint32_t num_part_pixels[2] = { 0, 0 }; + + for (uint32_t y = 0; y < 4; y++) + { + for (uint32_t x = 0; x < 4; x++) + { + const uint32_t part = g_bc7_partition2[16 * bc7_pattern + x + y * 4]; + part_pixel_index[y][x] = num_part_pixels[part]; + part_pixels[part][num_part_pixels[part]++] = pBlock[y * 4 + x]; + } + } + + color_cell_compressor_params ccell_params[2]; + color_cell_compressor_results ccell_results[2]; + uint8_t ccell_result_selectors[2][16]; + uint8_t ccell_result_selectors_temp[2][16]; + + uint64_t total_err = 0; + for (uint32_t subset = 0; subset < 2; subset++) + { + memset(&ccell_params[subset], 0, sizeof(ccell_params[subset])); + + ccell_params[subset].m_num_pixels = num_part_pixels[subset]; + ccell_params[subset].m_pPixels = (color_quad_u8*)&part_pixels[subset][0]; + ccell_params[subset].m_num_selector_weights = 4; + ccell_params[subset].m_pSelector_weights = g_bc7_weights2; + ccell_params[subset].m_pSelector_weightsx = (const bc7enc_vec4F*)g_bc7_weights2x; + ccell_params[subset].m_astc_endpoint_range = endpoint_range; + ccell_params[subset].m_weights[0] = weights[0]; + ccell_params[subset].m_weights[1] = weights[1]; + ccell_params[subset].m_weights[2] = weights[2]; + ccell_params[subset].m_weights[3] = weights[3]; + ccell_params[subset].m_has_alpha = true; + + memset(&ccell_results[subset], 0, sizeof(ccell_results[subset])); + ccell_results[subset].m_pSelectors = &ccell_result_selectors[subset][0]; + ccell_results[subset].m_pSelectors_temp = &ccell_result_selectors_temp[subset][0]; + + uint64_t subset_err = color_cell_compression(255, &ccell_params[subset], &ccell_results[subset], &comp_params); + + if (mode == 16) + { + color_rgba colors[4]; + for (uint32_t c = 0; c < 4; c++) + { + colors[0].m_comps[c] = g_astc_unquant[endpoint_range][ccell_results[subset].m_astc_low_endpoint.m_c[(c < 3) ? 0 : 3]].m_unquant; + colors[3].m_comps[c] = g_astc_unquant[endpoint_range][ccell_results[subset].m_astc_high_endpoint.m_c[(c < 3) ? 0 : 3]].m_unquant; + } + + for (uint32_t i = 1; i < 4 - 1; i++) + for (uint32_t c = 0; c < 4; c++) + colors[i].m_comps[c] = (uint8_t)astc_interpolate(colors[0].m_comps[c], colors[3].m_comps[c], g_bc7_weights2[i], false); + + for (uint32_t p = 0; p < ccell_params[subset].m_num_pixels; p++) + { + color_rgba orig_pix(part_pixels[subset][p]); + orig_pix.g = orig_pix.r; + orig_pix.b = orig_pix.r; + total_err += color_distance_la(orig_pix, colors[ccell_result_selectors[subset][p]]); + } + } + else + { + total_err += subset_err; + } + } // subset + + // ASTC + astc_block_desc astc_results; + memset(&astc_results, 0, sizeof(astc_results)); + + astc_results.m_dual_plane = false; + astc_results.m_weight_range = 2; + + astc_results.m_ccs = 0; + astc_results.m_subsets = 2; + astc_results.m_partition_seed = g_astc_bc7_common_partitions2[common_pattern].m_astc; + astc_results.m_cem = (mode == 16) ? 4 : 12; + + uint32_t part[2] = { 0, 1 }; + if (g_astc_bc7_common_partitions2[common_pattern].m_invert) + std::swap(part[0], part[1]); + + bool invert[2] = { false, false }; + + for (uint32_t p = 0; p < 2; p++) + { + if (mode == 16) + { + astc_results.m_endpoints[p * 4 + 0] = ccell_results[part[p]].m_astc_low_endpoint.m_c[0]; + astc_results.m_endpoints[p * 4 + 1] = ccell_results[part[p]].m_astc_high_endpoint.m_c[0]; + + astc_results.m_endpoints[p * 4 + 2] = ccell_results[part[p]].m_astc_low_endpoint.m_c[3]; + astc_results.m_endpoints[p * 4 + 3] = ccell_results[part[p]].m_astc_high_endpoint.m_c[3]; + } + else + { + for (uint32_t c = 0; c < 4; c++) + { + astc_results.m_endpoints[p * 8 + c * 2] = ccell_results[part[p]].m_astc_low_endpoint.m_c[c]; + astc_results.m_endpoints[p * 8 + c * 2 + 1] = ccell_results[part[p]].m_astc_high_endpoint.m_c[c]; + } + + int s0 = g_astc_unquant[endpoint_range][astc_results.m_endpoints[p * 8 + 0]].m_unquant + + g_astc_unquant[endpoint_range][astc_results.m_endpoints[p * 8 + 2]].m_unquant + + g_astc_unquant[endpoint_range][astc_results.m_endpoints[p * 8 + 4]].m_unquant; + + int s1 = g_astc_unquant[endpoint_range][astc_results.m_endpoints[p * 8 + 1]].m_unquant + + g_astc_unquant[endpoint_range][astc_results.m_endpoints[p * 8 + 3]].m_unquant + + g_astc_unquant[endpoint_range][astc_results.m_endpoints[p * 8 + 5]].m_unquant; + + if (s1 < s0) + { + std::swap(astc_results.m_endpoints[p * 8 + 0], astc_results.m_endpoints[p * 8 + 1]); + std::swap(astc_results.m_endpoints[p * 8 + 2], astc_results.m_endpoints[p * 8 + 3]); + std::swap(astc_results.m_endpoints[p * 8 + 4], astc_results.m_endpoints[p * 8 + 5]); + std::swap(astc_results.m_endpoints[p * 8 + 6], astc_results.m_endpoints[p * 8 + 7]); + invert[p] = true; + } + } + } + + for (uint32_t y = 0; y < 4; y++) + { + for (uint32_t x = 0; x < 4; x++) + { + const uint32_t bc7_part = g_bc7_partition2[16 * bc7_pattern + x + y * 4]; + + astc_results.m_weights[x + y * 4] = ccell_result_selectors[bc7_part][part_pixel_index[y][x]]; + + uint32_t astc_part = bc7_part; + if (g_astc_bc7_common_partitions2[common_pattern].m_invert) + astc_part = 1 - astc_part; + + if (invert[astc_part]) + astc_results.m_weights[x + y * 4] = 3 - astc_results.m_weights[x + y * 4]; + } + } + + assert(total_results < MAX_ENCODE_RESULTS); + if (total_results < MAX_ENCODE_RESULTS) + { + pResults[total_results].m_uastc_mode = mode; + pResults[total_results].m_common_pattern = common_pattern; + pResults[total_results].m_astc = astc_results; + pResults[total_results].m_astc_err = total_err; + total_results++; + } + + } // common_pattern + } + + // MODE 10 + // DualPlane: 0, WeightRange: 8 (16), Subsets: 1, CEM: 12 (RGBA Direct ), EndpointRange: 13 (48) MODE6 + static void astc_mode10(const color_rgba block[4][4], uastc_encode_results* pResults, uint32_t& total_results, bc7enc_compress_block_params& comp_params) + { + const uint32_t weight_range = 8; + const uint32_t endpoint_range = 13; + + color_cell_compressor_params ccell_params; + memset(&ccell_params, 0, sizeof(ccell_params)); + + ccell_params.m_num_pixels = 16; + ccell_params.m_pPixels = (color_quad_u8*)&block[0][0]; + ccell_params.m_num_selector_weights = 16; + ccell_params.m_pSelector_weights = g_astc_weights4; + ccell_params.m_pSelector_weightsx = (const bc7enc_vec4F*)g_astc_weights4x; + ccell_params.m_astc_endpoint_range = endpoint_range; + ccell_params.m_weights[0] = 1; + ccell_params.m_weights[1] = 1; + ccell_params.m_weights[2] = 1; + ccell_params.m_weights[3] = 1; + ccell_params.m_has_alpha = true; + + color_cell_compressor_results ccell_results; + uint8_t ccell_result_selectors[16]; + uint8_t ccell_result_selectors_temp[16]; + memset(&ccell_results, 0, sizeof(ccell_results)); + ccell_results.m_pSelectors = &ccell_result_selectors[0]; + ccell_results.m_pSelectors_temp = &ccell_result_selectors_temp[0]; + + uint64_t part_err = color_cell_compression(255, &ccell_params, &ccell_results, &comp_params); + + // ASTC + astc_block_desc astc_results; + memset(&astc_results, 0, sizeof(astc_results)); + + astc_results.m_dual_plane = false; + astc_results.m_weight_range = weight_range; + + astc_results.m_ccs = 0; + astc_results.m_subsets = 1; + astc_results.m_partition_seed = 0; + astc_results.m_cem = 12; + + astc_results.m_endpoints[0] = ccell_results.m_astc_low_endpoint.m_c[0]; + astc_results.m_endpoints[1] = ccell_results.m_astc_high_endpoint.m_c[0]; + astc_results.m_endpoints[2] = ccell_results.m_astc_low_endpoint.m_c[1]; + astc_results.m_endpoints[3] = ccell_results.m_astc_high_endpoint.m_c[1]; + astc_results.m_endpoints[4] = ccell_results.m_astc_low_endpoint.m_c[2]; + astc_results.m_endpoints[5] = ccell_results.m_astc_high_endpoint.m_c[2]; + astc_results.m_endpoints[6] = ccell_results.m_astc_low_endpoint.m_c[3]; + astc_results.m_endpoints[7] = ccell_results.m_astc_high_endpoint.m_c[3]; + + bool invert = false; + + int s0 = g_astc_unquant[endpoint_range][astc_results.m_endpoints[0]].m_unquant + g_astc_unquant[endpoint_range][astc_results.m_endpoints[2]].m_unquant + g_astc_unquant[endpoint_range][astc_results.m_endpoints[4]].m_unquant; + int s1 = g_astc_unquant[endpoint_range][astc_results.m_endpoints[1]].m_unquant + g_astc_unquant[endpoint_range][astc_results.m_endpoints[3]].m_unquant + g_astc_unquant[endpoint_range][astc_results.m_endpoints[5]].m_unquant; + if (s1 < s0) + { + std::swap(astc_results.m_endpoints[0], astc_results.m_endpoints[1]); + std::swap(astc_results.m_endpoints[2], astc_results.m_endpoints[3]); + std::swap(astc_results.m_endpoints[4], astc_results.m_endpoints[5]); + std::swap(astc_results.m_endpoints[6], astc_results.m_endpoints[7]); + invert = true; + } + + for (uint32_t y = 0; y < 4; y++) + { + for (uint32_t x = 0; x < 4; x++) + { + astc_results.m_weights[x + y * 4] = ccell_result_selectors[x + y * 4]; + + if (invert) + astc_results.m_weights[x + y * 4] = 15 - astc_results.m_weights[x + y * 4]; + } + } + + assert(total_results < MAX_ENCODE_RESULTS); + if (total_results < MAX_ENCODE_RESULTS) + { + pResults[total_results].m_uastc_mode = 10; + pResults[total_results].m_common_pattern = 0; + pResults[total_results].m_astc = astc_results; + pResults[total_results].m_astc_err = part_err; + total_results++; + } + } + + // 11. DualPlane: 1, WeightRange: 2 (4), Subsets: 1, CEM: 12 (RGBA Direct), EndpointRange: 13 (48) MODE5 + // 17. DualPlane: 1, WeightRange : 2 (4), Subsets : 1, CEM : 4 (LA Direct), EndpointRange : 20 (256) BC7 MODE5 + static void astc_mode11_or_17(uint32_t mode, const color_rgba block[4][4], uastc_encode_results* pResults, uint32_t& total_results, bc7enc_compress_block_params& comp_params) + { + assert((mode == 11) || (mode == 17)); + + const uint32_t weight_range = 2; + const uint32_t endpoint_range = (mode == 17) ? 20 : 13; + + bc7enc_compress_block_params local_comp_params(comp_params); + local_comp_params.m_perceptual = false; + local_comp_params.m_weights[0] = 1; + local_comp_params.m_weights[1] = 1; + local_comp_params.m_weights[2] = 1; + local_comp_params.m_weights[3] = 1; + + const uint32_t last_rot_comp = (mode == 17) ? 1 : 4; + + for (uint32_t rot_comp = 0; rot_comp < last_rot_comp; rot_comp++) + { + color_quad_u8 block_rgb[16]; + color_quad_u8 block_a[16]; + for (uint32_t i = 0; i < 16; i++) + { + block_rgb[i] = ((color_quad_u8*)&block[0][0])[i]; + block_a[i] = block_rgb[i]; + + if (mode == 17) + { + assert(block_rgb[i].m_c[0] == block_rgb[i].m_c[1]); + assert(block_rgb[i].m_c[0] == block_rgb[i].m_c[2]); + + block_a[i].m_c[0] = block_rgb[i].m_c[3]; + block_a[i].m_c[1] = block_rgb[i].m_c[3]; + block_a[i].m_c[2] = block_rgb[i].m_c[3]; + block_a[i].m_c[3] = 255; + + block_rgb[i].m_c[1] = block_rgb[i].m_c[0]; + block_rgb[i].m_c[2] = block_rgb[i].m_c[0]; + block_rgb[i].m_c[3] = 255; + } + else + { + uint8_t c = block_a[i].m_c[rot_comp]; + block_a[i].m_c[0] = c; + block_a[i].m_c[1] = c; + block_a[i].m_c[2] = c; + block_a[i].m_c[3] = 255; + + block_rgb[i].m_c[rot_comp] = block_rgb[i].m_c[3]; + block_rgb[i].m_c[3] = 255; + } + } + + uint8_t ccell_result_selectors_temp[16]; + + color_cell_compressor_params ccell_params_rgb; + memset(&ccell_params_rgb, 0, sizeof(ccell_params_rgb)); + + ccell_params_rgb.m_num_pixels = 16; + ccell_params_rgb.m_pPixels = block_rgb; + ccell_params_rgb.m_num_selector_weights = 4; + ccell_params_rgb.m_pSelector_weights = g_bc7_weights2; + ccell_params_rgb.m_pSelector_weightsx = (const bc7enc_vec4F*)g_bc7_weights2x; + ccell_params_rgb.m_astc_endpoint_range = endpoint_range; + ccell_params_rgb.m_weights[0] = 1; + ccell_params_rgb.m_weights[1] = 1; + ccell_params_rgb.m_weights[2] = 1; + ccell_params_rgb.m_weights[3] = 1; + + color_cell_compressor_results ccell_results_rgb; + uint8_t ccell_result_selectors_rgb[16]; + memset(&ccell_results_rgb, 0, sizeof(ccell_results_rgb)); + ccell_results_rgb.m_pSelectors = &ccell_result_selectors_rgb[0]; + ccell_results_rgb.m_pSelectors_temp = &ccell_result_selectors_temp[0]; + + uint64_t part_err_rgb = color_cell_compression(255, &ccell_params_rgb, &ccell_results_rgb, &local_comp_params); + + color_cell_compressor_params ccell_params_a; + memset(&ccell_params_a, 0, sizeof(ccell_params_a)); + + ccell_params_a.m_num_pixels = 16; + ccell_params_a.m_pPixels = block_a; + ccell_params_a.m_num_selector_weights = 4; + ccell_params_a.m_pSelector_weights = g_bc7_weights2; + ccell_params_a.m_pSelector_weightsx = (const bc7enc_vec4F*)g_bc7_weights2x; + ccell_params_a.m_astc_endpoint_range = endpoint_range; + ccell_params_a.m_weights[0] = 1; + ccell_params_a.m_weights[1] = 1; + ccell_params_a.m_weights[2] = 1; + ccell_params_a.m_weights[3] = 1; + + color_cell_compressor_results ccell_results_a; + uint8_t ccell_result_selectors_a[16]; + memset(&ccell_results_a, 0, sizeof(ccell_results_a)); + ccell_results_a.m_pSelectors = &ccell_result_selectors_a[0]; + ccell_results_a.m_pSelectors_temp = &ccell_result_selectors_temp[0]; + + uint64_t part_err_a = color_cell_compression(255, &ccell_params_a, &ccell_results_a, &local_comp_params) / 3; + + uint64_t total_err = (mode == 17) ? ((part_err_rgb / 3) + part_err_a) : (part_err_rgb + part_err_a); + + // ASTC + astc_block_desc blk; + memset(&blk, 0, sizeof(blk)); + + blk.m_dual_plane = true; + blk.m_weight_range = weight_range; + + blk.m_ccs = (mode == 17) ? 3 : rot_comp; + blk.m_subsets = 1; + blk.m_partition_seed = 0; + blk.m_cem = (mode == 17) ? 4 : 12; + + bool invert = false; + + if (mode == 17) + { + assert(ccell_results_rgb.m_astc_low_endpoint.m_c[0] == ccell_results_rgb.m_astc_low_endpoint.m_c[1]); + assert(ccell_results_rgb.m_astc_low_endpoint.m_c[0] == ccell_results_rgb.m_astc_low_endpoint.m_c[2]); + + assert(ccell_results_rgb.m_astc_high_endpoint.m_c[0] == ccell_results_rgb.m_astc_high_endpoint.m_c[1]); + assert(ccell_results_rgb.m_astc_high_endpoint.m_c[0] == ccell_results_rgb.m_astc_high_endpoint.m_c[2]); + + blk.m_endpoints[0] = ccell_results_rgb.m_astc_low_endpoint.m_c[0]; + blk.m_endpoints[1] = ccell_results_rgb.m_astc_high_endpoint.m_c[0]; + + blk.m_endpoints[2] = ccell_results_a.m_astc_low_endpoint.m_c[0]; + blk.m_endpoints[3] = ccell_results_a.m_astc_high_endpoint.m_c[0]; + } + else + { + blk.m_endpoints[0] = (rot_comp == 0 ? ccell_results_a : ccell_results_rgb).m_astc_low_endpoint.m_c[0]; + blk.m_endpoints[1] = (rot_comp == 0 ? ccell_results_a : ccell_results_rgb).m_astc_high_endpoint.m_c[0]; + blk.m_endpoints[2] = (rot_comp == 1 ? ccell_results_a : ccell_results_rgb).m_astc_low_endpoint.m_c[1]; + blk.m_endpoints[3] = (rot_comp == 1 ? ccell_results_a : ccell_results_rgb).m_astc_high_endpoint.m_c[1]; + blk.m_endpoints[4] = (rot_comp == 2 ? ccell_results_a : ccell_results_rgb).m_astc_low_endpoint.m_c[2]; + blk.m_endpoints[5] = (rot_comp == 2 ? ccell_results_a : ccell_results_rgb).m_astc_high_endpoint.m_c[2]; + if (rot_comp == 3) + { + blk.m_endpoints[6] = ccell_results_a.m_astc_low_endpoint.m_c[0]; + blk.m_endpoints[7] = ccell_results_a.m_astc_high_endpoint.m_c[0]; + } + else + { + blk.m_endpoints[6] = ccell_results_rgb.m_astc_low_endpoint.m_c[rot_comp]; + blk.m_endpoints[7] = ccell_results_rgb.m_astc_high_endpoint.m_c[rot_comp]; + } + + int s0 = g_astc_unquant[endpoint_range][blk.m_endpoints[0]].m_unquant + g_astc_unquant[endpoint_range][blk.m_endpoints[2]].m_unquant + g_astc_unquant[endpoint_range][blk.m_endpoints[4]].m_unquant; + int s1 = g_astc_unquant[endpoint_range][blk.m_endpoints[1]].m_unquant + g_astc_unquant[endpoint_range][blk.m_endpoints[3]].m_unquant + g_astc_unquant[endpoint_range][blk.m_endpoints[5]].m_unquant; + if (s1 < s0) + { + std::swap(blk.m_endpoints[0], blk.m_endpoints[1]); + std::swap(blk.m_endpoints[2], blk.m_endpoints[3]); + std::swap(blk.m_endpoints[4], blk.m_endpoints[5]); + std::swap(blk.m_endpoints[6], blk.m_endpoints[7]); + invert = true; + } + } + + for (uint32_t y = 0; y < 4; y++) + { + for (uint32_t x = 0; x < 4; x++) + { + uint32_t rgb_index = ccell_result_selectors_rgb[x + y * 4]; + uint32_t a_index = ccell_result_selectors_a[x + y * 4]; + + if (invert) + { + rgb_index = 3 - rgb_index; + a_index = 3 - a_index; + } + + blk.m_weights[(x + y * 4) * 2 + 0] = (uint8_t)rgb_index; + blk.m_weights[(x + y * 4) * 2 + 1] = (uint8_t)a_index; + } + } + + assert(total_results < MAX_ENCODE_RESULTS); + if (total_results < MAX_ENCODE_RESULTS) + { + pResults[total_results].m_uastc_mode = mode; + pResults[total_results].m_common_pattern = 0; + pResults[total_results].m_astc = blk; + pResults[total_results].m_astc_err = total_err; + total_results++; + } + } // rot_comp + } + + // MODE 12 + // DualPlane: 0, WeightRange: 5 (8), Subsets: 1, CEM: 12 (RGBA Direct ), EndpointRange: 19 (192) MODE6 + static void astc_mode12(const color_rgba block[4][4], uastc_encode_results* pResults, uint32_t& total_results, bc7enc_compress_block_params& comp_params) + { + const uint32_t weight_range = 5; + const uint32_t endpoint_range = 19; + + color_cell_compressor_params ccell_params; + memset(&ccell_params, 0, sizeof(ccell_params)); + + ccell_params.m_num_pixels = 16; + ccell_params.m_pPixels = (color_quad_u8*)&block[0][0]; + ccell_params.m_num_selector_weights = 8; + ccell_params.m_pSelector_weights = g_bc7_weights3; + ccell_params.m_pSelector_weightsx = (const bc7enc_vec4F*)g_bc7_weights3x; + ccell_params.m_astc_endpoint_range = endpoint_range; + ccell_params.m_weights[0] = 1; + ccell_params.m_weights[1] = 1; + ccell_params.m_weights[2] = 1; + ccell_params.m_weights[3] = 1; + ccell_params.m_has_alpha = true; + + color_cell_compressor_results ccell_results; + uint8_t ccell_result_selectors[16]; + uint8_t ccell_result_selectors_temp[16]; + memset(&ccell_results, 0, sizeof(ccell_results)); + ccell_results.m_pSelectors = &ccell_result_selectors[0]; + ccell_results.m_pSelectors_temp = &ccell_result_selectors_temp[0]; + + uint64_t part_err = color_cell_compression(255, &ccell_params, &ccell_results, &comp_params); + + // ASTC + astc_block_desc astc_results; + memset(&astc_results, 0, sizeof(astc_results)); + + astc_results.m_dual_plane = false; + astc_results.m_weight_range = weight_range; + + astc_results.m_ccs = 0; + astc_results.m_subsets = 1; + astc_results.m_partition_seed = 0; + astc_results.m_cem = 12; + + astc_results.m_endpoints[0] = ccell_results.m_astc_low_endpoint.m_c[0]; + astc_results.m_endpoints[1] = ccell_results.m_astc_high_endpoint.m_c[0]; + astc_results.m_endpoints[2] = ccell_results.m_astc_low_endpoint.m_c[1]; + astc_results.m_endpoints[3] = ccell_results.m_astc_high_endpoint.m_c[1]; + astc_results.m_endpoints[4] = ccell_results.m_astc_low_endpoint.m_c[2]; + astc_results.m_endpoints[5] = ccell_results.m_astc_high_endpoint.m_c[2]; + astc_results.m_endpoints[6] = ccell_results.m_astc_low_endpoint.m_c[3]; + astc_results.m_endpoints[7] = ccell_results.m_astc_high_endpoint.m_c[3]; + + bool invert = false; + + int s0 = g_astc_unquant[endpoint_range][astc_results.m_endpoints[0]].m_unquant + g_astc_unquant[endpoint_range][astc_results.m_endpoints[2]].m_unquant + g_astc_unquant[endpoint_range][astc_results.m_endpoints[4]].m_unquant; + int s1 = g_astc_unquant[endpoint_range][astc_results.m_endpoints[1]].m_unquant + g_astc_unquant[endpoint_range][astc_results.m_endpoints[3]].m_unquant + g_astc_unquant[endpoint_range][astc_results.m_endpoints[5]].m_unquant; + if (s1 < s0) + { + std::swap(astc_results.m_endpoints[0], astc_results.m_endpoints[1]); + std::swap(astc_results.m_endpoints[2], astc_results.m_endpoints[3]); + std::swap(astc_results.m_endpoints[4], astc_results.m_endpoints[5]); + std::swap(astc_results.m_endpoints[6], astc_results.m_endpoints[7]); + invert = true; + } + + for (uint32_t y = 0; y < 4; y++) + { + for (uint32_t x = 0; x < 4; x++) + { + astc_results.m_weights[x + y * 4] = ccell_result_selectors[x + y * 4]; + + if (invert) + astc_results.m_weights[x + y * 4] = 7 - astc_results.m_weights[x + y * 4]; + } + } + + assert(total_results < MAX_ENCODE_RESULTS); + if (total_results < MAX_ENCODE_RESULTS) + { + pResults[total_results].m_uastc_mode = 12; + pResults[total_results].m_common_pattern = 0; + pResults[total_results].m_astc = astc_results; + pResults[total_results].m_astc_err = part_err; + total_results++; + } + } + + // 13. DualPlane: 1, WeightRange: 0 (2), Subsets: 1, CEM: 12 (RGBA Direct ), EndpointRange: 20 (256) MODE5 + static void astc_mode13(const color_rgba block[4][4], uastc_encode_results* pResults, uint32_t& total_results, bc7enc_compress_block_params& comp_params) + { + bc7enc_compress_block_params local_comp_params(comp_params); + local_comp_params.m_perceptual = false; + local_comp_params.m_weights[0] = 1; + local_comp_params.m_weights[1] = 1; + local_comp_params.m_weights[2] = 1; + local_comp_params.m_weights[3] = 1; + + for (uint32_t rot_comp = 0; rot_comp < 4; rot_comp++) + { + const uint32_t weight_range = 0; + const uint32_t endpoint_range = 20; + + color_quad_u8 block_rgb[16]; + color_quad_u8 block_a[16]; + for (uint32_t i = 0; i < 16; i++) + { + block_rgb[i] = ((color_quad_u8*)&block[0][0])[i]; + block_a[i] = block_rgb[i]; + + uint8_t c = block_a[i].m_c[rot_comp]; + block_a[i].m_c[0] = c; + block_a[i].m_c[1] = c; + block_a[i].m_c[2] = c; + block_a[i].m_c[3] = 255; + + block_rgb[i].m_c[rot_comp] = block_rgb[i].m_c[3]; + block_rgb[i].m_c[3] = 255; + } + + uint8_t ccell_result_selectors_temp[16]; + + color_cell_compressor_params ccell_params_rgb; + memset(&ccell_params_rgb, 0, sizeof(ccell_params_rgb)); + + ccell_params_rgb.m_num_pixels = 16; + ccell_params_rgb.m_pPixels = block_rgb; + ccell_params_rgb.m_num_selector_weights = 2; + ccell_params_rgb.m_pSelector_weights = g_bc7_weights1; + ccell_params_rgb.m_pSelector_weightsx = (const bc7enc_vec4F*)g_bc7_weights1x; + ccell_params_rgb.m_astc_endpoint_range = endpoint_range; + ccell_params_rgb.m_weights[0] = 1; + ccell_params_rgb.m_weights[1] = 1; + ccell_params_rgb.m_weights[2] = 1; + ccell_params_rgb.m_weights[3] = 1; + + color_cell_compressor_results ccell_results_rgb; + uint8_t ccell_result_selectors_rgb[16]; + memset(&ccell_results_rgb, 0, sizeof(ccell_results_rgb)); + ccell_results_rgb.m_pSelectors = &ccell_result_selectors_rgb[0]; + ccell_results_rgb.m_pSelectors_temp = &ccell_result_selectors_temp[0]; + + uint64_t part_err_rgb = color_cell_compression(255, &ccell_params_rgb, &ccell_results_rgb, &local_comp_params); + + color_cell_compressor_params ccell_params_a; + memset(&ccell_params_a, 0, sizeof(ccell_params_a)); + + ccell_params_a.m_num_pixels = 16; + ccell_params_a.m_pPixels = block_a; + ccell_params_a.m_num_selector_weights = 2; + ccell_params_a.m_pSelector_weights = g_bc7_weights1; + ccell_params_a.m_pSelector_weightsx = (const bc7enc_vec4F*)g_bc7_weights1x; + ccell_params_a.m_astc_endpoint_range = endpoint_range; + ccell_params_a.m_weights[0] = 1; + ccell_params_a.m_weights[1] = 1; + ccell_params_a.m_weights[2] = 1; + ccell_params_a.m_weights[3] = 1; + + color_cell_compressor_results ccell_results_a; + uint8_t ccell_result_selectors_a[16]; + memset(&ccell_results_a, 0, sizeof(ccell_results_a)); + ccell_results_a.m_pSelectors = &ccell_result_selectors_a[0]; + ccell_results_a.m_pSelectors_temp = &ccell_result_selectors_temp[0]; + + uint64_t part_err_a = color_cell_compression(255, &ccell_params_a, &ccell_results_a, &local_comp_params) / 3; + + uint64_t total_err = part_err_rgb + part_err_a; + + // ASTC + astc_block_desc blk; + memset(&blk, 0, sizeof(blk)); + + blk.m_dual_plane = true; + blk.m_weight_range = weight_range; + + blk.m_ccs = rot_comp; + blk.m_subsets = 1; + blk.m_partition_seed = 0; + blk.m_cem = 12; + + blk.m_endpoints[0] = (rot_comp == 0 ? ccell_results_a : ccell_results_rgb).m_astc_low_endpoint.m_c[0]; + blk.m_endpoints[1] = (rot_comp == 0 ? ccell_results_a : ccell_results_rgb).m_astc_high_endpoint.m_c[0]; + blk.m_endpoints[2] = (rot_comp == 1 ? ccell_results_a : ccell_results_rgb).m_astc_low_endpoint.m_c[1]; + blk.m_endpoints[3] = (rot_comp == 1 ? ccell_results_a : ccell_results_rgb).m_astc_high_endpoint.m_c[1]; + blk.m_endpoints[4] = (rot_comp == 2 ? ccell_results_a : ccell_results_rgb).m_astc_low_endpoint.m_c[2]; + blk.m_endpoints[5] = (rot_comp == 2 ? ccell_results_a : ccell_results_rgb).m_astc_high_endpoint.m_c[2]; + if (rot_comp == 3) + { + blk.m_endpoints[6] = ccell_results_a.m_astc_low_endpoint.m_c[0]; + blk.m_endpoints[7] = ccell_results_a.m_astc_high_endpoint.m_c[0]; + } + else + { + blk.m_endpoints[6] = ccell_results_rgb.m_astc_low_endpoint.m_c[rot_comp]; + blk.m_endpoints[7] = ccell_results_rgb.m_astc_high_endpoint.m_c[rot_comp]; + } + + bool invert = false; + + int s0 = g_astc_unquant[endpoint_range][blk.m_endpoints[0]].m_unquant + g_astc_unquant[endpoint_range][blk.m_endpoints[2]].m_unquant + g_astc_unquant[endpoint_range][blk.m_endpoints[4]].m_unquant; + int s1 = g_astc_unquant[endpoint_range][blk.m_endpoints[1]].m_unquant + g_astc_unquant[endpoint_range][blk.m_endpoints[3]].m_unquant + g_astc_unquant[endpoint_range][blk.m_endpoints[5]].m_unquant; + if (s1 < s0) + { + std::swap(blk.m_endpoints[0], blk.m_endpoints[1]); + std::swap(blk.m_endpoints[2], blk.m_endpoints[3]); + std::swap(blk.m_endpoints[4], blk.m_endpoints[5]); + std::swap(blk.m_endpoints[6], blk.m_endpoints[7]); + invert = true; + } + + for (uint32_t y = 0; y < 4; y++) + { + for (uint32_t x = 0; x < 4; x++) + { + uint32_t rgb_index = ccell_result_selectors_rgb[x + y * 4]; + uint32_t a_index = ccell_result_selectors_a[x + y * 4]; + + if (invert) + { + rgb_index = 1 - rgb_index; + a_index = 1 - a_index; + } + + blk.m_weights[(x + y * 4) * 2 + 0] = (uint8_t)rgb_index; + blk.m_weights[(x + y * 4) * 2 + 1] = (uint8_t)a_index; + } + } + + assert(total_results < MAX_ENCODE_RESULTS); + if (total_results < MAX_ENCODE_RESULTS) + { + pResults[total_results].m_uastc_mode = 13; + pResults[total_results].m_common_pattern = 0; + pResults[total_results].m_astc = blk; + pResults[total_results].m_astc_err = total_err; + total_results++; + } + } // rot_comp + } + + // MODE14 + // DualPlane: 0, WeightRange: 2 (4), Subsets: 1, CEM: 12 (RGBA Direct ), EndpointRange: 20 (256) MODE6 + static void astc_mode14(const color_rgba block[4][4], uastc_encode_results* pResults, uint32_t& total_results, bc7enc_compress_block_params& comp_params) + { + const uint32_t weight_range = 2; + const uint32_t endpoint_range = 20; + + color_cell_compressor_params ccell_params; + memset(&ccell_params, 0, sizeof(ccell_params)); + + ccell_params.m_num_pixels = 16; + ccell_params.m_pPixels = (color_quad_u8*)&block[0][0]; + ccell_params.m_num_selector_weights = 4; + ccell_params.m_pSelector_weights = g_bc7_weights2; + ccell_params.m_pSelector_weightsx = (const bc7enc_vec4F*)g_bc7_weights2x; + ccell_params.m_astc_endpoint_range = endpoint_range; + ccell_params.m_weights[0] = 1; + ccell_params.m_weights[1] = 1; + ccell_params.m_weights[2] = 1; + ccell_params.m_weights[3] = 1; + ccell_params.m_has_alpha = true; + + color_cell_compressor_results ccell_results; + uint8_t ccell_result_selectors[16]; + uint8_t ccell_result_selectors_temp[16]; + memset(&ccell_results, 0, sizeof(ccell_results)); + ccell_results.m_pSelectors = &ccell_result_selectors[0]; + ccell_results.m_pSelectors_temp = &ccell_result_selectors_temp[0]; + + uint64_t part_err = color_cell_compression(255, &ccell_params, &ccell_results, &comp_params); + + // ASTC + astc_block_desc astc_results; + memset(&astc_results, 0, sizeof(astc_results)); + + astc_results.m_dual_plane = false; + astc_results.m_weight_range = weight_range; + + astc_results.m_ccs = 0; + astc_results.m_subsets = 1; + astc_results.m_partition_seed = 0; + astc_results.m_cem = 12; + + astc_results.m_endpoints[0] = ccell_results.m_astc_low_endpoint.m_c[0]; + astc_results.m_endpoints[1] = ccell_results.m_astc_high_endpoint.m_c[0]; + astc_results.m_endpoints[2] = ccell_results.m_astc_low_endpoint.m_c[1]; + astc_results.m_endpoints[3] = ccell_results.m_astc_high_endpoint.m_c[1]; + astc_results.m_endpoints[4] = ccell_results.m_astc_low_endpoint.m_c[2]; + astc_results.m_endpoints[5] = ccell_results.m_astc_high_endpoint.m_c[2]; + astc_results.m_endpoints[6] = ccell_results.m_astc_low_endpoint.m_c[3]; + astc_results.m_endpoints[7] = ccell_results.m_astc_high_endpoint.m_c[3]; + + bool invert = false; + + int s0 = g_astc_unquant[endpoint_range][astc_results.m_endpoints[0]].m_unquant + g_astc_unquant[endpoint_range][astc_results.m_endpoints[2]].m_unquant + g_astc_unquant[endpoint_range][astc_results.m_endpoints[4]].m_unquant; + int s1 = g_astc_unquant[endpoint_range][astc_results.m_endpoints[1]].m_unquant + g_astc_unquant[endpoint_range][astc_results.m_endpoints[3]].m_unquant + g_astc_unquant[endpoint_range][astc_results.m_endpoints[5]].m_unquant; + if (s1 < s0) + { + std::swap(astc_results.m_endpoints[0], astc_results.m_endpoints[1]); + std::swap(astc_results.m_endpoints[2], astc_results.m_endpoints[3]); + std::swap(astc_results.m_endpoints[4], astc_results.m_endpoints[5]); + std::swap(astc_results.m_endpoints[6], astc_results.m_endpoints[7]); + invert = true; + } + + for (uint32_t y = 0; y < 4; y++) + { + for (uint32_t x = 0; x < 4; x++) + { + astc_results.m_weights[x + y * 4] = ccell_result_selectors[x + y * 4]; + + if (invert) + astc_results.m_weights[x + y * 4] = 3 - astc_results.m_weights[x + y * 4]; + } + } + + assert(total_results < MAX_ENCODE_RESULTS); + if (total_results < MAX_ENCODE_RESULTS) + { + pResults[total_results].m_uastc_mode = 14; + pResults[total_results].m_common_pattern = 0; + pResults[total_results].m_astc = astc_results; + pResults[total_results].m_astc_err = part_err; + total_results++; + } + } + + // MODE 15 + // DualPlane: 0, WeightRange : 8 (16), Subsets : 1, CEM : 4 (LA Direct), EndpointRange : 20 (256) BC7 MODE6 + static void astc_mode15(const color_rgba block[4][4], uastc_encode_results* pResults, uint32_t& total_results, bc7enc_compress_block_params& comp_params) + { + const uint32_t weight_range = 8; + const uint32_t endpoint_range = 20; + + color_cell_compressor_params ccell_params; + memset(&ccell_params, 0, sizeof(ccell_params)); + + color_rgba temp_block[16]; + for (uint32_t i = 0; i < 16; i++) + { + const uint32_t l = ((const color_rgba*)block)[i].r; + const uint32_t a = ((const color_rgba*)block)[i].a; + + // Use (l,0,0,a) not (l,l,l,a) so both components are treated equally. + temp_block[i].set_noclamp_rgba(l, 0, 0, a); + } + + ccell_params.m_num_pixels = 16; + //ccell_params.m_pPixels = (color_quad_u8*)&block[0][0]; + ccell_params.m_pPixels = (color_quad_u8*)temp_block; + ccell_params.m_num_selector_weights = 16; + ccell_params.m_pSelector_weights = g_astc_weights4; + ccell_params.m_pSelector_weightsx = (const bc7enc_vec4F*)g_astc_weights4x; + ccell_params.m_astc_endpoint_range = endpoint_range; + ccell_params.m_weights[0] = 1; + ccell_params.m_weights[1] = 1; + ccell_params.m_weights[2] = 1; + ccell_params.m_weights[3] = 1; + ccell_params.m_has_alpha = true; + + color_cell_compressor_results ccell_results; + uint8_t ccell_result_selectors[16]; + uint8_t ccell_result_selectors_temp[16]; + memset(&ccell_results, 0, sizeof(ccell_results)); + ccell_results.m_pSelectors = &ccell_result_selectors[0]; + ccell_results.m_pSelectors_temp = &ccell_result_selectors_temp[0]; + + color_cell_compression(255, &ccell_params, &ccell_results, &comp_params); + + // ASTC + astc_block_desc astc_results; + memset(&astc_results, 0, sizeof(astc_results)); + + astc_results.m_dual_plane = false; + astc_results.m_weight_range = weight_range; + + astc_results.m_ccs = 0; + astc_results.m_subsets = 1; + astc_results.m_partition_seed = 0; + astc_results.m_cem = 4; + + astc_results.m_endpoints[0] = ccell_results.m_astc_low_endpoint.m_c[0]; + astc_results.m_endpoints[1] = ccell_results.m_astc_high_endpoint.m_c[0]; + + astc_results.m_endpoints[2] = ccell_results.m_astc_low_endpoint.m_c[3]; + astc_results.m_endpoints[3] = ccell_results.m_astc_high_endpoint.m_c[3]; + + for (uint32_t y = 0; y < 4; y++) + for (uint32_t x = 0; x < 4; x++) + astc_results.m_weights[x + y * 4] = ccell_result_selectors[x + y * 4]; + + color_rgba colors[16]; + for (uint32_t c = 0; c < 4; c++) + { + colors[0].m_comps[c] = g_astc_unquant[endpoint_range][ccell_results.m_astc_low_endpoint.m_c[(c < 3) ? 0 : 3]].m_unquant; + colors[15].m_comps[c] = g_astc_unquant[endpoint_range][ccell_results.m_astc_high_endpoint.m_c[(c < 3) ? 0 : 3]].m_unquant; + } + + for (uint32_t i = 1; i < 16 - 1; i++) + for (uint32_t c = 0; c < 4; c++) + colors[i].m_comps[c] = (uint8_t)astc_interpolate(colors[0].m_comps[c], colors[15].m_comps[c], g_astc_weights4[i], false); + + uint64_t total_err = 0; + for (uint32_t p = 0; p < 16; p++) + total_err += color_distance_la(((const color_rgba*)block)[p], colors[ccell_result_selectors[p]]); + + assert(total_results < MAX_ENCODE_RESULTS); + if (total_results < MAX_ENCODE_RESULTS) + { + pResults[total_results].m_uastc_mode = 15; + pResults[total_results].m_common_pattern = 0; + pResults[total_results].m_astc = astc_results; + pResults[total_results].m_astc_err = total_err; + total_results++; + } + } + + static void compute_block_error(const color_rgba block[4][4], const color_rgba decoded_block[4][4], uint64_t &total_rgb_err, uint64_t &total_rgba_err, uint64_t &total_la_err) + { + uint64_t total_err_r = 0, total_err_g = 0, total_err_b = 0, total_err_a = 0; + + for (uint32_t y = 0; y < 4; y++) + { + for (uint32_t x = 0; x < 4; x++) + { + const int dr = (int)block[y][x].m_comps[0] - (int)decoded_block[y][x].m_comps[0]; + const int dg = (int)block[y][x].m_comps[1] - (int)decoded_block[y][x].m_comps[1]; + const int db = (int)block[y][x].m_comps[2] - (int)decoded_block[y][x].m_comps[2]; + const int da = (int)block[y][x].m_comps[3] - (int)decoded_block[y][x].m_comps[3]; + + total_err_r += dr * dr; + total_err_g += dg * dg; + total_err_b += db * db; + total_err_a += da * da; + } + } + + total_la_err = total_err_r + total_err_a; + total_rgb_err = total_err_r + total_err_g + total_err_b; + total_rgba_err = total_rgb_err + total_err_a; + } + + static void compute_bc1_hints(bool &bc1_hint0, bool &bc1_hint1, const uastc_encode_results &best_results, const color_rgba block[4][4], const color_rgba decoded_uastc_block[4][4]) + { + const uint32_t best_mode = best_results.m_uastc_mode; + const bool perceptual = false; + + bc1_hint0 = false; + bc1_hint1 = false; + + if (best_mode == UASTC_MODE_INDEX_SOLID_COLOR) + return; + + if (!g_uastc_mode_has_bc1_hint0[best_mode] && !g_uastc_mode_has_bc1_hint1[best_mode]) + return; + + color_rgba tblock_bc1[4][4]; + dxt1_block tbc1_block[8]; + basist::encode_bc1(tbc1_block, (const uint8_t*)&decoded_uastc_block[0][0], 0); + unpack_block(texture_format::cBC1, tbc1_block, &tblock_bc1[0][0]); + + color_rgba tblock_hint0_bc1[4][4]; + color_rgba tblock_hint1_bc1[4][4]; + + etc_block etc1_blk; + memset(&etc1_blk, 0, sizeof(etc1_blk)); + + eac_a8_block etc2_blk; + memset(&etc2_blk, 0, sizeof(etc2_blk)); + etc2_blk.m_multiplier = 1; + + // Pack to UASTC, then unpack, because the endpoints may be swapped. + + uastc_block temp_ublock; + pack_uastc(temp_ublock, best_results, etc1_blk, 0, etc2_blk, false, false); + + unpacked_uastc_block temp_ublock_unpacked; + unpack_uastc(temp_ublock, temp_ublock_unpacked, false); + + unpacked_uastc_block ublock; + memset(&ublock, 0, sizeof(ublock)); + ublock.m_mode = best_results.m_uastc_mode; + ublock.m_common_pattern = best_results.m_common_pattern; + ublock.m_astc = temp_ublock_unpacked.m_astc; + + dxt1_block b; + + // HINT1 + if (!g_uastc_mode_has_bc1_hint1[best_mode]) + { + memset(tblock_hint1_bc1, 0, sizeof(tblock_hint1_bc1)); + } + else + { + transcode_uastc_to_bc1_hint1(ublock, (color32 (*)[4]) decoded_uastc_block, &b, false); + + unpack_block(texture_format::cBC1, &b, &tblock_hint1_bc1[0][0]); + } + + // HINT0 + if (!g_uastc_mode_has_bc1_hint0[best_mode]) + { + memset(tblock_hint0_bc1, 0, sizeof(tblock_hint0_bc1)); + } + else + { + transcode_uastc_to_bc1_hint0(ublock, &b); + + unpack_block(texture_format::cBC1, &b, &tblock_hint0_bc1[0][0]); + } + + // Compute block errors + uint64_t total_t_err = 0, total_hint0_err = 0, total_hint1_err = 0; + for (uint32_t y = 0; y < 4; y++) + { + for (uint32_t x = 0; x < 4; x++) + { + total_t_err += color_distance(perceptual, block[y][x], tblock_bc1[y][x], false); + total_hint0_err += color_distance(perceptual, block[y][x], tblock_hint0_bc1[y][x], false); + total_hint1_err += color_distance(perceptual, block[y][x], tblock_hint1_bc1[y][x], false); + } + } + + const float t_err = sqrtf((float)total_t_err); + const float t_err_hint0 = sqrtf((float)total_hint0_err); + const float t_err_hint1 = sqrtf((float)total_hint1_err); + + const float err_thresh0 = 1.075f; + const float err_thresh1 = 1.075f; + + if ((g_uastc_mode_has_bc1_hint0[best_mode]) && (t_err_hint0 <= t_err * err_thresh0)) + bc1_hint0 = true; + + if ((g_uastc_mode_has_bc1_hint1[best_mode]) && (t_err_hint1 <= t_err * err_thresh1)) + bc1_hint1 = true; + } + + struct ycbcr + { + int32_t m_y; + int32_t m_cb; + int32_t m_cr; + }; + + static inline void rgb_to_y_cb_cr(const color_rgba& c, ycbcr& dst) + { + const int y = c.r * 54 + c.g * 183 + c.b * 19; + dst.m_y = y; + dst.m_cb = (c.b << 8) - y; + dst.m_cr = (c.r << 8) - y; + } + + static inline uint64_t color_diff(const ycbcr& a, const ycbcr& b) + { + const int y_delta = a.m_y - b.m_y; + const int cb_delta = a.m_cb - b.m_cb; + const int cr_delta = a.m_cr - b.m_cr; + return ((int64_t)y_delta * y_delta * 4) + ((int64_t)cr_delta * cr_delta) + ((int64_t)cb_delta * cb_delta); + } + + static inline int gray_distance2(const color_rgba& c, int r, int g, int b) + { + int gray_dist = (((int)c[0] - r) + ((int)c[1] - g) + ((int)c[2] - b) + 1) / 3; + + int gray_point_r = clamp255(r + gray_dist); + int gray_point_g = clamp255(g + gray_dist); + int gray_point_b = clamp255(b + gray_dist); + + int dist_to_gray_point_r = c[0] - gray_point_r; + int dist_to_gray_point_g = c[1] - gray_point_g; + int dist_to_gray_point_b = c[2] - gray_point_b; + + return (dist_to_gray_point_r * dist_to_gray_point_r) + (dist_to_gray_point_g * dist_to_gray_point_g) + (dist_to_gray_point_b * dist_to_gray_point_b); + } + + static bool pack_etc1_estimate_flipped(const color_rgba* pSrc_pixels) + { + int sums[3][2][2]; + +#define GET_XY(x, y, c) pSrc_pixels[(x) + ((y) * 4)][c] + + for (uint32_t c = 0; c < 3; c++) + { + sums[c][0][0] = GET_XY(0, 0, c) + GET_XY(0, 1, c) + GET_XY(1, 0, c) + GET_XY(1, 1, c); + sums[c][1][0] = GET_XY(2, 0, c) + GET_XY(2, 1, c) + GET_XY(3, 0, c) + GET_XY(3, 1, c); + sums[c][0][1] = GET_XY(0, 2, c) + GET_XY(0, 3, c) + GET_XY(1, 2, c) + GET_XY(1, 3, c); + sums[c][1][1] = GET_XY(2, 2, c) + GET_XY(2, 3, c) + GET_XY(3, 2, c) + GET_XY(3, 3, c); + } + + int upper_avg[3], lower_avg[3], left_avg[3], right_avg[3]; + for (uint32_t c = 0; c < 3; c++) + { + upper_avg[c] = (sums[c][0][0] + sums[c][1][0] + 4) / 8; + lower_avg[c] = (sums[c][0][1] + sums[c][1][1] + 4) / 8; + left_avg[c] = (sums[c][0][0] + sums[c][0][1] + 4) / 8; + right_avg[c] = (sums[c][1][0] + sums[c][1][1] + 4) / 8; + } + +#undef GET_XY +#define GET_XY(x, y, a) gray_distance2(pSrc_pixels[(x) + ((y) * 4)], a[0], a[1], a[2]) + + int upper_gray_dist = 0, lower_gray_dist = 0, left_gray_dist = 0, right_gray_dist = 0; + for (uint32_t i = 0; i < 4; i++) + { + for (uint32_t j = 0; j < 2; j++) + { + upper_gray_dist += GET_XY(i, j, upper_avg); + lower_gray_dist += GET_XY(i, 2 + j, lower_avg); + left_gray_dist += GET_XY(j, i, left_avg); + right_gray_dist += GET_XY(2 + j, i, right_avg); + } + } + +#undef GET_XY + + int upper_lower_sum = upper_gray_dist + lower_gray_dist; + int left_right_sum = left_gray_dist + right_gray_dist; + + return upper_lower_sum < left_right_sum; + } + + static void compute_etc1_hints(etc_block& best_etc1_blk, uint32_t& best_etc1_bias, const uastc_encode_results& best_results, const color_rgba block[4][4], const color_rgba decoded_uastc_block[4][4], int level, uint32_t flags) + { + best_etc1_bias = 0; + + if (best_results.m_uastc_mode == UASTC_MODE_INDEX_SOLID_COLOR) + { + pack_etc1_block_solid_color(best_etc1_blk, &best_results.m_solid_color.m_comps[0]); + return; + } + + const bool faster_etc1 = (flags & cPackUASTCETC1FasterHints) != 0; + const bool fastest_etc1 = (flags & cPackUASTCETC1FastestHints) != 0; + + const bool has_bias = g_uastc_mode_has_etc1_bias[best_results.m_uastc_mode]; + + // 0 should be at the top, but we need 13 first because it represents bias (0,0,0). + const uint8_t s_sorted_bias_modes[32] = { 13, 0, 22, 29, 27, 12, 26, 9, 30, 31, 8, 10, 25, 2, 23, 5, 15, 7, 3, 11, 6, 17, 28, 18, 1, 19, 20, 21, 24, 4, 14, 16 }; + + uint32_t last_bias = 1; + bool use_faster_bias_mode_table = false; + const bool flip_estimate = (level <= cPackUASTCLevelFaster) || (faster_etc1) || (fastest_etc1); + if (has_bias) + { + switch (level) + { + case cPackUASTCLevelFastest: + { + last_bias = fastest_etc1 ? 1 : (faster_etc1 ? 1 : 2); + use_faster_bias_mode_table = true; + break; + } + case cPackUASTCLevelFaster: + { + last_bias = fastest_etc1 ? 1 : (faster_etc1 ? 3 : 5); + use_faster_bias_mode_table = true; + break; + } + case cPackUASTCLevelDefault: + { + last_bias = fastest_etc1 ? 1 : (faster_etc1 ? 10 : 20); + use_faster_bias_mode_table = true; + break; + } + case cPackUASTCLevelSlower: + { + last_bias = fastest_etc1 ? 1 : (faster_etc1 ? 16 : 32); + use_faster_bias_mode_table = true; + break; + } + default: + { + last_bias = 32; + break; + } + } + } + + memset(&best_etc1_blk, 0, sizeof(best_etc1_blk)); + uint64_t best_err = UINT64_MAX; + + etc_block trial_block; + memset(&trial_block, 0, sizeof(trial_block)); + + ycbcr block_ycbcr[4][4], decoded_uastc_block_ycbcr[4][4]; + for (uint32_t y = 0; y < 4; y++) + { + for (uint32_t x = 0; x < 4; x++) + { + rgb_to_y_cb_cr(block[y][x], block_ycbcr[y][x]); + rgb_to_y_cb_cr(decoded_uastc_block[y][x], decoded_uastc_block_ycbcr[y][x]); + } + } + + uint32_t first_flip = 0, last_flip = 2; + uint32_t first_individ = 0, last_individ = 2; + + if (flags & cPackUASTCETC1DisableFlipAndIndividual) + { + last_flip = 1; + last_individ = 1; + } + else if (flip_estimate) + { + if (pack_etc1_estimate_flipped(&decoded_uastc_block[0][0])) + first_flip = 1; + last_flip = first_flip + 1; + } + + for (uint32_t flip = first_flip; flip < last_flip; flip++) + { + trial_block.set_flip_bit(flip != 0); + + for (uint32_t individ = first_individ; individ < last_individ; individ++) + { + const uint32_t mul = individ ? 15 : 31; + + trial_block.set_diff_bit(individ == 0); + + color_rgba unbiased_block_colors[2]; + + int min_r[2] = { 255, 255 }, min_g[2] = { 255, 255 }, min_b[2] = { 255, 255 }, max_r[2] = { 0, 0 }, max_g[2] = { 0, 0 }, max_b[2] = { 0, 0 }; + + for (uint32_t subset = 0; subset < 2; subset++) + { + uint32_t avg_color[3]; + memset(avg_color, 0, sizeof(avg_color)); + + for (uint32_t j = 0; j < 8; j++) + { + const etc_coord2 &c = g_etc1_pixel_coords[flip][subset][j]; + const color_rgba& p = decoded_uastc_block[c.m_y][c.m_x]; + + avg_color[0] += p.r; + avg_color[1] += p.g; + avg_color[2] += p.b; + + min_r[subset] = std::min(min_r[subset], p.r); + min_g[subset] = std::min(min_g[subset], p.g); + min_b[subset] = std::min(min_b[subset], p.b); + + max_r[subset] = std::max(max_r[subset], p.r); + max_g[subset] = std::max(max_g[subset], p.g); + max_b[subset] = std::max(max_b[subset], p.b); + } // j + + unbiased_block_colors[subset][0] = (uint8_t)((avg_color[0] * mul + 1020) / (8 * 255)); + unbiased_block_colors[subset][1] = (uint8_t)((avg_color[1] * mul + 1020) / (8 * 255)); + unbiased_block_colors[subset][2] = (uint8_t)((avg_color[2] * mul + 1020) / (8 * 255)); + unbiased_block_colors[subset][3] = 0; + + } // subset + + for (uint32_t bias_iter = 0; bias_iter < last_bias; bias_iter++) + { + const uint32_t bias = use_faster_bias_mode_table ? s_sorted_bias_modes[bias_iter] : bias_iter; + + color_rgba block_colors[2]; + for (uint32_t subset = 0; subset < 2; subset++) + block_colors[subset] = has_bias ? apply_etc1_bias((color32&)unbiased_block_colors[subset], bias, mul, subset) : unbiased_block_colors[subset]; + + if (individ) + trial_block.set_block_color4(block_colors[0], block_colors[1]); + else + trial_block.set_block_color5_clamp(block_colors[0], block_colors[1]); + + uint32_t range[2]; + for (uint32_t subset = 0; subset < 2; subset++) + { + const color_rgba base_c(trial_block.get_block_color(subset, true)); + + const int pos_r = iabs(max_r[subset] - base_c.r); + const int neg_r = iabs(base_c.r - min_r[subset]); + + const int pos_g = iabs(max_g[subset] - base_c.g); + const int neg_g = iabs(base_c.g - min_g[subset]); + + const int pos_b = iabs(max_b[subset] - base_c.b); + const int neg_b = iabs(base_c.b - min_b[subset]); + + range[subset] = maximum(maximum(pos_r, neg_r, pos_g, neg_g), pos_b, neg_b); + } + + uint32_t best_inten_table[2] = { 0, 0 }; + + for (uint32_t subset = 0; subset < 2; subset++) + { + uint64_t best_subset_err = UINT64_MAX; + + const uint32_t inten_table_limit = (level == cPackUASTCLevelVerySlow) ? 8 : ((range[subset] > 51) ? 8 : (range[subset] >= 7 ? 4 : 2)); + + for (uint32_t inten_table = 0; inten_table < inten_table_limit; inten_table++) + { + trial_block.set_inten_table(subset, inten_table); + + color_rgba color_table[4]; + trial_block.get_block_colors(color_table, subset); + + ycbcr color_table_ycbcr[4]; + for (uint32_t i = 0; i < 4; i++) + rgb_to_y_cb_cr(color_table[i], color_table_ycbcr[i]); + + uint64_t total_error = 0; + if (flip) + { + for (uint32_t y = 0; y < 2; y++) + { + { + const ycbcr& c = decoded_uastc_block_ycbcr[subset * 2 + y][0]; + total_error += minimum(color_diff(color_table_ycbcr[0], c), color_diff(color_table_ycbcr[1], c), color_diff(color_table_ycbcr[2], c), color_diff(color_table_ycbcr[3], c)); + } + { + const ycbcr& c = decoded_uastc_block_ycbcr[subset * 2 + y][1]; + total_error += minimum(color_diff(color_table_ycbcr[0], c), color_diff(color_table_ycbcr[1], c), color_diff(color_table_ycbcr[2], c), color_diff(color_table_ycbcr[3], c)); + } + { + const ycbcr& c = decoded_uastc_block_ycbcr[subset * 2 + y][2]; + total_error += minimum(color_diff(color_table_ycbcr[0], c), color_diff(color_table_ycbcr[1], c), color_diff(color_table_ycbcr[2], c), color_diff(color_table_ycbcr[3], c)); + } + { + const ycbcr& c = decoded_uastc_block_ycbcr[subset * 2 + y][3]; + total_error += minimum(color_diff(color_table_ycbcr[0], c), color_diff(color_table_ycbcr[1], c), color_diff(color_table_ycbcr[2], c), color_diff(color_table_ycbcr[3], c)); + } + if (total_error >= best_subset_err) + break; + } + } + else + { + for (uint32_t y = 0; y < 4; y++) + { + { + const ycbcr& c = decoded_uastc_block_ycbcr[y][subset * 2 + 0]; + total_error += minimum(color_diff(color_table_ycbcr[0], c), color_diff(color_table_ycbcr[1], c), color_diff(color_table_ycbcr[2], c), color_diff(color_table_ycbcr[3], c)); + } + { + const ycbcr& c = decoded_uastc_block_ycbcr[y][subset * 2 + 1]; + total_error += minimum(color_diff(color_table_ycbcr[0], c), color_diff(color_table_ycbcr[1], c), color_diff(color_table_ycbcr[2], c), color_diff(color_table_ycbcr[3], c)); + } + } + if (total_error >= best_subset_err) + break; + } + + if (total_error < best_subset_err) + { + best_subset_err = total_error; + best_inten_table[subset] = inten_table; + } + + } // inten_table + + } // subset + + trial_block.set_inten_table(0, best_inten_table[0]); + trial_block.set_inten_table(1, best_inten_table[1]); + + // Compute error against the ORIGINAL block. + uint64_t err = 0; + + for (uint32_t subset = 0; subset < 2; subset++) + { + color_rgba color_table[4]; + trial_block.get_block_colors(color_table, subset); + + ycbcr color_table_ycbcr[4]; + for (uint32_t i = 0; i < 4; i++) + rgb_to_y_cb_cr(color_table[i], color_table_ycbcr[i]); + + if (flip) + { + for (uint32_t y = 0; y < 2; y++) + { + for (uint32_t x = 0; x < 4; x++) + { + const ycbcr& c = decoded_uastc_block_ycbcr[subset * 2 + y][x]; + const uint64_t best_index_err = minimum(color_diff(color_table_ycbcr[0], c) << 2, (color_diff(color_table_ycbcr[1], c) << 2) + 1, (color_diff(color_table_ycbcr[2], c) << 2) + 2, (color_diff(color_table_ycbcr[3], c) << 2) + 3); + + const uint32_t best_index = (uint32_t)best_index_err & 3; + err += color_diff(block_ycbcr[subset * 2 + y][x], color_table_ycbcr[best_index]); + } + if (err >= best_err) + break; + } + } + else + { + for (uint32_t y = 0; y < 4; y++) + { + for (uint32_t x = 0; x < 2; x++) + { + const ycbcr& c = decoded_uastc_block_ycbcr[y][subset * 2 + x]; + const uint64_t best_index_err = minimum(color_diff(color_table_ycbcr[0], c) << 2, (color_diff(color_table_ycbcr[1], c) << 2) + 1, (color_diff(color_table_ycbcr[2], c) << 2) + 2, (color_diff(color_table_ycbcr[3], c) << 2) + 3); + + const uint32_t best_index = (uint32_t)best_index_err & 3; + err += color_diff(block_ycbcr[y][subset * 2 + x], color_table_ycbcr[best_index]); + } + if (err >= best_err) + break; + } + } + + } // subset + + if (err < best_err) + { + best_err = err; + + best_etc1_blk = trial_block; + best_etc1_bias = bias; + } + + } // bias_iter + + } // individ + + } // flip + } + + struct uastc_pack_eac_a8_results + { + uint32_t m_base; + uint32_t m_table; + uint32_t m_multiplier; + }; + + static uint64_t uastc_pack_eac_a8(uastc_pack_eac_a8_results& results, const uint8_t* pPixels, uint32_t num_pixels, uint32_t base_search_rad, uint32_t mul_search_rad, uint32_t table_mask) + { + assert(num_pixels <= 16); + + uint32_t min_alpha = 255, max_alpha = 0; + for (uint32_t i = 0; i < num_pixels; i++) + { + const uint32_t a = pPixels[i]; + if (a < min_alpha) min_alpha = a; + if (a > max_alpha) max_alpha = a; + } + + if (min_alpha == max_alpha) + { + results.m_base = min_alpha; + results.m_table = 13; + results.m_multiplier = 1; + return 0; + } + + const uint32_t alpha_range = max_alpha - min_alpha; + + uint64_t best_err = UINT64_MAX; + + for (uint32_t table = 0; table < 16; table++) + { + if ((table_mask & (1U << table)) == 0) + continue; + + const float range = (float)(g_etc2_eac_tables[table][ETC2_EAC_MAX_VALUE_SELECTOR] - g_etc2_eac_tables[table][ETC2_EAC_MIN_VALUE_SELECTOR]); + const int center = (int)roundf(lerp((float)min_alpha, (float)max_alpha, (float)(0 - g_etc2_eac_tables[table][ETC2_EAC_MIN_VALUE_SELECTOR]) / range)); + + const int base_min = clamp255(center - base_search_rad); + const int base_max = clamp255(center + base_search_rad); + + const int mul = (int)roundf(alpha_range / range); + const int mul_low = clamp(mul - mul_search_rad, 1, 15); + const int mul_high = clamp(mul + mul_search_rad, 1, 15); + + for (int base = base_min; base <= base_max; base++) + { + for (int multiplier = mul_low; multiplier <= mul_high; multiplier++) + { + uint64_t total_err = 0; + + for (uint32_t i = 0; i < num_pixels; i++) + { + const int a = pPixels[i]; + + uint32_t best_s_err = UINT32_MAX; + //uint32_t best_s = 0; + for (uint32_t s = 0; s < 8; s++) + { + const int v = clamp255((int)multiplier * g_etc2_eac_tables[table][s] + (int)base); + + uint32_t err = iabs(a - v); + if (err < best_s_err) + { + best_s_err = err; + //best_s = s; + } + } + + total_err += best_s_err * best_s_err; + if (total_err >= best_err) + break; + } + + if (total_err < best_err) + { + best_err = total_err; + results.m_base = base; + results.m_multiplier = multiplier; + results.m_table = table; + if (!best_err) + return best_err; + } + + } // table + + } // multiplier + + } // base + + return best_err; + } + + const int32_t DEFAULT_BC7_ERROR_WEIGHT = 50; + const float UASTC_ERROR_THRESH = 1.3f; + + void encode_uastc(const uint8_t* pRGBAPixels, uastc_block& output_block, uint32_t flags) + { + const color_rgba(*block)[4] = reinterpret_cast(pRGBAPixels); + + bool solid_color = true, has_alpha = false, is_la = true; + + const color_rgba first_color(block[0][0]); + for (uint32_t y = 0; y < 4; y++) + { + for (uint32_t x = 0; x < 4; x++) + { + if (block[y][x].a < 255) + has_alpha = true; + + if (block[y][x] != first_color) + solid_color = false; + + if ((block[y][x].r != block[y][x].g) || (block[y][x].r != block[y][x].b)) + is_la = false; + } + } + + if (solid_color) + { + // Solid color blocks are so common that we handle them specially and as quickly as we can. + uastc_encode_results solid_results; + solid_results.m_uastc_mode = UASTC_MODE_INDEX_SOLID_COLOR; + solid_results.m_astc_err = 0; + solid_results.m_common_pattern = 0; + solid_results.m_solid_color = first_color; + memset(&solid_results.m_astc, 0, sizeof(solid_results.m_astc)); + + etc_block etc1_blk; + uint32_t etc1_bias = 0; + + pack_etc1_block_solid_color(etc1_blk, &first_color.m_comps[0]); + + eac_a8_block eac_a8_blk; + eac_a8_blk.m_table = 0; + eac_a8_blk.m_multiplier = 1; + + pack_uastc(output_block, solid_results, etc1_blk, etc1_bias, eac_a8_blk, false, false); + + return; + } + + int level = flags & 7; + const bool favor_uastc_error = (flags & cPackUASTCFavorUASTCError) != 0; + const bool favor_bc7_error = !favor_uastc_error && ((flags & cPackUASTCFavorBC7Error) != 0); + //const bool etc1_perceptual = true; + + uastc_encode_results results[MAX_ENCODE_RESULTS]; + + level = clampi(level, cPackUASTCLevelFastest, cPackUASTCLevelVerySlow); + + // Set all options to slowest, then configure from there depending on the selected level. + uint32_t mode_mask = UINT32_MAX; + uint32_t uber_level = 6; + bool estimate_partition = false; + bool always_try_alpha_modes = true; + uint32_t eac_a8_mul_search_rad = 3; + uint32_t eac_a8_table_mask = UINT32_MAX; + uint32_t least_squares_passes = 2; + bool bc1_hints = true; + bool only_use_la_on_transparent_blocks = false; + + switch (level) + { + case cPackUASTCLevelFastest: + { + mode_mask = (1 << 0) | (1 << 8) | + (1 << 11) | (1 << 12) | + (1 << 15); + always_try_alpha_modes = false; + eac_a8_mul_search_rad = 0; + eac_a8_table_mask = (1 << 2) | (1 << 8) | (1 << 11) | (1 << 13); + uber_level = 0; + least_squares_passes = 1; + bc1_hints = false; + estimate_partition = true; + only_use_la_on_transparent_blocks = true; + break; + } + case cPackUASTCLevelFaster: + { + mode_mask = (1 << 0) | (1 << 4) | (1 << 6) | (1 << 8) | + (1 << 9) | (1 << 11) | (1 << 12) | + (1 << 15) | (1 << 17); + always_try_alpha_modes = false; + eac_a8_mul_search_rad = 0; + eac_a8_table_mask = (1 << 2) | (1 << 8) | (1 << 11) | (1 << 13); + uber_level = 0; + least_squares_passes = 1; + estimate_partition = true; + break; + } + case cPackUASTCLevelDefault: + { + mode_mask = (1 << 0) | (1 << 1) | (1 << 4) | (1 << 5) | (1 << 6) | (1 << 8) | + (1 << 9) | (1 << 10) | (1 << 11) | (1 << 12) | (1 << 13) | + (1 << 15) | (1 << 16) | (1 << 17); + always_try_alpha_modes = false; + eac_a8_mul_search_rad = 1; + eac_a8_table_mask = (1 << 0) | (1 << 2) | (1 << 6) | (1 << 7) | (1 << 8) | (1 << 10) | (1 << 11) | (1 << 13); + uber_level = 1; + least_squares_passes = 1; + estimate_partition = true; + break; + } + case cPackUASTCLevelSlower: + { + always_try_alpha_modes = false; + eac_a8_mul_search_rad = 2; + uber_level = 3; + estimate_partition = true; + break; + } + case cPackUASTCLevelVerySlow: + { + break; + } + } + +#if BASISU_SUPPORT_FORCE_MODE + static int force_mode = -1; + force_mode = (force_mode + 1) % TOTAL_UASTC_MODES; + mode_mask = UINT32_MAX; + always_try_alpha_modes = true; + only_use_la_on_transparent_blocks = false; +#endif + + // HACK HACK + //mode_mask &= ~(1 << 18); + //mode_mask = (1 << 18)| (1 << 10); + + uint32_t total_results = 0; + + if (only_use_la_on_transparent_blocks) + { + if ((is_la) && (!has_alpha)) + is_la = false; + } + + const bool try_alpha_modes = has_alpha || always_try_alpha_modes; + + bc7enc_compress_block_params comp_params; + memset(&comp_params, 0, sizeof(comp_params)); + comp_params.m_max_partitions_mode1 = 64; + comp_params.m_least_squares_passes = least_squares_passes; + comp_params.m_weights[0] = 1; + comp_params.m_weights[1] = 1; + comp_params.m_weights[2] = 1; + comp_params.m_weights[3] = 1; + comp_params.m_uber_level = uber_level; + + if (is_la) + { + if (mode_mask & (1U << 15)) + astc_mode15(block, results, total_results, comp_params); + + if (mode_mask & (1U << 16)) + astc_mode9_or_16(16, block, results, total_results, comp_params, estimate_partition ? 4 : 0); + + if (mode_mask & (1U << 17)) + astc_mode11_or_17(17, block, results, total_results, comp_params); + } + + if (!has_alpha) + { + if (mode_mask & (1U << 0)) + astc_mode0_or_18(0, block, results, total_results, comp_params); + + if (mode_mask & (1U << 1)) + astc_mode1(block, results, total_results, comp_params); + + if (mode_mask & (1U << 2)) + astc_mode2(block, results, total_results, comp_params, estimate_partition); + + if (mode_mask & (1U << 3)) + astc_mode3(block, results, total_results, comp_params, estimate_partition); + + if (mode_mask & (1U << 4)) + astc_mode4(block, results, total_results, comp_params, estimate_partition); + + if (mode_mask & (1U << 5)) + astc_mode5(block, results, total_results, comp_params); + + if (mode_mask & (1U << 6)) + astc_mode6(block, results, total_results, comp_params); + + if (mode_mask & (1U << 7)) + astc_mode7(block, results, total_results, comp_params, estimate_partition); + + if (mode_mask & (1U << 18)) + astc_mode0_or_18(18, block, results, total_results, comp_params); + } + + if (try_alpha_modes) + { + if (mode_mask & (1U << 9)) + astc_mode9_or_16(9, block, results, total_results, comp_params, estimate_partition ? 4 : 0); + + if (mode_mask & (1U << 10)) + astc_mode10(block, results, total_results, comp_params); + + if (mode_mask & (1U << 11)) + astc_mode11_or_17(11, block, results, total_results, comp_params); + + if (mode_mask & (1U << 12)) + astc_mode12(block, results, total_results, comp_params); + + if (mode_mask & (1U << 13)) + astc_mode13(block, results, total_results, comp_params); + + if (mode_mask & (1U << 14)) + astc_mode14(block, results, total_results, comp_params); + } + + assert(total_results); + + // Fix up the errors so we consistently have LA, RGB, or RGBA error. + for (uint32_t i = 0; i < total_results; i++) + { + uastc_encode_results& r = results[i]; + if (!is_la) + { + if (g_uastc_mode_is_la[r.m_uastc_mode]) + { + color_rgba unpacked_block[16]; + unpack_uastc(r.m_uastc_mode, r.m_common_pattern, r.m_solid_color.get_color32(), r.m_astc, (basist::color32 *)unpacked_block, false); + + uint64_t total_err = 0; + for (uint32_t j = 0; j < 16; j++) + total_err += color_distance(unpacked_block[j], ((const color_rgba*)block)[j], true); + + r.m_astc_err = total_err; + } + } + else + { + if (!g_uastc_mode_is_la[r.m_uastc_mode]) + { + color_rgba unpacked_block[16]; + unpack_uastc(r.m_uastc_mode, r.m_common_pattern, r.m_solid_color.get_color32(), r.m_astc, (basist::color32 *)unpacked_block, false); + + uint64_t total_err = 0; + for (uint32_t j = 0; j < 16; j++) + total_err += color_distance_la(unpacked_block[j], ((const color_rgba*)block)[j]); + + r.m_astc_err = total_err; + } + } + } + + unpacked_uastc_block unpacked_ublock; + memset(&unpacked_ublock, 0, sizeof(unpacked_ublock)); + + uint64_t total_overall_err[MAX_ENCODE_RESULTS]; + float uastc_err_f[MAX_ENCODE_RESULTS]; + double best_uastc_err_f = 1e+20f; + + int best_index = -1; + + if (total_results == 1) + { + best_index = 0; + } + else + { + const uint32_t bc7_err_weight = favor_bc7_error ? 100 : ((favor_uastc_error ? 0 : DEFAULT_BC7_ERROR_WEIGHT)); + const uint32_t uastc_err_weight = favor_bc7_error ? 0 : 100; + + // Find best overall results, balancing UASTC and UASTC->BC7 error. + // We purposely allow UASTC error to increase a little, if doing so lowers the BC7 error. + for (uint32_t i = 0; i < total_results; i++) + { +#if BASISU_SUPPORT_FORCE_MODE + if (results[i].m_uastc_mode == force_mode) + { + best_index = i; + break; + } +#endif + + unpacked_ublock.m_mode = results[i].m_uastc_mode; + unpacked_ublock.m_astc = results[i].m_astc; + unpacked_ublock.m_common_pattern = results[i].m_common_pattern; + unpacked_ublock.m_solid_color = results[i].m_solid_color.get_color32(); + + color_rgba decoded_uastc_block[4][4]; + bool success = unpack_uastc(results[i].m_uastc_mode, results[i].m_common_pattern, results[i].m_solid_color.get_color32(), results[i].m_astc, (basist::color32 *)&decoded_uastc_block[0][0], false); + (void)success; + VALIDATE(success); + + uint64_t total_uastc_rgb_err, total_uastc_rgba_err, total_uastc_la_err; + compute_block_error(block, decoded_uastc_block, total_uastc_rgb_err, total_uastc_rgba_err, total_uastc_la_err); + + // Validate the computed error, or we're go mad if it's inaccurate. + if (results[i].m_uastc_mode == UASTC_MODE_INDEX_SOLID_COLOR) + { + VALIDATE(total_uastc_rgba_err == 0); + } + else if (is_la) + { + VALIDATE(total_uastc_la_err == results[i].m_astc_err); + } + else if (g_uastc_mode_has_alpha[results[i].m_uastc_mode]) + { + VALIDATE(total_uastc_rgba_err == results[i].m_astc_err); + } + else + { + VALIDATE(total_uastc_rgb_err == results[i].m_astc_err); + } + + // Transcode to BC7 + bc7_optimization_results bc7_results; + transcode_uastc_to_bc7(unpacked_ublock, bc7_results); + + bc7_block bc7_data; + encode_bc7_block(&bc7_data, &bc7_results); + + color_rgba decoded_bc7_block[4][4]; + unpack_block(texture_format::cBC7, &bc7_data, &decoded_bc7_block[0][0]); + + // Compute BC7 error + uint64_t total_bc7_la_err, total_bc7_rgb_err, total_bc7_rgba_err; + compute_block_error(block, decoded_bc7_block, total_bc7_rgb_err, total_bc7_rgba_err, total_bc7_la_err); + + if (results[i].m_uastc_mode == UASTC_MODE_INDEX_SOLID_COLOR) + { + VALIDATE(total_bc7_rgba_err == 0); + + best_index = i; + break; + } + + uint64_t total_uastc_err = 0, total_bc7_err = 0; + if (is_la) + { + total_bc7_err = total_bc7_la_err; + total_uastc_err = total_uastc_la_err; + } + else if (has_alpha) + { + total_bc7_err = total_bc7_rgba_err; + total_uastc_err = total_uastc_rgba_err; + } + else + { + total_bc7_err = total_bc7_rgb_err; + total_uastc_err = total_uastc_rgb_err; + } + + total_overall_err[i] = ((total_bc7_err * bc7_err_weight) / 100) + ((total_uastc_err * uastc_err_weight) / 100); + if (!total_overall_err[i]) + { + best_index = i; + break; + } + + uastc_err_f[i] = sqrtf((float)total_uastc_err); + + if (uastc_err_f[i] < best_uastc_err_f) + { + best_uastc_err_f = uastc_err_f[i]; + } + + } // total_results + + if (best_index < 0) + { + uint64_t best_err = UINT64_MAX; + + if ((best_uastc_err_f == 0.0f) || (favor_bc7_error)) + { + for (uint32_t i = 0; i < total_results; i++) + { + if (total_overall_err[i] < best_err) + { + best_err = total_overall_err[i]; + best_index = i; + if (!best_err) + break; + } + } // i + } + else + { + // Scan the UASTC results, and consider all results within a window that has the best UASTC+BC7 error. + for (uint32_t i = 0; i < total_results; i++) + { + double err_delta = uastc_err_f[i] / best_uastc_err_f; + + if (err_delta <= UASTC_ERROR_THRESH) + { + if (total_overall_err[i] < best_err) + { + best_err = total_overall_err[i]; + best_index = i; + if (!best_err) + break; + } + } + } // i + } + } + } + + const uastc_encode_results& best_results = results[best_index]; + const uint32_t best_mode = best_results.m_uastc_mode; + const astc_block_desc& best_astc_results = best_results.m_astc; + + color_rgba decoded_uastc_block[4][4]; + bool success = unpack_uastc(best_mode, best_results.m_common_pattern, best_results.m_solid_color.get_color32(), best_astc_results, (basist::color32 *)&decoded_uastc_block[0][0], false); + (void)success; + VALIDATE(success); + +#if BASISU_VALIDATE_UASTC_ENC + // Make sure that the UASTC block unpacks to the same exact pixels as the ASTC block does, using two different decoders. + { + // Round trip to packed UASTC and back, then decode to pixels. + etc_block etc1_blk; + memset(&etc1_blk, 0, sizeof(etc1_blk)); + eac_a8_block etc_eac_a8_blk; + memset(&etc_eac_a8_blk, 0, sizeof(etc_eac_a8_blk)); + etc_eac_a8_blk.m_multiplier = 1; + + basist::uastc_block temp_block; + pack_uastc(temp_block, best_results, etc1_blk, 0, etc_eac_a8_blk, false, false); + + basist::color32 temp_block_unpacked[4][4]; + success = basist::unpack_uastc(temp_block, (basist::color32 *)temp_block_unpacked, false); + VALIDATE(success); + + // Now round trip to packed ASTC and back, then decode to pixels. + uint32_t astc_data[4]; + + if (best_results.m_uastc_mode == UASTC_MODE_INDEX_SOLID_COLOR) + pack_astc_solid_block(astc_data, (color32 &)best_results.m_solid_color); + else + { + success = pack_astc_block(astc_data, &best_astc_results, best_results.m_uastc_mode); + VALIDATE(success); + } + + color_rgba decoded_astc_block[4][4]; + success = basisu_astc::astc::decompress((uint8_t*)decoded_astc_block, (uint8_t*)&astc_data, false, 4, 4); + VALIDATE(success); + + for (uint32_t y = 0; y < 4; y++) + { + for (uint32_t x = 0; x < 4; x++) + { + VALIDATE(decoded_astc_block[y][x] == decoded_uastc_block[y][x]); + + VALIDATE(temp_block_unpacked[y][x].c[0] == decoded_uastc_block[y][x].r); + VALIDATE(temp_block_unpacked[y][x].c[1] == decoded_uastc_block[y][x].g); + VALIDATE(temp_block_unpacked[y][x].c[2] == decoded_uastc_block[y][x].b); + VALIDATE(temp_block_unpacked[y][x].c[3] == decoded_uastc_block[y][x].a); + } + } + } +#endif + + // Compute BC1 hints + bool bc1_hint0 = false, bc1_hint1 = false; + if (bc1_hints) + compute_bc1_hints(bc1_hint0, bc1_hint1, best_results, block, decoded_uastc_block); + + eac_a8_block eac_a8_blk; + if ((g_uastc_mode_has_alpha[best_mode]) && (best_mode != UASTC_MODE_INDEX_SOLID_COLOR)) + { + // Compute ETC2 hints + uint8_t decoded_uastc_block_alpha[16]; + for (uint32_t i = 0; i < 16; i++) + decoded_uastc_block_alpha[i] = decoded_uastc_block[i >> 2][i & 3].a; + + uastc_pack_eac_a8_results eac8_a8_results; + memset(&eac8_a8_results, 0, sizeof(eac8_a8_results)); + uastc_pack_eac_a8(eac8_a8_results, decoded_uastc_block_alpha, 16, 0, eac_a8_mul_search_rad, eac_a8_table_mask); + + // All we care about for hinting is the table and multiplier. + eac_a8_blk.m_table = eac8_a8_results.m_table; + eac_a8_blk.m_multiplier = eac8_a8_results.m_multiplier; + } + else + { + memset(&eac_a8_blk, 0, sizeof(eac_a8_blk)); + } + + // Compute ETC1 hints + etc_block etc1_blk; + uint32_t etc1_bias = 0; + compute_etc1_hints(etc1_blk, etc1_bias, best_results, block, decoded_uastc_block, level, flags); + + // Finally, pack the UASTC block with its hints and we're done. + pack_uastc(output_block, best_results, etc1_blk, etc1_bias, eac_a8_blk, bc1_hint0, bc1_hint1); + } + static bool uastc_recompute_hints(basist::uastc_block* pBlock, const color_rgba* pBlock_pixels, uint32_t flags, const unpacked_uastc_block *pUnpacked_blk) + { + unpacked_uastc_block unpacked_blk; + + if (pUnpacked_blk) + unpacked_blk = *pUnpacked_blk; + else + { + if (!unpack_uastc(*pBlock, unpacked_blk, false, true)) + return false; + } + color_rgba decoded_uastc_block[4][4]; + if (!unpack_uastc(unpacked_blk, (basist::color32 *)decoded_uastc_block, false)) + return false; + uastc_encode_results results; + results.m_uastc_mode = unpacked_blk.m_mode; + results.m_common_pattern = unpacked_blk.m_common_pattern; + results.m_astc = unpacked_blk.m_astc; + results.m_solid_color = unpacked_blk.m_solid_color; + results.m_astc_err = 0; + bool bc1_hints = true; + uint32_t eac_a8_mul_search_rad = 3; + uint32_t eac_a8_table_mask = UINT32_MAX; + const uint32_t level = flags & cPackUASTCLevelMask; + switch (level) + { + case cPackUASTCLevelFastest: + { + eac_a8_mul_search_rad = 0; + eac_a8_table_mask = (1 << 2) | (1 << 8) | (1 << 11) | (1 << 13); + bc1_hints = false; + break; + } + case cPackUASTCLevelFaster: + { + eac_a8_mul_search_rad = 0; + eac_a8_table_mask = (1 << 2) | (1 << 8) | (1 << 11) | (1 << 13); + break; + } + case cPackUASTCLevelDefault: + { + eac_a8_mul_search_rad = 1; + eac_a8_table_mask = (1 << 0) | (1 << 2) | (1 << 6) | (1 << 7) | (1 << 8) | (1 << 10) | (1 << 11) | (1 << 13); + break; + } + case cPackUASTCLevelSlower: + { + eac_a8_mul_search_rad = 2; + break; + } + case cPackUASTCLevelVerySlow: + { + break; + } + } + bool bc1_hint0 = false, bc1_hint1 = false; + if (bc1_hints) + compute_bc1_hints(bc1_hint0, bc1_hint1, results, (color_rgba (*)[4])pBlock_pixels, decoded_uastc_block); + const uint32_t best_mode = unpacked_blk.m_mode; + eac_a8_block eac_a8_blk; + if ((g_uastc_mode_has_alpha[best_mode]) && (best_mode != UASTC_MODE_INDEX_SOLID_COLOR)) + { + uint8_t decoded_uastc_block_alpha[16]; + for (uint32_t i = 0; i < 16; i++) + decoded_uastc_block_alpha[i] = decoded_uastc_block[i >> 2][i & 3].a; + uastc_pack_eac_a8_results eac8_a8_results; + memset(&eac8_a8_results, 0, sizeof(eac8_a8_results)); + uastc_pack_eac_a8(eac8_a8_results, decoded_uastc_block_alpha, 16, 0, eac_a8_mul_search_rad, eac_a8_table_mask); + eac_a8_blk.m_table = eac8_a8_results.m_table; + eac_a8_blk.m_multiplier = eac8_a8_results.m_multiplier; + } + else + { + memset(&eac_a8_blk, 0, sizeof(eac_a8_blk)); + } + etc_block etc1_blk; + uint32_t etc1_bias = 0; + compute_etc1_hints(etc1_blk, etc1_bias, results, (color_rgba (*)[4])pBlock_pixels, decoded_uastc_block, level, flags); + pack_uastc(*pBlock, results, etc1_blk, etc1_bias, eac_a8_blk, bc1_hint0, bc1_hint1); + return true; + } + static const uint8_t g_uastc_mode_selector_bits[TOTAL_UASTC_MODES][2] = + { + { 65, 63 }, { 69, 31 }, { 73, 46 }, { 89, 29 }, + { 89, 30 }, { 68, 47 }, { 66, 62 }, { 89, 30 }, + { 0, 0 }, { 97, 30 }, { 65, 63 }, { 66, 62 }, + { 81, 47 }, { 94, 30 }, { 92, 31 }, { 62, 63 }, + { 98, 30 }, { 61, 62 }, { 49, 79 } + }; + static inline uint32_t set_block_bits(uint8_t* pBytes, uint64_t val, uint32_t num_bits, uint32_t cur_ofs) + { + assert(num_bits <= 64); + assert((num_bits == 64) || (val < (1ULL << num_bits))); + uint64_t mask = (num_bits == 64) ? UINT64_MAX : ((1ULL << num_bits) - 1); + while (num_bits) + { + const uint32_t n = basisu::minimum(8U - (cur_ofs & 7U), num_bits); + pBytes[cur_ofs >> 3] &= ~static_cast(mask << (cur_ofs & 7U)); + pBytes[cur_ofs >> 3] |= static_cast(val << (cur_ofs & 7U)); + val >>= n; + mask >>= n; + num_bits -= n; + cur_ofs += n; + } + return cur_ofs; + } + static const uint8_t g_tdefl_small_dist_extra[512] = + { + 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7 + }; + static const uint8_t g_tdefl_large_dist_extra[128] = + { + 0, 0, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13 + }; + static inline uint32_t compute_match_cost_estimate(uint32_t dist) + { + uint32_t len_cost = 7; + uint32_t dist_cost = 5; + if (dist < 512) + dist_cost += g_tdefl_small_dist_extra[dist & 511]; + else + { + dist_cost += g_tdefl_large_dist_extra[std::min(dist, 32767) >> 8]; + while (dist >= 32768) + { + dist_cost++; + dist >>= 1; + } + } + return len_cost + dist_cost; + } + struct selector_bitsequence + { + uint64_t m_sel; + uint32_t m_ofs; + selector_bitsequence() { } + selector_bitsequence(uint32_t bit_ofs, uint64_t sel) : m_sel(sel), m_ofs(bit_ofs) { } + bool operator== (const selector_bitsequence& other) const + { + return (m_ofs == other.m_ofs) && (m_sel == other.m_sel); + } + + bool operator< (const selector_bitsequence& other) const + { + if (m_ofs < other.m_ofs) + return true; + else if (m_ofs == other.m_ofs) + return m_sel < other.m_sel; + + return false; + } + }; + + struct selector_bitsequence_hash + { + std::size_t operator()(selector_bitsequence const& s) const noexcept + { + return hash_hsieh((uint8_t *)&s, sizeof(s)) ^ s.m_sel; + } + }; + + static bool uastc_rdo_blocks(uint32_t first_index, uint32_t last_index, basist::uastc_block* pBlocks, const color_rgba* pBlock_pixels, const uastc_rdo_params& params, uint32_t flags, + uint32_t &total_skipped, uint32_t &total_refined, uint32_t &total_modified) + { + debug_printf("uastc_rdo_blocks: Processing blocks %u to %u\n", first_index, last_index); + + const int total_blocks_to_check = std::max(1U, params.m_lz_dict_size / sizeof(basist::uastc_block)); + const bool perceptual = false; + + std::unordered_map selector_history; + + for (uint32_t block_index = first_index; block_index < last_index; block_index++) + { + const basist::uastc_block& blk = pBlocks[block_index]; + const color_rgba* pPixels = &pBlock_pixels[16 * block_index]; + + unpacked_uastc_block unpacked_blk; + if (!unpack_uastc(blk, unpacked_blk, false, true)) + return false; + + const uint32_t block_mode = unpacked_blk.m_mode; + if (block_mode == UASTC_MODE_INDEX_SOLID_COLOR) + continue; + + color_rgba decoded_uastc_block[4][4]; + if (!unpack_uastc(unpacked_blk, (basist::color32*)decoded_uastc_block, false)) + return false; + + uint64_t uastc_err = 0; + for (uint32_t i = 0; i < 16; i++) + uastc_err += color_distance(perceptual, pPixels[i], ((color_rgba*)decoded_uastc_block)[i], true); + + // Transcode to BC7 + bc7_optimization_results b7_results; + if (!transcode_uastc_to_bc7(unpacked_blk, b7_results)) + return false; + + basist::bc7_block b7_block; + basist::encode_bc7_block(&b7_block, &b7_results); + + color_rgba decoded_b7_blk[4][4]; + unpack_block(texture_format::cBC7, &b7_block, &decoded_b7_blk[0][0]); + + uint64_t bc7_err = 0; + for (uint32_t i = 0; i < 16; i++) + bc7_err += color_distance(perceptual, pPixels[i], ((color_rgba*)decoded_b7_blk)[i], true); + + uint64_t cur_err = (uastc_err + bc7_err) / 2; + + // Divide by 16*4 to compute RMS error + float cur_rms_err = sqrt((float)cur_err * (1.0f / 64.0f)); + + const uint32_t first_sel_bit = g_uastc_mode_selector_bits[block_mode][0]; + const uint32_t total_sel_bits = g_uastc_mode_selector_bits[block_mode][1]; + assert(first_sel_bit + total_sel_bits <= 128); + assert(total_sel_bits > 0); + + uint32_t cur_bit_offset = first_sel_bit; + uint64_t cur_sel_bits = read_bits((const uint8_t*)&blk, cur_bit_offset, std::min(64U, total_sel_bits)); + + if (cur_rms_err >= params.m_skip_block_rms_thresh) + { + auto cur_search_res = selector_history.insert(std::make_pair(selector_bitsequence(first_sel_bit, cur_sel_bits), block_index)); + + // Block already has too much error, so don't mess with it. + if (!cur_search_res.second) + (*cur_search_res.first).second = block_index; + + total_skipped++; + continue; + } + + int cur_bits; + auto cur_find_res = selector_history.find(selector_bitsequence(first_sel_bit, cur_sel_bits)); + if (cur_find_res == selector_history.end()) + { + // Wasn't found - wildly estimate literal cost + //cur_bits = (total_sel_bits * 5) / 4; + cur_bits = (total_sel_bits * params.m_lz_literal_cost) / 100; + } + else + { + // Was found - wildly estimate match cost + uint32_t match_block_index = cur_find_res->second; + const int block_dist_in_bytes = (block_index - match_block_index) * 16; + cur_bits = compute_match_cost_estimate(block_dist_in_bytes); + } + + int first_block_to_check = std::max(first_index, block_index - total_blocks_to_check); + int last_block_to_check = block_index - 1; + + basist::uastc_block best_block(blk); + uint32_t best_block_index = block_index; + + float best_t = (cur_bits + cur_err * params.m_langrangian_multiplier) * params.m_quality_scaler; + + // Now scan through previous blocks, insert their selector bit patterns into the current block, and find + // selector bit patterns which don't increase the overall block error too much. + for (int prev_block_index = last_block_to_check; prev_block_index >= first_block_to_check; --prev_block_index) + { + const basist::uastc_block& prev_blk = pBlocks[prev_block_index]; + + uint32_t bit_offset = first_sel_bit; + uint64_t sel_bits = read_bits((const uint8_t*)&prev_blk, bit_offset, std::min(64U, total_sel_bits)); + + int match_block_index = prev_block_index; + auto res = selector_history.find(selector_bitsequence(first_sel_bit, sel_bits)); + if (res != selector_history.end()) + match_block_index = res->second; + // Have we already checked this bit pattern? If so then skip this block. + if (match_block_index > prev_block_index) + continue; + + unpacked_uastc_block unpacked_prev_blk; + if (!unpack_uastc(prev_blk, unpacked_prev_blk, false, true)) + return false; + + basist::uastc_block trial_blk(blk); + + set_block_bits((uint8_t*)&trial_blk, sel_bits, std::min(64U, total_sel_bits), first_sel_bit); + + if (total_sel_bits > 64) + { + sel_bits = read_bits((const uint8_t*)&prev_blk, bit_offset, total_sel_bits - 64U); + + set_block_bits((uint8_t*)&trial_blk, sel_bits, total_sel_bits - 64U, first_sel_bit + std::min(64U, total_sel_bits)); + } + + unpacked_uastc_block unpacked_trial_blk; + if (!unpack_uastc(trial_blk, unpacked_trial_blk, false, true)) + continue; + + color_rgba decoded_trial_uastc_block[4][4]; + if (!unpack_uastc(unpacked_trial_blk, (basist::color32*)decoded_trial_uastc_block, false)) + continue; + + uint64_t trial_uastc_err = 0; + for (uint32_t i = 0; i < 16; i++) + trial_uastc_err += color_distance(perceptual, pPixels[i], ((color_rgba*)decoded_trial_uastc_block)[i], true); + + // Transcode trial to BC7, compute error + bc7_optimization_results trial_b7_results; + if (!transcode_uastc_to_bc7(unpacked_trial_blk, trial_b7_results)) + return false; + + basist::bc7_block trial_b7_block; + basist::encode_bc7_block(&trial_b7_block, &trial_b7_results); + + color_rgba decoded_trial_b7_blk[4][4]; + unpack_block(texture_format::cBC7, &trial_b7_block, &decoded_trial_b7_blk[0][0]); + + uint64_t trial_bc7_err = 0; + for (uint32_t i = 0; i < 16; i++) + trial_bc7_err += color_distance(perceptual, pPixels[i], ((color_rgba*)decoded_trial_b7_blk)[i], true); + + uint64_t trial_err = (trial_uastc_err + trial_bc7_err) / 2; + + float trial_rms_err = sqrtf((float)trial_err * (1.0f / 64.0f)); + + if (trial_rms_err > cur_rms_err* params.m_max_allowed_rms_increase_ratio) + continue; + + const int block_dist_in_bytes = (block_index - match_block_index) * 16; + const int match_bits = compute_match_cost_estimate(block_dist_in_bytes); + + float t = match_bits + trial_err * params.m_langrangian_multiplier; + if (t < best_t) + { + best_t = t; + best_block_index = prev_block_index; + + best_block = trial_blk; + } + + } // prev_block_index + + if ((params.m_endpoint_refinement) && (best_block_index != block_index)) + { + total_modified++; + + unpacked_uastc_block unpacked_best_blk; + if (!unpack_uastc(best_block, unpacked_best_blk, false, false)) + return false; + + if (block_mode == 0) + { + // Attempt to refine mode 0 block's endpoints, using the new selectors. This doesn't help much, but it does help. + // TODO: We could do this with the other modes too. + color_rgba decoded_best_uastc_block[4][4]; + if (!unpack_uastc(unpacked_best_blk, (basist::color32*)decoded_best_uastc_block, false)) + return false; + + // Compute the block's current error (with the modified selectors). + uint64_t best_uastc_err = 0; + for (uint32_t i = 0; i < 16; i++) + best_uastc_err += color_distance(perceptual, pPixels[i], ((color_rgba*)decoded_best_uastc_block)[i], true); + + bc7enc_compress_block_params comp_params; + memset(&comp_params, 0, sizeof(comp_params)); + comp_params.m_max_partitions_mode1 = 64; + comp_params.m_least_squares_passes = 1; + comp_params.m_weights[0] = 1; + comp_params.m_weights[1] = 1; + comp_params.m_weights[2] = 1; + comp_params.m_weights[3] = 1; + comp_params.m_uber_level = 0; + + uastc_encode_results results; + uint32_t total_results = 0; + astc_mode0_or_18(0, (color_rgba(*)[4])pPixels, &results, total_results, comp_params, unpacked_best_blk.m_astc.m_weights); + assert(total_results == 1); + + // See if the overall error has actually gone done. + + color_rgba decoded_trial_uastc_block[4][4]; + bool success = unpack_uastc(results.m_uastc_mode, results.m_common_pattern, results.m_solid_color.get_color32(), results.m_astc, (basist::color32*) & decoded_trial_uastc_block[0][0], false); + assert(success); + + BASISU_NOTE_UNUSED(success); + + uint64_t trial_uastc_err = 0; + for (uint32_t i = 0; i < 16; i++) + trial_uastc_err += color_distance(perceptual, pPixels[i], ((color_rgba*)decoded_trial_uastc_block)[i], true); + + if (trial_uastc_err < best_uastc_err) + { + // The error went down, so accept the new endpoints. + + // Ensure the selectors haven't changed, otherwise we'll invalidate the LZ matches. + for (uint32_t i = 0; i < 16; i++) + assert(unpacked_best_blk.m_astc.m_weights[i] == results.m_astc.m_weights[i]); + + unpacked_best_blk.m_astc = results.m_astc; + + total_refined++; + } + } + + if (!uastc_recompute_hints(&best_block, pPixels, flags, &unpacked_best_blk)) + return false; + + pBlocks[block_index] = best_block; + } + + { + uint32_t bit_offset = first_sel_bit; + uint64_t sel_bits = read_bits((const uint8_t*)&best_block, bit_offset, std::min(64U, total_sel_bits)); + + auto res = selector_history.insert(std::make_pair(selector_bitsequence(first_sel_bit, sel_bits), block_index)); + if (!res.second) + (*res.first).second = block_index; + } + + } // block_index + + return true; + } + + // This function implements a basic form of rate distortion optimization (RDO) for UASTC. + // It only changes selectors and then updates the hints. It uses very approximate LZ bitprice estimation. + // There's A LOT that can be done better in here, but it's a start. + // One nice advantage of the method used here is that it works for any input, no matter which or how many modes it uses. + bool uastc_rdo(uint32_t num_blocks, basist::uastc_block* pBlocks, const color_rgba* pBlock_pixels, const uastc_rdo_params& params, uint32_t flags, job_pool* pJob_pool, uint32_t total_jobs) + { + assert(params.m_max_allowed_rms_increase_ratio > 1.0f); + assert(params.m_lz_dict_size > 0); + assert(params.m_quality_scaler > 0.0f); + + uint32_t total_skipped = 0, total_modified = 0, total_refined = 0; + + uint32_t blocks_per_job = total_jobs ? (num_blocks / total_jobs) : 0; + + std::mutex stat_mutex; + + bool status = false; + + if ((!pJob_pool) || (total_jobs <= 1) || (blocks_per_job <= 8)) + { + status = uastc_rdo_blocks(0, num_blocks, pBlocks, pBlock_pixels, params, flags, total_skipped, total_refined, total_modified); + } + else + { + bool all_succeeded = true; + + for (uint32_t block_index_iter = 0; block_index_iter < num_blocks; block_index_iter += blocks_per_job) + { + const uint32_t first_index = block_index_iter; + const uint32_t last_index = minimum(num_blocks, block_index_iter + blocks_per_job); + + pJob_pool->add_job([first_index, last_index, pBlocks, pBlock_pixels, ¶ms, flags, &total_skipped, &total_modified, &total_refined, &all_succeeded, &stat_mutex] { + + uint32_t job_skipped = 0, job_modified = 0, job_refined = 0; + + bool status = uastc_rdo_blocks(first_index, last_index, pBlocks, pBlock_pixels, params, flags, job_skipped, job_refined, job_modified); + + { + std::lock_guard lck(stat_mutex); + + all_succeeded = all_succeeded && status; + total_skipped += job_skipped; + total_modified += job_modified; + total_refined += job_refined; + } + + } + ); + } // block_index_iter + + pJob_pool->wait_for_all(); + + status = all_succeeded; + } + + debug_printf("uastc_rdo: Total modified: %3.2f%%, total skipped: %3.2f%%, total refined: %3.2f%%\n", total_modified * 100.0f / num_blocks, total_skipped * 100.0f / num_blocks, total_refined * 100.0f / num_blocks); + + return status; + } +} // namespace basisu + + + + + diff --git a/basisu_uastc_enc.h b/basisu_uastc_enc.h new file mode 100644 index 0000000..20a143b --- /dev/null +++ b/basisu_uastc_enc.h @@ -0,0 +1,125 @@ +// basisu_uastc_enc.h +// Copyright (C) 2019-2020 Binomial LLC. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +#pragma once +#include "basisu_etc.h" + +#include "transcoder/basisu_transcoder_uastc.h" + +namespace basisu +{ + const uint32_t TOTAL_PACK_UASTC_LEVELS = 5; + + enum + { + // Fastest is the lowest quality, although it's stil substantially higher quality vs. BC1/ETC1. It supports 5 modes. + // The output may be somewhat blocky because this setting doesn't support 2/3-subset UASTC modes, but it should be less blocky vs. BC1/ETC1. + // This setting doesn't write BC1 hints, so BC1 transcoding will be slower. + // Transcoded ETC1 quality will be lower because it only considers 2 hints out of 32. + // Avg. 43.45 dB + cPackUASTCLevelFastest = 0, + + // Faster is ~3x slower than fastest. It supports 9 modes. + // Avg. 46.49 dB + cPackUASTCLevelFaster = 1, + + // Default is ~5.5x slower than fastest. It supports 14 modes. + // Avg. 47.47 dB + cPackUASTCLevelDefault = 2, + + // Slower is ~14.5x slower than fastest. It supports all 18 modes. + // Avg. 48.01 dB + cPackUASTCLevelSlower = 3, + + // VerySlow is ~200x slower than fastest. + // The best quality the codec is capable of, but you'll need to be patient or have a lot of cores. + // Avg. 48.24 dB + cPackUASTCLevelVerySlow = 4, + + cPackUASTCLevelMask = 0xF, + + // By default the encoder tries to strike a balance between UASTC and transcoded BC7 quality. + // These flags allow you to favor only optimizing for lowest UASTC error, or lowest BC7 error. + cPackUASTCFavorUASTCError = 8, + cPackUASTCFavorBC7Error = 16, + + cPackUASTCETC1FasterHints = 64, + cPackUASTCETC1FastestHints = 128, + cPackUASTCETC1DisableFlipAndIndividual = 256, + }; + + // pRGBAPixels: Pointer to source 4x4 block of RGBA pixels (R first in memory). + // block: Reference to destination UASTC block. + // level: Controls compression speed vs. performance tradeoff. + void encode_uastc(const uint8_t* pRGBAPixels, basist::uastc_block& output_block, uint32_t flags = cPackUASTCLevelDefault); + + struct uastc_encode_results + { + uint32_t m_uastc_mode; + uint32_t m_common_pattern; + basist::astc_block_desc m_astc; + color_rgba m_solid_color; + uint64_t m_astc_err; + }; + + void pack_uastc(basist::uastc_block& blk, const uastc_encode_results& result, const etc_block& etc1_blk, uint32_t etc1_bias, const eac_a8_block& etc_eac_a8_blk, bool bc1_hint0, bool bc1_hint1); + const float UASTC_RDO_DEFAULT_MAX_ALLOWED_RMS_INCREASE_RATIO = 10.0f; + const float UASTC_RDO_DEFAULT_SKIP_BLOCK_RMS_THRESH = 8.0f; + + struct uastc_rdo_params + { + uastc_rdo_params() + { + clear(); + } + + void clear() + { + m_quality_scaler = 1.0f; + m_lz_dict_size = 32768; + m_langrangian_multiplier = 0.025f; + m_max_allowed_rms_increase_ratio = UASTC_RDO_DEFAULT_MAX_ALLOWED_RMS_INCREASE_RATIO; + m_skip_block_rms_thresh = UASTC_RDO_DEFAULT_SKIP_BLOCK_RMS_THRESH; + m_endpoint_refinement = true; + m_lz_literal_cost = 100; + } + + // m_quality_scaler: This value controls the overall quality vs. size tradeoff. Smaller values=larger/higher quality, 0=no change, larger values=smaller/lower quality. + // Good range to try is .2-2.5. + float m_quality_scaler; + + // m_lz_dict_size: Size of LZ dictionary to simulate in bytes. The larger this value, the slower the encoder but the higher the quality per LZ compressed bit. + uint32_t m_lz_dict_size; + + // m_langrangian_multiplier: The post-processor tries to reduce rate+distortion*langrangian_mul (rate is approximate LZ bits and distortion is squared error). + // Larger values push the postprocessor towards optimizing more for lower distortion, and smaller values more for rate. + float m_langrangian_multiplier; + + // m_max_allowed_rms_increase_ratio: How much the RMS error of a block is allowed to increase before a trial is rejected. 1.0=no increase allowed, 1.05=5% increase allowed, etc. + float m_max_allowed_rms_increase_ratio; + + // m_skip_block_rms_thresh: Blocks with this much RMS error or more are completely skipped by the RDO encoder. + float m_skip_block_rms_thresh; + + // m_endpoint_refinement: If true, the post-process will attempt to refine the endpoints of blocks with modified selectors. + bool m_endpoint_refinement; + + uint32_t m_lz_literal_cost; + }; + + // num_blocks, pBlocks: Number of blocks and pointer to UASTC blocks to process. + // pBlock_pixels: Pointer to an array of 4x4 blocks containing the original texture pixels. This is NOT a raster image, but a pointer to individual 4x4 blocks. + // flags: Pass in the same flags used to encode the UASTC blocks. The flags are used to reencode the transcode hints in the same way. + bool uastc_rdo(uint32_t num_blocks, basist::uastc_block* pBlocks, const color_rgba* pBlock_pixels, const uastc_rdo_params ¶ms, uint32_t flags = cPackUASTCLevelDefault, job_pool* pJob_pool = nullptr, uint32_t total_jobs = 0); +} // namespace basisu \ No newline at end of file From a00677ab129ac71a7839d7464692e58a1d418d7c Mon Sep 17 00:00:00 2001 From: Rich Geldreich Date: Fri, 20 Mar 2020 01:59:01 -0400 Subject: [PATCH 08/16] new files --- basisu_miniz.h | 2515 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 2515 insertions(+) create mode 100644 basisu_miniz.h diff --git a/basisu_miniz.h b/basisu_miniz.h new file mode 100644 index 0000000..f0da549 --- /dev/null +++ b/basisu_miniz.h @@ -0,0 +1,2515 @@ +/* miniz.c v1.15 - deflate/inflate, zlib-subset, ZIP reading/writing/appending, PNG writing + Implements RFC 1950: http://www.ietf.org/rfc/rfc1950.txt and RFC 1951: http://www.ietf.org/rfc/rfc1951.txt + + Forked from the public domain/unlicense version at: https://code.google.com/archive/p/miniz/ + + Copyright (C) 2019-2020 Binomial LLC. All Rights Reserved. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +#ifndef MINIZ_HEADER_INCLUDED +#define MINIZ_HEADER_INCLUDED + +#include + +// Defines to completely disable specific portions of miniz.c: +// If all macros here are defined the only functionality remaining will be CRC-32, adler-32, tinfl, and tdefl. + +// Define MINIZ_NO_STDIO to disable all usage and any functions which rely on stdio for file I/O. +//#define MINIZ_NO_STDIO + +// If MINIZ_NO_TIME is specified then the ZIP archive functions will not be able to get the current time, or +// get/set file times, and the C run-time funcs that get/set times won't be called. +// The current downside is the times written to your archives will be from 1979. +//#define MINIZ_NO_TIME + +// Define MINIZ_NO_ARCHIVE_APIS to disable all ZIP archive API's. +//#define MINIZ_NO_ARCHIVE_APIS + +// Define MINIZ_NO_ARCHIVE_APIS to disable all writing related ZIP archive API's. +//#define MINIZ_NO_ARCHIVE_WRITING_APIS + +// Define MINIZ_NO_ZLIB_APIS to remove all ZLIB-style compression/decompression API's. +//#define MINIZ_NO_ZLIB_APIS + +// Define MINIZ_NO_ZLIB_COMPATIBLE_NAME to disable zlib names, to prevent conflicts against stock zlib. +//#define MINIZ_NO_ZLIB_COMPATIBLE_NAMES + +// Define MINIZ_NO_MALLOC to disable all calls to malloc, free, and realloc. +// Note if MINIZ_NO_MALLOC is defined then the user must always provide custom user alloc/free/realloc +// callbacks to the zlib and archive API's, and a few stand-alone helper API's which don't provide custom user +// functions (such as tdefl_compress_mem_to_heap() and tinfl_decompress_mem_to_heap()) won't work. +//#define MINIZ_NO_MALLOC + +#if defined(__TINYC__) && (defined(__linux) || defined(__linux__)) + // TODO: Work around "error: include file 'sys\utime.h' when compiling with tcc on Linux + #define MINIZ_NO_TIME +#endif + +#if !defined(MINIZ_NO_TIME) && !defined(MINIZ_NO_ARCHIVE_APIS) + #include +#endif + +#if defined(_M_IX86) || defined(_M_X64) || defined(__i386__) || defined(__i386) || defined(__i486__) || defined(__i486) || defined(i386) || defined(__ia64__) || defined(__x86_64__) +// MINIZ_X86_OR_X64_CPU is only used to help set the below macros. +#define MINIZ_X86_OR_X64_CPU 1 +#endif + +#if (__BYTE_ORDER__==__ORDER_LITTLE_ENDIAN__) || MINIZ_X86_OR_X64_CPU +// Set MINIZ_LITTLE_ENDIAN to 1 if the processor is little endian. +#define MINIZ_LITTLE_ENDIAN 1 +#endif + +#if MINIZ_X86_OR_X64_CPU +// Set MINIZ_USE_UNALIGNED_LOADS_AND_STORES to 1 on CPU's that permit efficient integer loads and stores from unaligned addresses. +#define MINIZ_USE_UNALIGNED_LOADS_AND_STORES 1 +#endif + +#if defined(_M_X64) || defined(_WIN64) || defined(__MINGW64__) || defined(_LP64) || defined(__LP64__) || defined(__ia64__) || defined(__x86_64__) +// Set MINIZ_HAS_64BIT_REGISTERS to 1 if operations on 64-bit integers are reasonably fast (and don't involve compiler generated calls to helper functions). +#define MINIZ_HAS_64BIT_REGISTERS 1 +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +// ------------------- zlib-style API Definitions. + +// For more compatibility with zlib, miniz.c uses unsigned long for some parameters/struct members. Beware: mz_ulong can be either 32 or 64-bits! +typedef unsigned long mz_ulong; + +// mz_free() internally uses the MZ_FREE() macro (which by default calls free() unless you've modified the MZ_MALLOC macro) to release a block allocated from the heap. +void mz_free(void *p); + +#define MZ_ADLER32_INIT (1) +// mz_adler32() returns the initial adler-32 value to use when called with ptr==NULL. +mz_ulong mz_adler32(mz_ulong adler, const unsigned char *ptr, size_t buf_len); + +#define MZ_CRC32_INIT (0) +// mz_crc32() returns the initial CRC-32 value to use when called with ptr==NULL. +mz_ulong mz_crc32(mz_ulong crc, const unsigned char *ptr, size_t buf_len); + +// Compression strategies. +enum { MZ_DEFAULT_STRATEGY = 0, MZ_FILTERED = 1, MZ_HUFFMAN_ONLY = 2, MZ_RLE = 3, MZ_FIXED = 4 }; + +// Method +#define MZ_DEFLATED 8 + +#ifndef MINIZ_NO_ZLIB_APIS + +// Heap allocation callbacks. +// Note that mz_alloc_func parameter types purpsosely differ from zlib's: items/size is size_t, not unsigned long. +typedef void *(*mz_alloc_func)(void *opaque, size_t items, size_t size); +typedef void (*mz_free_func)(void *opaque, void *address); +typedef void *(*mz_realloc_func)(void *opaque, void *address, size_t items, size_t size); + +#define MZ_VERSION "9.1.15" +#define MZ_VERNUM 0x91F0 +#define MZ_VER_MAJOR 9 +#define MZ_VER_MINOR 1 +#define MZ_VER_REVISION 15 +#define MZ_VER_SUBREVISION 0 + +// Flush values. For typical usage you only need MZ_NO_FLUSH and MZ_FINISH. The other values are for advanced use (refer to the zlib docs). +enum { MZ_NO_FLUSH = 0, MZ_PARTIAL_FLUSH = 1, MZ_SYNC_FLUSH = 2, MZ_FULL_FLUSH = 3, MZ_FINISH = 4, MZ_BLOCK = 5 }; + +// Return status codes. MZ_PARAM_ERROR is non-standard. +enum { MZ_OK = 0, MZ_STREAM_END = 1, MZ_NEED_DICT = 2, MZ_ERRNO = -1, MZ_STREAM_ERROR = -2, MZ_DATA_ERROR = -3, MZ_MEM_ERROR = -4, MZ_BUF_ERROR = -5, MZ_VERSION_ERROR = -6, MZ_PARAM_ERROR = -10000 }; + +// Compression levels: 0-9 are the standard zlib-style levels, 10 is best possible compression (not zlib compatible, and may be very slow), MZ_DEFAULT_COMPRESSION=MZ_DEFAULT_LEVEL. +enum { MZ_NO_COMPRESSION = 0, MZ_BEST_SPEED = 1, MZ_BEST_COMPRESSION = 9, MZ_UBER_COMPRESSION = 10, MZ_DEFAULT_LEVEL = 6, MZ_DEFAULT_COMPRESSION = -1 }; + +// Window bits +#define MZ_DEFAULT_WINDOW_BITS 15 + +struct mz_internal_state; + +// Compression/decompression stream struct. +typedef struct mz_stream_s +{ + const unsigned char *next_in; // pointer to next byte to read + unsigned int avail_in; // number of bytes available at next_in + mz_ulong total_in; // total number of bytes consumed so far + + unsigned char *next_out; // pointer to next byte to write + unsigned int avail_out; // number of bytes that can be written to next_out + mz_ulong total_out; // total number of bytes produced so far + + char *msg; // error msg (unused) + struct mz_internal_state *state; // internal state, allocated by zalloc/zfree + + mz_alloc_func zalloc; // optional heap allocation function (defaults to malloc) + mz_free_func zfree; // optional heap free function (defaults to free) + void *opaque; // heap alloc function user pointer + + int data_type; // data_type (unused) + mz_ulong adler; // adler32 of the source or uncompressed data + mz_ulong reserved; // not used +} mz_stream; + +typedef mz_stream *mz_streamp; + +// Returns the version string of miniz.c. +const char *mz_version(void); + +// mz_deflateInit() initializes a compressor with default options: +// Parameters: +// pStream must point to an initialized mz_stream struct. +// level must be between [MZ_NO_COMPRESSION, MZ_BEST_COMPRESSION]. +// level 1 enables a specially optimized compression function that's been optimized purely for performance, not ratio. +// (This special func. is currently only enabled when MINIZ_USE_UNALIGNED_LOADS_AND_STORES and MINIZ_LITTLE_ENDIAN are defined.) +// Return values: +// MZ_OK on success. +// MZ_STREAM_ERROR if the stream is bogus. +// MZ_PARAM_ERROR if the input parameters are bogus. +// MZ_MEM_ERROR on out of memory. +int mz_deflateInit(mz_streamp pStream, int level); + +// mz_deflateInit2() is like mz_deflate(), except with more control: +// Additional parameters: +// method must be MZ_DEFLATED +// window_bits must be MZ_DEFAULT_WINDOW_BITS (to wrap the deflate stream with zlib header/adler-32 footer) or -MZ_DEFAULT_WINDOW_BITS (raw deflate/no header or footer) +// mem_level must be between [1, 9] (it's checked but ignored by miniz.c) +int mz_deflateInit2(mz_streamp pStream, int level, int method, int window_bits, int mem_level, int strategy); + +// Quickly resets a compressor without having to reallocate anything. Same as calling mz_deflateEnd() followed by mz_deflateInit()/mz_deflateInit2(). +int mz_deflateReset(mz_streamp pStream); + +// mz_deflate() compresses the input to output, consuming as much of the input and producing as much output as possible. +// Parameters: +// pStream is the stream to read from and write to. You must initialize/update the next_in, avail_in, next_out, and avail_out members. +// flush may be MZ_NO_FLUSH, MZ_PARTIAL_FLUSH/MZ_SYNC_FLUSH, MZ_FULL_FLUSH, or MZ_FINISH. +// Return values: +// MZ_OK on success (when flushing, or if more input is needed but not available, and/or there's more output to be written but the output buffer is full). +// MZ_STREAM_END if all input has been consumed and all output bytes have been written. Don't call mz_deflate() on the stream anymore. +// MZ_STREAM_ERROR if the stream is bogus. +// MZ_PARAM_ERROR if one of the parameters is invalid. +// MZ_BUF_ERROR if no forward progress is possible because the input and/or output buffers are empty. (Fill up the input buffer or free up some output space and try again.) +int mz_deflate(mz_streamp pStream, int flush); + +// mz_deflateEnd() deinitializes a compressor: +// Return values: +// MZ_OK on success. +// MZ_STREAM_ERROR if the stream is bogus. +int mz_deflateEnd(mz_streamp pStream); + +// mz_deflateBound() returns a (very) conservative upper bound on the amount of data that could be generated by deflate(), assuming flush is set to only MZ_NO_FLUSH or MZ_FINISH. +mz_ulong mz_deflateBound(mz_streamp pStream, mz_ulong source_len); + +// Single-call compression functions mz_compress() and mz_compress2(): +// Returns MZ_OK on success, or one of the error codes from mz_deflate() on failure. +int mz_compress(unsigned char *pDest, mz_ulong *pDest_len, const unsigned char *pSource, mz_ulong source_len); +int mz_compress2(unsigned char *pDest, mz_ulong *pDest_len, const unsigned char *pSource, mz_ulong source_len, int level); + +// mz_compressBound() returns a (very) conservative upper bound on the amount of data that could be generated by calling mz_compress(). +mz_ulong mz_compressBound(mz_ulong source_len); + +// Initializes a decompressor. +int mz_inflateInit(mz_streamp pStream); + +// mz_inflateInit2() is like mz_inflateInit() with an additional option that controls the window size and whether or not the stream has been wrapped with a zlib header/footer: +// window_bits must be MZ_DEFAULT_WINDOW_BITS (to parse zlib header/footer) or -MZ_DEFAULT_WINDOW_BITS (raw deflate). +int mz_inflateInit2(mz_streamp pStream, int window_bits); + +// Decompresses the input stream to the output, consuming only as much of the input as needed, and writing as much to the output as possible. +// Parameters: +// pStream is the stream to read from and write to. You must initialize/update the next_in, avail_in, next_out, and avail_out members. +// flush may be MZ_NO_FLUSH, MZ_SYNC_FLUSH, or MZ_FINISH. +// On the first call, if flush is MZ_FINISH it's assumed the input and output buffers are both sized large enough to decompress the entire stream in a single call (this is slightly faster). +// MZ_FINISH implies that there are no more source bytes available beside what's already in the input buffer, and that the output buffer is large enough to hold the rest of the decompressed data. +// Return values: +// MZ_OK on success. Either more input is needed but not available, and/or there's more output to be written but the output buffer is full. +// MZ_STREAM_END if all needed input has been consumed and all output bytes have been written. For zlib streams, the adler-32 of the decompressed data has also been verified. +// MZ_STREAM_ERROR if the stream is bogus. +// MZ_DATA_ERROR if the deflate stream is invalid. +// MZ_PARAM_ERROR if one of the parameters is invalid. +// MZ_BUF_ERROR if no forward progress is possible because the input buffer is empty but the inflater needs more input to continue, or if the output buffer is not large enough. Call mz_inflate() again +// with more input data, or with more room in the output buffer (except when using single call decompression, described above). +int mz_inflate(mz_streamp pStream, int flush); + +// Deinitializes a decompressor. +int mz_inflateEnd(mz_streamp pStream); + +// Single-call decompression. +// Returns MZ_OK on success, or one of the error codes from mz_inflate() on failure. +int mz_uncompress(unsigned char *pDest, mz_ulong *pDest_len, const unsigned char *pSource, mz_ulong source_len); + +// Returns a string description of the specified error code, or NULL if the error code is invalid. +const char *mz_error(int err); + +// Redefine zlib-compatible names to miniz equivalents, so miniz.c can be used as a drop-in replacement for the subset of zlib that miniz.c supports. +// Define MINIZ_NO_ZLIB_COMPATIBLE_NAMES to disable zlib-compatibility if you use zlib in the same project. +#ifndef MINIZ_NO_ZLIB_COMPATIBLE_NAMES + typedef unsigned char Byte; + typedef unsigned int uInt; + typedef mz_ulong uLong; + typedef Byte Bytef; + typedef uInt uIntf; + typedef char charf; + typedef int intf; + typedef void *voidpf; + typedef uLong uLongf; + typedef void *voidp; + typedef void *const voidpc; + #define Z_NULL 0 + #define Z_NO_FLUSH MZ_NO_FLUSH + #define Z_PARTIAL_FLUSH MZ_PARTIAL_FLUSH + #define Z_SYNC_FLUSH MZ_SYNC_FLUSH + #define Z_FULL_FLUSH MZ_FULL_FLUSH + #define Z_FINISH MZ_FINISH + #define Z_BLOCK MZ_BLOCK + #define Z_OK MZ_OK + #define Z_STREAM_END MZ_STREAM_END + #define Z_NEED_DICT MZ_NEED_DICT + #define Z_ERRNO MZ_ERRNO + #define Z_STREAM_ERROR MZ_STREAM_ERROR + #define Z_DATA_ERROR MZ_DATA_ERROR + #define Z_MEM_ERROR MZ_MEM_ERROR + #define Z_BUF_ERROR MZ_BUF_ERROR + #define Z_VERSION_ERROR MZ_VERSION_ERROR + #define Z_PARAM_ERROR MZ_PARAM_ERROR + #define Z_NO_COMPRESSION MZ_NO_COMPRESSION + #define Z_BEST_SPEED MZ_BEST_SPEED + #define Z_BEST_COMPRESSION MZ_BEST_COMPRESSION + #define Z_DEFAULT_COMPRESSION MZ_DEFAULT_COMPRESSION + #define Z_DEFAULT_STRATEGY MZ_DEFAULT_STRATEGY + #define Z_FILTERED MZ_FILTERED + #define Z_HUFFMAN_ONLY MZ_HUFFMAN_ONLY + #define Z_RLE MZ_RLE + #define Z_FIXED MZ_FIXED + #define Z_DEFLATED MZ_DEFLATED + #define Z_DEFAULT_WINDOW_BITS MZ_DEFAULT_WINDOW_BITS + #define alloc_func mz_alloc_func + #define free_func mz_free_func + #define internal_state mz_internal_state + #define z_stream mz_stream + #define deflateInit mz_deflateInit + #define deflateInit2 mz_deflateInit2 + #define deflateReset mz_deflateReset + #define deflate mz_deflate + #define deflateEnd mz_deflateEnd + #define deflateBound mz_deflateBound + #define compress mz_compress + #define compress2 mz_compress2 + #define compressBound mz_compressBound + #define inflateInit mz_inflateInit + #define inflateInit2 mz_inflateInit2 + #define inflate mz_inflate + #define inflateEnd mz_inflateEnd + #define uncompress mz_uncompress + #define crc32 mz_crc32 + #define adler32 mz_adler32 + #define MAX_WBITS 15 + #define MAX_MEM_LEVEL 9 + #define zError mz_error + #define ZLIB_VERSION MZ_VERSION + #define ZLIB_VERNUM MZ_VERNUM + #define ZLIB_VER_MAJOR MZ_VER_MAJOR + #define ZLIB_VER_MINOR MZ_VER_MINOR + #define ZLIB_VER_REVISION MZ_VER_REVISION + #define ZLIB_VER_SUBREVISION MZ_VER_SUBREVISION + #define zlibVersion mz_version + #define zlib_version mz_version() +#endif // #ifndef MINIZ_NO_ZLIB_COMPATIBLE_NAMES + +#endif // MINIZ_NO_ZLIB_APIS + +// ------------------- Types and macros + +typedef unsigned char mz_uint8; +typedef signed short mz_int16; +typedef unsigned short mz_uint16; +typedef unsigned int mz_uint32; +typedef unsigned int mz_uint; +typedef long long mz_int64; +typedef unsigned long long mz_uint64; +typedef int mz_bool; + +#define MZ_FALSE (0) +#define MZ_TRUE (1) + +// An attempt to work around MSVC's spammy "warning C4127: conditional expression is constant" message. +#ifdef _MSC_VER + #define MZ_MACRO_END while (0, 0) +#else + #define MZ_MACRO_END while (0) +#endif + +// ------------------- Low-level Decompression API Definitions + +// Decompression flags used by tinfl_decompress(). +// TINFL_FLAG_PARSE_ZLIB_HEADER: If set, the input has a valid zlib header and ends with an adler32 checksum (it's a valid zlib stream). Otherwise, the input is a raw deflate stream. +// TINFL_FLAG_HAS_MORE_INPUT: If set, there are more input bytes available beyond the end of the supplied input buffer. If clear, the input buffer contains all remaining input. +// TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF: If set, the output buffer is large enough to hold the entire decompressed stream. If clear, the output buffer is at least the size of the dictionary (typically 32KB). +// TINFL_FLAG_COMPUTE_ADLER32: Force adler-32 checksum computation of the decompressed bytes. +enum +{ + TINFL_FLAG_PARSE_ZLIB_HEADER = 1, + TINFL_FLAG_HAS_MORE_INPUT = 2, + TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF = 4, + TINFL_FLAG_COMPUTE_ADLER32 = 8 +}; + +// High level decompression functions: +// tinfl_decompress_mem_to_heap() decompresses a block in memory to a heap block allocated via malloc(). +// On entry: +// pSrc_buf, src_buf_len: Pointer and size of the Deflate or zlib source data to decompress. +// On return: +// Function returns a pointer to the decompressed data, or NULL on failure. +// *pOut_len will be set to the decompressed data's size, which could be larger than src_buf_len on uncompressible data. +// The caller must call mz_free() on the returned block when it's no longer needed. +void *tinfl_decompress_mem_to_heap(const void *pSrc_buf, size_t src_buf_len, size_t *pOut_len, int flags); + +// tinfl_decompress_mem_to_mem() decompresses a block in memory to another block in memory. +// Returns TINFL_DECOMPRESS_MEM_TO_MEM_FAILED on failure, or the number of bytes written on success. +#define TINFL_DECOMPRESS_MEM_TO_MEM_FAILED ((size_t)(-1)) +size_t tinfl_decompress_mem_to_mem(void *pOut_buf, size_t out_buf_len, const void *pSrc_buf, size_t src_buf_len, int flags); + +// tinfl_decompress_mem_to_callback() decompresses a block in memory to an internal 32KB buffer, and a user provided callback function will be called to flush the buffer. +// Returns 1 on success or 0 on failure. +typedef int (*tinfl_put_buf_func_ptr)(const void* pBuf, int len, void *pUser); +int tinfl_decompress_mem_to_callback(const void *pIn_buf, size_t *pIn_buf_size, tinfl_put_buf_func_ptr pPut_buf_func, void *pPut_buf_user, int flags); + +struct tinfl_decompressor_tag; typedef struct tinfl_decompressor_tag tinfl_decompressor; + +// Max size of LZ dictionary. +#define TINFL_LZ_DICT_SIZE 32768 + +// Return status. +typedef enum +{ + TINFL_STATUS_BAD_PARAM = -3, + TINFL_STATUS_ADLER32_MISMATCH = -2, + TINFL_STATUS_FAILED = -1, + TINFL_STATUS_DONE = 0, + TINFL_STATUS_NEEDS_MORE_INPUT = 1, + TINFL_STATUS_HAS_MORE_OUTPUT = 2 +} tinfl_status; + +// Initializes the decompressor to its initial state. +#define tinfl_init(r) do { (r)->m_state = 0; } MZ_MACRO_END +#define tinfl_get_adler32(r) (r)->m_check_adler32 + +// Main low-level decompressor coroutine function. This is the only function actually needed for decompression. All the other functions are just high-level helpers for improved usability. +// This is a universal API, i.e. it can be used as a building block to build any desired higher level decompression API. In the limit case, it can be called once per every byte input or output. +tinfl_status tinfl_decompress(tinfl_decompressor *r, const mz_uint8 *pIn_buf_next, size_t *pIn_buf_size, mz_uint8 *pOut_buf_start, mz_uint8 *pOut_buf_next, size_t *pOut_buf_size, const mz_uint32 decomp_flags); + +// Internal/private bits follow. +enum +{ + TINFL_MAX_HUFF_TABLES = 3, TINFL_MAX_HUFF_SYMBOLS_0 = 288, TINFL_MAX_HUFF_SYMBOLS_1 = 32, TINFL_MAX_HUFF_SYMBOLS_2 = 19, + TINFL_FAST_LOOKUP_BITS = 10, TINFL_FAST_LOOKUP_SIZE = 1 << TINFL_FAST_LOOKUP_BITS +}; + +typedef struct +{ + mz_uint8 m_code_size[TINFL_MAX_HUFF_SYMBOLS_0]; + mz_int16 m_look_up[TINFL_FAST_LOOKUP_SIZE], m_tree[TINFL_MAX_HUFF_SYMBOLS_0 * 2]; +} tinfl_huff_table; + +#if MINIZ_HAS_64BIT_REGISTERS + #define TINFL_USE_64BIT_BITBUF 1 +#endif + +#if TINFL_USE_64BIT_BITBUF + typedef mz_uint64 tinfl_bit_buf_t; + #define TINFL_BITBUF_SIZE (64) +#else + typedef mz_uint32 tinfl_bit_buf_t; + #define TINFL_BITBUF_SIZE (32) +#endif + +struct tinfl_decompressor_tag +{ + mz_uint32 m_state, m_num_bits, m_zhdr0, m_zhdr1, m_z_adler32, m_final, m_type, m_check_adler32, m_dist, m_counter, m_num_extra, m_table_sizes[TINFL_MAX_HUFF_TABLES]; + tinfl_bit_buf_t m_bit_buf; + size_t m_dist_from_out_buf_start; + tinfl_huff_table m_tables[TINFL_MAX_HUFF_TABLES]; + mz_uint8 m_raw_header[4], m_len_codes[TINFL_MAX_HUFF_SYMBOLS_0 + TINFL_MAX_HUFF_SYMBOLS_1 + 137]; +}; + +// ------------------- Low-level Compression API Definitions + +// Set TDEFL_LESS_MEMORY to 1 to use less memory (compression will be slightly slower, and raw/dynamic blocks will be output more frequently). +#define TDEFL_LESS_MEMORY 0 + +// tdefl_init() compression flags logically OR'd together (low 12 bits contain the max. number of probes per dictionary search): +// TDEFL_DEFAULT_MAX_PROBES: The compressor defaults to 128 dictionary probes per dictionary search. 0=Huffman only, 1=Huffman+LZ (fastest/crap compression), 4095=Huffman+LZ (slowest/best compression). +enum +{ + TDEFL_HUFFMAN_ONLY = 0, TDEFL_DEFAULT_MAX_PROBES = 128, TDEFL_MAX_PROBES_MASK = 0xFFF +}; + +// TDEFL_WRITE_ZLIB_HEADER: If set, the compressor outputs a zlib header before the deflate data, and the Adler-32 of the source data at the end. Otherwise, you'll get raw deflate data. +// TDEFL_COMPUTE_ADLER32: Always compute the adler-32 of the input data (even when not writing zlib headers). +// TDEFL_GREEDY_PARSING_FLAG: Set to use faster greedy parsing, instead of more efficient lazy parsing. +// TDEFL_NONDETERMINISTIC_PARSING_FLAG: Enable to decrease the compressor's initialization time to the minimum, but the output may vary from run to run given the same input (depending on the contents of memory). +// TDEFL_RLE_MATCHES: Only look for RLE matches (matches with a distance of 1) +// TDEFL_FILTER_MATCHES: Discards matches <= 5 chars if enabled. +// TDEFL_FORCE_ALL_STATIC_BLOCKS: Disable usage of optimized Huffman tables. +// TDEFL_FORCE_ALL_RAW_BLOCKS: Only use raw (uncompressed) deflate blocks. +// The low 12 bits are reserved to control the max # of hash probes per dictionary lookup (see TDEFL_MAX_PROBES_MASK). +enum +{ + TDEFL_WRITE_ZLIB_HEADER = 0x01000, + TDEFL_COMPUTE_ADLER32 = 0x02000, + TDEFL_GREEDY_PARSING_FLAG = 0x04000, + TDEFL_NONDETERMINISTIC_PARSING_FLAG = 0x08000, + TDEFL_RLE_MATCHES = 0x10000, + TDEFL_FILTER_MATCHES = 0x20000, + TDEFL_FORCE_ALL_STATIC_BLOCKS = 0x40000, + TDEFL_FORCE_ALL_RAW_BLOCKS = 0x80000 +}; + +// High level compression functions: +// tdefl_compress_mem_to_heap() compresses a block in memory to a heap block allocated via malloc(). +// On entry: +// pSrc_buf, src_buf_len: Pointer and size of source block to compress. +// flags: The max match finder probes (default is 128) logically OR'd against the above flags. Higher probes are slower but improve compression. +// On return: +// Function returns a pointer to the compressed data, or NULL on failure. +// *pOut_len will be set to the compressed data's size, which could be larger than src_buf_len on uncompressible data. +// The caller must free() the returned block when it's no longer needed. +void *tdefl_compress_mem_to_heap(const void *pSrc_buf, size_t src_buf_len, size_t *pOut_len, int flags); + +// tdefl_compress_mem_to_mem() compresses a block in memory to another block in memory. +// Returns 0 on failure. +size_t tdefl_compress_mem_to_mem(void *pOut_buf, size_t out_buf_len, const void *pSrc_buf, size_t src_buf_len, int flags); + +// Compresses an image to a compressed PNG file in memory. +// On entry: +// pImage, w, h, and num_chans describe the image to compress. num_chans may be 1, 2, 3, or 4. +// The image pitch in bytes per scanline will be w*num_chans. The leftmost pixel on the top scanline is stored first in memory. +// level may range from [0,10], use MZ_NO_COMPRESSION, MZ_BEST_SPEED, MZ_BEST_COMPRESSION, etc. or a decent default is MZ_DEFAULT_LEVEL +// If flip is true, the image will be flipped on the Y axis (useful for OpenGL apps). +// On return: +// Function returns a pointer to the compressed data, or NULL on failure. +// *pLen_out will be set to the size of the PNG image file. +// The caller must mz_free() the returned heap block (which will typically be larger than *pLen_out) when it's no longer needed. +void *tdefl_write_image_to_png_file_in_memory_ex(const void *pImage, int w, int h, int num_chans, size_t *pLen_out, mz_uint level, mz_bool flip); +void *tdefl_write_image_to_png_file_in_memory(const void *pImage, int w, int h, int num_chans, size_t *pLen_out); + +// Output stream interface. The compressor uses this interface to write compressed data. It'll typically be called TDEFL_OUT_BUF_SIZE at a time. +typedef mz_bool (*tdefl_put_buf_func_ptr)(const void* pBuf, int len, void *pUser); + +// tdefl_compress_mem_to_output() compresses a block to an output stream. The above helpers use this function internally. +mz_bool tdefl_compress_mem_to_output(const void *pBuf, size_t buf_len, tdefl_put_buf_func_ptr pPut_buf_func, void *pPut_buf_user, int flags); + +enum { TDEFL_MAX_HUFF_TABLES = 3, TDEFL_MAX_HUFF_SYMBOLS_0 = 288, TDEFL_MAX_HUFF_SYMBOLS_1 = 32, TDEFL_MAX_HUFF_SYMBOLS_2 = 19, TDEFL_LZ_DICT_SIZE = 32768, TDEFL_LZ_DICT_SIZE_MASK = TDEFL_LZ_DICT_SIZE - 1, TDEFL_MIN_MATCH_LEN = 3, TDEFL_MAX_MATCH_LEN = 258 }; + +// TDEFL_OUT_BUF_SIZE MUST be large enough to hold a single entire compressed output block (using static/fixed Huffman codes). +#if TDEFL_LESS_MEMORY +enum { TDEFL_LZ_CODE_BUF_SIZE = 24 * 1024, TDEFL_OUT_BUF_SIZE = (TDEFL_LZ_CODE_BUF_SIZE * 13 ) / 10, TDEFL_MAX_HUFF_SYMBOLS = 288, TDEFL_LZ_HASH_BITS = 12, TDEFL_LEVEL1_HASH_SIZE_MASK = 4095, TDEFL_LZ_HASH_SHIFT = (TDEFL_LZ_HASH_BITS + 2) / 3, TDEFL_LZ_HASH_SIZE = 1 << TDEFL_LZ_HASH_BITS }; +#else +enum { TDEFL_LZ_CODE_BUF_SIZE = 64 * 1024, TDEFL_OUT_BUF_SIZE = (TDEFL_LZ_CODE_BUF_SIZE * 13 ) / 10, TDEFL_MAX_HUFF_SYMBOLS = 288, TDEFL_LZ_HASH_BITS = 15, TDEFL_LEVEL1_HASH_SIZE_MASK = 4095, TDEFL_LZ_HASH_SHIFT = (TDEFL_LZ_HASH_BITS + 2) / 3, TDEFL_LZ_HASH_SIZE = 1 << TDEFL_LZ_HASH_BITS }; +#endif + +// The low-level tdefl functions below may be used directly if the above helper functions aren't flexible enough. The low-level functions don't make any heap allocations, unlike the above helper functions. +typedef enum +{ + TDEFL_STATUS_BAD_PARAM = -2, + TDEFL_STATUS_PUT_BUF_FAILED = -1, + TDEFL_STATUS_OKAY = 0, + TDEFL_STATUS_DONE = 1, +} tdefl_status; + +// Must map to MZ_NO_FLUSH, MZ_SYNC_FLUSH, etc. enums +typedef enum +{ + TDEFL_NO_FLUSH = 0, + TDEFL_SYNC_FLUSH = 2, + TDEFL_FULL_FLUSH = 3, + TDEFL_FINISH = 4 +} tdefl_flush; + +// tdefl's compression state structure. +typedef struct +{ + tdefl_put_buf_func_ptr m_pPut_buf_func; + void *m_pPut_buf_user; + mz_uint m_flags, m_max_probes[2]; + int m_greedy_parsing; + mz_uint m_adler32, m_lookahead_pos, m_lookahead_size, m_dict_size; + mz_uint8 *m_pLZ_code_buf, *m_pLZ_flags, *m_pOutput_buf, *m_pOutput_buf_end; + mz_uint m_num_flags_left, m_total_lz_bytes, m_lz_code_buf_dict_pos, m_bits_in, m_bit_buffer; + mz_uint m_saved_match_dist, m_saved_match_len, m_saved_lit, m_output_flush_ofs, m_output_flush_remaining, m_finished, m_block_index, m_wants_to_finish; + tdefl_status m_prev_return_status; + const void *m_pIn_buf; + void *m_pOut_buf; + size_t *m_pIn_buf_size, *m_pOut_buf_size; + tdefl_flush m_flush; + const mz_uint8 *m_pSrc; + size_t m_src_buf_left, m_out_buf_ofs; + mz_uint8 m_dict[TDEFL_LZ_DICT_SIZE + TDEFL_MAX_MATCH_LEN - 1]; + mz_uint16 m_huff_count[TDEFL_MAX_HUFF_TABLES][TDEFL_MAX_HUFF_SYMBOLS]; + mz_uint16 m_huff_codes[TDEFL_MAX_HUFF_TABLES][TDEFL_MAX_HUFF_SYMBOLS]; + mz_uint8 m_huff_code_sizes[TDEFL_MAX_HUFF_TABLES][TDEFL_MAX_HUFF_SYMBOLS]; + mz_uint8 m_lz_code_buf[TDEFL_LZ_CODE_BUF_SIZE]; + mz_uint16 m_next[TDEFL_LZ_DICT_SIZE]; + mz_uint16 m_hash[TDEFL_LZ_HASH_SIZE]; + mz_uint8 m_output_buf[TDEFL_OUT_BUF_SIZE]; +} tdefl_compressor; + +// Initializes the compressor. +// There is no corresponding deinit() function because the tdefl API's do not dynamically allocate memory. +// pBut_buf_func: If NULL, output data will be supplied to the specified callback. In this case, the user should call the tdefl_compress_buffer() API for compression. +// If pBut_buf_func is NULL the user should always call the tdefl_compress() API. +// flags: See the above enums (TDEFL_HUFFMAN_ONLY, TDEFL_WRITE_ZLIB_HEADER, etc.) +tdefl_status tdefl_init(tdefl_compressor *d, tdefl_put_buf_func_ptr pPut_buf_func, void *pPut_buf_user, int flags); + +// Compresses a block of data, consuming as much of the specified input buffer as possible, and writing as much compressed data to the specified output buffer as possible. +tdefl_status tdefl_compress(tdefl_compressor *d, const void *pIn_buf, size_t *pIn_buf_size, void *pOut_buf, size_t *pOut_buf_size, tdefl_flush flush); + +// tdefl_compress_buffer() is only usable when the tdefl_init() is called with a non-NULL tdefl_put_buf_func_ptr. +// tdefl_compress_buffer() always consumes the entire input buffer. +tdefl_status tdefl_compress_buffer(tdefl_compressor *d, const void *pIn_buf, size_t in_buf_size, tdefl_flush flush); + +tdefl_status tdefl_get_prev_return_status(tdefl_compressor *d); +mz_uint32 tdefl_get_adler32(tdefl_compressor *d); + +// Can't use tdefl_create_comp_flags_from_zip_params if MINIZ_NO_ZLIB_APIS isn't defined, because it uses some of its macros. +#ifndef MINIZ_NO_ZLIB_APIS +// Create tdefl_compress() flags given zlib-style compression parameters. +// level may range from [0,10] (where 10 is absolute max compression, but may be much slower on some files) +// window_bits may be -15 (raw deflate) or 15 (zlib) +// strategy may be either MZ_DEFAULT_STRATEGY, MZ_FILTERED, MZ_HUFFMAN_ONLY, MZ_RLE, or MZ_FIXED +mz_uint tdefl_create_comp_flags_from_zip_params(int level, int window_bits, int strategy); +#endif // #ifndef MINIZ_NO_ZLIB_APIS + +#ifdef __cplusplus +} +#endif + +#endif // MINIZ_HEADER_INCLUDED + +// ------------------- End of Header: Implementation follows. (If you only want the header, define MINIZ_HEADER_FILE_ONLY.) + +#ifndef MINIZ_HEADER_FILE_ONLY + +typedef unsigned char mz_validate_uint16[sizeof(mz_uint16)==2 ? 1 : -1]; +typedef unsigned char mz_validate_uint32[sizeof(mz_uint32)==4 ? 1 : -1]; +typedef unsigned char mz_validate_uint64[sizeof(mz_uint64)==8 ? 1 : -1]; + +#include +#include + +#define MZ_ASSERT(x) assert(x) + +#ifdef MINIZ_NO_MALLOC + #define MZ_MALLOC(x) NULL + #define MZ_FREE(x) (void)x, ((void)0) + #define MZ_REALLOC(p, x) NULL +#else + #define MZ_MALLOC(x) malloc(x) + #define MZ_FREE(x) free(x) + #define MZ_REALLOC(p, x) realloc(p, x) +#endif + +#define MZ_MAX(a,b) (((a)>(b))?(a):(b)) +#define MZ_MIN(a,b) (((a)<(b))?(a):(b)) +#define MZ_CLEAR_OBJ(obj) memset(&(obj), 0, sizeof(obj)) + +#if MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN + #define MZ_READ_LE16(p) *((const mz_uint16 *)(p)) + #define MZ_READ_LE32(p) *((const mz_uint32 *)(p)) +#else + #define MZ_READ_LE16(p) ((mz_uint32)(((const mz_uint8 *)(p))[0]) | ((mz_uint32)(((const mz_uint8 *)(p))[1]) << 8U)) + #define MZ_READ_LE32(p) ((mz_uint32)(((const mz_uint8 *)(p))[0]) | ((mz_uint32)(((const mz_uint8 *)(p))[1]) << 8U) | ((mz_uint32)(((const mz_uint8 *)(p))[2]) << 16U) | ((mz_uint32)(((const mz_uint8 *)(p))[3]) << 24U)) +#endif + +#ifdef _MSC_VER + #define MZ_FORCEINLINE __forceinline +#elif defined(__GNUC__) + #define MZ_FORCEINLINE inline __attribute__((__always_inline__)) +#else + #define MZ_FORCEINLINE inline +#endif + +#ifdef __cplusplus + extern "C" { +#endif + +// ------------------- zlib-style API's + +mz_ulong mz_adler32(mz_ulong adler, const unsigned char *ptr, size_t buf_len) +{ + mz_uint32 i, s1 = (mz_uint32)(adler & 0xffff), s2 = (mz_uint32)(adler >> 16); size_t block_len = buf_len % 5552; + if (!ptr) return MZ_ADLER32_INIT; + while (buf_len) { + for (i = 0; i + 7 < block_len; i += 8, ptr += 8) { + s1 += ptr[0], s2 += s1; s1 += ptr[1], s2 += s1; s1 += ptr[2], s2 += s1; s1 += ptr[3], s2 += s1; + s1 += ptr[4], s2 += s1; s1 += ptr[5], s2 += s1; s1 += ptr[6], s2 += s1; s1 += ptr[7], s2 += s1; + } + for ( ; i < block_len; ++i) s1 += *ptr++, s2 += s1; + s1 %= 65521U, s2 %= 65521U; buf_len -= block_len; block_len = 5552; + } + return (s2 << 16) + s1; +} + +// Karl Malbrain's compact CRC-32. See "A compact CCITT crc16 and crc32 C implementation that balances processor cache usage against speed": http://www.geocities.com/malbrain/ +mz_ulong mz_crc32(mz_ulong crc, const mz_uint8 *ptr, size_t buf_len) +{ + static const mz_uint32 s_crc32[16] = { 0, 0x1db71064, 0x3b6e20c8, 0x26d930ac, 0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c, + 0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c, 0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c }; + mz_uint32 crcu32 = (mz_uint32)crc; + if (!ptr) return MZ_CRC32_INIT; + crcu32 = ~crcu32; while (buf_len--) { mz_uint8 b = *ptr++; crcu32 = (crcu32 >> 4) ^ s_crc32[(crcu32 & 0xF) ^ (b & 0xF)]; crcu32 = (crcu32 >> 4) ^ s_crc32[(crcu32 & 0xF) ^ (b >> 4)]; } + return ~crcu32; +} + +void mz_free(void *p) +{ + MZ_FREE(p); +} + +#ifndef MINIZ_NO_ZLIB_APIS + +static void *def_alloc_func(void *opaque, size_t items, size_t size) { (void)opaque, (void)items, (void)size; return MZ_MALLOC(items * size); } +static void def_free_func(void *opaque, void *address) { (void)opaque, (void)address; MZ_FREE(address); } +static void *def_realloc_func(void *opaque, void *address, size_t items, size_t size) { (void)opaque, (void)address, (void)items, (void)size; return MZ_REALLOC(address, items * size); } + +const char *mz_version(void) +{ + return MZ_VERSION; +} + +int mz_deflateInit(mz_streamp pStream, int level) +{ + return mz_deflateInit2(pStream, level, MZ_DEFLATED, MZ_DEFAULT_WINDOW_BITS, 9, MZ_DEFAULT_STRATEGY); +} + +int mz_deflateInit2(mz_streamp pStream, int level, int method, int window_bits, int mem_level, int strategy) +{ + tdefl_compressor *pComp; + mz_uint comp_flags = TDEFL_COMPUTE_ADLER32 | tdefl_create_comp_flags_from_zip_params(level, window_bits, strategy); + + if (!pStream) return MZ_STREAM_ERROR; + if ((method != MZ_DEFLATED) || ((mem_level < 1) || (mem_level > 9)) || ((window_bits != MZ_DEFAULT_WINDOW_BITS) && (-window_bits != MZ_DEFAULT_WINDOW_BITS))) return MZ_PARAM_ERROR; + + pStream->data_type = 0; + pStream->adler = MZ_ADLER32_INIT; + pStream->msg = NULL; + pStream->reserved = 0; + pStream->total_in = 0; + pStream->total_out = 0; + if (!pStream->zalloc) pStream->zalloc = def_alloc_func; + if (!pStream->zfree) pStream->zfree = def_free_func; + + pComp = (tdefl_compressor *)pStream->zalloc(pStream->opaque, 1, sizeof(tdefl_compressor)); + if (!pComp) + return MZ_MEM_ERROR; + + pStream->state = (struct mz_internal_state *)pComp; + + if (tdefl_init(pComp, NULL, NULL, comp_flags) != TDEFL_STATUS_OKAY) + { + mz_deflateEnd(pStream); + return MZ_PARAM_ERROR; + } + + return MZ_OK; +} + +int mz_deflateReset(mz_streamp pStream) +{ + if ((!pStream) || (!pStream->state) || (!pStream->zalloc) || (!pStream->zfree)) return MZ_STREAM_ERROR; + pStream->total_in = pStream->total_out = 0; + tdefl_init((tdefl_compressor*)pStream->state, NULL, NULL, ((tdefl_compressor*)pStream->state)->m_flags); + return MZ_OK; +} + +int mz_deflate(mz_streamp pStream, int flush) +{ + size_t in_bytes, out_bytes; + mz_ulong orig_total_in, orig_total_out; + int mz_status = MZ_OK; + + if ((!pStream) || (!pStream->state) || (flush < 0) || (flush > MZ_FINISH) || (!pStream->next_out)) return MZ_STREAM_ERROR; + if (!pStream->avail_out) return MZ_BUF_ERROR; + + if (flush == MZ_PARTIAL_FLUSH) flush = MZ_SYNC_FLUSH; + + if (((tdefl_compressor*)pStream->state)->m_prev_return_status == TDEFL_STATUS_DONE) + return (flush == MZ_FINISH) ? MZ_STREAM_END : MZ_BUF_ERROR; + + orig_total_in = pStream->total_in; orig_total_out = pStream->total_out; + for ( ; ; ) + { + tdefl_status defl_status; + in_bytes = pStream->avail_in; out_bytes = pStream->avail_out; + + defl_status = tdefl_compress((tdefl_compressor*)pStream->state, pStream->next_in, &in_bytes, pStream->next_out, &out_bytes, (tdefl_flush)flush); + pStream->next_in += (mz_uint)in_bytes; pStream->avail_in -= (mz_uint)in_bytes; + pStream->total_in += (mz_uint)in_bytes; pStream->adler = tdefl_get_adler32((tdefl_compressor*)pStream->state); + + pStream->next_out += (mz_uint)out_bytes; pStream->avail_out -= (mz_uint)out_bytes; + pStream->total_out += (mz_uint)out_bytes; + + if (defl_status < 0) + { + mz_status = MZ_STREAM_ERROR; + break; + } + else if (defl_status == TDEFL_STATUS_DONE) + { + mz_status = MZ_STREAM_END; + break; + } + else if (!pStream->avail_out) + break; + else if ((!pStream->avail_in) && (flush != MZ_FINISH)) + { + if ((flush) || (pStream->total_in != orig_total_in) || (pStream->total_out != orig_total_out)) + break; + return MZ_BUF_ERROR; // Can't make forward progress without some input. + } + } + return mz_status; +} + +int mz_deflateEnd(mz_streamp pStream) +{ + if (!pStream) return MZ_STREAM_ERROR; + if (pStream->state) + { + pStream->zfree(pStream->opaque, pStream->state); + pStream->state = NULL; + } + return MZ_OK; +} + +mz_ulong mz_deflateBound(mz_streamp pStream, mz_ulong source_len) +{ + (void)pStream; + // This is really over conservative. (And lame, but it's actually pretty tricky to compute a true upper bound given the way tdefl's blocking works.) + return MZ_MAX(128 + (source_len * 110) / 100, 128 + source_len + ((source_len / (31 * 1024)) + 1) * 5); +} + +int mz_compress2(unsigned char *pDest, mz_ulong *pDest_len, const unsigned char *pSource, mz_ulong source_len, int level) +{ + int status; + mz_stream stream; + memset(&stream, 0, sizeof(stream)); + + // In case mz_ulong is 64-bits (argh I hate longs). + if ((source_len | *pDest_len) > 0xFFFFFFFFU) return MZ_PARAM_ERROR; + + stream.next_in = pSource; + stream.avail_in = (mz_uint32)source_len; + stream.next_out = pDest; + stream.avail_out = (mz_uint32)*pDest_len; + + status = mz_deflateInit(&stream, level); + if (status != MZ_OK) return status; + + status = mz_deflate(&stream, MZ_FINISH); + if (status != MZ_STREAM_END) + { + mz_deflateEnd(&stream); + return (status == MZ_OK) ? MZ_BUF_ERROR : status; + } + + *pDest_len = stream.total_out; + return mz_deflateEnd(&stream); +} + +int mz_compress(unsigned char *pDest, mz_ulong *pDest_len, const unsigned char *pSource, mz_ulong source_len) +{ + return mz_compress2(pDest, pDest_len, pSource, source_len, MZ_DEFAULT_COMPRESSION); +} + +mz_ulong mz_compressBound(mz_ulong source_len) +{ + return mz_deflateBound(NULL, source_len); +} + +typedef struct +{ + tinfl_decompressor m_decomp; + mz_uint m_dict_ofs, m_dict_avail, m_first_call, m_has_flushed; int m_window_bits; + mz_uint8 m_dict[TINFL_LZ_DICT_SIZE]; + tinfl_status m_last_status; +} inflate_state; + +int mz_inflateInit2(mz_streamp pStream, int window_bits) +{ + inflate_state *pDecomp; + if (!pStream) return MZ_STREAM_ERROR; + if ((window_bits != MZ_DEFAULT_WINDOW_BITS) && (-window_bits != MZ_DEFAULT_WINDOW_BITS)) return MZ_PARAM_ERROR; + + pStream->data_type = 0; + pStream->adler = 0; + pStream->msg = NULL; + pStream->total_in = 0; + pStream->total_out = 0; + pStream->reserved = 0; + if (!pStream->zalloc) pStream->zalloc = def_alloc_func; + if (!pStream->zfree) pStream->zfree = def_free_func; + + pDecomp = (inflate_state*)pStream->zalloc(pStream->opaque, 1, sizeof(inflate_state)); + if (!pDecomp) return MZ_MEM_ERROR; + + pStream->state = (struct mz_internal_state *)pDecomp; + + tinfl_init(&pDecomp->m_decomp); + pDecomp->m_dict_ofs = 0; + pDecomp->m_dict_avail = 0; + pDecomp->m_last_status = TINFL_STATUS_NEEDS_MORE_INPUT; + pDecomp->m_first_call = 1; + pDecomp->m_has_flushed = 0; + pDecomp->m_window_bits = window_bits; + + return MZ_OK; +} + +int mz_inflateInit(mz_streamp pStream) +{ + return mz_inflateInit2(pStream, MZ_DEFAULT_WINDOW_BITS); +} + +int mz_inflate(mz_streamp pStream, int flush) +{ + inflate_state* pState; + mz_uint n, first_call, decomp_flags = TINFL_FLAG_COMPUTE_ADLER32; + size_t in_bytes, out_bytes, orig_avail_in; + tinfl_status status; + + if ((!pStream) || (!pStream->state)) return MZ_STREAM_ERROR; + if (flush == MZ_PARTIAL_FLUSH) flush = MZ_SYNC_FLUSH; + if ((flush) && (flush != MZ_SYNC_FLUSH) && (flush != MZ_FINISH)) return MZ_STREAM_ERROR; + + pState = (inflate_state*)pStream->state; + if (pState->m_window_bits > 0) decomp_flags |= TINFL_FLAG_PARSE_ZLIB_HEADER; + orig_avail_in = pStream->avail_in; + + first_call = pState->m_first_call; pState->m_first_call = 0; + if (pState->m_last_status < 0) return MZ_DATA_ERROR; + + if (pState->m_has_flushed && (flush != MZ_FINISH)) return MZ_STREAM_ERROR; + pState->m_has_flushed |= (flush == MZ_FINISH); + + if ((flush == MZ_FINISH) && (first_call)) + { + // MZ_FINISH on the first call implies that the input and output buffers are large enough to hold the entire compressed/decompressed file. + decomp_flags |= TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF; + in_bytes = pStream->avail_in; out_bytes = pStream->avail_out; + status = tinfl_decompress(&pState->m_decomp, pStream->next_in, &in_bytes, pStream->next_out, pStream->next_out, &out_bytes, decomp_flags); + pState->m_last_status = status; + pStream->next_in += (mz_uint)in_bytes; pStream->avail_in -= (mz_uint)in_bytes; pStream->total_in += (mz_uint)in_bytes; + pStream->adler = tinfl_get_adler32(&pState->m_decomp); + pStream->next_out += (mz_uint)out_bytes; pStream->avail_out -= (mz_uint)out_bytes; pStream->total_out += (mz_uint)out_bytes; + + if (status < 0) + return MZ_DATA_ERROR; + else if (status != TINFL_STATUS_DONE) + { + pState->m_last_status = TINFL_STATUS_FAILED; + return MZ_BUF_ERROR; + } + return MZ_STREAM_END; + } + // flush != MZ_FINISH then we must assume there's more input. + if (flush != MZ_FINISH) decomp_flags |= TINFL_FLAG_HAS_MORE_INPUT; + + if (pState->m_dict_avail) + { + n = MZ_MIN(pState->m_dict_avail, pStream->avail_out); + memcpy(pStream->next_out, pState->m_dict + pState->m_dict_ofs, n); + pStream->next_out += n; pStream->avail_out -= n; pStream->total_out += n; + pState->m_dict_avail -= n; pState->m_dict_ofs = (pState->m_dict_ofs + n) & (TINFL_LZ_DICT_SIZE - 1); + return ((pState->m_last_status == TINFL_STATUS_DONE) && (!pState->m_dict_avail)) ? MZ_STREAM_END : MZ_OK; + } + + for ( ; ; ) + { + in_bytes = pStream->avail_in; + out_bytes = TINFL_LZ_DICT_SIZE - pState->m_dict_ofs; + + status = tinfl_decompress(&pState->m_decomp, pStream->next_in, &in_bytes, pState->m_dict, pState->m_dict + pState->m_dict_ofs, &out_bytes, decomp_flags); + pState->m_last_status = status; + + pStream->next_in += (mz_uint)in_bytes; pStream->avail_in -= (mz_uint)in_bytes; + pStream->total_in += (mz_uint)in_bytes; pStream->adler = tinfl_get_adler32(&pState->m_decomp); + + pState->m_dict_avail = (mz_uint)out_bytes; + + n = MZ_MIN(pState->m_dict_avail, pStream->avail_out); + memcpy(pStream->next_out, pState->m_dict + pState->m_dict_ofs, n); + pStream->next_out += n; pStream->avail_out -= n; pStream->total_out += n; + pState->m_dict_avail -= n; pState->m_dict_ofs = (pState->m_dict_ofs + n) & (TINFL_LZ_DICT_SIZE - 1); + + if (status < 0) + return MZ_DATA_ERROR; // Stream is corrupted (there could be some uncompressed data left in the output dictionary - oh well). + else if ((status == TINFL_STATUS_NEEDS_MORE_INPUT) && (!orig_avail_in)) + return MZ_BUF_ERROR; // Signal caller that we can't make forward progress without supplying more input or by setting flush to MZ_FINISH. + else if (flush == MZ_FINISH) + { + // The output buffer MUST be large to hold the remaining uncompressed data when flush==MZ_FINISH. + if (status == TINFL_STATUS_DONE) + return pState->m_dict_avail ? MZ_BUF_ERROR : MZ_STREAM_END; + // status here must be TINFL_STATUS_HAS_MORE_OUTPUT, which means there's at least 1 more byte on the way. If there's no more room left in the output buffer then something is wrong. + else if (!pStream->avail_out) + return MZ_BUF_ERROR; + } + else if ((status == TINFL_STATUS_DONE) || (!pStream->avail_in) || (!pStream->avail_out) || (pState->m_dict_avail)) + break; + } + + return ((status == TINFL_STATUS_DONE) && (!pState->m_dict_avail)) ? MZ_STREAM_END : MZ_OK; +} + +int mz_inflateEnd(mz_streamp pStream) +{ + if (!pStream) + return MZ_STREAM_ERROR; + if (pStream->state) + { + pStream->zfree(pStream->opaque, pStream->state); + pStream->state = NULL; + } + return MZ_OK; +} + +int mz_uncompress(unsigned char *pDest, mz_ulong *pDest_len, const unsigned char *pSource, mz_ulong source_len) +{ + mz_stream stream; + int status; + memset(&stream, 0, sizeof(stream)); + + // In case mz_ulong is 64-bits (argh I hate longs). + if ((source_len | *pDest_len) > 0xFFFFFFFFU) return MZ_PARAM_ERROR; + + stream.next_in = pSource; + stream.avail_in = (mz_uint32)source_len; + stream.next_out = pDest; + stream.avail_out = (mz_uint32)*pDest_len; + + status = mz_inflateInit(&stream); + if (status != MZ_OK) + return status; + + status = mz_inflate(&stream, MZ_FINISH); + if (status != MZ_STREAM_END) + { + mz_inflateEnd(&stream); + return ((status == MZ_BUF_ERROR) && (!stream.avail_in)) ? MZ_DATA_ERROR : status; + } + *pDest_len = stream.total_out; + + return mz_inflateEnd(&stream); +} + +const char *mz_error(int err) +{ + static struct { int m_err; const char *m_pDesc; } s_error_descs[] = + { + { MZ_OK, "" }, { MZ_STREAM_END, "stream end" }, { MZ_NEED_DICT, "need dictionary" }, { MZ_ERRNO, "file error" }, { MZ_STREAM_ERROR, "stream error" }, + { MZ_DATA_ERROR, "data error" }, { MZ_MEM_ERROR, "out of memory" }, { MZ_BUF_ERROR, "buf error" }, { MZ_VERSION_ERROR, "version error" }, { MZ_PARAM_ERROR, "parameter error" } + }; + mz_uint i; for (i = 0; i < sizeof(s_error_descs) / sizeof(s_error_descs[0]); ++i) if (s_error_descs[i].m_err == err) return s_error_descs[i].m_pDesc; + return NULL; +} + +#endif //MINIZ_NO_ZLIB_APIS + +// ------------------- Low-level Decompression (completely independent from all compression API's) + +#define TINFL_MEMCPY(d, s, l) memcpy(d, s, l) +#define TINFL_MEMSET(p, c, l) memset(p, c, l) + +#define TINFL_CR_BEGIN switch(r->m_state) { case 0: +#define TINFL_CR_RETURN(state_index, result) do { status = result; r->m_state = state_index; goto common_exit; case state_index:; } MZ_MACRO_END +#define TINFL_CR_RETURN_FOREVER(state_index, result) do { for ( ; ; ) { TINFL_CR_RETURN(state_index, result); } } MZ_MACRO_END +#define TINFL_CR_FINISH } + +// TODO: If the caller has indicated that there's no more input, and we attempt to read beyond the input buf, then something is wrong with the input because the inflator never +// reads ahead more than it needs to. Currently TINFL_GET_BYTE() pads the end of the stream with 0's in this scenario. +#define TINFL_GET_BYTE(state_index, c) do { \ + if (pIn_buf_cur >= pIn_buf_end) { \ + for ( ; ; ) { \ + if (decomp_flags & TINFL_FLAG_HAS_MORE_INPUT) { \ + TINFL_CR_RETURN(state_index, TINFL_STATUS_NEEDS_MORE_INPUT); \ + if (pIn_buf_cur < pIn_buf_end) { \ + c = *pIn_buf_cur++; \ + break; \ + } \ + } else { \ + c = 0; \ + break; \ + } \ + } \ + } else c = *pIn_buf_cur++; } MZ_MACRO_END + +#define TINFL_NEED_BITS(state_index, n) do { mz_uint c; TINFL_GET_BYTE(state_index, c); bit_buf |= (((tinfl_bit_buf_t)c) << num_bits); num_bits += 8; } while (num_bits < (mz_uint)(n)) +#define TINFL_SKIP_BITS(state_index, n) do { if (num_bits < (mz_uint)(n)) { TINFL_NEED_BITS(state_index, n); } bit_buf >>= (n); num_bits -= (n); } MZ_MACRO_END +#define TINFL_GET_BITS(state_index, b, n) do { if (num_bits < (mz_uint)(n)) { TINFL_NEED_BITS(state_index, n); } b = bit_buf & ((1 << (n)) - 1); bit_buf >>= (n); num_bits -= (n); } MZ_MACRO_END + +// TINFL_HUFF_BITBUF_FILL() is only used rarely, when the number of bytes remaining in the input buffer falls below 2. +// It reads just enough bytes from the input stream that are needed to decode the next Huffman code (and absolutely no more). It works by trying to fully decode a +// Huffman code by using whatever bits are currently present in the bit buffer. If this fails, it reads another byte, and tries again until it succeeds or until the +// bit buffer contains >=15 bits (deflate's max. Huffman code size). +#define TINFL_HUFF_BITBUF_FILL(state_index, pHuff) \ + do { \ + temp = (pHuff)->m_look_up[bit_buf & (TINFL_FAST_LOOKUP_SIZE - 1)]; \ + if (temp >= 0) { \ + code_len = temp >> 9; \ + if ((code_len) && (num_bits >= code_len)) \ + break; \ + } else if (num_bits > TINFL_FAST_LOOKUP_BITS) { \ + code_len = TINFL_FAST_LOOKUP_BITS; \ + do { \ + temp = (pHuff)->m_tree[~temp + ((bit_buf >> code_len++) & 1)]; \ + } while ((temp < 0) && (num_bits >= (code_len + 1))); if (temp >= 0) break; \ + } TINFL_GET_BYTE(state_index, c); bit_buf |= (((tinfl_bit_buf_t)c) << num_bits); num_bits += 8; \ + } while (num_bits < 15); + +// TINFL_HUFF_DECODE() decodes the next Huffman coded symbol. It's more complex than you would initially expect because the zlib API expects the decompressor to never read +// beyond the final byte of the deflate stream. (In other words, when this macro wants to read another byte from the input, it REALLY needs another byte in order to fully +// decode the next Huffman code.) Handling this properly is particularly important on raw deflate (non-zlib) streams, which aren't followed by a byte aligned adler-32. +// The slow path is only executed at the very end of the input buffer. +#define TINFL_HUFF_DECODE(state_index, sym, pHuff) do { \ + int temp; mz_uint code_len, c; \ + if (num_bits < 15) { \ + if ((pIn_buf_end - pIn_buf_cur) < 2) { \ + TINFL_HUFF_BITBUF_FILL(state_index, pHuff); \ + } else { \ + bit_buf |= (((tinfl_bit_buf_t)pIn_buf_cur[0]) << num_bits) | (((tinfl_bit_buf_t)pIn_buf_cur[1]) << (num_bits + 8)); pIn_buf_cur += 2; num_bits += 16; \ + } \ + } \ + if ((temp = (pHuff)->m_look_up[bit_buf & (TINFL_FAST_LOOKUP_SIZE - 1)]) >= 0) \ + code_len = temp >> 9, temp &= 511; \ + else { \ + code_len = TINFL_FAST_LOOKUP_BITS; do { temp = (pHuff)->m_tree[~temp + ((bit_buf >> code_len++) & 1)]; } while (temp < 0); \ + } sym = temp; bit_buf >>= code_len; num_bits -= code_len; } MZ_MACRO_END + +tinfl_status tinfl_decompress(tinfl_decompressor *r, const mz_uint8 *pIn_buf_next, size_t *pIn_buf_size, mz_uint8 *pOut_buf_start, mz_uint8 *pOut_buf_next, size_t *pOut_buf_size, const mz_uint32 decomp_flags) +{ + static const int s_length_base[31] = { 3,4,5,6,7,8,9,10,11,13, 15,17,19,23,27,31,35,43,51,59, 67,83,99,115,131,163,195,227,258,0,0 }; + static const int s_length_extra[31]= { 0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0 }; + static const int s_dist_base[32] = { 1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193, 257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0}; + static const int s_dist_extra[32] = { 0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13}; + static const mz_uint8 s_length_dezigzag[19] = { 16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15 }; + static const int s_min_table_sizes[3] = { 257, 1, 4 }; + + tinfl_status status = TINFL_STATUS_FAILED; mz_uint32 num_bits, dist, counter, num_extra; tinfl_bit_buf_t bit_buf; + const mz_uint8 *pIn_buf_cur = pIn_buf_next, *const pIn_buf_end = pIn_buf_next + *pIn_buf_size; + mz_uint8 *pOut_buf_cur = pOut_buf_next, *const pOut_buf_end = pOut_buf_next + *pOut_buf_size; + size_t out_buf_size_mask = (decomp_flags & TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF) ? (size_t)-1 : ((pOut_buf_next - pOut_buf_start) + *pOut_buf_size) - 1, dist_from_out_buf_start; + + // Ensure the output buffer's size is a power of 2, unless the output buffer is large enough to hold the entire output file (in which case it doesn't matter). + if (((out_buf_size_mask + 1) & out_buf_size_mask) || (pOut_buf_next < pOut_buf_start)) { *pIn_buf_size = *pOut_buf_size = 0; return TINFL_STATUS_BAD_PARAM; } + + num_bits = r->m_num_bits; bit_buf = r->m_bit_buf; dist = r->m_dist; counter = r->m_counter; num_extra = r->m_num_extra; dist_from_out_buf_start = r->m_dist_from_out_buf_start; + TINFL_CR_BEGIN + + bit_buf = num_bits = dist = counter = num_extra = r->m_zhdr0 = r->m_zhdr1 = 0; r->m_z_adler32 = r->m_check_adler32 = 1; + if (decomp_flags & TINFL_FLAG_PARSE_ZLIB_HEADER) + { + TINFL_GET_BYTE(1, r->m_zhdr0); TINFL_GET_BYTE(2, r->m_zhdr1); + counter = (((r->m_zhdr0 * 256 + r->m_zhdr1) % 31 != 0) || (r->m_zhdr1 & 32) || ((r->m_zhdr0 & 15) != 8)); + if (!(decomp_flags & TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF)) counter |= (((1U << (8U + (r->m_zhdr0 >> 4))) > 32768U) || ((out_buf_size_mask + 1) < (size_t)(1ULL << (8U + (r->m_zhdr0 >> 4))))); + if (counter) { TINFL_CR_RETURN_FOREVER(36, TINFL_STATUS_FAILED); } + } + + do + { + TINFL_GET_BITS(3, r->m_final, 3); r->m_type = r->m_final >> 1; + if (r->m_type == 0) + { + TINFL_SKIP_BITS(5, num_bits & 7); + for (counter = 0; counter < 4; ++counter) { if (num_bits) TINFL_GET_BITS(6, r->m_raw_header[counter], 8); else TINFL_GET_BYTE(7, r->m_raw_header[counter]); } + if ((counter = (r->m_raw_header[0] | (r->m_raw_header[1] << 8))) != (mz_uint)(0xFFFF ^ (r->m_raw_header[2] | (r->m_raw_header[3] << 8)))) { TINFL_CR_RETURN_FOREVER(39, TINFL_STATUS_FAILED); } + while ((counter) && (num_bits)) + { + TINFL_GET_BITS(51, dist, 8); + while (pOut_buf_cur >= pOut_buf_end) { TINFL_CR_RETURN(52, TINFL_STATUS_HAS_MORE_OUTPUT); } + *pOut_buf_cur++ = (mz_uint8)dist; + counter--; + } + while (counter) + { + size_t n; while (pOut_buf_cur >= pOut_buf_end) { TINFL_CR_RETURN(9, TINFL_STATUS_HAS_MORE_OUTPUT); } + while (pIn_buf_cur >= pIn_buf_end) + { + if (decomp_flags & TINFL_FLAG_HAS_MORE_INPUT) + { + TINFL_CR_RETURN(38, TINFL_STATUS_NEEDS_MORE_INPUT); + } + else + { + TINFL_CR_RETURN_FOREVER(40, TINFL_STATUS_FAILED); + } + } + n = MZ_MIN(MZ_MIN((size_t)(pOut_buf_end - pOut_buf_cur), (size_t)(pIn_buf_end - pIn_buf_cur)), counter); + TINFL_MEMCPY(pOut_buf_cur, pIn_buf_cur, n); pIn_buf_cur += n; pOut_buf_cur += n; counter -= (mz_uint)n; + } + } + else if (r->m_type == 3) + { + TINFL_CR_RETURN_FOREVER(10, TINFL_STATUS_FAILED); + } + else + { + if (r->m_type == 1) + { + mz_uint8 *p = r->m_tables[0].m_code_size; mz_uint i; + r->m_table_sizes[0] = 288; r->m_table_sizes[1] = 32; TINFL_MEMSET(r->m_tables[1].m_code_size, 5, 32); + for ( i = 0; i <= 143; ++i) *p++ = 8; for ( ; i <= 255; ++i) *p++ = 9; for ( ; i <= 279; ++i) *p++ = 7; for ( ; i <= 287; ++i) *p++ = 8; + } + else + { + for (counter = 0; counter < 3; counter++) { TINFL_GET_BITS(11, r->m_table_sizes[counter], "\05\05\04"[counter]); r->m_table_sizes[counter] += s_min_table_sizes[counter]; } + MZ_CLEAR_OBJ(r->m_tables[2].m_code_size); for (counter = 0; counter < r->m_table_sizes[2]; counter++) { mz_uint s; TINFL_GET_BITS(14, s, 3); r->m_tables[2].m_code_size[s_length_dezigzag[counter]] = (mz_uint8)s; } + r->m_table_sizes[2] = 19; + } + for ( ; (int)r->m_type >= 0; r->m_type--) + { + int tree_next, tree_cur; tinfl_huff_table *pTable; + mz_uint i, j, used_syms, total, sym_index, next_code[17], total_syms[16]; pTable = &r->m_tables[r->m_type]; MZ_CLEAR_OBJ(total_syms); MZ_CLEAR_OBJ(pTable->m_look_up); MZ_CLEAR_OBJ(pTable->m_tree); + for (i = 0; i < r->m_table_sizes[r->m_type]; ++i) total_syms[pTable->m_code_size[i]]++; + used_syms = 0, total = 0; next_code[0] = next_code[1] = 0; + for (i = 1; i <= 15; ++i) { used_syms += total_syms[i]; next_code[i + 1] = (total = ((total + total_syms[i]) << 1)); } + if ((65536 != total) && (used_syms > 1)) + { + TINFL_CR_RETURN_FOREVER(35, TINFL_STATUS_FAILED); + } + for (tree_next = -1, sym_index = 0; sym_index < r->m_table_sizes[r->m_type]; ++sym_index) + { + mz_uint rev_code = 0, l, cur_code, code_size = pTable->m_code_size[sym_index]; if (!code_size) continue; + cur_code = next_code[code_size]++; for (l = code_size; l > 0; l--, cur_code >>= 1) rev_code = (rev_code << 1) | (cur_code & 1); + if (code_size <= TINFL_FAST_LOOKUP_BITS) { mz_int16 k = (mz_int16)((code_size << 9) | sym_index); while (rev_code < TINFL_FAST_LOOKUP_SIZE) { pTable->m_look_up[rev_code] = k; rev_code += (1 << code_size); } continue; } + if (0 == (tree_cur = pTable->m_look_up[rev_code & (TINFL_FAST_LOOKUP_SIZE - 1)])) { pTable->m_look_up[rev_code & (TINFL_FAST_LOOKUP_SIZE - 1)] = (mz_int16)tree_next; tree_cur = tree_next; tree_next -= 2; } + rev_code >>= (TINFL_FAST_LOOKUP_BITS - 1); + for (j = code_size; j > (TINFL_FAST_LOOKUP_BITS + 1); j--) + { + tree_cur -= ((rev_code >>= 1) & 1); + if (!pTable->m_tree[-tree_cur - 1]) { pTable->m_tree[-tree_cur - 1] = (mz_int16)tree_next; tree_cur = tree_next; tree_next -= 2; } else tree_cur = pTable->m_tree[-tree_cur - 1]; + } + tree_cur -= ((rev_code >>= 1) & 1); pTable->m_tree[-tree_cur - 1] = (mz_int16)sym_index; + } + if (r->m_type == 2) + { + for (counter = 0; counter < (r->m_table_sizes[0] + r->m_table_sizes[1]); ) + { + mz_uint s; TINFL_HUFF_DECODE(16, dist, &r->m_tables[2]); if (dist < 16) { r->m_len_codes[counter++] = (mz_uint8)dist; continue; } + if ((dist == 16) && (!counter)) + { + TINFL_CR_RETURN_FOREVER(17, TINFL_STATUS_FAILED); + } + num_extra = "\02\03\07"[dist - 16]; TINFL_GET_BITS(18, s, num_extra); s += "\03\03\013"[dist - 16]; + TINFL_MEMSET(r->m_len_codes + counter, (dist == 16) ? r->m_len_codes[counter - 1] : 0, s); counter += s; + } + if ((r->m_table_sizes[0] + r->m_table_sizes[1]) != counter) + { + TINFL_CR_RETURN_FOREVER(21, TINFL_STATUS_FAILED); + } + TINFL_MEMCPY(r->m_tables[0].m_code_size, r->m_len_codes, r->m_table_sizes[0]); TINFL_MEMCPY(r->m_tables[1].m_code_size, r->m_len_codes + r->m_table_sizes[0], r->m_table_sizes[1]); + } + } + for ( ; ; ) + { + mz_uint8 *pSrc; + for ( ; ; ) + { + if (((pIn_buf_end - pIn_buf_cur) < 4) || ((pOut_buf_end - pOut_buf_cur) < 2)) + { + TINFL_HUFF_DECODE(23, counter, &r->m_tables[0]); + if (counter >= 256) + break; + while (pOut_buf_cur >= pOut_buf_end) { TINFL_CR_RETURN(24, TINFL_STATUS_HAS_MORE_OUTPUT); } + *pOut_buf_cur++ = (mz_uint8)counter; + } + else + { + int sym2; mz_uint code_len; +#if TINFL_USE_64BIT_BITBUF + if (num_bits < 30) { bit_buf |= (((tinfl_bit_buf_t)MZ_READ_LE32(pIn_buf_cur)) << num_bits); pIn_buf_cur += 4; num_bits += 32; } +#else + if (num_bits < 15) { bit_buf |= (((tinfl_bit_buf_t)MZ_READ_LE16(pIn_buf_cur)) << num_bits); pIn_buf_cur += 2; num_bits += 16; } +#endif + if ((sym2 = r->m_tables[0].m_look_up[bit_buf & (TINFL_FAST_LOOKUP_SIZE - 1)]) >= 0) + code_len = sym2 >> 9; + else + { + code_len = TINFL_FAST_LOOKUP_BITS; do { sym2 = r->m_tables[0].m_tree[~sym2 + ((bit_buf >> code_len++) & 1)]; } while (sym2 < 0); + } + counter = sym2; bit_buf >>= code_len; num_bits -= code_len; + if (counter & 256) + break; + +#if !TINFL_USE_64BIT_BITBUF + if (num_bits < 15) { bit_buf |= (((tinfl_bit_buf_t)MZ_READ_LE16(pIn_buf_cur)) << num_bits); pIn_buf_cur += 2; num_bits += 16; } +#endif + if ((sym2 = r->m_tables[0].m_look_up[bit_buf & (TINFL_FAST_LOOKUP_SIZE - 1)]) >= 0) + code_len = sym2 >> 9; + else + { + code_len = TINFL_FAST_LOOKUP_BITS; do { sym2 = r->m_tables[0].m_tree[~sym2 + ((bit_buf >> code_len++) & 1)]; } while (sym2 < 0); + } + bit_buf >>= code_len; num_bits -= code_len; + + pOut_buf_cur[0] = (mz_uint8)counter; + if (sym2 & 256) + { + pOut_buf_cur++; + counter = sym2; + break; + } + pOut_buf_cur[1] = (mz_uint8)sym2; + pOut_buf_cur += 2; + } + } + if ((counter &= 511) == 256) break; + + num_extra = s_length_extra[counter - 257]; counter = s_length_base[counter - 257]; + if (num_extra) { mz_uint extra_bits; TINFL_GET_BITS(25, extra_bits, num_extra); counter += extra_bits; } + + TINFL_HUFF_DECODE(26, dist, &r->m_tables[1]); + num_extra = s_dist_extra[dist]; dist = s_dist_base[dist]; + if (num_extra) { mz_uint extra_bits; TINFL_GET_BITS(27, extra_bits, num_extra); dist += extra_bits; } + + dist_from_out_buf_start = pOut_buf_cur - pOut_buf_start; + if ((dist > dist_from_out_buf_start) && (decomp_flags & TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF)) + { + TINFL_CR_RETURN_FOREVER(37, TINFL_STATUS_FAILED); + } + + pSrc = pOut_buf_start + ((dist_from_out_buf_start - dist) & out_buf_size_mask); + + if ((MZ_MAX(pOut_buf_cur, pSrc) + counter) > pOut_buf_end) + { + while (counter--) + { + while (pOut_buf_cur >= pOut_buf_end) { TINFL_CR_RETURN(53, TINFL_STATUS_HAS_MORE_OUTPUT); } + *pOut_buf_cur++ = pOut_buf_start[(dist_from_out_buf_start++ - dist) & out_buf_size_mask]; + } + continue; + } +#if MINIZ_USE_UNALIGNED_LOADS_AND_STORES + else if ((counter >= 9) && (counter <= dist)) + { + const mz_uint8 *pSrc_end = pSrc + (counter & ~7); + do + { + ((mz_uint32 *)pOut_buf_cur)[0] = ((const mz_uint32 *)pSrc)[0]; + ((mz_uint32 *)pOut_buf_cur)[1] = ((const mz_uint32 *)pSrc)[1]; + pOut_buf_cur += 8; + } while ((pSrc += 8) < pSrc_end); + if ((counter &= 7) < 3) + { + if (counter) + { + pOut_buf_cur[0] = pSrc[0]; + if (counter > 1) + pOut_buf_cur[1] = pSrc[1]; + pOut_buf_cur += counter; + } + continue; + } + } +#endif + do + { + pOut_buf_cur[0] = pSrc[0]; + pOut_buf_cur[1] = pSrc[1]; + pOut_buf_cur[2] = pSrc[2]; + pOut_buf_cur += 3; pSrc += 3; + } while ((int)(counter -= 3) > 2); + if ((int)counter > 0) + { + pOut_buf_cur[0] = pSrc[0]; + if ((int)counter > 1) + pOut_buf_cur[1] = pSrc[1]; + pOut_buf_cur += counter; + } + } + } + } while (!(r->m_final & 1)); + if (decomp_flags & TINFL_FLAG_PARSE_ZLIB_HEADER) + { + TINFL_SKIP_BITS(32, num_bits & 7); for (counter = 0; counter < 4; ++counter) { mz_uint s; if (num_bits) TINFL_GET_BITS(41, s, 8); else TINFL_GET_BYTE(42, s); r->m_z_adler32 = (r->m_z_adler32 << 8) | s; } + } + TINFL_CR_RETURN_FOREVER(34, TINFL_STATUS_DONE); + TINFL_CR_FINISH + +common_exit: + r->m_num_bits = num_bits; r->m_bit_buf = bit_buf; r->m_dist = dist; r->m_counter = counter; r->m_num_extra = num_extra; r->m_dist_from_out_buf_start = dist_from_out_buf_start; + *pIn_buf_size = pIn_buf_cur - pIn_buf_next; *pOut_buf_size = pOut_buf_cur - pOut_buf_next; + if ((decomp_flags & (TINFL_FLAG_PARSE_ZLIB_HEADER | TINFL_FLAG_COMPUTE_ADLER32)) && (status >= 0)) + { + const mz_uint8 *ptr = pOut_buf_next; size_t buf_len = *pOut_buf_size; + mz_uint32 i, s1 = r->m_check_adler32 & 0xffff, s2 = r->m_check_adler32 >> 16; size_t block_len = buf_len % 5552; + while (buf_len) + { + for (i = 0; i + 7 < block_len; i += 8, ptr += 8) + { + s1 += ptr[0], s2 += s1; s1 += ptr[1], s2 += s1; s1 += ptr[2], s2 += s1; s1 += ptr[3], s2 += s1; + s1 += ptr[4], s2 += s1; s1 += ptr[5], s2 += s1; s1 += ptr[6], s2 += s1; s1 += ptr[7], s2 += s1; + } + for ( ; i < block_len; ++i) s1 += *ptr++, s2 += s1; + s1 %= 65521U, s2 %= 65521U; buf_len -= block_len; block_len = 5552; + } + r->m_check_adler32 = (s2 << 16) + s1; if ((status == TINFL_STATUS_DONE) && (decomp_flags & TINFL_FLAG_PARSE_ZLIB_HEADER) && (r->m_check_adler32 != r->m_z_adler32)) status = TINFL_STATUS_ADLER32_MISMATCH; + } + return status; +} + +// Higher level helper functions. +void *tinfl_decompress_mem_to_heap(const void *pSrc_buf, size_t src_buf_len, size_t *pOut_len, int flags) +{ + tinfl_decompressor decomp; void *pBuf = NULL, *pNew_buf; size_t src_buf_ofs = 0, out_buf_capacity = 0; + *pOut_len = 0; + tinfl_init(&decomp); + for ( ; ; ) + { + size_t src_buf_size = src_buf_len - src_buf_ofs, dst_buf_size = out_buf_capacity - *pOut_len, new_out_buf_capacity; + tinfl_status status = tinfl_decompress(&decomp, (const mz_uint8*)pSrc_buf + src_buf_ofs, &src_buf_size, (mz_uint8*)pBuf, pBuf ? (mz_uint8*)pBuf + *pOut_len : NULL, &dst_buf_size, + (flags & ~TINFL_FLAG_HAS_MORE_INPUT) | TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF); + if ((status < 0) || (status == TINFL_STATUS_NEEDS_MORE_INPUT)) + { + MZ_FREE(pBuf); *pOut_len = 0; return NULL; + } + src_buf_ofs += src_buf_size; + *pOut_len += dst_buf_size; + if (status == TINFL_STATUS_DONE) break; + new_out_buf_capacity = out_buf_capacity * 2; if (new_out_buf_capacity < 128) new_out_buf_capacity = 128; + pNew_buf = MZ_REALLOC(pBuf, new_out_buf_capacity); + if (!pNew_buf) + { + MZ_FREE(pBuf); *pOut_len = 0; return NULL; + } + pBuf = pNew_buf; out_buf_capacity = new_out_buf_capacity; + } + return pBuf; +} + +size_t tinfl_decompress_mem_to_mem(void *pOut_buf, size_t out_buf_len, const void *pSrc_buf, size_t src_buf_len, int flags) +{ + tinfl_decompressor decomp; tinfl_status status; tinfl_init(&decomp); + status = tinfl_decompress(&decomp, (const mz_uint8*)pSrc_buf, &src_buf_len, (mz_uint8*)pOut_buf, (mz_uint8*)pOut_buf, &out_buf_len, (flags & ~TINFL_FLAG_HAS_MORE_INPUT) | TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF); + return (status != TINFL_STATUS_DONE) ? TINFL_DECOMPRESS_MEM_TO_MEM_FAILED : out_buf_len; +} + +int tinfl_decompress_mem_to_callback(const void *pIn_buf, size_t *pIn_buf_size, tinfl_put_buf_func_ptr pPut_buf_func, void *pPut_buf_user, int flags) +{ + int result = 0; + tinfl_decompressor decomp; + mz_uint8 *pDict = (mz_uint8*)MZ_MALLOC(TINFL_LZ_DICT_SIZE); size_t in_buf_ofs = 0, dict_ofs = 0; + if (!pDict) + return TINFL_STATUS_FAILED; + tinfl_init(&decomp); + for ( ; ; ) + { + size_t in_buf_size = *pIn_buf_size - in_buf_ofs, dst_buf_size = TINFL_LZ_DICT_SIZE - dict_ofs; + tinfl_status status = tinfl_decompress(&decomp, (const mz_uint8*)pIn_buf + in_buf_ofs, &in_buf_size, pDict, pDict + dict_ofs, &dst_buf_size, + (flags & ~(TINFL_FLAG_HAS_MORE_INPUT | TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF))); + in_buf_ofs += in_buf_size; + if ((dst_buf_size) && (!(*pPut_buf_func)(pDict + dict_ofs, (int)dst_buf_size, pPut_buf_user))) + break; + if (status != TINFL_STATUS_HAS_MORE_OUTPUT) + { + result = (status == TINFL_STATUS_DONE); + break; + } + dict_ofs = (dict_ofs + dst_buf_size) & (TINFL_LZ_DICT_SIZE - 1); + } + MZ_FREE(pDict); + *pIn_buf_size = in_buf_ofs; + return result; +} + +// ------------------- Low-level Compression (independent from all decompression API's) + +// Purposely making these tables static for faster init and thread safety. +static const mz_uint16 s_tdefl_len_sym[256] = { + 257,258,259,260,261,262,263,264,265,265,266,266,267,267,268,268,269,269,269,269,270,270,270,270,271,271,271,271,272,272,272,272, + 273,273,273,273,273,273,273,273,274,274,274,274,274,274,274,274,275,275,275,275,275,275,275,275,276,276,276,276,276,276,276,276, + 277,277,277,277,277,277,277,277,277,277,277,277,277,277,277,277,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278,278, + 279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,279,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280,280, + 281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281,281, + 282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282,282, + 283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283, + 284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,284,285 }; + +static const mz_uint8 s_tdefl_len_extra[256] = { + 0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0 }; + +static const mz_uint8 s_tdefl_small_dist_sym[512] = { + 0,1,2,3,4,4,5,5,6,6,6,6,7,7,7,7,8,8,8,8,8,8,8,8,9,9,9,9,9,9,9,9,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,11,11,11,11,11,11, + 11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,13, + 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,14,14,14,14,14,14,14,14,14,14,14,14, + 14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14, + 14,14,14,14,14,14,14,14,14,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, + 15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16, + 16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,17,17,17,17,17,17,17,17,17,17,17,17,17,17, + 17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17, + 17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17, + 17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17,17 }; + +static const mz_uint8 s_tdefl_small_dist_extra[512] = { + 0,0,0,0,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, + 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, + 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7 }; + +static const mz_uint8 s_tdefl_large_dist_sym[128] = { + 0,0,18,19,20,20,21,21,22,22,22,22,23,23,23,23,24,24,24,24,24,24,24,24,25,25,25,25,25,25,25,25,26,26,26,26,26,26,26,26,26,26,26,26, + 26,26,26,26,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28, + 28,28,28,28,28,28,28,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29 }; + +static const mz_uint8 s_tdefl_large_dist_extra[128] = { + 0,0,8,8,9,9,9,9,10,10,10,10,10,10,10,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, + 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13, + 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13 }; + +// Radix sorts tdefl_sym_freq[] array by 16-bit key m_key. Returns ptr to sorted values. +typedef struct { mz_uint16 m_key, m_sym_index; } tdefl_sym_freq; +static tdefl_sym_freq* tdefl_radix_sort_syms(mz_uint num_syms, tdefl_sym_freq* pSyms0, tdefl_sym_freq* pSyms1) +{ + mz_uint32 total_passes = 2, pass_shift, pass, i, hist[256 * 2]; tdefl_sym_freq* pCur_syms = pSyms0, *pNew_syms = pSyms1; MZ_CLEAR_OBJ(hist); + for (i = 0; i < num_syms; i++) { mz_uint freq = pSyms0[i].m_key; hist[freq & 0xFF]++; hist[256 + ((freq >> 8) & 0xFF)]++; } + while ((total_passes > 1) && (num_syms == hist[(total_passes - 1) * 256])) total_passes--; + for (pass_shift = 0, pass = 0; pass < total_passes; pass++, pass_shift += 8) + { + const mz_uint32* pHist = &hist[pass << 8]; + mz_uint offsets[256], cur_ofs = 0; + for (i = 0; i < 256; i++) { offsets[i] = cur_ofs; cur_ofs += pHist[i]; } + for (i = 0; i < num_syms; i++) pNew_syms[offsets[(pCur_syms[i].m_key >> pass_shift) & 0xFF]++] = pCur_syms[i]; + { tdefl_sym_freq* t = pCur_syms; pCur_syms = pNew_syms; pNew_syms = t; } + } + return pCur_syms; +} + +// tdefl_calculate_minimum_redundancy() originally written by: Alistair Moffat, alistair@cs.mu.oz.au, Jyrki Katajainen, jyrki@diku.dk, November 1996. +static void tdefl_calculate_minimum_redundancy(tdefl_sym_freq *A, int n) +{ + int root, leaf, next, avbl, used, dpth; + if (n==0) return; else if (n==1) { A[0].m_key = 1; return; } + A[0].m_key += A[1].m_key; root = 0; leaf = 2; + for (next=1; next < n-1; next++) + { + if (leaf>=n || A[root].m_key=n || (root=0; next--) A[next].m_key = A[A[next].m_key].m_key+1; + avbl = 1; used = dpth = 0; root = n-2; next = n-1; + while (avbl>0) + { + while (root>=0 && (int)A[root].m_key==dpth) { used++; root--; } + while (avbl>used) { A[next--].m_key = (mz_uint16)(dpth); avbl--; } + avbl = 2*used; dpth++; used = 0; + } +} + +// Limits canonical Huffman code table's max code size. +enum { TDEFL_MAX_SUPPORTED_HUFF_CODESIZE = 32 }; +static void tdefl_huffman_enforce_max_code_size(int *pNum_codes, int code_list_len, int max_code_size) +{ + int i; mz_uint32 total = 0; if (code_list_len <= 1) return; + for (i = max_code_size + 1; i <= TDEFL_MAX_SUPPORTED_HUFF_CODESIZE; i++) pNum_codes[max_code_size] += pNum_codes[i]; + for (i = max_code_size; i > 0; i--) total += (((mz_uint32)pNum_codes[i]) << (max_code_size - i)); + while (total != (1UL << max_code_size)) + { + pNum_codes[max_code_size]--; + for (i = max_code_size - 1; i > 0; i--) if (pNum_codes[i]) { pNum_codes[i]--; pNum_codes[i + 1] += 2; break; } + total--; + } +} + +static void tdefl_optimize_huffman_table(tdefl_compressor *d, int table_num, int table_len, int code_size_limit, int static_table) +{ + int i, j, l, num_codes[1 + TDEFL_MAX_SUPPORTED_HUFF_CODESIZE]; mz_uint next_code[TDEFL_MAX_SUPPORTED_HUFF_CODESIZE + 1]; MZ_CLEAR_OBJ(num_codes); + if (static_table) + { + for (i = 0; i < table_len; i++) num_codes[d->m_huff_code_sizes[table_num][i]]++; + } + else + { + tdefl_sym_freq syms0[TDEFL_MAX_HUFF_SYMBOLS], syms1[TDEFL_MAX_HUFF_SYMBOLS], *pSyms; + int num_used_syms = 0; + const mz_uint16 *pSym_count = &d->m_huff_count[table_num][0]; + for (i = 0; i < table_len; i++) if (pSym_count[i]) { syms0[num_used_syms].m_key = (mz_uint16)pSym_count[i]; syms0[num_used_syms++].m_sym_index = (mz_uint16)i; } + + pSyms = tdefl_radix_sort_syms(num_used_syms, syms0, syms1); tdefl_calculate_minimum_redundancy(pSyms, num_used_syms); + + for (i = 0; i < num_used_syms; i++) num_codes[pSyms[i].m_key]++; + + tdefl_huffman_enforce_max_code_size(num_codes, num_used_syms, code_size_limit); + + MZ_CLEAR_OBJ(d->m_huff_code_sizes[table_num]); MZ_CLEAR_OBJ(d->m_huff_codes[table_num]); + for (i = 1, j = num_used_syms; i <= code_size_limit; i++) + for (l = num_codes[i]; l > 0; l--) d->m_huff_code_sizes[table_num][pSyms[--j].m_sym_index] = (mz_uint8)(i); + } + + next_code[1] = 0; for (j = 0, i = 2; i <= code_size_limit; i++) next_code[i] = j = ((j + num_codes[i - 1]) << 1); + + for (i = 0; i < table_len; i++) + { + mz_uint rev_code = 0, code, code_size; if ((code_size = d->m_huff_code_sizes[table_num][i]) == 0) continue; + code = next_code[code_size]++; for (l = code_size; l > 0; l--, code >>= 1) rev_code = (rev_code << 1) | (code & 1); + d->m_huff_codes[table_num][i] = (mz_uint16)rev_code; + } +} + +#define TDEFL_PUT_BITS(b, l) do { \ + mz_uint bits = b; mz_uint len = l; MZ_ASSERT(bits <= ((1U << len) - 1U)); \ + d->m_bit_buffer |= (bits << d->m_bits_in); d->m_bits_in += len; \ + while (d->m_bits_in >= 8) { \ + if (d->m_pOutput_buf < d->m_pOutput_buf_end) \ + *d->m_pOutput_buf++ = (mz_uint8)(d->m_bit_buffer); \ + d->m_bit_buffer >>= 8; \ + d->m_bits_in -= 8; \ + } \ +} MZ_MACRO_END + +#define TDEFL_RLE_PREV_CODE_SIZE() { if (rle_repeat_count) { \ + if (rle_repeat_count < 3) { \ + d->m_huff_count[2][prev_code_size] = (mz_uint16)(d->m_huff_count[2][prev_code_size] + rle_repeat_count); \ + while (rle_repeat_count--) packed_code_sizes[num_packed_code_sizes++] = prev_code_size; \ + } else { \ + d->m_huff_count[2][16] = (mz_uint16)(d->m_huff_count[2][16] + 1); packed_code_sizes[num_packed_code_sizes++] = 16; packed_code_sizes[num_packed_code_sizes++] = (mz_uint8)(rle_repeat_count - 3); \ +} rle_repeat_count = 0; } } + +#define TDEFL_RLE_ZERO_CODE_SIZE() { if (rle_z_count) { \ + if (rle_z_count < 3) { \ + d->m_huff_count[2][0] = (mz_uint16)(d->m_huff_count[2][0] + rle_z_count); while (rle_z_count--) packed_code_sizes[num_packed_code_sizes++] = 0; \ + } else if (rle_z_count <= 10) { \ + d->m_huff_count[2][17] = (mz_uint16)(d->m_huff_count[2][17] + 1); packed_code_sizes[num_packed_code_sizes++] = 17; packed_code_sizes[num_packed_code_sizes++] = (mz_uint8)(rle_z_count - 3); \ + } else { \ + d->m_huff_count[2][18] = (mz_uint16)(d->m_huff_count[2][18] + 1); packed_code_sizes[num_packed_code_sizes++] = 18; packed_code_sizes[num_packed_code_sizes++] = (mz_uint8)(rle_z_count - 11); \ +} rle_z_count = 0; } } + +static mz_uint8 s_tdefl_packed_code_size_syms_swizzle[] = { 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 }; + +static void tdefl_start_dynamic_block(tdefl_compressor *d) +{ + int num_lit_codes, num_dist_codes, num_bit_lengths; mz_uint i, total_code_sizes_to_pack, num_packed_code_sizes, rle_z_count, rle_repeat_count, packed_code_sizes_index; + mz_uint8 code_sizes_to_pack[TDEFL_MAX_HUFF_SYMBOLS_0 + TDEFL_MAX_HUFF_SYMBOLS_1], packed_code_sizes[TDEFL_MAX_HUFF_SYMBOLS_0 + TDEFL_MAX_HUFF_SYMBOLS_1], prev_code_size = 0xFF; + + d->m_huff_count[0][256] = 1; + + tdefl_optimize_huffman_table(d, 0, TDEFL_MAX_HUFF_SYMBOLS_0, 15, MZ_FALSE); + tdefl_optimize_huffman_table(d, 1, TDEFL_MAX_HUFF_SYMBOLS_1, 15, MZ_FALSE); + + for (num_lit_codes = 286; num_lit_codes > 257; num_lit_codes--) if (d->m_huff_code_sizes[0][num_lit_codes - 1]) break; + for (num_dist_codes = 30; num_dist_codes > 1; num_dist_codes--) if (d->m_huff_code_sizes[1][num_dist_codes - 1]) break; + + memcpy(code_sizes_to_pack, &d->m_huff_code_sizes[0][0], num_lit_codes); + memcpy(code_sizes_to_pack + num_lit_codes, &d->m_huff_code_sizes[1][0], num_dist_codes); + total_code_sizes_to_pack = num_lit_codes + num_dist_codes; num_packed_code_sizes = 0; rle_z_count = 0; rle_repeat_count = 0; + + memset(&d->m_huff_count[2][0], 0, sizeof(d->m_huff_count[2][0]) * TDEFL_MAX_HUFF_SYMBOLS_2); + for (i = 0; i < total_code_sizes_to_pack; i++) + { + mz_uint8 code_size = code_sizes_to_pack[i]; + if (!code_size) + { + TDEFL_RLE_PREV_CODE_SIZE(); + if (++rle_z_count == 138) { TDEFL_RLE_ZERO_CODE_SIZE(); } + } + else + { + TDEFL_RLE_ZERO_CODE_SIZE(); + if (code_size != prev_code_size) + { + TDEFL_RLE_PREV_CODE_SIZE(); + d->m_huff_count[2][code_size] = (mz_uint16)(d->m_huff_count[2][code_size] + 1); packed_code_sizes[num_packed_code_sizes++] = code_size; + } + else if (++rle_repeat_count == 6) + { + TDEFL_RLE_PREV_CODE_SIZE(); + } + } + prev_code_size = code_size; + } + if (rle_repeat_count) { TDEFL_RLE_PREV_CODE_SIZE(); } else { TDEFL_RLE_ZERO_CODE_SIZE(); } + + tdefl_optimize_huffman_table(d, 2, TDEFL_MAX_HUFF_SYMBOLS_2, 7, MZ_FALSE); + + TDEFL_PUT_BITS(2, 2); + + TDEFL_PUT_BITS(num_lit_codes - 257, 5); + TDEFL_PUT_BITS(num_dist_codes - 1, 5); + + for (num_bit_lengths = 18; num_bit_lengths >= 0; num_bit_lengths--) if (d->m_huff_code_sizes[2][s_tdefl_packed_code_size_syms_swizzle[num_bit_lengths]]) break; + num_bit_lengths = MZ_MAX(4, (num_bit_lengths + 1)); TDEFL_PUT_BITS(num_bit_lengths - 4, 4); + for (i = 0; (int)i < num_bit_lengths; i++) TDEFL_PUT_BITS(d->m_huff_code_sizes[2][s_tdefl_packed_code_size_syms_swizzle[i]], 3); + + for (packed_code_sizes_index = 0; packed_code_sizes_index < num_packed_code_sizes; ) + { + mz_uint code = packed_code_sizes[packed_code_sizes_index++]; MZ_ASSERT(code < TDEFL_MAX_HUFF_SYMBOLS_2); + TDEFL_PUT_BITS(d->m_huff_codes[2][code], d->m_huff_code_sizes[2][code]); + if (code >= 16) TDEFL_PUT_BITS(packed_code_sizes[packed_code_sizes_index++], "\02\03\07"[code - 16]); + } +} + +static void tdefl_start_static_block(tdefl_compressor *d) +{ + mz_uint i; + mz_uint8 *p = &d->m_huff_code_sizes[0][0]; + + for (i = 0; i <= 143; ++i) *p++ = 8; + for ( ; i <= 255; ++i) *p++ = 9; + for ( ; i <= 279; ++i) *p++ = 7; + for ( ; i <= 287; ++i) *p++ = 8; + + memset(d->m_huff_code_sizes[1], 5, 32); + + tdefl_optimize_huffman_table(d, 0, 288, 15, MZ_TRUE); + tdefl_optimize_huffman_table(d, 1, 32, 15, MZ_TRUE); + + TDEFL_PUT_BITS(1, 2); +} + +static const mz_uint mz_bitmasks[17] = { 0x0000, 0x0001, 0x0003, 0x0007, 0x000F, 0x001F, 0x003F, 0x007F, 0x00FF, 0x01FF, 0x03FF, 0x07FF, 0x0FFF, 0x1FFF, 0x3FFF, 0x7FFF, 0xFFFF }; + +#if MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN && MINIZ_HAS_64BIT_REGISTERS +static mz_bool tdefl_compress_lz_codes(tdefl_compressor *d) +{ + mz_uint flags; + mz_uint8 *pLZ_codes; + mz_uint8 *pOutput_buf = d->m_pOutput_buf; + mz_uint8 *pLZ_code_buf_end = d->m_pLZ_code_buf; + mz_uint64 bit_buffer = d->m_bit_buffer; + mz_uint bits_in = d->m_bits_in; + +#define TDEFL_PUT_BITS_FAST(b, l) { bit_buffer |= (((mz_uint64)(b)) << bits_in); bits_in += (l); } + + flags = 1; + for (pLZ_codes = d->m_lz_code_buf; pLZ_codes < pLZ_code_buf_end; flags >>= 1) + { + if (flags == 1) + flags = *pLZ_codes++ | 0x100; + + if (flags & 1) + { + mz_uint s0, s1, n0, n1, sym, num_extra_bits; + mz_uint match_len = pLZ_codes[0], match_dist = *(const mz_uint16 *)(pLZ_codes + 1); pLZ_codes += 3; + + MZ_ASSERT(d->m_huff_code_sizes[0][s_tdefl_len_sym[match_len]]); + TDEFL_PUT_BITS_FAST(d->m_huff_codes[0][s_tdefl_len_sym[match_len]], d->m_huff_code_sizes[0][s_tdefl_len_sym[match_len]]); + TDEFL_PUT_BITS_FAST(match_len & mz_bitmasks[s_tdefl_len_extra[match_len]], s_tdefl_len_extra[match_len]); + + // This sequence coaxes MSVC into using cmov's vs. jmp's. + s0 = s_tdefl_small_dist_sym[match_dist & 511]; + n0 = s_tdefl_small_dist_extra[match_dist & 511]; + s1 = s_tdefl_large_dist_sym[match_dist >> 8]; + n1 = s_tdefl_large_dist_extra[match_dist >> 8]; + sym = (match_dist < 512) ? s0 : s1; + num_extra_bits = (match_dist < 512) ? n0 : n1; + + MZ_ASSERT(d->m_huff_code_sizes[1][sym]); + TDEFL_PUT_BITS_FAST(d->m_huff_codes[1][sym], d->m_huff_code_sizes[1][sym]); + TDEFL_PUT_BITS_FAST(match_dist & mz_bitmasks[num_extra_bits], num_extra_bits); + } + else + { + mz_uint lit = *pLZ_codes++; + MZ_ASSERT(d->m_huff_code_sizes[0][lit]); + TDEFL_PUT_BITS_FAST(d->m_huff_codes[0][lit], d->m_huff_code_sizes[0][lit]); + + if (((flags & 2) == 0) && (pLZ_codes < pLZ_code_buf_end)) + { + flags >>= 1; + lit = *pLZ_codes++; + MZ_ASSERT(d->m_huff_code_sizes[0][lit]); + TDEFL_PUT_BITS_FAST(d->m_huff_codes[0][lit], d->m_huff_code_sizes[0][lit]); + + if (((flags & 2) == 0) && (pLZ_codes < pLZ_code_buf_end)) + { + flags >>= 1; + lit = *pLZ_codes++; + MZ_ASSERT(d->m_huff_code_sizes[0][lit]); + TDEFL_PUT_BITS_FAST(d->m_huff_codes[0][lit], d->m_huff_code_sizes[0][lit]); + } + } + } + + if (pOutput_buf >= d->m_pOutput_buf_end) + return MZ_FALSE; + + *(mz_uint64*)pOutput_buf = bit_buffer; + pOutput_buf += (bits_in >> 3); + bit_buffer >>= (bits_in & ~7); + bits_in &= 7; + } + +#undef TDEFL_PUT_BITS_FAST + + d->m_pOutput_buf = pOutput_buf; + d->m_bits_in = 0; + d->m_bit_buffer = 0; + + while (bits_in) + { + mz_uint32 n = MZ_MIN(bits_in, 16); + TDEFL_PUT_BITS((mz_uint)bit_buffer & mz_bitmasks[n], n); + bit_buffer >>= n; + bits_in -= n; + } + + TDEFL_PUT_BITS(d->m_huff_codes[0][256], d->m_huff_code_sizes[0][256]); + + return (d->m_pOutput_buf < d->m_pOutput_buf_end); +} +#else +static mz_bool tdefl_compress_lz_codes(tdefl_compressor *d) +{ + mz_uint flags; + mz_uint8 *pLZ_codes; + + flags = 1; + for (pLZ_codes = d->m_lz_code_buf; pLZ_codes < d->m_pLZ_code_buf; flags >>= 1) + { + if (flags == 1) + flags = *pLZ_codes++ | 0x100; + if (flags & 1) + { + mz_uint sym, num_extra_bits; + mz_uint match_len = pLZ_codes[0], match_dist = (pLZ_codes[1] | (pLZ_codes[2] << 8)); pLZ_codes += 3; + + MZ_ASSERT(d->m_huff_code_sizes[0][s_tdefl_len_sym[match_len]]); + TDEFL_PUT_BITS(d->m_huff_codes[0][s_tdefl_len_sym[match_len]], d->m_huff_code_sizes[0][s_tdefl_len_sym[match_len]]); + TDEFL_PUT_BITS(match_len & mz_bitmasks[s_tdefl_len_extra[match_len]], s_tdefl_len_extra[match_len]); + + if (match_dist < 512) + { + sym = s_tdefl_small_dist_sym[match_dist]; num_extra_bits = s_tdefl_small_dist_extra[match_dist]; + } + else + { + sym = s_tdefl_large_dist_sym[match_dist >> 8]; num_extra_bits = s_tdefl_large_dist_extra[match_dist >> 8]; + } + MZ_ASSERT(d->m_huff_code_sizes[1][sym]); + TDEFL_PUT_BITS(d->m_huff_codes[1][sym], d->m_huff_code_sizes[1][sym]); + TDEFL_PUT_BITS(match_dist & mz_bitmasks[num_extra_bits], num_extra_bits); + } + else + { + mz_uint lit = *pLZ_codes++; + MZ_ASSERT(d->m_huff_code_sizes[0][lit]); + TDEFL_PUT_BITS(d->m_huff_codes[0][lit], d->m_huff_code_sizes[0][lit]); + } + } + + TDEFL_PUT_BITS(d->m_huff_codes[0][256], d->m_huff_code_sizes[0][256]); + + return (d->m_pOutput_buf < d->m_pOutput_buf_end); +} +#endif // MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN && MINIZ_HAS_64BIT_REGISTERS + +static mz_bool tdefl_compress_block(tdefl_compressor *d, mz_bool static_block) +{ + if (static_block) + tdefl_start_static_block(d); + else + tdefl_start_dynamic_block(d); + return tdefl_compress_lz_codes(d); +} + +static int tdefl_flush_block(tdefl_compressor *d, int flush) +{ + mz_uint saved_bit_buf, saved_bits_in; + mz_uint8 *pSaved_output_buf; + mz_bool comp_block_succeeded = MZ_FALSE; + int n, use_raw_block = ((d->m_flags & TDEFL_FORCE_ALL_RAW_BLOCKS) != 0) && (d->m_lookahead_pos - d->m_lz_code_buf_dict_pos) <= d->m_dict_size; + mz_uint8 *pOutput_buf_start = ((d->m_pPut_buf_func == NULL) && ((*d->m_pOut_buf_size - d->m_out_buf_ofs) >= TDEFL_OUT_BUF_SIZE)) ? ((mz_uint8 *)d->m_pOut_buf + d->m_out_buf_ofs) : d->m_output_buf; + + d->m_pOutput_buf = pOutput_buf_start; + d->m_pOutput_buf_end = d->m_pOutput_buf + TDEFL_OUT_BUF_SIZE - 16; + + MZ_ASSERT(!d->m_output_flush_remaining); + d->m_output_flush_ofs = 0; + d->m_output_flush_remaining = 0; + + *d->m_pLZ_flags = (mz_uint8)(*d->m_pLZ_flags >> d->m_num_flags_left); + d->m_pLZ_code_buf -= (d->m_num_flags_left == 8); + + if ((d->m_flags & TDEFL_WRITE_ZLIB_HEADER) && (!d->m_block_index)) + { + TDEFL_PUT_BITS(0x78, 8); TDEFL_PUT_BITS(0x01, 8); + } + + TDEFL_PUT_BITS(flush == TDEFL_FINISH, 1); + + pSaved_output_buf = d->m_pOutput_buf; saved_bit_buf = d->m_bit_buffer; saved_bits_in = d->m_bits_in; + + if (!use_raw_block) + comp_block_succeeded = tdefl_compress_block(d, (d->m_flags & TDEFL_FORCE_ALL_STATIC_BLOCKS) || (d->m_total_lz_bytes < 48)); + + // If the block gets expanded, forget the current contents of the output buffer and send a raw block instead. + if ( ((use_raw_block) || ((d->m_total_lz_bytes) && ((d->m_pOutput_buf - pSaved_output_buf + 1U) >= d->m_total_lz_bytes))) && + ((d->m_lookahead_pos - d->m_lz_code_buf_dict_pos) <= d->m_dict_size) ) + { + mz_uint i; d->m_pOutput_buf = pSaved_output_buf; d->m_bit_buffer = saved_bit_buf, d->m_bits_in = saved_bits_in; + TDEFL_PUT_BITS(0, 2); + if (d->m_bits_in) { TDEFL_PUT_BITS(0, 8 - d->m_bits_in); } + for (i = 2; i; --i, d->m_total_lz_bytes ^= 0xFFFF) + { + TDEFL_PUT_BITS(d->m_total_lz_bytes & 0xFFFF, 16); + } + for (i = 0; i < d->m_total_lz_bytes; ++i) + { + TDEFL_PUT_BITS(d->m_dict[(d->m_lz_code_buf_dict_pos + i) & TDEFL_LZ_DICT_SIZE_MASK], 8); + } + } + // Check for the extremely unlikely (if not impossible) case of the compressed block not fitting into the output buffer when using dynamic codes. + else if (!comp_block_succeeded) + { + d->m_pOutput_buf = pSaved_output_buf; d->m_bit_buffer = saved_bit_buf, d->m_bits_in = saved_bits_in; + tdefl_compress_block(d, MZ_TRUE); + } + + if (flush) + { + if (flush == TDEFL_FINISH) + { + if (d->m_bits_in) { TDEFL_PUT_BITS(0, 8 - d->m_bits_in); } + if (d->m_flags & TDEFL_WRITE_ZLIB_HEADER) { mz_uint i, a = d->m_adler32; for (i = 0; i < 4; i++) { TDEFL_PUT_BITS((a >> 24) & 0xFF, 8); a <<= 8; } } + } + else + { + mz_uint i, z = 0; TDEFL_PUT_BITS(0, 3); if (d->m_bits_in) { TDEFL_PUT_BITS(0, 8 - d->m_bits_in); } for (i = 2; i; --i, z ^= 0xFFFF) { TDEFL_PUT_BITS(z & 0xFFFF, 16); } + } + } + + MZ_ASSERT(d->m_pOutput_buf < d->m_pOutput_buf_end); + + memset(&d->m_huff_count[0][0], 0, sizeof(d->m_huff_count[0][0]) * TDEFL_MAX_HUFF_SYMBOLS_0); + memset(&d->m_huff_count[1][0], 0, sizeof(d->m_huff_count[1][0]) * TDEFL_MAX_HUFF_SYMBOLS_1); + + d->m_pLZ_code_buf = d->m_lz_code_buf + 1; d->m_pLZ_flags = d->m_lz_code_buf; d->m_num_flags_left = 8; d->m_lz_code_buf_dict_pos += d->m_total_lz_bytes; d->m_total_lz_bytes = 0; d->m_block_index++; + + if ((n = (int)(d->m_pOutput_buf - pOutput_buf_start)) != 0) + { + if (d->m_pPut_buf_func) + { + *d->m_pIn_buf_size = d->m_pSrc - (const mz_uint8 *)d->m_pIn_buf; + if (!(*d->m_pPut_buf_func)(d->m_output_buf, n, d->m_pPut_buf_user)) + return (d->m_prev_return_status = TDEFL_STATUS_PUT_BUF_FAILED); + } + else if (pOutput_buf_start == d->m_output_buf) + { + int bytes_to_copy = (int)MZ_MIN((size_t)n, (size_t)(*d->m_pOut_buf_size - d->m_out_buf_ofs)); + memcpy((mz_uint8 *)d->m_pOut_buf + d->m_out_buf_ofs, d->m_output_buf, bytes_to_copy); + d->m_out_buf_ofs += bytes_to_copy; + if ((n -= bytes_to_copy) != 0) + { + d->m_output_flush_ofs = bytes_to_copy; + d->m_output_flush_remaining = n; + } + } + else + { + d->m_out_buf_ofs += n; + } + } + + return d->m_output_flush_remaining; +} + +#if MINIZ_USE_UNALIGNED_LOADS_AND_STORES +#define TDEFL_READ_UNALIGNED_WORD(p) *(const mz_uint16*)(p) +static MZ_FORCEINLINE void tdefl_find_match(tdefl_compressor *d, mz_uint lookahead_pos, mz_uint max_dist, mz_uint max_match_len, mz_uint *pMatch_dist, mz_uint *pMatch_len) +{ + mz_uint dist, pos = lookahead_pos & TDEFL_LZ_DICT_SIZE_MASK, match_len = *pMatch_len, probe_pos = pos, next_probe_pos, probe_len; + mz_uint num_probes_left = d->m_max_probes[match_len >= 32]; + const mz_uint16 *s = (const mz_uint16*)(d->m_dict + pos), *p, *q; + mz_uint16 c01 = TDEFL_READ_UNALIGNED_WORD(&d->m_dict[pos + match_len - 1]), s01 = TDEFL_READ_UNALIGNED_WORD(s); + MZ_ASSERT(max_match_len <= TDEFL_MAX_MATCH_LEN); if (max_match_len <= match_len) return; + for ( ; ; ) + { + for ( ; ; ) + { + if (--num_probes_left == 0) return; + #define TDEFL_PROBE \ + next_probe_pos = d->m_next[probe_pos]; \ + if ((!next_probe_pos) || ((dist = (mz_uint16)(lookahead_pos - next_probe_pos)) > max_dist)) return; \ + probe_pos = next_probe_pos & TDEFL_LZ_DICT_SIZE_MASK; \ + if (TDEFL_READ_UNALIGNED_WORD(&d->m_dict[probe_pos + match_len - 1]) == c01) break; + TDEFL_PROBE; TDEFL_PROBE; TDEFL_PROBE; + } + if (!dist) break; q = (const mz_uint16*)(d->m_dict + probe_pos); if (TDEFL_READ_UNALIGNED_WORD(q) != s01) continue; p = s; probe_len = 32; + do { } while ( (TDEFL_READ_UNALIGNED_WORD(++p) == TDEFL_READ_UNALIGNED_WORD(++q)) && (TDEFL_READ_UNALIGNED_WORD(++p) == TDEFL_READ_UNALIGNED_WORD(++q)) && + (TDEFL_READ_UNALIGNED_WORD(++p) == TDEFL_READ_UNALIGNED_WORD(++q)) && (TDEFL_READ_UNALIGNED_WORD(++p) == TDEFL_READ_UNALIGNED_WORD(++q)) && (--probe_len > 0) ); + if (!probe_len) + { + *pMatch_dist = dist; *pMatch_len = MZ_MIN(max_match_len, TDEFL_MAX_MATCH_LEN); break; + } + else if ((probe_len = ((mz_uint)(p - s) * 2) + (mz_uint)(*(const mz_uint8*)p == *(const mz_uint8*)q)) > match_len) + { + *pMatch_dist = dist; if ((*pMatch_len = match_len = MZ_MIN(max_match_len, probe_len)) == max_match_len) break; + c01 = TDEFL_READ_UNALIGNED_WORD(&d->m_dict[pos + match_len - 1]); + } + } +} +#else +static MZ_FORCEINLINE void tdefl_find_match(tdefl_compressor *d, mz_uint lookahead_pos, mz_uint max_dist, mz_uint max_match_len, mz_uint *pMatch_dist, mz_uint *pMatch_len) +{ + mz_uint dist, pos = lookahead_pos & TDEFL_LZ_DICT_SIZE_MASK, match_len = *pMatch_len, probe_pos = pos, next_probe_pos, probe_len; + mz_uint num_probes_left = d->m_max_probes[match_len >= 32]; + const mz_uint8 *s = d->m_dict + pos, *p, *q; + mz_uint8 c0 = d->m_dict[pos + match_len], c1 = d->m_dict[pos + match_len - 1]; + MZ_ASSERT(max_match_len <= TDEFL_MAX_MATCH_LEN); if (max_match_len <= match_len) return; + for ( ; ; ) + { + for ( ; ; ) + { + if (--num_probes_left == 0) return; + #define TDEFL_PROBE \ + next_probe_pos = d->m_next[probe_pos]; \ + if ((!next_probe_pos) || ((dist = (mz_uint16)(lookahead_pos - next_probe_pos)) > max_dist)) return; \ + probe_pos = next_probe_pos & TDEFL_LZ_DICT_SIZE_MASK; \ + if ((d->m_dict[probe_pos + match_len] == c0) && (d->m_dict[probe_pos + match_len - 1] == c1)) break; + TDEFL_PROBE; TDEFL_PROBE; TDEFL_PROBE; + } + if (!dist) break; p = s; q = d->m_dict + probe_pos; for (probe_len = 0; probe_len < max_match_len; probe_len++) if (*p++ != *q++) break; + if (probe_len > match_len) + { + *pMatch_dist = dist; if ((*pMatch_len = match_len = probe_len) == max_match_len) return; + c0 = d->m_dict[pos + match_len]; c1 = d->m_dict[pos + match_len - 1]; + } + } +} +#endif // #if MINIZ_USE_UNALIGNED_LOADS_AND_STORES + +#if MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN +static mz_bool tdefl_compress_fast(tdefl_compressor *d) +{ + // Faster, minimally featured LZRW1-style match+parse loop with better register utilization. Intended for applications where raw throughput is valued more highly than ratio. + mz_uint lookahead_pos = d->m_lookahead_pos, lookahead_size = d->m_lookahead_size, dict_size = d->m_dict_size, total_lz_bytes = d->m_total_lz_bytes, num_flags_left = d->m_num_flags_left; + mz_uint8 *pLZ_code_buf = d->m_pLZ_code_buf, *pLZ_flags = d->m_pLZ_flags; + mz_uint cur_pos = lookahead_pos & TDEFL_LZ_DICT_SIZE_MASK; + + while ((d->m_src_buf_left) || ((d->m_flush) && (lookahead_size))) + { + const mz_uint TDEFL_COMP_FAST_LOOKAHEAD_SIZE = 4096; + mz_uint dst_pos = (lookahead_pos + lookahead_size) & TDEFL_LZ_DICT_SIZE_MASK; + mz_uint num_bytes_to_process = (mz_uint)MZ_MIN(d->m_src_buf_left, TDEFL_COMP_FAST_LOOKAHEAD_SIZE - lookahead_size); + d->m_src_buf_left -= num_bytes_to_process; + lookahead_size += num_bytes_to_process; + + while (num_bytes_to_process) + { + mz_uint32 n = MZ_MIN(TDEFL_LZ_DICT_SIZE - dst_pos, num_bytes_to_process); + memcpy(d->m_dict + dst_pos, d->m_pSrc, n); + if (dst_pos < (TDEFL_MAX_MATCH_LEN - 1)) + memcpy(d->m_dict + TDEFL_LZ_DICT_SIZE + dst_pos, d->m_pSrc, MZ_MIN(n, (TDEFL_MAX_MATCH_LEN - 1) - dst_pos)); + d->m_pSrc += n; + dst_pos = (dst_pos + n) & TDEFL_LZ_DICT_SIZE_MASK; + num_bytes_to_process -= n; + } + + dict_size = MZ_MIN(TDEFL_LZ_DICT_SIZE - lookahead_size, dict_size); + if ((!d->m_flush) && (lookahead_size < TDEFL_COMP_FAST_LOOKAHEAD_SIZE)) break; + + while (lookahead_size >= 4) + { + mz_uint cur_match_dist, cur_match_len = 1; + mz_uint8 *pCur_dict = d->m_dict + cur_pos; + mz_uint first_trigram = (*(const mz_uint32 *)pCur_dict) & 0xFFFFFF; + mz_uint hash = (first_trigram ^ (first_trigram >> (24 - (TDEFL_LZ_HASH_BITS - 8)))) & TDEFL_LEVEL1_HASH_SIZE_MASK; + mz_uint probe_pos = d->m_hash[hash]; + d->m_hash[hash] = (mz_uint16)lookahead_pos; + + if (((cur_match_dist = (mz_uint16)(lookahead_pos - probe_pos)) <= dict_size) && ((*(const mz_uint32 *)(d->m_dict + (probe_pos &= TDEFL_LZ_DICT_SIZE_MASK)) & 0xFFFFFF) == first_trigram)) + { + const mz_uint16 *p = (const mz_uint16 *)pCur_dict; + const mz_uint16 *q = (const mz_uint16 *)(d->m_dict + probe_pos); + mz_uint32 probe_len = 32; + do { } while ( (TDEFL_READ_UNALIGNED_WORD(++p) == TDEFL_READ_UNALIGNED_WORD(++q)) && (TDEFL_READ_UNALIGNED_WORD(++p) == TDEFL_READ_UNALIGNED_WORD(++q)) && + (TDEFL_READ_UNALIGNED_WORD(++p) == TDEFL_READ_UNALIGNED_WORD(++q)) && (TDEFL_READ_UNALIGNED_WORD(++p) == TDEFL_READ_UNALIGNED_WORD(++q)) && (--probe_len > 0) ); + cur_match_len = ((mz_uint)(p - (const mz_uint16 *)pCur_dict) * 2) + (mz_uint)(*(const mz_uint8 *)p == *(const mz_uint8 *)q); + if (!probe_len) + cur_match_len = cur_match_dist ? TDEFL_MAX_MATCH_LEN : 0; + + if ((cur_match_len < TDEFL_MIN_MATCH_LEN) || ((cur_match_len == TDEFL_MIN_MATCH_LEN) && (cur_match_dist >= 8U*1024U))) + { + cur_match_len = 1; + *pLZ_code_buf++ = (mz_uint8)first_trigram; + *pLZ_flags = (mz_uint8)(*pLZ_flags >> 1); + d->m_huff_count[0][(mz_uint8)first_trigram]++; + } + else + { + mz_uint32 s0, s1; + cur_match_len = MZ_MIN(cur_match_len, lookahead_size); + + MZ_ASSERT((cur_match_len >= TDEFL_MIN_MATCH_LEN) && (cur_match_dist >= 1) && (cur_match_dist <= TDEFL_LZ_DICT_SIZE)); + + cur_match_dist--; + + pLZ_code_buf[0] = (mz_uint8)(cur_match_len - TDEFL_MIN_MATCH_LEN); + *(mz_uint16 *)(&pLZ_code_buf[1]) = (mz_uint16)cur_match_dist; + pLZ_code_buf += 3; + *pLZ_flags = (mz_uint8)((*pLZ_flags >> 1) | 0x80); + + s0 = s_tdefl_small_dist_sym[cur_match_dist & 511]; + s1 = s_tdefl_large_dist_sym[cur_match_dist >> 8]; + d->m_huff_count[1][(cur_match_dist < 512) ? s0 : s1]++; + + d->m_huff_count[0][s_tdefl_len_sym[cur_match_len - TDEFL_MIN_MATCH_LEN]]++; + } + } + else + { + *pLZ_code_buf++ = (mz_uint8)first_trigram; + *pLZ_flags = (mz_uint8)(*pLZ_flags >> 1); + d->m_huff_count[0][(mz_uint8)first_trigram]++; + } + + if (--num_flags_left == 0) { num_flags_left = 8; pLZ_flags = pLZ_code_buf++; } + + total_lz_bytes += cur_match_len; + lookahead_pos += cur_match_len; + dict_size = MZ_MIN(dict_size + cur_match_len, TDEFL_LZ_DICT_SIZE); + cur_pos = (cur_pos + cur_match_len) & TDEFL_LZ_DICT_SIZE_MASK; + MZ_ASSERT(lookahead_size >= cur_match_len); + lookahead_size -= cur_match_len; + + if (pLZ_code_buf > &d->m_lz_code_buf[TDEFL_LZ_CODE_BUF_SIZE - 8]) + { + int n; + d->m_lookahead_pos = lookahead_pos; d->m_lookahead_size = lookahead_size; d->m_dict_size = dict_size; + d->m_total_lz_bytes = total_lz_bytes; d->m_pLZ_code_buf = pLZ_code_buf; d->m_pLZ_flags = pLZ_flags; d->m_num_flags_left = num_flags_left; + if ((n = tdefl_flush_block(d, 0)) != 0) + return (n < 0) ? MZ_FALSE : MZ_TRUE; + total_lz_bytes = d->m_total_lz_bytes; pLZ_code_buf = d->m_pLZ_code_buf; pLZ_flags = d->m_pLZ_flags; num_flags_left = d->m_num_flags_left; + } + } + + while (lookahead_size) + { + mz_uint8 lit = d->m_dict[cur_pos]; + + total_lz_bytes++; + *pLZ_code_buf++ = lit; + *pLZ_flags = (mz_uint8)(*pLZ_flags >> 1); + if (--num_flags_left == 0) { num_flags_left = 8; pLZ_flags = pLZ_code_buf++; } + + d->m_huff_count[0][lit]++; + + lookahead_pos++; + dict_size = MZ_MIN(dict_size + 1, TDEFL_LZ_DICT_SIZE); + cur_pos = (cur_pos + 1) & TDEFL_LZ_DICT_SIZE_MASK; + lookahead_size--; + + if (pLZ_code_buf > &d->m_lz_code_buf[TDEFL_LZ_CODE_BUF_SIZE - 8]) + { + int n; + d->m_lookahead_pos = lookahead_pos; d->m_lookahead_size = lookahead_size; d->m_dict_size = dict_size; + d->m_total_lz_bytes = total_lz_bytes; d->m_pLZ_code_buf = pLZ_code_buf; d->m_pLZ_flags = pLZ_flags; d->m_num_flags_left = num_flags_left; + if ((n = tdefl_flush_block(d, 0)) != 0) + return (n < 0) ? MZ_FALSE : MZ_TRUE; + total_lz_bytes = d->m_total_lz_bytes; pLZ_code_buf = d->m_pLZ_code_buf; pLZ_flags = d->m_pLZ_flags; num_flags_left = d->m_num_flags_left; + } + } + } + + d->m_lookahead_pos = lookahead_pos; d->m_lookahead_size = lookahead_size; d->m_dict_size = dict_size; + d->m_total_lz_bytes = total_lz_bytes; d->m_pLZ_code_buf = pLZ_code_buf; d->m_pLZ_flags = pLZ_flags; d->m_num_flags_left = num_flags_left; + return MZ_TRUE; +} +#endif // MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN + +static MZ_FORCEINLINE void tdefl_record_literal(tdefl_compressor *d, mz_uint8 lit) +{ + d->m_total_lz_bytes++; + *d->m_pLZ_code_buf++ = lit; + *d->m_pLZ_flags = (mz_uint8)(*d->m_pLZ_flags >> 1); if (--d->m_num_flags_left == 0) { d->m_num_flags_left = 8; d->m_pLZ_flags = d->m_pLZ_code_buf++; } + d->m_huff_count[0][lit]++; +} + +static MZ_FORCEINLINE void tdefl_record_match(tdefl_compressor *d, mz_uint match_len, mz_uint match_dist) +{ + mz_uint32 s0, s1; + + MZ_ASSERT((match_len >= TDEFL_MIN_MATCH_LEN) && (match_dist >= 1) && (match_dist <= TDEFL_LZ_DICT_SIZE)); + + d->m_total_lz_bytes += match_len; + + d->m_pLZ_code_buf[0] = (mz_uint8)(match_len - TDEFL_MIN_MATCH_LEN); + + match_dist -= 1; + d->m_pLZ_code_buf[1] = (mz_uint8)(match_dist & 0xFF); + d->m_pLZ_code_buf[2] = (mz_uint8)(match_dist >> 8); d->m_pLZ_code_buf += 3; + + *d->m_pLZ_flags = (mz_uint8)((*d->m_pLZ_flags >> 1) | 0x80); if (--d->m_num_flags_left == 0) { d->m_num_flags_left = 8; d->m_pLZ_flags = d->m_pLZ_code_buf++; } + + s0 = s_tdefl_small_dist_sym[match_dist & 511]; s1 = s_tdefl_large_dist_sym[(match_dist >> 8) & 127]; + d->m_huff_count[1][(match_dist < 512) ? s0 : s1]++; + + if (match_len >= TDEFL_MIN_MATCH_LEN) d->m_huff_count[0][s_tdefl_len_sym[match_len - TDEFL_MIN_MATCH_LEN]]++; +} + +static mz_bool tdefl_compress_normal(tdefl_compressor *d) +{ + const mz_uint8 *pSrc = d->m_pSrc; size_t src_buf_left = d->m_src_buf_left; + tdefl_flush flush = d->m_flush; + + while ((src_buf_left) || ((flush) && (d->m_lookahead_size))) + { + mz_uint len_to_move, cur_match_dist, cur_match_len, cur_pos; + // Update dictionary and hash chains. Keeps the lookahead size equal to TDEFL_MAX_MATCH_LEN. + if ((d->m_lookahead_size + d->m_dict_size) >= (TDEFL_MIN_MATCH_LEN - 1)) + { + mz_uint dst_pos = (d->m_lookahead_pos + d->m_lookahead_size) & TDEFL_LZ_DICT_SIZE_MASK, ins_pos = d->m_lookahead_pos + d->m_lookahead_size - 2; + mz_uint hash = (d->m_dict[ins_pos & TDEFL_LZ_DICT_SIZE_MASK] << TDEFL_LZ_HASH_SHIFT) ^ d->m_dict[(ins_pos + 1) & TDEFL_LZ_DICT_SIZE_MASK]; + mz_uint num_bytes_to_process = (mz_uint)MZ_MIN(src_buf_left, TDEFL_MAX_MATCH_LEN - d->m_lookahead_size); + const mz_uint8 *pSrc_end = pSrc + num_bytes_to_process; + src_buf_left -= num_bytes_to_process; + d->m_lookahead_size += num_bytes_to_process; + while (pSrc != pSrc_end) + { + mz_uint8 c = *pSrc++; d->m_dict[dst_pos] = c; if (dst_pos < (TDEFL_MAX_MATCH_LEN - 1)) d->m_dict[TDEFL_LZ_DICT_SIZE + dst_pos] = c; + hash = ((hash << TDEFL_LZ_HASH_SHIFT) ^ c) & (TDEFL_LZ_HASH_SIZE - 1); + d->m_next[ins_pos & TDEFL_LZ_DICT_SIZE_MASK] = d->m_hash[hash]; d->m_hash[hash] = (mz_uint16)(ins_pos); + dst_pos = (dst_pos + 1) & TDEFL_LZ_DICT_SIZE_MASK; ins_pos++; + } + } + else + { + while ((src_buf_left) && (d->m_lookahead_size < TDEFL_MAX_MATCH_LEN)) + { + mz_uint8 c = *pSrc++; + mz_uint dst_pos = (d->m_lookahead_pos + d->m_lookahead_size) & TDEFL_LZ_DICT_SIZE_MASK; + src_buf_left--; + d->m_dict[dst_pos] = c; + if (dst_pos < (TDEFL_MAX_MATCH_LEN - 1)) + d->m_dict[TDEFL_LZ_DICT_SIZE + dst_pos] = c; + if ((++d->m_lookahead_size + d->m_dict_size) >= TDEFL_MIN_MATCH_LEN) + { + mz_uint ins_pos = d->m_lookahead_pos + (d->m_lookahead_size - 1) - 2; + mz_uint hash = ((d->m_dict[ins_pos & TDEFL_LZ_DICT_SIZE_MASK] << (TDEFL_LZ_HASH_SHIFT * 2)) ^ (d->m_dict[(ins_pos + 1) & TDEFL_LZ_DICT_SIZE_MASK] << TDEFL_LZ_HASH_SHIFT) ^ c) & (TDEFL_LZ_HASH_SIZE - 1); + d->m_next[ins_pos & TDEFL_LZ_DICT_SIZE_MASK] = d->m_hash[hash]; d->m_hash[hash] = (mz_uint16)(ins_pos); + } + } + } + d->m_dict_size = MZ_MIN(TDEFL_LZ_DICT_SIZE - d->m_lookahead_size, d->m_dict_size); + if ((!flush) && (d->m_lookahead_size < TDEFL_MAX_MATCH_LEN)) + break; + + // Simple lazy/greedy parsing state machine. + len_to_move = 1; cur_match_dist = 0; cur_match_len = d->m_saved_match_len ? d->m_saved_match_len : (TDEFL_MIN_MATCH_LEN - 1); cur_pos = d->m_lookahead_pos & TDEFL_LZ_DICT_SIZE_MASK; + if (d->m_flags & (TDEFL_RLE_MATCHES | TDEFL_FORCE_ALL_RAW_BLOCKS)) + { + if ((d->m_dict_size) && (!(d->m_flags & TDEFL_FORCE_ALL_RAW_BLOCKS))) + { + mz_uint8 c = d->m_dict[(cur_pos - 1) & TDEFL_LZ_DICT_SIZE_MASK]; + cur_match_len = 0; while (cur_match_len < d->m_lookahead_size) { if (d->m_dict[cur_pos + cur_match_len] != c) break; cur_match_len++; } + if (cur_match_len < TDEFL_MIN_MATCH_LEN) cur_match_len = 0; else cur_match_dist = 1; + } + } + else + { + tdefl_find_match(d, d->m_lookahead_pos, d->m_dict_size, d->m_lookahead_size, &cur_match_dist, &cur_match_len); + } + if (((cur_match_len == TDEFL_MIN_MATCH_LEN) && (cur_match_dist >= 8U*1024U)) || (cur_pos == cur_match_dist) || ((d->m_flags & TDEFL_FILTER_MATCHES) && (cur_match_len <= 5))) + { + cur_match_dist = cur_match_len = 0; + } + if (d->m_saved_match_len) + { + if (cur_match_len > d->m_saved_match_len) + { + tdefl_record_literal(d, (mz_uint8)d->m_saved_lit); + if (cur_match_len >= 128) + { + tdefl_record_match(d, cur_match_len, cur_match_dist); + d->m_saved_match_len = 0; len_to_move = cur_match_len; + } + else + { + d->m_saved_lit = d->m_dict[cur_pos]; d->m_saved_match_dist = cur_match_dist; d->m_saved_match_len = cur_match_len; + } + } + else + { + tdefl_record_match(d, d->m_saved_match_len, d->m_saved_match_dist); + len_to_move = d->m_saved_match_len - 1; d->m_saved_match_len = 0; + } + } + else if (!cur_match_dist) + tdefl_record_literal(d, d->m_dict[MZ_MIN(cur_pos, sizeof(d->m_dict) - 1)]); + else if ((d->m_greedy_parsing) || (d->m_flags & TDEFL_RLE_MATCHES) || (cur_match_len >= 128)) + { + tdefl_record_match(d, cur_match_len, cur_match_dist); + len_to_move = cur_match_len; + } + else + { + d->m_saved_lit = d->m_dict[MZ_MIN(cur_pos, sizeof(d->m_dict) - 1)]; d->m_saved_match_dist = cur_match_dist; d->m_saved_match_len = cur_match_len; + } + // Move the lookahead forward by len_to_move bytes. + d->m_lookahead_pos += len_to_move; + MZ_ASSERT(d->m_lookahead_size >= len_to_move); + d->m_lookahead_size -= len_to_move; + d->m_dict_size = MZ_MIN(d->m_dict_size + len_to_move, TDEFL_LZ_DICT_SIZE); + // Check if it's time to flush the current LZ codes to the internal output buffer. + if ( (d->m_pLZ_code_buf > &d->m_lz_code_buf[TDEFL_LZ_CODE_BUF_SIZE - 8]) || + ( (d->m_total_lz_bytes > 31*1024) && (((((mz_uint)(d->m_pLZ_code_buf - d->m_lz_code_buf) * 115) >> 7) >= d->m_total_lz_bytes) || (d->m_flags & TDEFL_FORCE_ALL_RAW_BLOCKS))) ) + { + int n; + d->m_pSrc = pSrc; d->m_src_buf_left = src_buf_left; + if ((n = tdefl_flush_block(d, 0)) != 0) + return (n < 0) ? MZ_FALSE : MZ_TRUE; + } + } + + d->m_pSrc = pSrc; d->m_src_buf_left = src_buf_left; + return MZ_TRUE; +} + +static tdefl_status tdefl_flush_output_buffer(tdefl_compressor *d) +{ + if (d->m_pIn_buf_size) + { + *d->m_pIn_buf_size = d->m_pSrc - (const mz_uint8 *)d->m_pIn_buf; + } + + if (d->m_pOut_buf_size) + { + size_t n = MZ_MIN(*d->m_pOut_buf_size - d->m_out_buf_ofs, d->m_output_flush_remaining); + memcpy((mz_uint8 *)d->m_pOut_buf + d->m_out_buf_ofs, d->m_output_buf + d->m_output_flush_ofs, n); + d->m_output_flush_ofs += (mz_uint)n; + d->m_output_flush_remaining -= (mz_uint)n; + d->m_out_buf_ofs += n; + + *d->m_pOut_buf_size = d->m_out_buf_ofs; + } + + return (d->m_finished && !d->m_output_flush_remaining) ? TDEFL_STATUS_DONE : TDEFL_STATUS_OKAY; +} + +tdefl_status tdefl_compress(tdefl_compressor *d, const void *pIn_buf, size_t *pIn_buf_size, void *pOut_buf, size_t *pOut_buf_size, tdefl_flush flush) +{ + if (!d) + { + if (pIn_buf_size) *pIn_buf_size = 0; + if (pOut_buf_size) *pOut_buf_size = 0; + return TDEFL_STATUS_BAD_PARAM; + } + + d->m_pIn_buf = pIn_buf; d->m_pIn_buf_size = pIn_buf_size; + d->m_pOut_buf = pOut_buf; d->m_pOut_buf_size = pOut_buf_size; + d->m_pSrc = (const mz_uint8 *)(pIn_buf); d->m_src_buf_left = pIn_buf_size ? *pIn_buf_size : 0; + d->m_out_buf_ofs = 0; + d->m_flush = flush; + + if ( ((d->m_pPut_buf_func != NULL) == ((pOut_buf != NULL) || (pOut_buf_size != NULL))) || (d->m_prev_return_status != TDEFL_STATUS_OKAY) || + (d->m_wants_to_finish && (flush != TDEFL_FINISH)) || (pIn_buf_size && *pIn_buf_size && !pIn_buf) || (pOut_buf_size && *pOut_buf_size && !pOut_buf) ) + { + if (pIn_buf_size) *pIn_buf_size = 0; + if (pOut_buf_size) *pOut_buf_size = 0; + return (d->m_prev_return_status = TDEFL_STATUS_BAD_PARAM); + } + d->m_wants_to_finish |= (flush == TDEFL_FINISH); + + if ((d->m_output_flush_remaining) || (d->m_finished)) + return (d->m_prev_return_status = tdefl_flush_output_buffer(d)); + +#if MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN + if (((d->m_flags & TDEFL_MAX_PROBES_MASK) == 1) && + ((d->m_flags & TDEFL_GREEDY_PARSING_FLAG) != 0) && + ((d->m_flags & (TDEFL_FILTER_MATCHES | TDEFL_FORCE_ALL_RAW_BLOCKS | TDEFL_RLE_MATCHES)) == 0)) + { + if (!tdefl_compress_fast(d)) + return d->m_prev_return_status; + } + else +#endif // #if MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN + { + if (!tdefl_compress_normal(d)) + return d->m_prev_return_status; + } + + if ((d->m_flags & (TDEFL_WRITE_ZLIB_HEADER | TDEFL_COMPUTE_ADLER32)) && (pIn_buf)) + d->m_adler32 = (mz_uint32)mz_adler32(d->m_adler32, (const mz_uint8 *)pIn_buf, d->m_pSrc - (const mz_uint8 *)pIn_buf); + + if ((flush) && (!d->m_lookahead_size) && (!d->m_src_buf_left) && (!d->m_output_flush_remaining)) + { + if (tdefl_flush_block(d, flush) < 0) + return d->m_prev_return_status; + d->m_finished = (flush == TDEFL_FINISH); + if (flush == TDEFL_FULL_FLUSH) { MZ_CLEAR_OBJ(d->m_hash); MZ_CLEAR_OBJ(d->m_next); d->m_dict_size = 0; } + } + + return (d->m_prev_return_status = tdefl_flush_output_buffer(d)); +} + +tdefl_status tdefl_compress_buffer(tdefl_compressor *d, const void *pIn_buf, size_t in_buf_size, tdefl_flush flush) +{ + MZ_ASSERT(d->m_pPut_buf_func); return tdefl_compress(d, pIn_buf, &in_buf_size, NULL, NULL, flush); +} + +tdefl_status tdefl_init(tdefl_compressor *d, tdefl_put_buf_func_ptr pPut_buf_func, void *pPut_buf_user, int flags) +{ + d->m_pPut_buf_func = pPut_buf_func; d->m_pPut_buf_user = pPut_buf_user; + d->m_flags = (mz_uint)(flags); d->m_max_probes[0] = 1 + ((flags & 0xFFF) + 2) / 3; d->m_greedy_parsing = (flags & TDEFL_GREEDY_PARSING_FLAG) != 0; + d->m_max_probes[1] = 1 + (((flags & 0xFFF) >> 2) + 2) / 3; + if (!(flags & TDEFL_NONDETERMINISTIC_PARSING_FLAG)) MZ_CLEAR_OBJ(d->m_hash); + d->m_lookahead_pos = d->m_lookahead_size = d->m_dict_size = d->m_total_lz_bytes = d->m_lz_code_buf_dict_pos = d->m_bits_in = 0; + d->m_output_flush_ofs = d->m_output_flush_remaining = d->m_finished = d->m_block_index = d->m_bit_buffer = d->m_wants_to_finish = 0; + d->m_pLZ_code_buf = d->m_lz_code_buf + 1; d->m_pLZ_flags = d->m_lz_code_buf; d->m_num_flags_left = 8; + d->m_pOutput_buf = d->m_output_buf; d->m_pOutput_buf_end = d->m_output_buf; d->m_prev_return_status = TDEFL_STATUS_OKAY; + d->m_saved_match_dist = d->m_saved_match_len = d->m_saved_lit = 0; d->m_adler32 = 1; + d->m_pIn_buf = NULL; d->m_pOut_buf = NULL; + d->m_pIn_buf_size = NULL; d->m_pOut_buf_size = NULL; + d->m_flush = TDEFL_NO_FLUSH; d->m_pSrc = NULL; d->m_src_buf_left = 0; d->m_out_buf_ofs = 0; + memset(&d->m_huff_count[0][0], 0, sizeof(d->m_huff_count[0][0]) * TDEFL_MAX_HUFF_SYMBOLS_0); + memset(&d->m_huff_count[1][0], 0, sizeof(d->m_huff_count[1][0]) * TDEFL_MAX_HUFF_SYMBOLS_1); + return TDEFL_STATUS_OKAY; +} + +tdefl_status tdefl_get_prev_return_status(tdefl_compressor *d) +{ + return d->m_prev_return_status; +} + +mz_uint32 tdefl_get_adler32(tdefl_compressor *d) +{ + return d->m_adler32; +} + +mz_bool tdefl_compress_mem_to_output(const void *pBuf, size_t buf_len, tdefl_put_buf_func_ptr pPut_buf_func, void *pPut_buf_user, int flags) +{ + tdefl_compressor *pComp; mz_bool succeeded; if (((buf_len) && (!pBuf)) || (!pPut_buf_func)) return MZ_FALSE; + pComp = (tdefl_compressor*)MZ_MALLOC(sizeof(tdefl_compressor)); if (!pComp) return MZ_FALSE; + succeeded = (tdefl_init(pComp, pPut_buf_func, pPut_buf_user, flags) == TDEFL_STATUS_OKAY); + succeeded = succeeded && (tdefl_compress_buffer(pComp, pBuf, buf_len, TDEFL_FINISH) == TDEFL_STATUS_DONE); + MZ_FREE(pComp); return succeeded; +} + +typedef struct +{ + size_t m_size, m_capacity; + mz_uint8 *m_pBuf; + mz_bool m_expandable; +} tdefl_output_buffer; + +static mz_bool tdefl_output_buffer_putter(const void *pBuf, int len, void *pUser) +{ + tdefl_output_buffer *p = (tdefl_output_buffer *)pUser; + size_t new_size = p->m_size + len; + if (new_size > p->m_capacity) + { + size_t new_capacity = p->m_capacity; mz_uint8 *pNew_buf; if (!p->m_expandable) return MZ_FALSE; + do { new_capacity = MZ_MAX(128U, new_capacity << 1U); } while (new_size > new_capacity); + pNew_buf = (mz_uint8*)MZ_REALLOC(p->m_pBuf, new_capacity); if (!pNew_buf) return MZ_FALSE; + p->m_pBuf = pNew_buf; p->m_capacity = new_capacity; + } + memcpy((mz_uint8*)p->m_pBuf + p->m_size, pBuf, len); p->m_size = new_size; + return MZ_TRUE; +} + +void *tdefl_compress_mem_to_heap(const void *pSrc_buf, size_t src_buf_len, size_t *pOut_len, int flags) +{ + tdefl_output_buffer out_buf; MZ_CLEAR_OBJ(out_buf); + if (!pOut_len) return MZ_FALSE; else *pOut_len = 0; + out_buf.m_expandable = MZ_TRUE; + if (!tdefl_compress_mem_to_output(pSrc_buf, src_buf_len, tdefl_output_buffer_putter, &out_buf, flags)) return NULL; + *pOut_len = out_buf.m_size; return out_buf.m_pBuf; +} + +size_t tdefl_compress_mem_to_mem(void *pOut_buf, size_t out_buf_len, const void *pSrc_buf, size_t src_buf_len, int flags) +{ + tdefl_output_buffer out_buf; MZ_CLEAR_OBJ(out_buf); + if (!pOut_buf) return 0; + out_buf.m_pBuf = (mz_uint8*)pOut_buf; out_buf.m_capacity = out_buf_len; + if (!tdefl_compress_mem_to_output(pSrc_buf, src_buf_len, tdefl_output_buffer_putter, &out_buf, flags)) return 0; + return out_buf.m_size; +} + +#ifndef MINIZ_NO_ZLIB_APIS +static const mz_uint s_tdefl_num_probes[11] = { 0, 1, 6, 32, 16, 32, 128, 256, 512, 768, 1500 }; + +// level may actually range from [0,10] (10 is a "hidden" max level, where we want a bit more compression and it's fine if throughput to fall off a cliff on some files). +mz_uint tdefl_create_comp_flags_from_zip_params(int level, int window_bits, int strategy) +{ + mz_uint comp_flags = s_tdefl_num_probes[(level >= 0) ? MZ_MIN(10, level) : MZ_DEFAULT_LEVEL] | ((level <= 3) ? TDEFL_GREEDY_PARSING_FLAG : 0); + if (window_bits > 0) comp_flags |= TDEFL_WRITE_ZLIB_HEADER; + + if (!level) comp_flags |= TDEFL_FORCE_ALL_RAW_BLOCKS; + else if (strategy == MZ_FILTERED) comp_flags |= TDEFL_FILTER_MATCHES; + else if (strategy == MZ_HUFFMAN_ONLY) comp_flags &= ~TDEFL_MAX_PROBES_MASK; + else if (strategy == MZ_FIXED) comp_flags |= TDEFL_FORCE_ALL_STATIC_BLOCKS; + else if (strategy == MZ_RLE) comp_flags |= TDEFL_RLE_MATCHES; + + return comp_flags; +} +#endif //MINIZ_NO_ZLIB_APIS + +#ifdef _MSC_VER +#pragma warning (push) +#pragma warning (disable:4204) // nonstandard extension used : non-constant aggregate initializer (also supported by GNU C and C99, so no big deal) +#endif + +// Simple PNG writer function by Alex Evans, 2011. Released into the public domain: https://gist.github.com/908299, more context at +// http://altdevblogaday.org/2011/04/06/a-smaller-jpg-encoder/. +// This is actually a modification of Alex's original code so PNG files generated by this function pass pngcheck. +void *tdefl_write_image_to_png_file_in_memory_ex(const void *pImage, int w, int h, int num_chans, size_t *pLen_out, mz_uint level, mz_bool flip) +{ + // Using a local copy of this array here in case MINIZ_NO_ZLIB_APIS was defined. + static const mz_uint s_tdefl_png_num_probes[11] = { 0, 1, 6, 32, 16, 32, 128, 256, 512, 768, 1500 }; + tdefl_compressor *pComp = (tdefl_compressor *)MZ_MALLOC(sizeof(tdefl_compressor)); tdefl_output_buffer out_buf; int i, bpl = w * num_chans, y, z; mz_uint32 c; *pLen_out = 0; + if (!pComp) return NULL; + MZ_CLEAR_OBJ(out_buf); out_buf.m_expandable = MZ_TRUE; out_buf.m_capacity = 57+MZ_MAX(64, (1+bpl)*h); if (NULL == (out_buf.m_pBuf = (mz_uint8*)MZ_MALLOC(out_buf.m_capacity))) { MZ_FREE(pComp); return NULL; } + // write dummy header + for (z = 41; z; --z) tdefl_output_buffer_putter(&z, 1, &out_buf); + // compress image data + tdefl_init(pComp, tdefl_output_buffer_putter, &out_buf, s_tdefl_png_num_probes[MZ_MIN(10, level)] | TDEFL_WRITE_ZLIB_HEADER); + for (y = 0; y < h; ++y) { tdefl_compress_buffer(pComp, &z, 1, TDEFL_NO_FLUSH); tdefl_compress_buffer(pComp, (mz_uint8*)pImage + (flip ? (h - 1 - y) : y) * bpl, bpl, TDEFL_NO_FLUSH); } + if (tdefl_compress_buffer(pComp, NULL, 0, TDEFL_FINISH) != TDEFL_STATUS_DONE) { MZ_FREE(pComp); MZ_FREE(out_buf.m_pBuf); return NULL; } + // write real header + *pLen_out = out_buf.m_size-41; + { + static const mz_uint8 chans[] = {0x00, 0x00, 0x04, 0x02, 0x06}; + mz_uint8 pnghdr[41]={0x89,0x50,0x4e,0x47,0x0d,0x0a,0x1a,0x0a,0x00,0x00,0x00,0x0d,0x49,0x48,0x44,0x52, + 0,0,(mz_uint8)(w>>8),(mz_uint8)w,0,0,(mz_uint8)(h>>8),(mz_uint8)h,8,chans[num_chans],0,0,0,0,0,0,0, + (mz_uint8)(*pLen_out>>24),(mz_uint8)(*pLen_out>>16),(mz_uint8)(*pLen_out>>8),(mz_uint8)*pLen_out,0x49,0x44,0x41,0x54}; + c=(mz_uint32)mz_crc32(MZ_CRC32_INIT,pnghdr+12,17); for (i=0; i<4; ++i, c<<=8) ((mz_uint8*)(pnghdr+29))[i]=(mz_uint8)(c>>24); + memcpy(out_buf.m_pBuf, pnghdr, 41); + } + // write footer (IDAT CRC-32, followed by IEND chunk) + if (!tdefl_output_buffer_putter("\0\0\0\0\0\0\0\0\x49\x45\x4e\x44\xae\x42\x60\x82", 16, &out_buf)) { *pLen_out = 0; MZ_FREE(pComp); MZ_FREE(out_buf.m_pBuf); return NULL; } + c = (mz_uint32)mz_crc32(MZ_CRC32_INIT,out_buf.m_pBuf+41-4, *pLen_out+4); for (i=0; i<4; ++i, c<<=8) (out_buf.m_pBuf+out_buf.m_size-16)[i] = (mz_uint8)(c >> 24); + // compute final size of file, grab compressed data buffer and return + *pLen_out += 57; MZ_FREE(pComp); return out_buf.m_pBuf; +} +void *tdefl_write_image_to_png_file_in_memory(const void *pImage, int w, int h, int num_chans, size_t *pLen_out) +{ + // Level 6 corresponds to TDEFL_DEFAULT_MAX_PROBES or MZ_DEFAULT_LEVEL (but we can't depend on MZ_DEFAULT_LEVEL being available in case the zlib API's where #defined out) + return tdefl_write_image_to_png_file_in_memory_ex(pImage, w, h, num_chans, pLen_out, 6, MZ_FALSE); +} + +#ifdef _MSC_VER +#pragma warning (pop) +#endif + +#ifdef __cplusplus +} +#endif + +#endif // MINIZ_HEADER_FILE_ONLY + From fe8755019ce0c01bc67bbe79f9c061c2e26dae0b Mon Sep 17 00:00:00 2001 From: Rich Geldreich Date: Fri, 20 Mar 2020 01:59:07 -0400 Subject: [PATCH 09/16] new files --- basisu_bc7enc.cpp | 1984 +++++++++++++++++++++++++++++++++++++++++++++ basisu_bc7enc.h | 131 +++ 2 files changed, 2115 insertions(+) create mode 100644 basisu_bc7enc.cpp create mode 100644 basisu_bc7enc.h diff --git a/basisu_bc7enc.cpp b/basisu_bc7enc.cpp new file mode 100644 index 0000000..dcec912 --- /dev/null +++ b/basisu_bc7enc.cpp @@ -0,0 +1,1984 @@ +// File: basisu_bc7enc.cpp +// Copyright (C) 2019-2020 Binomial LLC. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +#include "basisu_bc7enc.h" + +#ifdef _DEBUG +#define BC7ENC_CHECK_OVERALL_ERROR 1 +#else +#define BC7ENC_CHECK_OVERALL_ERROR 0 +#endif + +using namespace basist; + +namespace basisu +{ + +// Helpers +static inline color_quad_u8 *color_quad_u8_set_clamped(color_quad_u8 *pRes, int32_t r, int32_t g, int32_t b, int32_t a) { pRes->m_c[0] = (uint8_t)clampi(r, 0, 255); pRes->m_c[1] = (uint8_t)clampi(g, 0, 255); pRes->m_c[2] = (uint8_t)clampi(b, 0, 255); pRes->m_c[3] = (uint8_t)clampi(a, 0, 255); return pRes; } +static inline color_quad_u8 *color_quad_u8_set(color_quad_u8 *pRes, int32_t r, int32_t g, int32_t b, int32_t a) { assert((uint32_t)(r | g | b | a) <= 255); pRes->m_c[0] = (uint8_t)r; pRes->m_c[1] = (uint8_t)g; pRes->m_c[2] = (uint8_t)b; pRes->m_c[3] = (uint8_t)a; return pRes; } +static inline bc7enc_bool color_quad_u8_notequals(const color_quad_u8 *pLHS, const color_quad_u8 *pRHS) { return (pLHS->m_c[0] != pRHS->m_c[0]) || (pLHS->m_c[1] != pRHS->m_c[1]) || (pLHS->m_c[2] != pRHS->m_c[2]) || (pLHS->m_c[3] != pRHS->m_c[3]); } +static inline bc7enc_vec4F*vec4F_set_scalar(bc7enc_vec4F*pV, float x) { pV->m_c[0] = x; pV->m_c[1] = x; pV->m_c[2] = x; pV->m_c[3] = x; return pV; } +static inline bc7enc_vec4F*vec4F_set(bc7enc_vec4F*pV, float x, float y, float z, float w) { pV->m_c[0] = x; pV->m_c[1] = y; pV->m_c[2] = z; pV->m_c[3] = w; return pV; } +static inline bc7enc_vec4F*vec4F_saturate_in_place(bc7enc_vec4F*pV) { pV->m_c[0] = saturate(pV->m_c[0]); pV->m_c[1] = saturate(pV->m_c[1]); pV->m_c[2] = saturate(pV->m_c[2]); pV->m_c[3] = saturate(pV->m_c[3]); return pV; } +static inline bc7enc_vec4F vec4F_saturate(const bc7enc_vec4F*pV) { bc7enc_vec4F res; res.m_c[0] = saturate(pV->m_c[0]); res.m_c[1] = saturate(pV->m_c[1]); res.m_c[2] = saturate(pV->m_c[2]); res.m_c[3] = saturate(pV->m_c[3]); return res; } +static inline bc7enc_vec4F vec4F_from_color(const color_quad_u8 *pC) { bc7enc_vec4F res; vec4F_set(&res, pC->m_c[0], pC->m_c[1], pC->m_c[2], pC->m_c[3]); return res; } +static inline bc7enc_vec4F vec4F_add(const bc7enc_vec4F*pLHS, const bc7enc_vec4F*pRHS) { bc7enc_vec4F res; vec4F_set(&res, pLHS->m_c[0] + pRHS->m_c[0], pLHS->m_c[1] + pRHS->m_c[1], pLHS->m_c[2] + pRHS->m_c[2], pLHS->m_c[3] + pRHS->m_c[3]); return res; } +static inline bc7enc_vec4F vec4F_sub(const bc7enc_vec4F*pLHS, const bc7enc_vec4F*pRHS) { bc7enc_vec4F res; vec4F_set(&res, pLHS->m_c[0] - pRHS->m_c[0], pLHS->m_c[1] - pRHS->m_c[1], pLHS->m_c[2] - pRHS->m_c[2], pLHS->m_c[3] - pRHS->m_c[3]); return res; } +static inline float vec4F_dot(const bc7enc_vec4F*pLHS, const bc7enc_vec4F*pRHS) { return pLHS->m_c[0] * pRHS->m_c[0] + pLHS->m_c[1] * pRHS->m_c[1] + pLHS->m_c[2] * pRHS->m_c[2] + pLHS->m_c[3] * pRHS->m_c[3]; } +static inline bc7enc_vec4F vec4F_mul(const bc7enc_vec4F*pLHS, float s) { bc7enc_vec4F res; vec4F_set(&res, pLHS->m_c[0] * s, pLHS->m_c[1] * s, pLHS->m_c[2] * s, pLHS->m_c[3] * s); return res; } +static inline bc7enc_vec4F* vec4F_normalize_in_place(bc7enc_vec4F*pV) { float s = pV->m_c[0] * pV->m_c[0] + pV->m_c[1] * pV->m_c[1] + pV->m_c[2] * pV->m_c[2] + pV->m_c[3] * pV->m_c[3]; if (s != 0.0f) { s = 1.0f / sqrtf(s); pV->m_c[0] *= s; pV->m_c[1] *= s; pV->m_c[2] *= s; pV->m_c[3] *= s; } return pV; } + +// Precomputed weight constants used during least fit determination. For each entry in g_bc7_weights[]: w * w, (1.0f - w) * w, (1.0f - w) * (1.0f - w), w +const float g_bc7_weights1x[2 * 4] = { 0.000000f, 0.000000f, 1.000000f, 0.000000f, 1.000000f, 0.000000f, 0.000000f, 1.000000f }; + +const float g_bc7_weights2x[4 * 4] = { 0.000000f, 0.000000f, 1.000000f, 0.000000f, 0.107666f, 0.220459f, 0.451416f, 0.328125f, 0.451416f, 0.220459f, 0.107666f, 0.671875f, 1.000000f, 0.000000f, 0.000000f, 1.000000f }; + +const float g_bc7_weights3x[8 * 4] = { 0.000000f, 0.000000f, 1.000000f, 0.000000f, 0.019775f, 0.120850f, 0.738525f, 0.140625f, 0.079102f, 0.202148f, 0.516602f, 0.281250f, 0.177979f, 0.243896f, 0.334229f, 0.421875f, 0.334229f, 0.243896f, 0.177979f, 0.578125f, 0.516602f, 0.202148f, + 0.079102f, 0.718750f, 0.738525f, 0.120850f, 0.019775f, 0.859375f, 1.000000f, 0.000000f, 0.000000f, 1.000000f }; + +const float g_bc7_weights4x[16 * 4] = { 0.000000f, 0.000000f, 1.000000f, 0.000000f, 0.003906f, 0.058594f, 0.878906f, 0.062500f, 0.019775f, 0.120850f, 0.738525f, 0.140625f, 0.041260f, 0.161865f, 0.635010f, 0.203125f, 0.070557f, 0.195068f, 0.539307f, 0.265625f, 0.107666f, 0.220459f, + 0.451416f, 0.328125f, 0.165039f, 0.241211f, 0.352539f, 0.406250f, 0.219727f, 0.249023f, 0.282227f, 0.468750f, 0.282227f, 0.249023f, 0.219727f, 0.531250f, 0.352539f, 0.241211f, 0.165039f, 0.593750f, 0.451416f, 0.220459f, 0.107666f, 0.671875f, 0.539307f, 0.195068f, 0.070557f, 0.734375f, + 0.635010f, 0.161865f, 0.041260f, 0.796875f, 0.738525f, 0.120850f, 0.019775f, 0.859375f, 0.878906f, 0.058594f, 0.003906f, 0.937500f, 1.000000f, 0.000000f, 0.000000f, 1.000000f }; + +const float g_astc_weights4x[16 * 4] = { 0.000000f, 0.000000f, 1.000000f, 0.000000f, 0.003906f, 0.058594f, 0.878906f, 0.062500f, 0.015625f, 0.109375f, 0.765625f, 0.125000f, 0.035156f, 0.152344f, 0.660156f, 0.187500f, 0.070557f, 0.195068f, 0.539307f, 0.265625f, 0.107666f, 0.220459f, + 0.451416f, 0.328125f, 0.152588f, 0.238037f, 0.371338f, 0.390625f, 0.205322f, 0.247803f, 0.299072f, 0.453125f, 0.299072f, 0.247803f, 0.205322f, 0.546875f, 0.371338f, 0.238037f, 0.152588f, 0.609375f, 0.451416f, 0.220459f, 0.107666f, 0.671875f, 0.539307f, 0.195068f, 0.070557f, 0.734375f, + 0.660156f, 0.152344f, 0.035156f, 0.812500f, 0.765625f, 0.109375f, 0.015625f, 0.875000f, 0.878906f, 0.058594f, 0.003906f, 0.937500f, 1.000000f, 0.000000f, 0.000000f, 1.000000f }; + +const float g_astc_weights5x[32 * 4] = { 0.000000f, 0.000000f, 1.000000f, 0.000000f, 0.000977f, 0.030273f, 0.938477f, 0.031250f, 0.003906f, 0.058594f, 0.878906f, 0.062500f, 0.008789f, 0.084961f, 0.821289f, + 0.093750f, 0.015625f, 0.109375f, 0.765625f, 0.125000f, 0.024414f, 0.131836f, 0.711914f, 0.156250f, 0.035156f, 0.152344f, 0.660156f, 0.187500f, 0.047852f, 0.170898f, 0.610352f, 0.218750f, 0.062500f, 0.187500f, + 0.562500f, 0.250000f, 0.079102f, 0.202148f, 0.516602f, 0.281250f, 0.097656f, 0.214844f, 0.472656f, 0.312500f, 0.118164f, 0.225586f, 0.430664f, 0.343750f, 0.140625f, 0.234375f, 0.390625f, 0.375000f, 0.165039f, + 0.241211f, 0.352539f, 0.406250f, 0.191406f, 0.246094f, 0.316406f, 0.437500f, 0.219727f, 0.249023f, 0.282227f, 0.468750f, 0.282227f, 0.249023f, 0.219727f, 0.531250f, 0.316406f, 0.246094f, 0.191406f, 0.562500f, + 0.352539f, 0.241211f, 0.165039f, 0.593750f, 0.390625f, 0.234375f, 0.140625f, 0.625000f, 0.430664f, 0.225586f, 0.118164f, 0.656250f, 0.472656f, 0.214844f, 0.097656f, 0.687500f, 0.516602f, 0.202148f, 0.079102f, + 0.718750f, 0.562500f, 0.187500f, 0.062500f, 0.750000f, 0.610352f, 0.170898f, 0.047852f, 0.781250f, 0.660156f, 0.152344f, 0.035156f, 0.812500f, 0.711914f, 0.131836f, 0.024414f, 0.843750f, 0.765625f, 0.109375f, + 0.015625f, 0.875000f, 0.821289f, 0.084961f, 0.008789f, 0.906250f, 0.878906f, 0.058594f, 0.003906f, 0.937500f, 0.938477f, 0.030273f, 0.000977f, 0.968750f, 1.000000f, 0.000000f, 0.000000f, 1.000000f }; + +const float g_astc_weights_3levelsx[3 * 4] = { + 0.000000f, 0.000000f, 1.000000f, 0.000000f, + .5f * .5f, (1.0f - .5f) * .5f, (1.0f - .5f) * (1.0f - .5f), .5f, + 1.000000f, 0.000000f, 0.000000f, 1.000000f }; + +static endpoint_err g_bc7_mode_1_optimal_endpoints[256][2]; // [c][pbit] +static const uint32_t BC7ENC_MODE_1_OPTIMAL_INDEX = 2; + +static endpoint_err g_astc_4bit_3bit_optimal_endpoints[256]; // [c] +static const uint32_t BC7ENC_ASTC_4BIT_3BIT_OPTIMAL_INDEX = 2; + +static endpoint_err g_astc_4bit_2bit_optimal_endpoints[256]; // [c] +static const uint32_t BC7ENC_ASTC_4BIT_2BIT_OPTIMAL_INDEX = 1; + +static endpoint_err g_astc_range7_2bit_optimal_endpoints[256]; // [c] +static const uint32_t BC7ENC_ASTC_RANGE7_2BIT_OPTIMAL_INDEX = 1; + +static endpoint_err g_astc_range13_4bit_optimal_endpoints[256]; // [c] +static const uint32_t BC7ENC_ASTC_RANGE13_4BIT_OPTIMAL_INDEX = 2; + +static endpoint_err g_astc_range13_2bit_optimal_endpoints[256]; // [c] +static const uint32_t BC7ENC_ASTC_RANGE13_2BIT_OPTIMAL_INDEX = 1; + +static endpoint_err g_astc_range11_5bit_optimal_endpoints[256]; // [c] +static const uint32_t BC7ENC_ASTC_RANGE11_5BIT_OPTIMAL_INDEX = 13; // not 1, which is optimal, because 26 losslessly maps to BC7 4-bit weights + +astc_quant_bin g_astc_sorted_order_unquant[BC7ENC_TOTAL_ASTC_RANGES][256]; // [sorted unquantized order] + +static uint8_t g_astc_nearest_sorted_index[BC7ENC_TOTAL_ASTC_RANGES][256]; + +static void astc_init() +{ + for (uint32_t range = 0; range < BC7ENC_TOTAL_ASTC_RANGES; range++) + { + if (!astc_is_valid_endpoint_range(range)) + continue; + + const uint32_t levels = astc_get_levels(range); + + uint32_t vals[256]; + // TODO + for (uint32_t i = 0; i < levels; i++) + vals[i] = (unquant_astc_endpoint_val(i, range) << 8) | i; + + std::sort(vals, vals + levels); + + for (uint32_t i = 0; i < levels; i++) + { + uint32_t order = vals[i] & 0xFF; + uint32_t unq = vals[i] >> 8; + + g_astc_sorted_order_unquant[range][i].m_unquant = (uint8_t)unq; + g_astc_sorted_order_unquant[range][i].m_index = (uint8_t)order; + + } // i + +#if 0 + if (g_astc_bise_range_table[range][1] || g_astc_bise_range_table[range][2]) + { + printf("// Range: %u, Levels: %u, Bits: %u, Trits: %u, Quints: %u\n", range, levels, g_astc_bise_range_table[range][0], g_astc_bise_range_table[range][1], g_astc_bise_range_table[range][2]); + + printf("{"); + for (uint32_t i = 0; i < levels; i++) + { + printf("{%u,%u}", g_astc_sorted_order_unquant[range][i].m_index, g_astc_sorted_order_unquant[range][i].m_unquant); + if (i != (levels - 1)) + printf(","); + } + printf("}\n"); + } +#endif + +#if 0 + if (g_astc_bise_range_table[range][1] || g_astc_bise_range_table[range][2]) + { + printf("// Range: %u, Levels: %u, Bits: %u, Trits: %u, Quints: %u\n", range, levels, g_astc_bise_range_table[range][0], g_astc_bise_range_table[range][1], g_astc_bise_range_table[range][2]); + + printf("{"); + for (uint32_t i = 0; i < levels; i++) + { + printf("{%u,%u}", g_astc_unquant[range][i].m_index, g_astc_unquant[range][i].m_unquant); + if (i != (levels - 1)) + printf(","); + } + printf("}\n"); + } +#endif + + for (uint32_t i = 0; i < 256; i++) + { + uint32_t best_index = 0; + int best_err = INT32_MAX; + + for (uint32_t j = 0; j < levels; j++) + { + int err = g_astc_sorted_order_unquant[range][j].m_unquant - i; + if (err < 0) + err = -err; + if (err < best_err) + { + best_err = err; + best_index = j; + } + } + + g_astc_nearest_sorted_index[range][i] = (uint8_t)best_index; + } // i + } // range +} + +static inline uint32_t astc_interpolate(uint32_t l, uint32_t h, uint32_t w) +{ + // This is for linear values, not sRGB. + l = (l << 8) | l; + h = (h << 8) | h; + uint32_t k = (l * (64 - w) + h * w + 32) >> 6; + return k >> 8; +} + +// Initialize the lookup table used for optimal single color compression in mode 1. Must be called before encoding. +void bc7enc_compress_block_init() +{ + astc_init(); + + // BC7 666.1 + for (int c = 0; c < 256; c++) + { + for (uint32_t lp = 0; lp < 2; lp++) + { + endpoint_err best; + best.m_error = (uint16_t)UINT16_MAX; + for (uint32_t l = 0; l < 64; l++) + { + uint32_t low = ((l << 1) | lp) << 1; + low |= (low >> 7); + for (uint32_t h = 0; h < 64; h++) + { + uint32_t high = ((h << 1) | lp) << 1; + high |= (high >> 7); + const int k = (low * (64 - g_bc7_weights3[BC7ENC_MODE_1_OPTIMAL_INDEX]) + high * g_bc7_weights3[BC7ENC_MODE_1_OPTIMAL_INDEX] + 32) >> 6; + const int err = (k - c) * (k - c); + if (err < best.m_error) + { + best.m_error = (uint16_t)err; + best.m_lo = (uint8_t)l; + best.m_hi = (uint8_t)h; + } + } // h + } // l + g_bc7_mode_1_optimal_endpoints[c][lp] = best; + } // lp + } // c + + // ASTC [0,15] 3-bit + for (int c = 0; c < 256; c++) + { + endpoint_err best; + best.m_error = (uint16_t)UINT16_MAX; + for (uint32_t l = 0; l < 16; l++) + { + uint32_t low = (l << 4) | l; + + for (uint32_t h = 0; h < 16; h++) + { + uint32_t high = (h << 4) | h; + + const int k = astc_interpolate(low, high, g_bc7_weights3[BC7ENC_ASTC_4BIT_3BIT_OPTIMAL_INDEX]); + const int err = (k - c) * (k - c); + + if (err < best.m_error) + { + best.m_error = (uint16_t)err; + best.m_lo = (uint8_t)l; + best.m_hi = (uint8_t)h; + } + } // h + } // l + + g_astc_4bit_3bit_optimal_endpoints[c] = best; + + } // c + + // ASTC [0,15] 2-bit + for (int c = 0; c < 256; c++) + { + endpoint_err best; + best.m_error = (uint16_t)UINT16_MAX; + for (uint32_t l = 0; l < 16; l++) + { + uint32_t low = (l << 4) | l; + + for (uint32_t h = 0; h < 16; h++) + { + uint32_t high = (h << 4) | h; + + const int k = astc_interpolate(low, high, g_bc7_weights2[BC7ENC_ASTC_4BIT_2BIT_OPTIMAL_INDEX]); + const int err = (k - c) * (k - c); + + if (err < best.m_error) + { + best.m_error = (uint16_t)err; + best.m_lo = (uint8_t)l; + best.m_hi = (uint8_t)h; + } + } // h + } // l + + g_astc_4bit_2bit_optimal_endpoints[c] = best; + + } // c + + // ASTC range 7 [0,11] 2-bit + for (int c = 0; c < 256; c++) + { + endpoint_err best; + best.m_error = (uint16_t)UINT16_MAX; + for (uint32_t l = 0; l < 12; l++) + { + uint32_t low = g_astc_sorted_order_unquant[7][l].m_unquant; + + for (uint32_t h = 0; h < 12; h++) + { + uint32_t high = g_astc_sorted_order_unquant[7][h].m_unquant; + + const int k = astc_interpolate(low, high, g_bc7_weights2[BC7ENC_ASTC_RANGE7_2BIT_OPTIMAL_INDEX]); + const int err = (k - c) * (k - c); + + if (err < best.m_error) + { + best.m_error = (uint16_t)err; + best.m_lo = (uint8_t)l; + best.m_hi = (uint8_t)h; + } + } // h + } // l + + g_astc_range7_2bit_optimal_endpoints[c] = best; + + } // c + + // ASTC range 13 [0,47] 4-bit + for (int c = 0; c < 256; c++) + { + endpoint_err best; + best.m_error = (uint16_t)UINT16_MAX; + for (uint32_t l = 0; l < 48; l++) + { + uint32_t low = g_astc_sorted_order_unquant[13][l].m_unquant; + + for (uint32_t h = 0; h < 48; h++) + { + uint32_t high = g_astc_sorted_order_unquant[13][h].m_unquant; + + const int k = astc_interpolate(low, high, g_astc_weights4[BC7ENC_ASTC_RANGE13_4BIT_OPTIMAL_INDEX]); + const int err = (k - c) * (k - c); + + if (err < best.m_error) + { + best.m_error = (uint16_t)err; + best.m_lo = (uint8_t)l; + best.m_hi = (uint8_t)h; + } + } // h + } // l + + g_astc_range13_4bit_optimal_endpoints[c] = best; + + } // c + + // ASTC range 13 [0,47] 2-bit + for (int c = 0; c < 256; c++) + { + endpoint_err best; + best.m_error = (uint16_t)UINT16_MAX; + for (uint32_t l = 0; l < 48; l++) + { + uint32_t low = g_astc_sorted_order_unquant[13][l].m_unquant; + + for (uint32_t h = 0; h < 48; h++) + { + uint32_t high = g_astc_sorted_order_unquant[13][h].m_unquant; + + const int k = astc_interpolate(low, high, g_bc7_weights2[BC7ENC_ASTC_RANGE13_2BIT_OPTIMAL_INDEX]); + const int err = (k - c) * (k - c); + + if (err < best.m_error) + { + best.m_error = (uint16_t)err; + best.m_lo = (uint8_t)l; + best.m_hi = (uint8_t)h; + } + } // h + } // l + + g_astc_range13_2bit_optimal_endpoints[c] = best; + + } // c + + // ASTC range 11 [0,31] 5-bit + for (int c = 0; c < 256; c++) + { + endpoint_err best; + best.m_error = (uint16_t)UINT16_MAX; + for (uint32_t l = 0; l < 32; l++) + { + uint32_t low = g_astc_sorted_order_unquant[11][l].m_unquant; + + for (uint32_t h = 0; h < 32; h++) + { + uint32_t high = g_astc_sorted_order_unquant[11][h].m_unquant; + + const int k = astc_interpolate(low, high, g_astc_weights5[BC7ENC_ASTC_RANGE11_5BIT_OPTIMAL_INDEX]); + const int err = (k - c) * (k - c); + + if (err < best.m_error) + { + best.m_error = (uint16_t)err; + best.m_lo = (uint8_t)l; + best.m_hi = (uint8_t)h; + } + } // h + } // l + + g_astc_range11_5bit_optimal_endpoints[c] = best; + + } // c +} + +static void compute_least_squares_endpoints_rgba(uint32_t N, const uint8_t *pSelectors, const bc7enc_vec4F* pSelector_weights, bc7enc_vec4F* pXl, bc7enc_vec4F* pXh, const color_quad_u8 *pColors) +{ + // Least squares using normal equations: http://www.cs.cornell.edu/~bindel/class/cs3220-s12/notes/lec10.pdf + // I did this in matrix form first, expanded out all the ops, then optimized it a bit. + double z00 = 0.0f, z01 = 0.0f, z10 = 0.0f, z11 = 0.0f; + double q00_r = 0.0f, q10_r = 0.0f, t_r = 0.0f; + double q00_g = 0.0f, q10_g = 0.0f, t_g = 0.0f; + double q00_b = 0.0f, q10_b = 0.0f, t_b = 0.0f; + double q00_a = 0.0f, q10_a = 0.0f, t_a = 0.0f; + + for (uint32_t i = 0; i < N; i++) + { + const uint32_t sel = pSelectors[i]; + z00 += pSelector_weights[sel].m_c[0]; + z10 += pSelector_weights[sel].m_c[1]; + z11 += pSelector_weights[sel].m_c[2]; + float w = pSelector_weights[sel].m_c[3]; + q00_r += w * pColors[i].m_c[0]; t_r += pColors[i].m_c[0]; + q00_g += w * pColors[i].m_c[1]; t_g += pColors[i].m_c[1]; + q00_b += w * pColors[i].m_c[2]; t_b += pColors[i].m_c[2]; + q00_a += w * pColors[i].m_c[3]; t_a += pColors[i].m_c[3]; + } + + q10_r = t_r - q00_r; + q10_g = t_g - q00_g; + q10_b = t_b - q00_b; + q10_a = t_a - q00_a; + + z01 = z10; + + double det = z00 * z11 - z01 * z10; + if (det != 0.0f) + det = 1.0f / det; + + double iz00, iz01, iz10, iz11; + iz00 = z11 * det; + iz01 = -z01 * det; + iz10 = -z10 * det; + iz11 = z00 * det; + + pXl->m_c[0] = (float)(iz00 * q00_r + iz01 * q10_r); pXh->m_c[0] = (float)(iz10 * q00_r + iz11 * q10_r); + pXl->m_c[1] = (float)(iz00 * q00_g + iz01 * q10_g); pXh->m_c[1] = (float)(iz10 * q00_g + iz11 * q10_g); + pXl->m_c[2] = (float)(iz00 * q00_b + iz01 * q10_b); pXh->m_c[2] = (float)(iz10 * q00_b + iz11 * q10_b); + pXl->m_c[3] = (float)(iz00 * q00_a + iz01 * q10_a); pXh->m_c[3] = (float)(iz10 * q00_a + iz11 * q10_a); + + for (uint32_t c = 0; c < 4; c++) + { + if ((pXl->m_c[c] < 0.0f) || (pXh->m_c[c] > 255.0f)) + { + uint32_t lo_v = UINT32_MAX, hi_v = 0; + for (uint32_t i = 0; i < N; i++) + { + lo_v = minimumu(lo_v, pColors[i].m_c[c]); + hi_v = maximumu(hi_v, pColors[i].m_c[c]); + } + + if (lo_v == hi_v) + { + pXl->m_c[c] = (float)lo_v; + pXh->m_c[c] = (float)hi_v; + } + } + } +} + +static void compute_least_squares_endpoints_rgb(uint32_t N, const uint8_t *pSelectors, const bc7enc_vec4F*pSelector_weights, bc7enc_vec4F*pXl, bc7enc_vec4F*pXh, const color_quad_u8 *pColors) +{ + double z00 = 0.0f, z01 = 0.0f, z10 = 0.0f, z11 = 0.0f; + double q00_r = 0.0f, q10_r = 0.0f, t_r = 0.0f; + double q00_g = 0.0f, q10_g = 0.0f, t_g = 0.0f; + double q00_b = 0.0f, q10_b = 0.0f, t_b = 0.0f; + + for (uint32_t i = 0; i < N; i++) + { + const uint32_t sel = pSelectors[i]; + z00 += pSelector_weights[sel].m_c[0]; + z10 += pSelector_weights[sel].m_c[1]; + z11 += pSelector_weights[sel].m_c[2]; + float w = pSelector_weights[sel].m_c[3]; + q00_r += w * pColors[i].m_c[0]; t_r += pColors[i].m_c[0]; + q00_g += w * pColors[i].m_c[1]; t_g += pColors[i].m_c[1]; + q00_b += w * pColors[i].m_c[2]; t_b += pColors[i].m_c[2]; + } + + q10_r = t_r - q00_r; + q10_g = t_g - q00_g; + q10_b = t_b - q00_b; + + z01 = z10; + + double det = z00 * z11 - z01 * z10; + if (det != 0.0f) + det = 1.0f / det; + + double iz00, iz01, iz10, iz11; + iz00 = z11 * det; + iz01 = -z01 * det; + iz10 = -z10 * det; + iz11 = z00 * det; + + pXl->m_c[0] = (float)(iz00 * q00_r + iz01 * q10_r); pXh->m_c[0] = (float)(iz10 * q00_r + iz11 * q10_r); + pXl->m_c[1] = (float)(iz00 * q00_g + iz01 * q10_g); pXh->m_c[1] = (float)(iz10 * q00_g + iz11 * q10_g); + pXl->m_c[2] = (float)(iz00 * q00_b + iz01 * q10_b); pXh->m_c[2] = (float)(iz10 * q00_b + iz11 * q10_b); + pXl->m_c[3] = 255.0f; pXh->m_c[3] = 255.0f; + + for (uint32_t c = 0; c < 3; c++) + { + if ((pXl->m_c[c] < 0.0f) || (pXh->m_c[c] > 255.0f)) + { + uint32_t lo_v = UINT32_MAX, hi_v = 0; + for (uint32_t i = 0; i < N; i++) + { + lo_v = minimumu(lo_v, pColors[i].m_c[c]); + hi_v = maximumu(hi_v, pColors[i].m_c[c]); + } + + if (lo_v == hi_v) + { + pXl->m_c[c] = (float)lo_v; + pXh->m_c[c] = (float)hi_v; + } + } + } +} + +static inline color_quad_u8 scale_color(const color_quad_u8* pC, const color_cell_compressor_params* pParams) +{ + color_quad_u8 results; + + if (pParams->m_astc_endpoint_range) + { + for (uint32_t i = 0; i < 4; i++) + { + results.m_c[i] = g_astc_sorted_order_unquant[pParams->m_astc_endpoint_range][pC->m_c[i]].m_unquant; + } + } + else + { + const uint32_t n = pParams->m_comp_bits + (pParams->m_has_pbits ? 1 : 0); + assert((n >= 4) && (n <= 8)); + + for (uint32_t i = 0; i < 4; i++) + { + uint32_t v = pC->m_c[i] << (8 - n); + v |= (v >> n); + assert(v <= 255); + results.m_c[i] = (uint8_t)(v); + } + } + + return results; +} + +static inline uint64_t compute_color_distance_rgb(const color_quad_u8 *pE1, const color_quad_u8 *pE2, bc7enc_bool perceptual, const uint32_t weights[4]) +{ + int dr, dg, db; + + if (perceptual) + { + const int l1 = pE1->m_c[0] * 109 + pE1->m_c[1] * 366 + pE1->m_c[2] * 37; + const int cr1 = ((int)pE1->m_c[0] << 9) - l1; + const int cb1 = ((int)pE1->m_c[2] << 9) - l1; + const int l2 = pE2->m_c[0] * 109 + pE2->m_c[1] * 366 + pE2->m_c[2] * 37; + const int cr2 = ((int)pE2->m_c[0] << 9) - l2; + const int cb2 = ((int)pE2->m_c[2] << 9) - l2; + dr = (l1 - l2) >> 8; + dg = (cr1 - cr2) >> 8; + db = (cb1 - cb2) >> 8; + } + else + { + dr = (int)pE1->m_c[0] - (int)pE2->m_c[0]; + dg = (int)pE1->m_c[1] - (int)pE2->m_c[1]; + db = (int)pE1->m_c[2] - (int)pE2->m_c[2]; + } + + return weights[0] * (uint32_t)(dr * dr) + weights[1] * (uint32_t)(dg * dg) + weights[2] * (uint32_t)(db * db); +} + +static inline uint64_t compute_color_distance_rgba(const color_quad_u8 *pE1, const color_quad_u8 *pE2, bc7enc_bool perceptual, const uint32_t weights[4]) +{ + int da = (int)pE1->m_c[3] - (int)pE2->m_c[3]; + return compute_color_distance_rgb(pE1, pE2, perceptual, weights) + (weights[3] * (uint32_t)(da * da)); +} + +static uint64_t pack_mode1_to_one_color(const color_cell_compressor_params *pParams, color_cell_compressor_results *pResults, uint32_t r, uint32_t g, uint32_t b, uint8_t *pSelectors) +{ + uint32_t best_err = UINT_MAX; + uint32_t best_p = 0; + + for (uint32_t p = 0; p < 2; p++) + { + uint32_t err = g_bc7_mode_1_optimal_endpoints[r][p].m_error + g_bc7_mode_1_optimal_endpoints[g][p].m_error + g_bc7_mode_1_optimal_endpoints[b][p].m_error; + if (err < best_err) + { + best_err = err; + best_p = p; + } + } + + const endpoint_err *pEr = &g_bc7_mode_1_optimal_endpoints[r][best_p]; + const endpoint_err *pEg = &g_bc7_mode_1_optimal_endpoints[g][best_p]; + const endpoint_err *pEb = &g_bc7_mode_1_optimal_endpoints[b][best_p]; + + color_quad_u8_set(&pResults->m_low_endpoint, pEr->m_lo, pEg->m_lo, pEb->m_lo, 0); + color_quad_u8_set(&pResults->m_high_endpoint, pEr->m_hi, pEg->m_hi, pEb->m_hi, 0); + pResults->m_pbits[0] = best_p; + pResults->m_pbits[1] = 0; + + memset(pSelectors, BC7ENC_MODE_1_OPTIMAL_INDEX, pParams->m_num_pixels); + + color_quad_u8 p; + for (uint32_t i = 0; i < 3; i++) + { + uint32_t low = ((pResults->m_low_endpoint.m_c[i] << 1) | pResults->m_pbits[0]) << 1; + low |= (low >> 7); + + uint32_t high = ((pResults->m_high_endpoint.m_c[i] << 1) | pResults->m_pbits[0]) << 1; + high |= (high >> 7); + + p.m_c[i] = (uint8_t)((low * (64 - g_bc7_weights3[BC7ENC_MODE_1_OPTIMAL_INDEX]) + high * g_bc7_weights3[BC7ENC_MODE_1_OPTIMAL_INDEX] + 32) >> 6); + } + p.m_c[3] = 255; + + uint64_t total_err = 0; + for (uint32_t i = 0; i < pParams->m_num_pixels; i++) + total_err += compute_color_distance_rgb(&p, &pParams->m_pPixels[i], pParams->m_perceptual, pParams->m_weights); + + pResults->m_best_overall_err = total_err; + + return total_err; +} + +static uint64_t pack_astc_4bit_3bit_to_one_color(const color_cell_compressor_params *pParams, color_cell_compressor_results *pResults, uint32_t r, uint32_t g, uint32_t b, uint8_t *pSelectors) +{ + const endpoint_err *pEr = &g_astc_4bit_3bit_optimal_endpoints[r]; + const endpoint_err *pEg = &g_astc_4bit_3bit_optimal_endpoints[g]; + const endpoint_err *pEb = &g_astc_4bit_3bit_optimal_endpoints[b]; + + color_quad_u8_set(&pResults->m_low_endpoint, pEr->m_lo, pEg->m_lo, pEb->m_lo, 0); + color_quad_u8_set(&pResults->m_high_endpoint, pEr->m_hi, pEg->m_hi, pEb->m_hi, 0); + pResults->m_pbits[0] = 0; + pResults->m_pbits[1] = 0; + + for (uint32_t i = 0; i < 4; i++) + { + pResults->m_astc_low_endpoint.m_c[i] = g_astc_sorted_order_unquant[pParams->m_astc_endpoint_range][pResults->m_low_endpoint.m_c[i]].m_index; + pResults->m_astc_high_endpoint.m_c[i] = g_astc_sorted_order_unquant[pParams->m_astc_endpoint_range][pResults->m_high_endpoint.m_c[i]].m_index; + } + + memset(pSelectors, BC7ENC_ASTC_4BIT_3BIT_OPTIMAL_INDEX, pParams->m_num_pixels); + + color_quad_u8 p; + for (uint32_t i = 0; i < 3; i++) + { + uint32_t low = (pResults->m_low_endpoint.m_c[i] << 4) | pResults->m_low_endpoint.m_c[i]; + uint32_t high = (pResults->m_high_endpoint.m_c[i] << 4) | pResults->m_high_endpoint.m_c[i]; + + p.m_c[i] = (uint8_t)astc_interpolate(low, high, g_bc7_weights3[BC7ENC_ASTC_4BIT_3BIT_OPTIMAL_INDEX]); + } + p.m_c[3] = 255; + + uint64_t total_err = 0; + for (uint32_t i = 0; i < pParams->m_num_pixels; i++) + total_err += compute_color_distance_rgb(&p, &pParams->m_pPixels[i], pParams->m_perceptual, pParams->m_weights); + + pResults->m_best_overall_err = total_err; + + return total_err; +} + +static uint64_t pack_astc_4bit_2bit_to_one_color_rgba(const color_cell_compressor_params *pParams, color_cell_compressor_results *pResults, uint32_t r, uint32_t g, uint32_t b, uint32_t a, uint8_t *pSelectors) +{ + const endpoint_err *pEr = &g_astc_4bit_2bit_optimal_endpoints[r]; + const endpoint_err *pEg = &g_astc_4bit_2bit_optimal_endpoints[g]; + const endpoint_err *pEb = &g_astc_4bit_2bit_optimal_endpoints[b]; + const endpoint_err *pEa = &g_astc_4bit_2bit_optimal_endpoints[a]; + + color_quad_u8_set(&pResults->m_low_endpoint, pEr->m_lo, pEg->m_lo, pEb->m_lo, pEa->m_lo); + color_quad_u8_set(&pResults->m_high_endpoint, pEr->m_hi, pEg->m_hi, pEb->m_hi, pEa->m_hi); + pResults->m_pbits[0] = 0; + pResults->m_pbits[1] = 0; + + for (uint32_t i = 0; i < 4; i++) + { + pResults->m_astc_low_endpoint.m_c[i] = g_astc_sorted_order_unquant[pParams->m_astc_endpoint_range][pResults->m_low_endpoint.m_c[i]].m_index; + pResults->m_astc_high_endpoint.m_c[i] = g_astc_sorted_order_unquant[pParams->m_astc_endpoint_range][pResults->m_high_endpoint.m_c[i]].m_index; + } + + memset(pSelectors, BC7ENC_ASTC_4BIT_2BIT_OPTIMAL_INDEX, pParams->m_num_pixels); + + color_quad_u8 p; + for (uint32_t i = 0; i < 4; i++) + { + uint32_t low = (pResults->m_low_endpoint.m_c[i] << 4) | pResults->m_low_endpoint.m_c[i]; + uint32_t high = (pResults->m_high_endpoint.m_c[i] << 4) | pResults->m_high_endpoint.m_c[i]; + + p.m_c[i] = (uint8_t)astc_interpolate(low, high, g_bc7_weights2[BC7ENC_ASTC_4BIT_2BIT_OPTIMAL_INDEX]); + } + + uint64_t total_err = 0; + for (uint32_t i = 0; i < pParams->m_num_pixels; i++) + total_err += compute_color_distance_rgba(&p, &pParams->m_pPixels[i], pParams->m_perceptual, pParams->m_weights); + + pResults->m_best_overall_err = total_err; + + return total_err; +} + +static uint64_t pack_astc_range7_2bit_to_one_color(const color_cell_compressor_params *pParams, color_cell_compressor_results *pResults, uint32_t r, uint32_t g, uint32_t b, uint8_t *pSelectors) +{ + assert(pParams->m_astc_endpoint_range == 7 && pParams->m_num_selector_weights == 4); + + const endpoint_err *pEr = &g_astc_range7_2bit_optimal_endpoints[r]; + const endpoint_err *pEg = &g_astc_range7_2bit_optimal_endpoints[g]; + const endpoint_err *pEb = &g_astc_range7_2bit_optimal_endpoints[b]; + + color_quad_u8_set(&pResults->m_low_endpoint, pEr->m_lo, pEg->m_lo, pEb->m_lo, 0); + color_quad_u8_set(&pResults->m_high_endpoint, pEr->m_hi, pEg->m_hi, pEb->m_hi, 0); + pResults->m_pbits[0] = 0; + pResults->m_pbits[1] = 0; + + for (uint32_t i = 0; i < 4; i++) + { + pResults->m_astc_low_endpoint.m_c[i] = g_astc_sorted_order_unquant[pParams->m_astc_endpoint_range][pResults->m_low_endpoint.m_c[i]].m_index; + pResults->m_astc_high_endpoint.m_c[i] = g_astc_sorted_order_unquant[pParams->m_astc_endpoint_range][pResults->m_high_endpoint.m_c[i]].m_index; + } + + memset(pSelectors, BC7ENC_ASTC_RANGE7_2BIT_OPTIMAL_INDEX, pParams->m_num_pixels); + + color_quad_u8 p; + for (uint32_t i = 0; i < 3; i++) + { + uint32_t low = g_astc_sorted_order_unquant[7][pResults->m_low_endpoint.m_c[i]].m_unquant; + uint32_t high = g_astc_sorted_order_unquant[7][pResults->m_high_endpoint.m_c[i]].m_unquant; + + p.m_c[i] = (uint8_t)astc_interpolate(low, high, g_bc7_weights2[BC7ENC_ASTC_RANGE7_2BIT_OPTIMAL_INDEX]); + } + p.m_c[3] = 255; + + uint64_t total_err = 0; + for (uint32_t i = 0; i < pParams->m_num_pixels; i++) + total_err += compute_color_distance_rgb(&p, &pParams->m_pPixels[i], pParams->m_perceptual, pParams->m_weights); + + pResults->m_best_overall_err = total_err; + + return total_err; +} + +static uint64_t pack_astc_range13_2bit_to_one_color(const color_cell_compressor_params *pParams, color_cell_compressor_results *pResults, uint32_t r, uint32_t g, uint32_t b, uint8_t *pSelectors) +{ + assert(pParams->m_astc_endpoint_range == 13 && pParams->m_num_selector_weights == 4 && !pParams->m_has_alpha); + + const endpoint_err *pEr = &g_astc_range13_2bit_optimal_endpoints[r]; + const endpoint_err *pEg = &g_astc_range13_2bit_optimal_endpoints[g]; + const endpoint_err *pEb = &g_astc_range13_2bit_optimal_endpoints[b]; + + color_quad_u8_set(&pResults->m_low_endpoint, pEr->m_lo, pEg->m_lo, pEb->m_lo, 47); + color_quad_u8_set(&pResults->m_high_endpoint, pEr->m_hi, pEg->m_hi, pEb->m_hi, 47); + pResults->m_pbits[0] = 0; + pResults->m_pbits[1] = 0; + + for (uint32_t i = 0; i < 4; i++) + { + pResults->m_astc_low_endpoint.m_c[i] = g_astc_sorted_order_unquant[pParams->m_astc_endpoint_range][pResults->m_low_endpoint.m_c[i]].m_index; + pResults->m_astc_high_endpoint.m_c[i] = g_astc_sorted_order_unquant[pParams->m_astc_endpoint_range][pResults->m_high_endpoint.m_c[i]].m_index; + } + + memset(pSelectors, BC7ENC_ASTC_RANGE13_2BIT_OPTIMAL_INDEX, pParams->m_num_pixels); + + color_quad_u8 p; + for (uint32_t i = 0; i < 4; i++) + { + uint32_t low = g_astc_sorted_order_unquant[13][pResults->m_low_endpoint.m_c[i]].m_unquant; + uint32_t high = g_astc_sorted_order_unquant[13][pResults->m_high_endpoint.m_c[i]].m_unquant; + + p.m_c[i] = (uint8_t)astc_interpolate(low, high, g_bc7_weights2[BC7ENC_ASTC_RANGE13_2BIT_OPTIMAL_INDEX]); + } + + uint64_t total_err = 0; + for (uint32_t i = 0; i < pParams->m_num_pixels; i++) + total_err += compute_color_distance_rgb(&p, &pParams->m_pPixels[i], pParams->m_perceptual, pParams->m_weights); + + pResults->m_best_overall_err = total_err; + + return total_err; +} + +static uint64_t pack_astc_range11_5bit_to_one_color(const color_cell_compressor_params* pParams, color_cell_compressor_results* pResults, uint32_t r, uint32_t g, uint32_t b, uint8_t* pSelectors) +{ + assert(pParams->m_astc_endpoint_range == 11 && pParams->m_num_selector_weights == 32 && !pParams->m_has_alpha); + + const endpoint_err* pEr = &g_astc_range11_5bit_optimal_endpoints[r]; + const endpoint_err* pEg = &g_astc_range11_5bit_optimal_endpoints[g]; + const endpoint_err* pEb = &g_astc_range11_5bit_optimal_endpoints[b]; + + color_quad_u8_set(&pResults->m_low_endpoint, pEr->m_lo, pEg->m_lo, pEb->m_lo, 31); + color_quad_u8_set(&pResults->m_high_endpoint, pEr->m_hi, pEg->m_hi, pEb->m_hi, 31); + pResults->m_pbits[0] = 0; + pResults->m_pbits[1] = 0; + + for (uint32_t i = 0; i < 4; i++) + { + pResults->m_astc_low_endpoint.m_c[i] = g_astc_sorted_order_unquant[pParams->m_astc_endpoint_range][pResults->m_low_endpoint.m_c[i]].m_index; + pResults->m_astc_high_endpoint.m_c[i] = g_astc_sorted_order_unquant[pParams->m_astc_endpoint_range][pResults->m_high_endpoint.m_c[i]].m_index; + } + + memset(pSelectors, BC7ENC_ASTC_RANGE11_5BIT_OPTIMAL_INDEX, pParams->m_num_pixels); + + color_quad_u8 p; + for (uint32_t i = 0; i < 4; i++) + { + uint32_t low = g_astc_sorted_order_unquant[11][pResults->m_low_endpoint.m_c[i]].m_unquant; + uint32_t high = g_astc_sorted_order_unquant[11][pResults->m_high_endpoint.m_c[i]].m_unquant; + + p.m_c[i] = (uint8_t)astc_interpolate(low, high, g_astc_weights5[BC7ENC_ASTC_RANGE11_5BIT_OPTIMAL_INDEX]); + } + + uint64_t total_err = 0; + for (uint32_t i = 0; i < pParams->m_num_pixels; i++) + total_err += compute_color_distance_rgb(&p, &pParams->m_pPixels[i], pParams->m_perceptual, pParams->m_weights); + + pResults->m_best_overall_err = total_err; + + return total_err; +} + +static uint64_t evaluate_solution(const color_quad_u8 *pLow, const color_quad_u8 *pHigh, const uint32_t pbits[2], const color_cell_compressor_params *pParams, color_cell_compressor_results *pResults) +{ + color_quad_u8 quantMinColor = *pLow; + color_quad_u8 quantMaxColor = *pHigh; + + if (pParams->m_has_pbits) + { + uint32_t minPBit, maxPBit; + + if (pParams->m_endpoints_share_pbit) + maxPBit = minPBit = pbits[0]; + else + { + minPBit = pbits[0]; + maxPBit = pbits[1]; + } + + quantMinColor.m_c[0] = (uint8_t)((pLow->m_c[0] << 1) | minPBit); + quantMinColor.m_c[1] = (uint8_t)((pLow->m_c[1] << 1) | minPBit); + quantMinColor.m_c[2] = (uint8_t)((pLow->m_c[2] << 1) | minPBit); + quantMinColor.m_c[3] = (uint8_t)((pLow->m_c[3] << 1) | minPBit); + + quantMaxColor.m_c[0] = (uint8_t)((pHigh->m_c[0] << 1) | maxPBit); + quantMaxColor.m_c[1] = (uint8_t)((pHigh->m_c[1] << 1) | maxPBit); + quantMaxColor.m_c[2] = (uint8_t)((pHigh->m_c[2] << 1) | maxPBit); + quantMaxColor.m_c[3] = (uint8_t)((pHigh->m_c[3] << 1) | maxPBit); + } + + color_quad_u8 actualMinColor = scale_color(&quantMinColor, pParams); + color_quad_u8 actualMaxColor = scale_color(&quantMaxColor, pParams); + + const uint32_t N = pParams->m_num_selector_weights; + assert(N >= 1 && N <= 32); + + color_quad_u8 weightedColors[32]; + weightedColors[0] = actualMinColor; + weightedColors[N - 1] = actualMaxColor; + + const uint32_t nc = pParams->m_has_alpha ? 4 : 3; + if (pParams->m_astc_endpoint_range) + { + for (uint32_t i = 1; i < (N - 1); i++) + { + for (uint32_t j = 0; j < nc; j++) + weightedColors[i].m_c[j] = (uint8_t)(astc_interpolate(actualMinColor.m_c[j], actualMaxColor.m_c[j], pParams->m_pSelector_weights[i])); + } + } + else + { + for (uint32_t i = 1; i < (N - 1); i++) + for (uint32_t j = 0; j < nc; j++) + weightedColors[i].m_c[j] = (uint8_t)((actualMinColor.m_c[j] * (64 - pParams->m_pSelector_weights[i]) + actualMaxColor.m_c[j] * pParams->m_pSelector_weights[i] + 32) >> 6); + } + + const int lr = actualMinColor.m_c[0]; + const int lg = actualMinColor.m_c[1]; + const int lb = actualMinColor.m_c[2]; + const int dr = actualMaxColor.m_c[0] - lr; + const int dg = actualMaxColor.m_c[1] - lg; + const int db = actualMaxColor.m_c[2] - lb; + + uint64_t total_err = 0; + + if (pParams->m_pForce_selectors) + { + for (uint32_t i = 0; i < pParams->m_num_pixels; i++) + { + const color_quad_u8* pC = &pParams->m_pPixels[i]; + + const uint8_t sel = pParams->m_pForce_selectors[i]; + assert(sel < N); + + total_err += (pParams->m_has_alpha ? compute_color_distance_rgba : compute_color_distance_rgb)(&weightedColors[sel], pC, pParams->m_perceptual, pParams->m_weights); + + pResults->m_pSelectors_temp[i] = sel; + } + } + else if (!pParams->m_perceptual) + { + if (pParams->m_has_alpha) + { + const int la = actualMinColor.m_c[3]; + const int da = actualMaxColor.m_c[3] - la; + + const float f = N / (float)(squarei(dr) + squarei(dg) + squarei(db) + squarei(da) + .00000125f); + + for (uint32_t i = 0; i < pParams->m_num_pixels; i++) + { + const color_quad_u8 *pC = &pParams->m_pPixels[i]; + int r = pC->m_c[0]; + int g = pC->m_c[1]; + int b = pC->m_c[2]; + int a = pC->m_c[3]; + + int best_sel = (int)((float)((r - lr) * dr + (g - lg) * dg + (b - lb) * db + (a - la) * da) * f + .5f); + best_sel = clampi(best_sel, 1, N - 1); + + uint64_t err0 = compute_color_distance_rgba(&weightedColors[best_sel - 1], pC, BC7ENC_FALSE, pParams->m_weights); + uint64_t err1 = compute_color_distance_rgba(&weightedColors[best_sel], pC, BC7ENC_FALSE, pParams->m_weights); + + if (err0 == err1) + { + // Prefer non-interpolation + if ((best_sel - 1) == 0) + best_sel = 0; + } + else if (err1 > err0) + { + err1 = err0; + --best_sel; + } + total_err += err1; + + pResults->m_pSelectors_temp[i] = (uint8_t)best_sel; + } + } + else + { + const float f = N / (float)(squarei(dr) + squarei(dg) + squarei(db) + .00000125f); + + for (uint32_t i = 0; i < pParams->m_num_pixels; i++) + { + const color_quad_u8 *pC = &pParams->m_pPixels[i]; + int r = pC->m_c[0]; + int g = pC->m_c[1]; + int b = pC->m_c[2]; + + int sel = (int)((float)((r - lr) * dr + (g - lg) * dg + (b - lb) * db) * f + .5f); + sel = clampi(sel, 1, N - 1); + + uint64_t err0 = compute_color_distance_rgb(&weightedColors[sel - 1], pC, BC7ENC_FALSE, pParams->m_weights); + uint64_t err1 = compute_color_distance_rgb(&weightedColors[sel], pC, BC7ENC_FALSE, pParams->m_weights); + + int best_sel = sel; + uint64_t best_err = err1; + if (err0 == err1) + { + // Prefer non-interpolation + if ((best_sel - 1) == 0) + best_sel = 0; + } + else if (err0 < best_err) + { + best_err = err0; + best_sel = sel - 1; + } + + total_err += best_err; + + pResults->m_pSelectors_temp[i] = (uint8_t)best_sel; + } + } + } + else + { + for (uint32_t i = 0; i < pParams->m_num_pixels; i++) + { + uint64_t best_err = UINT64_MAX; + uint32_t best_sel = 0; + + if (pParams->m_has_alpha) + { + for (uint32_t j = 0; j < N; j++) + { + uint64_t err = compute_color_distance_rgba(&weightedColors[j], &pParams->m_pPixels[i], BC7ENC_TRUE, pParams->m_weights); + if (err < best_err) + { + best_err = err; + best_sel = j; + } + // Prefer non-interpolation + else if ((err == best_err) && (j == (N - 1))) + best_sel = j; + } + } + else + { + for (uint32_t j = 0; j < N; j++) + { + uint64_t err = compute_color_distance_rgb(&weightedColors[j], &pParams->m_pPixels[i], BC7ENC_TRUE, pParams->m_weights); + if (err < best_err) + { + best_err = err; + best_sel = j; + } + // Prefer non-interpolation + else if ((err == best_err) && (j == (N - 1))) + best_sel = j; + } + } + + total_err += best_err; + + pResults->m_pSelectors_temp[i] = (uint8_t)best_sel; + } + } + + if (total_err < pResults->m_best_overall_err) + { + pResults->m_best_overall_err = total_err; + + pResults->m_low_endpoint = *pLow; + pResults->m_high_endpoint = *pHigh; + + pResults->m_pbits[0] = pbits[0]; + pResults->m_pbits[1] = pbits[1]; + + memcpy(pResults->m_pSelectors, pResults->m_pSelectors_temp, sizeof(pResults->m_pSelectors[0]) * pParams->m_num_pixels); + } + + return total_err; +} + +static bool areDegenerateEndpoints(color_quad_u8* pTrialMinColor, color_quad_u8* pTrialMaxColor, const bc7enc_vec4F* pXl, const bc7enc_vec4F* pXh) +{ + for (uint32_t i = 0; i < 3; i++) + { + if (pTrialMinColor->m_c[i] == pTrialMaxColor->m_c[i]) + { + if (fabs(pXl->m_c[i] - pXh->m_c[i]) > 0.0f) + return true; + } + } + + return false; +} + +static void fixDegenerateEndpoints(uint32_t mode, color_quad_u8 *pTrialMinColor, color_quad_u8 *pTrialMaxColor, const bc7enc_vec4F*pXl, const bc7enc_vec4F*pXh, uint32_t iscale, int flags) +{ + if (mode == 255) + { + for (uint32_t i = 0; i < 3; i++) + { + if (pTrialMinColor->m_c[i] == pTrialMaxColor->m_c[i]) + { + if (fabs(pXl->m_c[i] - pXh->m_c[i]) > 0.000125f) + { + if (flags & 1) + { + if (pTrialMinColor->m_c[i] > 0) + pTrialMinColor->m_c[i]--; + } + if (flags & 2) + { + if (pTrialMaxColor->m_c[i] < iscale) + pTrialMaxColor->m_c[i]++; + } + } + } + } + } + else if (mode == 1) + { + // fix degenerate case where the input collapses to a single colorspace voxel, and we loose all freedom (test with grayscale ramps) + for (uint32_t i = 0; i < 3; i++) + { + if (pTrialMinColor->m_c[i] == pTrialMaxColor->m_c[i]) + { + if (fabs(pXl->m_c[i] - pXh->m_c[i]) > 0.000125f) + { + if (pTrialMinColor->m_c[i] > (iscale >> 1)) + { + if (pTrialMinColor->m_c[i] > 0) + pTrialMinColor->m_c[i]--; + else + if (pTrialMaxColor->m_c[i] < iscale) + pTrialMaxColor->m_c[i]++; + } + else + { + if (pTrialMaxColor->m_c[i] < iscale) + pTrialMaxColor->m_c[i]++; + else if (pTrialMinColor->m_c[i] > 0) + pTrialMinColor->m_c[i]--; + } + } + } + } + } +} + +static uint64_t find_optimal_solution(uint32_t mode, bc7enc_vec4F xl, bc7enc_vec4F xh, const color_cell_compressor_params *pParams, color_cell_compressor_results *pResults) +{ + vec4F_saturate_in_place(&xl); vec4F_saturate_in_place(&xh); + + if (pParams->m_astc_endpoint_range) + { + const uint32_t levels = astc_get_levels(pParams->m_astc_endpoint_range); + + const float scale = 255.0f; + + color_quad_u8 trialMinColor8Bit, trialMaxColor8Bit; + color_quad_u8_set_clamped(&trialMinColor8Bit, (int)(xl.m_c[0] * scale + .5f), (int)(xl.m_c[1] * scale + .5f), (int)(xl.m_c[2] * scale + .5f), (int)(xl.m_c[3] * scale + .5f)); + color_quad_u8_set_clamped(&trialMaxColor8Bit, (int)(xh.m_c[0] * scale + .5f), (int)(xh.m_c[1] * scale + .5f), (int)(xh.m_c[2] * scale + .5f), (int)(xh.m_c[3] * scale + .5f)); + + color_quad_u8 trialMinColor, trialMaxColor; + for (uint32_t i = 0; i < 4; i++) + { + trialMinColor.m_c[i] = g_astc_nearest_sorted_index[pParams->m_astc_endpoint_range][trialMinColor8Bit.m_c[i]]; + trialMaxColor.m_c[i] = g_astc_nearest_sorted_index[pParams->m_astc_endpoint_range][trialMaxColor8Bit.m_c[i]]; + } + + if (areDegenerateEndpoints(&trialMinColor, &trialMaxColor, &xl, &xh)) + { + color_quad_u8 trialMinColorOrig(trialMinColor), trialMaxColorOrig(trialMaxColor); + + fixDegenerateEndpoints(mode, &trialMinColor, &trialMaxColor, &xl, &xh, levels - 1, 1); + if ((pResults->m_best_overall_err == UINT64_MAX) || color_quad_u8_notequals(&trialMinColor, &pResults->m_low_endpoint) || color_quad_u8_notequals(&trialMaxColor, &pResults->m_high_endpoint)) + evaluate_solution(&trialMinColor, &trialMaxColor, pResults->m_pbits, pParams, pResults); + + trialMinColor = trialMinColorOrig; + trialMaxColor = trialMaxColorOrig; + fixDegenerateEndpoints(mode, &trialMinColor, &trialMaxColor, &xl, &xh, levels - 1, 0); + if ((pResults->m_best_overall_err == UINT64_MAX) || color_quad_u8_notequals(&trialMinColor, &pResults->m_low_endpoint) || color_quad_u8_notequals(&trialMaxColor, &pResults->m_high_endpoint)) + evaluate_solution(&trialMinColor, &trialMaxColor, pResults->m_pbits, pParams, pResults); + + trialMinColor = trialMinColorOrig; + trialMaxColor = trialMaxColorOrig; + fixDegenerateEndpoints(mode, &trialMinColor, &trialMaxColor, &xl, &xh, levels - 1, 2); + if ((pResults->m_best_overall_err == UINT64_MAX) || color_quad_u8_notequals(&trialMinColor, &pResults->m_low_endpoint) || color_quad_u8_notequals(&trialMaxColor, &pResults->m_high_endpoint)) + evaluate_solution(&trialMinColor, &trialMaxColor, pResults->m_pbits, pParams, pResults); + + trialMinColor = trialMinColorOrig; + trialMaxColor = trialMaxColorOrig; + fixDegenerateEndpoints(mode, &trialMinColor, &trialMaxColor, &xl, &xh, levels - 1, 3); + if ((pResults->m_best_overall_err == UINT64_MAX) || color_quad_u8_notequals(&trialMinColor, &pResults->m_low_endpoint) || color_quad_u8_notequals(&trialMaxColor, &pResults->m_high_endpoint)) + evaluate_solution(&trialMinColor, &trialMaxColor, pResults->m_pbits, pParams, pResults); + } + else + { + if ((pResults->m_best_overall_err == UINT64_MAX) || color_quad_u8_notequals(&trialMinColor, &pResults->m_low_endpoint) || color_quad_u8_notequals(&trialMaxColor, &pResults->m_high_endpoint)) + { + evaluate_solution(&trialMinColor, &trialMaxColor, pResults->m_pbits, pParams, pResults); + } + } + + for (uint32_t i = 0; i < 4; i++) + { + pResults->m_astc_low_endpoint.m_c[i] = g_astc_sorted_order_unquant[pParams->m_astc_endpoint_range][pResults->m_low_endpoint.m_c[i]].m_index; + pResults->m_astc_high_endpoint.m_c[i] = g_astc_sorted_order_unquant[pParams->m_astc_endpoint_range][pResults->m_high_endpoint.m_c[i]].m_index; + } + } + else if (pParams->m_has_pbits) + { + const int iscalep = (1 << (pParams->m_comp_bits + 1)) - 1; + const float scalep = (float)iscalep; + + const int32_t totalComps = pParams->m_has_alpha ? 4 : 3; + + uint32_t best_pbits[2]; + color_quad_u8 bestMinColor, bestMaxColor; + + if (!pParams->m_endpoints_share_pbit) + { + float best_err0 = 1e+9; + float best_err1 = 1e+9; + + for (int p = 0; p < 2; p++) + { + color_quad_u8 xMinColor, xMaxColor; + + // Notes: The pbit controls which quantization intervals are selected. + // total_levels=2^(comp_bits+1), where comp_bits=4 for mode 0, etc. + // pbit 0: v=(b*2)/(total_levels-1), pbit 1: v=(b*2+1)/(total_levels-1) where b is the component bin from [0,total_levels/2-1] and v is the [0,1] component value + // rearranging you get for pbit 0: b=floor(v*(total_levels-1)/2+.5) + // rearranging you get for pbit 1: b=floor((v*(total_levels-1)-1)/2+.5) + for (uint32_t c = 0; c < 4; c++) + { + xMinColor.m_c[c] = (uint8_t)(clampi(((int)((xl.m_c[c] * scalep - p) / 2.0f + .5f)) * 2 + p, p, iscalep - 1 + p)); + xMaxColor.m_c[c] = (uint8_t)(clampi(((int)((xh.m_c[c] * scalep - p) / 2.0f + .5f)) * 2 + p, p, iscalep - 1 + p)); + } + + color_quad_u8 scaledLow = scale_color(&xMinColor, pParams); + color_quad_u8 scaledHigh = scale_color(&xMaxColor, pParams); + + float err0 = 0, err1 = 0; + for (int i = 0; i < totalComps; i++) + { + err0 += squaref(scaledLow.m_c[i] - xl.m_c[i] * 255.0f); + err1 += squaref(scaledHigh.m_c[i] - xh.m_c[i] * 255.0f); + } + + if (err0 < best_err0) + { + best_err0 = err0; + best_pbits[0] = p; + + bestMinColor.m_c[0] = xMinColor.m_c[0] >> 1; + bestMinColor.m_c[1] = xMinColor.m_c[1] >> 1; + bestMinColor.m_c[2] = xMinColor.m_c[2] >> 1; + bestMinColor.m_c[3] = xMinColor.m_c[3] >> 1; + } + + if (err1 < best_err1) + { + best_err1 = err1; + best_pbits[1] = p; + + bestMaxColor.m_c[0] = xMaxColor.m_c[0] >> 1; + bestMaxColor.m_c[1] = xMaxColor.m_c[1] >> 1; + bestMaxColor.m_c[2] = xMaxColor.m_c[2] >> 1; + bestMaxColor.m_c[3] = xMaxColor.m_c[3] >> 1; + } + } + } + else + { + // Endpoints share pbits + float best_err = 1e+9; + + for (int p = 0; p < 2; p++) + { + color_quad_u8 xMinColor, xMaxColor; + for (uint32_t c = 0; c < 4; c++) + { + xMinColor.m_c[c] = (uint8_t)(clampi(((int)((xl.m_c[c] * scalep - p) / 2.0f + .5f)) * 2 + p, p, iscalep - 1 + p)); + xMaxColor.m_c[c] = (uint8_t)(clampi(((int)((xh.m_c[c] * scalep - p) / 2.0f + .5f)) * 2 + p, p, iscalep - 1 + p)); + } + + color_quad_u8 scaledLow = scale_color(&xMinColor, pParams); + color_quad_u8 scaledHigh = scale_color(&xMaxColor, pParams); + + float err = 0; + for (int i = 0; i < totalComps; i++) + err += squaref((scaledLow.m_c[i] / 255.0f) - xl.m_c[i]) + squaref((scaledHigh.m_c[i] / 255.0f) - xh.m_c[i]); + + if (err < best_err) + { + best_err = err; + best_pbits[0] = p; + best_pbits[1] = p; + for (uint32_t j = 0; j < 4; j++) + { + bestMinColor.m_c[j] = xMinColor.m_c[j] >> 1; + bestMaxColor.m_c[j] = xMaxColor.m_c[j] >> 1; + } + } + } + } + + fixDegenerateEndpoints(mode, &bestMinColor, &bestMaxColor, &xl, &xh, iscalep >> 1, 0); + + if ((pResults->m_best_overall_err == UINT64_MAX) || color_quad_u8_notequals(&bestMinColor, &pResults->m_low_endpoint) || color_quad_u8_notequals(&bestMaxColor, &pResults->m_high_endpoint) || (best_pbits[0] != pResults->m_pbits[0]) || (best_pbits[1] != pResults->m_pbits[1])) + evaluate_solution(&bestMinColor, &bestMaxColor, best_pbits, pParams, pResults); + } + else + { + const int iscale = (1 << pParams->m_comp_bits) - 1; + const float scale = (float)iscale; + + color_quad_u8 trialMinColor, trialMaxColor; + color_quad_u8_set_clamped(&trialMinColor, (int)(xl.m_c[0] * scale + .5f), (int)(xl.m_c[1] * scale + .5f), (int)(xl.m_c[2] * scale + .5f), (int)(xl.m_c[3] * scale + .5f)); + color_quad_u8_set_clamped(&trialMaxColor, (int)(xh.m_c[0] * scale + .5f), (int)(xh.m_c[1] * scale + .5f), (int)(xh.m_c[2] * scale + .5f), (int)(xh.m_c[3] * scale + .5f)); + + fixDegenerateEndpoints(mode, &trialMinColor, &trialMaxColor, &xl, &xh, iscale, 0); + + if ((pResults->m_best_overall_err == UINT64_MAX) || color_quad_u8_notequals(&trialMinColor, &pResults->m_low_endpoint) || color_quad_u8_notequals(&trialMaxColor, &pResults->m_high_endpoint)) + evaluate_solution(&trialMinColor, &trialMaxColor, pResults->m_pbits, pParams, pResults); + } + + return pResults->m_best_overall_err; +} + +void check_best_overall_error(const color_cell_compressor_params *pParams, color_cell_compressor_results *pResults) +{ + const uint32_t n = pParams->m_num_selector_weights; + + assert(n <= 32); + + color_quad_u8 colors[32]; + for (uint32_t c = 0; c < 4; c++) + { + colors[0].m_c[c] = g_astc_unquant[pParams->m_astc_endpoint_range][pResults->m_astc_low_endpoint.m_c[c]].m_unquant; + assert(colors[0].m_c[c] == g_astc_sorted_order_unquant[pParams->m_astc_endpoint_range][pResults->m_low_endpoint.m_c[c]].m_unquant); + + colors[n-1].m_c[c] = g_astc_unquant[pParams->m_astc_endpoint_range][pResults->m_astc_high_endpoint.m_c[c]].m_unquant; + assert(colors[n-1].m_c[c] == g_astc_sorted_order_unquant[pParams->m_astc_endpoint_range][pResults->m_high_endpoint.m_c[c]].m_unquant); + } + + for (uint32_t i = 1; i < pParams->m_num_selector_weights - 1; i++) + for (uint32_t c = 0; c < 4; c++) + colors[i].m_c[c] = (uint8_t)astc_interpolate(colors[0].m_c[c], colors[n - 1].m_c[c], pParams->m_pSelector_weights[i]); + + uint64_t total_err = 0; + for (uint32_t p = 0; p < pParams->m_num_pixels; p++) + { + const color_quad_u8 &orig = pParams->m_pPixels[p]; + const color_quad_u8 &packed = colors[pResults->m_pSelectors[p]]; + + if (pParams->m_has_alpha) + total_err += compute_color_distance_rgba(&orig, &packed, pParams->m_perceptual, pParams->m_weights); + else + total_err += compute_color_distance_rgb(&orig, &packed, pParams->m_perceptual, pParams->m_weights); + } + assert(total_err == pResults->m_best_overall_err); + + // HACK HACK + //if (total_err != pResults->m_best_overall_err) + // printf("X"); +} + +static bool is_solid_rgb(const color_cell_compressor_params *pParams, uint32_t &r, uint32_t &g, uint32_t &b) +{ + r = pParams->m_pPixels[0].m_c[0]; + g = pParams->m_pPixels[0].m_c[1]; + b = pParams->m_pPixels[0].m_c[2]; + + bool allSame = true; + for (uint32_t i = 1; i < pParams->m_num_pixels; i++) + { + if ((r != pParams->m_pPixels[i].m_c[0]) || (g != pParams->m_pPixels[i].m_c[1]) || (b != pParams->m_pPixels[i].m_c[2])) + { + allSame = false; + break; + } + } + + return allSame; +} + +static bool is_solid_rgba(const color_cell_compressor_params *pParams, uint32_t &r, uint32_t &g, uint32_t &b, uint32_t &a) +{ + r = pParams->m_pPixels[0].m_c[0]; + g = pParams->m_pPixels[0].m_c[1]; + b = pParams->m_pPixels[0].m_c[2]; + a = pParams->m_pPixels[0].m_c[3]; + + bool allSame = true; + for (uint32_t i = 1; i < pParams->m_num_pixels; i++) + { + if ((r != pParams->m_pPixels[i].m_c[0]) || (g != pParams->m_pPixels[i].m_c[1]) || (b != pParams->m_pPixels[i].m_c[2]) || (a != pParams->m_pPixels[i].m_c[3])) + { + allSame = false; + break; + } + } + + return allSame; +} + +uint64_t color_cell_compression(uint32_t mode, const color_cell_compressor_params *pParams, color_cell_compressor_results *pResults, const bc7enc_compress_block_params *pComp_params) +{ + if (!pParams->m_astc_endpoint_range) + { + assert((mode == 6) || (!pParams->m_has_alpha)); + } + assert(pParams->m_num_selector_weights >= 1 && pParams->m_num_selector_weights <= 32); + assert(pParams->m_pSelector_weights[0] == 0); + assert(pParams->m_pSelector_weights[pParams->m_num_selector_weights - 1] == 64); + + pResults->m_best_overall_err = UINT64_MAX; + + uint32_t cr, cg, cb, ca; + + // If the partition's colors are all the same, then just pack them as a single color. + if (!pParams->m_pForce_selectors) + { + if (mode == 1) + { + if (is_solid_rgb(pParams, cr, cg, cb)) + return pack_mode1_to_one_color(pParams, pResults, cr, cg, cb, pResults->m_pSelectors); + } + else if ((pParams->m_astc_endpoint_range == 8) && (pParams->m_num_selector_weights == 8) && (!pParams->m_has_alpha)) + { + if (is_solid_rgb(pParams, cr, cg, cb)) + return pack_astc_4bit_3bit_to_one_color(pParams, pResults, cr, cg, cb, pResults->m_pSelectors); + } + else if ((pParams->m_astc_endpoint_range == 7) && (pParams->m_num_selector_weights == 4) && (!pParams->m_has_alpha)) + { + if (is_solid_rgb(pParams, cr, cg, cb)) + return pack_astc_range7_2bit_to_one_color(pParams, pResults, cr, cg, cb, pResults->m_pSelectors); + } + else if ((pParams->m_astc_endpoint_range == 8) && (pParams->m_num_selector_weights == 4) && (pParams->m_has_alpha)) + { + if (is_solid_rgba(pParams, cr, cg, cb, ca)) + return pack_astc_4bit_2bit_to_one_color_rgba(pParams, pResults, cr, cg, cb, ca, pResults->m_pSelectors); + } + else if ((pParams->m_astc_endpoint_range == 13) && (pParams->m_num_selector_weights == 4) && (!pParams->m_has_alpha)) + { + if (is_solid_rgb(pParams, cr, cg, cb)) + return pack_astc_range13_2bit_to_one_color(pParams, pResults, cr, cg, cb, pResults->m_pSelectors); + } + else if ((pParams->m_astc_endpoint_range == 11) && (pParams->m_num_selector_weights == 32) && (!pParams->m_has_alpha)) + { + if (is_solid_rgb(pParams, cr, cg, cb)) + return pack_astc_range11_5bit_to_one_color(pParams, pResults, cr, cg, cb, pResults->m_pSelectors); + } + } + + // Compute partition's mean color and principle axis. + bc7enc_vec4F meanColor, axis; + vec4F_set_scalar(&meanColor, 0.0f); + + for (uint32_t i = 0; i < pParams->m_num_pixels; i++) + { + bc7enc_vec4F color = vec4F_from_color(&pParams->m_pPixels[i]); + meanColor = vec4F_add(&meanColor, &color); + } + + bc7enc_vec4F meanColorScaled = vec4F_mul(&meanColor, 1.0f / (float)(pParams->m_num_pixels)); + + meanColor = vec4F_mul(&meanColor, 1.0f / (float)(pParams->m_num_pixels * 255.0f)); + vec4F_saturate_in_place(&meanColor); + + if (pParams->m_has_alpha) + { + // Use incremental PCA for RGBA PCA, because it's simple. + vec4F_set_scalar(&axis, 0.0f); + for (uint32_t i = 0; i < pParams->m_num_pixels; i++) + { + bc7enc_vec4F color = vec4F_from_color(&pParams->m_pPixels[i]); + color = vec4F_sub(&color, &meanColorScaled); + bc7enc_vec4F a = vec4F_mul(&color, color.m_c[0]); + bc7enc_vec4F b = vec4F_mul(&color, color.m_c[1]); + bc7enc_vec4F c = vec4F_mul(&color, color.m_c[2]); + bc7enc_vec4F d = vec4F_mul(&color, color.m_c[3]); + bc7enc_vec4F n = i ? axis : color; + vec4F_normalize_in_place(&n); + axis.m_c[0] += vec4F_dot(&a, &n); + axis.m_c[1] += vec4F_dot(&b, &n); + axis.m_c[2] += vec4F_dot(&c, &n); + axis.m_c[3] += vec4F_dot(&d, &n); + } + vec4F_normalize_in_place(&axis); + } + else + { + // Use covar technique for RGB PCA, because it doesn't require per-pixel normalization. + float cov[6] = { 0, 0, 0, 0, 0, 0 }; + + for (uint32_t i = 0; i < pParams->m_num_pixels; i++) + { + const color_quad_u8 *pV = &pParams->m_pPixels[i]; + float r = pV->m_c[0] - meanColorScaled.m_c[0]; + float g = pV->m_c[1] - meanColorScaled.m_c[1]; + float b = pV->m_c[2] - meanColorScaled.m_c[2]; + cov[0] += r*r; cov[1] += r*g; cov[2] += r*b; cov[3] += g*g; cov[4] += g*b; cov[5] += b*b; + } + + float xr = .9f, xg = 1.0f, xb = .7f; + for (uint32_t iter = 0; iter < 3; iter++) + { + float r = xr * cov[0] + xg * cov[1] + xb * cov[2]; + float g = xr * cov[1] + xg * cov[3] + xb * cov[4]; + float b = xr * cov[2] + xg * cov[4] + xb * cov[5]; + + float m = maximumf(maximumf(fabsf(r), fabsf(g)), fabsf(b)); + if (m > 1e-10f) + { + m = 1.0f / m; + r *= m; g *= m; b *= m; + } + + xr = r; xg = g; xb = b; + } + + float len = xr * xr + xg * xg + xb * xb; + if (len < 1e-10f) + vec4F_set_scalar(&axis, 0.0f); + else + { + len = 1.0f / sqrtf(len); + xr *= len; xg *= len; xb *= len; + vec4F_set(&axis, xr, xg, xb, 0); + } + } + + if (vec4F_dot(&axis, &axis) < .5f) + { + if (pParams->m_perceptual) + vec4F_set(&axis, .213f, .715f, .072f, pParams->m_has_alpha ? .715f : 0); + else + vec4F_set(&axis, 1.0f, 1.0f, 1.0f, pParams->m_has_alpha ? 1.0f : 0); + vec4F_normalize_in_place(&axis); + } + + bc7enc_vec4F minColor, maxColor; + + float l = 1e+9f, h = -1e+9f; + + for (uint32_t i = 0; i < pParams->m_num_pixels; i++) + { + bc7enc_vec4F color = vec4F_from_color(&pParams->m_pPixels[i]); + + bc7enc_vec4F q = vec4F_sub(&color, &meanColorScaled); + float d = vec4F_dot(&q, &axis); + + l = minimumf(l, d); + h = maximumf(h, d); + } + + l *= (1.0f / 255.0f); + h *= (1.0f / 255.0f); + + bc7enc_vec4F b0 = vec4F_mul(&axis, l); + bc7enc_vec4F b1 = vec4F_mul(&axis, h); + bc7enc_vec4F c0 = vec4F_add(&meanColor, &b0); + bc7enc_vec4F c1 = vec4F_add(&meanColor, &b1); + minColor = vec4F_saturate(&c0); + maxColor = vec4F_saturate(&c1); + + bc7enc_vec4F whiteVec; + vec4F_set_scalar(&whiteVec, 1.0f); + if (vec4F_dot(&minColor, &whiteVec) > vec4F_dot(&maxColor, &whiteVec)) + { +#if 1 + std::swap(minColor.m_c[0], maxColor.m_c[0]); + std::swap(minColor.m_c[1], maxColor.m_c[1]); + std::swap(minColor.m_c[2], maxColor.m_c[2]); + std::swap(minColor.m_c[3], maxColor.m_c[3]); +#elif 0 + // Fails to compile correctly with MSVC 2019 (code generation bug) + std::swap(minColor, maxColor); +#else + // Fails with MSVC 2019 + bc7enc_vec4F temp = minColor; + minColor = maxColor; + maxColor = temp; +#endif + } + + // First find a solution using the block's PCA. + if (!find_optimal_solution(mode, minColor, maxColor, pParams, pResults)) + return 0; + + for (uint32_t i = 0; i < pComp_params->m_least_squares_passes; i++) + { + // Now try to refine the solution using least squares by computing the optimal endpoints from the current selectors. + bc7enc_vec4F xl, xh; + vec4F_set_scalar(&xl, 0.0f); + vec4F_set_scalar(&xh, 0.0f); + if (pParams->m_has_alpha) + compute_least_squares_endpoints_rgba(pParams->m_num_pixels, pResults->m_pSelectors, pParams->m_pSelector_weightsx, &xl, &xh, pParams->m_pPixels); + else + compute_least_squares_endpoints_rgb(pParams->m_num_pixels, pResults->m_pSelectors, pParams->m_pSelector_weightsx, &xl, &xh, pParams->m_pPixels); + + xl = vec4F_mul(&xl, (1.0f / 255.0f)); + xh = vec4F_mul(&xh, (1.0f / 255.0f)); + + if (!find_optimal_solution(mode, xl, xh, pParams, pResults)) + return 0; + } + + if ((!pParams->m_pForce_selectors) && (pComp_params->m_uber_level > 0)) + { + // In uber level 1, try varying the selectors a little, somewhat like cluster fit would. First try incrementing the minimum selectors, + // then try decrementing the selectrors, then try both. + uint8_t selectors_temp[16], selectors_temp1[16]; + memcpy(selectors_temp, pResults->m_pSelectors, pParams->m_num_pixels); + + const int max_selector = pParams->m_num_selector_weights - 1; + + uint32_t min_sel = 256; + uint32_t max_sel = 0; + for (uint32_t i = 0; i < pParams->m_num_pixels; i++) + { + uint32_t sel = selectors_temp[i]; + min_sel = minimumu(min_sel, sel); + max_sel = maximumu(max_sel, sel); + } + + for (uint32_t i = 0; i < pParams->m_num_pixels; i++) + { + uint32_t sel = selectors_temp[i]; + if ((sel == min_sel) && (sel < (pParams->m_num_selector_weights - 1))) + sel++; + selectors_temp1[i] = (uint8_t)sel; + } + + bc7enc_vec4F xl, xh; + vec4F_set_scalar(&xl, 0.0f); + vec4F_set_scalar(&xh, 0.0f); + if (pParams->m_has_alpha) + compute_least_squares_endpoints_rgba(pParams->m_num_pixels, selectors_temp1, pParams->m_pSelector_weightsx, &xl, &xh, pParams->m_pPixels); + else + compute_least_squares_endpoints_rgb(pParams->m_num_pixels, selectors_temp1, pParams->m_pSelector_weightsx, &xl, &xh, pParams->m_pPixels); + + xl = vec4F_mul(&xl, (1.0f / 255.0f)); + xh = vec4F_mul(&xh, (1.0f / 255.0f)); + + if (!find_optimal_solution(mode, xl, xh, pParams, pResults)) + return 0; + + for (uint32_t i = 0; i < pParams->m_num_pixels; i++) + { + uint32_t sel = selectors_temp[i]; + if ((sel == max_sel) && (sel > 0)) + sel--; + selectors_temp1[i] = (uint8_t)sel; + } + + if (pParams->m_has_alpha) + compute_least_squares_endpoints_rgba(pParams->m_num_pixels, selectors_temp1, pParams->m_pSelector_weightsx, &xl, &xh, pParams->m_pPixels); + else + compute_least_squares_endpoints_rgb(pParams->m_num_pixels, selectors_temp1, pParams->m_pSelector_weightsx, &xl, &xh, pParams->m_pPixels); + + xl = vec4F_mul(&xl, (1.0f / 255.0f)); + xh = vec4F_mul(&xh, (1.0f / 255.0f)); + + if (!find_optimal_solution(mode, xl, xh, pParams, pResults)) + return 0; + + for (uint32_t i = 0; i < pParams->m_num_pixels; i++) + { + uint32_t sel = selectors_temp[i]; + if ((sel == min_sel) && (sel < (pParams->m_num_selector_weights - 1))) + sel++; + else if ((sel == max_sel) && (sel > 0)) + sel--; + selectors_temp1[i] = (uint8_t)sel; + } + + if (pParams->m_has_alpha) + compute_least_squares_endpoints_rgba(pParams->m_num_pixels, selectors_temp1, pParams->m_pSelector_weightsx, &xl, &xh, pParams->m_pPixels); + else + compute_least_squares_endpoints_rgb(pParams->m_num_pixels, selectors_temp1, pParams->m_pSelector_weightsx, &xl, &xh, pParams->m_pPixels); + + xl = vec4F_mul(&xl, (1.0f / 255.0f)); + xh = vec4F_mul(&xh, (1.0f / 255.0f)); + + if (!find_optimal_solution(mode, xl, xh, pParams, pResults)) + return 0; + + // In uber levels 2+, try taking more advantage of endpoint extrapolation by scaling the selectors in one direction or another. + const uint32_t uber_err_thresh = (pParams->m_num_pixels * 56) >> 4; + if ((pComp_params->m_uber_level >= 2) && (pResults->m_best_overall_err > uber_err_thresh)) + { + const int Q = (pComp_params->m_uber_level >= 4) ? (pComp_params->m_uber_level - 2) : 1; + for (int ly = -Q; ly <= 1; ly++) + { + for (int hy = max_selector - 1; hy <= (max_selector + Q); hy++) + { + if ((ly == 0) && (hy == max_selector)) + continue; + + for (uint32_t i = 0; i < pParams->m_num_pixels; i++) + selectors_temp1[i] = (uint8_t)clampf(floorf((float)max_selector * ((float)selectors_temp[i] - (float)ly) / ((float)hy - (float)ly) + .5f), 0, (float)max_selector); + + //bc7enc_vec4F xl, xh; + vec4F_set_scalar(&xl, 0.0f); + vec4F_set_scalar(&xh, 0.0f); + if (pParams->m_has_alpha) + compute_least_squares_endpoints_rgba(pParams->m_num_pixels, selectors_temp1, pParams->m_pSelector_weightsx, &xl, &xh, pParams->m_pPixels); + else + compute_least_squares_endpoints_rgb(pParams->m_num_pixels, selectors_temp1, pParams->m_pSelector_weightsx, &xl, &xh, pParams->m_pPixels); + + xl = vec4F_mul(&xl, (1.0f / 255.0f)); + xh = vec4F_mul(&xh, (1.0f / 255.0f)); + + if (!find_optimal_solution(mode, xl, xh, pParams, pResults)) + return 0; + } + } + } + } + + if (!pParams->m_pForce_selectors) + { + // Try encoding the partition as a single color by using the optimal single colors tables to encode the block to its mean. + if (mode == 1) + { + color_cell_compressor_results avg_results = *pResults; + const uint32_t r = (int)(.5f + meanColor.m_c[0] * 255.0f), g = (int)(.5f + meanColor.m_c[1] * 255.0f), b = (int)(.5f + meanColor.m_c[2] * 255.0f); + uint64_t avg_err = pack_mode1_to_one_color(pParams, &avg_results, r, g, b, pResults->m_pSelectors_temp); + if (avg_err < pResults->m_best_overall_err) + { + *pResults = avg_results; + memcpy(pResults->m_pSelectors, pResults->m_pSelectors_temp, sizeof(pResults->m_pSelectors[0]) * pParams->m_num_pixels); + pResults->m_best_overall_err = avg_err; + } + } + else if ((pParams->m_astc_endpoint_range == 8) && (pParams->m_num_selector_weights == 8) && (!pParams->m_has_alpha)) + { + color_cell_compressor_results avg_results = *pResults; + const uint32_t r = (int)(.5f + meanColor.m_c[0] * 255.0f), g = (int)(.5f + meanColor.m_c[1] * 255.0f), b = (int)(.5f + meanColor.m_c[2] * 255.0f); + uint64_t avg_err = pack_astc_4bit_3bit_to_one_color(pParams, &avg_results, r, g, b, pResults->m_pSelectors_temp); + if (avg_err < pResults->m_best_overall_err) + { + *pResults = avg_results; + memcpy(pResults->m_pSelectors, pResults->m_pSelectors_temp, sizeof(pResults->m_pSelectors[0]) * pParams->m_num_pixels); + pResults->m_best_overall_err = avg_err; + } + } + else if ((pParams->m_astc_endpoint_range == 7) && (pParams->m_num_selector_weights == 4) && (!pParams->m_has_alpha)) + { + color_cell_compressor_results avg_results = *pResults; + const uint32_t r = (int)(.5f + meanColor.m_c[0] * 255.0f), g = (int)(.5f + meanColor.m_c[1] * 255.0f), b = (int)(.5f + meanColor.m_c[2] * 255.0f); + uint64_t avg_err = pack_astc_range7_2bit_to_one_color(pParams, &avg_results, r, g, b, pResults->m_pSelectors_temp); + if (avg_err < pResults->m_best_overall_err) + { + *pResults = avg_results; + memcpy(pResults->m_pSelectors, pResults->m_pSelectors_temp, sizeof(pResults->m_pSelectors[0]) * pParams->m_num_pixels); + pResults->m_best_overall_err = avg_err; + } + } + else if ((pParams->m_astc_endpoint_range == 8) && (pParams->m_num_selector_weights == 4) && (pParams->m_has_alpha)) + { + color_cell_compressor_results avg_results = *pResults; + const uint32_t r = (int)(.5f + meanColor.m_c[0] * 255.0f), g = (int)(.5f + meanColor.m_c[1] * 255.0f), b = (int)(.5f + meanColor.m_c[2] * 255.0f), a = (int)(.5f + meanColor.m_c[3] * 255.0f); + uint64_t avg_err = pack_astc_4bit_2bit_to_one_color_rgba(pParams, &avg_results, r, g, b, a, pResults->m_pSelectors_temp); + if (avg_err < pResults->m_best_overall_err) + { + *pResults = avg_results; + memcpy(pResults->m_pSelectors, pResults->m_pSelectors_temp, sizeof(pResults->m_pSelectors[0]) * pParams->m_num_pixels); + pResults->m_best_overall_err = avg_err; + } + } + else if ((pParams->m_astc_endpoint_range == 13) && (pParams->m_num_selector_weights == 4) && (!pParams->m_has_alpha)) + { + color_cell_compressor_results avg_results = *pResults; + const uint32_t r = (int)(.5f + meanColor.m_c[0] * 255.0f), g = (int)(.5f + meanColor.m_c[1] * 255.0f), b = (int)(.5f + meanColor.m_c[2] * 255.0f); + uint64_t avg_err = pack_astc_range13_2bit_to_one_color(pParams, &avg_results, r, g, b, pResults->m_pSelectors_temp); + if (avg_err < pResults->m_best_overall_err) + { + *pResults = avg_results; + memcpy(pResults->m_pSelectors, pResults->m_pSelectors_temp, sizeof(pResults->m_pSelectors[0]) * pParams->m_num_pixels); + pResults->m_best_overall_err = avg_err; + } + } + else if ((pParams->m_astc_endpoint_range == 11) && (pParams->m_num_selector_weights == 32) && (!pParams->m_has_alpha)) + { + color_cell_compressor_results avg_results = *pResults; + const uint32_t r = (int)(.5f + meanColor.m_c[0] * 255.0f), g = (int)(.5f + meanColor.m_c[1] * 255.0f), b = (int)(.5f + meanColor.m_c[2] * 255.0f); + uint64_t avg_err = pack_astc_range11_5bit_to_one_color(pParams, &avg_results, r, g, b, pResults->m_pSelectors_temp); + if (avg_err < pResults->m_best_overall_err) + { + *pResults = avg_results; + memcpy(pResults->m_pSelectors, pResults->m_pSelectors_temp, sizeof(pResults->m_pSelectors[0]) * pParams->m_num_pixels); + pResults->m_best_overall_err = avg_err; + } + } + } + +#if BC7ENC_CHECK_OVERALL_ERROR + check_best_overall_error(pParams, pResults); +#endif + + return pResults->m_best_overall_err; +} + +uint64_t color_cell_compression_est_astc( + uint32_t num_weights, uint32_t num_comps, const uint32_t *pWeight_table, + uint32_t num_pixels, const color_quad_u8* pPixels, + uint64_t best_err_so_far, const uint32_t weights[4]) +{ + assert(num_comps == 3 || num_comps == 4); + assert(num_weights >= 1 && num_weights <= 32); + assert(pWeight_table[0] == 0 && pWeight_table[num_weights - 1] == 64); + + // Find RGB bounds as an approximation of the block's principle axis + uint32_t lr = 255, lg = 255, lb = 255, la = 255; + uint32_t hr = 0, hg = 0, hb = 0, ha = 0; + if (num_comps == 4) + { + for (uint32_t i = 0; i < num_pixels; i++) + { + const color_quad_u8* pC = &pPixels[i]; + if (pC->m_c[0] < lr) lr = pC->m_c[0]; + if (pC->m_c[1] < lg) lg = pC->m_c[1]; + if (pC->m_c[2] < lb) lb = pC->m_c[2]; + if (pC->m_c[3] < la) la = pC->m_c[3]; + + if (pC->m_c[0] > hr) hr = pC->m_c[0]; + if (pC->m_c[1] > hg) hg = pC->m_c[1]; + if (pC->m_c[2] > hb) hb = pC->m_c[2]; + if (pC->m_c[3] > ha) ha = pC->m_c[3]; + } + } + else + { + for (uint32_t i = 0; i < num_pixels; i++) + { + const color_quad_u8* pC = &pPixels[i]; + if (pC->m_c[0] < lr) lr = pC->m_c[0]; + if (pC->m_c[1] < lg) lg = pC->m_c[1]; + if (pC->m_c[2] < lb) lb = pC->m_c[2]; + + if (pC->m_c[0] > hr) hr = pC->m_c[0]; + if (pC->m_c[1] > hg) hg = pC->m_c[1]; + if (pC->m_c[2] > hb) hb = pC->m_c[2]; + } + la = 255; + ha = 255; + } + + color_quad_u8 lowColor, highColor; + color_quad_u8_set(&lowColor, lr, lg, lb, la); + color_quad_u8_set(&highColor, hr, hg, hb, ha); + + // Place endpoints at bbox diagonals and compute interpolated colors + color_quad_u8 weightedColors[32]; + + weightedColors[0] = lowColor; + weightedColors[num_weights - 1] = highColor; + for (uint32_t i = 1; i < (num_weights - 1); i++) + { + weightedColors[i].m_c[0] = (uint8_t)astc_interpolate(lowColor.m_c[0], highColor.m_c[0], pWeight_table[i]); + weightedColors[i].m_c[1] = (uint8_t)astc_interpolate(lowColor.m_c[1], highColor.m_c[1], pWeight_table[i]); + weightedColors[i].m_c[2] = (uint8_t)astc_interpolate(lowColor.m_c[2], highColor.m_c[2], pWeight_table[i]); + weightedColors[i].m_c[3] = (num_comps == 4) ? (uint8_t)astc_interpolate(lowColor.m_c[3], highColor.m_c[3], pWeight_table[i]) : 255; + } + + // Compute dots and thresholds + const int ar = highColor.m_c[0] - lowColor.m_c[0]; + const int ag = highColor.m_c[1] - lowColor.m_c[1]; + const int ab = highColor.m_c[2] - lowColor.m_c[2]; + const int aa = highColor.m_c[3] - lowColor.m_c[3]; + + int dots[32]; + if (num_comps == 4) + { + for (uint32_t i = 0; i < num_weights; i++) + dots[i] = weightedColors[i].m_c[0] * ar + weightedColors[i].m_c[1] * ag + weightedColors[i].m_c[2] * ab + weightedColors[i].m_c[3] * aa; + } + else + { + assert(aa == 0); + for (uint32_t i = 0; i < num_weights; i++) + dots[i] = weightedColors[i].m_c[0] * ar + weightedColors[i].m_c[1] * ag + weightedColors[i].m_c[2] * ab; + } + + int thresh[32 - 1]; + for (uint32_t i = 0; i < (num_weights - 1); i++) + thresh[i] = (dots[i] + dots[i + 1] + 1) >> 1; + + uint64_t total_err = 0; + if ((weights[0] | weights[1] | weights[2] | weights[3]) == 1) + { + if (num_comps == 4) + { + for (uint32_t i = 0; i < num_pixels; i++) + { + const color_quad_u8* pC = &pPixels[i]; + + int d = ar * pC->m_c[0] + ag * pC->m_c[1] + ab * pC->m_c[2] + aa * pC->m_c[3]; + + // Find approximate selector + uint32_t s = 0; + for (int j = num_weights - 2; j >= 0; j--) + { + if (d >= thresh[j]) + { + s = j + 1; + break; + } + } + + // Compute error + const color_quad_u8* pE1 = &weightedColors[s]; + + int dr = (int)pE1->m_c[0] - (int)pC->m_c[0]; + int dg = (int)pE1->m_c[1] - (int)pC->m_c[1]; + int db = (int)pE1->m_c[2] - (int)pC->m_c[2]; + int da = (int)pE1->m_c[3] - (int)pC->m_c[3]; + + total_err += (dr * dr) + (dg * dg) + (db * db) + (da * da); + if (total_err > best_err_so_far) + break; + } + } + else + { + for (uint32_t i = 0; i < num_pixels; i++) + { + const color_quad_u8* pC = &pPixels[i]; + + int d = ar * pC->m_c[0] + ag * pC->m_c[1] + ab * pC->m_c[2]; + + // Find approximate selector + uint32_t s = 0; + for (int j = num_weights - 2; j >= 0; j--) + { + if (d >= thresh[j]) + { + s = j + 1; + break; + } + } + + // Compute error + const color_quad_u8* pE1 = &weightedColors[s]; + + int dr = (int)pE1->m_c[0] - (int)pC->m_c[0]; + int dg = (int)pE1->m_c[1] - (int)pC->m_c[1]; + int db = (int)pE1->m_c[2] - (int)pC->m_c[2]; + + total_err += (dr * dr) + (dg * dg) + (db * db); + if (total_err > best_err_so_far) + break; + } + } + } + else + { + if (num_comps == 4) + { + for (uint32_t i = 0; i < num_pixels; i++) + { + const color_quad_u8* pC = &pPixels[i]; + + int d = ar * pC->m_c[0] + ag * pC->m_c[1] + ab * pC->m_c[2] + aa * pC->m_c[3]; + + // Find approximate selector + uint32_t s = 0; + for (int j = num_weights - 2; j >= 0; j--) + { + if (d >= thresh[j]) + { + s = j + 1; + break; + } + } + + // Compute error + const color_quad_u8* pE1 = &weightedColors[s]; + + int dr = (int)pE1->m_c[0] - (int)pC->m_c[0]; + int dg = (int)pE1->m_c[1] - (int)pC->m_c[1]; + int db = (int)pE1->m_c[2] - (int)pC->m_c[2]; + int da = (int)pE1->m_c[3] - (int)pC->m_c[3]; + + total_err += weights[0] * (dr * dr) + weights[1] * (dg * dg) + weights[2] * (db * db) + weights[3] * (da * da); + if (total_err > best_err_so_far) + break; + } + } + else + { + for (uint32_t i = 0; i < num_pixels; i++) + { + const color_quad_u8* pC = &pPixels[i]; + + int d = ar * pC->m_c[0] + ag * pC->m_c[1] + ab * pC->m_c[2]; + + // Find approximate selector + uint32_t s = 0; + for (int j = num_weights - 2; j >= 0; j--) + { + if (d >= thresh[j]) + { + s = j + 1; + break; + } + } + + // Compute error + const color_quad_u8* pE1 = &weightedColors[s]; + + int dr = (int)pE1->m_c[0] - (int)pC->m_c[0]; + int dg = (int)pE1->m_c[1] - (int)pC->m_c[1]; + int db = (int)pE1->m_c[2] - (int)pC->m_c[2]; + + total_err += weights[0] * (dr * dr) + weights[1] * (dg * dg) + weights[2] * (db * db); + if (total_err > best_err_so_far) + break; + } + } + } + + return total_err; +} + +} // namespace basisu diff --git a/basisu_bc7enc.h b/basisu_bc7enc.h new file mode 100644 index 0000000..0d7a090 --- /dev/null +++ b/basisu_bc7enc.h @@ -0,0 +1,131 @@ +// File: basisu_bc7enc.h +// Copyright (C) 2019-2020 Binomial LLC. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +#include "basisu_enc.h" +#include "transcoder/basisu_transcoder_uastc.h" + +namespace basisu +{ + +#define BC7ENC_MAX_PARTITIONS1 (64) +#define BC7ENC_MAX_UBER_LEVEL (4) + + typedef uint8_t bc7enc_bool; + +#define BC7ENC_TRUE (1) +#define BC7ENC_FALSE (0) + + typedef struct { float m_c[4]; } bc7enc_vec4F; + + extern const float g_bc7_weights1x[2 * 4]; + extern const float g_bc7_weights2x[4 * 4]; + extern const float g_bc7_weights3x[8 * 4]; + extern const float g_bc7_weights4x[16 * 4]; + extern const float g_astc_weights4x[16 * 4]; + extern const float g_astc_weights5x[32 * 4]; + extern const float g_astc_weights_3levelsx[3 * 4]; + + extern basist::astc_quant_bin g_astc_sorted_order_unquant[basist::BC7ENC_TOTAL_ASTC_RANGES][256]; // [sorted unquantized order] + + struct color_cell_compressor_params + { + uint32_t m_num_pixels; + const basist::color_quad_u8* m_pPixels; + + uint32_t m_num_selector_weights; + const uint32_t* m_pSelector_weights; + + const bc7enc_vec4F* m_pSelector_weightsx; + uint32_t m_comp_bits; + + const uint8_t *m_pForce_selectors; + + // Non-zero m_astc_endpoint_range enables ASTC mode. m_comp_bits and m_has_pbits are always false. We only support 2, 3, or 4 bit weight encodings. + uint32_t m_astc_endpoint_range; + + uint32_t m_weights[4]; + bc7enc_bool m_has_alpha; + bc7enc_bool m_has_pbits; + bc7enc_bool m_endpoints_share_pbit; + bc7enc_bool m_perceptual; + }; + + struct color_cell_compressor_results + { + uint64_t m_best_overall_err; + basist::color_quad_u8 m_low_endpoint; + basist::color_quad_u8 m_high_endpoint; + uint32_t m_pbits[2]; + uint8_t* m_pSelectors; + uint8_t* m_pSelectors_temp; + + // Encoded ASTC indices, if ASTC mode is enabled + basist::color_quad_u8 m_astc_low_endpoint; + basist::color_quad_u8 m_astc_high_endpoint; + }; + + struct bc7enc_compress_block_params + { + // m_max_partitions_mode1 may range from 0 (disables mode 1) to BC7ENC_MAX_PARTITIONS1. The higher this value, the slower the compressor, but the higher the quality. + uint32_t m_max_partitions_mode1; + + // Relative RGBA or YCbCrA weights. + uint32_t m_weights[4]; + + // m_uber_level may range from 0 to BC7ENC_MAX_UBER_LEVEL. The higher this value, the slower the compressor, but the higher the quality. + uint32_t m_uber_level; + + // If m_perceptual is true, colorspace error is computed in YCbCr space, otherwise RGB. + bc7enc_bool m_perceptual; + + uint32_t m_least_squares_passes; + }; + + uint64_t color_cell_compression(uint32_t mode, const color_cell_compressor_params* pParams, color_cell_compressor_results* pResults, const bc7enc_compress_block_params* pComp_params); + + uint64_t color_cell_compression_est_astc( + uint32_t num_weights, uint32_t num_comps, const uint32_t* pWeight_table, + uint32_t num_pixels, const basist::color_quad_u8* pPixels, + uint64_t best_err_so_far, const uint32_t weights[4]); + + inline void bc7enc_compress_block_params_init_linear_weights(bc7enc_compress_block_params* p) + { + p->m_perceptual = BC7ENC_FALSE; + p->m_weights[0] = 1; + p->m_weights[1] = 1; + p->m_weights[2] = 1; + p->m_weights[3] = 1; + } + + inline void bc7enc_compress_block_params_init_perceptual_weights(bc7enc_compress_block_params* p) + { + p->m_perceptual = BC7ENC_TRUE; + p->m_weights[0] = 128; + p->m_weights[1] = 64; + p->m_weights[2] = 16; + p->m_weights[3] = 32; + } + + inline void bc7enc_compress_block_params_init(bc7enc_compress_block_params* p) + { + p->m_max_partitions_mode1 = BC7ENC_MAX_PARTITIONS1; + p->m_least_squares_passes = 1; + p->m_uber_level = 0; + bc7enc_compress_block_params_init_perceptual_weights(p); + } + + // bc7enc_compress_block_init() MUST be called before calling bc7enc_compress_block() (or you'll get artifacts). + void bc7enc_compress_block_init(); + +} // namespace basisu From 7779f320b0248c066c7161ef90f8f15ae32ff93c Mon Sep 17 00:00:00 2001 From: Rich Geldreich Date: Fri, 20 Mar 2020 01:59:13 -0400 Subject: [PATCH 10/16] new files --- apg_bmp.c | 541 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ apg_bmp.h | 123 +++++++++++++ 2 files changed, 664 insertions(+) create mode 100644 apg_bmp.c create mode 100644 apg_bmp.h diff --git a/apg_bmp.c b/apg_bmp.c new file mode 100644 index 0000000..759309f --- /dev/null +++ b/apg_bmp.c @@ -0,0 +1,541 @@ +/* +BMP File Reader/Writer Implementation +Anton Gerdelan +Version: 3 +Licence: see apg_bmp.h +C99 +*/ + +#ifdef _MSC_VER +#define _CRT_SECURE_NO_WARNINGS 1 +#endif + +#include "apg_bmp.h" +#include +#include +#include +#include +#include +#include + +/* Maximum pixel dimensions of width or height of an image. Should accommodate max used in graphics APIs. + NOTE: 65536*65536 is the biggest number storable in 32 bits. + This needs to be multiplied by n_channels so actual memory indices are not uint32 but size_t to avoid overflow. + Note this will crash stb_image_write et al at maximum size which use 32bits, so reduce max size to accom. */ +#define _BMP_MAX_DIMS 65536 +#define _BMP_FILE_HDR_SZ 14 +#define _BMP_MIN_DIB_HDR_SZ 40 +#define _BMP_MIN_HDR_SZ ( _BMP_FILE_HDR_SZ + _BMP_MIN_DIB_HDR_SZ ) +#define _BMP_MAX_IMAGE_FILE_SIZE (1024ULL*1024ULL*1024ULL) + +#pragma pack( push, 1 ) // supported on GCC in addition to individual packing attribs +/* All BMP files, regardless of type, start with this file header */ +typedef struct _bmp_file_header_t { + char file_type[2]; + uint32_t file_sz; + uint16_t reserved1; + uint16_t reserved2; + uint32_t image_data_offset; +} _bmp_file_header_t; + +/* Following the file header is the BMP type header. this is the most commonly used format */ +typedef struct _bmp_dib_BITMAPINFOHEADER_t { + uint32_t this_header_sz; + int32_t w; // in older headers w & h these are shorts and may be unsigned + int32_t h; // + uint16_t n_planes; // must be 1 + uint16_t bpp; // bits per pixel. 1,4,8,16,24,32. + uint32_t compression_method; // 16 and 32-bit images must have a value of 3 here + uint32_t image_uncompressed_sz; // not consistently used in the wild, so ignored here. + int32_t horiz_pixels_per_meter; // not used. + int32_t vert_pixels_per_meter; // not used. + uint32_t n_colours_in_palette; // + uint32_t n_important_colours; // not used. + /* NOTE(Anton) a DIB header may end here at 40-bytes. be careful using sizeof() */ + /* if 'compression' value, above, is set to 3 ie the image is 16 or 32-bit, then these colour channel masks follow the headers. + these are big-endian order bit masks to assign bits of each pixel to different colours. bits used must be contiguous and not overlap. */ + uint32_t bitmask_r; + uint32_t bitmask_g; + uint32_t bitmask_b; +} _bmp_dib_BITMAPINFOHEADER_t; +#pragma pack( pop ) + +typedef enum _bmp_compression_t { + BI_RGB = 0, + BI_RLE8 = 1, + BI_RLE4 = 2, + BI_BITFIELDS = 3, + BI_JPEG = 4, + BI_PNG = 5, + BI_ALPHABITFIELDS = 6, + BI_CMYK = 11, + BI_CMYKRLE8 = 12, + BI_CMYRLE4 = 13 +} _bmp_compression_t; + +/* convenience struct and file->memory function */ +typedef struct _entire_file_t { + void* data; + size_t sz; +} _entire_file_t; + +/* +RETURNS +- true on success. record->data is allocated memory and must be freed by the caller. +- false on any error. Any allocated memory is freed if false is returned */ +static bool _read_entire_file( const char* filename, _entire_file_t* record ) { + FILE* fp = fopen( filename, "rb" ); + if ( !fp ) { return false; } + fseek( fp, 0L, SEEK_END ); + record->sz = (size_t)ftell( fp ); + + // Immediately bail on anything larger than _BMP_MAX_IMAGE_FILE_SIZE. + if (record->sz > _BMP_MAX_IMAGE_FILE_SIZE) { + fclose( fp ); + return false; + } + + record->data = malloc( record->sz ); + if ( !record->data ) { + fclose( fp ); + return false; + } + rewind( fp ); + size_t nr = fread( record->data, record->sz, 1, fp ); + fclose( fp ); + if ( 1 != nr ) { return false; } + return true; +} + +static bool _validate_file_hdr( _bmp_file_header_t* file_hdr_ptr, size_t file_sz ) { + if ( !file_hdr_ptr ) { return false; } + if ( file_hdr_ptr->file_type[0] != 'B' || file_hdr_ptr->file_type[1] != 'M' ) { return false; } + if ( file_hdr_ptr->image_data_offset > file_sz ) { return false; } + return true; +} + +static bool _validate_dib_hdr( _bmp_dib_BITMAPINFOHEADER_t* dib_hdr_ptr, size_t file_sz ) { + if ( !dib_hdr_ptr ) { return false; } + if ( _BMP_FILE_HDR_SZ + dib_hdr_ptr->this_header_sz > file_sz ) { return false; } + if ( ( 32 == dib_hdr_ptr->bpp || 16 == dib_hdr_ptr->bpp ) && ( BI_BITFIELDS != dib_hdr_ptr->compression_method && BI_ALPHABITFIELDS != dib_hdr_ptr->compression_method ) ) { + return false; + } + if ( BI_RGB != dib_hdr_ptr->compression_method && BI_BITFIELDS != dib_hdr_ptr->compression_method && BI_ALPHABITFIELDS != dib_hdr_ptr->compression_method ) { + return false; + } + // NOTE(Anton) using abs() in the if-statement was blowing up on large negative numbers. switched to labs() + if ( 0 == dib_hdr_ptr->w || 0 == dib_hdr_ptr->h || labs( dib_hdr_ptr->w ) > _BMP_MAX_DIMS || labs( dib_hdr_ptr->h ) > _BMP_MAX_DIMS ) { return false; } + + /* NOTE(Anton) if images reliably used n_colours_in_palette we could have done a palette/file size integrity check here. + because some always set 0 then we have to check every palette indexing as we read them */ + return true; +} + +/* NOTE(Anton) this could have ifdef branches on different compilers for the intrinsics versions for perf */ +static uint32_t _bitscan( uint32_t dword ) { + for ( uint32_t i = 0; i < 32; i++ ) { + if ( 1 & dword ) { return i; } + dword = dword >> 1; + } + return (uint32_t)-1; +} + +unsigned char* apg_bmp_read( const char* filename, int* w, int* h, unsigned int* n_chans ) { + if ( !filename || !w || !h || !n_chans ) { return NULL; } + + // read in the whole file into memory first - much faster than parsing on-the-fly + _entire_file_t record; + if ( !_read_entire_file( filename, &record ) ) { return NULL; } + if ( record.sz < _BMP_MIN_HDR_SZ ) { + free( record.data ); + return NULL; + } + + // grab and validate the first, file, header + _bmp_file_header_t* file_hdr_ptr = (_bmp_file_header_t*)record.data; + if ( !_validate_file_hdr( file_hdr_ptr, record.sz ) ) { + free( record.data ); + return NULL; + } + + // grad and validate the second, DIB, header + _bmp_dib_BITMAPINFOHEADER_t* dib_hdr_ptr = (_bmp_dib_BITMAPINFOHEADER_t*)( (uint8_t*)record.data + _BMP_FILE_HDR_SZ ); + if ( !_validate_dib_hdr( dib_hdr_ptr, record.sz ) ) { + free( record.data ); + return NULL; + } + + // bitmaps can have negative dims to indicate the image should be flipped + uint32_t width = *w = abs( dib_hdr_ptr->w ); + uint32_t height = *h = abs( dib_hdr_ptr->h ); + + // TODO(Anton) flip image memory at the end if this is true. because doing it per row was making me write bugs. + // bool vertically_flip = dib_hdr_ptr->h > 0 ? false : true; + + // channel count and palette are not well defined in the header so we make a good guess here + uint32_t n_dst_chans = 3, n_src_chans = 3; + bool has_palette = false; + switch ( dib_hdr_ptr->bpp ) { + case 32: n_dst_chans = n_src_chans = 4; break; // technically can be RGB but not supported + case 24: n_dst_chans = n_src_chans = 3; break; // technically can be RGBA but not supported + case 8: // seems to always use a BGR0 palette, even for greyscale + n_dst_chans = 3; + has_palette = true; + n_src_chans = 1; + break; + case 4: // always has a palette - needed for a MS-saved BMP + n_dst_chans = 3; + has_palette = true; + n_src_chans = 1; + break; + case 1: // 1-bpp means the palette has 3 colour channels with 2 colours i.e. monochrome but not always black & white + n_dst_chans = 3; + has_palette = true; + n_src_chans = 1; + break; + default: // this includes 2bpp and 16bpp + free( record.data ); + return NULL; + } // endswitch + *n_chans = n_dst_chans; + // NOTE(Anton) some image formats are not allowed a palette - could check for a bad header spec here also + if ( dib_hdr_ptr->n_colours_in_palette > 0 ) { has_palette = true; } + +#ifdef APG_BMP_DEBUG_OUTPUT + printf( "apg_bmp_debug: reading image\n|-filename `%s`\n|-dims %ux%u pixels\n|-bpp %u\n|-n_src_chans %u\n|-n_dst_chans %u\n", filename, *w, *h, + dib_hdr_ptr->bpp, n_src_chans, n_dst_chans ); +#endif + + uint32_t palette_offset = _BMP_FILE_HDR_SZ + dib_hdr_ptr->this_header_sz; + bool has_bitmasks = false; + if ( BI_BITFIELDS == dib_hdr_ptr->compression_method || BI_ALPHABITFIELDS == dib_hdr_ptr->compression_method ) { + has_bitmasks = true; + palette_offset += 12; + } + if ( palette_offset > record.sz ) { + free( record.data ); + return NULL; + } + + // work out if any padding how much to skip at end of each row + uint32_t unpadded_row_sz = width * n_src_chans; + // bit-encoded palette indices have different padding properties + if ( 4 == dib_hdr_ptr->bpp ) { + unpadded_row_sz = width % 2 > 0 ? width / 2 + 1 : width / 2; // find how many whole bytes required for this bit width + } + if ( 1 == dib_hdr_ptr->bpp ) { + unpadded_row_sz = width % 8 > 0 ? width / 8 + 1 : width / 8; // find how many whole bytes required for this bit width + } + uint32_t row_padding_sz = 0 == unpadded_row_sz % 4 ? 0 : 4 - ( unpadded_row_sz % 4 ); // NOTE(Anton) didn't expect operator precedence of - over % + + // another file size integrity check: partially validate source image data size + // 'image_data_offset' is by row padded to 4 bytes and is either colour data or palette indices. + if ( file_hdr_ptr->image_data_offset + ( unpadded_row_sz + row_padding_sz ) * height > record.sz ) { + free( record.data ); + return NULL; + } + + // find which bit number each colour channel starts at, so we can separate colours out + uint32_t bitshift_rgba[4] = {0, 0, 0, 0}; // NOTE(Anton) noticed this was int and not uint32_t so changed it. 17 Mar 2020 + uint32_t bitmask_a = 0; + if ( has_bitmasks ) { + bitmask_a = ~( dib_hdr_ptr->bitmask_r | dib_hdr_ptr->bitmask_g | dib_hdr_ptr->bitmask_b ); + bitshift_rgba[0] = _bitscan( dib_hdr_ptr->bitmask_r ); + bitshift_rgba[1] = _bitscan( dib_hdr_ptr->bitmask_g ); + bitshift_rgba[2] = _bitscan( dib_hdr_ptr->bitmask_b ); + bitshift_rgba[3] = _bitscan( bitmask_a ); + } + + // allocate memory for the output pixels block. cast to size_t in case width and height are both the max of 65536 and n_dst_chans > 1 + unsigned char* dst_img_ptr = malloc( (size_t)width * (size_t)height * (size_t)n_dst_chans ); + if ( !dst_img_ptr ) { + free( record.data ); + return NULL; + } + + uint8_t* palette_data_ptr = (uint8_t*)record.data + palette_offset; + uint8_t* src_img_ptr = (uint8_t*)record.data + file_hdr_ptr->image_data_offset; + size_t dst_stride_sz = width * n_dst_chans; + + // == 32-bpp -> 32-bit RGBA. == 32-bit and 16-bit require bitmasks + if ( 32 == dib_hdr_ptr->bpp ) { + // check source image has enough data in it to read from + if ( (size_t)file_hdr_ptr->image_data_offset + (size_t)height * (size_t)width * (size_t)n_src_chans > record.sz ) { + free( record.data ); + free( dst_img_ptr ); + return NULL; + } + size_t src_byte_idx = 0; + for ( uint32_t r = 0; r < height; r++ ) { + size_t dst_pixels_idx = r * dst_stride_sz; + for ( uint32_t c = 0; c < width; c++ ) { + uint32_t pixel; + memcpy( &pixel, &src_img_ptr[src_byte_idx], 4 ); + // NOTE(Anton) the below assumes 32-bits is always RGBA 1 byte per channel. 10,10,10 RGB exists though and isn't handled. + dst_img_ptr[dst_pixels_idx++] = ( uint8_t )( ( pixel & dib_hdr_ptr->bitmask_r ) >> bitshift_rgba[0] ); + dst_img_ptr[dst_pixels_idx++] = ( uint8_t )( ( pixel & dib_hdr_ptr->bitmask_g ) >> bitshift_rgba[1] ); + dst_img_ptr[dst_pixels_idx++] = ( uint8_t )( ( pixel & dib_hdr_ptr->bitmask_b ) >> bitshift_rgba[2] ); + dst_img_ptr[dst_pixels_idx++] = ( uint8_t )( ( pixel & bitmask_a ) >> bitshift_rgba[3] ); + src_byte_idx += 4; + } + src_byte_idx += row_padding_sz; + } + + // == 8-bpp -> 24-bit RGB == + } else if ( 8 == dib_hdr_ptr->bpp && has_palette ) { + // validate indices (body of image data) fits in file + if ( file_hdr_ptr->image_data_offset + height * width > record.sz ) { + free( record.data ); + free( dst_img_ptr ); + return NULL; + } + size_t src_byte_idx = 0; + for ( uint32_t r = 0; r < height; r++ ) { + size_t dst_pixels_idx = ( height - 1 - r ) * dst_stride_sz; + for ( uint32_t c = 0; c < width; c++ ) { + // "most palettes are 4 bytes in RGB0 order but 3 for..." - it was actually BRG0 in old images -- Anton + uint8_t index = src_img_ptr[src_byte_idx]; // 8-bit index value per pixel + + if ( palette_offset + index * 4 + 2 >= record.sz ) { + free( record.data ); + return dst_img_ptr; + } + dst_img_ptr[dst_pixels_idx++] = palette_data_ptr[index * 4 + 2]; + dst_img_ptr[dst_pixels_idx++] = palette_data_ptr[index * 4 + 1]; + dst_img_ptr[dst_pixels_idx++] = palette_data_ptr[index * 4 + 0]; + src_byte_idx++; + } + src_byte_idx += row_padding_sz; + } + + // == 4-bpp (16-colour) -> 24-bit RGB == + } else if ( 4 == dib_hdr_ptr->bpp && has_palette ) { + size_t src_byte_idx = 0; + for ( uint32_t r = 0; r < height; r++ ) { + size_t dst_pixels_idx = ( height - 1 - r ) * dst_stride_sz; + for ( uint32_t c = 0; c < width; c++ ) { + if ( file_hdr_ptr->image_data_offset + src_byte_idx > record.sz ) { + free( record.data ); + free( dst_img_ptr ); + return NULL; + } + // handle 2 pixels at a time + uint8_t pixel_duo = src_img_ptr[src_byte_idx]; + uint8_t a_index = ( 0xFF & pixel_duo ) >> 4; + uint8_t b_index = 0xF & pixel_duo; + + if ( palette_offset + a_index * 4 + 2 >= record.sz ) { // invalid src image + free( record.data ); + return dst_img_ptr; + } + if ( dst_pixels_idx + 3 > width * height * n_dst_chans ) { // done + free( record.data ); + return dst_img_ptr; + } + dst_img_ptr[dst_pixels_idx++] = palette_data_ptr[a_index * 4 + 2]; + dst_img_ptr[dst_pixels_idx++] = palette_data_ptr[a_index * 4 + 1]; + dst_img_ptr[dst_pixels_idx++] = palette_data_ptr[a_index * 4 + 0]; + if ( ++c >= width ) { // advance a column + c = 0; + r++; + if ( r >= height ) { // done. no need to get second pixel. eg a 1x1 pixel image. + free( record.data ); + return dst_img_ptr; + } + dst_pixels_idx = ( height - 1 - r ) * dst_stride_sz; + } + + if ( palette_offset + b_index * 4 + 2 >= record.sz ) { // invalid src image + free( record.data ); + return dst_img_ptr; + } + if ( dst_pixels_idx + 3 > width * height * n_dst_chans ) { // done. probably redundant check since checking r >= height. + free( record.data ); + return dst_img_ptr; + } + dst_img_ptr[dst_pixels_idx++] = palette_data_ptr[b_index * 4 + 2]; + dst_img_ptr[dst_pixels_idx++] = palette_data_ptr[b_index * 4 + 1]; + dst_img_ptr[dst_pixels_idx++] = palette_data_ptr[b_index * 4 + 0]; + src_byte_idx++; + } + src_byte_idx += row_padding_sz; + } + + // == 1-bpp -> 24-bit RGB == + } else if ( 1 == dib_hdr_ptr->bpp && has_palette ) { + /* encoding method for monochrome is not well documented. + a 2x2 pixel image is stored as 4 1-bit palette indexes + the palette is stored as any 2 RGB0 colours (not necessarily B&W) + so for an image with indexes like so: + 1 1 + 0 1 + it is bit-encoded as follows, starting at MSB: + 01000000 00000000 00000000 00000000 (first byte val 64) + 11000000 00000000 00000000 00000000 (first byte val 192) + data is still split by row and each row padded to 4 byte multiples + */ + size_t src_byte_idx = 0; + for ( uint32_t r = 0; r < height; r++ ) { + uint8_t bit_idx = 0; // used in monochrome + size_t dst_pixels_idx = ( height - 1 - r ) * dst_stride_sz; + for ( uint32_t c = 0; c < width; c++ ) { + if ( 8 == bit_idx ) { // start reading from the next byte + src_byte_idx++; + bit_idx = 0; + } + if ( file_hdr_ptr->image_data_offset + src_byte_idx > record.sz ) { + free( record.data ); + return dst_img_ptr; + } + uint8_t pixel_oct = src_img_ptr[src_byte_idx]; + uint8_t bit = 128 >> bit_idx; + uint8_t masked = pixel_oct & bit; + uint8_t palette_idx = masked > 0 ? 1 : 0; + + if ( palette_offset + palette_idx * 4 + 2 >= record.sz ) { + free( record.data ); + return dst_img_ptr; + } + dst_img_ptr[dst_pixels_idx++] = palette_data_ptr[palette_idx * 4 + 2]; + dst_img_ptr[dst_pixels_idx++] = palette_data_ptr[palette_idx * 4 + 1]; + dst_img_ptr[dst_pixels_idx++] = palette_data_ptr[palette_idx * 4 + 0]; + bit_idx++; + } + src_byte_idx += ( row_padding_sz + 1 ); // 1bpp is special here + } + + // == 24-bpp -> 24-bit RGB == (but also should handle some other n_chans cases) + } else { + // NOTE(Anton) this only supports 1 byte per channel + if ( file_hdr_ptr->image_data_offset + height * width * n_dst_chans > record.sz ) { + free( record.data ); + free( dst_img_ptr ); + return NULL; + } + size_t src_byte_idx = 0; + for ( uint32_t r = 0; r < height; r++ ) { + size_t dst_pixels_idx = ( height - 1 - r ) * dst_stride_sz; + for ( uint32_t c = 0; c < width; c++ ) { + // re-orders from BGR to RGB + if ( n_dst_chans > 3 ) { dst_img_ptr[dst_pixels_idx++] = src_img_ptr[src_byte_idx + 3]; } + if ( n_dst_chans > 2 ) { dst_img_ptr[dst_pixels_idx++] = src_img_ptr[src_byte_idx + 2]; } + if ( n_dst_chans > 1 ) { dst_img_ptr[dst_pixels_idx++] = src_img_ptr[src_byte_idx + 1]; } + dst_img_ptr[dst_pixels_idx++] = src_img_ptr[src_byte_idx]; + src_byte_idx += n_src_chans; + } + src_byte_idx += row_padding_sz; + } + } // endif bpp + + free( record.data ); + return dst_img_ptr; +} + +void apg_bmp_free( unsigned char* pixels_ptr ) { + if ( !pixels_ptr ) { return; } + free( pixels_ptr ); +} + +unsigned int apg_bmp_write( const char* filename, unsigned char* pixels_ptr, int w, int h, unsigned int n_chans ) { + if ( !filename || !pixels_ptr ) { return 0; } + if ( 0 == w || 0 == h ) { return 0; } + if ( labs( w ) > _BMP_MAX_DIMS || labs( h ) > _BMP_MAX_DIMS ) { return 0; } + if ( n_chans != 3 && n_chans != 4 ) { return 0; } + + uint32_t height = labs( h ); + uint32_t width = labs( w ); + // work out if any padding how much to skip at end of each row + const size_t unpadded_row_sz = width * n_chans; + const size_t row_padding_sz = 0 == unpadded_row_sz % 4 ? 0 : 4 - unpadded_row_sz % 4; + const size_t row_sz = unpadded_row_sz + row_padding_sz; + const size_t dst_pixels_padded_sz = row_sz * height; + + const size_t dib_hdr_sz = sizeof( _bmp_dib_BITMAPINFOHEADER_t ); + _bmp_file_header_t file_hdr; + { + file_hdr.file_type[0] = 'B'; + file_hdr.file_type[1] = 'M'; + file_hdr.file_sz = _BMP_FILE_HDR_SZ + (uint32_t)dib_hdr_sz + (uint32_t)dst_pixels_padded_sz; + file_hdr.reserved1 = 0; + file_hdr.reserved2 = 0; + file_hdr.image_data_offset = _BMP_FILE_HDR_SZ + (uint32_t)dib_hdr_sz; + } + _bmp_dib_BITMAPINFOHEADER_t dib_hdr; + { + dib_hdr.this_header_sz = _BMP_MIN_DIB_HDR_SZ; // NOTE: must be 40 and not include the bitmask memory in size here + dib_hdr.w = w; + dib_hdr.h = h; + dib_hdr.n_planes = 1; + dib_hdr.bpp = 3 == n_chans ? 24 : 32; + dib_hdr.compression_method = 3 == n_chans ? BI_RGB : BI_BITFIELDS; + dib_hdr.image_uncompressed_sz = 0; + dib_hdr.horiz_pixels_per_meter = 0; + dib_hdr.vert_pixels_per_meter = 0; + dib_hdr.n_colours_in_palette = 0; + dib_hdr.n_important_colours = 0; + // big-endian masks. only used in BI_BITFIELDS and BI_ALPHABITFIELDS ( 16 and 32-bit images ) + // important note: GIMP stores BMP data in this array order for 32-bit: [A][B][G][R] + dib_hdr.bitmask_r = 0xFF000000; + dib_hdr.bitmask_g = 0x00FF0000; + dib_hdr.bitmask_b = 0x0000FF00; + } + + uint8_t* dst_pixels_ptr = malloc( dst_pixels_padded_sz ); + if ( !dst_pixels_ptr ) { return 0; } + { + size_t dst_byte_idx = 0; + uint8_t padding[4] = {0, 0, 0, 0}; + uint8_t rgba[4] = {0, 0, 0, 0}; + uint8_t bgra[4] = {0, 0, 0, 0}; + + for ( uint32_t row = 0; row < height; row++ ) { + size_t src_byte_idx = ( height - 1 - row ) * n_chans * width; + for ( uint32_t col = 0; col < width; col++ ) { + for ( uint32_t chan = 0; chan < n_chans; chan++ ) { rgba[chan] = pixels_ptr[src_byte_idx++]; } + if ( 3 == n_chans ) { + bgra[0] = rgba[2]; + bgra[1] = rgba[1]; + bgra[2] = rgba[0]; + } else { + /* NOTE(Anton) RGBA with alpha channel would be better supported with an extended DIB header */ + bgra[0] = rgba[3]; + bgra[1] = rgba[2]; + bgra[2] = rgba[1]; + bgra[3] = rgba[0]; // alpha + } + memcpy( &dst_pixels_ptr[dst_byte_idx], bgra, n_chans ); + dst_byte_idx += (size_t)n_chans; + } // endfor col + if ( row_padding_sz > 0 ) { + memcpy( &dst_pixels_ptr[dst_byte_idx], padding, row_padding_sz ); + dst_byte_idx += row_padding_sz; + } + } // endfor row + } + { + FILE* fp = fopen( filename, "wb" ); + if ( !fp ) { + free( dst_pixels_ptr ); + return 0; + } + if ( 1 != fwrite( &file_hdr, _BMP_FILE_HDR_SZ, 1, fp ) ) { + free( dst_pixels_ptr ); + fclose( fp ); + return 0; + } + if ( 1 != fwrite( &dib_hdr, dib_hdr_sz, 1, fp ) ) { + free( dst_pixels_ptr ); + fclose( fp ); + return 0; + } + if ( 1 != fwrite( dst_pixels_ptr, dst_pixels_padded_sz, 1, fp ) ) { + free( dst_pixels_ptr ); + fclose( fp ); + return 0; + } + fclose( fp ); + } + free( dst_pixels_ptr ); + + return 1; +} diff --git a/apg_bmp.h b/apg_bmp.h new file mode 100644 index 0000000..8cd73b6 --- /dev/null +++ b/apg_bmp.h @@ -0,0 +1,123 @@ +/* +BMP File Reader/Writer Implementation +Anton Gerdelan +Version: 3.1 18 March 2020. +Licence: see bottom of file. +C89 ( Implementation is C99 ) + +Contributors: +- Anton Gerdelan - Initial code. +- Saija Sorsa - Fuzz testing. + +Instructions: +- Just drop this header, and the matching .c file into your project. +- To get debug printouts during parsing define APG_BMP_DEBUG_OUTPUT. + +Advantages: +- The implementation is fast, simple, and supports more formats than most BMP reader libraries. +- The reader function is fuzzed with AFL https://lcamtuf.coredump.cx/afl/. +- The reader is robust to large files and malformed files, and will return any valid partial data in an image. +- Reader supports 32bpp (with alpha channel), 24bpp, 8bpp, 4bpp, and 1bpp monochrome BMP images. +- Reader handles indexed BMP images using a colour palette. +- Writer supports 32bpp RGBA and 24bpp uncompressed RGB images. + +Current Limitations: +- 16-bit images not supported (don't have any samples to test on). +- No support for interleaved channel bit layouts eg RGB101010 RGB555 RGB565. +- No support for compressed BMP images, although in practice these are not used. +- Output images with alpha channel are written in BITMAPINFOHEADER format. + For better alpha support in other apps the 124-bit v5 header could be used instead, + at the cost of some backward compatibility and bloat. + +To Do: +- FUZZING + - create a unique fuzz test set for (8,4,1 BPP). +- (maybe) FEATURE Flipping the image based on negative width and height in header, and/or function arguments. +- (maybe) PERF ifdef intrinsics/asm for bitscan. Platform-specific code so won't include unless necessary. +- (maybe) FEATURE Add parameter for padding output memory to eg 4-byte alignment or n channels. +- (maybe) FEATURE Improved apps support in alpha channel writing (using v5 header). +*/ + +#ifndef APG_BMP_H_ +#define APG_BMP_H_ + +#ifdef __cplusplus +extern "C" { +#endif /* CPP */ + +/* Reads a bitmap from a file, allocates memory for the raw image data, and returns it. +PARAMS + * w,h, - Retrieves the width and height of the BMP in pixels. + * n_chans - Retrieves the number of channels in the BMP. +RETURNS + * Tightly-packed pixel memory in RGBA order. The caller must call free() on the memory. + * NULL on any error. Any allocated memory is freed before returning NULL. */ +unsigned char* apg_bmp_read( const char* filename, int* w, int* h, unsigned int* n_chans ); + +/* Calls free() on memory created by apg_bmp_read */ +void apg_bmp_free( unsigned char* pixels_ptr ); + +/* Writes a bitmap to a file. +PARAMS + * filename - e.g."my_bitmap.bmp". Must not be NULL. + * pixels_ptr - Pointer to tightly-packed pixel memory in RGBA order. Must not be NULL. There must be abs(w)*abs(h)*n_chans bytes in the memory pointed to. + * w,h, - Width and height of the image in pixels. + * n_chans - The number of channels in the BMP. 3 or 4 supported for writing, which means RGB or RGBA memory, respectively. +RETURNS + * Zero on any error, non zero on success. */ +unsigned int apg_bmp_write( const char* filename, unsigned char* pixels_ptr, int w, int h, unsigned int n_chans ); + +#ifdef __cplusplus +} +#endif /* CPP */ + +#endif /*_APG_BMP_H_ */ + +/* +------------------------------------------------------------------------------------- +This software is available under two licences - you may use it under either licence. +------------------------------------------------------------------------------------- +FIRST LICENCE OPTION + +> Apache License +> Version 2.0, January 2004 +> http://www.apache.org/licenses/ +> Copyright 2019 Anton Gerdelan. +> Licensed under the Apache License, Version 2.0 (the "License"); +> you may not use this file except in compliance with the License. +> You may obtain a copy of the License at +> http://www.apache.org/licenses/LICENSE-2.0 +> Unless required by applicable law or agreed to in writing, software +> distributed under the License is distributed on an "AS IS" BASIS, +> WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +> See the License for the specific language governing permissions and +> limitations under the License. +------------------------------------------------------------------------------------- +SECOND LICENCE OPTION + +> This is free and unencumbered software released into the public domain. +> +> Anyone is free to copy, modify, publish, use, compile, sell, or +> distribute this software, either in source code form or as a compiled +> binary, for any purpose, commercial or non-commercial, and by any +> means. +> +> In jurisdictions that recognize copyright laws, the author or authors +> of this software dedicate any and all copyright interest in the +> software to the public domain. We make this dedication for the benefit +> of the public at large and to the detriment of our heirs and +> successors. We intend this dedication to be an overt act of +> relinquishment in perpetuity of all present and future rights to this +> software under copyright law. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +> EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +> MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +> IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +> OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +> ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +> OTHER DEALINGS IN THE SOFTWARE. +> +> For more information, please refer to +------------------------------------------------------------------------------------- +*/ From 5b6eb565e441947bfffa00fc7c2c5944b889e2f5 Mon Sep 17 00:00:00 2001 From: Rich Geldreich Date: Fri, 20 Mar 2020 02:00:34 -0400 Subject: [PATCH 11/16] - Adding UASTC support to encoder, transcoder, .basis file format - Removing BC7 mode 6 support from transcoder (will alway use the much smaller mode 5 tables now) - Adding BMP support - Adding -bench mode, for development - CMakeLists.txt file now compatible with Visual Studio 2019 (MSVC) --- CMakeLists.txt | 72 +- basisu.vcxproj | 18 +- basisu.vcxproj.filters | 12 +- basisu_astc_decomp.cpp | 2 +- basisu_backend.cpp | 42 +- basisu_backend.h | 5 +- basisu_basis_file.cpp | 54 +- basisu_comp.cpp | 493 +- basisu_comp.h | 127 +- basisu_enc.cpp | 107 +- basisu_enc.h | 179 +- basisu_etc.cpp | 334 +- basisu_etc.h | 112 +- basisu_frontend.cpp | 10 +- basisu_frontend.h | 10 +- basisu_gpu_texture.cpp | 462 +- basisu_gpu_texture.h | 14 +- basisu_pvrtc1_4.cpp | 297 +- basisu_pvrtc1_4.h | 100 +- basisu_resample_filters.cpp | 4 +- basisu_tool.cpp | 1299 ++- lodepng.cpp | 1 + transcoder/basisu.h | 40 +- transcoder/basisu_file_headers.h | 16 +- transcoder/basisu_global_selector_cb.h | 2 +- transcoder/basisu_global_selector_palette.h | 2 +- transcoder/basisu_transcoder.cpp | 8143 ++++++++++++++--- transcoder/basisu_transcoder.h | 140 +- transcoder/basisu_transcoder_internal.h | 40 +- .../basisu_transcoder_tables_bc7_m6.inc | 4383 --------- webgl/gltf/BasisTextureLoader.js | 173 +- webgl/gltf/GLTFLoader.js | 1089 ++- webgl/gltf/index.html | 12 +- webgl/texture/index.html | 25 +- webgl/transcoder/CMakeLists.txt | 2 +- webgl/transcoder/basis_wrappers.cpp | 17 +- webgl/transcoder/build/basis_transcoder.js | 3 +- webgl/transcoder/build/basis_transcoder.wasm | Bin 366243 -> 447033 bytes webgl_videotest/basis.js | 19 +- webgl_videotest/basis.js.mem | Bin 979496 -> 522543 bytes webgl_videotest/basis_wrappers.cpp | 28 +- webgl_videotest/build.bat | 3 +- webgl_videotest/index.html | 94 +- 43 files changed, 11104 insertions(+), 6881 deletions(-) delete mode 100644 transcoder/basisu_transcoder_tables_bc7_m6.inc diff --git a/CMakeLists.txt b/CMakeLists.txt index c5f8a00..4fa46d3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -19,33 +19,35 @@ else() message("Building 32-bit") endif(BUILD_X64) -set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g") -set(CMAKE_C_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g") +if (NOT MSVC) + set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g") + set(CMAKE_C_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g") -set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}") -set(CMAKE_C_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}") + set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}") + set(CMAKE_C_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}") -set(CMAKE_CXX_FLAGS -std=c++11) -set(GCC_COMPILE_FLAGS "-fvisibility=hidden -fvisibility-inlines-hidden -fPIC -fno-strict-aliasing -D_LARGEFILE64_SOURCE=1 -D_FILE_OFFSET_BITS=64 -Wall -Wextra -Wno-unused-local-typedefs -Wno-unused-value -Wno-unused-parameter -Wno-unused-variable -Wno-reorder") + set(CMAKE_CXX_FLAGS -std=c++11) + set(GCC_COMPILE_FLAGS "-fvisibility=hidden -fPIC -fno-strict-aliasing -D_LARGEFILE64_SOURCE=1 -D_FILE_OFFSET_BITS=64 -Wall -Wextra -Wno-unused-local-typedefs -Wno-unused-value -Wno-unused-parameter -Wno-unused-variable") -if (NOT BUILD_X64) - set(GCC_COMPILE_FLAGS "${GCC_COMPILE_FLAGS} -m32") + if (NOT BUILD_X64) + set(GCC_COMPILE_FLAGS "${GCC_COMPILE_FLAGS} -m32") + endif() + + if (STATIC) + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${GCC_LINK_FLAGS} -static-libgcc -static-libstdc++ -static") + else() + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${GCC_LINK_FLAGS} -Wl,-rpath .") + endif(STATIC) + + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${GCC_COMPILE_FLAGS}") + set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} ${GCC_COMPILE_FLAGS}") + set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} ${GCC_COMPILE_FLAGS} -D_DEBUG") + + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GCC_COMPILE_FLAGS}") + set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${GCC_COMPILE_FLAGS}") + set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${GCC_COMPILE_FLAGS} -D_DEBUG") endif() -if (STATIC) - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${GCC_LINK_FLAGS} -static-libgcc -static-libstdc++ -static") -else() - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${GCC_LINK_FLAGS} -Wl,-rpath .") -endif(STATIC) - -set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${GCC_COMPILE_FLAGS}") -set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} ${GCC_COMPILE_FLAGS}") -set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} ${GCC_COMPILE_FLAGS} -D_DEBUG") - -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${GCC_COMPILE_FLAGS}") -set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${GCC_COMPILE_FLAGS}") -set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${GCC_COMPILE_FLAGS} -D_DEBUG") - set(BASISU_SRC_LIST ${COMMON_SRC_LIST} basisu_backend.cpp basisu_basis_file.cpp @@ -61,28 +63,36 @@ set(BASISU_SRC_LIST ${COMMON_SRC_LIST} basisu_ssim.cpp basisu_tool.cpp basisu_astc_decomp.cpp + basisu_uastc_enc.cpp + basisu_bc7enc.cpp lodepng.cpp + apg_bmp.c transcoder/basisu_transcoder.cpp ) if (APPLE) - set(BIN_DIRECTORY "bin_osx") + set(BIN_DIRECTORY "bin_osx") else() - set(BIN_DIRECTORY "bin") + set(BIN_DIRECTORY "bin") endif() set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/${BIN_DIRECTORY}) add_executable(basisu ${BASISU_SRC_LIST}) -target_link_libraries(basisu m pthread) + +if (NOT MSVC) + target_link_libraries(basisu m pthread) +endif() install(TARGETS basisu DESTINATION bin) -if (CMAKE_BUILD_TYPE STREQUAL Release) - if (APPLE) - add_custom_command(TARGET basisu POST_BUILD COMMAND strip -X -x ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/basisu) - else() - add_custom_command(TARGET basisu POST_BUILD COMMAND strip -g -X -x ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/basisu) - endif() +if (NOT MSVC) + if (CMAKE_BUILD_TYPE STREQUAL Release) + if (APPLE) + add_custom_command(TARGET basisu POST_BUILD COMMAND strip -X -x ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/basisu) + else() + add_custom_command(TARGET basisu POST_BUILD COMMAND strip -g -X -x ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/basisu) + endif() + endif() endif() diff --git a/basisu.vcxproj b/basisu.vcxproj index fafad29..c61c4a2 100644 --- a/basisu.vcxproj +++ b/basisu.vcxproj @@ -79,6 +79,7 @@ $(SolutionDir)\bin + $(ProjectName)D @@ -98,9 +99,9 @@ Level4 Disabled true - - + ispc_texcomp true + true Console @@ -133,12 +134,13 @@ true true true - - + ispc_texcomp NDEBUG;_MBCS;%(PreprocessorDefinitions) false true AnySuitable + true + false true @@ -147,9 +149,14 @@ + + + + + @@ -165,6 +172,7 @@ + @@ -172,6 +180,7 @@ + @@ -193,7 +202,6 @@ - diff --git a/basisu.vcxproj.filters b/basisu.vcxproj.filters index fbff442..218c3f1 100644 --- a/basisu.vcxproj.filters +++ b/basisu.vcxproj.filters @@ -19,6 +19,9 @@ + + + @@ -49,6 +52,12 @@ + + + + transcoder + + @@ -57,9 +66,6 @@ transcoder - - transcoder - transcoder diff --git a/basisu_astc_decomp.cpp b/basisu_astc_decomp.cpp index cc0a6ce..81a1800 100644 --- a/basisu_astc_decomp.cpp +++ b/basisu_astc_decomp.cpp @@ -1256,7 +1256,7 @@ void interpolateWeights (TexelWeightPair* dst, const deUint32 (&unquantizedWeigh const int numWeightsPerTexel = blockMode.isDualPlane ? 2 : 1; const deUint32 scaleX = (1024 + blockWidth/2) / (blockWidth-1); const deUint32 scaleY = (1024 + blockHeight/2) / (blockHeight-1); - DE_ASSERT(blockMode.weightGridWidth*blockMode.weightGridHeight*numWeightsPerTexel <= DE_LENGTH_OF_ARRAY(unquantizedWeights)); + DE_ASSERT(blockMode.weightGridWidth*blockMode.weightGridHeight*numWeightsPerTexel <= (int)DE_LENGTH_OF_ARRAY(unquantizedWeights)); for (int texelY = 0; texelY < blockHeight; texelY++) { for (int texelX = 0; texelX < blockWidth; texelX++) diff --git a/basisu_backend.cpp b/basisu_backend.cpp index 3a689e5..4c130e9 100644 --- a/basisu_backend.cpp +++ b/basisu_backend.cpp @@ -1,5 +1,5 @@ // basisu_backend.cpp -// Copyright (C) 2019 Binomial LLC. All Rights Reserved. +// Copyright (C) 2019-2020 Binomial LLC. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -176,7 +176,7 @@ namespace basisu void basisu_backend::reoptimize_and_sort_endpoints_codebook(uint32_t total_block_endpoints_remapped, uint_vec& all_endpoint_indices) { basisu_frontend& r = *m_pFront_end; - const bool is_video = r.get_params().m_tex_type == basist::cBASISTexTypeVideoFrames; + //const bool is_video = r.get_params().m_tex_type == basist::cBASISTexTypeVideoFrames; if ((total_block_endpoints_remapped) && (m_params.m_compression_level > 0)) { @@ -201,10 +201,10 @@ namespace basisu for (uint32_t slice_index = 0; slice_index < m_slices.size(); slice_index++) { - const uint32_t first_block_index = m_slices[slice_index].m_first_block_index; + //const uint32_t first_block_index = m_slices[slice_index].m_first_block_index; - const uint32_t width = m_slices[slice_index].m_width; - const uint32_t height = m_slices[slice_index].m_height; + //const uint32_t width = m_slices[slice_index].m_width; + //const uint32_t height = m_slices[slice_index].m_height; const uint32_t num_blocks_x = m_slices[slice_index].m_num_blocks_x; const uint32_t num_blocks_y = m_slices[slice_index].m_num_blocks_y; @@ -212,7 +212,7 @@ namespace basisu { for (uint32_t block_x = 0; block_x < num_blocks_x; block_x++) { - const uint32_t block_index = first_block_index + block_x + block_y * num_blocks_x; + //const uint32_t block_index = first_block_index + block_x + block_y * num_blocks_x; encoder_block& m = m_slice_encoder_blocks[slice_index](block_x, block_y); @@ -336,10 +336,10 @@ namespace basisu for (uint32_t slice_index = 0; slice_index < m_slices.size(); slice_index++) { const bool is_iframe = m_slices[slice_index].m_iframe; - const uint32_t first_block_index = m_slices[slice_index].m_first_block_index; + //const uint32_t first_block_index = m_slices[slice_index].m_first_block_index; - const uint32_t width = m_slices[slice_index].m_width; - const uint32_t height = m_slices[slice_index].m_height; + //const uint32_t width = m_slices[slice_index].m_width; + //const uint32_t height = m_slices[slice_index].m_height; const uint32_t num_blocks_x = m_slices[slice_index].m_num_blocks_x; const uint32_t num_blocks_y = m_slices[slice_index].m_num_blocks_y; const int prev_frame_slice_index = find_video_frame(slice_index, -1); @@ -411,8 +411,8 @@ namespace basisu const bool is_iframe = m_slices[slice_index].m_iframe; const uint32_t first_block_index = m_slices[slice_index].m_first_block_index; - const uint32_t width = m_slices[slice_index].m_width; - const uint32_t height = m_slices[slice_index].m_height; + //const uint32_t width = m_slices[slice_index].m_width; + //const uint32_t height = m_slices[slice_index].m_height; const uint32_t num_blocks_x = m_slices[slice_index].m_num_blocks_x; const uint32_t num_blocks_y = m_slices[slice_index].m_num_blocks_y; @@ -590,7 +590,7 @@ namespace basisu { for (uint32_t slice_index = 0; slice_index < m_slices.size(); slice_index++) { - const uint32_t first_block_index = m_slices[slice_index].m_first_block_index; + //const uint32_t first_block_index = m_slices[slice_index].m_first_block_index; const uint32_t width = m_slices[slice_index].m_width; const uint32_t height = m_slices[slice_index].m_height; const uint32_t num_blocks_x = m_slices[slice_index].m_num_blocks_x; @@ -603,7 +603,7 @@ namespace basisu { for (uint32_t block_x = 0; block_x < num_blocks_x; block_x++) { - const uint32_t block_index = first_block_index + block_x + block_y * num_blocks_x; + //const uint32_t block_index = first_block_index + block_x + block_y * num_blocks_x; encoder_block& m = m_slice_encoder_blocks[slice_index](block_x, block_y); @@ -680,11 +680,11 @@ namespace basisu for (uint32_t slice_index = 0; slice_index < m_slices.size(); slice_index++) { - const int prev_frame_slice_index = is_video ? find_video_frame(slice_index, -1) : -1; - const int next_frame_slice_index = is_video ? find_video_frame(slice_index, 1) : -1; + //const int prev_frame_slice_index = is_video ? find_video_frame(slice_index, -1) : -1; + //const int next_frame_slice_index = is_video ? find_video_frame(slice_index, 1) : -1; const uint32_t first_block_index = m_slices[slice_index].m_first_block_index; - const uint32_t width = m_slices[slice_index].m_width; - const uint32_t height = m_slices[slice_index].m_height; + //const uint32_t width = m_slices[slice_index].m_width; + //const uint32_t height = m_slices[slice_index].m_height; const uint32_t num_blocks_x = m_slices[slice_index].m_num_blocks_x; const uint32_t num_blocks_y = m_slices[slice_index].m_num_blocks_y; @@ -702,7 +702,7 @@ namespace basisu { for (uint32_t block_x = 0; block_x < num_blocks_x; block_x++) { - const uint32_t block_index = first_block_index + block_x + block_y * num_blocks_x; + //const uint32_t block_index = first_block_index + block_x + block_y * num_blocks_x; encoder_block& m = m_slice_encoder_blocks[slice_index](block_x, block_y); @@ -1168,8 +1168,8 @@ namespace basisu for (uint32_t slice_index = 0; slice_index < m_slices.size(); slice_index++) { - const uint32_t width = m_slices[slice_index].m_width; - const uint32_t height = m_slices[slice_index].m_height; + //const uint32_t width = m_slices[slice_index].m_width; + //const uint32_t height = m_slices[slice_index].m_height; const uint32_t num_blocks_x = m_slices[slice_index].m_num_blocks_x; const uint32_t num_blocks_y = m_slices[slice_index].m_num_blocks_y; @@ -1644,7 +1644,7 @@ namespace basisu uint32_t basisu_backend::encode() { - const bool is_video = m_pFront_end->get_params().m_tex_type == basist::cBASISTexTypeVideoFrames; + //const bool is_video = m_pFront_end->get_params().m_tex_type == basist::cBASISTexTypeVideoFrames; m_output.m_slice_desc = m_slices; m_output.m_etc1s = m_params.m_etc1s; diff --git a/basisu_backend.h b/basisu_backend.h index 1c72fa8..171ca83 100644 --- a/basisu_backend.h +++ b/basisu_backend.h @@ -1,5 +1,5 @@ // basisu_backend.h -// Copyright (C) 2019 Binomial LLC. All Rights Reserved. +// Copyright (C) 2019-2020 Binomial LLC. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -139,6 +139,8 @@ namespace basisu struct basisu_backend_output { + basist::basis_tex_format m_tex_format; + bool m_etc1s; uint32_t m_num_endpoints; @@ -160,6 +162,7 @@ namespace basisu void clear() { + m_tex_format = basist::basis_tex_format::cETC1S; m_etc1s = false; m_num_endpoints = 0; diff --git a/basisu_basis_file.cpp b/basisu_basis_file.cpp index 3e6b190..ce6acd6 100644 --- a/basisu_basis_file.cpp +++ b/basisu_basis_file.cpp @@ -1,5 +1,5 @@ // basisu_basis_file.cpp -// Copyright (C) 2019 Binomial LLC. All Rights Reserved. +// Copyright (C) 2019-2020 Binomial LLC. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -31,12 +31,19 @@ namespace basisu m_header.m_total_images = 0; for (uint32_t i = 0; i < encoder_output.m_slice_desc.size(); i++) m_header.m_total_images = maximum(m_header.m_total_images, encoder_output.m_slice_desc[i].m_source_file_index + 1); - - m_header.m_format = 0;// basist::block_format::cETC1; + + m_header.m_tex_format = (int)encoder_output.m_tex_format; m_header.m_flags = 0; if (encoder_output.m_etc1s) + { + assert(encoder_output.m_tex_format == basist::basis_tex_format::cETC1S); m_header.m_flags = m_header.m_flags | basist::cBASISHeaderFlagETC1S; + } + else + { + assert(encoder_output.m_tex_format != basist::basis_tex_format::cETC1S); + } if (y_flipped) m_header.m_flags = m_header.m_flags | basist::cBASISHeaderFlagYFlipped; @@ -85,7 +92,7 @@ namespace basisu m_images_descs[i].m_level_index = slice_descs[i].m_mip_index; if (slice_descs[i].m_alpha) - m_images_descs[i].m_flags = m_images_descs[i].m_flags | basist::cSliceDescFlagsIsAlphaData; + m_images_descs[i].m_flags = m_images_descs[i].m_flags | basist::cSliceDescFlagsHasAlpha; if (slice_descs[i].m_iframe) m_images_descs[i].m_flags = m_images_descs[i].m_flags | basist::cSliceDescFlagsFrameIsIFrame; @@ -127,14 +134,23 @@ namespace basisu assert(m_comp_data.size() == m_slice_descs_file_ofs); append_vector(m_comp_data, reinterpret_cast(&m_images_descs[0]), m_images_descs.size() * sizeof(m_images_descs[0])); - assert(m_comp_data.size() == m_endpoint_cb_file_ofs); - append_vector(m_comp_data, reinterpret_cast(&encoder_output.m_endpoint_palette[0]), encoder_output.m_endpoint_palette.size()); + if (encoder_output.m_endpoint_palette.size()) + { + assert(m_comp_data.size() == m_endpoint_cb_file_ofs); + append_vector(m_comp_data, reinterpret_cast(&encoder_output.m_endpoint_palette[0]), encoder_output.m_endpoint_palette.size()); + } - assert(m_comp_data.size() == m_selector_cb_file_ofs); - append_vector(m_comp_data, reinterpret_cast(&encoder_output.m_selector_palette[0]), encoder_output.m_selector_palette.size()); + if (encoder_output.m_selector_palette.size()) + { + assert(m_comp_data.size() == m_selector_cb_file_ofs); + append_vector(m_comp_data, reinterpret_cast(&encoder_output.m_selector_palette[0]), encoder_output.m_selector_palette.size()); + } - assert(m_comp_data.size() == m_tables_file_ofs); - append_vector(m_comp_data, reinterpret_cast(&encoder_output.m_slice_image_tables[0]), encoder_output.m_slice_image_tables.size()); + if (encoder_output.m_slice_image_tables.size()) + { + assert(m_comp_data.size() == m_tables_file_ofs); + append_vector(m_comp_data, reinterpret_cast(&encoder_output.m_slice_image_tables[0]), encoder_output.m_slice_image_tables.size()); + } assert(m_comp_data.size() == m_first_image_file_ofs); for (uint32_t i = 0; i < slice_descs.size(); i++) @@ -173,10 +189,20 @@ namespace basisu m_header_file_ofs = 0; m_slice_descs_file_ofs = sizeof(basist::basis_file_header); - m_endpoint_cb_file_ofs = m_slice_descs_file_ofs + sizeof(basist::basis_slice_desc) * (uint32_t)slice_descs.size(); - m_selector_cb_file_ofs = m_endpoint_cb_file_ofs + (uint32_t)encoder_output.m_endpoint_palette.size(); - m_tables_file_ofs = m_selector_cb_file_ofs + (uint32_t)encoder_output.m_selector_palette.size(); - m_first_image_file_ofs = m_tables_file_ofs + (uint32_t)encoder_output.m_slice_image_tables.size(); + if (encoder_output.m_tex_format == basist::basis_tex_format::cETC1S) + { + m_endpoint_cb_file_ofs = m_slice_descs_file_ofs + sizeof(basist::basis_slice_desc) * (uint32_t)slice_descs.size(); + m_selector_cb_file_ofs = m_endpoint_cb_file_ofs + (uint32_t)encoder_output.m_endpoint_palette.size(); + m_tables_file_ofs = m_selector_cb_file_ofs + (uint32_t)encoder_output.m_selector_palette.size(); + m_first_image_file_ofs = m_tables_file_ofs + (uint32_t)encoder_output.m_slice_image_tables.size(); + } + else + { + m_endpoint_cb_file_ofs = 0; + m_selector_cb_file_ofs = 0; + m_tables_file_ofs = 0; + m_first_image_file_ofs = m_slice_descs_file_ofs + sizeof(basist::basis_slice_desc) * (uint32_t)slice_descs.size(); + } uint64_t total_file_size = m_first_image_file_ofs; for (uint32_t i = 0; i < encoder_output.m_slice_image_data.size(); i++) diff --git a/basisu_comp.cpp b/basisu_comp.cpp index 1e46793..ba66e30 100644 --- a/basisu_comp.cpp +++ b/basisu_comp.cpp @@ -1,5 +1,5 @@ // basisu_comp.cpp -// Copyright (C) 2019 Binomial LLC. All Rights Reserved. +// Copyright (C) 2019-2020 Binomial LLC. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -15,6 +15,9 @@ #include "basisu_comp.h" #include "basisu_enc.h" #include +#include +#define MINIZ_NO_ZLIB_APIS +#include "basisu_miniz.h" #define BASISU_USE_STB_IMAGE_RESIZE_FOR_MIPMAP_GEN 0 #define DEBUG_CROP_TEXTURE_TO_64x64 (0) @@ -24,10 +27,10 @@ namespace basisu { basis_compressor::basis_compressor() : - m_total_blocks(0), - m_auto_global_sel_pal(false), m_basis_file_size(0), m_basis_bits_per_texel(0), + m_total_blocks(0), + m_auto_global_sel_pal(false), m_any_source_image_has_alpha(false) { debug_printf("basis_compressor::basis_compressor\n"); @@ -53,6 +56,7 @@ namespace basisu debug_printf("Source images: %u, source filenames: %u, source alpha filenames: %i\n", (uint32_t)m_params.m_source_images.size(), (uint32_t)m_params.m_source_filenames.size(), (uint32_t)m_params.m_source_alpha_filenames.size()); + PRINT_BOOL_VALUE(m_uastc); PRINT_BOOL_VALUE(m_y_flip); PRINT_BOOL_VALUE(m_debug); PRINT_BOOL_VALUE(m_debug_images); @@ -96,6 +100,13 @@ namespace basisu debug_printf("m_tex_type: %u\n", m_params.m_tex_type); debug_printf("m_userdata0: 0x%X, m_userdata1: 0x%X\n", m_params.m_userdata0, m_params.m_userdata1); debug_printf("m_us_per_frame: %i (%f fps)\n", m_params.m_us_per_frame, m_params.m_us_per_frame ? 1.0f / (m_params.m_us_per_frame / 1000000.0f) : 0); + debug_printf("m_pack_uastc_flags: 0x%X\n", m_params.m_pack_uastc_flags); + + PRINT_BOOL_VALUE(m_rdo_uastc); + PRINT_FLOAT_VALUE(m_rdo_uastc_quality_scalar); + PRINT_INT_VALUE(m_rdo_uastc_dict_size); + PRINT_FLOAT_VALUE(m_rdo_uastc_max_allowed_rms_increase_ratio); + PRINT_FLOAT_VALUE(m_rdo_uastc_skip_block_rms_thresh); #undef PRINT_BOOL_VALUE #undef PRINT_INT_VALUE @@ -122,14 +133,26 @@ namespace basisu if (!validate_texture_type_constraints()) return cECFailedValidating; - if (!process_frontend()) + if (!extract_source_blocks()) return cECFailedFrontEnd; - if (!extract_frontend_texture_data()) - return cECFailedFontendExtract; + if (m_params.m_uastc) + { + error_code ec = encode_slices_to_uastc(); + if (ec != cECSuccess) + return ec; + } + else + { + if (!process_frontend()) + return cECFailedFrontEnd; - if (!process_backend()) - return cECFailedBackend; + if (!extract_frontend_texture_data()) + return cECFailedFontendExtract; + + if (!process_backend()) + return cECFailedBackend; + } if (!create_basis_file_and_transcode()) return cECFailedCreateBasisFile; @@ -140,6 +163,99 @@ namespace basisu return cECSuccess; } + basis_compressor::error_code basis_compressor::encode_slices_to_uastc() + { + debug_printf("basis_compressor::encode_slices_to_uastc\n"); + + m_uastc_slice_textures.resize(m_slice_descs.size()); + for (uint32_t slice_index = 0; slice_index < m_slice_descs.size(); slice_index++) + m_uastc_slice_textures[slice_index].init(texture_format::cUASTC4x4, m_slice_descs[slice_index].m_orig_width, m_slice_descs[slice_index].m_orig_height); + + m_uastc_backend_output.m_tex_format = basist::basis_tex_format::cUASTC4x4; + m_uastc_backend_output.m_etc1s = false; + m_uastc_backend_output.m_slice_desc = m_slice_descs; + m_uastc_backend_output.m_slice_image_data.resize(m_slice_descs.size()); + m_uastc_backend_output.m_slice_image_crcs.resize(m_slice_descs.size()); + + for (uint32_t slice_index = 0; slice_index < m_slice_descs.size(); slice_index++) + { + gpu_image& tex = m_uastc_slice_textures[slice_index]; + basisu_backend_slice_desc& slice_desc = m_slice_descs[slice_index]; + (void)slice_desc; + + const uint32_t num_blocks_x = tex.get_blocks_x(); + const uint32_t num_blocks_y = tex.get_blocks_y(); + const uint32_t total_blocks = tex.get_total_blocks(); + const image& source_image = m_slice_images[slice_index]; + + std::atomic total_blocks_processed; + total_blocks_processed = 0; + + const uint32_t N = 256; + for (uint32_t block_index_iter = 0; block_index_iter < total_blocks; block_index_iter += N) + { + const uint32_t first_index = block_index_iter; + const uint32_t last_index = minimum(total_blocks, block_index_iter + N); + + m_params.m_pJob_pool->add_job([this, first_index, last_index, num_blocks_x, num_blocks_y, total_blocks, &source_image, &tex, &total_blocks_processed] + { + BASISU_NOTE_UNUSED(num_blocks_y); + + for (uint32_t block_index = first_index; block_index < last_index; block_index++) + { + const uint32_t block_x = block_index % num_blocks_x; + const uint32_t block_y = block_index / num_blocks_x; + + color_rgba block_pixels[4][4]; + + source_image.extract_block_clamped((color_rgba*)block_pixels, block_x * 4, block_y * 4, 4, 4); + + basist::uastc_block& dest_block = *(basist::uastc_block*)tex.get_block_ptr(block_x, block_y); + + encode_uastc(&block_pixels[0][0].r, dest_block, m_params.m_pack_uastc_flags); + + total_blocks_processed++; + + uint32_t val = total_blocks_processed; + if ((val & 16383) == 16383) + { + debug_printf("basis_compressor::encode_slices_to_uastc: %3.1f%% done\n", static_cast(val) * 100.0f / total_blocks); + } + + } + }); + + } // block_index_iter + + m_params.m_pJob_pool->wait_for_all(); + + if (m_params.m_rdo_uastc) + { + uastc_rdo_params rdo_params; + rdo_params.m_quality_scaler = m_params.m_rdo_uastc_quality_scalar; + rdo_params.m_max_allowed_rms_increase_ratio = m_params.m_rdo_uastc_max_allowed_rms_increase_ratio; + rdo_params.m_skip_block_rms_thresh = m_params.m_rdo_uastc_skip_block_rms_thresh; + rdo_params.m_lz_dict_size = m_params.m_rdo_uastc_dict_size; + + bool status = uastc_rdo(tex.get_total_blocks(), (basist::uastc_block*)tex.get_ptr(), + (const color_rgba *)m_source_blocks[slice_desc.m_first_block_index].m_pixels, rdo_params, m_params.m_pack_uastc_flags, m_params.m_pJob_pool, + m_params.m_pJob_pool ? std::min(4, (uint32_t)m_params.m_pJob_pool->get_total_threads()) : 0); + if (!status) + { + return cECFailedUASTCRDOPostProcess; + } + } + + m_uastc_backend_output.m_slice_image_data[slice_index].resize(tex.get_size_in_bytes()); + memcpy(&m_uastc_backend_output.m_slice_image_data[slice_index][0], tex.get_ptr(), tex.get_size_in_bytes()); + + m_uastc_backend_output.m_slice_image_crcs[slice_index] = basist::crc16(tex.get_ptr(), tex.get_size_in_bytes(), 0); + + } // slice_index + + return cECSuccess; + } + bool basis_compressor::generate_mipmaps(const image &img, std::vector &mips, bool has_alpha) { debug_printf("basis_compressor::generate_mipmaps\n"); @@ -247,7 +363,7 @@ namespace basisu pSource_filename = m_params.m_source_filenames[source_file_index].c_str(); // Load the source image - if (!load_png(pSource_filename, file_image)) + if (!load_image(pSource_filename, file_image)) { error_printf("Failed reading source image: %s\n", pSource_filename); return false; @@ -262,7 +378,7 @@ namespace basisu image alpha_data; - if (!load_png(pSource_alpha_image, alpha_data)) + if (!load_image(pSource_alpha_image, alpha_data)) { error_printf("Failed reading source image: %s\n", pSource_alpha_image); return false; @@ -349,6 +465,7 @@ namespace basisu image &file_image = source_images[source_file_index]; const std::string &source_filename = source_filenames[source_file_index]; + // Now, for each source image, create the slices corresponding to that image. std::vector slices; slices.reserve(32); @@ -364,9 +481,9 @@ namespace basisu for (uint32_t i = 0; i < slices.size(); i++) mip_indices[i] = i; - if (m_any_source_image_has_alpha) + if ((m_any_source_image_has_alpha) && (!m_params.m_uastc)) { - // If source has alpha, then even mips will have RGB, and odd mips will have alpha in RGB. + // For ETC1S, if source has alpha, then even mips will have RGB, and odd mips will have alpha in RGB. std::vector alpha_slices; uint_vec new_mip_indices; @@ -403,18 +520,29 @@ namespace basisu for (uint32_t slice_index = 0; slice_index < slices.size(); slice_index++) { - const bool is_alpha_slice = m_any_source_image_has_alpha && ((slice_index & 1) != 0); - - image &slice_image = slices[slice_index]; + image& slice_image = slices[slice_index]; const uint32_t orig_width = slice_image.get_width(); const uint32_t orig_height = slice_image.get_height(); + bool is_alpha_slice = false; + if (m_any_source_image_has_alpha) + { + if (m_params.m_uastc) + { + is_alpha_slice = slice_image.has_alpha(); + } + else + { + is_alpha_slice = (slice_index & 1) != 0; + } + } + // Enlarge the source image to 4x4 block boundaries, duplicating edge pixels if necessary to avoid introducing extra colors into blocks. slice_image.crop_dup_borders(slice_image.get_block_width(4) * 4, slice_image.get_block_height(4) * 4); if (m_params.m_debug_images) { - save_png(string_format("basis_debug_source_image_%u_%u.png", source_file_index, slice_index).c_str(), slice_image); + save_png(string_format("basis_debug_source_image_%u_slice_%u.png", source_file_index, slice_index).c_str(), slice_image); } enlarge_vector(m_stats, 1); @@ -505,28 +633,31 @@ namespace basisu if (m_any_source_image_has_alpha) { - // Alpha slices must be at odd slice indices - if (slice_desc.m_alpha) + if (!m_params.m_uastc) { - if ((i & 1) == 0) - return false; - - const basisu_backend_slice_desc &prev_slice_desc = m_slice_descs[i - 1]; + // For ETC1S, alpha slices must be at odd slice indices. + if (slice_desc.m_alpha) + { + if ((i & 1) == 0) + return false; - // Make sure previous slice has this image's color data - if (prev_slice_desc.m_source_file_index != slice_desc.m_source_file_index) - return false; - if (prev_slice_desc.m_alpha) - return false; - if (prev_slice_desc.m_mip_index != slice_desc.m_mip_index) - return false; - if (prev_slice_desc.m_num_blocks_x != slice_desc.m_num_blocks_x) - return false; - if (prev_slice_desc.m_num_blocks_y != slice_desc.m_num_blocks_y) + const basisu_backend_slice_desc& prev_slice_desc = m_slice_descs[i - 1]; + + // Make sure previous slice has this image's color data + if (prev_slice_desc.m_source_file_index != slice_desc.m_source_file_index) + return false; + if (prev_slice_desc.m_alpha) + return false; + if (prev_slice_desc.m_mip_index != slice_desc.m_mip_index) + return false; + if (prev_slice_desc.m_num_blocks_x != slice_desc.m_num_blocks_x) + return false; + if (prev_slice_desc.m_num_blocks_y != slice_desc.m_num_blocks_y) + return false; + } + else if (i & 1) return false; } - else if (i & 1) - return false; } else if (slice_desc.m_alpha) { @@ -610,26 +741,33 @@ namespace basisu return true; } - bool basis_compressor::process_frontend() + bool basis_compressor::extract_source_blocks() { - debug_printf("basis_compressor::process_frontend\n"); - + debug_printf("basis_compressor::extract_source_blocks\n"); + m_source_blocks.resize(m_total_blocks); - + for (uint32_t slice_index = 0; slice_index < m_slice_images.size(); slice_index++) { - const basisu_backend_slice_desc &slice_desc = m_slice_descs[slice_index]; + const basisu_backend_slice_desc& slice_desc = m_slice_descs[slice_index]; const uint32_t num_blocks_x = slice_desc.m_num_blocks_x; const uint32_t num_blocks_y = slice_desc.m_num_blocks_y; - const image &source_image = m_slice_images[slice_index]; + const image& source_image = m_slice_images[slice_index]; for (uint32_t block_y = 0; block_y < num_blocks_y; block_y++) for (uint32_t block_x = 0; block_x < num_blocks_x; block_x++) source_image.extract_block_clamped(m_source_blocks[slice_desc.m_first_block_index + block_x + block_y * num_blocks_x].get_ptr(), block_x * 4, block_y * 4, 4, 4); } - + + return true; + } + + bool basis_compressor::process_frontend() + { + debug_printf("basis_compressor::process_frontend\n"); + #if 0 // TODO basis_etc1_pack_params pack_params; @@ -925,19 +1063,26 @@ namespace basisu { debug_printf("basis_compressor::create_basis_file_and_transcode\n"); - const basisu_backend_output &encoded_output = m_backend.get_output(); + const basisu_backend_output& encoded_output = m_params.m_uastc ? m_uastc_backend_output : m_backend.get_output(); if (!m_basis_file.init(encoded_output, m_params.m_tex_type, m_params.m_userdata0, m_params.m_userdata1, m_params.m_y_flip, m_params.m_us_per_frame)) { - error_printf("basis_compressor::write_output_files_and_compute_stats: basisu_backend:init() failed!\n"); + error_printf("basis_compressor::create_basis_file_and_transcode: basisu_backend:init() failed!\n"); return false; } - + const uint8_vec &comp_data = m_basis_file.get_compressed_data(); m_output_basis_file = comp_data; - // Verify the compressed data by transcoding it to ETC1/BC1 and validating the CRC's. + interval_timer tm; + tm.start(); + + basist::basisu_transcoder_init(); + + debug_printf("basist::basisu_transcoder_init: Took %f ms\n", tm.get_elapsed_ms()); + + // Verify the compressed data by transcoding it to ASTC (or ETC1)/BC7 and validating the CRC's. basist::basisu_transcoder decoder(m_params.m_pSel_codebook); if (!decoder.validate_file_checksums(&comp_data[0], (uint32_t)comp_data.size(), true)) { @@ -948,10 +1093,9 @@ namespace basisu m_decoded_output_textures.resize(m_slice_descs.size()); m_decoded_output_textures_unpacked.resize(m_slice_descs.size()); - m_decoded_output_textures_bc1.resize(m_slice_descs.size()); - m_decoded_output_textures_unpacked_bc1.resize(m_slice_descs.size()); - - interval_timer tm; + m_decoded_output_textures_bc7.resize(m_slice_descs.size()); + m_decoded_output_textures_unpacked_bc7.resize(m_slice_descs.size()); + tm.start(); if (!decoder.start_transcoding(&comp_data[0], (uint32_t)comp_data.size())) @@ -970,74 +1114,72 @@ namespace basisu for (uint32_t i = 0; i < m_slice_descs.size(); i++) { gpu_image decoded_texture; - decoded_texture.init(texture_format::cETC1, m_slice_descs[i].m_width, m_slice_descs[i].m_height); + decoded_texture.init(m_params.m_uastc ? texture_format::cASTC4x4 : texture_format::cETC1, m_slice_descs[i].m_width, m_slice_descs[i].m_height); tm.start(); + + basist::block_format format = m_params.m_uastc ? basist::block_format::cASTC_4x4 : basist::block_format::cETC1; + uint32_t bytes_per_block = m_params.m_uastc ? 16 : 8; if (!decoder.transcode_slice(&comp_data[0], (uint32_t)comp_data.size(), i, - reinterpret_cast(decoded_texture.get_ptr()), m_slice_descs[i].m_num_blocks_x * m_slice_descs[i].m_num_blocks_y, basist::block_format::cETC1, 8)) + reinterpret_cast(decoded_texture.get_ptr()), m_slice_descs[i].m_num_blocks_x * m_slice_descs[i].m_num_blocks_y, format, bytes_per_block)) { - error_printf("Transcoding failed to ETC1 on slice %u!\n", i); + error_printf("Transcoding failed on slice %u!\n", i); return false; } total_time_etc1 += tm.get_elapsed_secs(); - uint32_t image_crc16 = basist::crc16(decoded_texture.get_ptr(), decoded_texture.get_size_in_bytes(), 0); - if (image_crc16 != m_backend.get_output().m_slice_image_crcs[i]) + if (encoded_output.m_tex_format == basist::basis_tex_format::cETC1S) { - error_printf("Decoded image data CRC check failed on slice %u!\n", i); - return false; + uint32_t image_crc16 = basist::crc16(decoded_texture.get_ptr(), decoded_texture.get_size_in_bytes(), 0); + if (image_crc16 != encoded_output.m_slice_image_crcs[i]) + { + error_printf("Decoded image data CRC check failed on slice %u!\n", i); + return false; + } + debug_printf("Decoded image data CRC check succeeded on slice %i\n", i); } - debug_printf("Decoded image data CRC check succeeded on slice %i\n", i); m_decoded_output_textures[i] = decoded_texture; total_orig_pixels += m_slice_descs[i].m_orig_width * m_slice_descs[i].m_orig_height; total_texels += m_slice_descs[i].m_width * m_slice_descs[i].m_height; } - - tm.start(); - - basist::basisu_transcoder_init(); - - debug_printf("basist::basisu_transcoder_init: Took %f ms\n", tm.get_elapsed_ms()); - - double total_time_bc1 = 0; + + double total_time_bc7 = 0; for (uint32_t i = 0; i < m_slice_descs.size(); i++) { gpu_image decoded_texture; - decoded_texture.init(texture_format::cBC1, m_slice_descs[i].m_width, m_slice_descs[i].m_height); + decoded_texture.init(texture_format::cBC7, m_slice_descs[i].m_width, m_slice_descs[i].m_height); tm.start(); if (!decoder.transcode_slice(&comp_data[0], (uint32_t)comp_data.size(), i, - reinterpret_cast(decoded_texture.get_ptr()), m_slice_descs[i].m_num_blocks_x * m_slice_descs[i].m_num_blocks_y, basist::block_format::cBC1, 8)) + reinterpret_cast(decoded_texture.get_ptr()), m_slice_descs[i].m_num_blocks_x * m_slice_descs[i].m_num_blocks_y, basist::block_format::cBC7, 16)) { - error_printf("Transcoding failed to BC1 on slice %u!\n", i); + error_printf("Transcoding failed to BC7 on slice %u!\n", i); return false; } - total_time_bc1 += tm.get_elapsed_secs(); + total_time_bc7 += tm.get_elapsed_secs(); - m_decoded_output_textures_bc1[i] = decoded_texture; + m_decoded_output_textures_bc7[i] = decoded_texture; } for (uint32_t i = 0; i < m_slice_descs.size(); i++) { m_decoded_output_textures[i].unpack(m_decoded_output_textures_unpacked[i]); - m_decoded_output_textures_bc1[i].unpack(m_decoded_output_textures_unpacked_bc1[i]); + m_decoded_output_textures_bc7[i].unpack(m_decoded_output_textures_unpacked_bc7[i]); } - debug_printf("Transcoded to ETC1 in %3.3fms, %f texels/sec\n", total_time_etc1 * 1000.0f, total_orig_pixels / total_time_etc1); + debug_printf("Transcoded to %s in %3.3fms, %f texels/sec\n", m_params.m_uastc ? "ASTC" : "ETC1", total_time_etc1 * 1000.0f, total_orig_pixels / total_time_etc1); - debug_printf("Transcoded to BC1 in %3.3fms, %f texels/sec\n", total_time_bc1 * 1000.0f, total_orig_pixels / total_time_bc1); + debug_printf("Transcoded to BC7 in %3.3fms, %f texels/sec\n", total_time_bc7 * 1000.0f, total_orig_pixels / total_time_bc7); debug_printf("Total .basis output file size: %u, %3.3f bits/texel\n", comp_data.size(), comp_data.size() * 8.0f / total_orig_pixels); - - m_output_blocks.resize(0); - + uint32_t total_orig_texels = 0; for (uint32_t slice_index = 0; slice_index < m_slice_descs.size(); slice_index++) { @@ -1046,10 +1188,9 @@ namespace basisu total_orig_texels += slice_desc.m_orig_width * slice_desc.m_orig_height; const uint32_t total_blocks = slice_desc.m_num_blocks_x * slice_desc.m_num_blocks_y; + BASISU_NOTE_UNUSED(total_blocks); assert(m_decoded_output_textures[slice_index].get_total_blocks() == total_blocks); - - memcpy(enlarge_vector(m_output_blocks, total_blocks), m_decoded_output_textures[slice_index].get_ptr(), sizeof(etc_block) * total_blocks); } m_basis_file_size = (uint32_t)comp_data.size(); @@ -1062,9 +1203,11 @@ namespace basisu { debug_printf("basis_compressor::write_output_files_and_compute_stats\n"); + //const basisu_backend_output& encoded_output = m_params.m_uastc ? m_uastc_backend_output : m_backend.get_output(); + + const uint8_vec& comp_data = m_basis_file.get_compressed_data(); if (m_params.m_write_output_basis_files) { - const uint8_vec &comp_data = m_basis_file.get_compressed_data(); const std::string& basis_filename = m_params.m_out_filename; @@ -1076,6 +1219,27 @@ namespace basisu printf("Wrote output .basis file \"%s\"\n", basis_filename.c_str()); } + size_t comp_size = 0; + if ((m_params.m_compute_stats) && (m_params.m_uastc) && (comp_data.size())) + { + void* pComp_data = tdefl_compress_mem_to_heap(&comp_data[0], comp_data.size(), &comp_size, TDEFL_MAX_PROBES_MASK);// TDEFL_DEFAULT_MAX_PROBES); + size_t decomp_size = 0; + void* pDecomp_data = tinfl_decompress_mem_to_heap(pComp_data, comp_size, &decomp_size, 0); + if ((decomp_size != comp_data.size()) || (memcmp(pDecomp_data, &comp_data[0], decomp_size) != 0)) + { + printf("basis_compressor::create_basis_file_and_transcode:: miniz compression or decompression failed!\n"); + return false; + } + mz_free(pComp_data); + mz_free(pDecomp_data); + uint32_t total_texels = 0; + for (uint32_t i = 0; i < m_slice_descs.size(); i++) + total_texels += (m_slice_descs[i].m_num_blocks_x * m_slice_descs[i].m_num_blocks_y) * 16; + debug_printf(".basis file size: %u, LZ compressed file size: %u, %3.2f bits/texel\n", + (uint32_t)comp_data.size(), + (uint32_t)comp_size, + comp_size * 8.0f / total_texels); + } m_stats.resize(m_slice_descs.size()); @@ -1097,75 +1261,119 @@ namespace basisu image_metrics em; - // ---- .basis ETC1S stats - em.calc(m_slice_images[slice_index], m_decoded_output_textures_unpacked[slice_index], 0, 0); - em.print(".basis ETC1S 709 Luma: "); - - s.m_basis_etc1s_luma_709_psnr = static_cast(em.m_psnr); - s.m_basis_etc1s_luma_709_ssim = static_cast(em.m_ssim); - - em.calc(m_slice_images[slice_index], m_decoded_output_textures_unpacked[slice_index], 0, 0, true, true); - em.print(".basis ETC1S 601 Luma: "); - - s.m_basis_etc1s_luma_601_psnr = static_cast(em.m_psnr); - + // ---- .basis stats em.calc(m_slice_images[slice_index], m_decoded_output_textures_unpacked[slice_index], 0, 3); - em.print(".basis ETC1S RGB Avg: "); + em.print(".basis RGB Avg: "); + s.m_basis_rgb_avg_psnr = em.m_psnr; - s.m_basis_etc1s_rgb_avg_psnr = em.m_psnr; + em.calc(m_slice_images[slice_index], m_decoded_output_textures_unpacked[slice_index], 0, 4); + em.print(".basis RGBA Avg: "); + s.m_basis_rgba_avg_psnr = em.m_psnr; - if (m_slice_descs.size() == 1) + em.calc(m_slice_images[slice_index], m_decoded_output_textures_unpacked[slice_index], 0, 1); + em.print(".basis R Avg: "); + + em.calc(m_slice_images[slice_index], m_decoded_output_textures_unpacked[slice_index], 1, 1); + em.print(".basis G Avg: "); + + em.calc(m_slice_images[slice_index], m_decoded_output_textures_unpacked[slice_index], 2, 1); + em.print(".basis B Avg: "); + + if (m_params.m_uastc) { - debug_printf(".basis Luma 709 PSNR per bit/texel*10000: %3.3f\n", 10000.0f * s.m_basis_etc1s_luma_709_psnr / ((m_backend.get_output().get_output_size_estimate() * 8.0f) / (slice_desc.m_orig_width * slice_desc.m_orig_height))); + em.calc(m_slice_images[slice_index], m_decoded_output_textures_unpacked[slice_index], 3, 1); + em.print(".basis A Avg: "); + + s.m_basis_a_avg_psnr = em.m_psnr; } - // ---- .basis BC1 stats - em.calc(m_slice_images[slice_index], m_decoded_output_textures_unpacked_bc1[slice_index], 0, 0); - em.print(".basis BC1 709 Luma: "); + em.calc(m_slice_images[slice_index], m_decoded_output_textures_unpacked[slice_index], 0, 0); + em.print(".basis 709 Luma: "); + s.m_basis_luma_709_psnr = static_cast(em.m_psnr); + s.m_basis_luma_709_ssim = static_cast(em.m_ssim); + + em.calc(m_slice_images[slice_index], m_decoded_output_textures_unpacked[slice_index], 0, 0, true, true); + em.print(".basis 601 Luma: "); + s.m_basis_luma_601_psnr = static_cast(em.m_psnr); - s.m_basis_bc1_luma_709_psnr = static_cast(em.m_psnr); - s.m_basis_bc1_luma_709_ssim = static_cast(em.m_ssim); + if (m_slice_descs.size() == 1) + { + const uint32_t output_size = comp_size ? (uint32_t)comp_size : (uint32_t)comp_data.size(); + debug_printf(".basis RGB PSNR per bit/texel*10000: %3.3f\n", 10000.0f * s.m_basis_rgb_avg_psnr / ((output_size * 8.0f) / (slice_desc.m_orig_width * slice_desc.m_orig_height))); + debug_printf(".basis Luma 709 PSNR per bit/texel*10000: %3.3f\n", 10000.0f * s.m_basis_luma_709_psnr / ((output_size * 8.0f) / (slice_desc.m_orig_width * slice_desc.m_orig_height))); + } - em.calc(m_slice_images[slice_index], m_decoded_output_textures_unpacked_bc1[slice_index], 0, 0, true, true); - em.print(".basis BC1 601 Luma: "); + { + // ---- BC7 stats + em.calc(m_slice_images[slice_index], m_decoded_output_textures_unpacked_bc7[slice_index], 0, 3); + em.print("BC7 RGB Avg: "); + s.m_bc7_rgb_avg_psnr = em.m_psnr; - s.m_basis_bc1_luma_601_psnr = static_cast(em.m_psnr); + em.calc(m_slice_images[slice_index], m_decoded_output_textures_unpacked_bc7[slice_index], 0, 4); + em.print("BC7 RGBA Avg: "); + s.m_bc7_rgba_avg_psnr = em.m_psnr; - em.calc(m_slice_images[slice_index], m_decoded_output_textures_unpacked_bc1[slice_index], 0, 3); - em.print(".basis BC1 RGB Avg: "); + em.calc(m_slice_images[slice_index], m_decoded_output_textures_unpacked_bc7[slice_index], 0, 1); + em.print("BC7 R Avg: "); - s.m_basis_bc1_rgb_avg_psnr = static_cast(em.m_psnr); + em.calc(m_slice_images[slice_index], m_decoded_output_textures_unpacked_bc7[slice_index], 1, 1); + em.print("BC7 G Avg: "); - // ---- Nearly best possible ETC1S stats - em.calc(m_slice_images[slice_index], m_best_etc1s_images_unpacked[slice_index], 0, 0); - em.print("Unquantized ETC1S 709 Luma: "); + em.calc(m_slice_images[slice_index], m_decoded_output_textures_unpacked_bc7[slice_index], 2, 1); + em.print("BC7 B Avg: "); - s.m_best_luma_709_psnr = static_cast(em.m_psnr); - s.m_best_luma_709_ssim = static_cast(em.m_ssim); + if (m_params.m_uastc) + { + em.calc(m_slice_images[slice_index], m_decoded_output_textures_unpacked_bc7[slice_index], 3, 1); + em.print("BC7 A Avg: "); - em.calc(m_slice_images[slice_index], m_best_etc1s_images_unpacked[slice_index], 0, 0, true, true); - em.print("Unquantized ETC1S 601 Luma: "); + s.m_bc7_a_avg_psnr = em.m_psnr; + } - s.m_best_luma_601_psnr = static_cast(em.m_psnr); - - em.calc(m_slice_images[slice_index], m_best_etc1s_images_unpacked[slice_index], 0, 3); - em.print("Unquantized ETC1S RGB Avg: "); + em.calc(m_slice_images[slice_index], m_decoded_output_textures_unpacked_bc7[slice_index], 0, 0); + em.print("BC7 709 Luma: "); + s.m_bc7_luma_709_psnr = static_cast(em.m_psnr); + s.m_bc7_luma_709_ssim = static_cast(em.m_ssim); - s.m_best_rgb_avg_psnr = static_cast(em.m_psnr); + em.calc(m_slice_images[slice_index], m_decoded_output_textures_unpacked_bc7[slice_index], 0, 0, true, true); + em.print("BC7 601 Luma: "); + s.m_bc7_luma_601_psnr = static_cast(em.m_psnr); + } + + if (!m_params.m_uastc) + { + // ---- Nearly best possible ETC1S stats + em.calc(m_slice_images[slice_index], m_best_etc1s_images_unpacked[slice_index], 0, 0); + em.print("Unquantized ETC1S 709 Luma: "); + + s.m_best_etc1s_luma_709_psnr = static_cast(em.m_psnr); + s.m_best_etc1s_luma_709_ssim = static_cast(em.m_ssim); + + em.calc(m_slice_images[slice_index], m_best_etc1s_images_unpacked[slice_index], 0, 0, true, true); + em.print("Unquantized ETC1S 601 Luma: "); + + s.m_best_etc1s_luma_601_psnr = static_cast(em.m_psnr); + + em.calc(m_slice_images[slice_index], m_best_etc1s_images_unpacked[slice_index], 0, 3); + em.print("Unquantized ETC1S RGB Avg: "); + + s.m_best_etc1s_rgb_avg_psnr = static_cast(em.m_psnr); + } } - if (m_frontend.get_params().m_debug_images) - { - std::string out_basename; - if (m_params.m_out_filename.size()) - string_get_filename(m_params.m_out_filename.c_str(), out_basename); - else if (m_params.m_source_filenames.size()) - string_get_filename(m_params.m_source_filenames[slice_desc.m_source_file_index].c_str(), out_basename); - - string_remove_extension(out_basename); - out_basename = "basis_debug_" + out_basename + string_format("_slice_%u", slice_index); + std::string out_basename; + if (m_params.m_out_filename.size()) + string_get_filename(m_params.m_out_filename.c_str(), out_basename); + else if (m_params.m_source_filenames.size()) + string_get_filename(m_params.m_source_filenames[slice_desc.m_source_file_index].c_str(), out_basename); + string_remove_extension(out_basename); + out_basename = "basis_debug_" + out_basename + string_format("_slice_%u", slice_index); + + if ((!m_params.m_uastc) && (m_frontend.get_params().m_debug_images)) + { // Write "best" ETC1S debug images + if (!m_params.m_uastc) { gpu_image best_etc1s_gpu_image(m_best_etc1s_images[slice_index]); best_etc1s_gpu_image.override_dimensions(slice_desc.m_orig_width, slice_desc.m_orig_height); @@ -1175,27 +1383,30 @@ namespace basisu best_etc1s_gpu_image.unpack(best_etc1s_unpacked); save_png(out_basename + "_best_etc1s.png", best_etc1s_unpacked); } + } - // Write decoded ETC1S debug images + if (m_params.m_debug_images) + { + // Write decoded ETC1S/ASTC debug images { - gpu_image decoded_etc1s(m_decoded_output_textures[slice_index]); - decoded_etc1s.override_dimensions(slice_desc.m_orig_width, slice_desc.m_orig_height); - write_compressed_texture_file((out_basename + "_decoded_etc1s.ktx").c_str(), decoded_etc1s); + gpu_image decoded_etc1s_or_astc(m_decoded_output_textures[slice_index]); + decoded_etc1s_or_astc.override_dimensions(slice_desc.m_orig_width, slice_desc.m_orig_height); + write_compressed_texture_file((out_basename + "_transcoded_etc1s_astc.ktx").c_str(), decoded_etc1s_or_astc); image temp(m_decoded_output_textures_unpacked[slice_index]); temp.crop(slice_desc.m_orig_width, slice_desc.m_orig_height); - save_png(out_basename + "_decoded_etc1s.png", temp); + save_png(out_basename + "_transcoded_etc1s_astc.png", temp); } - - // Write decoded BC1 debug images - { - gpu_image decoded_bc1(m_decoded_output_textures_bc1[slice_index]); - decoded_bc1.override_dimensions(slice_desc.m_orig_width, slice_desc.m_orig_height); - write_compressed_texture_file((out_basename + "_decoded_bc1.ktx").c_str(), decoded_bc1); - image temp(m_decoded_output_textures_unpacked_bc1[slice_index]); + // Write decoded BC7 debug images + { + gpu_image decoded_bc7(m_decoded_output_textures_bc7[slice_index]); + decoded_bc7.override_dimensions(slice_desc.m_orig_width, slice_desc.m_orig_height); + write_compressed_texture_file((out_basename + "_transcoded_bc7.ktx").c_str(), decoded_bc7); + + image temp(m_decoded_output_textures_unpacked_bc7[slice_index]); temp.crop(slice_desc.m_orig_width, slice_desc.m_orig_height); - save_png(out_basename + "_decoded_bc1.png", temp); + save_png(out_basename + "_transcoded_bc7.png", temp); } } } diff --git a/basisu_comp.h b/basisu_comp.h index 1c201dd..af32655 100644 --- a/basisu_comp.h +++ b/basisu_comp.h @@ -1,5 +1,5 @@ // basisu_comp.h -// Copyright (C) 2019 Binomial LLC. All Rights Reserved. +// Copyright (C) 2019-2020 Binomial LLC. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -18,6 +18,7 @@ #include "basisu_basis_file.h" #include "transcoder/basisu_global_selector_palette.h" #include "transcoder/basisu_transcoder.h" +#include "basisu_uastc_enc.h" namespace basisu { @@ -52,43 +53,52 @@ namespace basisu m_filename.clear(); m_width = 0; m_height = 0; + + m_basis_rgb_avg_psnr = 0.0f; + m_basis_rgba_avg_psnr = 0.0f; + m_basis_a_avg_psnr = 0.0f; + m_basis_luma_709_psnr = 0.0f; + m_basis_luma_601_psnr = 0.0f; + m_basis_luma_709_ssim = 0.0f; - m_basis_etc1s_rgb_avg_psnr = 0.0f; - m_basis_etc1s_luma_709_psnr = 0.0f; - m_basis_etc1s_luma_601_psnr = 0.0f; - m_basis_etc1s_luma_709_ssim = 0.0f; - - m_basis_bc1_rgb_avg_psnr = 0.0f; - m_basis_bc1_luma_709_psnr = 0.0f; - m_basis_bc1_luma_601_psnr = 0.0f; - m_basis_bc1_luma_709_ssim = 0.0f; - - m_best_rgb_avg_psnr = 0.0f; - m_best_luma_709_psnr = 0.0f; - m_best_luma_601_psnr = 0.0f; - m_best_luma_709_ssim = 0.0f; + m_bc7_rgb_avg_psnr = 0.0f; + m_bc7_rgba_avg_psnr = 0.0f; + m_bc7_a_avg_psnr = 0.0f; + m_bc7_luma_709_psnr = 0.0f; + m_bc7_luma_601_psnr = 0.0f; + m_bc7_luma_709_ssim = 0.0f; + + m_best_etc1s_rgb_avg_psnr = 0.0f; + m_best_etc1s_luma_709_psnr = 0.0f; + m_best_etc1s_luma_601_psnr = 0.0f; + m_best_etc1s_luma_709_ssim = 0.0f; } std::string m_filename; uint32_t m_width; uint32_t m_height; - // .basis compressed - float m_basis_etc1s_rgb_avg_psnr; - float m_basis_etc1s_luma_709_psnr; - float m_basis_etc1s_luma_601_psnr; - float m_basis_etc1s_luma_709_ssim; - - float m_basis_bc1_rgb_avg_psnr; - float m_basis_bc1_luma_709_psnr; - float m_basis_bc1_luma_601_psnr; - float m_basis_bc1_luma_709_ssim; + // .basis compressed (ETC1S or UASTC statistics) + float m_basis_rgb_avg_psnr; + float m_basis_rgba_avg_psnr; + float m_basis_a_avg_psnr; + float m_basis_luma_709_psnr; + float m_basis_luma_601_psnr; + float m_basis_luma_709_ssim; - // Normal (highest quality) compressed ETC1S - float m_best_rgb_avg_psnr; - float m_best_luma_709_psnr; - float m_best_luma_601_psnr; - float m_best_luma_709_ssim; + // BC7 statistics + float m_bc7_rgb_avg_psnr; + float m_bc7_rgba_avg_psnr; + float m_bc7_a_avg_psnr; + float m_bc7_luma_709_psnr; + float m_bc7_luma_601_psnr; + float m_bc7_luma_709_ssim; + + // Highest achievable quality ETC1S statistics + float m_best_etc1s_rgb_avg_psnr; + float m_best_etc1s_luma_709_psnr; + float m_best_etc1s_luma_601_psnr; + float m_best_etc1s_luma_709_ssim; }; template @@ -175,18 +185,23 @@ namespace basisu struct basis_compressor_params { basis_compressor_params() : + m_pSel_codebook(NULL), + m_compression_level((int)BASISU_DEFAULT_COMPRESSION_LEVEL, 0, (int)BASISU_MAX_COMPRESSION_LEVEL), + m_selector_rdo_thresh(BASISU_DEFAULT_SELECTOR_RDO_THRESH, 0.0f, 1e+10f), + m_endpoint_rdo_thresh(BASISU_DEFAULT_ENDPOINT_RDO_THRESH, 0.0f, 1e+10f), m_hybrid_sel_cb_quality_thresh(BASISU_DEFAULT_HYBRID_SEL_CB_QUALITY_THRESH, 0.0f, 1e+10f), m_global_pal_bits(8, 0, ETC1_GLOBAL_SELECTOR_CODEBOOK_MAX_PAL_BITS), m_global_mod_bits(8, 0, basist::etc1_global_palette_entry_modifier::cTotalBits), - m_endpoint_rdo_thresh(BASISU_DEFAULT_ENDPOINT_RDO_THRESH, 0.0f, 1e+10f), - m_selector_rdo_thresh(BASISU_DEFAULT_SELECTOR_RDO_THRESH, 0.0f, 1e+10f), - m_pSel_codebook(NULL), + m_mip_scale(1.0f, .000125f, 4.0f), + m_mip_smallest_dimension(1, 1, 16384), m_max_endpoint_clusters(512), m_max_selector_clusters(512), m_quality_level(-1), - m_mip_scale(1.0f, .000125f, 4.0f), - m_mip_smallest_dimension(1, 1, 16384), - m_compression_level((int)BASISU_DEFAULT_COMPRESSION_LEVEL, 0, (int)BASISU_MAX_COMPRESSION_LEVEL), + m_pack_uastc_flags(cPackUASTCLevelDefault), + m_rdo_uastc_quality_scalar(1.0f, 0.001f, 10.0f), + m_rdo_uastc_dict_size(32768, 256, 65536), + m_rdo_uastc_max_allowed_rms_increase_ratio(UASTC_RDO_DEFAULT_MAX_ALLOWED_RMS_INCREASE_RATIO, .01f, 100.0f), + m_rdo_uastc_skip_block_rms_thresh(UASTC_RDO_DEFAULT_SKIP_BLOCK_RMS_THRESH, .01f, 100.0f), m_pJob_pool(nullptr) { clear(); @@ -196,6 +211,8 @@ namespace basisu { m_pSel_codebook = NULL; + m_uastc.clear(); + m_source_filenames.clear(); m_source_alpha_filenames.clear(); @@ -247,12 +264,21 @@ namespace basisu m_userdata1 = 0; m_us_per_frame = 0; + m_pack_uastc_flags = cPackUASTCLevelDefault; + m_rdo_uastc.clear(); + m_rdo_uastc_quality_scalar.clear(); + m_rdo_uastc_max_allowed_rms_increase_ratio.clear(); + m_rdo_uastc_skip_block_rms_thresh.clear(); + m_pJob_pool = nullptr; } - + // Pointer to the global selector codebook, or nullptr to not use a global selector codebook const basist::etc1_global_selector_codebook *m_pSel_codebook; + // True to generate UASTC .basis file data, otherwise ETC1S. + bool_param m_uastc; + // If m_read_source_images is true, m_source_filenames (and optionally m_source_alpha_filenames) contains the filenames of PNG images to read. // Otherwise, the compressor processes the images in m_source_images. std::vector m_source_filenames; @@ -343,6 +369,14 @@ namespace basisu uint32_t m_userdata1; uint32_t m_us_per_frame; + // cPackUASTCLevelDefault, etc. + uint32_t m_pack_uastc_flags; + bool_param m_rdo_uastc; + param m_rdo_uastc_quality_scalar; + param m_rdo_uastc_dict_size; + param m_rdo_uastc_max_allowed_rms_increase_ratio; + param m_rdo_uastc_skip_block_rms_thresh; + job_pool *m_pJob_pool; }; @@ -360,25 +394,26 @@ namespace basisu cECSuccess = 0, cECFailedReadingSourceImages, cECFailedValidating, + cECFailedEncodeUASTC, cECFailedFrontEnd, cECFailedFontendExtract, cECFailedBackend, cECFailedCreateBasisFile, - cECFailedWritingOutput + cECFailedWritingOutput, + cECFailedUASTCRDOPostProcess }; error_code process(); const uint8_vec &get_output_basis_file() const { return m_output_basis_file; } - const etc_block_vec &get_output_blocks() const { return m_output_blocks; } - + const std::vector &get_stats() const { return m_stats; } uint32_t get_basis_file_size() const { return m_basis_file_size; } double get_basis_bits_per_texel() const { return m_basis_bits_per_texel; } bool get_any_source_image_has_alpha() const { return m_any_source_image_has_alpha; } - + private: basis_compressor_params m_params; @@ -408,20 +443,24 @@ namespace basisu std::vector m_decoded_output_textures; std::vector m_decoded_output_textures_unpacked; - std::vector m_decoded_output_textures_bc1; - std::vector m_decoded_output_textures_unpacked_bc1; + std::vector m_decoded_output_textures_bc7; + std::vector m_decoded_output_textures_unpacked_bc7; uint8_vec m_output_basis_file; - etc_block_vec m_output_blocks; + + std::vector m_uastc_slice_textures; + basisu_backend_output m_uastc_backend_output; bool m_any_source_image_has_alpha; bool read_source_images(); + bool extract_source_blocks(); bool process_frontend(); bool extract_frontend_texture_data(); bool process_backend(); bool create_basis_file_and_transcode(); bool write_output_files_and_compute_stats(); + error_code encode_slices_to_uastc(); bool generate_mipmaps(const image &img, std::vector &mips, bool has_alpha); bool validate_texture_type_constraints(); }; diff --git a/basisu_enc.cpp b/basisu_enc.cpp index 7057c65..f4a9b20 100644 --- a/basisu_enc.cpp +++ b/basisu_enc.cpp @@ -1,5 +1,5 @@ // basisu_enc.cpp -// Copyright (C) 2019 Binomial LLC. All Rights Reserved. +// Copyright (C) 2019-2020 Binomial LLC. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -18,6 +18,8 @@ #include "basisu_resampler_filters.h" #include "basisu_etc.h" #include "transcoder/basisu_transcoder.h" +#include "basisu_bc7enc.h" +#include "apg_bmp.h" #if defined(_WIN32) // For QueryPerformanceCounter/QueryPerformanceFrequency @@ -54,6 +56,9 @@ namespace basisu void basisu_encoder_init() { basist::basisu_transcoder_init(); + pack_etc1_solid_color_init(); + //uastc_init(); + bc7enc_compress_block_init(); // must be after uastc_init() } void error_printf(const char *pFmt, ...) @@ -108,7 +113,7 @@ namespace basisu #else #error TODO #endif - + interval_timer::interval_timer() : m_start_time(0), m_stop_time(0), m_started(false), m_stopped(false) { if (!g_timer_freq) @@ -169,6 +174,61 @@ namespace basisu return ticks * g_timer_freq; } + const uint32_t MAX_32BIT_ALLOC_SIZE = 250000000; + + bool load_bmp(const char* pFilename, image& img) + { + int w = 0, h = 0; + unsigned int n_chans = 0; + unsigned char* pImage_data = apg_bmp_read(pFilename, &w, &h, &n_chans); + + if ((!pImage_data) || (!w) || (!h) || ((n_chans != 3) && (n_chans != 4))) + { + error_printf("Failed loading .BMP image \"%s\"!\n", pFilename); + + if (pImage_data) + apg_bmp_free(pImage_data); + + return false; + } + + if (sizeof(void *) == sizeof(uint32_t)) + { + if ((w * h * n_chans) > MAX_32BIT_ALLOC_SIZE) + { + error_printf("Image \"%s\" is too large (%ux%u) to process in a 32-bit build!\n", pFilename, w, h); + + if (pImage_data) + apg_bmp_free(pImage_data); + + return false; + } + } + + img.resize(w, h); + + const uint8_t *pSrc = pImage_data; + for (int y = 0; y < h; y++) + { + color_rgba *pDst = &img(0, y); + + for (int x = 0; x < w; x++) + { + pDst->r = pSrc[0]; + pDst->g = pSrc[1]; + pDst->b = pSrc[2]; + pDst->a = (n_chans == 3) ? 255 : pSrc[3]; + + pSrc += n_chans; + ++pDst; + } + } + + apg_bmp_free(pImage_data); + + return true; + } + bool load_png(const char* pFilename, image& img) { std::vector buffer; @@ -187,10 +247,9 @@ namespace basisu return false; const uint32_t exepected_alloc_size = w * h * sizeof(uint32_t); - + // If the file is too large on 32-bit builds then just bail now, to prevent causing a memory exception. - const uint32_t MAX_ALLOC_SIZE = 250000000; - if (exepected_alloc_size >= MAX_ALLOC_SIZE) + if (exepected_alloc_size >= MAX_32BIT_ALLOC_SIZE) { error_printf("Image \"%s\" is too large (%ux%u) to process in a 32-bit build!\n", pFilename, w, h); return false; @@ -213,12 +272,33 @@ namespace basisu return true; } + + bool load_image(const char* pFilename, image& img) + { + std::string ext(string_get_extension(std::string(pFilename))); + + if (ext.length() == 0) + return false; + + const char *pExt = ext.c_str(); + + if (strcasecmp(pExt, "png") == 0) + return load_png(pFilename, img); + if (strcasecmp(pExt, "bmp") == 0) + return load_bmp(pFilename, img); + + return false; + } - bool save_png(const char* pFilename, const image & img, uint32_t image_save_flags, uint32_t grayscale_comp) + bool save_png(const char* pFilename, const image &img, uint32_t image_save_flags, uint32_t grayscale_comp) { if (!img.get_total_pixels()) return false; + const uint32_t MAX_PNG_IMAGE_DIM = 32768; + if ((img.get_width() > MAX_PNG_IMAGE_DIM) || (img.get_height() > MAX_PNG_IMAGE_DIM)) + return false; + std::vector out; unsigned err = 0; @@ -231,16 +311,17 @@ namespace basisu for (uint32_t x = 0; x < img.get_width(); x++) *pDst++ = img(x, y)[grayscale_comp]; - err = lodepng::encode(out, (const uint8_t*)& g_pixels[0], img.get_width(), img.get_height(), LCT_GREY, 8); + err = lodepng::encode(out, (const uint8_t*)&g_pixels[0], img.get_width(), img.get_height(), LCT_GREY, 8); } else { bool has_alpha = img.has_alpha(); if ((!has_alpha) || ((image_save_flags & cImageSaveIgnoreAlpha) != 0)) { - uint8_vec rgb_pixels(img.get_width() * 3 * img.get_height()); + const uint64_t total_bytes = (uint64_t)img.get_width() * 3U * (uint64_t)img.get_height(); + uint8_vec rgb_pixels(total_bytes); uint8_t *pDst = &rgb_pixels[0]; - + for (uint32_t y = 0; y < img.get_height(); y++) { for (uint32_t x = 0; x < img.get_width(); x++) @@ -1171,9 +1252,9 @@ namespace basisu total_values *= (double)clamp(total_chans, 1, 4); m_mean = (float)clamp(sum / total_values, 0.0f, 255.0); - m_mean_squared = (float)clamp(sum2 / total_values, 0.0f, 255.0 * 255.0); + m_mean_squared = (float)clamp(sum2 / total_values, 0.0f, 255.0f * 255.0f); m_rms = (float)sqrt(m_mean_squared); - m_psnr = m_rms ? (float)clamp(log10(255.0 / m_rms) * 20.0, 0.0f, 300.0f) : 1e+10f; + m_psnr = m_rms ? (float)clamp(log10(255.0 / m_rms) * 20.0f, 0.0f, 100.0f) : 100.0f; } void fill_buffer_with_random_bytes(void *pBuf, size_t size, uint32_t seed) @@ -1253,8 +1334,8 @@ namespace basisu } job_pool::job_pool(uint32_t num_threads) : - m_kill_flag(false), - m_num_active_jobs(0) + m_num_active_jobs(0), + m_kill_flag(false) { assert(num_threads >= 1U); diff --git a/basisu_enc.h b/basisu_enc.h index c2b9133..146111b 100644 --- a/basisu_enc.h +++ b/basisu_enc.h @@ -1,5 +1,5 @@ // basisu_enc.h -// Copyright (C) 2019 Binomial LLC. All Rights Reserved. +// Copyright (C) 2019-2020 Binomial LLC. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -31,7 +31,8 @@ namespace basisu { extern uint8_t g_hamming_dist[256]; - // Encoder library initialization + // Encoder library initialization. + // This function MUST be called before encoding anything! void basisu_encoder_init(); void error_printf(const char *pFmt, ...); @@ -42,7 +43,67 @@ namespace basisu { return (uint8_t)((i & 0xFFFFFF00U) ? (~(i >> 31)) : i); } - + + inline int32_t clampi(int32_t value, int32_t low, int32_t high) + { + if (value < low) + value = low; + else if (value > high) + value = high; + return value; + } + + inline uint8_t mul_8(uint32_t v, uint32_t a) + { + v = v * a + 128; + return (uint8_t)((v + (v >> 8)) >> 8); + } + inline uint64_t read_bits(const uint8_t* pBuf, uint32_t& bit_offset, uint32_t codesize) + { + assert(codesize <= 64); + uint64_t bits = 0; + uint32_t total_bits = 0; + + while (total_bits < codesize) + { + uint32_t byte_bit_offset = bit_offset & 7; + uint32_t bits_to_read = minimum(codesize - total_bits, 8 - byte_bit_offset); + + uint32_t byte_bits = pBuf[bit_offset >> 3] >> byte_bit_offset; + byte_bits &= ((1 << bits_to_read) - 1); + + bits |= ((uint64_t)(byte_bits) << total_bits); + + total_bits += bits_to_read; + bit_offset += bits_to_read; + } + + return bits; + } + + inline uint32_t read_bits32(const uint8_t* pBuf, uint32_t& bit_offset, uint32_t codesize) + { + assert(codesize <= 32); + uint32_t bits = 0; + uint32_t total_bits = 0; + + while (total_bits < codesize) + { + uint32_t byte_bit_offset = bit_offset & 7; + uint32_t bits_to_read = minimum(codesize - total_bits, 8 - byte_bit_offset); + + uint32_t byte_bits = pBuf[bit_offset >> 3] >> byte_bit_offset; + byte_bits &= ((1 << bits_to_read) - 1); + + bits |= (byte_bits << total_bits); + + total_bits += bits_to_read; + bit_offset += bits_to_read; + } + + return bits; + } + // Hashing inline uint32_t bitmix32c(uint32_t v) @@ -78,6 +139,71 @@ namespace basisu return hash_hsieh(reinterpret_cast(&k), sizeof(k)); } }; + class running_stat + { + public: + running_stat() : + m_n(0), + m_old_m(0), m_new_m(0), m_old_s(0), m_new_s(0) + { + } + void clear() + { + m_n = 0; + } + void push(double x) + { + m_n++; + if (m_n == 1) + { + m_old_m = m_new_m = x; + m_old_s = 0.0; + m_min = x; + m_max = x; + } + else + { + m_new_m = m_old_m + (x - m_old_m) / m_n; + m_new_s = m_old_s + (x - m_old_m) * (x - m_new_m); + m_old_m = m_new_m; + m_old_s = m_new_s; + m_min = std::min(x, m_min); + m_max = std::max(x, m_max); + } + } + uint32_t get_num() const + { + return m_n; + } + double get_mean() const + { + return (m_n > 0) ? m_new_m : 0.0; + } + + double get_variance() const + { + return ((m_n > 1) ? m_new_s / (m_n - 1) : 0.0); + } + + double get_std_dev() const + { + return sqrt(get_variance()); + } + + double get_min() const + { + return m_min; + } + + double get_max() const + { + return m_max; + } + + private: + uint32_t m_n; + double m_old_m, m_new_m, m_old_s, m_new_s, m_min, m_max; + }; // Linear algebra @@ -117,7 +243,7 @@ namespace basisu inline vec &set(const vec &other) { uint32_t i; - if (static_cast(&other) == static_cast(this)) + if ((const void *)(&other) == (const void *)(this)) return *this; const uint32_t m = minimum(OtherN, N); for (i = 0; i < m; i++) @@ -357,6 +483,7 @@ namespace basisu BASISU_NO_EQUALS_OR_COPY_CONSTRUCT(job_pool); public: + // num_threads is the TOTAL number of job pool threads, including the calling thread! So 2=1 new thread, 3=2 new threads, etc. job_pool(uint32_t num_threads); ~job_pool(); @@ -419,7 +546,7 @@ namespace basisu return *this; } }; - + class color_rgba { public: @@ -439,6 +566,25 @@ namespace basisu inline color_rgba() { static_assert(sizeof(*this) == 4, "sizeof(*this) != 4"); + static_assert(sizeof(*this) == sizeof(basist::color32), "sizeof(*this) != sizeof(basist::color32)"); + } + + // Not too hot about this idea. + inline color_rgba(const basist::color32& other) : + r(other.r), + g(other.g), + b(other.b), + a(other.a) + { + } + + color_rgba& operator= (const basist::color32& rhs) + { + r = rhs.r; + g = rhs.g; + b = rhs.b; + a = rhs.a; + return *this; } inline color_rgba(int y) @@ -562,6 +708,14 @@ namespace basisu inline int get_601_luma() const { return (19595U * m_comps[0] + 38470U * m_comps[1] + 7471U * m_comps[2] + 32768U) >> 16U; } inline int get_709_luma() const { return (13938U * m_comps[0] + 46869U * m_comps[1] + 4729U * m_comps[2] + 32768U) >> 16U; } inline int get_luma(bool luma_601) const { return luma_601 ? get_601_luma() : get_709_luma(); } + + inline basist::color32 get_color32() const + { + return basist::color32(r, g, b, a); + } + + static color_rgba comp_min(const color_rgba& a, const color_rgba& b) { return color_rgba(std::min(a[0], b[0]), std::min(a[1], b[1]), std::min(a[2], b[2]), std::min(a[3], b[3])); } + static color_rgba comp_max(const color_rgba& a, const color_rgba& b) { return color_rgba(std::max(a[0], b[0]), std::max(a[1], b[1]), std::max(a[2], b[2]), std::max(a[3], b[3])); } }; typedef std::vector color_rgba_vec; @@ -621,6 +775,13 @@ namespace basisu return color_distance(e1, e2, alpha); } + static inline uint32_t color_distance_la(const color_rgba& a, const color_rgba& b) + { + const int dl = a.r - b.r; + const int da = a.a - b.a; + return dl * dl + da * da; + } + // String helpers inline int string_find_right(const std::string& filename, char c) @@ -1238,7 +1399,7 @@ namespace basisu bool prep_split(const tsvq_node &node, TrainingVectorType &l_child_result, TrainingVectorType &r_child_result) const { - const uint32_t N = TrainingVectorType::num_elements; + //const uint32_t N = TrainingVectorType::num_elements; if (2 == node.m_training_vecs.size()) { @@ -2634,9 +2795,13 @@ namespace basisu }; // Image saving/loading/resampling - + bool load_png(const char* pFilename, image& img); inline bool load_png(const std::string &filename, image &img) { return load_png(filename.c_str(), img); } + + // Currently loads .BMP or .PNG. + bool load_image(const char* pFilename, image& img); + inline bool load_image(const std::string &filename, image &img) { return load_image(filename.c_str(), img); } enum { diff --git a/basisu_etc.cpp b/basisu_etc.cpp index 2a23afb..f57ae09 100644 --- a/basisu_etc.cpp +++ b/basisu_etc.cpp @@ -1,5 +1,5 @@ // basis_etc.cpp -// Copyright (C) 2019 Binomial LLC. All Rights Reserved. +// Copyright (C) 2019-2020 Binomial LLC. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -19,6 +19,228 @@ namespace basisu { + const int8_t g_etc2_eac_tables[16][8] = + { + { -3, -6, -9, -15, 2, 5, 8, 14 }, { -3, -7, -10, -13, 2, 6, 9, 12 }, { -2, -5, -8, -13, 1, 4, 7, 12 }, { -2, -4, -6, -13, 1, 3, 5, 12 }, + { -3, -6, -8, -12, 2, 5, 7, 11 }, { -3, -7, -9, -11, 2, 6, 8, 10 }, { -4, -7, -8, -11, 3, 6, 7, 10 }, { -3, -5, -8, -11, 2, 4, 7, 10 }, + { -2, -6, -8, -10, 1, 5, 7, 9 }, { -2, -5, -8, -10, 1, 4, 7, 9 }, { -2, -4, -8, -10, 1, 3, 7, 9 }, { -2, -5, -7, -10, 1, 4, 6, 9 }, + { -3, -4, -7, -10, 2, 3, 6, 9 }, { -1, -2, -3, -10, 0, 1, 2, 9 }, { -4, -6, -8, -9, 3, 5, 7, 8 }, { -3, -5, -7, -9, 2, 4, 6, 8 } + }; + + const int8_t g_etc2_eac_tables8[16][8] = + { + { -24, -48, -72, -120, 16, 40, 64, 112 }, { -24,-56,-80,-104,16,48,72,96 }, { -16,-40,-64,-104,8,32,56,96 }, { -16,-32,-48,-104,8,24,40,96 }, + { -24,-48,-64,-96,16,40,56,88 }, { -24,-56,-72,-88,16,48,64,80 }, { -32,-56,-64,-88,24,48,56,80 }, { -24,-40,-64,-88,16,32,56,80 }, + { -16,-48,-64,-80,8,40,56,72 }, { -16,-40,-64,-80,8,32,56,72 }, { -16,-32,-64,-80,8,24,56,72 }, { -16,-40,-56,-80,8,32,48,72 }, + { -24,-32,-56,-80,16,24,48,72 }, { -8,-16,-24,-80,0,8,16,72 }, { -32,-48,-64,-72,24,40,56,64 }, { -24,-40,-56,-72,16,32,48,64 } + }; + + // Given an ETC1 diff/inten_table/selector, and an 8-bit desired color, this table encodes the best packed_color in the low byte, and the abs error in the high byte. + static uint16_t g_etc1_inverse_lookup[2 * 8 * 4][256]; // [ diff/inten_table/selector][desired_color ] + + // g_color8_to_etc_block_config[color][table_index] = Supplies for each 8-bit color value a list of packed ETC1 diff/intensity table/selectors/packed_colors that map to that color. + // To pack: diff | (inten << 1) | (selector << 4) | (packed_c << 8) + static const uint16_t g_etc1_color8_to_etc_block_config_0_255[2][33] = + { + { 0x0000, 0x0010, 0x0002, 0x0012, 0x0004, 0x0014, 0x0006, 0x0016, 0x0008, 0x0018, 0x000A, 0x001A, 0x000C, 0x001C, 0x000E, 0x001E, 0x0001, 0x0011, 0x0003, 0x0013, 0x0005, 0x0015, 0x0007, 0x0017, 0x0009, 0x0019, 0x000B, 0x001B, 0x000D, 0x001D, 0x000F, 0x001F, 0xFFFF }, + { 0x0F20, 0x0F30, 0x0E32, 0x0F22, 0x0E34, 0x0F24, 0x0D36, 0x0F26, 0x0C38, 0x0E28, 0x0B3A, 0x0E2A, 0x093C, 0x0E2C, 0x053E, 0x0D2E, 0x1E31, 0x1F21, 0x1D33, 0x1F23, 0x1C35, 0x1E25, 0x1A37, 0x1E27, 0x1839, 0x1D29, 0x163B, 0x1C2B, 0x133D, 0x1B2D, 0x093F, 0x1A2F, 0xFFFF }, + }; + + // Really only [254][11]. + static const uint16_t g_etc1_color8_to_etc_block_config_1_to_254[254][12] = + { + { 0x021C, 0x0D0D, 0xFFFF }, { 0x0020, 0x0021, 0x0A0B, 0x061F, 0xFFFF }, { 0x0113, 0x0217, 0xFFFF }, { 0x0116, 0x031E, 0x0B0E, 0x0405, 0xFFFF }, { 0x0022, 0x0204, 0x050A, 0x0023, 0xFFFF }, { 0x0111, 0x0319, 0x0809, 0x170F, 0xFFFF }, { + 0x0303, 0x0215, 0x0607, 0xFFFF }, { 0x0030, 0x0114, 0x0408, 0x0031, 0x0201, 0x051D, 0xFFFF }, { 0x0100, 0x0024, 0x0306, 0x0025, 0x041B, 0x0E0D, 0xFFFF }, { 0x021A, 0x0121, 0x0B0B, 0x071F, 0xFFFF }, { 0x0213, 0x0317, 0xFFFF }, { 0x0112, + 0x0505, 0xFFFF }, { 0x0026, 0x070C, 0x0123, 0x0027, 0xFFFF }, { 0x0211, 0x0909, 0xFFFF }, { 0x0110, 0x0315, 0x0707, 0x0419, 0x180F, 0xFFFF }, { 0x0218, 0x0131, 0x0301, 0x0403, 0x061D, 0xFFFF }, { 0x0032, 0x0202, 0x0033, 0x0125, 0x051B, + 0x0F0D, 0xFFFF }, { 0x0028, 0x031C, 0x0221, 0x0029, 0xFFFF }, { 0x0120, 0x0313, 0x0C0B, 0x081F, 0xFFFF }, { 0x0605, 0x0417, 0xFFFF }, { 0x0216, 0x041E, 0x0C0E, 0x0223, 0x0127, 0xFFFF }, { 0x0122, 0x0304, 0x060A, 0x0311, 0x0A09, 0xFFFF + }, { 0x0519, 0x190F, 0xFFFF }, { 0x002A, 0x0231, 0x0503, 0x0415, 0x0807, 0x002B, 0x071D, 0xFFFF }, { 0x0130, 0x0214, 0x0508, 0x0401, 0x0133, 0x0225, 0x061B, 0xFFFF }, { 0x0200, 0x0124, 0x0406, 0x0321, 0x0129, 0x100D, 0xFFFF }, { 0x031A, + 0x0D0B, 0x091F, 0xFFFF }, { 0x0413, 0x0705, 0x0517, 0xFFFF }, { 0x0212, 0x0034, 0x0323, 0x0035, 0x0227, 0xFFFF }, { 0x0126, 0x080C, 0x0B09, 0xFFFF }, { 0x0411, 0x0619, 0x1A0F, 0xFFFF }, { 0x0210, 0x0331, 0x0603, 0x0515, 0x0907, 0x012B, + 0xFFFF }, { 0x0318, 0x002C, 0x0501, 0x0233, 0x0325, 0x071B, 0x002D, 0x081D, 0xFFFF }, { 0x0132, 0x0302, 0x0229, 0x110D, 0xFFFF }, { 0x0128, 0x041C, 0x0421, 0x0E0B, 0x0A1F, 0xFFFF }, { 0x0220, 0x0513, 0x0617, 0xFFFF }, { 0x0135, 0x0805, + 0x0327, 0xFFFF }, { 0x0316, 0x051E, 0x0D0E, 0x0423, 0xFFFF }, { 0x0222, 0x0404, 0x070A, 0x0511, 0x0719, 0x0C09, 0x1B0F, 0xFFFF }, { 0x0703, 0x0615, 0x0A07, 0x022B, 0xFFFF }, { 0x012A, 0x0431, 0x0601, 0x0333, 0x012D, 0x091D, 0xFFFF }, { + 0x0230, 0x0314, 0x0036, 0x0608, 0x0425, 0x0037, 0x0329, 0x081B, 0x120D, 0xFFFF }, { 0x0300, 0x0224, 0x0506, 0x0521, 0x0F0B, 0x0B1F, 0xFFFF }, { 0x041A, 0x0613, 0x0717, 0xFFFF }, { 0x0235, 0x0905, 0xFFFF }, { 0x0312, 0x0134, 0x0523, + 0x0427, 0xFFFF }, { 0x0226, 0x090C, 0x002E, 0x0611, 0x0D09, 0x002F, 0xFFFF }, { 0x0715, 0x0B07, 0x0819, 0x032B, 0x1C0F, 0xFFFF }, { 0x0310, 0x0531, 0x0701, 0x0803, 0x022D, 0x0A1D, 0xFFFF }, { 0x0418, 0x012C, 0x0433, 0x0525, 0x0137, 0x091B, + 0x130D, 0xFFFF }, { 0x0232, 0x0402, 0x0621, 0x0429, 0xFFFF }, { 0x0228, 0x051C, 0x0713, 0x100B, 0x0C1F, 0xFFFF }, { 0x0320, 0x0335, 0x0A05, 0x0817, 0xFFFF }, { 0x0623, 0x0527, 0xFFFF }, { 0x0416, 0x061E, 0x0E0E, 0x0711, 0x0E09, 0x012F, + 0xFFFF }, { 0x0322, 0x0504, 0x080A, 0x0919, 0x1D0F, 0xFFFF }, { 0x0631, 0x0903, 0x0815, 0x0C07, 0x042B, 0x032D, 0x0B1D, 0xFFFF }, { 0x022A, 0x0801, 0x0533, 0x0625, 0x0237, 0x0A1B, 0xFFFF }, { 0x0330, 0x0414, 0x0136, 0x0708, 0x0721, 0x0529, + 0x140D, 0xFFFF }, { 0x0400, 0x0324, 0x0606, 0x0038, 0x0039, 0x110B, 0x0D1F, 0xFFFF }, { 0x051A, 0x0813, 0x0B05, 0x0917, 0xFFFF }, { 0x0723, 0x0435, 0x0627, 0xFFFF }, { 0x0412, 0x0234, 0x0F09, 0x022F, 0xFFFF }, { 0x0326, 0x0A0C, 0x012E, + 0x0811, 0x0A19, 0x1E0F, 0xFFFF }, { 0x0731, 0x0A03, 0x0915, 0x0D07, 0x052B, 0xFFFF }, { 0x0410, 0x0901, 0x0633, 0x0725, 0x0337, 0x0B1B, 0x042D, 0x0C1D, 0xFFFF }, { 0x0518, 0x022C, 0x0629, 0x150D, 0xFFFF }, { 0x0332, 0x0502, 0x0821, 0x0139, + 0x120B, 0x0E1F, 0xFFFF }, { 0x0328, 0x061C, 0x0913, 0x0A17, 0xFFFF }, { 0x0420, 0x0535, 0x0C05, 0x0727, 0xFFFF }, { 0x0823, 0x032F, 0xFFFF }, { 0x0516, 0x071E, 0x0F0E, 0x0911, 0x0B19, 0x1009, 0x1F0F, 0xFFFF }, { 0x0422, 0x0604, 0x090A, + 0x0B03, 0x0A15, 0x0E07, 0x062B, 0xFFFF }, { 0x0831, 0x0A01, 0x0733, 0x052D, 0x0D1D, 0xFFFF }, { 0x032A, 0x0825, 0x0437, 0x0729, 0x0C1B, 0x160D, 0xFFFF }, { 0x0430, 0x0514, 0x0236, 0x0808, 0x0921, 0x0239, 0x130B, 0x0F1F, 0xFFFF }, { 0x0500, + 0x0424, 0x0706, 0x0138, 0x0A13, 0x0B17, 0xFFFF }, { 0x061A, 0x0635, 0x0D05, 0xFFFF }, { 0x0923, 0x0827, 0xFFFF }, { 0x0512, 0x0334, 0x003A, 0x0A11, 0x1109, 0x003B, 0x042F, 0xFFFF }, { 0x0426, 0x0B0C, 0x022E, 0x0B15, 0x0F07, 0x0C19, + 0x072B, 0xFFFF }, { 0x0931, 0x0B01, 0x0C03, 0x062D, 0x0E1D, 0xFFFF }, { 0x0510, 0x0833, 0x0925, 0x0537, 0x0D1B, 0x170D, 0xFFFF }, { 0x0618, 0x032C, 0x0A21, 0x0339, 0x0829, 0xFFFF }, { 0x0432, 0x0602, 0x0B13, 0x140B, 0x101F, 0xFFFF }, { + 0x0428, 0x071C, 0x0735, 0x0E05, 0x0C17, 0xFFFF }, { 0x0520, 0x0A23, 0x0927, 0xFFFF }, { 0x0B11, 0x1209, 0x013B, 0x052F, 0xFFFF }, { 0x0616, 0x081E, 0x0D19, 0xFFFF }, { 0x0522, 0x0704, 0x0A0A, 0x0A31, 0x0D03, 0x0C15, 0x1007, 0x082B, 0x072D, + 0x0F1D, 0xFFFF }, { 0x0C01, 0x0933, 0x0A25, 0x0637, 0x0E1B, 0xFFFF }, { 0x042A, 0x0B21, 0x0929, 0x180D, 0xFFFF }, { 0x0530, 0x0614, 0x0336, 0x0908, 0x0439, 0x150B, 0x111F, 0xFFFF }, { 0x0600, 0x0524, 0x0806, 0x0238, 0x0C13, 0x0F05, + 0x0D17, 0xFFFF }, { 0x071A, 0x0B23, 0x0835, 0x0A27, 0xFFFF }, { 0x1309, 0x023B, 0x062F, 0xFFFF }, { 0x0612, 0x0434, 0x013A, 0x0C11, 0x0E19, 0xFFFF }, { 0x0526, 0x0C0C, 0x032E, 0x0B31, 0x0E03, 0x0D15, 0x1107, 0x092B, 0xFFFF }, { 0x0D01, + 0x0A33, 0x0B25, 0x0737, 0x0F1B, 0x082D, 0x101D, 0xFFFF }, { 0x0610, 0x0A29, 0x190D, 0xFFFF }, { 0x0718, 0x042C, 0x0C21, 0x0539, 0x160B, 0x121F, 0xFFFF }, { 0x0532, 0x0702, 0x0D13, 0x0E17, 0xFFFF }, { 0x0528, 0x081C, 0x0935, 0x1005, 0x0B27, + 0xFFFF }, { 0x0620, 0x0C23, 0x033B, 0x072F, 0xFFFF }, { 0x0D11, 0x0F19, 0x1409, 0xFFFF }, { 0x0716, 0x003C, 0x091E, 0x0F03, 0x0E15, 0x1207, 0x0A2B, 0x003D, 0xFFFF }, { 0x0622, 0x0804, 0x0B0A, 0x0C31, 0x0E01, 0x0B33, 0x092D, 0x111D, + 0xFFFF }, { 0x0C25, 0x0837, 0x0B29, 0x101B, 0x1A0D, 0xFFFF }, { 0x052A, 0x0D21, 0x0639, 0x170B, 0x131F, 0xFFFF }, { 0x0630, 0x0714, 0x0436, 0x0A08, 0x0E13, 0x0F17, 0xFFFF }, { 0x0700, 0x0624, 0x0906, 0x0338, 0x0A35, 0x1105, 0xFFFF }, { + 0x081A, 0x0D23, 0x0C27, 0xFFFF }, { 0x0E11, 0x1509, 0x043B, 0x082F, 0xFFFF }, { 0x0712, 0x0534, 0x023A, 0x0F15, 0x1307, 0x1019, 0x0B2B, 0x013D, 0xFFFF }, { 0x0626, 0x0D0C, 0x042E, 0x0D31, 0x0F01, 0x1003, 0x0A2D, 0x121D, 0xFFFF }, { 0x0C33, + 0x0D25, 0x0937, 0x111B, 0x1B0D, 0xFFFF }, { 0x0710, 0x0E21, 0x0739, 0x0C29, 0xFFFF }, { 0x0818, 0x052C, 0x0F13, 0x180B, 0x141F, 0xFFFF }, { 0x0632, 0x0802, 0x0B35, 0x1205, 0x1017, 0xFFFF }, { 0x0628, 0x091C, 0x0E23, 0x0D27, 0xFFFF }, { + 0x0720, 0x0F11, 0x1609, 0x053B, 0x092F, 0xFFFF }, { 0x1119, 0x023D, 0xFFFF }, { 0x0816, 0x013C, 0x0A1E, 0x0E31, 0x1103, 0x1015, 0x1407, 0x0C2B, 0x0B2D, 0x131D, 0xFFFF }, { 0x0722, 0x0904, 0x0C0A, 0x1001, 0x0D33, 0x0E25, 0x0A37, 0x121B, + 0xFFFF }, { 0x0F21, 0x0D29, 0x1C0D, 0xFFFF }, { 0x062A, 0x0839, 0x190B, 0x151F, 0xFFFF }, { 0x0730, 0x0814, 0x0536, 0x0B08, 0x1013, 0x1305, 0x1117, 0xFFFF }, { 0x0800, 0x0724, 0x0A06, 0x0438, 0x0F23, 0x0C35, 0x0E27, 0xFFFF }, { 0x091A, + 0x1709, 0x063B, 0x0A2F, 0xFFFF }, { 0x1011, 0x1219, 0x033D, 0xFFFF }, { 0x0812, 0x0634, 0x033A, 0x0F31, 0x1203, 0x1115, 0x1507, 0x0D2B, 0xFFFF }, { 0x0726, 0x0E0C, 0x052E, 0x1101, 0x0E33, 0x0F25, 0x0B37, 0x131B, 0x0C2D, 0x141D, 0xFFFF }, { + 0x0E29, 0x1D0D, 0xFFFF }, { 0x0810, 0x1021, 0x0939, 0x1A0B, 0x161F, 0xFFFF }, { 0x0918, 0x062C, 0x1113, 0x1217, 0xFFFF }, { 0x0732, 0x0902, 0x0D35, 0x1405, 0x0F27, 0xFFFF }, { 0x0728, 0x0A1C, 0x1023, 0x073B, 0x0B2F, 0xFFFF }, { 0x0820, + 0x1111, 0x1319, 0x1809, 0xFFFF }, { 0x1303, 0x1215, 0x1607, 0x0E2B, 0x043D, 0xFFFF }, { 0x0916, 0x023C, 0x0B1E, 0x1031, 0x1201, 0x0F33, 0x0D2D, 0x151D, 0xFFFF }, { 0x0822, 0x0A04, 0x0D0A, 0x1025, 0x0C37, 0x0F29, 0x141B, 0x1E0D, 0xFFFF }, { + 0x1121, 0x0A39, 0x1B0B, 0x171F, 0xFFFF }, { 0x072A, 0x1213, 0x1317, 0xFFFF }, { 0x0830, 0x0914, 0x0636, 0x0C08, 0x0E35, 0x1505, 0xFFFF }, { 0x0900, 0x0824, 0x0B06, 0x0538, 0x1123, 0x1027, 0xFFFF }, { 0x0A1A, 0x1211, 0x1909, 0x083B, 0x0C2F, + 0xFFFF }, { 0x1315, 0x1707, 0x1419, 0x0F2B, 0x053D, 0xFFFF }, { 0x0912, 0x0734, 0x043A, 0x1131, 0x1301, 0x1403, 0x0E2D, 0x161D, 0xFFFF }, { 0x0826, 0x0F0C, 0x062E, 0x1033, 0x1125, 0x0D37, 0x151B, 0x1F0D, 0xFFFF }, { 0x1221, 0x0B39, 0x1029, + 0xFFFF }, { 0x0910, 0x1313, 0x1C0B, 0x181F, 0xFFFF }, { 0x0A18, 0x072C, 0x0F35, 0x1605, 0x1417, 0xFFFF }, { 0x0832, 0x0A02, 0x1223, 0x1127, 0xFFFF }, { 0x0828, 0x0B1C, 0x1311, 0x1A09, 0x093B, 0x0D2F, 0xFFFF }, { 0x0920, 0x1519, 0x063D, + 0xFFFF }, { 0x1231, 0x1503, 0x1415, 0x1807, 0x102B, 0x0F2D, 0x171D, 0xFFFF }, { 0x0A16, 0x033C, 0x0C1E, 0x1401, 0x1133, 0x1225, 0x0E37, 0x161B, 0xFFFF }, { 0x0922, 0x0B04, 0x0E0A, 0x1321, 0x1129, 0xFFFF }, { 0x0C39, 0x1D0B, 0x191F, 0xFFFF + }, { 0x082A, 0x1413, 0x1705, 0x1517, 0xFFFF }, { 0x0930, 0x0A14, 0x0736, 0x0D08, 0x1323, 0x1035, 0x1227, 0xFFFF }, { 0x0A00, 0x0924, 0x0C06, 0x0638, 0x1B09, 0x0A3B, 0x0E2F, 0xFFFF }, { 0x0B1A, 0x1411, 0x1619, 0x073D, 0xFFFF }, { 0x1331, + 0x1603, 0x1515, 0x1907, 0x112B, 0xFFFF }, { 0x0A12, 0x0834, 0x053A, 0x1501, 0x1233, 0x1325, 0x0F37, 0x171B, 0x102D, 0x181D, 0xFFFF }, { 0x0926, 0x072E, 0x1229, 0xFFFF }, { 0x1421, 0x0D39, 0x1E0B, 0x1A1F, 0xFFFF }, { 0x0A10, 0x1513, + 0x1617, 0xFFFF }, { 0x0B18, 0x082C, 0x1135, 0x1805, 0x1327, 0xFFFF }, { 0x0932, 0x0B02, 0x1423, 0x0B3B, 0x0F2F, 0xFFFF }, { 0x0928, 0x0C1C, 0x1511, 0x1719, 0x1C09, 0xFFFF }, { 0x0A20, 0x1703, 0x1615, 0x1A07, 0x122B, 0x083D, 0xFFFF }, { + 0x1431, 0x1601, 0x1333, 0x112D, 0x191D, 0xFFFF }, { 0x0B16, 0x043C, 0x0D1E, 0x1425, 0x1037, 0x1329, 0x181B, 0xFFFF }, { 0x0A22, 0x0C04, 0x0F0A, 0x1521, 0x0E39, 0x1F0B, 0x1B1F, 0xFFFF }, { 0x1613, 0x1717, 0xFFFF }, { 0x092A, 0x1235, 0x1905, + 0xFFFF }, { 0x0A30, 0x0B14, 0x0836, 0x0E08, 0x1523, 0x1427, 0xFFFF }, { 0x0B00, 0x0A24, 0x0D06, 0x0738, 0x1611, 0x1D09, 0x0C3B, 0x102F, 0xFFFF }, { 0x0C1A, 0x1715, 0x1B07, 0x1819, 0x132B, 0x093D, 0xFFFF }, { 0x1531, 0x1701, 0x1803, 0x122D, + 0x1A1D, 0xFFFF }, { 0x0B12, 0x0934, 0x063A, 0x1433, 0x1525, 0x1137, 0x191B, 0xFFFF }, { 0x0A26, 0x003E, 0x082E, 0x1621, 0x0F39, 0x1429, 0x003F, 0xFFFF }, { 0x1713, 0x1C1F, 0xFFFF }, { 0x0B10, 0x1335, 0x1A05, 0x1817, 0xFFFF }, { 0x0C18, + 0x092C, 0x1623, 0x1527, 0xFFFF }, { 0x0A32, 0x0C02, 0x1711, 0x1E09, 0x0D3B, 0x112F, 0xFFFF }, { 0x0A28, 0x0D1C, 0x1919, 0x0A3D, 0xFFFF }, { 0x0B20, 0x1631, 0x1903, 0x1815, 0x1C07, 0x142B, 0x132D, 0x1B1D, 0xFFFF }, { 0x1801, 0x1533, 0x1625, + 0x1237, 0x1A1B, 0xFFFF }, { 0x0C16, 0x053C, 0x0E1E, 0x1721, 0x1529, 0x013F, 0xFFFF }, { 0x0B22, 0x0D04, 0x1039, 0x1D1F, 0xFFFF }, { 0x1813, 0x1B05, 0x1917, 0xFFFF }, { 0x0A2A, 0x1723, 0x1435, 0x1627, 0xFFFF }, { 0x0B30, 0x0C14, 0x0936, + 0x0F08, 0x1F09, 0x0E3B, 0x122F, 0xFFFF }, { 0x0C00, 0x0B24, 0x0E06, 0x0838, 0x1811, 0x1A19, 0x0B3D, 0xFFFF }, { 0x0D1A, 0x1731, 0x1A03, 0x1915, 0x1D07, 0x152B, 0xFFFF }, { 0x1901, 0x1633, 0x1725, 0x1337, 0x1B1B, 0x142D, 0x1C1D, 0xFFFF }, { + 0x0C12, 0x0A34, 0x073A, 0x1629, 0x023F, 0xFFFF }, { 0x0B26, 0x013E, 0x092E, 0x1821, 0x1139, 0x1E1F, 0xFFFF }, { 0x1913, 0x1A17, 0xFFFF }, { 0x0C10, 0x1535, 0x1C05, 0x1727, 0xFFFF }, { 0x0D18, 0x0A2C, 0x1823, 0x0F3B, 0x132F, 0xFFFF }, { + 0x0B32, 0x0D02, 0x1911, 0x1B19, 0xFFFF }, { 0x0B28, 0x0E1C, 0x1B03, 0x1A15, 0x1E07, 0x162B, 0x0C3D, 0xFFFF }, { 0x0C20, 0x1831, 0x1A01, 0x1733, 0x152D, 0x1D1D, 0xFFFF }, { 0x1825, 0x1437, 0x1729, 0x1C1B, 0x033F, 0xFFFF }, { 0x0D16, 0x063C, + 0x0F1E, 0x1921, 0x1239, 0x1F1F, 0xFFFF }, { 0x0C22, 0x0E04, 0x1A13, 0x1B17, 0xFFFF }, { 0x1635, 0x1D05, 0xFFFF }, { 0x0B2A, 0x1923, 0x1827, 0xFFFF }, { 0x0C30, 0x0D14, 0x0A36, 0x1A11, 0x103B, 0x142F, 0xFFFF }, { 0x0D00, 0x0C24, 0x0F06, + 0x0938, 0x1B15, 0x1F07, 0x1C19, 0x172B, 0x0D3D, 0xFFFF }, { 0x0E1A, 0x1931, 0x1B01, 0x1C03, 0x162D, 0x1E1D, 0xFFFF }, { 0x1833, 0x1925, 0x1537, 0x1D1B, 0xFFFF }, { 0x0D12, 0x0B34, 0x083A, 0x1A21, 0x1339, 0x1829, 0x043F, 0xFFFF }, { 0x0C26, + 0x023E, 0x0A2E, 0x1B13, 0xFFFF }, { 0x1735, 0x1E05, 0x1C17, 0xFFFF }, { 0x0D10, 0x1A23, 0x1927, 0xFFFF }, { 0x0E18, 0x0B2C, 0x1B11, 0x113B, 0x152F, 0xFFFF }, { 0x0C32, 0x0E02, 0x1D19, 0x0E3D, 0xFFFF }, { 0x0C28, 0x0F1C, 0x1A31, 0x1D03, + 0x1C15, 0x182B, 0x172D, 0x1F1D, 0xFFFF }, { 0x0D20, 0x1C01, 0x1933, 0x1A25, 0x1637, 0x1E1B, 0xFFFF }, { 0x1B21, 0x1929, 0x053F, 0xFFFF }, { 0x0E16, 0x073C, 0x1439, 0xFFFF }, { 0x0D22, 0x0F04, 0x1C13, 0x1F05, 0x1D17, 0xFFFF }, { 0x1B23, + 0x1835, 0x1A27, 0xFFFF }, { 0x0C2A, 0x123B, 0x162F, 0xFFFF }, { 0x0D30, 0x0E14, 0x0B36, 0x1C11, 0x1E19, 0x0F3D, 0xFFFF }, { 0x0E00, 0x0D24, 0x0A38, 0x1B31, 0x1E03, 0x1D15, 0x192B, 0xFFFF }, { 0x0F1A, 0x1D01, 0x1A33, 0x1B25, 0x1737, 0x1F1B, + 0x182D, 0xFFFF }, { 0x1A29, 0x063F, 0xFFFF }, { 0x0E12, 0x0C34, 0x093A, 0x1C21, 0x1539, 0xFFFF }, { 0x0D26, 0x033E, 0x0B2E, 0x1D13, 0x1E17, 0xFFFF }, { 0x1935, 0x1B27, 0xFFFF }, { 0x0E10, 0x1C23, 0x133B, 0x172F, 0xFFFF }, { 0x0F18, + 0x0C2C, 0x1D11, 0x1F19, 0xFFFF }, { 0x0D32, 0x0F02, 0x1F03, 0x1E15, 0x1A2B, 0x103D, 0xFFFF }, { 0x0D28, 0x1C31, 0x1E01, 0x1B33, 0x192D, 0xFFFF }, { 0x0E20, 0x1C25, 0x1837, 0x1B29, 0x073F, 0xFFFF }, { 0x1D21, 0x1639, 0xFFFF }, { 0x0F16, + 0x083C, 0x1E13, 0x1F17, 0xFFFF }, { 0x0E22, 0x1A35, 0xFFFF }, { 0x1D23, 0x1C27, 0xFFFF }, { 0x0D2A, 0x1E11, 0x143B, 0x182F, 0xFFFF }, { 0x0E30, 0x0F14, 0x0C36, 0x1F15, 0x1B2B, 0x113D, 0xFFFF }, { 0x0F00, 0x0E24, 0x0B38, 0x1D31, 0x1F01, + 0x1A2D, 0xFFFF }, { 0x1C33, 0x1D25, 0x1937, 0xFFFF }, { 0x1E21, 0x1739, 0x1C29, 0x083F, 0xFFFF }, { 0x0F12, 0x0D34, 0x0A3A, 0x1F13, 0xFFFF }, { 0x0E26, 0x043E, 0x0C2E, 0x1B35, 0xFFFF }, { 0x1E23, 0x1D27, 0xFFFF }, { 0x0F10, 0x1F11, 0x153B, 0x192F, 0xFFFF }, { 0x0D2C, 0x123D, 0xFFFF }, + }; + + static uint32_t etc1_decode_value(uint32_t diff, uint32_t inten, uint32_t selector, uint32_t packed_c) + { + const uint32_t limit = diff ? 32 : 16; + BASISU_NOTE_UNUSED(limit); + assert((diff < 2) && (inten < 8) && (selector < 4) && (packed_c < limit)); + int c; + if (diff) + c = (packed_c >> 2) | (packed_c << 3); + else + c = packed_c | (packed_c << 4); + c += g_etc1_inten_tables[inten][selector]; + c = clamp(c, 0, 255); + return c; + } + + void pack_etc1_solid_color_init() + { + for (uint32_t diff = 0; diff < 2; diff++) + { + const uint32_t limit = diff ? 32 : 16; + + for (uint32_t inten = 0; inten < 8; inten++) + { + for (uint32_t selector = 0; selector < 4; selector++) + { + const uint32_t inverse_table_index = diff + (inten << 1) + (selector << 4); + for (uint32_t color = 0; color < 256; color++) + { + uint32_t best_error = UINT32_MAX, best_packed_c = 0; + for (uint32_t packed_c = 0; packed_c < limit; packed_c++) + { + int v = etc1_decode_value(diff, inten, selector, packed_c); + uint32_t err = labs(v - static_cast(color)); + if (err < best_error) + { + best_error = err; + best_packed_c = packed_c; + if (!best_error) + break; + } + } + assert(best_error <= 255); + g_etc1_inverse_lookup[inverse_table_index][color] = static_cast(best_packed_c | (best_error << 8)); + } + } + } + } + } + + // Packs solid color blocks efficiently using a set of small precomputed tables. + // For random 888 inputs, MSE results are better than Erricson's ETC1 packer in "slow" mode ~9.5% of the time, is slightly worse only ~.01% of the time, and is equal the rest of the time. + uint64_t pack_etc1_block_solid_color(etc_block& block, const uint8_t* pColor) + { + assert(g_etc1_inverse_lookup[0][255]); + + static uint32_t s_next_comp[4] = { 1, 2, 0, 1 }; + + uint32_t best_error = UINT32_MAX, best_i = 0; + int best_x = 0, best_packed_c1 = 0, best_packed_c2 = 0; + + // For each possible 8-bit value, there is a precomputed list of diff/inten/selector configurations that allow that 8-bit value to be encoded with no error. + for (uint32_t i = 0; i < 3; i++) + { + const uint32_t c1 = pColor[s_next_comp[i]], c2 = pColor[s_next_comp[i + 1]]; + + const int delta_range = 1; + for (int delta = -delta_range; delta <= delta_range; delta++) + { + const int c_plus_delta = clamp(pColor[i] + delta, 0, 255); + + const uint16_t* pTable; + if (!c_plus_delta) + pTable = g_etc1_color8_to_etc_block_config_0_255[0]; + else if (c_plus_delta == 255) + pTable = g_etc1_color8_to_etc_block_config_0_255[1]; + else + pTable = g_etc1_color8_to_etc_block_config_1_to_254[c_plus_delta - 1]; + + do + { + const uint32_t x = *pTable++; + +#ifdef _DEBUG + const uint32_t diff = x & 1; + const uint32_t inten = (x >> 1) & 7; + const uint32_t selector = (x >> 4) & 3; + const uint32_t p0 = (x >> 8) & 255; + assert(etc1_decode_value(diff, inten, selector, p0) == (uint32_t)c_plus_delta); +#endif + + const uint16_t* pInverse_table = g_etc1_inverse_lookup[x & 0xFF]; + uint16_t p1 = pInverse_table[c1]; + uint16_t p2 = pInverse_table[c2]; + const uint32_t trial_error = square(c_plus_delta - pColor[i]) + square(p1 >> 8) + square(p2 >> 8); + if (trial_error < best_error) + { + best_error = trial_error; + best_x = x; + best_packed_c1 = p1 & 0xFF; + best_packed_c2 = p2 & 0xFF; + best_i = i; + if (!best_error) + goto found_perfect_match; + } + } while (*pTable != 0xFFFF); + } + } + found_perfect_match: + + const uint32_t diff = best_x & 1; + const uint32_t inten = (best_x >> 1) & 7; + + block.m_bytes[3] = static_cast(((inten | (inten << 3)) << 2) | (diff << 1)); + + const uint32_t etc1_selector = g_selector_index_to_etc1[(best_x >> 4) & 3]; + *reinterpret_cast(&block.m_bytes[4]) = (etc1_selector & 2) ? 0xFFFF : 0; + *reinterpret_cast(&block.m_bytes[6]) = (etc1_selector & 1) ? 0xFFFF : 0; + + const uint32_t best_packed_c0 = (best_x >> 8) & 255; + if (diff) + { + block.m_bytes[best_i] = static_cast(best_packed_c0 << 3); + block.m_bytes[s_next_comp[best_i]] = static_cast(best_packed_c1 << 3); + block.m_bytes[s_next_comp[best_i + 1]] = static_cast(best_packed_c2 << 3); + } + else + { + block.m_bytes[best_i] = static_cast(best_packed_c0 | (best_packed_c0 << 4)); + block.m_bytes[s_next_comp[best_i]] = static_cast(best_packed_c1 | (best_packed_c1 << 4)); + block.m_bytes[s_next_comp[best_i + 1]] = static_cast(best_packed_c2 | (best_packed_c2 << 4)); + } + + return best_error; + } + const uint32_t BASISU_ETC1_CLUSTER_FIT_ORDER_TABLE_SIZE = 165; static const struct { uint8_t m_v[4]; } g_cluster_fit_order_tab[BASISU_ETC1_CLUSTER_FIT_ORDER_TABLE_SIZE] = @@ -657,7 +879,7 @@ namespace basisu if (m_best_solution.m_error == 0) return; - const uint32_t n = m_pParams->m_num_src_pixels; + //const uint32_t n = m_pParams->m_num_src_pixels; const int scan_delta_size = m_pParams->m_scan_delta_size; // Scan through a subset of the 3D lattice centered around the avg block color trying each 3D (555 or 444) lattice point as a potential block color. @@ -982,7 +1204,7 @@ namespace basisu block_inten[s] = block_color.r + block_color.g + block_color.b; } - // evaluate_solution_fast() enforces/assumesd a total ordering of the input colors along the intensity (1,1,1) axis to more quickly classify the inputs to selectors. + // evaluate_solution_fast() enforces/assumes a total ordering of the input colors along the intensity (1,1,1) axis to more quickly classify the inputs to selectors. // The inputs colors have been presorted along the projection onto this axis, and ETC1 block colors are always ordered along the intensity axis, so this classification is fast. // 0 1 2 3 // 01 12 23 @@ -1071,4 +1293,110 @@ namespace basisu return success; } + uint64_t pack_eac_a8(pack_eac_a8_results& results, const uint8_t* pPixels, uint32_t num_pixels, uint32_t base_search_rad, uint32_t mul_search_rad, uint32_t table_mask) + { + results.m_selectors.resize(num_pixels); + results.m_selectors_temp.resize(num_pixels); + + uint32_t min_alpha = 255, max_alpha = 0; + for (uint32_t i = 0; i < num_pixels; i++) + { + const uint32_t a = pPixels[i]; + if (a < min_alpha) min_alpha = a; + if (a > max_alpha) max_alpha = a; + } + + if (min_alpha == max_alpha) + { + results.m_base = min_alpha; + results.m_table = 13; + results.m_multiplier = 1; + for (uint32_t i = 0; i < num_pixels; i++) + results.m_selectors[i] = 4; + return 0; + } + + const uint32_t alpha_range = max_alpha - min_alpha; + + uint64_t best_err = UINT64_MAX; + + for (uint32_t table = 0; table < 16; table++) + { + if ((table_mask & (1U << table)) == 0) + continue; + + const float range = (float)(g_etc2_eac_tables[table][ETC2_EAC_MAX_VALUE_SELECTOR] - g_etc2_eac_tables[table][ETC2_EAC_MIN_VALUE_SELECTOR]); + const int center = (int)roundf(lerp((float)min_alpha, (float)max_alpha, (float)(0 - g_etc2_eac_tables[table][ETC2_EAC_MIN_VALUE_SELECTOR]) / range)); + + const int base_min = clamp255(center - base_search_rad); + const int base_max = clamp255(center + base_search_rad); + + const int mul = (int)roundf(alpha_range / range); + const int mul_low = clamp(mul - mul_search_rad, 1, 15); + const int mul_high = clamp(mul + mul_search_rad, 1, 15); + + for (int base = base_min; base <= base_max; base++) + { + for (int multiplier = mul_low; multiplier <= mul_high; multiplier++) + { + uint64_t total_err = 0; + + for (uint32_t i = 0; i < num_pixels; i++) + { + const int a = pPixels[i]; + + uint32_t best_s_err = UINT32_MAX; + uint32_t best_s = 0; + for (uint32_t s = 0; s < 8; s++) + { + const int v = clamp255((int)multiplier * g_etc2_eac_tables[table][s] + (int)base); + + uint32_t err = iabs(a - v); + if (err < best_s_err) + { + best_s_err = err; + best_s = s; + } + } + + results.m_selectors_temp[i] = static_cast(best_s); + + total_err += best_s_err * best_s_err; + if (total_err >= best_err) + break; + } + + if (total_err < best_err) + { + best_err = total_err; + results.m_base = base; + results.m_multiplier = multiplier; + results.m_table = table; + results.m_selectors.swap(results.m_selectors_temp); + if (!best_err) + return best_err; + } + + } // table + + } // multiplier + + } // base + + return best_err; + } + + void pack_eac_a8(eac_a8_block* pBlock, const uint8_t* pPixels, uint32_t base_search_rad, uint32_t mul_search_rad, uint32_t table_mask) + { + pack_eac_a8_results results; + pack_eac_a8(results, pPixels, 16, base_search_rad, mul_search_rad, table_mask); + + pBlock->m_base = results.m_base; + pBlock->m_multiplier = results.m_multiplier; + pBlock->m_table = results.m_table; + for (uint32_t y = 0; y < 4; y++) + for (uint32_t x = 0; x < 4; x++) + pBlock->set_selector(x, y, results.m_selectors[x + y * 4]); + } + } // namespace basisu diff --git a/basisu_etc.h b/basisu_etc.h index a202d01..c1f3101 100644 --- a/basisu_etc.h +++ b/basisu_etc.h @@ -1,5 +1,5 @@ // basis_etc.h -// Copyright (C) 2019 Binomial LLC. All Rights Reserved. +// Copyright (C) 2019-2020 Binomial LLC. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -266,6 +266,27 @@ namespace basisu p[-2] |= (msb << byte_bit_ofs); } + // Selector "etc1_val" ranges from 0-3 and is a direct (raw) ETC1 selector. + inline void set_raw_selector(uint32_t x, uint32_t y, uint32_t etc1_val) + { + assert((x | y | etc1_val) < 4); + const uint32_t bit_index = x * 4 + y; + + uint8_t* p = &m_bytes[7 - (bit_index >> 3)]; + + const uint32_t byte_bit_ofs = bit_index & 7; + const uint32_t mask = 1 << byte_bit_ofs; + + const uint32_t lsb = etc1_val & 1; + const uint32_t msb = etc1_val >> 1; + + p[0] &= ~mask; + p[0] |= (lsb << byte_bit_ofs); + + p[-2] &= ~mask; + p[-2] |= (msb << byte_bit_ofs); + } + inline uint32_t get_raw_selector_bits() const { return m_bytes[4] | (m_bytes[5] << 8) | (m_bytes[6] << 16) | (m_bytes[7] << 24); @@ -622,6 +643,23 @@ namespace basisu return true; } + bool set_block_color5_clamp(const color_rgba &c0_unscaled, const color_rgba &c1_unscaled) + { + set_diff_bit(true); + set_base5_color(pack_color5(c0_unscaled, false)); + + int dr = c1_unscaled.r - c0_unscaled.r; + int dg = c1_unscaled.g - c0_unscaled.g; + int db = c1_unscaled.b - c0_unscaled.b; + + dr = clamp(dr, cETC1ColorDeltaMin, cETC1ColorDeltaMax); + dg = clamp(dg, cETC1ColorDeltaMin, cETC1ColorDeltaMax); + db = clamp(db, cETC1ColorDeltaMin, cETC1ColorDeltaMax); + + set_delta3_color(pack_delta3(dr, dg, db)); + + return true; + } color_rgba get_selector_color(uint32_t x, uint32_t y, uint32_t s) const { color_rgba block_colors[4]; @@ -1042,5 +1080,77 @@ namespace basisu { etc1_optimizer m_optimizer; }; + + void pack_etc1_solid_color_init(); + uint64_t pack_etc1_block_solid_color(etc_block& block, const uint8_t* pColor); + // ETC EAC + extern const int8_t g_etc2_eac_tables[16][8]; + extern const int8_t g_etc2_eac_tables8[16][8]; + + const uint32_t ETC2_EAC_MIN_VALUE_SELECTOR = 3, ETC2_EAC_MAX_VALUE_SELECTOR = 7; + + struct eac_a8_block + { + uint16_t m_base : 8; + uint16_t m_table : 4; + uint16_t m_multiplier : 4; + + uint8_t m_selectors[6]; + + inline uint32_t get_selector(uint32_t x, uint32_t y, uint64_t selector_bits) const + { + assert((x < 4) && (y < 4)); + return static_cast((selector_bits >> (45 - (y + x * 4) * 3)) & 7); + } + + inline uint64_t get_selector_bits() const + { + uint64_t pixels = ((uint64_t)m_selectors[0] << 40) | ((uint64_t)m_selectors[1] << 32) | ((uint64_t)m_selectors[2] << 24) | ((uint64_t)m_selectors[3] << 16) | ((uint64_t)m_selectors[4] << 8) | m_selectors[5]; + return pixels; + } + + inline void set_selector_bits(uint64_t pixels) + { + m_selectors[0] = (uint8_t)(pixels >> 40); + m_selectors[1] = (uint8_t)(pixels >> 32); + m_selectors[2] = (uint8_t)(pixels >> 24); + m_selectors[3] = (uint8_t)(pixels >> 16); + m_selectors[4] = (uint8_t)(pixels >> 8); + m_selectors[5] = (uint8_t)(pixels); + } + + void set_selector(uint32_t x, uint32_t y, uint32_t s) + { + assert((x < 4) && (y < 4) && (s < 8)); + + const uint32_t ofs = 45 - (y + x * 4) * 3; + + uint64_t pixels = get_selector_bits(); + + pixels &= ~(7ULL << ofs); + pixels |= (static_cast(s) << ofs); + + set_selector_bits(pixels); + } + }; + + struct etc2_rgba_block + { + eac_a8_block m_alpha; + etc_block m_rgb; + }; + + struct pack_eac_a8_results + { + uint32_t m_base; + uint32_t m_table; + uint32_t m_multiplier; + uint8_vec m_selectors; + uint8_vec m_selectors_temp; + }; + + uint64_t pack_eac_a8(pack_eac_a8_results& results, const uint8_t* pPixels, uint32_t num_pixels, uint32_t base_search_rad, uint32_t mul_search_rad, uint32_t table_mask = UINT32_MAX); + void pack_eac_a8(eac_a8_block* pBlock, const uint8_t* pPixels, uint32_t base_search_rad, uint32_t mul_search_rad, uint32_t table_mask = UINT32_MAX); + } // namespace basisu diff --git a/basisu_frontend.cpp b/basisu_frontend.cpp index 6f7a9bf..b09aa61 100644 --- a/basisu_frontend.cpp +++ b/basisu_frontend.cpp @@ -1,5 +1,5 @@ // basisu_frontend.cpp -// Copyright (C) 2019 Binomial LLC. All Rights Reserved. +// Copyright (C) 2019-2020 Binomial LLC. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -29,7 +29,7 @@ namespace basisu const uint32_t cMaxCodebookCreationThreads = 8; const uint32_t BASISU_MAX_ENDPOINT_REFINEMENT_STEPS = 3; - const uint32_t BASISU_MAX_SELECTOR_REFINEMENT_STEPS = 3; + //const uint32_t BASISU_MAX_SELECTOR_REFINEMENT_STEPS = 3; const uint32_t BASISU_ENDPOINT_PARENT_CODEBOOK_SIZE = 16; const uint32_t BASISU_SELECTOR_PARENT_CODEBOOK_SIZE = 16; @@ -837,7 +837,7 @@ namespace basisu continue; #endif - const uint32_t new_endpoint_cluster_index = (uint32_t)m_endpoint_clusters.size(); + //const uint32_t new_endpoint_cluster_index = (uint32_t)m_endpoint_clusters.size(); enlarge_vector(m_endpoint_clusters, 1)->push_back(training_vector_index); enlarge_vector(m_endpoint_cluster_etc_params, 1); @@ -1085,7 +1085,7 @@ namespace basisu for (uint32_t block_index = first_index; block_index < last_index; block_index++) { - const bool is_flipped = true; + //const bool is_flipped = true; const uint32_t cluster_index = block_clusters[block_index][0]; BASISU_FRONTEND_VERIFY(cluster_index == block_clusters[block_index][1]); @@ -1938,7 +1938,7 @@ namespace basisu const uint32_t block_index = training_vector_index >> 1; const uint32_t subblock_index = training_vector_index & 1; - const bool is_flipped = true; + //const bool is_flipped = true; etc_block &blk = m_encoded_blocks[block_index]; diff --git a/basisu_frontend.h b/basisu_frontend.h index c3f5d23..e4ccf14 100644 --- a/basisu_frontend.h +++ b/basisu_frontend.h @@ -1,5 +1,5 @@ // basisu_frontend.h -// Copyright (C) 2019 Binomial LLC. All Rights Reserved. +// Copyright (C) 2019-2020 Binomial LLC. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -72,16 +72,18 @@ namespace basisu m_perceptual(true), m_debug_stats(false), m_debug_images(false), + m_dump_endpoint_clusterization(true), + m_validate(false), + m_multithreaded(false), + m_disable_hierarchical_endpoint_codebooks(false), m_pGlobal_sel_codebook(NULL), m_num_global_sel_codebook_pal_bits(0), m_num_global_sel_codebook_mod_bits(0), m_use_hybrid_selector_codebooks(false), m_hybrid_codebook_quality_thresh(0.0f), - m_validate(false), m_tex_type(basist::cBASISTexType2D), - m_multithreaded(false), - m_disable_hierarchical_endpoint_codebooks(false), + m_pJob_pool(nullptr) { } diff --git a/basisu_gpu_texture.cpp b/basisu_gpu_texture.cpp index 117668c..8c92516 100644 --- a/basisu_gpu_texture.cpp +++ b/basisu_gpu_texture.cpp @@ -1,5 +1,5 @@ // basisu_gpu_texture.cpp -// Copyright (C) 2019 Binomial LLC. All Rights Reserved. +// Copyright (C) 2019-2020 Binomial LLC. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -16,38 +16,10 @@ #include "basisu_enc.h" #include "basisu_pvrtc1_4.h" #include "basisu_astc_decomp.h" +#include "basisu_bc7enc.h" namespace basisu { - const int8_t g_etc2_eac_tables[16][8] = - { - { -3, -6, -9, -15, 2, 5, 8, 14 }, { -3, -7, -10, -13, 2, 6, 9, 12 }, { -2, -5, -8, -13, 1, 4, 7, 12 }, { -2, -4, -6, -13, 1, 3, 5, 12 }, - { -3, -6, -8, -12, 2, 5, 7, 11 }, { -3, -7, -9, -11, 2, 6, 8, 10 }, { -4, -7, -8, -11, 3, 6, 7, 10 }, { -3, -5, -8, -11, 2, 4, 7, 10 }, - { -2, -6, -8, -10, 1, 5, 7, 9 }, { -2, -5, -8, -10, 1, 4, 7, 9 }, { -2, -4, -8, -10, 1, 3, 7, 9 }, { -2, -5, -7, -10, 1, 4, 6, 9 }, - { -3, -4, -7, -10, 2, 3, 6, 9 }, { -1, -2, -3, -10, 0, 1, 2, 9 }, { -4, -6, -8, -9, 3, 5, 7, 8 }, { -3, -5, -7, -9, 2, 4, 6, 8 } - }; - - struct eac_a8_block - { - uint16_t m_base : 8; - uint16_t m_table : 4; - uint16_t m_multiplier : 4; - - uint8_t m_selectors[6]; - - inline uint32_t get_selector(uint32_t x, uint32_t y, uint64_t selector_bits) const - { - assert((x < 4) && (y < 4)); - return static_cast((selector_bits >> (45 - (y + x * 4) * 3)) & 7); - } - - inline uint64_t get_selector_bits() const - { - uint64_t pixels = ((uint64_t)m_selectors[0] << 40) | ((uint64_t)m_selectors[1] << 32) | ((uint64_t)m_selectors[2] << 24) | ((uint64_t)m_selectors[3] << 16) | ((uint64_t)m_selectors[4] << 8) | m_selectors[5]; - return pixels; - } - }; - void unpack_etc2_eac(const void *pBlock_bits, color_rgba *pPixels) { static_assert(sizeof(eac_a8_block) == 8, "sizeof(eac_a8_block) == 8"); @@ -317,6 +289,191 @@ namespace basisu } } + // BC7 mode 0-7 decompression. + // Instead of one monster routine to unpack all the BC7 modes, we're lumping the 3 subset, 2 subset, 1 subset, and dual plane modes together into simple shared routines. + + static inline uint32_t bc7_dequant(uint32_t val, uint32_t pbit, uint32_t val_bits) { assert(val < (1U << val_bits)); assert(pbit < 2); assert(val_bits >= 4 && val_bits <= 8); const uint32_t total_bits = val_bits + 1; val = (val << 1) | pbit; val <<= (8 - total_bits); val |= (val >> total_bits); assert(val <= 255); return val; } + static inline uint32_t bc7_dequant(uint32_t val, uint32_t val_bits) { assert(val < (1U << val_bits)); assert(val_bits >= 4 && val_bits <= 8); val <<= (8 - val_bits); val |= (val >> val_bits); assert(val <= 255); return val; } + + static inline uint32_t bc7_interp2(uint32_t l, uint32_t h, uint32_t w) { assert(w < 4); return (l * (64 - basist::g_bc7_weights2[w]) + h * basist::g_bc7_weights2[w] + 32) >> 6; } + static inline uint32_t bc7_interp3(uint32_t l, uint32_t h, uint32_t w) { assert(w < 8); return (l * (64 - basist::g_bc7_weights3[w]) + h * basist::g_bc7_weights3[w] + 32) >> 6; } + static inline uint32_t bc7_interp4(uint32_t l, uint32_t h, uint32_t w) { assert(w < 16); return (l * (64 - basist::g_bc7_weights4[w]) + h * basist::g_bc7_weights4[w] + 32) >> 6; } + static inline uint32_t bc7_interp(uint32_t l, uint32_t h, uint32_t w, uint32_t bits) + { + assert(l <= 255 && h <= 255); + switch (bits) + { + case 2: return bc7_interp2(l, h, w); + case 3: return bc7_interp3(l, h, w); + case 4: return bc7_interp4(l, h, w); + default: + break; + } + return 0; + } + + bool unpack_bc7_mode0_2(uint32_t mode, const void* pBlock_bits, color_rgba* pPixels) + { + //const uint32_t SUBSETS = 3; + const uint32_t ENDPOINTS = 6; + const uint32_t COMPS = 3; + const uint32_t WEIGHT_BITS = (mode == 0) ? 3 : 2; + const uint32_t ENDPOINT_BITS = (mode == 0) ? 4 : 5; + const uint32_t PBITS = (mode == 0) ? 6 : 0; + const uint32_t WEIGHT_VALS = 1 << WEIGHT_BITS; + + uint32_t bit_offset = 0; + const uint8_t* pBuf = static_cast(pBlock_bits); + + if (read_bits32(pBuf, bit_offset, mode + 1) != (1U << mode)) return false; + + const uint32_t part = read_bits32(pBuf, bit_offset, (mode == 0) ? 4 : 6); + + color_rgba endpoints[ENDPOINTS]; + for (uint32_t c = 0; c < COMPS; c++) + for (uint32_t e = 0; e < ENDPOINTS; e++) + endpoints[e][c] = (uint8_t)read_bits32(pBuf, bit_offset, ENDPOINT_BITS); + + uint32_t pbits[6]; + for (uint32_t p = 0; p < PBITS; p++) + pbits[p] = read_bits32(pBuf, bit_offset, 1); + + uint32_t weights[16]; + for (uint32_t i = 0; i < 16; i++) + weights[i] = read_bits32(pBuf, bit_offset, ((!i) || (i == basist::g_bc7_table_anchor_index_third_subset_1[part]) || (i == basist::g_bc7_table_anchor_index_third_subset_2[part])) ? (WEIGHT_BITS - 1) : WEIGHT_BITS); + + assert(bit_offset == 128); + + for (uint32_t e = 0; e < ENDPOINTS; e++) + for (uint32_t c = 0; c < 4; c++) + endpoints[e][c] = (uint8_t)((c == 3) ? 255 : (PBITS ? bc7_dequant(endpoints[e][c], pbits[e], ENDPOINT_BITS) : bc7_dequant(endpoints[e][c], ENDPOINT_BITS))); + + color_rgba block_colors[3][8]; + for (uint32_t s = 0; s < 3; s++) + for (uint32_t i = 0; i < WEIGHT_VALS; i++) + { + for (uint32_t c = 0; c < 3; c++) + block_colors[s][i][c] = (uint8_t)bc7_interp(endpoints[s * 2 + 0][c], endpoints[s * 2 + 1][c], i, WEIGHT_BITS); + block_colors[s][i][3] = 255; + } + + for (uint32_t i = 0; i < 16; i++) + pPixels[i] = block_colors[basist::g_bc7_partition3[part * 16 + i]][weights[i]]; + + return true; + } + + bool unpack_bc7_mode1_3_7(uint32_t mode, const void* pBlock_bits, color_rgba* pPixels) + { + //const uint32_t SUBSETS = 2; + const uint32_t ENDPOINTS = 4; + const uint32_t COMPS = (mode == 7) ? 4 : 3; + const uint32_t WEIGHT_BITS = (mode == 1) ? 3 : 2; + const uint32_t ENDPOINT_BITS = (mode == 7) ? 5 : ((mode == 1) ? 6 : 7); + const uint32_t PBITS = (mode == 1) ? 2 : 4; + const uint32_t SHARED_PBITS = (mode == 1) ? true : false; + const uint32_t WEIGHT_VALS = 1 << WEIGHT_BITS; + + uint32_t bit_offset = 0; + const uint8_t* pBuf = static_cast(pBlock_bits); + + if (read_bits32(pBuf, bit_offset, mode + 1) != (1U << mode)) return false; + + const uint32_t part = read_bits32(pBuf, bit_offset, 6); + + color_rgba endpoints[ENDPOINTS]; + for (uint32_t c = 0; c < COMPS; c++) + for (uint32_t e = 0; e < ENDPOINTS; e++) + endpoints[e][c] = (uint8_t)read_bits32(pBuf, bit_offset, ENDPOINT_BITS); + + uint32_t pbits[4]; + for (uint32_t p = 0; p < PBITS; p++) + pbits[p] = read_bits32(pBuf, bit_offset, 1); + + uint32_t weights[16]; + for (uint32_t i = 0; i < 16; i++) + weights[i] = read_bits32(pBuf, bit_offset, ((!i) || (i == basist::g_bc7_table_anchor_index_second_subset[part])) ? (WEIGHT_BITS - 1) : WEIGHT_BITS); + + assert(bit_offset == 128); + + for (uint32_t e = 0; e < ENDPOINTS; e++) + for (uint32_t c = 0; c < 4; c++) + endpoints[e][c] = (uint8_t)((c == ((mode == 7U) ? 4U : 3U)) ? 255 : bc7_dequant(endpoints[e][c], pbits[SHARED_PBITS ? (e >> 1) : e], ENDPOINT_BITS)); + + color_rgba block_colors[2][8]; + for (uint32_t s = 0; s < 2; s++) + for (uint32_t i = 0; i < WEIGHT_VALS; i++) + { + for (uint32_t c = 0; c < COMPS; c++) + block_colors[s][i][c] = (uint8_t)bc7_interp(endpoints[s * 2 + 0][c], endpoints[s * 2 + 1][c], i, WEIGHT_BITS); + block_colors[s][i][3] = (COMPS == 3) ? 255 : block_colors[s][i][3]; + } + + for (uint32_t i = 0; i < 16; i++) + pPixels[i] = block_colors[basist::g_bc7_partition2[part * 16 + i]][weights[i]]; + + return true; + } + + bool unpack_bc7_mode4_5(uint32_t mode, const void* pBlock_bits, color_rgba* pPixels) + { + const uint32_t ENDPOINTS = 2; + const uint32_t COMPS = 4; + const uint32_t WEIGHT_BITS = 2; + const uint32_t A_WEIGHT_BITS = (mode == 4) ? 3 : 2; + const uint32_t ENDPOINT_BITS = (mode == 4) ? 5 : 7; + const uint32_t A_ENDPOINT_BITS = (mode == 4) ? 6 : 8; + //const uint32_t WEIGHT_VALS = 1 << WEIGHT_BITS; + //const uint32_t A_WEIGHT_VALS = 1 << A_WEIGHT_BITS; + + uint32_t bit_offset = 0; + const uint8_t* pBuf = static_cast(pBlock_bits); + + if (read_bits32(pBuf, bit_offset, mode + 1) != (1U << mode)) return false; + + const uint32_t comp_rot = read_bits32(pBuf, bit_offset, 2); + const uint32_t index_mode = (mode == 4) ? read_bits32(pBuf, bit_offset, 1) : 0; + + color_rgba endpoints[ENDPOINTS]; + for (uint32_t c = 0; c < COMPS; c++) + for (uint32_t e = 0; e < ENDPOINTS; e++) + endpoints[e][c] = (uint8_t)read_bits32(pBuf, bit_offset, (c == 3) ? A_ENDPOINT_BITS : ENDPOINT_BITS); + + const uint32_t weight_bits[2] = { index_mode ? A_WEIGHT_BITS : WEIGHT_BITS, index_mode ? WEIGHT_BITS : A_WEIGHT_BITS }; + + uint32_t weights[16], a_weights[16]; + + for (uint32_t i = 0; i < 16; i++) + (index_mode ? a_weights : weights)[i] = read_bits32(pBuf, bit_offset, weight_bits[index_mode] - ((!i) ? 1 : 0)); + + for (uint32_t i = 0; i < 16; i++) + (index_mode ? weights : a_weights)[i] = read_bits32(pBuf, bit_offset, weight_bits[1 - index_mode] - ((!i) ? 1 : 0)); + + assert(bit_offset == 128); + + for (uint32_t e = 0; e < ENDPOINTS; e++) + for (uint32_t c = 0; c < 4; c++) + endpoints[e][c] = (uint8_t)bc7_dequant(endpoints[e][c], (c == 3) ? A_ENDPOINT_BITS : ENDPOINT_BITS); + + color_rgba block_colors[8]; + for (uint32_t i = 0; i < (1U << weight_bits[0]); i++) + for (uint32_t c = 0; c < 3; c++) + block_colors[i][c] = (uint8_t)bc7_interp(endpoints[0][c], endpoints[1][c], i, weight_bits[0]); + + for (uint32_t i = 0; i < (1U << weight_bits[1]); i++) + block_colors[i][3] = (uint8_t)bc7_interp(endpoints[0][3], endpoints[1][3], i, weight_bits[1]); + + for (uint32_t i = 0; i < 16; i++) + { + pPixels[i] = block_colors[weights[i]]; + pPixels[i].a = block_colors[a_weights[i]].a; + if (comp_rot >= 1) + std::swap(pPixels[i].a, pPixels[i].m_comps[comp_rot - 1]); + } + + return true; + } + struct bc7_mode_6 { struct @@ -364,9 +521,6 @@ namespace basisu }; }; - static const uint32_t g_bc7_weights4[16] = { 0, 4, 9, 13, 17, 21, 26, 30, 34, 38, 43, 47, 51, 55, 60, 64 }; - - // The transcoder only outputs mode 6 at the moment, so this is easy. bool unpack_bc7_mode6(const void *pBlock_bits, color_rgba *pPixels) { static_assert(sizeof(bc7_mode_6) == 16, "sizeof(bc7_mode_6) == 16"); @@ -388,7 +542,7 @@ namespace basisu color_rgba vals[16]; for (uint32_t i = 0; i < 16; i++) { - const uint32_t w = g_bc7_weights4[i]; + const uint32_t w = basist::g_bc7_weights4[i]; const uint32_t iw = 64 - w; vals[i].set_noclamp_rgba( (r0 * iw + r1 * w + 32) >> 6, @@ -420,183 +574,37 @@ namespace basisu return true; } - static inline uint32_t get_block_bits(const uint8_t* pBytes, uint32_t bit_ofs, uint32_t bits_wanted) + bool unpack_bc7(const void *pBlock, color_rgba *pPixels) { - assert(bits_wanted < 32); + const uint32_t first_byte = static_cast(pBlock)[0]; - uint32_t v = 0; - uint32_t total_bits = 0; - - while (total_bits < bits_wanted) + for (uint32_t mode = 0; mode <= 7; mode++) { - uint32_t k = pBytes[bit_ofs >> 3]; - k >>= (bit_ofs & 7); - uint32_t num_bits_in_byte = 8 - (bit_ofs & 7); - - v |= (k << total_bits); - total_bits += num_bits_in_byte; - bit_ofs += num_bits_in_byte; - } - - return v & ((1 << bits_wanted) - 1); - } - - struct bc7_mode_5 - { - union - { - struct + if (first_byte & (1U << mode)) { - uint64_t m_mode : 6; - uint64_t m_rot : 2; - - uint64_t m_r0 : 7; - uint64_t m_r1 : 7; - uint64_t m_g0 : 7; - uint64_t m_g1 : 7; - uint64_t m_b0 : 7; - uint64_t m_b1 : 7; - uint64_t m_a0 : 8; - uint64_t m_a1_0 : 6; - - } m_lo; - - uint64_t m_lo_bits; - }; - - union - { - struct - { - uint64_t m_a1_1 : 2; - - // bit 2 - uint64_t m_c00 : 1; - uint64_t m_c10 : 2; - uint64_t m_c20 : 2; - uint64_t m_c30 : 2; - - uint64_t m_c01 : 2; - uint64_t m_c11 : 2; - uint64_t m_c21 : 2; - uint64_t m_c31 : 2; - - uint64_t m_c02 : 2; - uint64_t m_c12 : 2; - uint64_t m_c22 : 2; - uint64_t m_c32 : 2; - - uint64_t m_c03 : 2; - uint64_t m_c13 : 2; - uint64_t m_c23 : 2; - uint64_t m_c33 : 2; - - // bit 33 - uint64_t m_a00 : 1; - uint64_t m_a10 : 2; - uint64_t m_a20 : 2; - uint64_t m_a30 : 2; - - uint64_t m_a01 : 2; - uint64_t m_a11 : 2; - uint64_t m_a21 : 2; - uint64_t m_a31 : 2; - - uint64_t m_a02 : 2; - uint64_t m_a12 : 2; - uint64_t m_a22 : 2; - uint64_t m_a32 : 2; - - uint64_t m_a03 : 2; - uint64_t m_a13 : 2; - uint64_t m_a23 : 2; - uint64_t m_a33 : 2; - - } m_hi; - - uint64_t m_hi_bits; - }; - - color_rgba get_low_color() const - { - return color_rgba(cNoClamp, - (int)((m_lo.m_r0 << 1) | (m_lo.m_r0 >> 6)), - (int)((m_lo.m_g0 << 1) | (m_lo.m_g0 >> 6)), - (int)((m_lo.m_b0 << 1) | (m_lo.m_b0 >> 6)), - m_lo.m_a0); - } - - color_rgba get_high_color() const - { - return color_rgba(cNoClamp, - (int)((m_lo.m_r1 << 1) | (m_lo.m_r1 >> 6)), - (int)((m_lo.m_g1 << 1) | (m_lo.m_g1 >> 6)), - (int)((m_lo.m_b1 << 1) | (m_lo.m_b1 >> 6)), - (int)m_lo.m_a1_0 | ((int)m_hi.m_a1_1 << 6)); - } - - void get_block_colors(color_rgba* pColors) const - { - const color_rgba low_color(get_low_color()); - const color_rgba high_color(get_high_color()); - - for (uint32_t i = 0; i < 4; i++) - { - static const uint32_t s_bc7_weights2[4] = { 0, 21, 43, 64 }; - - pColors[i].set_noclamp_rgba( - (low_color.r * (64 - s_bc7_weights2[i]) + high_color.r * s_bc7_weights2[i] + 32) >> 6, - (low_color.g * (64 - s_bc7_weights2[i]) + high_color.g * s_bc7_weights2[i] + 32) >> 6, - (low_color.b * (64 - s_bc7_weights2[i]) + high_color.b * s_bc7_weights2[i] + 32) >> 6, - (low_color.a * (64 - s_bc7_weights2[i]) + high_color.a * s_bc7_weights2[i] + 32) >> 6); + switch (mode) + { + case 0: + case 2: + return unpack_bc7_mode0_2(mode, pBlock, pPixels); + case 1: + case 3: + case 7: + return unpack_bc7_mode1_3_7(mode, pBlock, pPixels); + case 4: + case 5: + return unpack_bc7_mode4_5(mode, pBlock, pPixels); + case 6: + return unpack_bc7_mode6(pBlock, pPixels); + default: + break; + } } - } - - uint32_t get_selector(uint32_t idx, bool alpha) const - { - const uint32_t size = (idx == 0) ? 1 : 2; - - uint32_t ofs = alpha ? 97 : 66; - - if (idx) - ofs += 1 + 2 * (idx - 1); - - return get_block_bits(reinterpret_cast(this), ofs, size); - } - }; - - bool unpack_bc7_mode5(const void* pBlock_bits, color_rgba* pPixels) - { - static_assert(sizeof(bc7_mode_5) == 16, "sizeof(bc7_mode_5) == 16"); - - const bc7_mode_5& block = *static_cast(pBlock_bits); - - if (block.m_lo.m_mode != (1 << 5)) - return false; - - color_rgba block_colors[4]; - block.get_block_colors(block_colors); - - const uint32_t rot = block.m_lo.m_rot; - - for (uint32_t i = 0; i < 16; i++) - { - const uint32_t cs = block.get_selector(i, false); - - color_rgba c(block_colors[cs]); - - const uint32_t as = block.get_selector(i, true); - c.a = block_colors[as].a; - - if (rot > 0) - std::swap(c[3], c[rot - 1]); - - pPixels[i] = c; } - return true; + return false; } - + struct fxt1_block { union @@ -903,13 +911,14 @@ namespace basisu etc2_eac_r11 m_c[2]; }; - static void unpack_etc2_eac_r(const etc2_eac_r11* p, color_rgba* pPixels, uint32_t c) + void unpack_etc2_eac_r(const void *p, color_rgba* pPixels, uint32_t c) { - const uint64_t sels = p->get_sels(); + const etc2_eac_r11* pBlock = static_cast(p); + const uint64_t sels = pBlock->get_sels(); - const int base = (int)p->m_base * 8 + 4; - const int mul = p->m_mul ? ((int)p->m_mul * 8) : 1; - const int table = (int)p->m_table; + const int base = (int)pBlock->m_base * 8 + 4; + const int mul = pBlock->m_mul ? ((int)pBlock->m_mul * 8) : 1; + const int table = (int)pBlock->m_table; for (uint32_t y = 0; y < 4; y++) { @@ -923,7 +932,8 @@ namespace basisu val = clamp(val, 0, 2047); // Convert to 8-bits with rounding - pPixels[x + y * 4].m_comps[c] = static_cast((val * 255 + 1024) / 2047); + //pPixels[x + y * 4].m_comps[c] = static_cast((val * 255 + 1024) / 2047); + pPixels[x + y * 4].m_comps[c] = static_cast((val * 255 + 1023) / 2047); } // x } // y @@ -939,6 +949,11 @@ namespace basisu } } + void unpack_uastc(const void* p, color_rgba* pPixels) + { + basist::unpack_uastc(*static_cast(p), (basist::color32 *)pPixels, false); + } + // Unpacks to RGBA, R, RG, or A bool unpack_block(texture_format fmt, const void* pBlock, color_rgba* pPixels) { @@ -966,14 +981,7 @@ namespace basisu } case texture_format::cBC7: { - // We only support modes 5 and 6. - if (!unpack_bc7_mode5(pBlock, pPixels)) - { - if (!unpack_bc7_mode6(pBlock, pPixels)) - return false; - } - - break; + return unpack_bc7(pBlock, pPixels); } // Full ETC2 color blocks (planar/T/H modes) is currently unsupported in basisu, but we do support ETC2 with alpha (using ETC1 for color) case texture_format::cETC2_RGB: @@ -1032,6 +1040,11 @@ namespace basisu unpack_etc2_eac_rg(pBlock, pPixels); break; } + case texture_format::cUASTC4x4: + { + unpack_uastc(pBlock, pPixels); + break; + } default: { assert(0); @@ -1113,6 +1126,7 @@ namespace basisu KTX_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG = 0x8C02, KTX_COMPRESSED_RGBA_ASTC_4x4_KHR = 0x93B0, KTX_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR = 0x93D0, + KTX_COMPRESSED_RGBA_UASTC_4x4_KHR = 0x94CC, // TODO - Use proper value! KTX_ATC_RGB_AMD = 0x8C92, KTX_ATC_RGBA_INTERPOLATED_ALPHA_AMD = 0x87EE, KTX_COMPRESSED_RGB_FXT1_3DFX = 0x86B0, @@ -1305,6 +1319,12 @@ namespace basisu base_internal_fmt = KTX_RG; break; } + case texture_format::cUASTC4x4: + { + internal_fmt = KTX_COMPRESSED_RGBA_UASTC_4x4_KHR; + base_internal_fmt = KTX_RGBA; + break; + } case texture_format::cFXT1_RGB: { internal_fmt = KTX_COMPRESSED_RGB_FXT1_3DFX; @@ -1415,7 +1435,7 @@ namespace basisu return write_compressed_texture_file(pFilename, v, false); } - const uint32_t OUT_FILE_MAGIC = 'TEXC'; + //const uint32_t OUT_FILE_MAGIC = 'TEXC'; struct out_file_header { packed_uint<4> m_magic; @@ -1428,7 +1448,11 @@ namespace basisu bool write_3dfx_out_file(const char* pFilename, const gpu_image& gi) { out_file_header hdr; - hdr.m_magic = OUT_FILE_MAGIC; + //hdr.m_magic = OUT_FILE_MAGIC; + hdr.m_magic.m_bytes[0] = 67; + hdr.m_magic.m_bytes[1] = 88; + hdr.m_magic.m_bytes[2] = 69; + hdr.m_magic.m_bytes[3] = 84; hdr.m_pad = 0; hdr.m_width = gi.get_blocks_x() * 8; hdr.m_height = gi.get_blocks_y() * 4; diff --git a/basisu_gpu_texture.h b/basisu_gpu_texture.h index 8a49757..7cf2b41 100644 --- a/basisu_gpu_texture.h +++ b/basisu_gpu_texture.h @@ -1,5 +1,5 @@ // basisu_gpu_texture.h -// Copyright (C) 2019 Binomial LLC. All Rights Reserved. +// Copyright (C) 2019-2020 Binomial LLC. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -18,8 +18,7 @@ namespace basisu { - // GPU texture image - + // GPU texture "image" class gpu_image { public: @@ -133,22 +132,23 @@ namespace basisu bool write_compressed_texture_file(const char *pFilename, const gpu_image &g); bool write_3dfx_out_file(const char* pFilename, const gpu_image& gi); - // GPU texture block unpacking + // GPU texture block unpacking void unpack_etc2_eac(const void *pBlock_bits, color_rgba *pPixels); bool unpack_bc1(const void *pBlock_bits, color_rgba *pPixels, bool set_alpha); void unpack_bc4(const void *pBlock_bits, uint8_t *pPixels, uint32_t stride); bool unpack_bc3(const void *pBlock_bits, color_rgba *pPixels); void unpack_bc5(const void *pBlock_bits, color_rgba *pPixels); bool unpack_bc7_mode6(const void *pBlock_bits, color_rgba *pPixels); - bool unpack_bc7_mode5(const void* pBlock_bits, color_rgba* pPixels); + bool unpack_bc7(const void* pBlock_bits, color_rgba* pPixels); void unpack_atc(const void* pBlock_bits, color_rgba* pPixels); bool unpack_fxt1(const void* p, color_rgba* pPixels); bool unpack_pvrtc2(const void* p, color_rgba* pPixels); + void unpack_etc2_eac_r(const void *p, color_rgba* pPixels, uint32_t c); void unpack_etc2_eac_rg(const void* p, color_rgba* pPixels); - // unpack_block() is only capable of unpacking texture data created by the transcoder. - // For some texture formats (like BC7, or ETC2) it's not a complete implementation. + // unpack_block() is primarily intended to unpack texture data created by the transcoder. + // For some texture formats (like ETC2 RGB, PVRTC2, FXT1) it's not a complete implementation. bool unpack_block(texture_format fmt, const void *pBlock, color_rgba *pPixels); } // namespace basisu diff --git a/basisu_pvrtc1_4.cpp b/basisu_pvrtc1_4.cpp index f0122fc..330cea8 100644 --- a/basisu_pvrtc1_4.cpp +++ b/basisu_pvrtc1_4.cpp @@ -1,5 +1,5 @@ // basisu_pvrtc1_4.cpp -// Copyright (C) 2019 Binomial LLC. All Rights Reserved. +// Copyright (C) 2019-2020 Binomial LLC. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -16,6 +16,118 @@ namespace basisu { +#if 0 + static const uint8_t g_pvrtc_5[32] = { 0,8,16,24,33,41,49,57,66,74,82,90,99,107,115,123,132,140,148,156,165,173,181,189,198,206,214,222,231,239,247,255 }; + static const uint8_t g_pvrtc_4[16] = { 0,16,33,49,66,82,99,115,140,156,173,189,206,222,239,255 }; + static const uint8_t g_pvrtc_3[8] = { 0,33,74,107,148,181,222,255 }; + static const uint8_t g_pvrtc_alpha[9] = { 0,34,68,102,136,170,204,238,255 }; +#endif + + static const uint8_t g_pvrtc_5_nearest[256] = { 0,0,0,0,0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,8,9,9,9,9,9,9,9,9,10,10,10,10,10,10,10,10,11,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,12,13,13,13,13,13,13,13,13,14,14,14,14,14,14,14,14,15,15,15,15,15,15,15,15,16,16,16,16,16,16,16,16,16,17,17,17,17,17,17,17,17,18,18,18,18,18,18,18,18,19,19,19,19,19,19,19,19,20,20,20,20,20,20,20,20,20,21,21,21,21,21,21,21,21,22,22,22,22,22,22,22,22,23,23,23,23,23,23,23,23,24,24,24,24,24,24,24,24,24,25,25,25,25,25,25,25,25,26,26,26,26,26,26,26,26,27,27,27,27,27,27,27,27,28,28,28,28,28,28,28,28,28,29,29,29,29,29,29,29,29,30,30,30,30,30,30,30,30,31,31,31,31 }; + static const uint8_t g_pvrtc_4_nearest[256] = { 0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,15,15,15,15,15,15,15,15 }; +#if 0 + static const uint8_t g_pvrtc_3_nearest[256] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 }; + static const uint8_t g_pvrtc_alpha_nearest[256] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,8 }; +#endif + +#if 0 + static const uint8_t g_pvrtc_5_floor[256] = + { + 0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3, + 3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7, + 7,7,8,8,8,8,8,8,8,8,9,9,9,9,9,9,9,9,10,10,10,10,10,10,10,10,11,11,11,11,11,11, + 11,11,11,12,12,12,12,12,12,12,12,13,13,13,13,13,13,13,13,14,14,14,14,14,14,14,14,15,15,15,15,15, + 15,15,15,15,16,16,16,16,16,16,16,16,17,17,17,17,17,17,17,17,18,18,18,18,18,18,18,18,19,19,19,19, + 19,19,19,19,19,20,20,20,20,20,20,20,20,21,21,21,21,21,21,21,21,22,22,22,22,22,22,22,22,23,23,23, + 23,23,23,23,23,23,24,24,24,24,24,24,24,24,25,25,25,25,25,25,25,25,26,26,26,26,26,26,26,26,27,27, + 27,27,27,27,27,27,27,28,28,28,28,28,28,28,28,29,29,29,29,29,29,29,29,30,30,30,30,30,30,30,30,31 + }; + + static const uint8_t g_pvrtc_5_ceil[256] = + { + 0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4, + 4,4,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,8,8,8,8,8,8, + 8,8,8,9,9,9,9,9,9,9,9,10,10,10,10,10,10,10,10,11,11,11,11,11,11,11,11,12,12,12,12,12, + 12,12,12,12,13,13,13,13,13,13,13,13,14,14,14,14,14,14,14,14,15,15,15,15,15,15,15,15,16,16,16,16, + 16,16,16,16,16,17,17,17,17,17,17,17,17,18,18,18,18,18,18,18,18,19,19,19,19,19,19,19,19,20,20,20, + 20,20,20,20,20,20,21,21,21,21,21,21,21,21,22,22,22,22,22,22,22,22,23,23,23,23,23,23,23,23,24,24, + 24,24,24,24,24,24,24,25,25,25,25,25,25,25,25,26,26,26,26,26,26,26,26,27,27,27,27,27,27,27,27,28, + 28,28,28,28,28,28,28,28,29,29,29,29,29,29,29,29,30,30,30,30,30,30,30,30,31,31,31,31,31,31,31,31 + }; + + static const uint8_t g_pvrtc_4_floor[256] = + { + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,9,9,9,9, + 9,9,9,9,9,9,9,9,9,9,9,9,9,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,11,11,11, + 11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,13,13, + 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,15 + }; + + static const uint8_t g_pvrtc_4_ceil[256] = + { + 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6, + 6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,8,8,8,8, + 8,8,8,8,8,8,8,8,8,8,8,8,8,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,10,10,10, + 10,10,10,10,10,10,10,10,10,10,10,10,10,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12, + 12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,14, + 14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,14,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15 + }; + + static const uint8_t g_pvrtc_3_floor[256] = + { + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6, + 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7 + }; + + static const uint8_t g_pvrtc_3_ceil[256] = + { + 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6, + 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7 + }; + + static const uint8_t g_pvrtc_alpha_floor[256] = + { + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, + 0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, + 6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8 + }; + + static const uint8_t g_pvrtc_alpha_ceil[256] = + { + 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, + 4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, + 6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, + 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8 + }; +#endif + uint32_t pvrtc4_swizzle_uv(uint32_t width, uint32_t height, uint32_t x, uint32_t y) { assert((x < width) && (y < height) && basisu::is_pow2(height) && basisu::is_pow2(width)); @@ -266,4 +378,187 @@ namespace basisu } } + uint64_t pvrtc4_image::local_endpoint_optimization_opaque(uint32_t bx, uint32_t by, const image& orig_img, bool perceptual) + { + uint64_t initial_error = evaluate_1x1_endpoint_error(bx, by, orig_img, perceptual, false); + if (!initial_error) + return initial_error; + + vec3F c_avg_orig(0); + + for (int y = 0; y < 7; y++) + { + const uint32_t py = wrap_y(by * 4 + y - 1); + for (uint32_t x = 0; x < 7; x++) + { + const uint32_t px = wrap_x(bx * 4 + x - 1); + + const color_rgba& c = orig_img(px, py); + + c_avg_orig[0] += c[0]; + c_avg_orig[1] += c[1]; + c_avg_orig[2] += c[2]; + } + } + + c_avg_orig *= 1.0f / 49.0f; + + vec3F quant_colors[2]; + quant_colors[0].set(c_avg_orig); + quant_colors[0] -= vec3F(.0125f); + + quant_colors[1].set(c_avg_orig); + quant_colors[1] += vec3F(.0125f); + + float total_weight[2]; + + bool success = true; + + for (uint32_t pass = 0; pass < 4; pass++) + { + vec3F new_colors[2] = { vec3F(0), vec3F(0) }; + memset(total_weight, 0, sizeof(total_weight)); + + static const float s_weights[7][7] = + { + { 1.000000f, 1.637089f, 2.080362f, 2.242640f, 2.080362f, 1.637089f, 1.000000f }, + { 1.637089f, 2.414213f, 3.006572f, 3.242640f, 3.006572f, 2.414213f, 1.637089f }, + { 2.080362f, 3.006572f, 3.828426f, 4.242640f, 3.828426f, 3.006572f, 2.080362f }, + { 2.242640f, 3.242640f, 4.242640f, 5.000000f, 4.242640f, 3.242640f, 2.242640f }, + { 2.080362f, 3.006572f, 3.828426f, 4.242640f, 3.828426f, 3.006572f, 2.080362f }, + { 1.637089f, 2.414213f, 3.006572f, 3.242640f, 3.006572f, 2.414213f, 1.637089f }, + { 1.000000f, 1.637089f, 2.080362f, 2.242640f, 2.080362f, 1.637089f, 1.000000f } + }; + + for (int y = 0; y < 7; y++) + { + const uint32_t py = wrap_y(by * 4 + y - 1); + for (uint32_t x = 0; x < 7; x++) + { + const uint32_t px = wrap_x(bx * 4 + x - 1); + + const color_rgba& orig_c = orig_img(px, py); + + vec3F color(orig_c[0], orig_c[1], orig_c[2]); + + uint32_t c = quant_colors[0].squared_distance(color) > quant_colors[1].squared_distance(color); + + const float weight = s_weights[y][x]; + new_colors[c] += color * weight; + + total_weight[c] += weight; + } + } + + if (!total_weight[0] || !total_weight[1]) + success = false; + + quant_colors[0] = new_colors[0] / (float)total_weight[0]; + quant_colors[1] = new_colors[1] / (float)total_weight[1]; + } + + if (!success) + { + quant_colors[0] = c_avg_orig; + quant_colors[1] = c_avg_orig; + } + + vec4F colors[2] = { quant_colors[0], quant_colors[1] }; + + colors[0] += vec3F(.5f); + colors[1] += vec3F(.5f); + color_rgba color_0((int)colors[0][0], (int)colors[0][1], (int)colors[0][2], 0); + color_rgba color_1((int)colors[1][0], (int)colors[1][1], (int)colors[1][2], 0); + + pvrtc4_block cur_blocks[3][3]; + + for (int y = -1; y <= 1; y++) + { + for (int x = -1; x <= 1; x++) + { + const uint32_t block_x = wrap_block_x(bx + x); + const uint32_t block_y = wrap_block_y(by + y); + cur_blocks[x + 1][y + 1] = m_blocks(block_x, block_y); + } + } + + color_rgba l1(0), h1(0); + + l1[0] = g_pvrtc_5_nearest[color_0[0]]; + h1[0] = g_pvrtc_5_nearest[color_1[0]]; + + l1[1] = g_pvrtc_5_nearest[color_0[1]]; + h1[1] = g_pvrtc_5_nearest[color_1[1]]; + + l1[2] = g_pvrtc_4_nearest[color_0[2]]; + h1[2] = g_pvrtc_5_nearest[color_0[2]]; + + l1[3] = 0; + h1[3] = 0; + + m_blocks(bx, by).set_endpoint_raw(0, l1, true); + m_blocks(bx, by).set_endpoint_raw(1, h1, true); + + uint64_t e03_err_0 = remap_pixels_influenced_by_endpoint(bx, by, orig_img, perceptual, false); + + pvrtc4_block blocks0[3][3]; + for (int y = -1; y <= 1; y++) + { + for (int x = -1; x <= 1; x++) + { + const uint32_t block_x = wrap_block_x(bx + x); + const uint32_t block_y = wrap_block_y(by + y); + blocks0[x + 1][y + 1] = m_blocks(block_x, block_y); + } + } + + l1[0] = g_pvrtc_5_nearest[color_1[0]]; + h1[0] = g_pvrtc_5_nearest[color_0[0]]; + + l1[1] = g_pvrtc_5_nearest[color_1[1]]; + h1[1] = g_pvrtc_5_nearest[color_0[1]]; + + l1[2] = g_pvrtc_4_nearest[color_1[2]]; + h1[2] = g_pvrtc_5_nearest[color_0[2]]; + + l1[3] = 0; + h1[3] = 0; + + m_blocks(bx, by).set_endpoint_raw(0, l1, true); + m_blocks(bx, by).set_endpoint_raw(1, h1, true); + + uint64_t e03_err_1 = remap_pixels_influenced_by_endpoint(bx, by, orig_img, perceptual, false); + + if (initial_error < std::min(e03_err_0, e03_err_1)) + { + for (int y = -1; y <= 1; y++) + { + for (int x = -1; x <= 1; x++) + { + const uint32_t block_x = wrap_block_x(bx + x); + const uint32_t block_y = wrap_block_y(by + y); + m_blocks(block_x, block_y) = cur_blocks[x + 1][y + 1]; + } + } + return initial_error; + } + else if (e03_err_0 < e03_err_1) + { + for (int y = -1; y <= 1; y++) + { + for (int x = -1; x <= 1; x++) + { + const uint32_t block_x = wrap_block_x(bx + x); + const uint32_t block_y = wrap_block_y(by + y); + m_blocks(block_x, block_y) = blocks0[x + 1][y + 1]; + } + } + assert(e03_err_0 == evaluate_1x1_endpoint_error(bx, by, orig_img, perceptual, false)); + return e03_err_0; + } + + assert(e03_err_1 == evaluate_1x1_endpoint_error(bx, by, orig_img, perceptual, false)); + return e03_err_1; + } + } // basisu diff --git a/basisu_pvrtc1_4.h b/basisu_pvrtc1_4.h index 80b4413..1f17661 100644 --- a/basisu_pvrtc1_4.h +++ b/basisu_pvrtc1_4.h @@ -1,5 +1,5 @@ // basisu_pvrtc1_4.cpp -// Copyright (C) 2019 Binomial LLC. All Rights Reserved. +// Copyright (C) 2019-2020 Binomial LLC. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -87,6 +87,14 @@ namespace basisu return (m_modulation >> ((y * 4 + x) * 2)) & 3; } + inline void set_modulation(uint32_t x, uint32_t y, uint32_t s) + { + assert((x < 4) && (y < 4) && (s < 4)); + uint32_t n = (y * 4 + x) * 2; + m_modulation = (m_modulation & (~(3 << n))) | (s << n); + assert(get_modulation(x, y) == s); + } + // Scaled by 8 inline const uint32_t* get_scaled_modulation_values(bool block_uses_transparent_modulation) const { @@ -107,7 +115,7 @@ namespace basisu } // opaque endpoints: 554, 555 - // transparent endpoints: 3443 or 3444 + // transparent endpoints: 3443, 3444 inline void set_endpoint_raw(uint32_t endpoint_index, const color_rgba& c, bool opaque_endpoint) { assert(endpoint_index < 2); @@ -352,7 +360,93 @@ namespace basisu return result; } - + + inline void set_modulation(uint32_t x, uint32_t y, uint32_t s) + { + assert((x < m_width) && (y < m_height)); + return m_blocks(x >> 2, y >> 2).set_modulation(x & 3, y & 3, s); + } + + inline uint64_t map_pixel(uint32_t x, uint32_t y, const color_rgba& c, bool perceptual, bool alpha_is_significant, bool record = true) + { + color_rgba v[4]; + get_interpolated_colors(x, y, v); + + uint64_t best_dist = color_distance(perceptual, c, v[0], alpha_is_significant); + uint32_t best_v = 0; + for (uint32_t i = 1; i < 4; i++) + { + uint64_t dist = color_distance(perceptual, c, v[i], alpha_is_significant); + if (dist < best_dist) + { + best_dist = dist; + best_v = i; + } + } + + if (record) + set_modulation(x, y, best_v); + + return best_dist; + } + + inline uint64_t remap_pixels_influenced_by_endpoint(uint32_t bx, uint32_t by, const image& orig_img, bool perceptual, bool alpha_is_significant) + { + uint64_t total_error = 0; + + for (int yd = -3; yd <= 3; yd++) + { + const int y = wrap_y((int)by * 4 + 2 + yd); + + for (int xd = -3; xd <= 3; xd++) + { + const int x = wrap_x((int)bx * 4 + 2 + xd); + + total_error += map_pixel(x, y, orig_img(x, y), perceptual, alpha_is_significant); + } + } + + return total_error; + } + + inline uint64_t evaluate_1x1_endpoint_error(uint32_t bx, uint32_t by, const image& orig_img, bool perceptual, bool alpha_is_significant, uint64_t threshold_error = 0) const + { + uint64_t total_error = 0; + + for (int yd = -3; yd <= 3; yd++) + { + const int y = wrap_y((int)by * 4 + 2 + yd); + + for (int xd = -3; xd <= 3; xd++) + { + const int x = wrap_x((int)bx * 4 + 2 + xd); + + total_error += color_distance(perceptual, get_pixel(x, y), orig_img(x, y), alpha_is_significant); + + if ((threshold_error) && (total_error >= threshold_error)) + return total_error; + } + } + + return total_error; + } + + uint64_t local_endpoint_optimization_opaque(uint32_t bx, uint32_t by, const image& orig_img, bool perceptual); + + inline uint64_t map_all_pixels(const image& img, bool perceptual, bool alpha_is_significant) + { + assert(m_width == img.get_width()); + assert(m_height == img.get_height()); + + uint64_t total_error = 0; + for (uint32_t y = 0; y < img.get_height(); y++) + for (uint32_t x = 0; x < img.get_width(); x++) + total_error += map_pixel(x, y, img(x, y), perceptual, alpha_is_significant); + + return total_error; + } + + public: uint32_t m_width, m_height; pvrtc4_block_vector2D m_blocks; uint32_t m_block_width, m_block_height; diff --git a/basisu_resample_filters.cpp b/basisu_resample_filters.cpp index d0b2fd7..39df8bd 100644 --- a/basisu_resample_filters.cpp +++ b/basisu_resample_filters.cpp @@ -1,5 +1,5 @@ // basisu_resampler_filters.cpp -// Copyright (C) 2019 Binomial LLC. All Rights Reserved. +// Copyright (C) 2019-2020 Binomial LLC. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -283,7 +283,7 @@ namespace basisu return sum; } - static const float KAISER_ALPHA = 4.0; + //static const float KAISER_ALPHA = 4.0; static double kaiser(double alpha, double half_width, double x) { const double ratio = (x / half_width); diff --git a/basisu_tool.cpp b/basisu_tool.cpp index 8172a8c..3fbc56a 100644 --- a/basisu_tool.cpp +++ b/basisu_tool.cpp @@ -1,5 +1,5 @@ // basisu_tool.cpp -// Copyright (C) 2019 Binomial LLC. All Rights Reserved. +// Copyright (C) 2019-2020 Binomial LLC. All Rights Reserved. // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at @@ -11,6 +11,11 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. +#if _MSC_VER +// For sprintf(), strcpy() +#define _CRT_SECURE_NO_WARNINGS (1) +#endif + #include "transcoder/basisu.h" #include "transcoder/basisu_transcoder_internal.h" #include "basisu_enc.h" @@ -23,20 +28,23 @@ #include "transcoder/basisu_transcoder.h" #include "basisu_ssim.h" -#define BASISU_CATCH_EXCEPTIONS 1 +// Set BASISU_CATCH_EXCEPTIONS if you want exceptions to crash the app, otherwise main() catches them. +#define BASISU_CATCH_EXCEPTIONS 0 using namespace basisu; -#define BASISU_TOOL_VERSION "1.10.00" +#define BASISU_TOOL_VERSION "1.12.00" enum tool_mode { cDefault, cCompress, cValidate, + cInfo, cUnpack, cCompare, cVersion, + cBench }; static void print_usage() @@ -47,6 +55,7 @@ static void print_usage() "The default mode is compression of one or more PNG files to a .basis file. Alternate modes:\n" " -unpack: Use transcoder to unpack .basis file to one or more .ktx/.png files\n" " -validate: Validate and display information about a .basis file\n" + " -info: Display high-level information about a .basis file\n" " -compare: Compare two PNG images specified with -file, output PSNR and SSIM statistics and RGB/A delta images\n" " -version: Print basisu version and exit\n" "Unless an explicit mode is specified, if one or more files have the .basis extension this tool defaults to unpack mode.\n" @@ -62,7 +71,7 @@ static void print_usage() " -multifile_printf: printf() format strint to use to compose multiple filenames\n" " -multifile_first: The index of the first file to process, default is 0 (must specify -multifile_printf and -multifile_num)\n" " -multifile_num: The total number of files to process.\n" - " -q X: Set quality level, 1-255, default is 128, lower=better compression/lower quality/faster, higher=less compression/higher quality/slower, default is 128. For even higher quality, use -max_endpoints/-max_selectors.\n" + " -q X: Set ETC1S quality level, 1-255, default is 128, lower=better compression/lower quality/faster, higher=less compression/higher quality/slower, default is 128. For even higher quality, use -max_endpoints/-max_selectors.\n" " -linear: Use linear colorspace metrics (instead of the default sRGB), and by default linear (not sRGB) mipmap filtering.\n" " -output_file filename: Output .basis/.ktx filename\n" " -output_path: Output .basis/.ktx files to specified directory.\n" @@ -74,8 +83,13 @@ static void print_usage() " For video, the .basis file will be written with the first frame being an I-Frame, and subsequent frames being P-Frames (using conditional replenishment). Playback must always occur in order from first to last image.\n" " -framerate X: Set framerate in header to X/frames sec.\n" " -individual: Process input images individually and output multiple .basis files (not as a texture array)\n" - " -comp_level X: Set encoding speed vs. quality tradeoff. Range is 0-5, default is 1. Higher values=MUCH slower, but slightly higher quality. Mostly intended for videos. Use -q first!\n" + " -comp_level X: Set ETC1S encoding speed vs. quality tradeoff. Range is 0-5, default is 1. Higher values=MUCH slower, but slightly higher quality. Mostly intended for videos. Use -q first!\n" " -fuzz_testing: Use with -validate: Disables CRC16 validation of file contents before transcoding\n" + "\nUASTC options:\n" + " -uastc: Enable UASTC texture mode, instead of the default ETC1S mode. Significantly higher texture quality, but larger files. (Note that .basis files must be losslessly compressed by the user.)\n" + " -uastc_level: Set UASTC encoding level. Range is [0,4], default is 2, higher=slower but higher quality. 0=fastest/lowest quality, 3=slowest practical option, 4=impractically slow/highest achievable quality\n" + " -uastc_rdo_q X: Enable UASTC RDO post-processing and set UASTC RDO quality scalar to X. Lower values=higher quality/larger LZ compressed files, higher values=lower quality/smaller LZ compressed files. Good range to try is [.2-4].\n" + " -uastc_rdo_d X: Set UASTC RDO dictionary size in bytes. Default is 32768. Lower values=faster, but less compression.\n" "\n" "More options:\n" " -max_endpoints X: Manually set the max number of color endpoint clusters from 1-16128, use instead of -q\n" @@ -90,6 +104,7 @@ static void print_usage() " -etc1_only: Only unpack to ETC1, skipping the other texture formats during -unpack\n" " -disable_hierarchical_endpoint_codebooks: Disable hierarchical endpoint codebook usage, slower but higher quality on some compression levels\n" " -compare_ssim: Compute and display SSIM of image comparison (slow)\n" + " -bench: UASTC benchmark mode, for development only\n" "\n" "Mipmap generation options:\n" " -mipmap: Generate mipmaps for each source image\n" @@ -229,7 +244,8 @@ public: m_no_ktx(false), m_etc1_only(false), m_fuzz_testing(false), - m_compare_ssim(false) + m_compare_ssim(false), + m_bench(false) { } @@ -252,10 +268,14 @@ public: m_mode = cUnpack; else if (strcasecmp(pArg, "-validate") == 0) m_mode = cValidate; + else if (strcasecmp(pArg, "-info") == 0) + m_mode = cInfo; else if (strcasecmp(pArg, "-version") == 0) m_mode = cVersion; else if (strcasecmp(pArg, "-compare_ssim") == 0) m_compare_ssim = true; + else if (strcasecmp(pArg, "-bench") == 0) + m_mode = cBench; else if (strcasecmp(pArg, "-file") == 0) { REMAINING_ARGS_CHECK(1); @@ -286,6 +306,37 @@ public: m_multifile_num = atoi(arg_v[arg_index + 1]); arg_count++; } + else if (strcasecmp(pArg, "-uastc") == 0) + m_comp_params.m_uastc = true; + else if (strcasecmp(pArg, "-uastc_level") == 0) + { + REMAINING_ARGS_CHECK(1); + + int uastc_level = atoi(arg_v[arg_index + 1]); + + uastc_level = clamp(uastc_level, 0, TOTAL_PACK_UASTC_LEVELS - 1); + + static_assert(TOTAL_PACK_UASTC_LEVELS == 5, "TOTAL_PACK_UASTC_LEVELS==5"); + static const uint32_t s_level_flags[TOTAL_PACK_UASTC_LEVELS] = { cPackUASTCLevelFastest, cPackUASTCLevelFaster, cPackUASTCLevelDefault, cPackUASTCLevelSlower, cPackUASTCLevelVerySlow }; + + m_comp_params.m_pack_uastc_flags &= ~cPackUASTCLevelMask; + m_comp_params.m_pack_uastc_flags |= s_level_flags[uastc_level]; + + arg_count++; + } + else if (strcasecmp(pArg, "-uastc_rdo_q") == 0) + { + REMAINING_ARGS_CHECK(1); + m_comp_params.m_rdo_uastc_quality_scalar = (float)atof(arg_v[arg_index + 1]); + m_comp_params.m_rdo_uastc = true; + arg_count++; + } + else if (strcasecmp(pArg, "-uastc_rdo_d") == 0) + { + REMAINING_ARGS_CHECK(1); + m_comp_params.m_rdo_uastc_dict_size = atoi(arg_v[arg_index + 1]); + arg_count++; + } else if (strcasecmp(pArg, "-linear") == 0) m_comp_params.m_perceptual = false; else if (strcasecmp(pArg, "-srgb") == 0) @@ -585,6 +636,7 @@ public: bool m_etc1_only; bool m_fuzz_testing; bool m_compare_ssim; + bool m_bench; }; static bool expand_multifile(command_line_params &opts) @@ -670,7 +722,7 @@ static bool compress_mode(command_line_params &opts) } } - printf("Processing %u total files\n", (uint32_t)opts.m_input_filenames.size()); + printf("Processing %u total file(s)\n", (uint32_t)opts.m_input_filenames.size()); for (size_t file_index = 0; file_index < (opts.m_individual ? opts.m_input_filenames.size() : 1U); file_index++) { @@ -759,6 +811,9 @@ static bool compress_mode(command_line_params &opts) case basis_compressor::cECFailedValidating: error_printf("Compressor failed 2darray/cubemap/video validation checks!\n"); break; + case basis_compressor::cECFailedEncodeUASTC: + error_printf("Compressor UASTC encode failed!\n"); + break; case basis_compressor::cECFailedFrontEnd: error_printf("Compressor frontend stage failed!\n"); break; @@ -774,6 +829,9 @@ static bool compress_mode(command_line_params &opts) case basis_compressor::cECFailedWritingOutput: error_printf("Compressor failed writing to output Basis file!\n"); break; + case basis_compressor::cECFailedUASTCRDOPostProcess: + error_printf("Compressor failed during the UASTC post process step!\n"); + break; default: error_printf("basis_compress::process() failed!\n"); break; @@ -795,14 +853,15 @@ static bool compress_mode(command_line_params &opts) { for (size_t slice_index = 0; slice_index < c.get_stats().size(); slice_index++) { - fprintf(pCSV_file, "\"%s\", %u, %u, %u, %u, %u, %f, %f, %f, %f, %u, %u, %f\n", + fprintf(pCSV_file, "\"%s\", %u, %u, %u, %u, %u, %f, %f, %f, %f, %f, %u, %u, %f\n", params.m_out_filename.c_str(), (uint32_t)slice_index, (uint32_t)c.get_stats().size(), c.get_stats()[slice_index].m_width, c.get_stats()[slice_index].m_height, (uint32_t)c.get_any_source_image_has_alpha(), c.get_basis_bits_per_texel(), - c.get_stats()[slice_index].m_best_luma_709_psnr, - c.get_stats()[slice_index].m_basis_etc1s_luma_709_psnr, - c.get_stats()[slice_index].m_basis_bc1_luma_709_psnr, + c.get_stats()[slice_index].m_basis_rgb_avg_psnr, + c.get_stats()[slice_index].m_basis_rgba_avg_psnr, + c.get_stats()[slice_index].m_basis_luma_709_psnr, + c.get_stats()[slice_index].m_best_etc1s_luma_709_psnr, params.m_quality_level, (int)params.m_compression_level, tm.get_elapsed_secs()); fflush(pCSV_file); } @@ -822,8 +881,9 @@ static bool compress_mode(command_line_params &opts) return true; } -static bool unpack_and_validate_mode(command_line_params &opts, bool validate_flag) +static bool unpack_and_validate_mode(command_line_params &opts) { + const bool validate_flag = (opts.m_mode == cValidate); basist::etc1_global_selector_codebook sel_codebook(basist::g_global_selector_cb_size, basist::g_global_selector_cb); if (!opts.m_input_filenames.size()) @@ -885,7 +945,7 @@ static bool unpack_and_validate_mode(command_line_params &opts, bool validate_fl error_printf("Failed retrieving Basis file information!\n"); return false; } - + assert(fileinfo.m_total_images == fileinfo.m_image_mipmap_levels.size()); assert(fileinfo.m_total_images == dec.get_total_images(&basis_data[0], (uint32_t)basis_data.size())); @@ -898,6 +958,7 @@ static bool unpack_and_validate_mode(command_line_params &opts, bool validate_fl printf(" Endpoint codebook size: %u\n", fileinfo.m_endpoint_codebook_size); printf(" Tables size: %u\n", fileinfo.m_tables_size); printf(" Slices size: %u\n", fileinfo.m_slices_size); + printf(" Texture format: %s\n", (fileinfo.m_tex_format == basist::basis_tex_format::cUASTC4x4) ? "UASTC" : "ETC1S"); printf(" Texture type: %s\n", basist::basis_get_texture_type_name(fileinfo.m_tex_type)); printf(" us per frame: %u (%f fps)\n", fileinfo.m_us_per_frame, fileinfo.m_us_per_frame ? (1.0f / ((float)fileinfo.m_us_per_frame / 1000000.0f)) : 0.0f); printf(" Total slices: %u\n", (uint32_t)fileinfo.m_slice_info.size()); @@ -940,6 +1001,8 @@ static bool unpack_and_validate_mode(command_line_params &opts, bool validate_fl } printf("\n"); + if (opts.m_mode == cInfo) + return true; interval_timer tm; tm.start(); @@ -968,6 +1031,12 @@ static bool unpack_and_validate_mode(command_line_params &opts, bool validate_fl if (basist::basis_transcoder_format_is_uncompressed(tex_fmt)) continue; + + if (!basis_is_format_supported(tex_fmt, fileinfo.m_tex_format)) + continue; + + if (tex_fmt == basist::transcoder_texture_format::cTFBC7_ALT) + continue; gpu_images[(int)tex_fmt].resize(fileinfo.m_total_images); @@ -982,6 +1051,10 @@ static bool unpack_and_validate_mode(command_line_params &opts, bool validate_fl if (basist::basis_transcoder_format_is_uncompressed(transcoder_tex_fmt)) continue; + if (!basis_is_format_supported(transcoder_tex_fmt, fileinfo.m_tex_format)) + continue; + if (transcoder_tex_fmt == basist::transcoder_texture_format::cTFBC7_ALT) + continue; for (uint32_t image_index = 0; image_index < fileinfo.m_total_images; image_index++) { @@ -1046,6 +1119,10 @@ static bool unpack_and_validate_mode(command_line_params &opts, bool validate_fl if (basist::basis_transcoder_format_is_uncompressed(transcoder_tex_fmt)) continue; + if (!basis_is_format_supported(transcoder_tex_fmt, fileinfo.m_tex_format)) + continue; + if (transcoder_tex_fmt == basist::transcoder_texture_format::cTFBC7_ALT) + continue; if ((!opts.m_no_ktx) && (fileinfo.m_tex_type == basist::cBASISTexTypeCubemapArray)) { @@ -1150,6 +1227,18 @@ static bool unpack_and_validate_mode(command_line_params &opts, bool validate_fl return false; } printf("Wrote PNG file \"%s\"\n", a_filename.c_str()); + + std::string rgba_filename; + if (gi.size() > 1) + rgba_filename = base_filename + string_format("_unpacked_rgba_%s_%u_%04u.png", basist::basis_get_format_name(transcoder_tex_fmt), level_index, image_index); + else + rgba_filename = base_filename + string_format("_unpacked_rgba_%s_%04u.png", basist::basis_get_format_name(transcoder_tex_fmt), image_index); + if (!save_png(rgba_filename, u)) + { + error_printf("Failed writing to PNG file \"%s\"\n", rgba_filename.c_str()); + return false; + } + printf("Wrote PNG file \"%s\"\n", rgba_filename.c_str()); } } // level_index @@ -1191,6 +1280,8 @@ static bool unpack_and_validate_mode(command_line_params &opts, bool validate_fl printf("Transcode of image %u level %u res %ux%u format %s succeeded in %3.3f ms\n", image_index, level_index, level_info.m_orig_width, level_info.m_orig_height, basist::basis_get_format_name(transcoder_tex_fmt), total_transcode_time); + if (!validate_flag) + { std::string rgb_filename(base_filename + string_format("_unpacked_rgb_%s_%u_%04u.png", basist::basis_get_format_name(transcoder_tex_fmt), level_index, image_index)); if (!save_png(rgb_filename, img, cImageSaveIgnoreAlpha)) { @@ -1206,6 +1297,7 @@ static bool unpack_and_validate_mode(command_line_params &opts, bool validate_fl return false; } printf("Wrote PNG file \"%s\"\n", a_filename.c_str()); + } } // level_index } // image_index @@ -1255,6 +1347,8 @@ static bool unpack_and_validate_mode(command_line_params &opts, bool validate_fl printf("Transcode of image %u level %u res %ux%u format %s succeeded in %3.3f ms\n", image_index, level_index, level_info.m_orig_width, level_info.m_orig_height, basist::basis_get_format_name(transcoder_tex_fmt), total_transcode_time); + if (!validate_flag) + { std::string rgb_filename(base_filename + string_format("_unpacked_rgb_%s_%u_%04u.png", basist::basis_get_format_name(transcoder_tex_fmt), level_index, image_index)); if (!save_png(rgb_filename, img, cImageSaveIgnoreAlpha)) { @@ -1262,6 +1356,7 @@ static bool unpack_and_validate_mode(command_line_params &opts, bool validate_fl return false; } printf("Wrote PNG file \"%s\"\n", rgb_filename.c_str()); + } } // level_index } // image_index @@ -1312,6 +1407,8 @@ static bool unpack_and_validate_mode(command_line_params &opts, bool validate_fl printf("Transcode of image %u level %u res %ux%u format %s succeeded in %3.3f ms\n", image_index, level_index, level_info.m_orig_width, level_info.m_orig_height, basist::basis_get_format_name(transcoder_tex_fmt), total_transcode_time); + if (!validate_flag) + { std::string rgb_filename(base_filename + string_format("_unpacked_rgb_%s_%u_%04u.png", basist::basis_get_format_name(transcoder_tex_fmt), level_index, image_index)); if (!save_png(rgb_filename, img, cImageSaveIgnoreAlpha)) { @@ -1327,6 +1424,7 @@ static bool unpack_and_validate_mode(command_line_params &opts, bool validate_fl return false; } printf("Wrote PNG file \"%s\"\n", a_filename.c_str()); + } } // level_index } // image_index @@ -1353,7 +1451,7 @@ static bool compare_mode(command_line_params &opts) } image a, b; - if (!load_png(opts.m_input_filenames[0].c_str(), a)) + if (!load_image(opts.m_input_filenames[0].c_str(), a)) { error_printf("Failed loading image from file \"%s\"!\n", opts.m_input_filenames[0].c_str()); return false; @@ -1361,7 +1459,7 @@ static bool compare_mode(command_line_params &opts) printf("Loaded \"%s\", %ux%u, has alpha: %u\n", opts.m_input_filenames[0].c_str(), a.get_width(), a.get_height(), a.has_alpha()); - if (!load_png(opts.m_input_filenames[1].c_str(), b)) + if (!load_image(opts.m_input_filenames[1].c_str(), b)) { error_printf("Failed loading image from file \"%s\"!\n", opts.m_input_filenames[1].c_str()); return false; @@ -1386,6 +1484,9 @@ static bool compare_mode(command_line_params &opts) im.calc(a, b, 0, 3); im.print("RGB "); + im.calc(a, b, 0, 4); + im.print("RGBA "); + im.calc(a, b, 0, 1); im.print("R "); @@ -1395,6 +1496,9 @@ static bool compare_mode(command_line_params &opts) im.calc(a, b, 2, 1); im.print("B "); + im.calc(a, b, 3, 1); + im.print("A "); + im.calc(a, b, 0, 0); im.print("Y 709 " ); @@ -1450,9 +1554,1156 @@ static bool compare_mode(command_line_params &opts) return true; } +#include "basisu_astc_decomp.h" +#include "basisu_pvrtc1_4.h" + +#define MINIZ_HEADER_FILE_ONLY +#include "basisu_miniz.h" +static bool bench_mode(command_line_params& opts) +{ +#if 0 + ispc::bc7e_compress_block_init(); + + ispc::bc7e_compress_block_params pack_params; + memset(&pack_params, 0, sizeof(pack_params)); + ispc::bc7e_compress_block_params_init_slow(&pack_params, false); +#endif + + const uint32_t JOB_POOL_SIZE = 7; + job_pool jpool(JOB_POOL_SIZE); + + float total_uastc_psnr = 0, total_uastc_a_psnr = 0, total_uastc_rgba_psnr = 0; + float total_rdo_uastc_psnr = 0, total_rdo_uastc_a_psnr = 0, total_rdo_uastc_rgba_psnr = 0; + float total_uastc2_psnr = 0, total_uastc2_a_psnr = 0, total_uastc2_rgba_psnr = 0; + float total_bc7_psnr = 0, total_bc7_a_psnr = 0, total_bc7_rgba_psnr = 0; + float total_rdo_bc7_psnr = 0, total_rdo_bc7_a_psnr = 0, total_rdo_bc7_rgba_psnr = 0; + float total_obc1_psnr = 0; + float total_obc1_2_psnr = 0; + float total_obc1_psnr_sq = 0; + float total_obc1_2_psnr_sq = 0; + float total_bc1_psnr = 0; + float total_bc1_psnr_sq = 0; + //float total_obc7_psnr = 0, total_obc7_rgba_psnr = 0; + //float total_obc7_a_psnr = 0; + //float total_oastc_psnr = 0, total_oastc_rgba_psnr = 0; + float total_bc7enc_psnr = 0, total_bc7enc_rgba_psnr = 0, total_bc7enc_a_psnr = 0; + //float total_oastc_a_psnr = 0; + float total_etc1_psnr = 0; + float total_etc1_y_psnr = 0; + float total_etc1_g_psnr = 0; + float total_etc2_psnr = 0, total_etc2_rgba_psnr = 0; + float total_etc2_a_psnr = 0; + float total_bc3_psnr = 0, total_bc3_rgba_psnr = 0; + float total_bc3_a_psnr = 0; + float total_eac_r11_psnr = 0; + float total_eac_rg11_psnr = 0; + float total_pvrtc1_rgb_psnr = 0, total_pvrtc1_rgba_psnr = 0; + float total_pvrtc1_a_psnr = 0; + uint32_t total_images = 0; + uint32_t total_a_images = 0; + uint32_t total_pvrtc1_images = 0; + + uint64_t overall_mode_hist[basist::TOTAL_UASTC_MODES]; + memset(overall_mode_hist, 0, sizeof(overall_mode_hist)); + + std::mutex mode_hist_mutex; + + uint32_t etc1_hint_hist[32]; + memset(etc1_hint_hist, 0, sizeof(etc1_hint_hist)); + + srand(1023); + uint32_t first_image = 96; + uint32_t last_image = 96; //34 + + if (opts.m_input_filenames.size() >= 1) + { + first_image = 1; + last_image = 1; + } + + const bool perceptual = false; + const bool force_la = false; + + interval_timer otm; + otm.start(); + + //const uint32_t flags = cPackUASTCLevelFastest;// | cPackUASTCETC1DisableFlipAndIndividual;// Slower; + //const uint32_t flags = cPackUASTCLevelFaster; + //const uint32_t flags = cPackUASTCLevelVerySlow; + const uint32_t flags = cPackUASTCLevelDefault; + + uint32_t etc1_inten_hist[8] = { 0,0,0,0,0,0,0,0 }; + uint32_t etc1_flip_hist[2] = { 0, 0 }; + uint32_t etc1_diff_hist[2] = { 0, 0 }; + + double overall_total_enc_time = 0; + double overall_total_bench_time = 0; + double overall_total_bench2_time = 0; + uint64_t overall_blocks = 0; + + //bc7enc_compress_block_params bc7enc_p; + //bc7enc_compress_block_params_init(&bc7enc_p); + //bc7enc_compress_block_params_init_linear_weights(&bc7enc_p); + //bc7enc_p.m_uber_level = 3; + + uint64_t total_comp_size = 0; + uint64_t total_raw_size = 0; + uint64_t total_rdo_comp_size = 0; + uint64_t total_rdo_raw_size = 0; + uint64_t total_comp_blocks = 0; + + for (uint32_t image_index = first_image; image_index <= last_image; image_index++) + { + uint64_t mode_hist[basist::TOTAL_UASTC_MODES]; + memset(mode_hist, 0, sizeof(mode_hist)); + + char buf[1024]; + if (opts.m_input_filenames.size() >= 1) + strcpy(buf, opts.m_input_filenames[0].c_str()); + else + sprintf(buf, "c:/dev/test_images/photo_png/kodim%02u.png", image_index); + + printf("Image: %s\n", buf); + + image img; + if (!load_image(buf, img)) + return 0; + + if (opts.m_input_filenames.size() == 2) + { + image alpha_img; + if (!load_image(opts.m_input_filenames[1].c_str(), alpha_img)) + return 0; + + printf("Alpha image: %s, %ux%u\n", opts.m_input_filenames[1].c_str(), alpha_img.get_width(), alpha_img.get_height()); + + for (uint32_t x = 0; x < alpha_img.get_width(); x++) + for (uint32_t y = 0; y < alpha_img.get_height(); y++) + { + if (x < img.get_width() && y < img.get_height()) + img(x, y)[3] = (uint8_t)alpha_img(x, y).get_709_luma(); + } + } + + if (force_la) + { + for (uint32_t x = 0; x < img.get_width(); x++) + { + for (uint32_t y = 0; y < img.get_height(); y++) + { + const color_rgba& c = img(x, y); + img(x, y).set(c.r, c.r, c.r, c.g); + } + } + } + + // HACK HACK + //if (!img.has_alpha()) + // continue; + + // HACK HACK + //img.crop(1024, 1024); + + const uint32_t num_blocks_x = img.get_block_width(4); + const uint32_t num_blocks_y = img.get_block_height(4); + const uint32_t total_blocks = num_blocks_x * num_blocks_y; + const bool img_has_alpha = img.has_alpha(); + + img.crop_dup_borders(num_blocks_x * 4, num_blocks_y * 4); + + printf("%ux%u, has alpha: %u\n", img.get_width(), img.get_height(), img_has_alpha); + + image uastc_img(num_blocks_x * 4, num_blocks_y * 4); + image rdo_uastc_img(num_blocks_x * 4, num_blocks_y * 4); + image uastc2_img(num_blocks_x * 4, num_blocks_y * 4); + image opt_bc1_img(num_blocks_x * 4, num_blocks_y * 4); + image opt_bc1_2_img(num_blocks_x * 4, num_blocks_y * 4); + image bc1_img(num_blocks_x * 4, num_blocks_y * 4); + image bc3_img(num_blocks_x * 4, num_blocks_y * 4); + image eac_r11_img(num_blocks_x * 4, num_blocks_y * 4); + image eac_rg11_img(num_blocks_x * 4, num_blocks_y * 4); + image bc7_img(num_blocks_x * 4, num_blocks_y * 4); + image rdo_bc7_img(num_blocks_x * 4, num_blocks_y * 4); + image opt_bc7_img(num_blocks_x * 4, num_blocks_y * 4); + image etc1_img(num_blocks_x * 4, num_blocks_y * 4); + image etc1_g_img(num_blocks_x * 4, num_blocks_y * 4); + image etc2_img(num_blocks_x * 4, num_blocks_y * 4); + image part_img(num_blocks_x * 4, num_blocks_y * 4); + image opt_astc_img(num_blocks_x * 4, num_blocks_y * 4); + image bc7enc_img(num_blocks_x * 4, num_blocks_y * 4); + + uint32_t total_bc1_hint0s = 0; + uint32_t total_bc1_hint1s = 0; + uint32_t total_bc1_hint01s = 0; + + double total_enc_time = 0; + double total_bench_time = 0; + double total_bench2_time = 0; + + std::vector ublocks(total_blocks); + +#if 0 + astc_enc_settings astc_settings; + //if (img_has_alpha) + GetProfile_astc_alpha_slow(&astc_settings, 4, 4); + //else + // GetProfile_astc_fast(&astc_settings, 4, 4); +#endif + +#if 0 +//#pragma omp parallel for + for (int by = 0; by < (int)num_blocks_y; by++) + { + // Process 64 blocks at a time, for efficient SIMD processing. + // Ideally, N >= 8 (or more) and (N % 8) == 0. + const int N = 64; + + for (uint32_t bx = 0; bx < num_blocks_x; bx += N) + { + const uint32_t num_blocks_to_process = std::min(num_blocks_x - bx, N); + + color_rgba pixels[16 * N]; + +#if 0 + // BC7E + // Extract num_blocks_to_process 4x4 pixel blocks from the source image and put them into the pixels[] array. + for (uint32_t b = 0; b < num_blocks_to_process; b++) + img.extract_block_clamped(pixels + b * 16, (bx + b) * 4, by * 4, 4, 4); + + // Compress the blocks to BC7. + // Note: If you've used Intel's ispc_texcomp, the input pixels are different. BC7E requires a pointer to an array of 16 pixels for each block. + basist::bc7_block packed_blocks[N]; + ispc::bc7e_compress_blocks(num_blocks_to_process, (uint64_t*)packed_blocks, reinterpret_cast(pixels), &pack_params); + + for (uint32_t i = 0; i < num_blocks_to_process; i++) + { + color_rgba decoded_block[4][4]; + + //detexDecompressBlockBPTC((uint8_t *)&packed_blocks[i], 0xFF, 0, (uint8_t *)&decoded_block[0][0]); + unpack_block(texture_format::cBC7, &packed_blocks[i], &decoded_block[0][0]); + + opt_bc7_img.set_block_clipped(&decoded_block[0][0], (bx + i) * 4, by * 4, 4, 4); + } +#endif + +#if 0 + // ispc_texcomp + color_rgba raster_pixels[(N * 4) * 4]; + + const uint32_t raster_width = num_blocks_to_process * 4; + const uint32_t raster_height = 4; + + rgba_surface surf; + surf.ptr = &raster_pixels[0].r; + surf.width = raster_width; + surf.height = 4; + surf.stride = raster_width * 4; + + for (uint32_t b = 0; b < num_blocks_to_process; b++) + for (uint32_t y = 0; y < 4; y++) + for (uint32_t x = 0; x < 4; x++) + raster_pixels[y * raster_width + b * 4 + x] = pixels[b * 16 + y * 4 + x]; + + uint8_t astc_blocks[16 * N]; + CompressBlocksASTC(&surf, astc_blocks, &astc_settings); + + for (uint32_t i = 0; i < num_blocks_to_process; i++) + { + color_rgba decoded_astc_block[4][4]; + basisu_astc::astc::decompress((uint8_t*)decoded_astc_block, (uint8_t*)&astc_blocks[i * 16], false, 4, 4); + + opt_astc_img.set_block_clipped(&decoded_astc_block[0][0], (bx + i) * 4, by * 4, 4, 4); + } +#endif + } + } +#endif + + const uint32_t N = 128; + for (uint32_t block_index_iter = 0; block_index_iter < total_blocks; block_index_iter += N) + { + const uint32_t first_index = block_index_iter; + const uint32_t last_index = minimum(total_blocks, block_index_iter + N); + + jpool.add_job([first_index, last_index, &img, num_blocks_x, num_blocks_y, + &opt_bc1_img, &opt_bc1_2_img, &mode_hist, &overall_mode_hist, &uastc_img, &uastc2_img, &bc7_img, &part_img, &mode_hist_mutex, &bc1_img, &etc1_img, &etc1_g_img, &etc2_img, &etc1_hint_hist, &perceptual, + &total_bc1_hint0s, &total_bc1_hint1s, &total_bc1_hint01s, &bc3_img, &total_enc_time, &eac_r11_img, &eac_rg11_img, &ublocks, &flags, &etc1_inten_hist, &etc1_flip_hist, &etc1_diff_hist, &total_bench_time, &total_bench2_time, + //&bc7enc_p, &bc7enc_img] { + &bc7enc_img] { + + BASISU_NOTE_UNUSED(num_blocks_y); + BASISU_NOTE_UNUSED(perceptual); + BASISU_NOTE_UNUSED(flags); + + for (uint32_t block_index = first_index; block_index < last_index; block_index++) + { + const uint32_t block_x = block_index % num_blocks_x; + const uint32_t block_y = block_index / num_blocks_x; + + //uint32_t block_x = 170; + //uint32_t block_y = 167; + + // HACK HACK + //if ((block_x == 77) && (block_y == 54)) + // printf("!"); + + color_rgba block[4][4]; + img.extract_block_clamped(&block[0][0], block_x * 4, block_y * 4, 4, 4); + + uint8_t bc7_block[16]; + //bc7enc_compress_block(bc7_block, block, &bc7enc_p); + color_rgba decoded_bc7enc_blk[4][4]; + unpack_block(texture_format::cBC7, &bc7_block, &decoded_bc7enc_blk[0][0]); + bc7enc_img.set_block_clipped(&decoded_bc7enc_blk[0][0], block_x * 4, block_y * 4, 4, 4); + + // Pack near-optimal BC1 + // stb_dxt BC1 encoder + uint8_t bc1_block[8]; + + interval_timer btm; + btm.start(); + + //stb_compress_dxt_block(bc1_block, (uint8_t*)&block[0][0], 0, STB_DXT_HIGHQUAL); + basist::encode_bc1(bc1_block, (uint8_t*)&block[0][0], 0);// basist::cEncodeBC1HighQuality); + double total_b_time = btm.get_elapsed_secs(); + { + std::lock_guard lck(mode_hist_mutex); + total_bench_time += total_b_time; + } + + color_rgba block_bc1[4][4]; + unpack_block(texture_format::cBC1, bc1_block, &block_bc1[0][0]); + opt_bc1_img.set_block_clipped(&block_bc1[0][0], block_x * 4, block_y * 4, 4, 4); + + //uint64_t e1 = 0; + //for (uint32_t i = 0; i < 16; i++) + // e1 += color_distance(((color_rgba*)block_bc1)[i], ((color_rgba*)block)[i], false); + + // My BC1 encoder + uint8_t bc1_block_2[8]; + color_rgba block_bc1_2[4][4]; + + btm.start(); + basist::encode_bc1_alt(bc1_block_2, (uint8_t*)&block[0][0], basist::cEncodeBC1HighQuality); + double total_b2_time = btm.get_elapsed_secs(); + { + std::lock_guard lck(mode_hist_mutex); + total_bench2_time += total_b2_time; + } + + unpack_block(texture_format::cBC1, bc1_block_2, &block_bc1_2[0][0]); + //uint64_t e2 = 0; + //for (uint32_t i = 0; i < 16; i++) + // e2 += color_distance(((color_rgba *)block_bc1_2)[i], ((color_rgba*)block)[i], false); + + opt_bc1_2_img.set_block_clipped(&block_bc1_2[0][0], block_x * 4, block_y * 4, 4, 4); + + // Encode to UASTC + basist::uastc_block encoded_uastc_blk; + + interval_timer tm; + tm.start(); + encode_uastc(&block[0][0].r, encoded_uastc_blk, flags); + double total_time = tm.get_elapsed_secs(); + { + std::lock_guard lck(mode_hist_mutex); + total_enc_time += total_time; + } + + ublocks[block_x + block_y * num_blocks_x] = encoded_uastc_blk; + +#if 0 + for (uint32_t i = 0; i < 16; i++) + printf("0x%X,", encoded_uastc_blk.m_bytes[i]); + printf("\n"); +#endif + + // Unpack UASTC + basist::unpacked_uastc_block unpacked_uastc_blk; + unpack_uastc(encoded_uastc_blk, unpacked_uastc_blk, false); + + color_rgba unpacked_uastc_block_pixels[4][4]; + bool success = basist::unpack_uastc(unpacked_uastc_blk, (basist::color32*) & unpacked_uastc_block_pixels[0][0], false); + (void)success; + assert(success); + + uastc_img.set_block_clipped(&unpacked_uastc_block_pixels[0][0], block_x * 4, block_y * 4, 4, 4); + + const uint32_t best_mode = unpacked_uastc_blk.m_mode; + + { + std::lock_guard lck(mode_hist_mutex); + assert(best_mode < basist::TOTAL_UASTC_MODES); + if (best_mode < basist::TOTAL_UASTC_MODES) + { + mode_hist[best_mode]++; + overall_mode_hist[best_mode]++; + } + + if (basist::g_uastc_mode_has_etc1_bias[best_mode]) + etc1_hint_hist[unpacked_uastc_blk.m_etc1_bias]++; + + total_bc1_hint0s += unpacked_uastc_blk.m_bc1_hint0; + total_bc1_hint1s += unpacked_uastc_blk.m_bc1_hint1; + total_bc1_hint01s += (unpacked_uastc_blk.m_bc1_hint0 || unpacked_uastc_blk.m_bc1_hint1); + + etc1_inten_hist[unpacked_uastc_blk.m_etc1_inten0]++; + etc1_inten_hist[unpacked_uastc_blk.m_etc1_inten1]++; + + etc1_flip_hist[unpacked_uastc_blk.m_etc1_flip]++; + etc1_diff_hist[unpacked_uastc_blk.m_etc1_diff]++; + } + + // Transcode to BC1 + color_rgba tblock_bc1[4][4]; + + uint8_t tbc1_block[8]; + transcode_uastc_to_bc1(encoded_uastc_blk, tbc1_block, false); + unpack_block(texture_format::cBC1, tbc1_block, &tblock_bc1[0][0]); + bc1_img.set_block_clipped(&tblock_bc1[0][0], block_x * 4, block_y * 4, 4, 4); + + // Transcode to BC7 + basist::bc7_optimization_results best_bc7_results; + transcode_uastc_to_bc7(unpacked_uastc_blk, best_bc7_results); + + { + basist::bc7_block bc7_data; + encode_bc7_block(&bc7_data, &best_bc7_results); + + color_rgba decoded_bc7_blk[4][4]; + unpack_block(texture_format::cBC7, &bc7_data, &decoded_bc7_blk[0][0]); + + bc7_img.set_block_clipped(&decoded_bc7_blk[0][0], block_x * 4, block_y * 4, 4, 4); + + // Compute partition visualization image + for (uint32_t y = 0; y < 4; y++) + { + for (uint32_t x = 0; x < 4; x++) + { + uint32_t part = 0; + switch (best_bc7_results.m_mode) + { + case 1: + case 3: + case 7: + part = basist::g_bc7_partition2[best_bc7_results.m_partition * 16 + x + y * 4]; + break; + case 0: + case 2: + part = basist::g_bc7_partition3[best_bc7_results.m_partition * 16 + x + y * 4]; + break; + } + + color_rgba c(0, 255, 0, 255); + if (part == 1) + c.set(255, 0, 0, 255); + else if (part == 2) + c.set(0, 0, 255, 255); + + part_img.set_clipped(block_x * 4 + x, block_y * 4 + y, c); + } + } + } + + bool high_quality = false; + + // Transcode UASTC->BC3 + uint8_t ublock_bc3[16]; + transcode_uastc_to_bc3(encoded_uastc_blk, ublock_bc3, high_quality); + color_rgba ublock_bc3_unpacked[4][4]; + unpack_block(texture_format::cBC3, &ublock_bc3, &ublock_bc3_unpacked[0][0]); + bc3_img.set_block_clipped(&ublock_bc3_unpacked[0][0], block_x * 4, block_y * 4, 4, 4); + + // Transcode UASTC->R11 + uint8_t ublock_eac_r11[8]; + transcode_uastc_to_etc2_eac_r11(encoded_uastc_blk, ublock_eac_r11, high_quality, 0); + color_rgba ublock_eac_r11_unpacked[4][4]; + for (uint32_t y = 0; y < 4; y++) + for (uint32_t x = 0; x < 4; x++) + ublock_eac_r11_unpacked[y][x].set(0, 0, 0, 255); + unpack_block(texture_format::cETC2_R11_EAC, &ublock_eac_r11, &ublock_eac_r11_unpacked[0][0]); + eac_r11_img.set_block_clipped(&ublock_eac_r11_unpacked[0][0], block_x * 4, block_y * 4, 4, 4); + + // Transcode UASTC->RG11 + uint8_t ublock_eac_rg11[16]; + transcode_uastc_to_etc2_eac_rg11(encoded_uastc_blk, ublock_eac_rg11, high_quality, 0, 1); + color_rgba ublock_eac_rg11_unpacked[4][4]; + for (uint32_t y = 0; y < 4; y++) + for (uint32_t x = 0; x < 4; x++) + ublock_eac_rg11_unpacked[y][x].set(0, 0, 0, 255); + unpack_block(texture_format::cETC2_RG11_EAC, &ublock_eac_rg11, &ublock_eac_rg11_unpacked[0][0]); + eac_rg11_img.set_block_clipped(&ublock_eac_rg11_unpacked[0][0], block_x * 4, block_y * 4, 4, 4); + + // ETC1 + etc_block unpacked_etc1; + transcode_uastc_to_etc1(encoded_uastc_blk, &unpacked_etc1); + color_rgba unpacked_etc1_block[16]; + unpack_etc1(unpacked_etc1, unpacked_etc1_block); + etc1_img.set_block_clipped(unpacked_etc1_block, block_x * 4, block_y * 4, 4, 4); + + // ETC1 Y + etc_block unpacked_etc1_g; + + transcode_uastc_to_etc1(encoded_uastc_blk, &unpacked_etc1_g, 1); + + color_rgba unpacked_etc1_g_block[16]; + unpack_etc1(unpacked_etc1_g, unpacked_etc1_g_block); + etc1_g_img.set_block_clipped(unpacked_etc1_g_block, block_x * 4, block_y * 4, 4, 4); + + // ETC2 + etc2_rgba_block unpacked_etc2; + transcode_uastc_to_etc2_rgba(encoded_uastc_blk, &unpacked_etc2); + + color_rgba unpacked_etc2_block[16]; + unpack_block(texture_format::cETC2_RGBA, &unpacked_etc2, unpacked_etc2_block); + etc2_img.set_block_clipped(unpacked_etc2_block, block_x * 4, block_y * 4, 4, 4); + + // UASTC->ASTC + uint32_t tastc_data[4]; + + transcode_uastc_to_astc(encoded_uastc_blk, tastc_data); + + color_rgba decoded_tastc_block[4][4]; + basisu_astc::astc::decompress((uint8_t*)decoded_tastc_block, (uint8_t*)&tastc_data, false, 4, 4); + + uastc2_img.set_block_clipped(&decoded_tastc_block[0][0], block_x * 4, block_y * 4, 4, 4); + + for (uint32_t y = 0; y < 4; y++) + { + for (uint32_t x = 0; x < 4; x++) + { + if (decoded_tastc_block[y][x] != unpacked_uastc_block_pixels[y][x]) + { + printf("UASTC!=ASTC!\n"); + } + } + } + + } // block_index + + }); + + } // block_index_iter + + jpool.wait_for_all(); + + { + size_t comp_size = 0; + void* pComp_data = tdefl_compress_mem_to_heap(&ublocks[0], ublocks.size() * 16, &comp_size, TDEFL_MAX_PROBES_MASK);// TDEFL_DEFAULT_MAX_PROBES); + + size_t decomp_size; + void* pDecomp_data = tinfl_decompress_mem_to_heap(pComp_data, comp_size, &decomp_size, 0); + + if ((decomp_size != ublocks.size() * 16) || (memcmp(pDecomp_data, &ublocks[0], decomp_size) != 0)) + { + printf("Compression or decompression failed!\n"); + exit(1); + } + + mz_free(pComp_data); + mz_free(pDecomp_data); + + printf("Pre-RDO UASTC size: %u, compressed size: %u, %3.2f bits/texel\n", + (uint32_t)ublocks.size() * 16, + (uint32_t)comp_size, + comp_size * 8.0f / img.get_total_pixels()); + + total_comp_size += comp_size; + total_raw_size += ublocks.size() * 16; + } + + std::vector orig_block_pixels(ublocks.size() * 16); + for (uint32_t block_y = 0; block_y < num_blocks_y; block_y++) + for (uint32_t block_x = 0; block_x < num_blocks_x; block_x++) + img.extract_block_clamped(&orig_block_pixels[(block_x + block_y * num_blocks_x) * 16], block_x * 4, block_y * 4, 4, 4); + + // HACK HACK + const uint32_t max_rdo_jobs = 4; + + char rdo_fname[256]; + FILE* pFile = nullptr; + for (uint32_t try_index = 0; try_index < 100; try_index++) + { + sprintf(rdo_fname, "rdo_%02u_%u.csv", image_index, try_index); + pFile = fopen(rdo_fname, "rb"); + if (pFile) + { + fclose(pFile); + continue; + } + + pFile = fopen(rdo_fname, "w"); + if (!pFile) + printf("Cannot open CSV file %s\n", rdo_fname); + else + { + printf("Opened CSV file %s\n", rdo_fname); + break; + } + } + + for (float q = .2f; q <= 3.0f; q += (q >= 1.0f ? .5f : .1f)) + { + printf("Q: %f\n", q); + + uastc_rdo_params p; + p.m_quality_scaler = q; + p.m_max_allowed_rms_increase_ratio = 10.0f; + p.m_skip_block_rms_thresh = 8.0f; + + bool rdo_status = uastc_rdo((uint32_t)ublocks.size(), &ublocks[0], &orig_block_pixels[0], p, flags, &jpool, max_rdo_jobs); + if (!rdo_status) + { + printf("uastc_rdo() failed!\n"); + return false; + } + for (uint32_t block_y = 0; block_y < num_blocks_y; block_y++) + { + for (uint32_t block_x = 0; block_x < num_blocks_x; block_x++) + { + const basist::uastc_block& blk = ublocks[block_x + block_y * num_blocks_x]; + + color_rgba unpacked_block[4][4]; + if (!basist::unpack_uastc(blk, (basist::color32*)unpacked_block, false)) + { + printf("Block unpack failed!\n"); + exit(1); + } + + rdo_uastc_img.set_block_clipped(&unpacked_block[0][0], block_x * 4, block_y * 4, 4, 4); + + basist::bc7_optimization_results best_bc7_results; + transcode_uastc_to_bc7(blk, best_bc7_results); + + basist::bc7_block bc7_data; + encode_bc7_block(&bc7_data, &best_bc7_results); + + color_rgba decoded_bc7_blk[4][4]; + unpack_block(texture_format::cBC7, &bc7_data, &decoded_bc7_blk[0][0]); + + rdo_bc7_img.set_block_clipped(&decoded_bc7_blk[0][0], block_x * 4, block_y * 4, 4, 4); + } + } + + image_metrics em; + em.calc(img, rdo_uastc_img, 0, 3); + em.print("RDOUASTC RGB "); + + size_t comp_size = 0; + void* pComp_data = tdefl_compress_mem_to_heap(&ublocks[0], ublocks.size() * 16, &comp_size, TDEFL_MAX_PROBES_MASK);// TDEFL_DEFAULT_MAX_PROBES); + + size_t decomp_size; + void* pDecomp_data = tinfl_decompress_mem_to_heap(pComp_data, comp_size, &decomp_size, 0); + + if ((decomp_size != ublocks.size() * 16) || (memcmp(pDecomp_data, &ublocks[0], decomp_size) != 0)) + { + printf("Compression or decompression failed!\n"); + exit(1); + } + + mz_free(pComp_data); + mz_free(pDecomp_data); + + printf("RDO UASTC size: %u, compressed size: %u, %3.2f bits/texel\n", + (uint32_t)ublocks.size() * 16, + (uint32_t)comp_size, + comp_size * 8.0f / img.get_total_pixels()); + + if (pFile) + fprintf(pFile, "%f, %f, %f\n", q, comp_size * 8.0f / img.get_total_pixels(), em.m_psnr); + } + if (pFile) + fclose(pFile); + + { + size_t comp_size = 0; + void* pComp_data = tdefl_compress_mem_to_heap(&ublocks[0], ublocks.size() * 16, &comp_size, TDEFL_MAX_PROBES_MASK);// TDEFL_DEFAULT_MAX_PROBES); + + size_t decomp_size; + void* pDecomp_data = tinfl_decompress_mem_to_heap(pComp_data, comp_size, &decomp_size, 0); + + if ((decomp_size != ublocks.size() * 16) || (memcmp(pDecomp_data, &ublocks[0], decomp_size) != 0)) + { + printf("Compression or decompression failed!\n"); + exit(1); + } + + mz_free(pComp_data); + mz_free(pDecomp_data); + + printf("RDO UASTC size: %u, compressed size: %u, %3.2f bits/texel\n", + (uint32_t)ublocks.size() * 16, + (uint32_t)comp_size, + comp_size * 8.0f / img.get_total_pixels()); + + total_rdo_comp_size += comp_size; + total_rdo_raw_size += ublocks.size() * 16; + total_comp_blocks += ublocks.size(); + } + + printf("Total blocks: %u\n", total_blocks); + printf("Total BC1 hint 0's: %u %3.1f%%\n", total_bc1_hint0s, total_bc1_hint0s * 100.0f / total_blocks); + printf("Total BC1 hint 1's: %u %3.1f%%\n", total_bc1_hint1s, total_bc1_hint1s * 100.0f / total_blocks); + printf("Total BC1 hint 01's: %u %3.1f%%\n", total_bc1_hint01s, total_bc1_hint01s * 100.0f / total_blocks); + printf("Total enc time per block: %f us\n", total_enc_time / total_blocks * 1000000.0f); + printf("Total bench time per block: %f us\n", total_bench_time / total_blocks * 1000000.0f); + printf("Total bench2 time per block: %f us\n", total_bench2_time / total_blocks * 1000000.0f); + + overall_total_enc_time += total_enc_time; + overall_total_bench_time += total_bench_time; + overall_total_bench2_time += total_bench2_time; + overall_blocks += total_blocks; + + printf("ETC1 inten hist: %u %u %u %u %u %u %u %u\n", etc1_inten_hist[0], etc1_inten_hist[1], etc1_inten_hist[2], etc1_inten_hist[3], + etc1_inten_hist[4], etc1_inten_hist[5], etc1_inten_hist[6], etc1_inten_hist[7]); + printf("ETC1 flip hist: %u %u\n", etc1_flip_hist[0], etc1_flip_hist[1]); + printf("ETC1 diff hist: %u %u\n", etc1_diff_hist[0], etc1_diff_hist[1]); + + printf("UASTC mode histogram:\n"); + uint64_t total_hist = 0; + for (uint32_t i = 0; i < basist::TOTAL_UASTC_MODES; i++) + total_hist += mode_hist[i]; + for (uint32_t i = 0; i < basist::TOTAL_UASTC_MODES; i++) + printf("%u: %u %3.2f%%\n", i, (uint32_t)mode_hist[i], mode_hist[i] * 100.0f / total_hist); + + char fn[256]; + +#if 0 + for (uint32_t y = 0; y < img.get_height(); y++) + for (uint32_t x = 0; x < img.get_width(); x++) + { + //static inline uint8_t to_5(uint32_t v) { ; } + color_rgba &c = img(x, y); + + for (uint32_t i = 0; i < 3; i++) + { + const uint32_t limit = (i == 1) ? 63 : 31; + + uint32_t v = c[i]; + v = v * limit + 128; v = (uint8_t)((v + (v >> 8)) >> 8); + v = (v * 255 + (limit / 2)) / limit; + + c[i] = (uint8_t)v; + } + + } +#endif + + sprintf(fn, "orig_%02u.png", image_index); + save_png(fn, img, cImageSaveIgnoreAlpha); + + sprintf(fn, "orig_a_%02u.png", image_index); + save_png(fn, img, cImageSaveGrayscale, 3); + + sprintf(fn, "unpacked_uastc_%02u.png", image_index); + save_png(fn, uastc_img, cImageSaveIgnoreAlpha); + + sprintf(fn, "unpacked_uastc_a_%02u.png", image_index); + save_png(fn, uastc_img, cImageSaveGrayscale, 3); + + sprintf(fn, "unpacked_rdo_uastc_%02u.png", image_index); + save_png(fn, rdo_uastc_img, cImageSaveIgnoreAlpha); + + sprintf(fn, "unpacked_rdo_uastc_a_%02u.png", image_index); + save_png(fn, rdo_uastc_img, cImageSaveGrayscale, 3); + + sprintf(fn, "unpacked_uastc2_%02u.png", image_index); + save_png(fn, uastc2_img, cImageSaveIgnoreAlpha); + + sprintf(fn, "unpacked_bc7_%02u.png", image_index); + save_png(fn, bc7_img, cImageSaveIgnoreAlpha); + + sprintf(fn, "unpacked_bc7_a_%02u.png", image_index); + save_png(fn, bc7_img, cImageSaveGrayscale, 3); + + sprintf(fn, "unpacked_rdo_bc7_%02u.png", image_index); + save_png(fn, rdo_bc7_img, cImageSaveIgnoreAlpha); + + sprintf(fn, "unpacked_rdo_bc7_a_%02u.png", image_index); + save_png(fn, rdo_bc7_img, cImageSaveGrayscale, 3); + + sprintf(fn, "unpacked_opt_bc7_%02u.png", image_index); + save_png(fn, opt_bc7_img, cImageSaveIgnoreAlpha); + + sprintf(fn, "unpacked_opt_bc7_a_%02u.png", image_index); + save_png(fn, opt_bc7_img, cImageSaveGrayscale, 3); + + sprintf(fn, "unpacked_opt_astc_%02u.png", image_index); + save_png(fn, opt_astc_img, cImageSaveIgnoreAlpha); + + sprintf(fn, "unpacked_opt_astc_a_%02u.png", image_index); + save_png(fn, opt_astc_img, cImageSaveGrayscale, 3); + + sprintf(fn, "unpacked_bc7enc_%02u.png", image_index); + save_png(fn, bc7enc_img, cImageSaveIgnoreAlpha); + + sprintf(fn, "unpacked_bc7enc_a_%02u.png", image_index); + save_png(fn, bc7enc_img, cImageSaveGrayscale, 3); + + sprintf(fn, "unpacked_opt_bc1_%02u.png", image_index); + save_png(fn, opt_bc1_img, cImageSaveIgnoreAlpha); + + sprintf(fn, "unpacked_opt_bc1_2_%02u.png", image_index); + save_png(fn, opt_bc1_2_img, cImageSaveIgnoreAlpha); + + sprintf(fn, "unpacked_tbc1_%02u.png", image_index); + save_png(fn, bc1_img, cImageSaveIgnoreAlpha); + + sprintf(fn, "unpacked_bc3_%02u.png", image_index); + save_png(fn, bc3_img, cImageSaveIgnoreAlpha); + + sprintf(fn, "unpacked_eac_r11_%02u.png", image_index); + save_png(fn, eac_r11_img, cImageSaveIgnoreAlpha); + + sprintf(fn, "unpacked_eac_rg11_%02u.png", image_index); + save_png(fn, eac_rg11_img, cImageSaveIgnoreAlpha); + + sprintf(fn, "unpacked_bc3_a_%02u.png", image_index); + save_png(fn, bc3_img, cImageSaveGrayscale, 3); + + sprintf(fn, "part_vis_%02u.png", image_index); + save_png(fn, part_img, cImageSaveIgnoreAlpha); + + sprintf(fn, "unpacked_etc1_%02u.png", image_index); + save_png(fn, etc1_img, cImageSaveIgnoreAlpha); + + sprintf(fn, "unpacked_etc1_g_%02u.png", image_index); + save_png(fn, etc1_g_img, cImageSaveIgnoreAlpha); + + sprintf(fn, "unpacked_etc2_%02u.png", image_index); + save_png(fn, etc2_img, cImageSaveIgnoreAlpha); + + sprintf(fn, "unpacked_etc2_a_%02u.png", image_index); + save_png(fn, etc2_img, cImageSaveGrayscale, 3); + + image_metrics em; + + // UASTC + em.calc(img, uastc_img, 0, 3); + em.print("UASTC RGB "); + total_uastc_psnr += std::min(99.0f, em.m_psnr); + + em.calc(img, uastc_img, 3, 1); + em.print("UASTC A "); + if (img_has_alpha) + total_uastc_a_psnr += std::min(99.0f, em.m_psnr); + + em.calc(img, uastc_img, 0, 4); + em.print("UASTC RGBA "); + total_uastc_rgba_psnr += std::min(99.0f, em.m_psnr); + + // RDO UASTC + em.calc(img, rdo_uastc_img, 0, 3); + em.print("RDOUASTC RGB "); + total_rdo_uastc_psnr += std::min(99.0f, em.m_psnr); + + em.calc(img, rdo_uastc_img, 3, 1); + em.print("RDOUASTC A "); + if (img_has_alpha) + total_rdo_uastc_a_psnr += std::min(99.0f, em.m_psnr); + + em.calc(img, rdo_uastc_img, 0, 4); + em.print("RDOUASTC RGBA "); + total_rdo_uastc_rgba_psnr += std::min(99.0f, em.m_psnr); + + // UASTC2 + em.calc(img, uastc2_img, 0, 3); + em.print("UASTC2 RGB "); + total_uastc2_psnr += std::min(99.0f, em.m_psnr); + + em.calc(img, uastc2_img, 3, 1); + em.print("UASTC2 A "); + if (img_has_alpha) + total_uastc2_a_psnr += std::min(99.0f, em.m_psnr); + + em.calc(img, uastc2_img, 0, 4); + em.print("UASTC2 RGBA "); + total_uastc2_rgba_psnr += std::min(99.0f, em.m_psnr); + + // BC7 + em.calc(img, bc7_img, 0, 3); + em.print("BC7 RGB "); + total_bc7_psnr += std::min(99.0f, em.m_psnr); + + em.calc(img, bc7_img, 3, 1); + em.print("BC7 A "); + if (img_has_alpha) + total_bc7_a_psnr += std::min(99.0f, em.m_psnr); + + em.calc(img, bc7_img, 0, 4); + em.print("BC7 RGBA "); + total_bc7_rgba_psnr += std::min(99.0f, em.m_psnr); + + // RDO BC7 + em.calc(img, rdo_bc7_img, 0, 3); + em.print("RDOBC7 RGB "); + total_rdo_bc7_psnr += std::min(99.0f, em.m_psnr); + + em.calc(img, rdo_bc7_img, 3, 1); + em.print("RDOBC7 A "); + if (img_has_alpha) + total_rdo_bc7_a_psnr += std::min(99.0f, em.m_psnr); + + em.calc(img, rdo_bc7_img, 0, 4); + em.print("RDOBC7 RGBA "); + total_rdo_bc7_rgba_psnr += std::min(99.0f, em.m_psnr); + +#if 0 + // OBC7 + em.calc(img, opt_bc7_img, 0, 3); + em.print("OBC7 RGB "); + total_obc7_psnr += std::min(99.0f, em.m_psnr); + + em.calc(img, opt_bc7_img, 3, 1); + em.print("OBC7 A "); + if (img_has_alpha) + total_obc7_a_psnr += std::min(99.0f, em.m_psnr); + + em.calc(img, opt_bc7_img, 0, 4); + em.print("OBC7 RGBA "); + total_obc7_rgba_psnr += std::min(99.0f, em.m_psnr); + + // OASTC + em.calc(img, opt_astc_img, 0, 3); + em.print("OASTC RGB "); + total_oastc_psnr += std::min(99.0f, em.m_psnr); + + em.calc(img, opt_astc_img, 3, 1); + em.print("OASTC A "); + if (img_has_alpha) + total_oastc_a_psnr += std::min(99.0f, em.m_psnr); + + em.calc(img, opt_astc_img, 0, 4); + em.print("OASTC RGBA "); + total_oastc_rgba_psnr += std::min(99.0f, em.m_psnr); +#endif + + // bc7enc + em.calc(img, bc7enc_img, 0, 3); + em.print("BC7ENC RGB "); + total_bc7enc_psnr += std::min(99.0f, em.m_psnr); + + em.calc(img, bc7enc_img, 3, 1); + em.print("BC7ENC A "); + if (img_has_alpha) + total_bc7enc_a_psnr += std::min(99.0f, em.m_psnr); + + em.calc(img, bc7enc_img, 0, 4); + em.print("BC7ENC RGBA "); + total_bc7enc_rgba_psnr += std::min(99.0f, em.m_psnr); + +#if 1 + // OBC1 + em.calc(img, opt_bc1_img, 0, 3); + em.print("OBC1 RGB "); + total_obc1_psnr += std::min(99.0f, em.m_psnr); + total_obc1_psnr_sq += std::min(99.0f, em.m_psnr) * std::min(99.0f, em.m_psnr); +#endif + + em.calc(img, opt_bc1_2_img, 0, 3); + em.print("OBC1 2 RGB "); + total_obc1_2_psnr += std::min(99.0f, em.m_psnr); + total_obc1_2_psnr_sq += std::min(99.0f, em.m_psnr) * std::min(99.0f, em.m_psnr); + + em.calc(img, bc1_img, 0, 3); + em.print("BC1 RGB "); + total_bc1_psnr += std::min(99.0f, em.m_psnr); + total_bc1_psnr_sq += std::min(99.0f, em.m_psnr) * std::min(99.0f, em.m_psnr); + + // ETC1 + em.calc(img, etc1_img, 0, 3); + em.print("ETC1 RGB "); + total_etc1_psnr += std::min(99.0f, em.m_psnr); + + em.calc(img, etc1_img, 0, 0); + em.print("ETC1 Y "); + total_etc1_y_psnr += std::min(99.0f, em.m_psnr); + + // ETC1 + em.calc(img, etc1_g_img, 1, 1); + em.print("ETC1 G "); + total_etc1_g_psnr += std::min(99.0f, em.m_psnr); + + // ETC2 + em.calc(img, etc2_img, 0, 3); + em.print("ETC2 RGB "); + total_etc2_psnr += std::min(99.0f, em.m_psnr); + + em.calc(img, etc2_img, 3, 1); + em.print("ETC2 A "); + if (img_has_alpha) + total_etc2_a_psnr += std::min(99.0f, em.m_psnr); + + em.calc(img, etc2_img, 0, 4); + em.print("ETC2 RGBA "); + total_etc2_rgba_psnr += std::min(99.0f, em.m_psnr); + + // BC3 + em.calc(img, bc3_img, 0, 3); + em.print("BC3 RGB "); + total_bc3_psnr += std::min(99.0f, em.m_psnr); + + em.calc(img, bc3_img, 3, 1); + em.print("BC3 A "); + if (img_has_alpha) + total_bc3_a_psnr += std::min(99.0f, em.m_psnr); + + em.calc(img, bc3_img, 0, 4); + em.print("BC3 RGBA "); + total_bc3_rgba_psnr += std::min(99.0f, em.m_psnr); + + // EAC R11 + em.calc(img, eac_r11_img, 0, 1); + em.print("EAC R11 "); + total_eac_r11_psnr += std::min(99.0f, em.m_psnr); + + // EAC RG11 + em.calc(img, eac_rg11_img, 0, 2); + em.print("EAC RG11 "); + total_eac_rg11_psnr += std::min(99.0f, em.m_psnr); + + const uint32_t width = num_blocks_x * 4; + const uint32_t height = num_blocks_y * 4; + if (is_pow2(width) && is_pow2(height)) + { + pvrtc4_image pi(width, height); + + transcode_uastc_to_pvrtc1_4_rgba(&ublocks[0], pi.get_blocks().get_ptr(), num_blocks_x, num_blocks_y, false); + + pi.deswizzle(); + + //pi.map_all_pixels(img, perceptual, false); + + image pi_unpacked; + pi.unpack_all_pixels(pi_unpacked); + +#if 0 + sprintf(fn, "unpacked_pvrtc1_rgb_before_%02u.png", image_index); + save_png(fn, pi_unpacked, cImageSaveIgnoreAlpha); + + em.calc(img, pi_unpacked, 0, 3); + em.print("PVRTC1 RGB Before "); + + for (uint32_t pass = 0; pass < 1; pass++) + { + for (uint32_t by = 0; by < num_blocks_y; by++) + { + for (uint32_t bx = 0; bx < num_blocks_x; bx++) + { + pi.local_endpoint_optimization_opaque(bx, by, img, perceptual, false); + } + } + } + + //pi.map_all_pixels(img, perceptual, false); + + pi.unpack_all_pixels(pi_unpacked); +#endif + + sprintf(fn, "unpacked_pvrtc1_%02u.png", image_index); + save_png(fn, pi_unpacked, cImageSaveIgnoreAlpha); + + sprintf(fn, "unpacked_pvrtc1_a_%02u.png", image_index); + save_png(fn, pi_unpacked, cImageSaveGrayscale, 3); + + em.calc(img, pi_unpacked, 0, 3); + em.print("PVRTC1 After RGB "); + total_pvrtc1_rgb_psnr += std::min(99.0f, em.m_psnr); + + em.calc(img, pi_unpacked, 3, 1); + em.print("PVRTC1 After A "); + total_pvrtc1_a_psnr += std::min(99.0f, em.m_psnr); + + em.calc(img, pi_unpacked, 0, 4); + em.print("PVRTC1 After RGBA "); + total_pvrtc1_rgba_psnr += std::min(99.0f, em.m_psnr); + + total_pvrtc1_images++; + } + + printf("ETC1 hint histogram:\n"); + for (uint32_t i = 0; i < 32; i++) + printf("%u ", etc1_hint_hist[i]); + printf("\n"); + + total_images++; + if (img_has_alpha) + total_a_images++; + + } // image_index + + printf("Total time: %f secs\n", otm.get_elapsed_secs()); + + printf("Total Non-RDO UASTC size: %llu, compressed size: %llu, %3.2f bits/texel\n", + (unsigned long long)total_raw_size, + (unsigned long long)total_comp_size, + total_comp_size * 8.0f / (total_comp_blocks * 16)); + + printf("Total RDO UASTC size: %llu, compressed size: %llu, %3.2f bits/texel\n", + (unsigned long long)total_rdo_raw_size, + (unsigned long long)total_rdo_comp_size, + total_rdo_comp_size * 8.0f / (total_comp_blocks * 16)); + + printf("Overall enc time per block: %f us\n", overall_total_enc_time / overall_blocks * 1000000.0f); + printf("Overall bench time per block: %f us\n", overall_total_bench_time / overall_blocks * 1000000.0f); + printf("Overall bench2 time per block: %f us\n", overall_total_bench2_time / overall_blocks * 1000000.0f); + + printf("Overall ASTC mode histogram:\n"); + uint64_t total_hist = 0; + for (uint32_t i = 0; i < basist::TOTAL_UASTC_MODES; i++) + total_hist += overall_mode_hist[i]; + + for (uint32_t i = 0; i < basist::TOTAL_UASTC_MODES; i++) + printf("%u: %u %3.2f%%\n", i, (uint32_t)overall_mode_hist[i], overall_mode_hist[i] * 100.0f / total_hist); + + printf("Total images: %u, total images with alpha: %u, total PVRTC1 images: %u\n", total_images, total_a_images, total_pvrtc1_images); + + if (!total_a_images) + total_a_images = 1; + + printf("Avg UASTC RGB PSNR: %f, A PSNR: %f, RGBA PSNR: %f\n", total_uastc_psnr / total_images, total_uastc_a_psnr / total_a_images, total_uastc_rgba_psnr / total_images); + printf("Avg UASTC2 RGB PSNR: %f, A PSNR: %f, RGBA PSNR: %f\n", total_uastc2_psnr / total_images, total_uastc2_a_psnr / total_a_images, total_uastc2_rgba_psnr / total_images); + printf("Avg RDO UASTC RGB PSNR: %f, A PSNR: %f, RGBA PSNR: %f\n", total_rdo_uastc_psnr / total_images, total_rdo_uastc_a_psnr / total_a_images, total_rdo_uastc_rgba_psnr / total_images); + printf("Avg BC7 RGB PSNR: %f, A PSNR: %f, RGBA PSNR: %f\n", total_bc7_psnr / total_images, total_bc7_a_psnr / total_a_images, total_bc7_rgba_psnr / total_images); + printf("Avg RDO BC7 RGB PSNR: %f, A PSNR: %f, RGBA PSNR: %f\n", total_rdo_bc7_psnr / total_images, total_rdo_bc7_a_psnr / total_a_images, total_rdo_bc7_rgba_psnr / total_images); + //printf("Avg Opt BC7 RGB PSNR: %f, A PSNR: %f, RGBA PSNR: %f\n", total_obc7_psnr / total_images, total_obc7_a_psnr / total_a_images, total_obc7_rgba_psnr / total_images); + //printf("Avg Opt ASTC RGB PSNR: %f, A PSNR: %f, RGBA PSNR: %f\n", total_oastc_psnr / total_images, total_oastc_a_psnr / total_a_images, total_oastc_rgba_psnr / total_images); + printf("Avg BC7ENC RGB PSNR: %f, A PSNR: %f, RGBA PSNR: %f\n", total_bc7enc_psnr / total_images, total_bc7enc_a_psnr / total_a_images, total_bc7enc_rgba_psnr / total_images); + + printf("Avg Opt BC1 PSNR: %f, std dev: %f\n", total_obc1_psnr / total_images, sqrtf(std::max(0.0f, (total_obc1_psnr_sq / total_images) - (total_obc1_psnr / total_images) * (total_obc1_psnr / total_images)))); + + printf("Avg Opt BC1 2 PSNR: %f, std dev: %f\n", total_obc1_2_psnr / total_images, sqrtf(std::max(0.0f, (total_obc1_2_psnr_sq / total_images) - (total_obc1_2_psnr / total_images) * (total_obc1_2_psnr / total_images)))); + + printf("Avg BC1 PSNR: %f, std dev: %f\n", total_bc1_psnr / total_images, sqrtf(std::max(0.0f, (total_bc1_psnr_sq / total_images) - (total_bc1_psnr / total_images) * (total_bc1_psnr / total_images)))); + + printf("Avg ETC1 RGB PSNR: %f\n", total_etc1_psnr / total_images); + printf("Avg ETC1 Y PSNR: %f\n", total_etc1_y_psnr / total_images); + printf("Avg ETC1 G PSNR: %f\n", total_etc1_g_psnr / total_images); + + printf("Avg ETC2 RGB PSNR: %f\n", total_etc2_psnr / total_images); + printf("Avg ETC2 A PSNR: %f\n", total_etc2_a_psnr / total_a_images); + printf("Avg ETC2 RGBA PSNR: %f\n", total_etc2_rgba_psnr / total_images); + + printf("Avg BC3 RGB PSNR: %f\n", total_bc3_psnr / total_images); + printf("Avg BC3 A PSNR: %f\n", total_bc3_a_psnr / total_a_images); + printf("Avg BC3 RGBA PSNR: %f\n", total_bc3_rgba_psnr / total_images); + + printf("Avg EAC R11 PSNR: %f\n", total_eac_r11_psnr / total_images); + printf("Avg EAC RG11 PSNR: %f\n", total_eac_rg11_psnr / total_images); + + if (total_pvrtc1_images) + { + printf("Avg PVRTC1 RGB PSNR: %f\n", total_pvrtc1_rgb_psnr / total_pvrtc1_images); + printf("Avg PVRTC1 A PSNR: %f\n", total_pvrtc1_a_psnr / total_pvrtc1_images); + printf("Avg PVRTC1 RGBA PSNR: %f\n", total_pvrtc1_rgba_psnr / total_pvrtc1_images); + } + + return true; +} + static int main_internal(int argc, const char **argv) { - printf("Basis Universal GPU Texture Compressor Reference Encoder v" BASISU_TOOL_VERSION ", Copyright (C) 2019 Binomial LLC, All rights reserved\n"); + printf("Basis Universal GPU Texture Compressor Reference Encoder v" BASISU_TOOL_VERSION "\nCopyright (C) 2019-2020 Binomial LLC, All rights reserved\n"); //interval_timer tm; //tm.start(); @@ -1474,7 +2725,7 @@ static int main_internal(int argc, const char **argv) command_line_params opts; if (!opts.parse(argc, argv)) { - print_usage(); + //print_usage(); return EXIT_FAILURE; } @@ -1504,10 +2755,9 @@ static int main_internal(int argc, const char **argv) status = compress_mode(opts); break; case cValidate: - status = unpack_and_validate_mode(opts, true); - break; + case cInfo: case cUnpack: - status = unpack_and_validate_mode(opts, false); + status = unpack_and_validate_mode(opts); break; case cCompare: status = compare_mode(opts); @@ -1515,6 +2765,9 @@ static int main_internal(int argc, const char **argv) case cVersion: status = true; // We printed the version at the beginning of main_internal break; + case cBench: + status = bench_mode(opts); + break; default: assert(0); break; @@ -1523,8 +2776,12 @@ static int main_internal(int argc, const char **argv) return status ? EXIT_SUCCESS : EXIT_FAILURE; } -int main(int argc, const char **argv) +int main(int argc, const char** argv) { +#ifdef _DEBUG + printf("DEBUG\n"); +#endif + int status = EXIT_FAILURE; #if BASISU_CATCH_EXCEPTIONS diff --git a/lodepng.cpp b/lodepng.cpp index cf964d0..60ad5ff 100644 --- a/lodepng.cpp +++ b/lodepng.cpp @@ -29,6 +29,7 @@ Rename this file to lodepng.cpp to use it for C++, or to lodepng.c to use it for */ #ifdef _MSC_VER +#define _CRT_SECURE_NO_DEPRECATE #pragma warning (disable : 4201) #ifndef BASISU_NO_ITERATOR_DEBUG_LEVEL diff --git a/transcoder/basisu.h b/transcoder/basisu.h index 25600a6..a62854e 100644 --- a/transcoder/basisu.h +++ b/transcoder/basisu.h @@ -1,5 +1,5 @@ // basisu.h -// Copyright (C) 2019 Binomial LLC. All Rights Reserved. +// Copyright (C) 2019-2020 Binomial LLC. All Rights Reserved. // Important: If compiling with gcc, be sure strict aliasing is disabled: -fno-strict-aliasing // // Licensed under the Apache License, Version 2.0 (the "License"); @@ -79,9 +79,9 @@ #define strcasecmp _stricmp #endif -// Set to one to enable debug printf()'s when any errors occur, for development/debugging. -#ifndef BASISU_DEVEL_MESSAGES -#define BASISU_DEVEL_MESSAGES 0 +// Set to one to enable debug printf()'s when any errors occur, for development/debugging. Especially useful for WebGL development. +#ifndef BASISU_FORCE_DEVEL_MESSAGES +#define BASISU_FORCE_DEVEL_MESSAGES 0 #endif #define BASISU_NOTE_UNUSED(x) (void)(x) @@ -92,7 +92,7 @@ #define BASISU_STRINGIZE(x) #x #define BASISU_STRINGIZE2(x) BASISU_STRINGIZE(x) -#if BASISU_DEVEL_MESSAGES +#if BASISU_FORCE_DEVEL_MESSAGES #define BASISU_DEVEL_ERROR(...) do { basisu::debug_printf(__VA_ARGS__); } while(0) #else #define BASISU_DEVEL_ERROR(...) @@ -125,9 +125,25 @@ namespace basisu template inline S maximum(S a, S b) { return (a > b) ? a : b; } template inline S maximum(S a, S b, S c) { return maximum(maximum(a, b), c); } + template inline S maximum(S a, S b, S c, S d) { return maximum(maximum(maximum(a, b), c), d); } template inline S minimum(S a, S b) { return (a < b) ? a : b; } template inline S minimum(S a, S b, S c) { return minimum(minimum(a, b), c); } + template inline S minimum(S a, S b, S c, S d) { return minimum(minimum(minimum(a, b), c), d); } + + inline float clampf(float value, float low, float high) { if (value < low) value = low; else if (value > high) value = high; return value; } + inline float saturate(float value) { return clampf(value, 0, 1.0f); } + inline uint8_t minimumub(uint8_t a, uint8_t b) { return (a < b) ? a : b; } + inline uint32_t minimumu(uint32_t a, uint32_t b) { return (a < b) ? a : b; } + inline int32_t minimumi(int32_t a, int32_t b) { return (a < b) ? a : b; } + inline float minimumf(float a, float b) { return (a < b) ? a : b; } + inline uint8_t maximumub(uint8_t a, uint8_t b) { return (a > b) ? a : b; } + inline uint32_t maximumu(uint32_t a, uint32_t b) { return (a > b) ? a : b; } + inline int32_t maximumi(int32_t a, int32_t b) { return (a > b) ? a : b; } + inline float maximumf(float a, float b) { return (a > b) ? a : b; } + inline int squarei(int i) { return i * i; } + inline float squaref(float i) { return i * i; } + template inline T square(T a) { return a * a; } template inline S clamp(S value, S low, S high) { return (value < low) ? low : ((value > high) ? high : value); } @@ -137,8 +153,6 @@ namespace basisu template inline void clear_vector(T &vec) { vec.erase(vec.begin(), vec.end()); } template inline typename T::value_type *enlarge_vector(T &vec, size_t n) { size_t cs = vec.size(); vec.resize(cs + n); return &vec[cs]; } - template inline S square(S val) { return val * val; } - inline bool is_pow2(uint32_t x) { return x && ((x & (x - 1U)) == 0U); } inline bool is_pow2(uint64_t x) { return x && ((x & (x - 1U)) == 0U); } @@ -256,6 +270,7 @@ namespace basisu inline packed_uint(const packed_uint& other) { *this = other; } inline packed_uint& operator= (uint32_t v) { for (uint32_t i = 0; i < NumBytes; i++) m_bytes[i] = static_cast(v >> (i * 8)); return *this; } + inline packed_uint& operator= (const packed_uint& rhs) { memcpy(m_bytes, rhs.m_bytes, sizeof(m_bytes)); return *this; } inline operator uint32_t() const { @@ -308,15 +323,15 @@ namespace basisu // Block-based formats cETC1, // ETC1 cETC1S, // ETC1 (subset: diff colors only, no subblocks) - cETC2_RGB, // ETC2 color block - cETC2_RGBA, // ETC2 alpha block followed by ETC2 color block + cETC2_RGB, // ETC2 color block (basisu doesn't support ETC2 planar/T/H modes - just basic ETC1) + cETC2_RGBA, // ETC2 EAC alpha block followed by ETC2 color block cETC2_ALPHA, // ETC2 EAC alpha block cBC1, // DXT1 - cBC3, // DXT5 (DXT5A block followed by a DXT1 block) + cBC3, // DXT5 (BC4/DXT5A block followed by a BC1/DXT1 block) cBC4, // DXT5A - cBC5, // 3DC/DXN (two DXT5A blocks) + cBC5, // 3DC/DXN (two BC4/DXT5A blocks) cBC7, - cASTC4x4, + cASTC4x4, // LDR only cPVRTC1_4_RGB, cPVRTC1_4_RGBA, cATC_RGB, @@ -325,6 +340,7 @@ namespace basisu cPVRTC2_4_RGBA, cETC2_R11_EAC, cETC2_RG11_EAC, + cUASTC4x4, // Uncompressed/raw pixels cRGBA32, diff --git a/transcoder/basisu_file_headers.h b/transcoder/basisu_file_headers.h index c90b3f3..e682996 100644 --- a/transcoder/basisu_file_headers.h +++ b/transcoder/basisu_file_headers.h @@ -1,5 +1,5 @@ // basis_file_headers.h -// Copyright (C) 2019 Binomial LLC. All Rights Reserved. +// Copyright (C) 2019-2020 Binomial LLC. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -20,7 +20,7 @@ namespace basist // Slice desc header flags enum basis_slice_desc_flags { - cSliceDescFlagsIsAlphaData = 1, + cSliceDescFlagsHasAlpha = 1, cSliceDescFlagsFrameIsIFrame = 2 // Video only: Frame doesn't refer to previous frame (no usage of conditional replenishment pred symbols) }; @@ -47,9 +47,9 @@ namespace basist // File header files enum basis_header_flags { - cBASISHeaderFlagETC1S = 1, // Always set for basis universal files + cBASISHeaderFlagETC1S = 1, // Always set for ETC1S files. Not set for UASTC files. cBASISHeaderFlagYFlipped = 2, // Set if the texture had to be Y flipped before encoding - cBASISHeaderFlagHasAlphaSlices = 4 // True if the odd slices contain alpha data + cBASISHeaderFlagHasAlphaSlices = 4 // True if any slices contain alpha (for ETC1S, if the odd slices contain alpha data) }; // The image type field attempts to describe how to interpret the image data in a Basis file. @@ -71,6 +71,12 @@ namespace basist cBASISMaxUSPerFrame = 0xFFFFFF }; + enum class basis_tex_format + { + cETC1S = 0, + cUASTC4x4 = 1 + }; + struct basis_file_header { enum @@ -91,7 +97,7 @@ namespace basist basisu::packed_uint<3> m_total_images; // The total # of images - basisu::packed_uint<1> m_format; // enum basist::block_format + basisu::packed_uint<1> m_tex_format; // enum basis_tex_format basisu::packed_uint<2> m_flags; // enum basist::header_flags basisu::packed_uint<1> m_tex_type; // enum basist::basis_texture_type basisu::packed_uint<3> m_us_per_frame; // Framerate of video, in microseconds per frame diff --git a/transcoder/basisu_global_selector_cb.h b/transcoder/basisu_global_selector_cb.h index 695b0b3..8ab5098 100644 --- a/transcoder/basisu_global_selector_cb.h +++ b/transcoder/basisu_global_selector_cb.h @@ -1,4 +1,4 @@ -// Copyright (C) 2019 Binomial LLC. All Rights Reserved. +// Copyright (C) 2019-2020 Binomial LLC. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/transcoder/basisu_global_selector_palette.h b/transcoder/basisu_global_selector_palette.h index b026054..4c94b01 100644 --- a/transcoder/basisu_global_selector_palette.h +++ b/transcoder/basisu_global_selector_palette.h @@ -1,5 +1,5 @@ // basisu_global_selector_palette.h -// Copyright (C) 2019 Binomial LLC. All Rights Reserved. +// Copyright (C) 2019-2020 Binomial LLC. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. diff --git a/transcoder/basisu_transcoder.cpp b/transcoder/basisu_transcoder.cpp index d15b601..386f523 100644 --- a/transcoder/basisu_transcoder.cpp +++ b/transcoder/basisu_transcoder.cpp @@ -1,5 +1,5 @@ // basisu_transcoder.cpp -// Copyright (C) 2019 Binomial LLC. All Rights Reserved. +// Copyright (C) 2019-2020 Binomial LLC. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. @@ -17,7 +17,19 @@ #include #include -// The supported .basis file header version. Keep in sync with BASIS_FILE_VERSION. +#ifndef IS_BIG_ENDIAN +// TODO: This doesn't work on OSX. How can this be so difficult? +//#if defined(__BIG_ENDIAN__) || defined(_BIG_ENDIAN) || defined(BIG_ENDIAN) +// #define IS_BIG_ENDIAN (1) +//#else + #define IS_BIG_ENDIAN (0) +//#endif +#endif + +#ifndef USE_UNALIGNED_WORD_READS +#define USE_UNALIGNED_WORD_READS (1) +#endif + #define BASISD_SUPPORTED_BASIS_VERSION (0x13) // Set to 1 for fuzz testing. This will disable all CRC16 checks on headers and compressed data. @@ -35,21 +47,12 @@ // Disable all BC7 transcoders if necessary (useful when cross compiling to Javascript) #if defined(BASISD_SUPPORT_BC7) && !BASISD_SUPPORT_BC7 - #ifndef BASISD_SUPPORT_BC7_MODE6_OPAQUE_ONLY - #define BASISD_SUPPORT_BC7_MODE6_OPAQUE_ONLY 0 - #endif #ifndef BASISD_SUPPORT_BC7_MODE5 #define BASISD_SUPPORT_BC7_MODE5 0 #endif #endif // !BASISD_SUPPORT_BC7 -// BC7 mode 6 opaque only is the highest quality (compared to ETC1), but the tables are massive. -// For web/mobile use you probably should disable this. -#ifndef BASISD_SUPPORT_BC7_MODE6_OPAQUE_ONLY -#define BASISD_SUPPORT_BC7_MODE6_OPAQUE_ONLY 1 -#endif - -// BC7 mode 5 supports both opaque and opaque+alpha textures, and uses substantially less memory than BC7 mode 6 and even BC1. +// BC7 mode 5 supports both opaque and opaque+alpha textures, and uses less memory BC1. #ifndef BASISD_SUPPORT_BC7_MODE5 #define BASISD_SUPPORT_BC7_MODE5 1 #endif @@ -62,6 +65,11 @@ #define BASISD_SUPPORT_ETC2_EAC_A8 1 #endif +// Set BASISD_SUPPORT_UASTC to 0 to completely disable support for transcoding UASTC files. +#ifndef BASISD_SUPPORT_UASTC +#define BASISD_SUPPORT_UASTC 1 +#endif + #ifndef BASISD_SUPPORT_ASTC #define BASISD_SUPPORT_ASTC 1 #endif @@ -108,7 +116,6 @@ #endif #endif -#define BASISD_WRITE_NEW_BC7_TABLES 0 #define BASISD_WRITE_NEW_BC7_MODE5_TABLES 0 #define BASISD_WRITE_NEW_DXT1_TABLES 0 #define BASISD_WRITE_NEW_ETC2_EAC_A8_TABLES 0 @@ -131,7 +138,7 @@ namespace basisu void debug_printf(const char* pFmt, ...) { -#if BASISU_DEVEL_MESSAGES +#if BASISU_FORCE_DEVEL_MESSAGES g_debug_printf = true; #endif if (g_debug_printf) @@ -146,9 +153,6 @@ namespace basisu namespace basist { -#if BASISD_SUPPORT_BC7_MODE6_OPAQUE_ONLY -#include "basisu_transcoder_tables_bc7_m6.inc" -#endif #if BASISD_ENABLE_DEBUG_FLAGS static uint32_t g_debug_flags = 0; @@ -165,11 +169,23 @@ namespace basist void set_debug_flags(uint32_t f) { - (void)f; + BASISU_NOTE_UNUSED(f); #if BASISD_ENABLE_DEBUG_FLAGS g_debug_flags = f; #endif } + + inline uint16_t byteswap_uint16(uint16_t v) + { + return static_cast((v >> 8) | (v << 8)); + } + + static inline int32_t clampi(int32_t value, int32_t low, int32_t high) { if (value < low) value = low; else if (value > high) value = high; return value; } + static inline float clampf(float value, float low, float high) { if (value < low) value = low; else if (value > high) value = high; return value; } + static inline float saturate(float value) { return clampf(value, 0, 1.0f); } + + static inline uint8_t mul_8(uint32_t v, uint32_t q) { v = v * q + 128; return (uint8_t)((v + (v >> 8)) >> 8); } + uint16_t crc16(const void* r, size_t size, uint16_t crc) { crc = ~crc; @@ -279,6 +295,9 @@ namespace basist DECLARE_ETC1_INTEN_TABLE(g_etc1_inten_tables, 1); DECLARE_ETC1_INTEN_TABLE(g_etc1_inten_tables16, 16); DECLARE_ETC1_INTEN_TABLE(g_etc1_inten_tables48, 3 * 16); + + //const uint8_t g_etc1_to_selector_index[cETC1SelectorValues] = { 2, 3, 1, 0 }; + const uint8_t g_selector_index_to_etc1[cETC1SelectorValues] = { 3, 2, 0, 1 }; static const uint8_t g_etc_5_to_8[32] = { 0, 8, 16, 24, 33, 41, 49, 57, 66, 74, 82, 90, 99, 107, 115, 123, 132, 140, 148, 156, 165, 173, 181, 189, 198, 206, 214, 222, 231, 239, 247, 255 }; @@ -522,11 +541,39 @@ namespace basist return static_cast(b | (g << 5U) | (r << 10U)); } + inline uint16_t get_base4_color(uint32_t idx) const + { + uint32_t r, g, b; + if (idx) + { + r = get_byte_bits(cETC1AbsColor4R2BitOffset, 4); + g = get_byte_bits(cETC1AbsColor4G2BitOffset, 4); + b = get_byte_bits(cETC1AbsColor4B2BitOffset, 4); + } + else + { + r = get_byte_bits(cETC1AbsColor4R1BitOffset, 4); + g = get_byte_bits(cETC1AbsColor4G1BitOffset, 4); + b = get_byte_bits(cETC1AbsColor4B1BitOffset, 4); + } + return static_cast(b | (g << 4U) | (r << 8U)); + } + inline color32 get_base5_color_unscaled() const { return color32(m_differential.m_red1, m_differential.m_green1, m_differential.m_blue1, 255); } + inline bool get_flip_bit() const + { + return (m_bytes[3] & 1) != 0; + } + + inline bool get_diff_bit() const + { + return (m_bytes[3] & 2) != 0; + } + inline uint32_t get_inten_table(uint32_t subblock_id) const { assert(subblock_id < 2); @@ -534,6 +581,38 @@ namespace basist return (m_bytes[3] >> ofs) & 7; } + inline uint16_t get_delta3_color() const + { + const uint32_t r = get_byte_bits(cETC1DeltaColor3RBitOffset, 3); + const uint32_t g = get_byte_bits(cETC1DeltaColor3GBitOffset, 3); + const uint32_t b = get_byte_bits(cETC1DeltaColor3BBitOffset, 3); + return static_cast(b | (g << 3U) | (r << 6U)); + } + + void get_block_colors(color32* pBlock_colors, uint32_t subblock_index) const + { + color32 b; + + if (get_diff_bit()) + { + if (subblock_index) + unpack_color5(b, get_base5_color(), get_delta3_color(), true, 255); + else + unpack_color5(b, get_base5_color(), true); + } + else + { + b = unpack_color4(get_base4_color(subblock_index), true, 255); + } + + const int* pInten_table = g_etc1_inten_tables[get_inten_table(subblock_index)]; + + pBlock_colors[0].set_noclamp_rgba(clamp255(b.r + pInten_table[0]), clamp255(b.g + pInten_table[0]), clamp255(b.b + pInten_table[0]), 255); + pBlock_colors[1].set_noclamp_rgba(clamp255(b.r + pInten_table[1]), clamp255(b.g + pInten_table[1]), clamp255(b.b + pInten_table[1]), 255); + pBlock_colors[2].set_noclamp_rgba(clamp255(b.r + pInten_table[2]), clamp255(b.g + pInten_table[2]), clamp255(b.b + pInten_table[2]), 255); + pBlock_colors[3].set_noclamp_rgba(clamp255(b.r + pInten_table[3]), clamp255(b.g + pInten_table[3]), clamp255(b.b + pInten_table[3]), 255); + } + static uint16_t pack_color4(const color32& color, bool scaled, uint32_t bias = 127U) { return pack_color4(color.r, color.g, color.b, scaled, bias); @@ -592,7 +671,17 @@ namespace basist return static_cast(b | (g << 3) | (r << 6)); } - static color32 unpack_color5(uint16_t packed_color5, bool scaled, uint32_t alpha = 255) + static void unpack_delta3(int& r, int& g, int& b, uint16_t packed_delta3) + { + r = (packed_delta3 >> 6) & 7; + g = (packed_delta3 >> 3) & 7; + b = packed_delta3 & 7; + if (r >= 4) r -= 8; + if (g >= 4) g -= 8; + if (b >= 4) b -= 8; + } + + static color32 unpack_color5(uint16_t packed_color5, bool scaled, uint32_t alpha) { uint32_t b = packed_color5 & 31U; uint32_t g = (packed_color5 >> 5U) & 31U; @@ -605,7 +694,9 @@ namespace basist r = (r << 3U) | (r >> 2U); } - return color32(r, g, b, alpha); + assert(alpha <= 255); + + return color32(cNoClamp, r, g, b, alpha); } static void unpack_color5(uint32_t& r, uint32_t& g, uint32_t& b, uint16_t packed_color5, bool scaled) @@ -615,6 +706,64 @@ namespace basist g = c.g; b = c.b; } + + static void unpack_color5(color32& result, uint16_t packed_color5, bool scaled) + { + result = unpack_color5(packed_color5, scaled, 255); + } + + static bool unpack_color5(color32& result, uint16_t packed_color5, uint16_t packed_delta3, bool scaled, uint32_t alpha) + { + int dr, dg, db; + unpack_delta3(dr, dg, db, packed_delta3); + + int r = ((packed_color5 >> 10U) & 31U) + dr; + int g = ((packed_color5 >> 5U) & 31U) + dg; + int b = (packed_color5 & 31U) + db; + + bool success = true; + if (static_cast(r | g | b) > 31U) + { + success = false; + r = basisu::clamp(r, 0, 31); + g = basisu::clamp(g, 0, 31); + b = basisu::clamp(b, 0, 31); + } + + if (scaled) + { + b = (b << 3U) | (b >> 2U); + g = (g << 3U) | (g >> 2U); + r = (r << 3U) | (r >> 2U); + } + + result.set_noclamp_rgba(r, g, b, basisu::minimum(alpha, 255U)); + return success; + } + + static color32 unpack_color4(uint16_t packed_color4, bool scaled, uint32_t alpha) + { + uint32_t b = packed_color4 & 15U; + uint32_t g = (packed_color4 >> 4U) & 15U; + uint32_t r = (packed_color4 >> 8U) & 15U; + + if (scaled) + { + b = (b << 4U) | b; + g = (g << 4U) | g; + r = (r << 4U) | r; + } + + return color32(cNoClamp, r, g, b, basisu::minimum(alpha, 255U)); + } + + static void unpack_color4(uint32_t& r, uint32_t& g, uint32_t& b, uint16_t packed_color4, bool scaled) + { + color32 c(unpack_color4(packed_color4, scaled, 0)); + r = c.r; + g = c.g; + b = c.b; + } static void get_diff_subblock_colors(color32* pDst, uint16_t packed_color5, uint32_t table_idx) { @@ -823,197 +972,6 @@ namespace basist uint32_t m_high; }; -#if BASISD_SUPPORT_BC7_MODE6_OPAQUE_ONLY - static dxt_selector_range g_etc1_to_bc7_selector_ranges[] = - { - { 0, 0 }, - { 1, 1 }, - { 2, 2 }, - { 3, 3 }, - - { 0, 3 }, - - { 1, 3 }, - { 0, 2 }, - - { 1, 2 }, - - { 2, 3 }, - { 0, 1 }, - }; - const uint32_t NUM_ETC1_TO_BC7_M6_SELECTOR_RANGES = sizeof(g_etc1_to_bc7_selector_ranges) / sizeof(g_etc1_to_bc7_selector_ranges[0]); - - static uint32_t g_etc1_to_bc7_m6_selector_range_index[4][4]; - - static const uint8_t g_etc1_to_bc7_selector_mappings[][4] = - { -#if 1 - { 5 * 0, 5 * 0, 5 * 0, 5 * 0 }, - { 5 * 0, 5 * 0, 5 * 0, 5 * 1 }, - { 5 * 0, 5 * 0, 5 * 0, 5 * 2 }, - { 5 * 0, 5 * 0, 5 * 0, 5 * 3 }, - { 5 * 0, 5 * 0, 5 * 1, 5 * 1 }, - { 5 * 0, 5 * 0, 5 * 1, 5 * 2 }, - { 5 * 0, 5 * 0, 5 * 1, 5 * 3 }, - { 5 * 0, 5 * 0, 5 * 2, 5 * 2 }, - { 5 * 0, 5 * 0, 5 * 2, 5 * 3 }, - { 5 * 0, 5 * 0, 5 * 3, 5 * 3 }, - { 5 * 0, 5 * 1, 5 * 1, 5 * 1 }, - { 5 * 0, 5 * 1, 5 * 1, 5 * 2 }, - { 5 * 0, 5 * 1, 5 * 1, 5 * 3 }, - { 5 * 0, 5 * 1, 5 * 2, 5 * 2 }, - { 5 * 0, 5 * 1, 5 * 2, 5 * 3 }, - { 5 * 0, 5 * 1, 5 * 3, 5 * 3 }, - { 5 * 0, 5 * 2, 5 * 2, 5 * 2 }, - { 5 * 0, 5 * 2, 5 * 2, 5 * 3 }, - { 5 * 0, 5 * 2, 5 * 3, 5 * 3 }, - { 5 * 0, 5 * 3, 5 * 3, 5 * 3 }, - { 5 * 1, 5 * 1, 5 * 1, 5 * 1 }, - { 5 * 1, 5 * 1, 5 * 1, 5 * 2 }, - { 5 * 1, 5 * 1, 5 * 1, 5 * 3 }, - { 5 * 1, 5 * 1, 5 * 2, 5 * 2 }, - { 5 * 1, 5 * 1, 5 * 2, 5 * 3 }, - { 5 * 1, 5 * 1, 5 * 3, 5 * 3 }, - { 5 * 1, 5 * 2, 5 * 2, 5 * 2 }, - { 5 * 1, 5 * 2, 5 * 2, 5 * 3 }, - { 5 * 1, 5 * 2, 5 * 3, 5 * 3 }, - { 5 * 1, 5 * 3, 5 * 3, 5 * 3 }, - { 5 * 2, 5 * 2, 5 * 2, 5 * 2 }, - { 5 * 2, 5 * 2, 5 * 2, 5 * 3 }, - { 5 * 2, 5 * 2, 5 * 3, 5 * 3 }, - { 5 * 2, 5 * 3, 5 * 3, 5 * 3 }, - { 5 * 3, 5 * 3, 5 * 3, 5 * 3 }, - - { 0, 1, 2, 3 }, - { 0, 0, 1, 1 }, - { 0, 0, 0, 1 }, - { 0, 2, 4, 6 }, - { 0, 3, 6, 9 }, - { 0, 4, 8, 12 }, - - { 0, 4, 9, 15 }, - { 0, 6, 11, 15 }, - - { 1, 2, 3, 4 }, - { 1, 3, 5, 7 }, - - { 1, 8, 8, 14 }, -#else - { 5 * 0, 5 * 0, 5 * 1, 5 * 1 }, - { 5 * 0, 5 * 0, 5 * 1, 5 * 2 }, - { 5 * 0, 5 * 0, 5 * 1, 5 * 3 }, - { 5 * 0, 5 * 0, 5 * 2, 5 * 3 }, - { 5 * 0, 5 * 1, 5 * 1, 5 * 1 }, - { 5 * 0, 5 * 1, 5 * 2, 5 * 2 }, - { 5 * 0, 5 * 1, 5 * 2, 5 * 3 }, - { 5 * 0, 5 * 2, 5 * 3, 5 * 3 }, - { 5 * 1, 5 * 2, 5 * 2, 5 * 2 }, -#endif - { 5 * 1, 5 * 2, 5 * 3, 5 * 3 }, - { 8, 8, 8, 8 }, - }; - const uint32_t NUM_ETC1_TO_BC7_M6_SELECTOR_MAPPINGS = sizeof(g_etc1_to_bc7_selector_mappings) / sizeof(g_etc1_to_bc7_selector_mappings[0]); - - static uint8_t g_etc1_to_bc7_selector_mappings_inv[NUM_ETC1_TO_BC7_M6_SELECTOR_MAPPINGS][4]; - - // encoding from LSB to MSB: low8, high8, error16, size is [32*8][NUM_ETC1_TO_BC7_M6_SELECTOR_RANGES][NUM_ETC1_TO_BC7_M6_SELECTOR_MAPPINGS] - extern const uint32_t* g_etc1_to_bc7_m6_table[]; - - const uint16_t s_bptc_table_aWeight4[16] = { 0, 4, 9, 13, 17, 21, 26, 30, 34, 38, 43, 47, 51, 55, 60, 64 }; - -#if BASISD_WRITE_NEW_BC7_TABLES - static void create_etc1_to_bc7_m6_conversion_table() - { - FILE* pFile = NULL; - - pFile = fopen("basisu_decoder_tables_bc7_m6.inc", "w"); - - for (int inten = 0; inten < 8; inten++) - { - for (uint32_t g = 0; g < 32; g++) - { - color32 block_colors[4]; - decoder_etc_block::get_diff_subblock_colors(block_colors, decoder_etc_block::pack_color5(color32(g, g, g, 255), false), inten); - - fprintf(pFile, "static const uint32_t g_etc1_to_bc7_m6_table%u[] = {\n", g + inten * 32); - uint32_t n = 0; - - for (uint32_t sr = 0; sr < NUM_ETC1_TO_BC7_M6_SELECTOR_RANGES; sr++) - { - const uint32_t low_selector = g_etc1_to_bc7_selector_ranges[sr].m_low; - const uint32_t high_selector = g_etc1_to_bc7_selector_ranges[sr].m_high; - - for (uint32_t m = 0; m < NUM_ETC1_TO_BC7_M6_SELECTOR_MAPPINGS; m++) - { - uint32_t best_lo = 0; - uint32_t best_hi = 0; - uint64_t best_err = UINT64_MAX; - - for (uint32_t hi = 0; hi <= 127; hi++) - { - for (uint32_t lo = 0; lo <= 127; lo++) - { - uint32_t bc7_block_colors[16]; - - bc7_block_colors[0] = lo << 1; - bc7_block_colors[15] = (hi << 1) | 1; - - for (uint32_t i = 1; i < 15; i++) - bc7_block_colors[i] = (bc7_block_colors[0] * (64 - s_bptc_table_aWeight4[i]) + bc7_block_colors[15] * s_bptc_table_aWeight4[i] + 32) >> 6; - - uint64_t total_err = 0; - - for (uint32_t s = low_selector; s <= high_selector; s++) - { - int err = (int)block_colors[s].g - (int)bc7_block_colors[g_etc1_to_bc7_selector_mappings[m][s]]; - - total_err += err * err; - } - - if (total_err < best_err) - { - best_err = total_err; - best_lo = lo; - best_hi = hi; - } - } // lo - - } // hi - - best_err = basisu::minimum(best_err, 0xFFFF); - - const uint32_t index = (g + inten * 32) * (NUM_ETC1_TO_BC7_M6_SELECTOR_RANGES * NUM_ETC1_TO_BC7_M6_SELECTOR_MAPPINGS) + (sr * NUM_ETC1_TO_BC7_M6_SELECTOR_MAPPINGS) + m; - - uint32_t v = best_err | (best_lo << 18) | (best_hi << 25); - - fprintf(pFile, "0x%X,", v); - n++; - if ((n & 31) == 31) - fprintf(pFile, "\n"); - - } // m - } // sr - - fprintf(pFile, "};\n"); - - } // g - } // inten - - fprintf(pFile, "const uint32_t *g_etc1_to_bc7_m6_table[] = {\n"); - - for (uint32_t i = 0; i < 32 * 8; i++) - { - fprintf(pFile, "g_etc1_to_bc7_m6_table%u, ", i); - if ((i & 15) == 15) - fprintf(pFile, "\n"); - } - - fprintf(pFile, "};\n"); - fclose(pFile); - } -#endif -#endif - struct etc1_to_dxt1_56_solution { uint8_t m_lo; @@ -1064,7 +1022,9 @@ namespace basist static const etc1_to_dxt1_56_solution g_etc1_to_dxt_5[32 * 8 * NUM_ETC1_TO_DXT1_SELECTOR_MAPPINGS * NUM_ETC1_TO_DXT1_SELECTOR_RANGES] = { #include "basisu_transcoder_tables_dxt1_5.inc" }; +#endif // BASISD_SUPPORT_DXT1 +#if BASISD_SUPPORT_DXT1 || BASISD_SUPPORT_UASTC // First saw the idea for optimal BC1 single-color block encoding using lookup tables in ryg_dxt. struct bc1_match_entry { @@ -1089,14 +1049,15 @@ namespace basist if (sel == 1) { // Selector 1 - e = abs(((hi_e * 2 + lo_e) / 3) - i) + ((abs(hi_e - lo_e) >> 5)); + e = basisu::iabs(((hi_e * 2 + lo_e) / 3) - i); + e += (basisu::iabs(hi_e - lo_e) * 3) / 100; } else { assert(sel == 0); // Selector 0 - e = abs(hi_e - i); + e = basisu::iabs(hi_e - i); } if (e < lowest_e) @@ -1111,7 +1072,7 @@ namespace basist } // lo } } -#endif // BASISD_SUPPORT_DXT1 +#endif #if BASISD_WRITE_NEW_DXT1_TABLES static void create_etc1_to_dxt1_5_conversion_table() @@ -1268,7 +1229,8 @@ namespace basist } #endif -#if BASISD_SUPPORT_ETC2_EAC_A8 || BASISD_SUPPORT_ETC2_EAC_RG11 + +#if BASISD_SUPPORT_UASTC || BASISD_SUPPORT_ETC2_EAC_A8 || BASISD_SUPPORT_ETC2_EAC_RG11 static const int8_t g_eac_modifier_table[16][8] = { { -3, -6, -9, -15, 2, 5, 8, 14 }, @@ -1344,6 +1306,9 @@ namespace basist } }; +#endif // #if BASISD_SUPPORT_UASTC BASISD_SUPPORT_ETC2_EAC_A8 || BASISD_SUPPORT_ETC2_EAC_RG11 + +#if BASISD_SUPPORT_ETC2_EAC_A8 || BASISD_SUPPORT_ETC2_EAC_RG11 static const dxt_selector_range s_etc2_eac_selector_ranges[] = { { 0, 3 }, @@ -1924,6 +1889,10 @@ namespace basist #if BASISD_SUPPORT_PVRTC2 static void transcoder_init_pvrtc2(); #endif + +#if BASISD_SUPPORT_UASTC + void uastc_init(); +#endif // Library global initialization. Requires ~9 milliseconds when compiled and executed natively on a Core i7 2.2 GHz. // If this is too slow, these computed tables can easilky be moved to be compiled in. @@ -1931,7 +1900,16 @@ namespace basist { static bool s_initialized; if (s_initialized) + { + BASISU_DEVEL_ERROR("basisu_transcoder::basisu_transcoder_init: Called more than once\n"); return; + } + + BASISU_DEVEL_ERROR("basisu_transcoder::basisu_transcoder_init: Initializing (this is not an error)\n"); + +#if BASISD_SUPPORT_UASTC + uastc_init(); +#endif #if BASISD_SUPPORT_ASTC transcoder_init_astc(); @@ -1943,11 +1921,6 @@ namespace basist exit(0); #endif -#if BASISD_WRITE_NEW_BC7_TABLES - create_etc1_to_bc7_m6_conversion_table(); - exit(0); -#endif - #if BASISD_WRITE_NEW_BC7_MODE5_TABLES create_etc1_to_bc7_m5_color_conversion_table(); create_etc1_to_bc7_m5_alpha_conversion_table(); @@ -1975,7 +1948,7 @@ namespace basist exit(0); #endif -#if BASISD_SUPPORT_DXT1 +#if BASISD_SUPPORT_DXT1 || BASISD_SUPPORT_UASTC uint8_t bc1_expand5[32]; for (int i = 0; i < 32; i++) bc1_expand5[i] = static_cast((i << 3) | (i >> 2)); @@ -1988,6 +1961,17 @@ namespace basist prepare_bc1_single_color_table(g_bc1_match6_equals_1, bc1_expand6, 64, 64, 1); prepare_bc1_single_color_table(g_bc1_match6_equals_0, bc1_expand6, 1, 64, 0); +#if 0 + for (uint32_t i = 0; i < 256; i++) + { + printf("%u %u %u\n", i, (i * 63 + 127) / 255, g_bc1_match6_equals_0[i].m_hi); + } + exit(0); +#endif + +#endif + +#if BASISD_SUPPORT_DXT1 for (uint32_t i = 0; i < NUM_ETC1_TO_DXT1_SELECTOR_RANGES; i++) { uint32_t l = g_etc1_to_dxt1_selector_ranges[i].m_low; @@ -2023,19 +2007,6 @@ namespace basist } #endif -#if BASISD_SUPPORT_BC7_MODE6_OPAQUE_ONLY - for (uint32_t i = 0; i < NUM_ETC1_TO_BC7_M6_SELECTOR_RANGES; i++) - { - uint32_t l = g_etc1_to_bc7_selector_ranges[i].m_low; - uint32_t h = g_etc1_to_bc7_selector_ranges[i].m_high; - g_etc1_to_bc7_m6_selector_range_index[l][h] = i; - } - - for (uint32_t sm = 0; sm < NUM_ETC1_TO_BC7_M6_SELECTOR_MAPPINGS; sm++) - for (uint32_t j = 0; j < 4; j++) - g_etc1_to_bc7_selector_mappings_inv[sm][j] = 15 - g_etc1_to_bc7_selector_mappings[sm][j]; -#endif - #if BASISD_SUPPORT_BC7_MODE5 transcoder_init_bc7_mode5(); #endif @@ -2780,7 +2751,7 @@ namespace basist // PVRTC -#if BASISD_SUPPORT_PVRTC1 +#if BASISD_SUPPORT_PVRTC1 || BASISD_SUPPORT_UASTC static const uint16_t g_pvrtc_swizzle_table[256] = { 0x0000, 0x0001, 0x0004, 0x0005, 0x0010, 0x0011, 0x0014, 0x0015, 0x0040, 0x0041, 0x0044, 0x0045, 0x0050, 0x0051, 0x0054, 0x0055, 0x0100, 0x0101, 0x0104, 0x0105, 0x0110, 0x0111, 0x0114, 0x0115, 0x0140, 0x0141, 0x0144, 0x0145, 0x0150, 0x0151, 0x0154, 0x0155, @@ -3304,6 +3275,7 @@ namespace basist } }; +#if 0 static const uint8_t g_pvrtc_bilinear_weights[16][4] = { { 4, 4, 4, 4 }, { 2, 6, 2, 6 }, { 8, 0, 8, 0 }, { 6, 2, 6, 2 }, @@ -3311,6 +3283,7 @@ namespace basist { 8, 8, 0, 0 }, { 4, 12, 0, 0 }, { 16, 0, 0, 0 }, { 12, 4, 0, 0 }, { 6, 6, 2, 2 }, { 3, 9, 1, 3 }, { 12, 0, 4, 0 }, { 9, 3, 3, 1 }, }; +#endif struct pvrtc1_temp_block { @@ -3402,7 +3375,9 @@ namespace basist color32 c(get_endpoint_8888(endpoints, endpoint_index)); return c.r + c.g + c.b + c.a; } +#endif +#if BASISD_SUPPORT_PVRTC1 // TODO: Support decoding a non-pow2 ETC1S texture into the next larger pow2 PVRTC texture. static void fixup_pvrtc1_4_modulation_rgb(const decoder_etc_block* pETC_Blocks, const uint32_t* pPVRTC_endpoints, void* pDst_blocks, uint32_t num_blocks_x, uint32_t num_blocks_y) { @@ -3411,7 +3386,7 @@ namespace basist const uint32_t x_bits = basisu::total_bits(x_mask); const uint32_t y_bits = basisu::total_bits(y_mask); const uint32_t min_bits = basisu::minimum(x_bits, y_bits); - const uint32_t max_bits = basisu::maximum(x_bits, y_bits); + //const uint32_t max_bits = basisu::maximum(x_bits, y_bits); const uint32_t swizzle_mask = (1 << (min_bits * 2)) - 1; uint32_t block_index = 0; @@ -3592,7 +3567,7 @@ namespace basist const uint32_t x_bits = basisu::total_bits(x_mask); const uint32_t y_bits = basisu::total_bits(y_mask); const uint32_t min_bits = basisu::minimum(x_bits, y_bits); - const uint32_t max_bits = basisu::maximum(x_bits, y_bits); + //const uint32_t max_bits = basisu::maximum(x_bits, y_bits); const uint32_t swizzle_mask = (1 << (min_bits * 2)) - 1; uint32_t block_index = 0; @@ -3763,257 +3738,6 @@ namespace basist } #endif // BASISD_SUPPORT_PVRTC1 -#if BASISD_SUPPORT_BC7_MODE6_OPAQUE_ONLY - struct bc7_mode_6 - { - struct - { - uint64_t m_mode : 7; - uint64_t m_r0 : 7; - uint64_t m_r1 : 7; - uint64_t m_g0 : 7; - uint64_t m_g1 : 7; - uint64_t m_b0 : 7; - uint64_t m_b1 : 7; - uint64_t m_a0 : 7; - uint64_t m_a1 : 7; - uint64_t m_p0 : 1; - } m_lo; - - union - { - struct - { - uint64_t m_p1 : 1; - uint64_t m_s00 : 3; - uint64_t m_s10 : 4; - uint64_t m_s20 : 4; - uint64_t m_s30 : 4; - - uint64_t m_s01 : 4; - uint64_t m_s11 : 4; - uint64_t m_s21 : 4; - uint64_t m_s31 : 4; - - uint64_t m_s02 : 4; - uint64_t m_s12 : 4; - uint64_t m_s22 : 4; - uint64_t m_s32 : 4; - - uint64_t m_s03 : 4; - uint64_t m_s13 : 4; - uint64_t m_s23 : 4; - uint64_t m_s33 : 4; - - } m_hi; - - uint64_t m_hi_bits; - }; - }; - - static void convert_etc1s_to_bc7_m6(bc7_mode_6* pDst_block, const endpoint *pEndpoint, const selector* pSelector) - { -#if !BASISD_WRITE_NEW_BC7_TABLES - const uint32_t low_selector = pSelector->m_lo_selector; - const uint32_t high_selector = pSelector->m_hi_selector; - - const uint32_t base_color_r = pEndpoint->m_color5.r; - const uint32_t base_color_g = pEndpoint->m_color5.g; - const uint32_t base_color_b = pEndpoint->m_color5.b; - const uint32_t inten_table = pEndpoint->m_inten5; - - if (pSelector->m_num_unique_selectors <= 2) - { - // Only two unique selectors so just switch to block truncation coding (BTC) to avoid quality issues on extreme blocks. - pDst_block->m_lo.m_mode = 64; - - pDst_block->m_lo.m_a0 = 127; - pDst_block->m_lo.m_a1 = 127; - - color32 block_colors[4]; - - decoder_etc_block::get_block_colors5(block_colors, color32(base_color_r, base_color_g, base_color_b, 255), inten_table); - - const uint32_t r0 = block_colors[low_selector].r; - const uint32_t g0 = block_colors[low_selector].g; - const uint32_t b0 = block_colors[low_selector].b; - const uint32_t low_bits0 = (r0 & 1) + (g0 & 1) + (b0 & 1); - uint32_t p0 = low_bits0 >= 2; - - const uint32_t r1 = block_colors[high_selector].r; - const uint32_t g1 = block_colors[high_selector].g; - const uint32_t b1 = block_colors[high_selector].b; - const uint32_t low_bits1 = (r1 & 1) + (g1 & 1) + (b1 & 1); - uint32_t p1 = low_bits1 >= 2; - - pDst_block->m_lo.m_r0 = r0 >> 1; - pDst_block->m_lo.m_g0 = g0 >> 1; - pDst_block->m_lo.m_b0 = b0 >> 1; - pDst_block->m_lo.m_p0 = p0; - - pDst_block->m_lo.m_r1 = r1 >> 1; - pDst_block->m_lo.m_g1 = g1 >> 1; - pDst_block->m_lo.m_b1 = b1 >> 1; - - uint32_t output_low_selector = 0; - uint32_t output_bit_offset = 1; - uint64_t output_hi_bits = p1; - - for (uint32_t y = 0; y < 4; y++) - { - for (uint32_t x = 0; x < 4; x++) - { - uint32_t s = pSelector->get_selector(x, y); - uint32_t os = (s == low_selector) ? output_low_selector : (15 ^ output_low_selector); - - uint32_t num_bits = 4; - - if ((x | y) == 0) - { - if (os & 8) - { - pDst_block->m_lo.m_r0 = r1 >> 1; - pDst_block->m_lo.m_g0 = g1 >> 1; - pDst_block->m_lo.m_b0 = b1 >> 1; - pDst_block->m_lo.m_p0 = p1; - - pDst_block->m_lo.m_r1 = r0 >> 1; - pDst_block->m_lo.m_g1 = g0 >> 1; - pDst_block->m_lo.m_b1 = b0 >> 1; - - output_hi_bits &= ~1ULL; - output_hi_bits |= p0; - std::swap(p0, p1); - - output_low_selector = 15; - os = 0; - } - - num_bits = 3; - } - - output_hi_bits |= (static_cast(os) << output_bit_offset); - output_bit_offset += num_bits; - } - } - - pDst_block->m_hi_bits = output_hi_bits; - - assert(pDst_block->m_hi.m_p1 == p1); - - return; - } - - uint32_t selector_range_table = g_etc1_to_bc7_m6_selector_range_index[low_selector][high_selector]; - - const uint32_t* pTable_r = g_etc1_to_bc7_m6_table[base_color_r + inten_table * 32] + (selector_range_table * NUM_ETC1_TO_BC7_M6_SELECTOR_MAPPINGS); - const uint32_t* pTable_g = g_etc1_to_bc7_m6_table[base_color_g + inten_table * 32] + (selector_range_table * NUM_ETC1_TO_BC7_M6_SELECTOR_MAPPINGS); - const uint32_t* pTable_b = g_etc1_to_bc7_m6_table[base_color_b + inten_table * 32] + (selector_range_table * NUM_ETC1_TO_BC7_M6_SELECTOR_MAPPINGS); - -#if 1 - assert(NUM_ETC1_TO_BC7_M6_SELECTOR_MAPPINGS == 48); - - uint32_t best_err0 = UINT_MAX, best_err1 = UINT_MAX; - -#define DO_ITER2(idx) \ - { \ - uint32_t v0 = ((pTable_r[(idx)+0] + pTable_g[(idx)+0] + pTable_b[(idx)+0]) << 14) | ((idx) + 0); if (v0 < best_err0) best_err0 = v0; \ - uint32_t v1 = ((pTable_r[(idx)+1] + pTable_g[(idx)+1] + pTable_b[(idx)+1]) << 14) | ((idx) + 1); if (v1 < best_err1) best_err1 = v1; \ - } -#define DO_ITER4(idx) DO_ITER2(idx); DO_ITER2((idx) + 2); -#define DO_ITER8(idx) DO_ITER4(idx); DO_ITER4((idx) + 4); -#define DO_ITER16(idx) DO_ITER8(idx); DO_ITER8((idx) + 8); - - DO_ITER16(0); - DO_ITER16(16); - DO_ITER16(32); -#undef DO_ITER2 -#undef DO_ITER4 -#undef DO_ITER8 -#undef DO_ITER16 - - uint32_t best_err = basisu::minimum(best_err0, best_err1); - uint32_t best_mapping = best_err & 0xFF; - //best_err >>= 14; -#else - uint32_t best_err = UINT_MAX; - uint32_t best_mapping = 0; - assert((NUM_ETC1_TO_BC7_M6_SELECTOR_MAPPINGS % 2) == 0); - for (uint32_t m = 0; m < NUM_ETC1_TO_BC7_M6_SELECTOR_MAPPINGS; m += 2) - { -#define DO_ITER(idx) { uint32_t total_err = (pTable_r[idx] + pTable_g[idx] + pTable_b[idx]) & 0x3FFFF; if (total_err < best_err) { best_err = total_err; best_mapping = idx; } } - DO_ITER(m); - DO_ITER(m + 1); -#undef DO_ITER - } -#endif - - pDst_block->m_lo.m_mode = 64; - - pDst_block->m_lo.m_a0 = 127; - pDst_block->m_lo.m_a1 = 127; - - uint64_t v = 0; - const uint8_t* pSelectors_xlat; - - if (g_etc1_to_bc7_selector_mappings[best_mapping][pSelector->get_selector(0, 0)] & 8) - { - pDst_block->m_lo.m_r1 = (pTable_r[best_mapping] >> 18) & 0x7F; - pDst_block->m_lo.m_g1 = (pTable_g[best_mapping] >> 18) & 0x7F; - pDst_block->m_lo.m_b1 = (pTable_b[best_mapping] >> 18) & 0x7F; - - pDst_block->m_lo.m_r0 = (pTable_r[best_mapping] >> 25) & 0x7F; - pDst_block->m_lo.m_g0 = (pTable_g[best_mapping] >> 25) & 0x7F; - pDst_block->m_lo.m_b0 = (pTable_b[best_mapping] >> 25) & 0x7F; - - pDst_block->m_lo.m_p0 = 1; - pDst_block->m_hi.m_p1 = 0; - - v = 0; - pSelectors_xlat = &g_etc1_to_bc7_selector_mappings_inv[best_mapping][0]; - } - else - { - pDst_block->m_lo.m_r0 = (pTable_r[best_mapping] >> 18) & 0x7F; - pDst_block->m_lo.m_g0 = (pTable_g[best_mapping] >> 18) & 0x7F; - pDst_block->m_lo.m_b0 = (pTable_b[best_mapping] >> 18) & 0x7F; - - pDst_block->m_lo.m_r1 = (pTable_r[best_mapping] >> 25) & 0x7F; - pDst_block->m_lo.m_g1 = (pTable_g[best_mapping] >> 25) & 0x7F; - pDst_block->m_lo.m_b1 = (pTable_b[best_mapping] >> 25) & 0x7F; - - pDst_block->m_lo.m_p0 = 0; - pDst_block->m_hi.m_p1 = 1; - - v = 1; - pSelectors_xlat = &g_etc1_to_bc7_selector_mappings[best_mapping][0]; - } - - uint64_t v1 = 0, v2 = 0, v3 = 0; - -#define DO_X(x, s0, s1, s2, s3) { \ - v |= ((uint64_t)pSelectors_xlat[(pSelector->m_selectors[0] >> ((x) * 2)) & 3] << (s0)); \ - v1 |= ((uint64_t)pSelectors_xlat[(pSelector->m_selectors[1] >> ((x) * 2)) & 3] << (s1)); \ - v2 |= ((uint64_t)pSelectors_xlat[(pSelector->m_selectors[2] >> ((x) * 2)) & 3] << (s2)); \ - v3 |= ((uint64_t)pSelectors_xlat[(pSelector->m_selectors[3] >> ((x) * 2)) & 3] << (s3)); } - - // 1 4 8 12 - // 16 20 24 28 - // 32 36 40 44 - // 48 52 56 60 - - DO_X(0, 1, 16, 32, 48); - DO_X(1, 4, 20, 36, 52); - DO_X(2, 8, 24, 40, 56); - DO_X(3, 12, 28, 44, 60); -#undef DO_X - - pDst_block->m_hi_bits = v | v1 | v2 | v3; -#endif - - } -#endif // BASISD_SUPPORT_BC7_MODE6_OPAQUE_ONLY - #if BASISD_SUPPORT_BC7_MODE5 static dxt_selector_range g_etc1_to_bc7_m5_selector_ranges[] = { @@ -4425,9 +4149,11 @@ namespace basist { bc7_mode_5* pDst_block = static_cast(pDst); + // First ensure the block is cleared to all 0's static_cast(pDst)[0] = 0; static_cast(pDst)[1] = 0; + // Set alpha to 255 pDst_block->m_lo.m_mode = 1 << 5; pDst_block->m_lo.m_a0 = 255; pDst_block->m_lo.m_a1_0 = 63; @@ -4690,7 +4416,11 @@ namespace basist set_block_bits((uint8_t*)pDst, output_bits, 31, 97); } #endif // BASISD_SUPPORT_BC7_MODE5 - + +#if BASISD_SUPPORT_ETC2_EAC_A8 || BASISD_SUPPORT_UASTC + static const uint8_t g_etc2_eac_a8_sel4[6] = { 0x92, 0x49, 0x24, 0x92, 0x49, 0x24 }; +#endif + #if BASISD_SUPPORT_ETC2_EAC_A8 static void convert_etc1s_to_etc2_eac_a8(eac_block* pDst_block, const endpoint* pEndpoints, const selector* pSelector) { @@ -4712,8 +4442,7 @@ namespace basist pDst_block->m_multiplier = 1; // selectors are all 4's - static const uint8_t s_etc2_eac_a8_sel4[6] = { 0x92, 0x49, 0x24, 0x92, 0x49, 0x24 }; - memcpy(pDst_block->m_selectors, s_etc2_eac_a8_sel4, sizeof(s_etc2_eac_a8_sel4)); + memcpy(pDst_block->m_selectors, g_etc2_eac_a8_sel4, sizeof(g_etc2_eac_a8_sel4)); return; } @@ -5325,31 +5054,30 @@ namespace basist #endif -#if BASISD_SUPPORT_ASTC - struct astc_block_params - { - // 2 groups of 5, but only a max of 8 are used (RRGGBBAA00) - uint8_t m_endpoints[10]; - uint8_t m_weights[32]; - }; - +#if BASISD_SUPPORT_UASTC || BASISD_SUPPORT_ASTC // Table encodes 5 trits to 8 output bits. 3^5 entries. // Inverse of the trit bit manipulation process in https://www.khronos.org/registry/DataFormat/specs/1.2/dataformat.1.2.html#astc-integer-sequence-encoding - static const uint8_t g_astc_trit_encode[243] = { 0, 1, 2, 4, 5, 6, 8, 9, 10, 16, 17, 18, 20, 21, 22, 24, 25, 26, 3, 7, 11, 19, 23, 27, 12, 13, 14, 32, 33, 34, 36, 37, 38, 40, 41, 42, 48, 49, 50, 52, 53, 54, 56, 57, 58, 35, 39, - 43, 51, 55, 59, 44, 45, 46, 64, 65, 66, 68, 69, 70, 72, 73, 74, 80, 81, 82, 84, 85, 86, 88, 89, 90, 67, 71, 75, 83, 87, 91, 76, 77, 78, 128, 129, 130, 132, 133, 134, 136, 137, 138, 144, 145, 146, 148, 149, 150, 152, 153, 154, - 131, 135, 139, 147, 151, 155, 140, 141, 142, 160, 161, 162, 164, 165, 166, 168, 169, 170, 176, 177, 178, 180, 181, 182, 184, 185, 186, 163, 167, 171, 179, 183, 187, 172, 173, 174, 192, 193, 194, 196, 197, 198, 200, 201, 202, - 208, 209, 210, 212, 213, 214, 216, 217, 218, 195, 199, 203, 211, 215, 219, 204, 205, 206, 96, 97, 98, 100, 101, 102, 104, 105, 106, 112, 113, 114, 116, 117, 118, 120, 121, 122, 99, 103, 107, 115, 119, 123, 108, 109, 110, 224, - 225, 226, 228, 229, 230, 232, 233, 234, 240, 241, 242, 244, 245, 246, 248, 249, 250, 227, 231, 235, 243, 247, 251, 236, 237, 238, 28, 29, 30, 60, 61, 62, 92, 93, 94, 156, 157, 158, 188, 189, 190, 220, 221, 222, 31, 63, 95, 159, + static const uint8_t g_astc_trit_encode[243] = { 0, 1, 2, 4, 5, 6, 8, 9, 10, 16, 17, 18, 20, 21, 22, 24, 25, 26, 3, 7, 11, 19, 23, 27, 12, 13, 14, 32, 33, 34, 36, 37, 38, 40, 41, 42, 48, 49, 50, 52, 53, 54, 56, 57, 58, 35, 39, + 43, 51, 55, 59, 44, 45, 46, 64, 65, 66, 68, 69, 70, 72, 73, 74, 80, 81, 82, 84, 85, 86, 88, 89, 90, 67, 71, 75, 83, 87, 91, 76, 77, 78, 128, 129, 130, 132, 133, 134, 136, 137, 138, 144, 145, 146, 148, 149, 150, 152, 153, 154, + 131, 135, 139, 147, 151, 155, 140, 141, 142, 160, 161, 162, 164, 165, 166, 168, 169, 170, 176, 177, 178, 180, 181, 182, 184, 185, 186, 163, 167, 171, 179, 183, 187, 172, 173, 174, 192, 193, 194, 196, 197, 198, 200, 201, 202, + 208, 209, 210, 212, 213, 214, 216, 217, 218, 195, 199, 203, 211, 215, 219, 204, 205, 206, 96, 97, 98, 100, 101, 102, 104, 105, 106, 112, 113, 114, 116, 117, 118, 120, 121, 122, 99, 103, 107, 115, 119, 123, 108, 109, 110, 224, + 225, 226, 228, 229, 230, 232, 233, 234, 240, 241, 242, 244, 245, 246, 248, 249, 250, 227, 231, 235, 243, 247, 251, 236, 237, 238, 28, 29, 30, 60, 61, 62, 92, 93, 94, 156, 157, 158, 188, 189, 190, 220, 221, 222, 31, 63, 95, 159, 191, 223, 124, 125, 126 }; + // Extracts bits [low,high] + static inline uint32_t astc_extract_bits(uint32_t bits, int low, int high) + { + return (bits >> low) & ((1 << (high - low + 1)) - 1); + } + // Writes bits to output in an endian safe way - static inline void astc_set_bits(uint32_t *pOutput, int &bit_pos, uint32_t value, int total_bits) + static inline void astc_set_bits(uint32_t* pOutput, int& bit_pos, uint32_t value, uint32_t total_bits) { uint8_t* pBytes = reinterpret_cast(pOutput); - + while (total_bits) { - const uint32_t bits_to_write = std::min(total_bits, 8 - (bit_pos & 7)); + const uint32_t bits_to_write = std::min(total_bits, 8 - (bit_pos & 7)); pBytes[bit_pos >> 3] |= static_cast(value << (bit_pos & 7)); @@ -5359,14 +5087,8 @@ namespace basist } } - // Extracts bits [low,high] - static inline uint32_t astc_extract_bits(uint32_t bits, int low, int high) - { - return (bits >> low) & ((1 << (high - low + 1)) - 1); - } - // Encodes 5 values to output, usable for any range that uses trits and bits - static void astc_encode_trits(uint32_t *pOutput, const uint8_t *pValues, int& bit_pos, int n) + static void astc_encode_trits(uint32_t* pOutput, const uint8_t* pValues, int& bit_pos, int n) { // First extract the trits and the bits from the 5 input values int trits = 0, bits[5]; @@ -5374,9 +5096,9 @@ namespace basist for (int i = 0; i < 5; i++) { static const int s_muls[5] = { 1, 3, 9, 27, 81 }; - + const int t = pValues[i] >> n; - + trits += t * s_muls[i]; bits[i] = pValues[i] & bit_mask; } @@ -5386,14 +5108,23 @@ namespace basist assert(trits < 243); const int T = g_astc_trit_encode[trits]; - + // Now interleave the 8 encoded trit bits with the bits to form the encoded output. See table 94. astc_set_bits(pOutput, bit_pos, bits[0] | (astc_extract_bits(T, 0, 1) << n) | (bits[1] << (2 + n)), n * 2 + 2); - astc_set_bits(pOutput, bit_pos, astc_extract_bits(T, 2, 3) | (bits[2] << 2) | (astc_extract_bits(T, 4, 4) << (2 + n)) | (bits[3] << (3 + n)) | (astc_extract_bits(T, 5, 6) << (3 + n * 2)) | + astc_set_bits(pOutput, bit_pos, astc_extract_bits(T, 2, 3) | (bits[2] << 2) | (astc_extract_bits(T, 4, 4) << (2 + n)) | (bits[3] << (3 + n)) | (astc_extract_bits(T, 5, 6) << (3 + n * 2)) | (bits[4] << (5 + n * 2)) | (astc_extract_bits(T, 7, 7) << (5 + n * 3)), n * 3 + 6); } +#endif // #if BASISD_SUPPORT_UASTC || BASISD_SUPPORT_ASTC +#if BASISD_SUPPORT_ASTC + struct astc_block_params + { + // 2 groups of 5, but only a max of 8 are used (RRGGBBAA00) + uint8_t m_endpoints[10]; + uint8_t m_weights[32]; + }; + // Packs a single format ASTC block using Color Endpoint Mode 12 (LDR RGBA direct), endpoint BISE range 13, 2-bit weights (range 2). // We're always going to output blocks containing alpha, even if the input doesn't have alpha, for simplicity. // Each block always has 4x4 weights, uses range 13 BISE encoding on the endpoints (0-47), and each weight ranges from 0-3. This encoding should be roughly equal in quality vs. BC1 for color. @@ -6255,10 +5986,13 @@ namespace basist static const etc1s_to_atc_solution g_etc1s_to_pvrtc2_45[32 * 8 * NUM_ETC1S_TO_ATC_SELECTOR_MAPPINGS * NUM_ETC1S_TO_ATC_SELECTOR_RANGES] = { #include "basisu_transcoder_tables_pvrtc2_45.inc" }; - + +#if 0 static const etc1s_to_atc_solution g_etc1s_to_pvrtc2_alpha_33[32 * 8 * NUM_ETC1S_TO_ATC_SELECTOR_MAPPINGS * NUM_ETC1S_TO_ATC_SELECTOR_RANGES] = { #include "basisu_transcoder_tables_pvrtc2_alpha_33.inc" }; +#endif + #endif static const etc1s_to_atc_solution g_etc1s_to_atc_55[32 * 8 * NUM_ETC1S_TO_ATC_SELECTOR_MAPPINGS * NUM_ETC1S_TO_ATC_SELECTOR_RANGES] = { @@ -7167,10 +6901,7 @@ namespace basist } typedef struct { float c[4]; } vec4F; - - static inline int32_t clampi(int32_t value, int32_t low, int32_t high) { if (value < low) value = low; else if (value > high) value = high; return value; } - static inline float clampf(float value, float low, float high) { if (value < low) value = low; else if (value > high) value = high; return value; } - static inline float saturate(float value) { return clampf(value, 0, 1.0f); } + static inline vec4F* vec4F_set_scalar(vec4F* pV, float x) { pV->c[0] = x; pV->c[1] = x; pV->c[2] = x; pV->c[3] = x; return pV; } static inline vec4F* vec4F_set(vec4F* pV, float x, float y, float z, float w) { pV->c[0] = x; pV->c[1] = y; pV->c[2] = z; pV->c[3] = w; return pV; } static inline vec4F* vec4F_saturate_in_place(vec4F* pV) { pV->c[0] = saturate(pV->c[0]); pV->c[1] = saturate(pV->c[1]); pV->c[2] = saturate(pV->c[2]); pV->c[3] = saturate(pV->c[3]); return pV; } @@ -7188,7 +6919,7 @@ namespace basist } static inline int sq(int x) { return x * x; } - + // PVRTC2 is a slightly borked format for alpha: In Non-Interpolated mode, the way AlphaB8 is exanded from 4 to 8 bits means it can never be 0. // This is actually very bad, because on 100% transparent blocks which have non-trivial color pixels, part of the color channel will leak into alpha! // And there's nothing straightforward we can do because using the other modes is too expensive/complex. I can see why Apple didn't adopt it. @@ -7461,7 +7192,7 @@ namespace basist } vec4F_normalize_in_place(&axis); - + if (vec4F_dot(&axis, &axis) < .5f) vec4F_set_scalar(&axis, .5f); @@ -7488,7 +7219,15 @@ namespace basist minColor = vec4F_saturate(&c0); maxColor = vec4F_saturate(&c1); if (minColor.c[3] > maxColor.c[3]) - std::swap(minColor, maxColor); + { + // VS 2019 release Code Generator issue + //std::swap(minColor, maxColor); + + float a = minColor.c[0], b = minColor.c[1], c = minColor.c[2], d = minColor.c[3]; + minColor.c[0] = maxColor.c[0]; minColor.c[1] = maxColor.c[1]; minColor.c[2] = maxColor.c[2]; minColor.c[3] = maxColor.c[3]; + minColor.c[0] = maxColor.c[0]; minColor.c[1] = maxColor.c[1]; minColor.c[2] = maxColor.c[2]; minColor.c[3] = maxColor.c[3]; + maxColor.c[0] = a; maxColor.c[1] = b; maxColor.c[2] = c; maxColor.c[3] = d; + } } else { @@ -7768,13 +7507,13 @@ namespace basist } #endif // BASISD_SUPPORT_PVRTC2 - basisu_lowlevel_transcoder::basisu_lowlevel_transcoder(const etc1_global_selector_codebook* pGlobal_sel_codebook) : + basisu_lowlevel_etc1s_transcoder::basisu_lowlevel_etc1s_transcoder(const etc1_global_selector_codebook* pGlobal_sel_codebook) : m_pGlobal_sel_codebook(pGlobal_sel_codebook), m_selector_history_buf_size(0) { } - bool basisu_lowlevel_transcoder::decode_palettes( + bool basisu_lowlevel_etc1s_transcoder::decode_palettes( uint32_t num_endpoints, const uint8_t* pEndpoints_data, uint32_t endpoints_data_size, uint32_t num_selectors, const uint8_t* pSelectors_data, uint32_t selectors_data_size) { @@ -7784,37 +7523,37 @@ namespace basist if (!sym_codec.init(pEndpoints_data, endpoints_data_size)) { - BASISU_DEVEL_ERROR("basisu_lowlevel_transcoder::decode_palettes: fail 0\n"); + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::decode_palettes: fail 0\n"); return false; } if (!sym_codec.read_huffman_table(color5_delta_model0)) { - BASISU_DEVEL_ERROR("basisu_lowlevel_transcoder::decode_palettes: fail 1\n"); + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::decode_palettes: fail 1\n"); return false; } if (!sym_codec.read_huffman_table(color5_delta_model1)) { - BASISU_DEVEL_ERROR("basisu_lowlevel_transcoder::decode_palettes: fail 1a\n"); + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::decode_palettes: fail 1a\n"); return false; } if (!sym_codec.read_huffman_table(color5_delta_model2)) { - BASISU_DEVEL_ERROR("basisu_lowlevel_transcoder::decode_palettes: fail 2a\n"); + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::decode_palettes: fail 2a\n"); return false; } if (!sym_codec.read_huffman_table(inten_delta_model)) { - BASISU_DEVEL_ERROR("basisu_lowlevel_transcoder::decode_palettes: fail 2b\n"); + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::decode_palettes: fail 2b\n"); return false; } if (!color5_delta_model0.is_valid() || !color5_delta_model1.is_valid() || !color5_delta_model2.is_valid() || !inten_delta_model.is_valid()) { - BASISU_DEVEL_ERROR("basisu_lowlevel_transcoder::decode_palettes: fail 2b\n"); + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::decode_palettes: fail 2b\n"); return false; } @@ -7861,7 +7600,7 @@ namespace basist if (!sym_codec.init(pSelectors_data, selectors_data_size)) { - BASISU_DEVEL_ERROR("basisu_lowlevel_transcoder::decode_palettes: fail 5\n"); + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::decode_palettes: fail 5\n"); return false; } @@ -7880,12 +7619,12 @@ namespace basist { if (!sym_codec.read_huffman_table(mod_model)) { - BASISU_DEVEL_ERROR("basisu_lowlevel_transcoder::decode_palettes: fail 6\n"); + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::decode_palettes: fail 6\n"); return false; } if (!mod_model.is_valid()) { - BASISU_DEVEL_ERROR("basisu_lowlevel_transcoder::decode_palettes: fail 6a\n"); + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::decode_palettes: fail 6a\n"); return false; } } @@ -7902,7 +7641,7 @@ namespace basist if (pal_index >= m_pGlobal_sel_codebook->size()) { - BASISU_DEVEL_ERROR("basisu_lowlevel_transcoder::decode_palettes: fail 7z\n"); + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::decode_palettes: fail 7z\n"); return false; } @@ -7928,12 +7667,12 @@ namespace basist basist::huffman_decoding_table uses_global_cb_bitflags_model; if (!sym_codec.read_huffman_table(uses_global_cb_bitflags_model)) { - BASISU_DEVEL_ERROR("basisu_lowlevel_transcoder::decode_palettes: fail 7\n"); + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::decode_palettes: fail 7\n"); return false; } if (!uses_global_cb_bitflags_model.is_valid()) { - BASISU_DEVEL_ERROR("basisu_lowlevel_transcoder::decode_palettes: fail 7a\n"); + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::decode_palettes: fail 7a\n"); return false; } @@ -7942,12 +7681,12 @@ namespace basist { if (!sym_codec.read_huffman_table(global_mod_indices_model)) { - BASISU_DEVEL_ERROR("basisu_lowlevel_transcoder::decode_palettes: fail 8\n"); + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::decode_palettes: fail 8\n"); return false; } if (!global_mod_indices_model.is_valid()) { - BASISU_DEVEL_ERROR("basisu_lowlevel_transcoder::decode_palettes: fail 8a\n"); + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::decode_palettes: fail 8a\n"); return false; } } @@ -7975,7 +7714,7 @@ namespace basist if (pal_index >= m_pGlobal_sel_codebook->size()) { - BASISU_DEVEL_ERROR("basisu_lowlevel_transcoder::decode_palettes: fail 8b\n"); + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::decode_palettes: fail 8b\n"); return false; } @@ -8022,13 +7761,13 @@ namespace basist { if (!sym_codec.read_huffman_table(delta_selector_pal_model)) { - BASISU_DEVEL_ERROR("basisu_lowlevel_transcoder::decode_palettes: fail 10\n"); + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::decode_palettes: fail 10\n"); return false; } if ((num_selectors > 1) && (!delta_selector_pal_model.is_valid())) { - BASISU_DEVEL_ERROR("basisu_lowlevel_transcoder::decode_palettes: fail 10a\n"); + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::decode_palettes: fail 10a\n"); return false; } @@ -8071,60 +7810,60 @@ namespace basist return true; } - bool basisu_lowlevel_transcoder::decode_tables(const uint8_t* pTable_data, uint32_t table_data_size) + bool basisu_lowlevel_etc1s_transcoder::decode_tables(const uint8_t* pTable_data, uint32_t table_data_size) { basist::bitwise_decoder sym_codec; if (!sym_codec.init(pTable_data, table_data_size)) { - BASISU_DEVEL_ERROR("basisu_lowlevel_transcoder::decode_tables: fail 0\n"); + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::decode_tables: fail 0\n"); return false; } if (!sym_codec.read_huffman_table(m_endpoint_pred_model)) { - BASISU_DEVEL_ERROR("basisu_lowlevel_transcoder::decode_tables: fail 1\n"); + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::decode_tables: fail 1\n"); return false; } if (m_endpoint_pred_model.get_code_sizes().size() == 0) { - BASISU_DEVEL_ERROR("basisu_lowlevel_transcoder::decode_tables: fail 1a\n"); + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::decode_tables: fail 1a\n"); return false; } if (!sym_codec.read_huffman_table(m_delta_endpoint_model)) { - BASISU_DEVEL_ERROR("basisu_lowlevel_transcoder::decode_tables: fail 2\n"); + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::decode_tables: fail 2\n"); return false; } if (m_delta_endpoint_model.get_code_sizes().size() == 0) { - BASISU_DEVEL_ERROR("basisu_lowlevel_transcoder::decode_tables: fail 2a\n"); + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::decode_tables: fail 2a\n"); return false; } if (!sym_codec.read_huffman_table(m_selector_model)) { - BASISU_DEVEL_ERROR("basisu_lowlevel_transcoder::decode_tables: fail 3\n"); + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::decode_tables: fail 3\n"); return false; } if (m_selector_model.get_code_sizes().size() == 0) { - BASISU_DEVEL_ERROR("basisu_lowlevel_transcoder::decode_tables: fail 3a\n"); + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::decode_tables: fail 3a\n"); return false; } if (!sym_codec.read_huffman_table(m_selector_history_buf_rle_model)) { - BASISU_DEVEL_ERROR("basisu_lowlevel_transcoder::decode_tables: fail 4\n"); + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::decode_tables: fail 4\n"); return false; } if (m_selector_history_buf_rle_model.get_code_sizes().size() == 0) { - BASISU_DEVEL_ERROR("basisu_lowlevel_transcoder::decode_tables: fail 4a\n"); + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::decode_tables: fail 4a\n"); return false; } @@ -8135,12 +7874,12 @@ namespace basist return true; } - bool basisu_lowlevel_transcoder::transcode_slice(void* pDst_blocks, uint32_t num_blocks_x, uint32_t num_blocks_y, const uint8_t* pImage_data, uint32_t image_data_size, block_format fmt, + bool basisu_lowlevel_etc1s_transcoder::transcode_slice(void* pDst_blocks, uint32_t num_blocks_x, uint32_t num_blocks_y, const uint8_t* pImage_data, uint32_t image_data_size, block_format fmt, uint32_t output_block_or_pixel_stride_in_bytes, bool bc1_allow_threecolor_blocks, const basis_file_header& header, const basis_slice_desc& slice_desc, uint32_t output_row_pitch_in_blocks_or_pixels, basisu_transcoder_state* pState, bool transcode_alpha, void *pAlpha_blocks, uint32_t output_rows_in_pixels) { - (void)transcode_alpha; - (void)pAlpha_blocks; + BASISU_NOTE_UNUSED(transcode_alpha); + BASISU_NOTE_UNUSED(pAlpha_blocks); if (!pState) pState = &m_def_state; @@ -8171,12 +7910,12 @@ namespace basist if (is_video) { // TODO: Add check to make sure the caller hasn't tried skipping past p-frames - const bool alpha_flag = (slice_desc.m_flags & cSliceDescFlagsIsAlphaData) != 0; + const bool alpha_flag = (slice_desc.m_flags & cSliceDescFlagsHasAlpha) != 0; const uint32_t level_index = slice_desc.m_level_index; if (level_index >= basisu_transcoder_state::cMaxPrevFrameLevels) { - BASISU_DEVEL_ERROR("basisu_lowlevel_transcoder::transcode_slice: unsupported level_index\n"); + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::transcode_slice: unsupported level_index\n"); return false; } @@ -8189,7 +7928,7 @@ namespace basist if (!sym_codec.init(pImage_data, image_data_size)) { - BASISU_DEVEL_ERROR("basisu_lowlevel_transcoder::transcode_slice: sym_codec.init failed\n"); + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::transcode_slice: sym_codec.init failed\n"); return false; } @@ -8212,7 +7951,7 @@ namespace basist pPVRTC_work_mem = malloc(num_blocks_x * num_blocks_y * (sizeof(decoder_etc_block) + sizeof(uint32_t))); if (!pPVRTC_work_mem) { - BASISU_DEVEL_ERROR("basisu_lowlevel_transcoder::transcode_slice: malloc failed\n"); + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::transcode_slice: malloc failed\n"); return false; } pPVRTC_endpoints = (uint32_t*) & ((decoder_etc_block*)pPVRTC_work_mem)[num_blocks_x * num_blocks_y]; @@ -8279,7 +8018,7 @@ namespace basist // Left if (!block_x) { - BASISU_DEVEL_ERROR("basisu_lowlevel_transcoder::transcode_slice: invalid datastream (0)\n"); + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::transcode_slice: invalid datastream (0)\n"); if (pPVRTC_work_mem) free(pPVRTC_work_mem); return false; @@ -8292,7 +8031,7 @@ namespace basist // Upper if (!block_y) { - BASISU_DEVEL_ERROR("basisu_lowlevel_transcoder::transcode_slice: invalid datastream (1)\n"); + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::transcode_slice: invalid datastream (1)\n"); if (pPVRTC_work_mem) free(pPVRTC_work_mem); return false; @@ -8314,7 +8053,7 @@ namespace basist // Upper left if ((!block_x) || (!block_y)) { - BASISU_DEVEL_ERROR("basisu_lowlevel_transcoder::transcode_slice: invalid datastream (2)\n"); + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::transcode_slice: invalid datastream (2)\n"); if (pPVRTC_work_mem) free(pPVRTC_work_mem); return false; @@ -8363,7 +8102,7 @@ namespace basist if (cur_selector_rle_count > total_blocks) { // The file is corrupted or we've got a bug. - BASISU_DEVEL_ERROR("basisu_lowlevel_transcoder::transcode_slice: invalid datastream (3)\n"); + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::transcode_slice: invalid datastream (3)\n"); if (pPVRTC_work_mem) free(pPVRTC_work_mem); return false; @@ -8384,7 +8123,7 @@ namespace basist if (history_buf_index >= (int)selector_history_buf.size()) { // The file is corrupted or we've got a bug. - BASISU_DEVEL_ERROR("basisu_lowlevel_transcoder::transcode_slice: invalid datastream (4)\n"); + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::transcode_slice: invalid datastream (4)\n"); if (pPVRTC_work_mem) free(pPVRTC_work_mem); return false; @@ -8407,7 +8146,7 @@ namespace basist if ((endpoint_index >= m_endpoints.size()) || (selector_index >= m_selectors.size())) { // The file is corrupted or we've got a bug. - BASISU_DEVEL_ERROR("basisu_lowlevel_transcoder::transcode_slice: invalid datastream (5)\n"); + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::transcode_slice: invalid datastream (5)\n"); if (pPVRTC_work_mem) free(pPVRTC_work_mem); return false; @@ -8559,16 +8298,7 @@ namespace basist break; } - case block_format::cBC7_M6_OPAQUE_ONLY: - { -#if BASISD_SUPPORT_BC7_MODE6_OPAQUE_ONLY - void* pDst_block = static_cast(pDst_blocks) + (block_x + block_y * output_row_pitch_in_blocks_or_pixels) * output_block_or_pixel_stride_in_bytes; - convert_etc1s_to_bc7_m6(static_cast(pDst_block), pEndpoints, pSelector); -#else - assert(0); -#endif - break; - } + case block_format::cBC7: // for more consistency with UASTC case block_format::cBC7_M5_COLOR: { #if BASISD_SUPPORT_BC7_MODE5 @@ -8648,7 +8378,7 @@ namespace basist assert(transcode_alpha); void* pDst_block = static_cast(pDst_blocks) + (block_x + block_y * output_row_pitch_in_blocks_or_pixels) * output_block_or_pixel_stride_in_bytes; - + convert_etc1s_to_pvrtc2_rgba(pDst_block, pEndpoints, pSelector, &m_endpoints[0], &m_selectors[0]); #endif break; @@ -8665,8 +8395,8 @@ namespace basist assert(sizeof(uint32_t) == output_block_or_pixel_stride_in_bytes); uint8_t* pDst_pixels = static_cast(pDst_blocks) + (block_x * 4 + block_y * 4 * output_row_pitch_in_blocks_or_pixels) * sizeof(uint32_t); - const uint32_t max_x = basisu::minimum(4, output_row_pitch_in_blocks_or_pixels - block_x * 4); - const uint32_t max_y = basisu::minimum(4, output_rows_in_pixels - block_y * 4); + const uint32_t max_x = basisu::minimum(4, (int)output_row_pitch_in_blocks_or_pixels - (int)block_x * 4); + const uint32_t max_y = basisu::minimum(4, (int)output_rows_in_pixels - (int)block_y * 4); int colors[4]; decoder_etc_block::get_block_colors5_g(colors, pEndpoints->m_color5, pEndpoints->m_inten5); @@ -8705,8 +8435,8 @@ namespace basist assert(sizeof(uint32_t) == output_block_or_pixel_stride_in_bytes); uint8_t* pDst_pixels = static_cast(pDst_blocks) + (block_x * 4 + block_y * 4 * output_row_pitch_in_blocks_or_pixels) * sizeof(uint32_t); - const uint32_t max_x = basisu::minimum(4, output_row_pitch_in_blocks_or_pixels - block_x * 4); - const uint32_t max_y = basisu::minimum(4, output_rows_in_pixels - block_y * 4); + const uint32_t max_x = basisu::minimum(4, (int)output_row_pitch_in_blocks_or_pixels - (int)block_x * 4); + const uint32_t max_y = basisu::minimum(4, (int)output_rows_in_pixels - (int)block_y * 4); color32 colors[4]; decoder_etc_block::get_block_colors5(colors, pEndpoints->m_color5, pEndpoints->m_inten5); @@ -8734,8 +8464,8 @@ namespace basist assert(sizeof(uint32_t) == output_block_or_pixel_stride_in_bytes); uint8_t* pDst_pixels = static_cast(pDst_blocks) + (block_x * 4 + block_y * 4 * output_row_pitch_in_blocks_or_pixels) * sizeof(uint32_t); - const uint32_t max_x = basisu::minimum(4, output_row_pitch_in_blocks_or_pixels - block_x * 4); - const uint32_t max_y = basisu::minimum(4, output_rows_in_pixels - block_y * 4); + const uint32_t max_x = basisu::minimum(4, (int)output_row_pitch_in_blocks_or_pixels - (int)block_x * 4); + const uint32_t max_y = basisu::minimum(4, (int)output_rows_in_pixels - (int)block_y * 4); color32 colors[4]; decoder_etc_block::get_block_colors5(colors, pEndpoints->m_color5, pEndpoints->m_inten5); @@ -8765,8 +8495,8 @@ namespace basist assert(sizeof(uint16_t) == output_block_or_pixel_stride_in_bytes); uint8_t* pDst_pixels = static_cast(pDst_blocks) + (block_x * 4 + block_y * 4 * output_row_pitch_in_blocks_or_pixels) * sizeof(uint16_t); - const uint32_t max_x = basisu::minimum(4, output_row_pitch_in_blocks_or_pixels - block_x * 4); - const uint32_t max_y = basisu::minimum(4, output_rows_in_pixels - block_y * 4); + const uint32_t max_x = basisu::minimum(4, (int)output_row_pitch_in_blocks_or_pixels - (int)block_x * 4); + const uint32_t max_y = basisu::minimum(4, (int)output_rows_in_pixels - (int)block_y * 4); color32 colors[4]; decoder_etc_block::get_block_colors5(colors, pEndpoints->m_color5, pEndpoints->m_inten5); @@ -8775,12 +8505,20 @@ namespace basist if (fmt == block_format::cRGB565) { for (uint32_t i = 0; i < 4; i++) - packed_colors[i] = static_cast(((colors[i].r >> 3) << 11) | ((colors[i].g >> 2) << 5) | (colors[i].b >> 3)); + { + packed_colors[i] = static_cast((mul_8(colors[i].r, 31) << 11) | (mul_8(colors[i].g, 63) << 5) | mul_8(colors[i].b, 31)); + if (IS_BIG_ENDIAN) + packed_colors[i] = byteswap_uint16(packed_colors[i]); + } } else { for (uint32_t i = 0; i < 4; i++) - packed_colors[i] = static_cast(((colors[i].b >> 3) << 11) | ((colors[i].g >> 2) << 5) | (colors[i].r >> 3)); + { + packed_colors[i] = static_cast((mul_8(colors[i].b, 31) << 11) | (mul_8(colors[i].g, 63) << 5) | mul_8(colors[i].r, 31)); + if (IS_BIG_ENDIAN) + packed_colors[i] = byteswap_uint16(packed_colors[i]); + } } for (uint32_t y = 0; y < max_y; y++) @@ -8800,15 +8538,17 @@ namespace basist assert(sizeof(uint16_t) == output_block_or_pixel_stride_in_bytes); uint8_t* pDst_pixels = static_cast(pDst_blocks) + (block_x * 4 + block_y * 4 * output_row_pitch_in_blocks_or_pixels) * sizeof(uint16_t); - const uint32_t max_x = basisu::minimum(4, output_row_pitch_in_blocks_or_pixels - block_x * 4); - const uint32_t max_y = basisu::minimum(4, output_rows_in_pixels - block_y * 4); + const uint32_t max_x = basisu::minimum(4, (int)output_row_pitch_in_blocks_or_pixels - (int)block_x * 4); + const uint32_t max_y = basisu::minimum(4, (int)output_rows_in_pixels - (int)block_y * 4); color32 colors[4]; decoder_etc_block::get_block_colors5(colors, pEndpoints->m_color5, pEndpoints->m_inten5); uint16_t packed_colors[4]; for (uint32_t i = 0; i < 4; i++) - packed_colors[i] = static_cast(((colors[i].r >> 4) << 12) | ((colors[i].g >> 4) << 8) | ((colors[i].b >> 4) << 4)); + { + packed_colors[i] = static_cast((mul_8(colors[i].r, 15) << 12) | (mul_8(colors[i].g, 15) << 8) | (mul_8(colors[i].b, 15) << 4)); + } for (uint32_t y = 0; y < max_y; y++) { @@ -8817,7 +8557,14 @@ namespace basist for (uint32_t x = 0; x < max_x; x++) { uint16_t cur = reinterpret_cast(pDst_pixels)[x]; + if (IS_BIG_ENDIAN) + cur = byteswap_uint16(cur); + cur = (cur & 0xF) | packed_colors[(s >> (x * 2)) & 3]; + + if (IS_BIG_ENDIAN) + cur = byteswap_uint16(cur); + reinterpret_cast(pDst_pixels)[x] = cur; } @@ -8831,15 +8578,19 @@ namespace basist assert(sizeof(uint16_t) == output_block_or_pixel_stride_in_bytes); uint8_t* pDst_pixels = static_cast(pDst_blocks) + (block_x * 4 + block_y * 4 * output_row_pitch_in_blocks_or_pixels) * sizeof(uint16_t); - const uint32_t max_x = basisu::minimum(4, output_row_pitch_in_blocks_or_pixels - block_x * 4); - const uint32_t max_y = basisu::minimum(4, output_rows_in_pixels - block_y * 4); + const uint32_t max_x = basisu::minimum(4, (int)output_row_pitch_in_blocks_or_pixels - (int)block_x * 4); + const uint32_t max_y = basisu::minimum(4, (int)output_rows_in_pixels - (int)block_y * 4); color32 colors[4]; decoder_etc_block::get_block_colors5(colors, pEndpoints->m_color5, pEndpoints->m_inten5); uint16_t packed_colors[4]; for (uint32_t i = 0; i < 4; i++) - packed_colors[i] = static_cast(((colors[i].r >> 4) << 12) | ((colors[i].g >> 4) << 8) | ((colors[i].b >> 4) << 4) | 0xF); + { + packed_colors[i] = static_cast((mul_8(colors[i].r, 15) << 12) | (mul_8(colors[i].g, 15) << 8) | (mul_8(colors[i].b, 15) << 4) | 0xF); + if (IS_BIG_ENDIAN) + packed_colors[i] = byteswap_uint16(packed_colors[i]); + } for (uint32_t y = 0; y < max_y; y++) { @@ -8858,22 +8609,28 @@ namespace basist assert(sizeof(uint16_t) == output_block_or_pixel_stride_in_bytes); uint8_t* pDst_pixels = static_cast(pDst_blocks) + (block_x * 4 + block_y * 4 * output_row_pitch_in_blocks_or_pixels) * sizeof(uint16_t); - const uint32_t max_x = basisu::minimum(4, output_row_pitch_in_blocks_or_pixels - block_x * 4); - const uint32_t max_y = basisu::minimum(4, output_rows_in_pixels - block_y * 4); + const uint32_t max_x = basisu::minimum(4, (int)output_row_pitch_in_blocks_or_pixels - (int)block_x * 4); + const uint32_t max_y = basisu::minimum(4, (int)output_rows_in_pixels - (int)block_y * 4); color32 colors[4]; decoder_etc_block::get_block_colors5(colors, pEndpoints->m_color5, pEndpoints->m_inten5); uint16_t packed_colors[4]; for (uint32_t i = 0; i < 4; i++) - packed_colors[i] = colors[i].g >> 4; + { + packed_colors[i] = mul_8(colors[i].g, 15); + if (IS_BIG_ENDIAN) + packed_colors[i] = byteswap_uint16(packed_colors[i]); + } for (uint32_t y = 0; y < max_y; y++) { const uint32_t s = pSelector->m_selectors[y]; for (uint32_t x = 0; x < max_x; x++) + { reinterpret_cast(pDst_pixels)[x] = packed_colors[(s >> (x * 2)) & 3]; + } pDst_pixels += output_row_pitch_in_blocks_or_pixels * sizeof(uint16_t); } @@ -8903,7 +8660,7 @@ namespace basist if (endpoint_pred_repeat_count != 0) { - BASISU_DEVEL_ERROR("basisu_lowlevel_transcoder::transcode_slice: endpoint_pred_repeat_count != 0. The file is corrupted or this is a bug\n"); + BASISU_DEVEL_ERROR("basisu_lowlevel_etc1s_transcoder::transcode_slice: endpoint_pred_repeat_count != 0. The file is corrupted or this is a bug\n"); return false; } @@ -8922,9 +8679,264 @@ namespace basist return true; } + + basisu_lowlevel_uastc_transcoder::basisu_lowlevel_uastc_transcoder() + { + } + bool basisu_lowlevel_uastc_transcoder::transcode_slice(void* pDst_blocks, uint32_t num_blocks_x, uint32_t num_blocks_y, const uint8_t* pImage_data, uint32_t image_data_size, block_format fmt, + uint32_t output_block_or_pixel_stride_in_bytes, bool bc1_allow_threecolor_blocks, const basis_file_header& header, const basis_slice_desc& slice_desc, uint32_t output_row_pitch_in_blocks_or_pixels, + basisu_transcoder_state* pState, uint32_t output_rows_in_pixels, int channel0, int channel1, uint32_t decode_flags) + { + BASISU_NOTE_UNUSED(pState); + BASISU_NOTE_UNUSED(bc1_allow_threecolor_blocks); + +#if BASISD_SUPPORT_UASTC + const uint32_t total_blocks = num_blocks_x * num_blocks_y; + + if (!output_row_pitch_in_blocks_or_pixels) + { + if (basis_block_format_is_uncompressed(fmt)) + output_row_pitch_in_blocks_or_pixels = slice_desc.m_orig_width; + else + { + if (fmt == block_format::cFXT1_RGB) + output_row_pitch_in_blocks_or_pixels = (slice_desc.m_orig_width + 7) / 8; + else + output_row_pitch_in_blocks_or_pixels = num_blocks_x; + } + } + + if (basis_block_format_is_uncompressed(fmt)) + { + if (!output_rows_in_pixels) + output_rows_in_pixels = slice_desc.m_orig_height; + } + + uint32_t total_expected_block_bytes = sizeof(uastc_block) * total_blocks; + if (image_data_size < total_expected_block_bytes) + { + BASISU_DEVEL_ERROR("basisu_lowlevel_uastc_transcoder::transcode_slice: image_data_size < total_expected_block_bytes The file is corrupted or this is a bug.\n"); + return false; + } + + const uastc_block* pSource_block = reinterpret_cast(pImage_data); + + const bool high_quality = (decode_flags & cDecodeFlagsHighQuality) != 0; + const bool from_alpha = ((header.m_flags & cBASISHeaderFlagHasAlphaSlices) != 0) && (decode_flags & cDecodeFlagsTranscodeAlphaDataToOpaqueFormats) != 0; + + bool status = false; + if ((fmt == block_format::cPVRTC1_4_RGB) || (fmt == block_format::cPVRTC1_4_RGBA)) + { + if (fmt == block_format::cPVRTC1_4_RGBA) + transcode_uastc_to_pvrtc1_4_rgba((const uastc_block*)pImage_data, pDst_blocks, num_blocks_x, num_blocks_y, high_quality); + else + transcode_uastc_to_pvrtc1_4_rgb((const uastc_block *)pImage_data, pDst_blocks, num_blocks_x, num_blocks_y, high_quality, from_alpha); + } + else + { + for (uint32_t block_y = 0; block_y < num_blocks_y; ++block_y) + { + void* pDst_block = (uint8_t*)pDst_blocks + block_y * output_row_pitch_in_blocks_or_pixels * output_block_or_pixel_stride_in_bytes; + + for (uint32_t block_x = 0; block_x < num_blocks_x; ++block_x, ++pSource_block, pDst_block = (uint8_t *)pDst_block + output_block_or_pixel_stride_in_bytes) + { + switch (fmt) + { + case block_format::cETC1: + { + if (from_alpha) + status = transcode_uastc_to_etc1(*pSource_block, pDst_block, 3); + else + status = transcode_uastc_to_etc1(*pSource_block, pDst_block); + break; + } + case block_format::cETC2_RGBA: + { + status = transcode_uastc_to_etc2_rgba(*pSource_block, pDst_block); + break; + } + case block_format::cBC1: + { + status = transcode_uastc_to_bc1(*pSource_block, pDst_block, high_quality); + break; + } + case block_format::cBC3: + { + status = transcode_uastc_to_bc3(*pSource_block, pDst_block, high_quality); + break; + } + case block_format::cBC4: + { + if (channel0 < 0) + channel0 = 0; + status = transcode_uastc_to_bc4(*pSource_block, pDst_block, high_quality, channel0); + break; + } + case block_format::cBC5: + { + if (channel0 < 0) + channel0 = 0; + if (channel1 < 0) + channel1 = 3; + status = transcode_uastc_to_bc5(*pSource_block, pDst_block, high_quality, channel0, channel1); + break; + } + case block_format::cBC7: + case block_format::cBC7_M5_COLOR: // for consistently with ETC1S + { + status = transcode_uastc_to_bc7(*pSource_block, pDst_block); + break; + } + case block_format::cASTC_4x4: + { + status = transcode_uastc_to_astc(*pSource_block, pDst_block); + break; + } + case block_format::cETC2_EAC_R11: + { + if (channel0 < 0) + channel0 = 0; + status = transcode_uastc_to_etc2_eac_r11(*pSource_block, pDst_block, high_quality, channel0); + break; + } + case block_format::cETC2_EAC_RG11: + { + if (channel0 < 0) + channel0 = 0; + if (channel1 < 3) + channel1 = 3; + status = transcode_uastc_to_etc2_eac_rg11(*pSource_block, pDst_block, high_quality, channel0, channel1); + break; + } + case block_format::cRGBA32: + { + color32 block_pixels[4][4]; + status = unpack_uastc(*pSource_block, (color32 *)block_pixels, false); + + assert(sizeof(uint32_t) == output_block_or_pixel_stride_in_bytes); + uint8_t* pDst_pixels = static_cast(pDst_blocks) + (block_x * 4 + block_y * 4 * output_row_pitch_in_blocks_or_pixels) * sizeof(uint32_t); + + const uint32_t max_x = basisu::minimum(4, (int)output_row_pitch_in_blocks_or_pixels - (int)block_x * 4); + const uint32_t max_y = basisu::minimum(4, (int)output_rows_in_pixels - (int)block_y * 4); + + for (uint32_t y = 0; y < max_y; y++) + { + for (uint32_t x = 0; x < max_x; x++) + { + const color32& c = block_pixels[y][x]; + + pDst_pixels[0 + 4 * x] = c.r; + pDst_pixels[1 + 4 * x] = c.g; + pDst_pixels[2 + 4 * x] = c.b; + pDst_pixels[3 + 4 * x] = c.a; + } + + pDst_pixels += output_row_pitch_in_blocks_or_pixels * sizeof(uint32_t); + } + + break; + } + case block_format::cRGB565: + case block_format::cBGR565: + { + color32 block_pixels[4][4]; + status = unpack_uastc(*pSource_block, (color32*)block_pixels, false); + + assert(sizeof(uint16_t) == output_block_or_pixel_stride_in_bytes); + uint8_t* pDst_pixels = static_cast(pDst_blocks) + (block_x * 4 + block_y * 4 * output_row_pitch_in_blocks_or_pixels) * sizeof(uint16_t); + + const uint32_t max_x = basisu::minimum(4, (int)output_row_pitch_in_blocks_or_pixels - (int)block_x * 4); + const uint32_t max_y = basisu::minimum(4, (int)output_rows_in_pixels - (int)block_y * 4); + + for (uint32_t y = 0; y < max_y; y++) + { + for (uint32_t x = 0; x < max_x; x++) + { + const color32& c = block_pixels[y][x]; + + const uint16_t packed = (fmt == block_format::cRGB565) ? static_cast((mul_8(c.r, 31) << 11) | (mul_8(c.g, 63) << 5) | mul_8(c.b, 31)) : + static_cast((mul_8(c.b, 31) << 11) | (mul_8(c.g, 63) << 5) | mul_8(c.r, 31)); + + pDst_pixels[x * 2 + 0] = (uint8_t)(packed & 0xFF); + pDst_pixels[x * 2 + 1] = (uint8_t)((packed >> 8) & 0xFF); + } + + pDst_pixels += output_row_pitch_in_blocks_or_pixels * sizeof(uint16_t); + } + + break; + } + case block_format::cRGBA4444: + { + color32 block_pixels[4][4]; + status = unpack_uastc(*pSource_block, (color32*)block_pixels, false); + + assert(sizeof(uint16_t) == output_block_or_pixel_stride_in_bytes); + uint8_t* pDst_pixels = static_cast(pDst_blocks) + (block_x * 4 + block_y * 4 * output_row_pitch_in_blocks_or_pixels) * sizeof(uint16_t); + + const uint32_t max_x = basisu::minimum(4, (int)output_row_pitch_in_blocks_or_pixels - (int)block_x * 4); + const uint32_t max_y = basisu::minimum(4, (int)output_rows_in_pixels - (int)block_y * 4); + + for (uint32_t y = 0; y < max_y; y++) + { + for (uint32_t x = 0; x < max_x; x++) + { + const color32& c = block_pixels[y][x]; + + const uint16_t packed = static_cast((mul_8(c.r, 15) << 12) | (mul_8(c.g, 15) << 8) | (mul_8(c.b, 15) << 4) | mul_8(c.a, 15)); + + pDst_pixels[x * 2 + 0] = (uint8_t)(packed & 0xFF); + pDst_pixels[x * 2 + 1] = (uint8_t)((packed >> 8) & 0xFF); + } + + pDst_pixels += output_row_pitch_in_blocks_or_pixels * sizeof(uint16_t); + } + break; + } + default: + assert(0); + break; + + } + + if (!status) + { + BASISU_DEVEL_ERROR("basisu_lowlevel_uastc_transcoder::transcode_slice: Transcoder failed to unpack a UASTC block - this is a bug, or the data was corrupted\n"); + return false; + } + + } // block_x + + } // block_y + } + + return true; +#else + BASISU_DEVEL_ERROR("basisu_lowlevel_uastc_transcoder::transcode_slice: UASTC is unsupported\n"); + + BASISU_NOTE_UNUSED(decode_flags); + BASISU_NOTE_UNUSED(channel0); + BASISU_NOTE_UNUSED(channel1); + BASISU_NOTE_UNUSED(output_rows_in_pixels); + BASISU_NOTE_UNUSED(output_row_pitch_in_blocks_or_pixels); + BASISU_NOTE_UNUSED(slice_desc); + BASISU_NOTE_UNUSED(header); + BASISU_NOTE_UNUSED(output_block_or_pixel_stride_in_bytes); + BASISU_NOTE_UNUSED(fmt); + BASISU_NOTE_UNUSED(image_data_size); + BASISU_NOTE_UNUSED(pImage_data); + BASISU_NOTE_UNUSED(num_blocks_x); + BASISU_NOTE_UNUSED(num_blocks_y); + BASISU_NOTE_UNUSED(pDst_blocks); + + return false; +#endif + } + basisu_transcoder::basisu_transcoder(const etc1_global_selector_codebook* pGlobal_sel_codebook) : - m_lowlevel_decoder(pGlobal_sel_codebook) + m_lowlevel_etc1s_decoder(pGlobal_sel_codebook), + m_ready_to_transcode(false) { } @@ -9027,22 +9039,33 @@ namespace basist return false; } - if (pHeader->m_flags & cBASISHeaderFlagHasAlphaSlices) + if (pHeader->m_tex_format == (int)basis_tex_format::cETC1S) { - if (pHeader->m_total_slices & 1) + if (pHeader->m_flags & cBASISHeaderFlagHasAlphaSlices) { - BASISU_DEVEL_ERROR("basisu_transcoder::get_total_images: invalid alpha basis file\n"); + if (pHeader->m_total_slices & 1) + { + BASISU_DEVEL_ERROR("basisu_transcoder::get_total_images: invalid alpha .basis file\n"); + return false; + } + } + + // This flag dates back to pre-Basis Universal, when .basis supported full ETC1 too. + if ((pHeader->m_flags & cBASISHeaderFlagETC1S) == 0) + { + BASISU_DEVEL_ERROR("basisu_transcoder::get_total_images: Invalid .basis file (ETC1S check)\n"); return false; } } - - if ((pHeader->m_flags & cBASISHeaderFlagETC1S) == 0) + else { - // We only support ETC1S in basis universal - BASISU_DEVEL_ERROR("basisu_transcoder::get_total_images: invalid basis file (ETC1S flag check)\n"); - return false; + if ((pHeader->m_flags & cBASISHeaderFlagETC1S) != 0) + { + BASISU_DEVEL_ERROR("basisu_transcoder::get_total_images: Invalid .basis file (ETC1S check)\n"); + return false; + } } - + if ((pHeader->m_slice_desc_file_ofs >= data_size) || ((data_size - pHeader->m_slice_desc_file_ofs) < (sizeof(basis_slice_desc) * pHeader->m_total_slices)) ) @@ -9103,6 +9126,19 @@ namespace basist return pHeader->m_total_images; } + basis_tex_format basisu_transcoder::get_tex_format(const void* pData, uint32_t data_size) const + { + if (!validate_header_quick(pData, data_size)) + { + BASISU_DEVEL_ERROR("basisu_transcoder::get_total_images: header validation failed\n"); + return basis_tex_format::cETC1S; + } + + const basis_file_header* pHeader = static_cast(pData); + + return (basis_tex_format)(uint32_t)pHeader->m_tex_format; + } + bool basisu_transcoder::get_image_info(const void* pData, uint32_t data_size, basisu_image_info& image_info, uint32_t image_index) const { if (!validate_header_quick(pData, data_size)) @@ -9145,8 +9181,17 @@ namespace basist image_info.m_image_index = image_index; image_info.m_total_levels = total_levels; - image_info.m_alpha_flag = (pHeader->m_flags & cBASISHeaderFlagHasAlphaSlices) != 0; + + image_info.m_alpha_flag = false; + + // For ETC1S, if anything has alpha all images have alpha. For UASTC, we only report alpha when the image actually has alpha. + if (pHeader->m_tex_format == (int)basis_tex_format::cETC1S) + image_info.m_alpha_flag = (pHeader->m_flags & cBASISHeaderFlagHasAlphaSlices) != 0; + else + image_info.m_alpha_flag = (slice_desc.m_flags & cSliceDescFlagsHasAlpha) != 0; + image_info.m_iframe_flag = (slice_desc.m_flags & cSliceDescFlagsFrameIsIFrame) != 0; + image_info.m_width = slice_desc.m_num_blocks_x * 4; image_info.m_height = slice_desc.m_num_blocks_y * 4; image_info.m_orig_width = slice_desc.m_orig_width; @@ -9264,7 +9309,13 @@ namespace basist image_info.m_image_index = image_index; image_info.m_level_index = level_index; - image_info.m_alpha_flag = (pHeader->m_flags & cBASISHeaderFlagHasAlphaSlices) != 0; + + // For ETC1S, if anything has alpha all images have alpha. For UASTC, we only report alpha when the image actually has alpha. + if (pHeader->m_tex_format == (int)basis_tex_format::cETC1S) + image_info.m_alpha_flag = (pHeader->m_flags & cBASISHeaderFlagHasAlphaSlices) != 0; + else + image_info.m_alpha_flag = (slice_desc.m_flags & cSliceDescFlagsHasAlpha) != 0; + image_info.m_iframe_flag = (slice_desc.m_flags & cSliceDescFlagsFrameIsIFrame) != 0; image_info.m_width = slice_desc.m_num_blocks_x * 4; image_info.m_height = slice_desc.m_num_blocks_y * 4; @@ -9301,7 +9352,10 @@ namespace basist file_info.m_tables_size = pHeader->m_tables_file_size; - file_info.m_etc1s = (pHeader->m_flags & cBASISHeaderFlagETC1S) != 0; + file_info.m_tex_format = static_cast(static_cast(pHeader->m_tex_format)); + + file_info.m_etc1s = (pHeader->m_tex_format == (int)basis_tex_format::cETC1S); + file_info.m_y_flipped = (pHeader->m_flags & cBASISHeaderFlagYFlipped) != 0; file_info.m_has_alpha_slices = (pHeader->m_flags & cBASISHeaderFlagHasAlphaSlices) != 0; @@ -9346,7 +9400,7 @@ namespace basist slice_info.m_image_index = pSlice_descs[i].m_image_index; slice_info.m_level_index = pSlice_descs[i].m_level_index; slice_info.m_unpacked_slice_crc16 = pSlice_descs[i].m_slice_data_crc16; - slice_info.m_alpha_flag = (pSlice_descs[i].m_flags & cSliceDescFlagsIsAlphaData) != 0; + slice_info.m_alpha_flag = (pSlice_descs[i].m_flags & cSliceDescFlagsHasAlpha) != 0; slice_info.m_iframe_flag = (pSlice_descs[i].m_flags & cSliceDescFlagsFrameIsIFrame) != 0; if (pSlice_descs[i].m_image_index >= pHeader->m_total_images) @@ -9366,15 +9420,9 @@ namespace basist return true; } - - bool basisu_transcoder::start_transcoding(const void* pData, uint32_t data_size) const + + bool basisu_transcoder::start_transcoding(const void* pData, uint32_t data_size) { - if (m_lowlevel_decoder.m_endpoints.size()) - { - BASISU_DEVEL_ERROR("basisu_transcoder::start_transcoding: already called start_transcoding\n"); - return true; - } - if (!validate_header_quick(pData, data_size)) { BASISU_DEVEL_ERROR("basisu_transcoder::start_transcoding: header validation failed\n"); @@ -9382,59 +9430,85 @@ namespace basist } const basis_file_header* pHeader = reinterpret_cast(pData); - const uint8_t* pDataU8 = static_cast(pData); - if (!pHeader->m_endpoint_cb_file_size || !pHeader->m_selector_cb_file_size || !pHeader->m_tables_file_size) + if (pHeader->m_tex_format == (int)basis_tex_format::cETC1S) { - BASISU_DEVEL_ERROR("basisu_transcoder::start_transcoding: file is corrupted (0)\n"); - } + if (m_lowlevel_etc1s_decoder.m_endpoints.size()) + { + m_lowlevel_etc1s_decoder.clear(); + } - if ((pHeader->m_endpoint_cb_file_ofs > data_size) || (pHeader->m_selector_cb_file_ofs > data_size) || (pHeader->m_tables_file_ofs > data_size)) - { - BASISU_DEVEL_ERROR("basisu_transcoder::start_transcoding: file is corrupted or passed in buffer too small (1)\n"); - return false; - } + if (!pHeader->m_endpoint_cb_file_size || !pHeader->m_selector_cb_file_size || !pHeader->m_tables_file_size) + { + BASISU_DEVEL_ERROR("basisu_transcoder::start_transcoding: file is corrupted (0)\n"); + } - if (pHeader->m_endpoint_cb_file_size > (data_size - pHeader->m_endpoint_cb_file_ofs)) - { - BASISU_DEVEL_ERROR("basisu_transcoder::start_transcoding: file is corrupted or passed in buffer too small (2)\n"); - return false; - } + if ((pHeader->m_endpoint_cb_file_ofs > data_size) || (pHeader->m_selector_cb_file_ofs > data_size) || (pHeader->m_tables_file_ofs > data_size)) + { + BASISU_DEVEL_ERROR("basisu_transcoder::start_transcoding: file is corrupted or passed in buffer too small (1)\n"); + return false; + } - if (pHeader->m_selector_cb_file_size > (data_size - pHeader->m_selector_cb_file_ofs)) - { - BASISU_DEVEL_ERROR("basisu_transcoder::start_transcoding: file is corrupted or passed in buffer too small (3)\n"); - return false; - } + if (pHeader->m_endpoint_cb_file_size > (data_size - pHeader->m_endpoint_cb_file_ofs)) + { + BASISU_DEVEL_ERROR("basisu_transcoder::start_transcoding: file is corrupted or passed in buffer too small (2)\n"); + return false; + } - if (pHeader->m_tables_file_size > (data_size - pHeader->m_tables_file_ofs)) - { - BASISU_DEVEL_ERROR("basisu_transcoder::start_transcoding: file is corrupted or passed in buffer too small (3)\n"); - return false; - } + if (pHeader->m_selector_cb_file_size > (data_size - pHeader->m_selector_cb_file_ofs)) + { + BASISU_DEVEL_ERROR("basisu_transcoder::start_transcoding: file is corrupted or passed in buffer too small (3)\n"); + return false; + } - if (!m_lowlevel_decoder.decode_palettes( - pHeader->m_total_endpoints, pDataU8 + pHeader->m_endpoint_cb_file_ofs, pHeader->m_endpoint_cb_file_size, - pHeader->m_total_selectors, pDataU8 + pHeader->m_selector_cb_file_ofs, pHeader->m_selector_cb_file_size)) - { - BASISU_DEVEL_ERROR("basisu_transcoder::start_transcoding: decode_palettes failed\n"); - return false; - } + if (pHeader->m_tables_file_size > (data_size - pHeader->m_tables_file_ofs)) + { + BASISU_DEVEL_ERROR("basisu_transcoder::start_transcoding: file is corrupted or passed in buffer too small (3)\n"); + return false; + } - if (!m_lowlevel_decoder.decode_tables(pDataU8 + pHeader->m_tables_file_ofs, pHeader->m_tables_file_size)) - { - BASISU_DEVEL_ERROR("basisu_transcoder::start_transcoding: decode_tables failed\n"); - return false; + if (!m_lowlevel_etc1s_decoder.decode_palettes( + pHeader->m_total_endpoints, pDataU8 + pHeader->m_endpoint_cb_file_ofs, pHeader->m_endpoint_cb_file_size, + pHeader->m_total_selectors, pDataU8 + pHeader->m_selector_cb_file_ofs, pHeader->m_selector_cb_file_size)) + { + BASISU_DEVEL_ERROR("basisu_transcoder::start_transcoding: decode_palettes failed\n"); + return false; + } + + if (!m_lowlevel_etc1s_decoder.decode_tables(pDataU8 + pHeader->m_tables_file_ofs, pHeader->m_tables_file_size)) + { + BASISU_DEVEL_ERROR("basisu_transcoder::start_transcoding: decode_tables failed\n"); + return false; + } } + else + { + // Nothing special to do for UASTC. + if (m_lowlevel_etc1s_decoder.m_endpoints.size()) + { + m_lowlevel_etc1s_decoder.clear(); + } + } + + m_ready_to_transcode = true; return true; } - bool basisu_transcoder::transcode_slice(const void* pData, uint32_t data_size, uint32_t slice_index, void* pOutput_blocks, uint32_t output_blocks_buf_size_in_blocks_or_pixels, block_format fmt, - uint32_t output_block_or_pixel_stride_in_bytes, uint32_t decode_flags, uint32_t output_row_pitch_in_blocks_or_pixels, basisu_transcoder_state* pState, void *pAlpha_blocks, uint32_t output_rows_in_pixels) const + bool basisu_transcoder::stop_transcoding() { - if (!m_lowlevel_decoder.m_endpoints.size()) + m_lowlevel_etc1s_decoder.clear(); + + m_ready_to_transcode = false; + + return true; + } + + bool basisu_transcoder::transcode_slice(const void* pData, uint32_t data_size, uint32_t slice_index, void* pOutput_blocks, uint32_t output_blocks_buf_size_in_blocks_or_pixels, block_format fmt, + uint32_t output_block_or_pixel_stride_in_bytes, uint32_t decode_flags, uint32_t output_row_pitch_in_blocks_or_pixels, basisu_transcoder_state* pState, void *pAlpha_blocks, uint32_t output_rows_in_pixels, int channel0, int channel1) const + { + if (!m_ready_to_transcode) { BASISU_DEVEL_ERROR("basisu_transcoder::transcode_slice: must call start_transcoding first\n"); return false; @@ -9529,16 +9603,26 @@ namespace basist BASISU_DEVEL_ERROR("basisu_transcoder::transcode_slice: invalid slice_desc.m_file_size, or passed in buffer too small\n"); return false; } - - return m_lowlevel_decoder.transcode_slice(pOutput_blocks, slice_desc.m_num_blocks_x, slice_desc.m_num_blocks_y, - pDataU8 + slice_desc.m_file_ofs, slice_desc.m_file_size, - fmt, output_block_or_pixel_stride_in_bytes, (decode_flags & cDecodeFlagsBC1ForbidThreeColorBlocks) == 0, *pHeader, slice_desc, output_row_pitch_in_blocks_or_pixels, pState, - (decode_flags & cDecodeFlagsOutputHasAlphaIndices) != 0, pAlpha_blocks, output_rows_in_pixels); + + if (pHeader->m_tex_format == (int)basis_tex_format::cUASTC4x4) + { + return m_lowlevel_uastc_decoder.transcode_slice(pOutput_blocks, slice_desc.m_num_blocks_x, slice_desc.m_num_blocks_y, + pDataU8 + slice_desc.m_file_ofs, slice_desc.m_file_size, + fmt, output_block_or_pixel_stride_in_bytes, (decode_flags & cDecodeFlagsBC1ForbidThreeColorBlocks) == 0, *pHeader, slice_desc, output_row_pitch_in_blocks_or_pixels, pState, + output_rows_in_pixels, channel0, channel1, decode_flags); + } + else + { + return m_lowlevel_etc1s_decoder.transcode_slice(pOutput_blocks, slice_desc.m_num_blocks_x, slice_desc.m_num_blocks_y, + pDataU8 + slice_desc.m_file_ofs, slice_desc.m_file_size, + fmt, output_block_or_pixel_stride_in_bytes, (decode_flags & cDecodeFlagsBC1ForbidThreeColorBlocks) == 0, *pHeader, slice_desc, output_row_pitch_in_blocks_or_pixels, pState, + (decode_flags & cDecodeFlagsOutputHasAlphaIndices) != 0, pAlpha_blocks, output_rows_in_pixels); + } } int basisu_transcoder::find_first_slice_index(const void* pData, uint32_t data_size, uint32_t image_index, uint32_t level_index) const { - (void)data_size; + BASISU_NOTE_UNUSED(data_size); const basis_file_header* pHeader = reinterpret_cast(pData); const uint8_t* pDataU8 = static_cast(pData); @@ -9576,9 +9660,16 @@ namespace basist const basis_slice_desc& slice_desc = pSlice_descs[slice_iter]; if ((slice_desc.m_image_index == image_index) && (slice_desc.m_level_index == level_index)) { - const bool slice_alpha = (slice_desc.m_flags & cSliceDescFlagsIsAlphaData) != 0; - if (slice_alpha == alpha_data) + if (pHeader->m_tex_format == (int)basis_tex_format::cETC1S) + { + const bool slice_alpha = (slice_desc.m_flags & cSliceDescFlagsHasAlpha) != 0; + if (slice_alpha == alpha_data) + return slice_iter; + } + else + { return slice_iter; + } } } @@ -9606,8 +9697,7 @@ namespace basist blk.m_table = 13; // Selectors are all 4's - static const uint8_t s_etc2_eac_a8_sel4[6] = { 0x92, 0x49, 0x24, 0x92, 0x49, 0x24 }; - memcpy(&blk.m_selectors, s_etc2_eac_a8_sel4, sizeof(s_etc2_eac_a8_sel4)); + memcpy(&blk.m_selectors, g_etc2_eac_a8_sel4, sizeof(g_etc2_eac_a8_sel4)); for (uint32_t y = 0; y < num_blocks_y; y++) { @@ -9648,9 +9738,9 @@ namespace basist transcoder_texture_format fmt, uint32_t decode_flags, uint32_t output_row_pitch_in_blocks_or_pixels, basisu_transcoder_state *pState, uint32_t output_rows_in_pixels) const { - const uint32_t bytes_per_block = basis_get_bytes_per_block(fmt); + const uint32_t bytes_per_block_or_pixel = basis_get_bytes_per_block_or_pixel(fmt); - if (!m_lowlevel_decoder.m_endpoints.size()) + if (!m_ready_to_transcode) { BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: must call start_transcoding() first\n"); return false; @@ -9693,37 +9783,40 @@ namespace basist fmt = transcoder_texture_format::cTFPVRTC1_4_RGB; } - if (pSlice_descs[slice_index].m_flags & cSliceDescFlagsIsAlphaData) + if (pHeader->m_tex_format == (int)basis_tex_format::cETC1S) { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: alpha basis file has out of order alpha slice\n"); - - // The first slice shouldn't have alpha data in a properly formed basis file - return false; - } - - if (basis_file_has_alpha_slices) - { - // The alpha data should immediately follow the color data, and have the same resolution. - if ((slice_index + 1U) >= pHeader->m_total_slices) + if (pSlice_descs[slice_index].m_flags & cSliceDescFlagsHasAlpha) { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: alpha basis file has missing alpha slice\n"); - // basis file is missing the alpha slice + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: alpha basis file has out of order alpha slice\n"); + + // The first slice shouldn't have alpha data in a properly formed basis file return false; } - // Basic sanity checks - if ((pSlice_descs[slice_index + 1].m_flags & cSliceDescFlagsIsAlphaData) == 0) + if (basis_file_has_alpha_slices) { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: alpha basis file has missing alpha slice (flag check)\n"); - // This slice should have alpha data - return false; - } + // The alpha data should immediately follow the color data, and have the same resolution. + if ((slice_index + 1U) >= pHeader->m_total_slices) + { + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: alpha basis file has missing alpha slice\n"); + // basis file is missing the alpha slice + return false; + } - if ((pSlice_descs[slice_index].m_num_blocks_x != pSlice_descs[slice_index + 1].m_num_blocks_x) || (pSlice_descs[slice_index].m_num_blocks_y != pSlice_descs[slice_index + 1].m_num_blocks_y)) - { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: alpha basis file slice dimensions bad\n"); - // Alpha slice should have been the same res as the color slice - return false; + // Basic sanity checks + if ((pSlice_descs[slice_index + 1].m_flags & cSliceDescFlagsHasAlpha) == 0) + { + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: alpha basis file has missing alpha slice (flag check)\n"); + // This slice should have alpha data + return false; + } + + if ((pSlice_descs[slice_index].m_num_blocks_x != pSlice_descs[slice_index + 1].m_num_blocks_x) || (pSlice_descs[slice_index].m_num_blocks_y != pSlice_descs[slice_index + 1].m_num_blocks_y)) + { + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: alpha basis file slice dimensions bad\n"); + // Alpha slice should have been the same res as the color slice + return false; + } } } @@ -9735,518 +9828,729 @@ namespace basist { // The transcoder doesn't write beyond total_slice_blocks, so we need to clear the rest ourselves. // For GL usage, PVRTC1 4bpp image size is (max(width, 8)* max(height, 8) * 4 + 7) / 8. - // However, for KTX and internally in Basis this formula isn't used, it's just ((width+3)/4) * ((height+3)/4) * bytes_per_block. This is all the transcoder actually writes to memory. - memset(static_cast(pOutput_blocks) + total_slice_blocks * bytes_per_block, 0, (output_blocks_buf_size_in_blocks_or_pixels - total_slice_blocks) * bytes_per_block); + // However, for KTX and internally in Basis this formula isn't used, it's just ((width+3)/4) * ((height+3)/4) * bytes_per_block_or_pixel. This is all the transcoder actually writes to memory. + memset(static_cast(pOutput_blocks) + total_slice_blocks * bytes_per_block_or_pixel, 0, (output_blocks_buf_size_in_blocks_or_pixels - total_slice_blocks) * bytes_per_block_or_pixel); } - - switch (fmt) + + if (pHeader->m_tex_format == (int)basis_tex_format::cUASTC4x4) { - case transcoder_texture_format::cTFETC1_RGB: - { - uint32_t slice_index_to_decode = slice_index; - // If the caller wants us to transcode the mip level's alpha data, then use the next slice. - if ((basis_file_has_alpha_slices) && (transcode_alpha_data_to_opaque_formats)) - slice_index_to_decode++; - - status = transcode_slice(pData, data_size, slice_index_to_decode, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cETC1, bytes_per_block, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); - if (!status) + // UASTC4x4 + switch (fmt) { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to ETC1 failed\n"); + case transcoder_texture_format::cTFETC1_RGB: + { + status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cETC1, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + if (!status) + { + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to ETC1 failed\n"); + } + break; + } + case transcoder_texture_format::cTFETC2_RGBA: + { + status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cETC2_RGBA, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + if (!status) + { + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to ETC2 failed\n"); + } + break; + } + case transcoder_texture_format::cTFBC1_RGB: + { + // TODO: ETC1S allows BC1 from alpha channel. That doesn't seem actually useful, though. + status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBC1, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + if (!status) + { + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to BC1 failed\n"); + } + break; + } + case transcoder_texture_format::cTFBC3_RGBA: + { + status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBC3, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + if (!status) + { + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to BC3 failed\n"); + } + break; + } + case transcoder_texture_format::cTFBC4_R: + { + status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBC4, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState, + nullptr, 0, + ((basis_file_has_alpha_slices) && (transcode_alpha_data_to_opaque_formats)) ? 3 : 0); + if (!status) + { + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to BC4 failed\n"); + } + break; + } + case transcoder_texture_format::cTFBC5_RG: + { + status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBC5, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState, + nullptr, 0, + 0, 3); + if (!status) + { + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to BC5 failed\n"); + } + break; + } + case transcoder_texture_format::cTFBC7_RGBA: + case transcoder_texture_format::cTFBC7_ALT: + { + status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBC7, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + if (!status) + { + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to BC7 failed\n"); + } + break; + } + case transcoder_texture_format::cTFPVRTC1_4_RGB: + { + status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cPVRTC1_4_RGB, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + if (!status) + { + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to PVRTC1 RGB 4bpp failed\n"); + } + break; + } + case transcoder_texture_format::cTFPVRTC1_4_RGBA: + { + status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cPVRTC1_4_RGBA, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + if (!status) + { + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to PVRTC1 RGBA 4bpp failed\n"); + } + break; + } + case transcoder_texture_format::cTFASTC_4x4_RGBA: + { + status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cASTC_4x4, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + if (!status) + { + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to ASTC 4x4 failed\n"); + } + break; + } + case transcoder_texture_format::cTFATC_RGB: + case transcoder_texture_format::cTFATC_RGBA: + { + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: UASTC->ATC currently unsupported\n"); + return false; + } + case transcoder_texture_format::cTFFXT1_RGB: + { + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: UASTC->FXT1 currently unsupported\n"); + return false; + } + case transcoder_texture_format::cTFPVRTC2_4_RGB: + { + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: UASTC->PVRTC2 currently unsupported\n"); + return false; + } + case transcoder_texture_format::cTFPVRTC2_4_RGBA: + { + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: UASTC->PVRTC2 currently unsupported\n"); + return false; + } + case transcoder_texture_format::cTFETC2_EAC_R11: + { + status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cETC2_EAC_R11, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState, + nullptr, 0, + ((basis_file_has_alpha_slices) && (transcode_alpha_data_to_opaque_formats)) ? 3 : 0); + if (!status) + { + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to EAC R11 failed\n"); + } + break; + } + case transcoder_texture_format::cTFETC2_EAC_RG11: + { + status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cETC2_EAC_RG11, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState, + nullptr, 0, + 0, 3); + if (!status) + { + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to EAC RG11 failed\n"); + } + break; + } + case transcoder_texture_format::cTFRGBA32: + { + status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cRGBA32, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + if (!status) + { + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to RGBA32 failed\n"); + } + break; + } + case transcoder_texture_format::cTFRGB565: + { + status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cRGB565, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + if (!status) + { + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to RGB565 failed\n"); + } + break; + } + case transcoder_texture_format::cTFBGR565: + { + status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBGR565, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + if (!status) + { + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to RGB565 failed\n"); + } + break; + } + case transcoder_texture_format::cTFRGBA4444: + { + status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cRGBA4444, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + if (!status) + { + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to RGBA4444 failed\n"); + } + break; + } + default: + { + assert(0); + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: Invalid fmt\n"); + break; + } } - break; } - case transcoder_texture_format::cTFBC1_RGB: + else { + // ETC1S + + switch (fmt) + { + case transcoder_texture_format::cTFETC1_RGB: + { + uint32_t slice_index_to_decode = slice_index; + // If the caller wants us to transcode the mip level's alpha data, then use the next slice. + if ((basis_file_has_alpha_slices) && (transcode_alpha_data_to_opaque_formats)) + slice_index_to_decode++; + + status = transcode_slice(pData, data_size, slice_index_to_decode, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cETC1, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + if (!status) + { + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to ETC1 failed\n"); + } + break; + } + case transcoder_texture_format::cTFBC1_RGB: + { #if !BASISD_SUPPORT_DXT1 - return false; + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: DXT1 unsupported\n"); + return false; #endif - uint32_t slice_index_to_decode = slice_index; - // If the caller wants us to transcode the mip level's alpha data, then use the next slice. - if ((basis_file_has_alpha_slices) && (transcode_alpha_data_to_opaque_formats)) - slice_index_to_decode++; + uint32_t slice_index_to_decode = slice_index; + // If the caller wants us to transcode the mip level's alpha data, then use the next slice. + if ((basis_file_has_alpha_slices) && (transcode_alpha_data_to_opaque_formats)) + slice_index_to_decode++; - status = transcode_slice(pData, data_size, slice_index_to_decode, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBC1, bytes_per_block, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); - if (!status) - { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to BC1 failed\n"); + status = transcode_slice(pData, data_size, slice_index_to_decode, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBC1, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + if (!status) + { + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to BC1 failed\n"); + } + break; } - break; - } - case transcoder_texture_format::cTFBC4_R: - { + case transcoder_texture_format::cTFBC4_R: + { #if !BASISD_SUPPORT_DXT5A - return false; + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: DXT5A unsupported\n"); + return false; #endif - uint32_t slice_index_to_decode = slice_index; - // If the caller wants us to transcode the mip level's alpha data, then use the next slice. - if ((basis_file_has_alpha_slices) && (transcode_alpha_data_to_opaque_formats)) - slice_index_to_decode++; + uint32_t slice_index_to_decode = slice_index; + // If the caller wants us to transcode the mip level's alpha data, then use the next slice. + if ((basis_file_has_alpha_slices) && (transcode_alpha_data_to_opaque_formats)) + slice_index_to_decode++; - status = transcode_slice(pData, data_size, slice_index_to_decode, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBC4, bytes_per_block, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); - if (!status) - { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to BC4 failed\n"); + status = transcode_slice(pData, data_size, slice_index_to_decode, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBC4, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + if (!status) + { + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to BC4 failed\n"); + } + break; } - break; - } - case transcoder_texture_format::cTFPVRTC1_4_RGB: - { + case transcoder_texture_format::cTFPVRTC1_4_RGB: + { #if !BASISD_SUPPORT_PVRTC1 - return false; + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: PVRTC1 unsupported\n"); + return false; #endif - uint32_t slice_index_to_decode = slice_index; - // If the caller wants us to transcode the mip level's alpha data, then use the next slice. - if ((basis_file_has_alpha_slices) && (transcode_alpha_data_to_opaque_formats)) - slice_index_to_decode++; + uint32_t slice_index_to_decode = slice_index; + // If the caller wants us to transcode the mip level's alpha data, then use the next slice. + if ((basis_file_has_alpha_slices) && (transcode_alpha_data_to_opaque_formats)) + slice_index_to_decode++; - // output_row_pitch_in_blocks_or_pixels is actually ignored because we're transcoding to PVRTC1. (Print a dev warning if it's != 0?) - status = transcode_slice(pData, data_size, slice_index_to_decode, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cPVRTC1_4_RGB, bytes_per_block, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); - if (!status) - { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to PVRTC1 4 RGB failed\n"); - } - break; - } - case transcoder_texture_format::cTFPVRTC1_4_RGBA: - { -#if !BASISD_SUPPORT_PVRTC1 - return false; -#endif - assert(basis_file_has_alpha_slices); - - // Temp buffer to hold alpha block endpoint/selector indices - std::vector temp_block_indices(total_slice_blocks); - - // First transcode alpha data to temp buffer - status = transcode_slice(pData, data_size, slice_index + 1, &temp_block_indices[0], total_slice_blocks, block_format::cIndices, sizeof(uint32_t), decode_flags, pSlice_descs[slice_index].m_num_blocks_x, pState); - if (!status) - { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to PVRTC1 4 RGBA failed (0)\n"); - } - else - { // output_row_pitch_in_blocks_or_pixels is actually ignored because we're transcoding to PVRTC1. (Print a dev warning if it's != 0?) - status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cPVRTC1_4_RGBA, bytes_per_block, decode_flags, output_row_pitch_in_blocks_or_pixels, pState, &temp_block_indices[0]); + status = transcode_slice(pData, data_size, slice_index_to_decode, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cPVRTC1_4_RGB, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); if (!status) { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to PVRTC1 4 RGBA failed (1)\n"); + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to PVRTC1 4 RGB failed\n"); } + break; } - - break; - } - case transcoder_texture_format::cTFBC7_M6_RGB: - { -#if !BASISD_SUPPORT_BC7_MODE6_OPAQUE_ONLY - return false; + case transcoder_texture_format::cTFPVRTC1_4_RGBA: + { +#if !BASISD_SUPPORT_PVRTC1 + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: PVRTC1 unsupported\n"); + return false; #endif - uint32_t slice_index_to_decode = slice_index; - // If the caller wants us to transcode the mip level's alpha data, then use the next slice. - if ((basis_file_has_alpha_slices) && (transcode_alpha_data_to_opaque_formats)) - slice_index_to_decode++; + assert(basis_file_has_alpha_slices); - status = transcode_slice(pData, data_size, slice_index_to_decode, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBC7_M6_OPAQUE_ONLY, bytes_per_block, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); - if (!status) - { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to BC7 m6 opaque only failed\n"); - } - break; - } - case transcoder_texture_format::cTFBC7_M5_RGBA: - { -#if !BASISD_SUPPORT_BC7_MODE5 - return false; -#else - assert(bytes_per_block == 16); + // Temp buffer to hold alpha block endpoint/selector indices + std::vector temp_block_indices(total_slice_blocks); - // First transcode the color slice. The cBC7_M5_COLOR transcoder will output opaque mode 5 blocks. - status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBC7_M5_COLOR, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); - - if ((status) && (basis_file_has_alpha_slices)) - { - // Now transcode the alpha slice. The cBC7_M5_ALPHA transcoder will now change the opaque mode 5 blocks to blocks with alpha. - status = transcode_slice(pData, data_size, slice_index + 1, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBC7_M5_ALPHA, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); - } - - break; -#endif - } - case transcoder_texture_format::cTFETC2_RGBA: - { -#if !BASISD_SUPPORT_ETC2_EAC_A8 - return false; -#endif - assert(bytes_per_block == 16); - - if (basis_file_has_alpha_slices) - { - // First decode the alpha data - status = transcode_slice(pData, data_size, slice_index + 1, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cETC2_EAC_A8, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); - } - else - { - write_opaque_alpha_blocks(pSlice_descs[slice_index].m_num_blocks_x, pSlice_descs[slice_index].m_num_blocks_y, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cETC2_EAC_A8, 16, output_row_pitch_in_blocks_or_pixels); - status = true; - } - - if (status) - { - // Now decode the color data - status = transcode_slice(pData, data_size, slice_index, (uint8_t*)pOutput_blocks + 8, output_blocks_buf_size_in_blocks_or_pixels, block_format::cETC1, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + // First transcode alpha data to temp buffer + status = transcode_slice(pData, data_size, slice_index + 1, &temp_block_indices[0], total_slice_blocks, block_format::cIndices, sizeof(uint32_t), decode_flags, pSlice_descs[slice_index].m_num_blocks_x, pState); if (!status) { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to ETC2 RGB failed\n"); + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to PVRTC1 4 RGBA failed (0)\n"); } - } - else - { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to ETC2 A failed\n"); - } - break; - } - case transcoder_texture_format::cTFBC3_RGBA: - { -#if !BASISD_SUPPORT_DXT1 - return false; -#endif -#if !BASISD_SUPPORT_DXT5A - return false; -#endif - assert(bytes_per_block == 16); - - // First decode the alpha data - if (basis_file_has_alpha_slices) - { - status = transcode_slice(pData, data_size, slice_index + 1, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBC4, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); - } - else - { - write_opaque_alpha_blocks(pSlice_descs[slice_index].m_num_blocks_x, pSlice_descs[slice_index].m_num_blocks_y, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBC4, 16, output_row_pitch_in_blocks_or_pixels); - status = true; - } - - if (status) - { - // Now decode the color data. Forbid 3 color blocks, which aren't allowed in BC3. - status = transcode_slice(pData, data_size, slice_index, (uint8_t*)pOutput_blocks + 8, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBC1, 16, decode_flags | cDecodeFlagsBC1ForbidThreeColorBlocks, output_row_pitch_in_blocks_or_pixels, pState); - if (!status) + else { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to BC3 RGB failed\n"); - } - } - else - { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to BC3 A failed\n"); - } - - break; - } - case transcoder_texture_format::cTFBC5_RG: - { -#if !BASISD_SUPPORT_DXT5A - return false; -#endif - assert(bytes_per_block == 16); - - // Decode the R data (actually the green channel of the color data slice in the basis file) - status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBC4, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); - if (status) - { - if (basis_file_has_alpha_slices) - { - // Decode the G data (actually the green channel of the alpha data slice in the basis file) - status = transcode_slice(pData, data_size, slice_index + 1, (uint8_t*)pOutput_blocks + 8, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBC4, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + // output_row_pitch_in_blocks_or_pixels is actually ignored because we're transcoding to PVRTC1. (Print a dev warning if it's != 0?) + status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cPVRTC1_4_RGBA, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState, &temp_block_indices[0]); if (!status) { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to BC5 1 failed\n"); + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to PVRTC1 4 RGBA failed (1)\n"); + } + } + + break; + } + case transcoder_texture_format::cTFBC7_RGBA: + case transcoder_texture_format::cTFBC7_ALT: + { +#if !BASISD_SUPPORT_BC7_MODE5 + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: BC7 unsupported\n"); + return false; +#else + assert(bytes_per_block_or_pixel == 16); + // We used to support transcoding just alpha to BC7 - but is that useful at all? + + // First transcode the color slice. The cBC7_M5_COLOR transcoder will output opaque mode 5 blocks. + status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBC7_M5_COLOR, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + + if ((status) && (basis_file_has_alpha_slices)) + { + // Now transcode the alpha slice. The cBC7_M5_ALPHA transcoder will now change the opaque mode 5 blocks to blocks with alpha. + status = transcode_slice(pData, data_size, slice_index + 1, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBC7_M5_ALPHA, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + } + + if (!status) + { + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to BC7 failed (0)\n"); + } + + break; +#endif + } + case transcoder_texture_format::cTFETC2_RGBA: + { +#if !BASISD_SUPPORT_ETC2_EAC_A8 + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: ETC2 EAC A8 unsupported\n"); + return false; +#endif + assert(bytes_per_block_or_pixel == 16); + + if (basis_file_has_alpha_slices) + { + // First decode the alpha data + status = transcode_slice(pData, data_size, slice_index + 1, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cETC2_EAC_A8, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + } + else + { + write_opaque_alpha_blocks(pSlice_descs[slice_index].m_num_blocks_x, pSlice_descs[slice_index].m_num_blocks_y, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cETC2_EAC_A8, 16, output_row_pitch_in_blocks_or_pixels); + status = true; + } + + if (status) + { + // Now decode the color data + status = transcode_slice(pData, data_size, slice_index, (uint8_t*)pOutput_blocks + 8, output_blocks_buf_size_in_blocks_or_pixels, block_format::cETC1, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + if (!status) + { + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to ETC2 RGB failed\n"); } } else { - write_opaque_alpha_blocks(pSlice_descs[slice_index].m_num_blocks_x, pSlice_descs[slice_index].m_num_blocks_y, (uint8_t*)pOutput_blocks + 8, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBC4, 16, output_row_pitch_in_blocks_or_pixels); - status = true; + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to ETC2 A failed\n"); } + break; } - else + case transcoder_texture_format::cTFBC3_RGBA: { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to BC5 channel 0 failed\n"); - } - break; - } - case transcoder_texture_format::cTFASTC_4x4_RGBA: - { -#if !BASISD_SUPPORT_ASTC - return false; -#endif - assert(bytes_per_block == 16); - - if (basis_file_has_alpha_slices) - { - // First decode the alpha data to the output (we're using the output texture as a temp buffer here). - status = transcode_slice(pData, data_size, slice_index + 1, (uint8_t*)pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cIndices, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); - if (!status) - { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to failed\n"); - } - else - { - // Now decode the color data and transcode to ASTC. The transcoder function will read the alpha selector data from the output texture as it converts and - // transcode both the alpha and color data at the same time to ASTC. - status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cASTC_4x4, 16, decode_flags | cDecodeFlagsOutputHasAlphaIndices, output_row_pitch_in_blocks_or_pixels, pState); - } - } - else - status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cASTC_4x4, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); - - break; - } - case transcoder_texture_format::cTFATC_RGB: - { -#if !BASISD_SUPPORT_ATC - return false; -#endif - uint32_t slice_index_to_decode = slice_index; - // If the caller wants us to transcode the mip level's alpha data, then use the next slice. - if ((basis_file_has_alpha_slices) && (transcode_alpha_data_to_opaque_formats)) - slice_index_to_decode++; - - status = transcode_slice(pData, data_size, slice_index_to_decode, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cATC_RGB, bytes_per_block, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); - if (!status) - { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to ATC_RGB failed\n"); - } - break; - } - case transcoder_texture_format::cTFATC_RGBA: - { -#if !BASISD_SUPPORT_ATC - return false; +#if !BASISD_SUPPORT_DXT1 + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: DXT1 unsupported\n"); + return false; #endif #if !BASISD_SUPPORT_DXT5A - return false; + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: DXT5A unsupported\n"); + return false; #endif - assert(bytes_per_block == 16); + assert(bytes_per_block_or_pixel == 16); - // First decode the alpha data - if (basis_file_has_alpha_slices) - { - status = transcode_slice(pData, data_size, slice_index + 1, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBC4, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); - } - else - { - write_opaque_alpha_blocks(pSlice_descs[slice_index].m_num_blocks_x, pSlice_descs[slice_index].m_num_blocks_y, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBC4, 16, output_row_pitch_in_blocks_or_pixels); - status = true; - } - - if (status) - { - status = transcode_slice(pData, data_size, slice_index, (uint8_t*)pOutput_blocks + 8, output_blocks_buf_size_in_blocks_or_pixels, block_format::cATC_RGB, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); - if (!status) + // First decode the alpha data + if (basis_file_has_alpha_slices) { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to ATC RGB failed\n"); - } - } - else - { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to ATC A failed\n"); - } - break; - } - case transcoder_texture_format::cTFPVRTC2_4_RGB: - { -#if !BASISD_SUPPORT_PVRTC2 - return false; -#endif - uint32_t slice_index_to_decode = slice_index; - // If the caller wants us to transcode the mip level's alpha data, then use the next slice. - if ((basis_file_has_alpha_slices) && (transcode_alpha_data_to_opaque_formats)) - slice_index_to_decode++; - - status = transcode_slice(pData, data_size, slice_index_to_decode, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cPVRTC2_4_RGB, bytes_per_block, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); - if (!status) - { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to cPVRTC2_4_RGB failed\n"); - } - break; - } - case transcoder_texture_format::cTFPVRTC2_4_RGBA: - { -#if !BASISD_SUPPORT_PVRTC2 - return false; -#endif - if (basis_file_has_alpha_slices) - { - // First decode the alpha data to the output (we're using the output texture as a temp buffer here). - status = transcode_slice(pData, data_size, slice_index + 1, (uint8_t*)pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cIndices, bytes_per_block, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); - if (!status) - { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to failed\n"); + status = transcode_slice(pData, data_size, slice_index + 1, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBC4, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); } else { - // Now decode the color data and transcode to PVRTC2 RGBA. - status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cPVRTC2_4_RGBA, bytes_per_block, decode_flags | cDecodeFlagsOutputHasAlphaIndices, output_row_pitch_in_blocks_or_pixels, pState); + write_opaque_alpha_blocks(pSlice_descs[slice_index].m_num_blocks_x, pSlice_descs[slice_index].m_num_blocks_y, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBC4, 16, output_row_pitch_in_blocks_or_pixels); + status = true; } + + if (status) + { + // Now decode the color data. Forbid 3 color blocks, which aren't allowed in BC3. + status = transcode_slice(pData, data_size, slice_index, (uint8_t*)pOutput_blocks + 8, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBC1, 16, decode_flags | cDecodeFlagsBC1ForbidThreeColorBlocks, output_row_pitch_in_blocks_or_pixels, pState); + if (!status) + { + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to BC3 RGB failed\n"); + } + } + else + { + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to BC3 A failed\n"); + } + + break; } - else - status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cPVRTC2_4_RGB, bytes_per_block, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); - - if (!status) + case transcoder_texture_format::cTFBC5_RG: { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to cPVRTC2_4_RGBA failed\n"); +#if !BASISD_SUPPORT_DXT5A + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: DXT5A unsupported\n"); + return false; +#endif + assert(bytes_per_block_or_pixel == 16); + + // Decode the R data (actually the green channel of the color data slice in the basis file) + status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBC4, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + if (status) + { + if (basis_file_has_alpha_slices) + { + // Decode the G data (actually the green channel of the alpha data slice in the basis file) + status = transcode_slice(pData, data_size, slice_index + 1, (uint8_t*)pOutput_blocks + 8, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBC4, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + if (!status) + { + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to BC5 1 failed\n"); + } + } + else + { + write_opaque_alpha_blocks(pSlice_descs[slice_index].m_num_blocks_x, pSlice_descs[slice_index].m_num_blocks_y, (uint8_t*)pOutput_blocks + 8, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBC4, 16, output_row_pitch_in_blocks_or_pixels); + status = true; + } + } + else + { + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to BC5 channel 0 failed\n"); + } + break; } - - break; - } - case transcoder_texture_format::cTFRGBA32: - { - // Raw 32bpp pixels, decoded in the usual raster order (NOT block order) into an image in memory. - - // First decode the alpha data - if (basis_file_has_alpha_slices) - status = transcode_slice(pData, data_size, slice_index + 1, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cA32, sizeof(uint32_t), decode_flags, output_row_pitch_in_blocks_or_pixels, pState, nullptr, output_rows_in_pixels); - else - status = true; - - if (status) + case transcoder_texture_format::cTFASTC_4x4_RGBA: { - status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, basis_file_has_alpha_slices ? block_format::cRGB32 : block_format::cRGBA32, sizeof(uint32_t), decode_flags, output_row_pitch_in_blocks_or_pixels, pState, nullptr, output_rows_in_pixels); +#if !BASISD_SUPPORT_ASTC + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: ASTC unsupported\n"); + return false; +#endif + assert(bytes_per_block_or_pixel == 16); + + if (basis_file_has_alpha_slices) + { + // First decode the alpha data to the output (we're using the output texture as a temp buffer here). + status = transcode_slice(pData, data_size, slice_index + 1, (uint8_t*)pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cIndices, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + if (status) + { + // Now decode the color data and transcode to ASTC. The transcoder function will read the alpha selector data from the output texture as it converts and + // transcode both the alpha and color data at the same time to ASTC. + status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cASTC_4x4, 16, decode_flags | cDecodeFlagsOutputHasAlphaIndices, output_row_pitch_in_blocks_or_pixels, pState); + } + } + else + status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cASTC_4x4, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + + if (!status) + { + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to ASTC failed (0)\n"); + } + + break; + } + case transcoder_texture_format::cTFATC_RGB: + { +#if !BASISD_SUPPORT_ATC + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: ATC unsupported\n"); + return false; +#endif + uint32_t slice_index_to_decode = slice_index; + // If the caller wants us to transcode the mip level's alpha data, then use the next slice. + if ((basis_file_has_alpha_slices) && (transcode_alpha_data_to_opaque_formats)) + slice_index_to_decode++; + + status = transcode_slice(pData, data_size, slice_index_to_decode, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cATC_RGB, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); if (!status) { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to RGBA32 RGB failed\n"); + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to ATC_RGB failed\n"); } + break; } - else + case transcoder_texture_format::cTFATC_RGBA: { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to RGBA32 A failed\n"); +#if !BASISD_SUPPORT_ATC + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: ATC unsupported\n"); + return false; +#endif +#if !BASISD_SUPPORT_DXT5A + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: DXT5A unsupported\n"); + return false; +#endif + assert(bytes_per_block_or_pixel == 16); + + // First decode the alpha data + if (basis_file_has_alpha_slices) + { + status = transcode_slice(pData, data_size, slice_index + 1, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBC4, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + } + else + { + write_opaque_alpha_blocks(pSlice_descs[slice_index].m_num_blocks_x, pSlice_descs[slice_index].m_num_blocks_y, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cBC4, 16, output_row_pitch_in_blocks_or_pixels); + status = true; + } + + if (status) + { + status = transcode_slice(pData, data_size, slice_index, (uint8_t*)pOutput_blocks + 8, output_blocks_buf_size_in_blocks_or_pixels, block_format::cATC_RGB, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + if (!status) + { + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to ATC RGB failed\n"); + } + } + else + { + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to ATC A failed\n"); + } + break; } - - break; - } - case transcoder_texture_format::cTFRGB565: - case transcoder_texture_format::cTFBGR565: - { - // Raw 16bpp pixels, decoded in the usual raster order (NOT block order) into an image in memory. - - uint32_t slice_index_to_decode = slice_index; - // If the caller wants us to transcode the mip level's alpha data, then use the next slice. - if ((basis_file_has_alpha_slices) && (transcode_alpha_data_to_opaque_formats)) - slice_index_to_decode++; - - status = transcode_slice(pData, data_size, slice_index_to_decode, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, (fmt == transcoder_texture_format::cTFRGB565) ? block_format::cRGB565 : block_format::cBGR565, sizeof(uint16_t), decode_flags, output_row_pitch_in_blocks_or_pixels, pState, nullptr, output_rows_in_pixels); - if (!status) + case transcoder_texture_format::cTFPVRTC2_4_RGB: { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to RGB565 RGB failed\n"); - } +#if !BASISD_SUPPORT_PVRTC2 + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: PVRTC2 unsupported\n"); + return false; +#endif + uint32_t slice_index_to_decode = slice_index; + // If the caller wants us to transcode the mip level's alpha data, then use the next slice. + if ((basis_file_has_alpha_slices) && (transcode_alpha_data_to_opaque_formats)) + slice_index_to_decode++; - break; - } - case transcoder_texture_format::cTFRGBA4444: - { - // Raw 16bpp pixels, decoded in the usual raster order (NOT block order) into an image in memory. - - // First decode the alpha data - if (basis_file_has_alpha_slices) - status = transcode_slice(pData, data_size, slice_index + 1, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cRGBA4444_ALPHA, sizeof(uint16_t), decode_flags, output_row_pitch_in_blocks_or_pixels, pState, nullptr, output_rows_in_pixels); - else - status = true; - - if (status) - { - status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, basis_file_has_alpha_slices ? block_format::cRGBA4444_COLOR : block_format::cRGBA4444_COLOR_OPAQUE, sizeof(uint16_t), decode_flags, output_row_pitch_in_blocks_or_pixels, pState, nullptr, output_rows_in_pixels); + status = transcode_slice(pData, data_size, slice_index_to_decode, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cPVRTC2_4_RGB, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); if (!status) { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to RGBA4444 RGB failed\n"); + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to cPVRTC2_4_RGB failed\n"); } + break; } - else + case transcoder_texture_format::cTFPVRTC2_4_RGBA: { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to RGBA4444 A failed\n"); - } +#if !BASISD_SUPPORT_PVRTC2 + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: PVRTC2 unsupported\n"); + return false; +#endif + if (basis_file_has_alpha_slices) + { + // First decode the alpha data to the output (we're using the output texture as a temp buffer here). + status = transcode_slice(pData, data_size, slice_index + 1, (uint8_t*)pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cIndices, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + if (!status) + { + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to failed\n"); + } + else + { + // Now decode the color data and transcode to PVRTC2 RGBA. + status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cPVRTC2_4_RGBA, bytes_per_block_or_pixel, decode_flags | cDecodeFlagsOutputHasAlphaIndices, output_row_pitch_in_blocks_or_pixels, pState); + } + } + else + status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cPVRTC2_4_RGB, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); - break; - } - case transcoder_texture_format::cTFFXT1_RGB: - { + if (!status) + { + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to cPVRTC2_4_RGBA failed\n"); + } + + break; + } + case transcoder_texture_format::cTFRGBA32: + { + // Raw 32bpp pixels, decoded in the usual raster order (NOT block order) into an image in memory. + + // First decode the alpha data + if (basis_file_has_alpha_slices) + status = transcode_slice(pData, data_size, slice_index + 1, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cA32, sizeof(uint32_t), decode_flags, output_row_pitch_in_blocks_or_pixels, pState, nullptr, output_rows_in_pixels); + else + status = true; + + if (status) + { + status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, basis_file_has_alpha_slices ? block_format::cRGB32 : block_format::cRGBA32, sizeof(uint32_t), decode_flags, output_row_pitch_in_blocks_or_pixels, pState, nullptr, output_rows_in_pixels); + if (!status) + { + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to RGBA32 RGB failed\n"); + } + } + else + { + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to RGBA32 A failed\n"); + } + + break; + } + case transcoder_texture_format::cTFRGB565: + case transcoder_texture_format::cTFBGR565: + { + // Raw 16bpp pixels, decoded in the usual raster order (NOT block order) into an image in memory. + + uint32_t slice_index_to_decode = slice_index; + // If the caller wants us to transcode the mip level's alpha data, then use the next slice. + if ((basis_file_has_alpha_slices) && (transcode_alpha_data_to_opaque_formats)) + slice_index_to_decode++; + + status = transcode_slice(pData, data_size, slice_index_to_decode, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, (fmt == transcoder_texture_format::cTFRGB565) ? block_format::cRGB565 : block_format::cBGR565, sizeof(uint16_t), decode_flags, output_row_pitch_in_blocks_or_pixels, pState, nullptr, output_rows_in_pixels); + if (!status) + { + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to RGB565 RGB failed\n"); + } + + break; + } + case transcoder_texture_format::cTFRGBA4444: + { + // Raw 16bpp pixels, decoded in the usual raster order (NOT block order) into an image in memory. + + // First decode the alpha data + if (basis_file_has_alpha_slices) + status = transcode_slice(pData, data_size, slice_index + 1, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cRGBA4444_ALPHA, sizeof(uint16_t), decode_flags, output_row_pitch_in_blocks_or_pixels, pState, nullptr, output_rows_in_pixels); + else + status = true; + + if (status) + { + status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, basis_file_has_alpha_slices ? block_format::cRGBA4444_COLOR : block_format::cRGBA4444_COLOR_OPAQUE, sizeof(uint16_t), decode_flags, output_row_pitch_in_blocks_or_pixels, pState, nullptr, output_rows_in_pixels); + if (!status) + { + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to RGBA4444 RGB failed\n"); + } + } + else + { + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to RGBA4444 A failed\n"); + } + + break; + } + case transcoder_texture_format::cTFFXT1_RGB: + { #if !BASISD_SUPPORT_FXT1 - return false; + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: FXT1 unsupported\n"); + return false; #endif - uint32_t slice_index_to_decode = slice_index; - // If the caller wants us to transcode the mip level's alpha data, then use the next slice. - if ((basis_file_has_alpha_slices) && (transcode_alpha_data_to_opaque_formats)) - slice_index_to_decode++; + uint32_t slice_index_to_decode = slice_index; + // If the caller wants us to transcode the mip level's alpha data, then use the next slice. + if ((basis_file_has_alpha_slices) && (transcode_alpha_data_to_opaque_formats)) + slice_index_to_decode++; - status = transcode_slice(pData, data_size, slice_index_to_decode, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cFXT1_RGB, bytes_per_block, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); - if (!status) - { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to FXT1_RGB failed\n"); - } - break; - } - case transcoder_texture_format::cTFETC2_EAC_R11: - { -#if !BASISD_SUPPORT_ETC2_EAC_RG11 - return false; -#endif - uint32_t slice_index_to_decode = slice_index; - // If the caller wants us to transcode the mip level's alpha data, then use the next slice. - if ((basis_file_has_alpha_slices) && (transcode_alpha_data_to_opaque_formats)) - slice_index_to_decode++; - - status = transcode_slice(pData, data_size, slice_index_to_decode, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cETC2_EAC_R11, bytes_per_block, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); - if (!status) - { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to ETC2_EAC_R11 failed\n"); - } - - break; - } - case transcoder_texture_format::cTFETC2_EAC_RG11: - { -#if !BASISD_SUPPORT_ETC2_EAC_RG11 - return false; -#endif - assert(bytes_per_block == 16); - - if (basis_file_has_alpha_slices) - { - // First decode the alpha data to G - status = transcode_slice(pData, data_size, slice_index + 1, (uint8_t *)pOutput_blocks + 8, output_blocks_buf_size_in_blocks_or_pixels, block_format::cETC2_EAC_R11, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); - } - else - { - write_opaque_alpha_blocks(pSlice_descs[slice_index].m_num_blocks_x, pSlice_descs[slice_index].m_num_blocks_y, (uint8_t *)pOutput_blocks + 8, output_blocks_buf_size_in_blocks_or_pixels, block_format::cETC2_EAC_R11, 16, output_row_pitch_in_blocks_or_pixels); - status = true; - } - - if (status) - { - // Now decode the color data to R - status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cETC2_EAC_R11, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + status = transcode_slice(pData, data_size, slice_index_to_decode, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cFXT1_RGB, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); if (!status) { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to ETC2_EAC_R11 R failed\n"); + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to FXT1_RGB failed\n"); } + break; } - else + case transcoder_texture_format::cTFETC2_EAC_R11: { - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to ETC2_EAC_R11 G failed\n"); - } +#if !BASISD_SUPPORT_ETC2_EAC_RG11 + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: EAC_RG11 unsupported\n"); + return false; +#endif + uint32_t slice_index_to_decode = slice_index; + // If the caller wants us to transcode the mip level's alpha data, then use the next slice. + if ((basis_file_has_alpha_slices) && (transcode_alpha_data_to_opaque_formats)) + slice_index_to_decode++; - break; - } - default: - { - assert(0); - BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: Invalid fmt\n"); - break; - } - } + status = transcode_slice(pData, data_size, slice_index_to_decode, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cETC2_EAC_R11, bytes_per_block_or_pixel, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + if (!status) + { + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to ETC2_EAC_R11 failed\n"); + } + + break; + } + case transcoder_texture_format::cTFETC2_EAC_RG11: + { +#if !BASISD_SUPPORT_ETC2_EAC_RG11 + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: EAC_RG11 unsupported\n"); + return false; +#endif + assert(bytes_per_block_or_pixel == 16); + + if (basis_file_has_alpha_slices) + { + // First decode the alpha data to G + status = transcode_slice(pData, data_size, slice_index + 1, (uint8_t*)pOutput_blocks + 8, output_blocks_buf_size_in_blocks_or_pixels, block_format::cETC2_EAC_R11, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + } + else + { + write_opaque_alpha_blocks(pSlice_descs[slice_index].m_num_blocks_x, pSlice_descs[slice_index].m_num_blocks_y, (uint8_t*)pOutput_blocks + 8, output_blocks_buf_size_in_blocks_or_pixels, block_format::cETC2_EAC_R11, 16, output_row_pitch_in_blocks_or_pixels); + status = true; + } + + if (status) + { + // Now decode the color data to R + status = transcode_slice(pData, data_size, slice_index, pOutput_blocks, output_blocks_buf_size_in_blocks_or_pixels, block_format::cETC2_EAC_R11, 16, decode_flags, output_row_pitch_in_blocks_or_pixels, pState); + if (!status) + { + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to ETC2_EAC_R11 R failed\n"); + } + } + else + { + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: transcode_slice() to ETC2_EAC_R11 G failed\n"); + } + + break; + } + default: + { + assert(0); + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: Invalid fmt\n"); + break; + } + } + } // if (pHeader->m_tex_format == (int)basis_tex_format::cUASTC4x4) + + if (!status) + { + BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: Returning false\n"); + } + else + { + //BASISU_DEVEL_ERROR("basisu_transcoder::transcode_image_level: Returning true\n"); + } return status; } - uint32_t basis_get_bytes_per_block(transcoder_texture_format fmt) + uint32_t basis_get_bytes_per_block_or_pixel(transcoder_texture_format fmt) { switch (fmt) { @@ -10260,8 +10564,8 @@ namespace basist case transcoder_texture_format::cTFPVRTC2_4_RGBA: case transcoder_texture_format::cTFETC2_EAC_R11: return 8; - case transcoder_texture_format::cTFBC7_M6_RGB: - case transcoder_texture_format::cTFBC7_M5_RGBA: + case transcoder_texture_format::cTFBC7_RGBA: + case transcoder_texture_format::cTFBC7_ALT: case transcoder_texture_format::cTFETC2_RGBA: case transcoder_texture_format::cTFBC3_RGBA: case transcoder_texture_format::cTFBC5_RG: @@ -10271,11 +10575,11 @@ namespace basist case transcoder_texture_format::cTFETC2_EAC_RG11: return 16; case transcoder_texture_format::cTFRGBA32: - return sizeof(uint32_t) * 16; + return sizeof(uint32_t); case transcoder_texture_format::cTFRGB565: case transcoder_texture_format::cTFBGR565: case transcoder_texture_format::cTFRGBA4444: - return sizeof(uint16_t) * 16; + return sizeof(uint16_t); default: assert(0); BASISU_DEVEL_ERROR("basis_get_basisu_texture_format: Invalid fmt\n"); @@ -10293,8 +10597,8 @@ namespace basist case transcoder_texture_format::cTFBC4_R: return "BC4_R"; case transcoder_texture_format::cTFPVRTC1_4_RGB: return "PVRTC1_4_RGB"; case transcoder_texture_format::cTFPVRTC1_4_RGBA: return "PVRTC1_4_RGBA"; - case transcoder_texture_format::cTFBC7_M6_RGB: return "BC7_M6_RGB"; - case transcoder_texture_format::cTFBC7_M5_RGBA: return "BC7_M5_RGBA"; + case transcoder_texture_format::cTFBC7_RGBA: return "BC7_RGBA"; + case transcoder_texture_format::cTFBC7_ALT: return "BC7_RGBA"; case transcoder_texture_format::cTFETC2_RGBA: return "ETC2_RGBA"; case transcoder_texture_format::cTFBC3_RGBA: return "BC3_RGBA"; case transcoder_texture_format::cTFBC5_RG: return "BC5_RG"; @@ -10342,7 +10646,8 @@ namespace basist case transcoder_texture_format::cTFETC2_RGBA: case transcoder_texture_format::cTFBC3_RGBA: case transcoder_texture_format::cTFASTC_4x4_RGBA: - case transcoder_texture_format::cTFBC7_M5_RGBA: + case transcoder_texture_format::cTFBC7_RGBA: + case transcoder_texture_format::cTFBC7_ALT: case transcoder_texture_format::cTFPVRTC1_4_RGBA: case transcoder_texture_format::cTFPVRTC2_4_RGBA: case transcoder_texture_format::cTFATC_RGBA: @@ -10364,8 +10669,8 @@ namespace basist case transcoder_texture_format::cTFBC4_R: return basisu::texture_format::cBC4; case transcoder_texture_format::cTFPVRTC1_4_RGB: return basisu::texture_format::cPVRTC1_4_RGB; case transcoder_texture_format::cTFPVRTC1_4_RGBA: return basisu::texture_format::cPVRTC1_4_RGBA; - case transcoder_texture_format::cTFBC7_M6_RGB: return basisu::texture_format::cBC7; - case transcoder_texture_format::cTFBC7_M5_RGBA: return basisu::texture_format::cBC7; + case transcoder_texture_format::cTFBC7_RGBA: return basisu::texture_format::cBC7; + case transcoder_texture_format::cTFBC7_ALT: return basisu::texture_format::cBC7; case transcoder_texture_format::cTFETC2_RGBA: return basisu::texture_format::cETC2_RGBA; case transcoder_texture_format::cTFBC3_RGBA: return basisu::texture_format::cBC3; case transcoder_texture_format::cTFBC5_RG: return basisu::texture_format::cBC5; @@ -10404,15 +10709,16 @@ namespace basist return false; } - bool basis_block_format_is_uncompressed(block_format tex_type) + bool basis_block_format_is_uncompressed(block_format blk_fmt) { - switch (tex_type) + switch (blk_fmt) { case block_format::cRGB32: case block_format::cRGBA32: case block_format::cA32: case block_format::cRGB565: case block_format::cBGR565: + case block_format::cRGBA4444: case block_format::cRGBA4444_COLOR: case block_format::cRGBA4444_ALPHA: case block_format::cRGBA4444_COLOR_OPAQUE: @@ -10453,80 +10759,5551 @@ namespace basist uint32_t basis_get_block_height(transcoder_texture_format tex_type) { - (void)tex_type; + BASISU_NOTE_UNUSED(tex_type); return 4; } - bool basis_is_format_supported(transcoder_texture_format tex_type) + bool basis_is_format_supported(transcoder_texture_format tex_type, basis_tex_format fmt) { - switch (tex_type) + if (fmt == basis_tex_format::cUASTC4x4) { - // ETC1 and uncompressed are always supported. - case transcoder_texture_format::cTFETC1_RGB: - case transcoder_texture_format::cTFRGBA32: - case transcoder_texture_format::cTFRGB565: - case transcoder_texture_format::cTFBGR565: - case transcoder_texture_format::cTFRGBA4444: - return true; +#if BASISD_SUPPORT_UASTC + switch (tex_type) + { + // These niche formats aren't currently supported for UASTC - everything else is. + case transcoder_texture_format::cTFPVRTC2_4_RGB: + case transcoder_texture_format::cTFPVRTC2_4_RGBA: + case transcoder_texture_format::cTFATC_RGB: + case transcoder_texture_format::cTFATC_RGBA: + case transcoder_texture_format::cTFFXT1_RGB: + return false; + default: + return true; + } +#endif + } + else + { + switch (tex_type) + { + // ETC1 and uncompressed are always supported. + case transcoder_texture_format::cTFETC1_RGB: + case transcoder_texture_format::cTFRGBA32: + case transcoder_texture_format::cTFRGB565: + case transcoder_texture_format::cTFBGR565: + case transcoder_texture_format::cTFRGBA4444: + return true; #if BASISD_SUPPORT_DXT1 - case transcoder_texture_format::cTFBC1_RGB: - return true; + case transcoder_texture_format::cTFBC1_RGB: + return true; #endif #if BASISD_SUPPORT_DXT5A - case transcoder_texture_format::cTFBC4_R: - case transcoder_texture_format::cTFBC5_RG: - return true; + case transcoder_texture_format::cTFBC4_R: + case transcoder_texture_format::cTFBC5_RG: + return true; #endif #if BASISD_SUPPORT_DXT1 && BASISD_SUPPORT_DXT5A - case transcoder_texture_format::cTFBC3_RGBA: - return true; + case transcoder_texture_format::cTFBC3_RGBA: + return true; #endif #if BASISD_SUPPORT_PVRTC1 - case transcoder_texture_format::cTFPVRTC1_4_RGB: - case transcoder_texture_format::cTFPVRTC1_4_RGBA: - return true; -#endif -#if BASISD_SUPPORT_BC7_MODE6_OPAQUE_ONLY - case transcoder_texture_format::cTFBC7_M6_RGB: - return true; + case transcoder_texture_format::cTFPVRTC1_4_RGB: + case transcoder_texture_format::cTFPVRTC1_4_RGBA: + return true; #endif #if BASISD_SUPPORT_BC7_MODE5 - case transcoder_texture_format::cTFBC7_M5_RGBA: - return true; + case transcoder_texture_format::cTFBC7_RGBA: + case transcoder_texture_format::cTFBC7_ALT: + return true; #endif #if BASISD_SUPPORT_ETC2_EAC_A8 - case transcoder_texture_format::cTFETC2_RGBA: - return true; + case transcoder_texture_format::cTFETC2_RGBA: + return true; #endif #if BASISD_SUPPORT_ASTC - case transcoder_texture_format::cTFASTC_4x4_RGBA: - return true; + case transcoder_texture_format::cTFASTC_4x4_RGBA: + return true; #endif #if BASISD_SUPPORT_ATC - case transcoder_texture_format::cTFATC_RGB: - case transcoder_texture_format::cTFATC_RGBA: - return true; + case transcoder_texture_format::cTFATC_RGB: + case transcoder_texture_format::cTFATC_RGBA: + return true; #endif #if BASISD_SUPPORT_FXT1 - case transcoder_texture_format::cTFFXT1_RGB: - return true; + case transcoder_texture_format::cTFFXT1_RGB: + return true; #endif #if BASISD_SUPPORT_PVRTC2 - case transcoder_texture_format::cTFPVRTC2_4_RGB: - case transcoder_texture_format::cTFPVRTC2_4_RGBA: - return true; + case transcoder_texture_format::cTFPVRTC2_4_RGB: + case transcoder_texture_format::cTFPVRTC2_4_RGBA: + return true; #endif #if BASISD_SUPPORT_ETC2_EAC_RG11 - case transcoder_texture_format::cTFETC2_EAC_R11: - case transcoder_texture_format::cTFETC2_EAC_RG11: - return true; + case transcoder_texture_format::cTFETC2_EAC_R11: + case transcoder_texture_format::cTFETC2_EAC_RG11: + return true; #endif - default: - break; + default: + break; + } } return false; } + // ------------------------------------------------------------------------------------------------------ + // UASTC + // ------------------------------------------------------------------------------------------------------ + +#if BASISD_SUPPORT_UASTC + const astc_bc7_common_partition2_desc g_astc_bc7_common_partitions2[TOTAL_ASTC_BC7_COMMON_PARTITIONS2] = + { + { 0, 28, false }, { 1, 20, false }, { 2, 16, true }, { 3, 29, false }, + { 4, 91, true }, { 5, 9, false }, { 6, 107, true }, { 7, 72, true }, + { 8, 149, false }, { 9, 204, true }, { 10, 50, false }, { 11, 114, true }, + { 12, 496, true }, { 13, 17, true }, { 14, 78, false }, { 15, 39, true }, + { 17, 252, true }, { 18, 828, true }, { 19, 43, false }, { 20, 156, false }, + { 21, 116, false }, { 22, 210, true }, { 23, 476, true }, { 24, 273, false }, + { 25, 684, true }, { 26, 359, false }, { 29, 246, true }, { 32, 195, true }, + { 33, 694, true }, { 52, 524, true } + }; + + const bc73_astc2_common_partition_desc g_bc7_3_astc2_common_partitions[TOTAL_BC7_3_ASTC2_COMMON_PARTITIONS] = + { + { 10, 36, 4 }, { 11, 48, 4 }, { 0, 61, 3 }, { 2, 137, 4 }, + { 8, 161, 5 }, { 13, 183, 4 }, { 1, 226, 2 }, { 33, 281, 2 }, + { 40, 302, 3 }, { 20, 307, 4 }, { 21, 479, 0 }, { 58, 495, 3 }, + { 3, 593, 0 }, { 32, 594, 2 }, { 59, 605, 1 }, { 34, 799, 3 }, + { 20, 812, 1 }, { 14, 988, 4 }, { 31, 993, 3 } + }; + + const astc_bc7_common_partition3_desc g_astc_bc7_common_partitions3[TOTAL_ASTC_BC7_COMMON_PARTITIONS3] = + { + { 4, 260, 0 }, { 8, 74, 5 }, { 9, 32, 5 }, { 10, 156, 2 }, + { 11, 183, 2 }, { 12, 15, 0 }, { 13, 745, 4 }, { 20, 0, 1 }, + { 35, 335, 1 }, { 36, 902, 5 }, { 57, 254, 0 } + }; + + const uint8_t g_astc_to_bc7_partition_index_perm_tables[6][3] = { { 0, 1, 2 }, { 1, 2, 0 }, { 2, 0, 1 }, { 2, 1, 0 }, { 0, 2, 1 }, { 1, 0, 2 } }; + + const uint8_t g_bc7_to_astc_partition_index_perm_tables[6][3] = { { 0, 1, 2 }, { 2, 0, 1 }, { 1, 2, 0 }, { 2, 1, 0 }, { 0, 2, 1 }, { 1, 0, 2 } }; + + uint32_t bc7_convert_partition_index_3_to_2(uint32_t p, uint32_t k) + { + assert(k < 6); + switch (k >> 1) + { + case 0: + if (p <= 1) + p = 0; + else + p = 1; + break; + case 1: + if (p == 0) + p = 0; + else + p = 1; + break; + case 2: + if ((p == 0) || (p == 2)) + p = 0; + else + p = 1; + break; + } + if (k & 1) + p = 1 - p; + return p; + } + + static const uint8_t g_zero_pattern[16] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; + + const uint8_t g_astc_bc7_patterns2[TOTAL_ASTC_BC7_COMMON_PARTITIONS2][16] = + { + { 0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1 }, { 0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1 }, { 1,0,0,0,1,0,0,0,1,0,0,0,1,0,0,0 }, { 0,0,0,1,0,0,1,1,0,0,1,1,0,1,1,1 }, + { 1,1,1,1,1,1,1,0,1,1,1,0,1,1,0,0 }, { 0,0,1,1,0,1,1,1,0,1,1,1,1,1,1,1 }, { 1,1,1,0,1,1,0,0,1,0,0,0,0,0,0,0 }, { 1,1,1,1,1,1,1,0,1,1,0,0,1,0,0,0 }, + { 0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1 }, { 1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0 }, { 0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1 }, { 1,1,1,1,1,1,1,1,1,1,1,0,1,0,0,0 }, + { 1,1,1,0,1,0,0,0,0,0,0,0,0,0,0,0 }, { 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0 }, { 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1 }, { 1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0 }, + { 1,0,0,0,1,1,1,0,1,1,1,1,1,1,1,1 }, { 1,1,1,1,1,1,1,1,0,1,1,1,0,0,0,1 }, { 0,1,1,1,0,0,1,1,0,0,0,1,0,0,0,0 }, { 0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0 }, + { 0,0,0,0,1,0,0,0,1,1,0,0,1,1,1,0 }, { 1,1,1,1,1,1,1,1,0,1,1,1,0,0,1,1 }, { 1,0,0,0,1,1,0,0,1,1,0,0,1,1,1,0 }, { 0,0,1,1,0,0,0,1,0,0,0,1,0,0,0,0 }, + { 1,1,1,1,0,1,1,1,0,1,1,1,0,0,1,1 }, { 0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0 }, { 1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1 }, { 1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0 }, + { 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0 }, { 1,0,0,1,0,0,1,1,0,1,1,0,1,1,0,0 } + }; + + const uint8_t g_astc_bc7_patterns3[TOTAL_ASTC_BC7_COMMON_PARTITIONS3][16] = + { + { 0,0,0,0,0,0,0,0,1,1,2,2,1,1,2,2 }, { 1,1,1,1,1,1,1,1,0,0,0,0,2,2,2,2 }, { 1,1,1,1,0,0,0,0,0,0,0,0,2,2,2,2 }, { 1,1,1,1,2,2,2,2,0,0,0,0,0,0,0,0 }, + { 1,1,2,0,1,1,2,0,1,1,2,0,1,1,2,0 }, { 0,1,1,2,0,1,1,2,0,1,1,2,0,1,1,2 }, { 0,2,1,1,0,2,1,1,0,2,1,1,0,2,1,1 }, { 2,0,0,0,2,0,0,0,2,1,1,1,2,1,1,1 }, + { 2,0,1,2,2,0,1,2,2,0,1,2,2,0,1,2 }, { 1,1,1,1,0,0,0,0,2,2,2,2,1,1,1,1 }, { 0,0,2,2,0,0,1,1,0,0,1,1,0,0,2,2 } + }; + + const uint8_t g_bc7_3_astc2_patterns2[TOTAL_BC7_3_ASTC2_COMMON_PARTITIONS][16] = + { + { 0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0 }, { 0,0,1,0,0,0,1,0,0,0,1,0,0,0,1,0 }, { 1,1,0,0,1,1,0,0,1,0,0,0,0,0,0,0 }, { 0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,1 }, + { 1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1 }, { 0,1,0,0,0,1,0,0,0,1,0,0,0,1,0,0 }, { 0,0,0,1,0,0,1,1,1,1,1,1,1,1,1,1 }, { 0,1,1,1,0,0,1,1,0,0,1,1,0,0,1,1 }, + { 1,1,0,0,0,0,0,0,0,0,1,1,1,1,0,0 }, { 0,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0 }, { 0,0,0,0,0,0,0,0,1,1,1,0,1,1,1,0 }, { 1,1,0,0,0,0,0,0,0,0,0,0,1,1,0,0 }, + { 0,1,1,1,0,0,1,1,0,0,0,0,0,0,0,0 }, { 0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1 }, { 1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0 }, { 1,1,0,0,1,1,0,0,1,1,0,0,1,0,0,0 }, + { 1,1,1,1,1,1,1,1,1,0,0,0,1,0,0,0 }, { 0,0,1,1,0,1,1,0,1,1,0,0,1,0,0,0 }, { 1,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0 } + }; + + const uint8_t g_astc_bc7_pattern2_anchors[TOTAL_ASTC_BC7_COMMON_PARTITIONS2][3] = + { + { 0, 2 }, { 0, 3 }, { 1, 0 }, { 0, 3 }, { 7, 0 }, { 0, 2 }, { 3, 0 }, { 7, 0 }, + { 0, 11 }, { 2, 0 }, { 0, 7 }, { 11, 0 }, { 3, 0 }, { 8, 0 }, { 0, 4 }, { 12, 0 }, + { 1, 0 }, { 8, 0 }, { 0, 1 }, { 0, 2 }, { 0, 4 }, { 8, 0 }, { 1, 0 }, { 0, 2 }, + { 4, 0 }, { 0, 1 }, { 4, 0 }, { 1, 0 }, { 4, 0 }, { 1, 0 } + }; + + const uint8_t g_astc_bc7_pattern3_anchors[TOTAL_ASTC_BC7_COMMON_PARTITIONS3][3] = + { + { 0, 8, 10 }, { 8, 0, 12 }, { 4, 0, 12 }, { 8, 0, 4 }, { 3, 0, 2 }, { 0, 1, 3 }, { 0, 2, 1 }, { 1, 9, 0 }, { 1, 2, 0 }, { 4, 0, 8 }, { 0, 6, 2 } + }; + + const uint8_t g_bc7_3_astc2_patterns2_anchors[TOTAL_BC7_3_ASTC2_COMMON_PARTITIONS][3] = + { + { 0, 4 }, { 0, 2 }, { 2, 0 }, { 0, 7 }, { 8, 0 }, { 0, 1 }, { 0, 3 }, { 0, 1 }, { 2, 0 }, { 0, 1 }, { 0, 8 }, { 2, 0 }, { 0, 1 }, { 0, 7 }, { 12, 0 }, { 2, 0 }, { 9, 0 }, { 0, 2 }, { 4, 0 } + }; + + const uint32_t g_uastc_mode_huff_codes[TOTAL_UASTC_MODES + 1][2] = + { + { 0x1, 4 }, + { 0x35, 6 }, + { 0x1D, 5 }, + { 0x3, 5 }, + + { 0x13, 5 }, + { 0xB, 5 }, + { 0x1B, 5 }, + { 0x7, 5 }, + + { 0x17, 5 }, + { 0xF, 5 }, + { 0x2, 3 }, + { 0x0, 2 }, + + { 0x6, 3 }, + { 0x1F, 5 }, + { 0xD, 5 }, + { 0x5, 7 }, + + { 0x15, 6 }, + { 0x25, 6 }, + { 0x9, 4 }, + { 0x45, 7 } // future expansion + }; + + // If g_uastc_mode_huff_codes[] changes this table must be updated! + static const uint8_t g_uastc_huff_modes[128] = + { + 11,0,10,3,11,15,12,7,11,18,10,5,11,14,12,9,11,0,10,4,11,16,12,8,11,18,10,6,11,2,12,13,11,0,10,3,11,17,12,7,11,18,10,5,11,14,12,9,11,0,10,4,11,1,12,8,11,18,10,6,11,2,12,13,11,0,10,3,11, + 19,12,7,11,18,10,5,11,14,12,9,11,0,10,4,11,16,12,8,11,18,10,6,11,2,12,13,11,0,10,3,11,17,12,7,11,18,10,5,11,14,12,9,11,0,10,4,11,1,12,8,11,18,10,6,11,2,12,13 + }; + + const uint8_t g_uastc_mode_weight_bits[TOTAL_UASTC_MODES] = { 4, 2, 3, 2, 2, 3, 2, 2, 0, 2, 4, 2, 3, 1, 2, 4, 2, 2, 5 }; + const uint8_t g_uastc_mode_weight_ranges[TOTAL_UASTC_MODES] = { 8, 2, 5, 2, 2, 5, 2, 2, 0, 2, 8, 2, 5, 0, 2, 8, 2, 2, 11 }; + const uint8_t g_uastc_mode_endpoint_ranges[TOTAL_UASTC_MODES] = { 19, 20, 8, 7, 12, 20, 18, 12, 0, 8, 13, 13, 19, 20, 20, 20, 20, 20, 11 }; + const uint8_t g_uastc_mode_subsets[TOTAL_UASTC_MODES] = { 1, 1, 2, 3, 2, 1, 1, 2, 0, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1 }; + const uint8_t g_uastc_mode_planes[TOTAL_UASTC_MODES] = { 1, 1, 1, 1, 1, 1, 2, 1, 0, 1, 1, 2, 1, 2, 1, 1, 1, 2, 1 }; + const uint8_t g_uastc_mode_comps[TOTAL_UASTC_MODES] = { 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 2, 2, 2, 3 }; + const uint8_t g_uastc_mode_has_etc1_bias[TOTAL_UASTC_MODES] = { 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1 }; + const uint8_t g_uastc_mode_has_bc1_hint0[TOTAL_UASTC_MODES] = { 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; + const uint8_t g_uastc_mode_has_bc1_hint1[TOTAL_UASTC_MODES] = { 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1 }; + const uint8_t g_uastc_mode_cem[TOTAL_UASTC_MODES] = { 8, 8, 8, 8, 8, 8, 8, 8, 0, 12, 12, 12, 12, 12, 12, 4, 4, 4, 8 }; + const uint8_t g_uastc_mode_has_alpha[TOTAL_UASTC_MODES] = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 }; + const uint8_t g_uastc_mode_is_la[TOTAL_UASTC_MODES] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0 }; + const uint8_t g_uastc_mode_total_hint_bits[TOTAL_UASTC_MODES] = { 15, 15, 15, 15, 15, 15, 15, 15, 0, 23, 17, 17, 17, 23, 23, 23, 23, 23, 15 }; + + // bits, trits, quints + const int g_astc_bise_range_table[TOTAL_ASTC_RANGES][3] = + { + { 1, 0, 0 }, // 0-1 0 + { 0, 1, 0 }, // 0-2 1 + { 2, 0, 0 }, // 0-3 2 + { 0, 0, 1 }, // 0-4 3 + + { 1, 1, 0 }, // 0-5 4 + { 3, 0, 0 }, // 0-7 5 + { 1, 0, 1 }, // 0-9 6 + { 2, 1, 0 }, // 0-11 7 + + { 4, 0, 0 }, // 0-15 8 + { 2, 0, 1 }, // 0-19 9 + { 3, 1, 0 }, // 0-23 10 + { 5, 0, 0 }, // 0-31 11 + + { 3, 0, 1 }, // 0-39 12 + { 4, 1, 0 }, // 0-47 13 + { 6, 0, 0 }, // 0-63 14 + { 4, 0, 1 }, // 0-79 15 + + { 5, 1, 0 }, // 0-95 16 + { 7, 0, 0 }, // 0-127 17 + { 5, 0, 1 }, // 0-159 18 + { 6, 1, 0 }, // 0-191 19 + + { 8, 0, 0 }, // 0-255 20 + }; + + int astc_get_levels(int range) + { + assert(range < (int)BC7ENC_TOTAL_ASTC_RANGES); + return (1 + 2 * g_astc_bise_range_table[range][1] + 4 * g_astc_bise_range_table[range][2]) << g_astc_bise_range_table[range][0]; + } + + // g_astc_unquant[] is the inverse of g_astc_sorted_order_unquant[] + astc_quant_bin g_astc_unquant[BC7ENC_TOTAL_ASTC_RANGES][256]; // [ASTC encoded endpoint index] + + // Taken right from the ASTC spec. + static struct + { + const char* m_pB_str; + uint32_t m_c; + } g_astc_endpoint_unquant_params[BC7ENC_TOTAL_ASTC_RANGES] = + { + { "", 0 }, + { "", 0 }, + { "", 0 }, + { "", 0 }, + { "000000000", 204, }, // 0-5 + { "", 0 }, + { "000000000", 113, }, // 0-9 + { "b000b0bb0", 93 }, // 0-11 + { "", 0 }, + { "b0000bb00", 54 }, // 0-19 + { "cb000cbcb", 44 }, // 0-23 + { "", 0 }, + { "cb0000cbc", 26 }, // 0-39 + { "dcb000dcb", 22 }, // 0-47 + { "", 0 }, + { "dcb0000dc", 13 }, // 0-79 + { "edcb000ed", 11 }, // 0-95 + { "", 0 }, + { "edcb0000e", 6 }, // 0-159 + { "fedcb000f", 5 }, // 0-191 + { "", 0 }, + }; + + bool astc_is_valid_endpoint_range(uint32_t range) + { + if ((g_astc_bise_range_table[range][1] == 0) && (g_astc_bise_range_table[range][2] == 0)) + return true; + + return g_astc_endpoint_unquant_params[range].m_c != 0; + } + + uint32_t unquant_astc_endpoint(uint32_t packed_bits, uint32_t packed_trits, uint32_t packed_quints, uint32_t range) + { + assert(range < BC7ENC_TOTAL_ASTC_RANGES); + + const uint32_t bits = g_astc_bise_range_table[range][0]; + const uint32_t trits = g_astc_bise_range_table[range][1]; + const uint32_t quints = g_astc_bise_range_table[range][2]; + + uint32_t val = 0; + if ((!trits) && (!quints)) + { + assert(!packed_trits && !packed_quints); + + int bits_left = 8; + while (bits_left > 0) + { + uint32_t v = packed_bits; + + int n = basisu::minimumi(bits_left, bits); + if (n < (int)bits) + v >>= (bits - n); + + assert(v < (1U << n)); + + val |= (v << (bits_left - n)); + bits_left -= n; + } + } + else + { + const uint32_t A = (packed_bits & 1) ? 511 : 0; + const uint32_t C = g_astc_endpoint_unquant_params[range].m_c; + const uint32_t D = trits ? packed_trits : packed_quints; + + assert(C); + + uint32_t B = 0; + for (uint32_t i = 0; i < 9; i++) + { + B <<= 1; + + char c = g_astc_endpoint_unquant_params[range].m_pB_str[i]; + if (c != '0') + { + c -= 'a'; + B |= ((packed_bits >> c) & 1); + } + } + + val = D * C + B; + val = val ^ A; + val = (A & 0x80) | (val >> 2); + } + + return val; + } + + uint32_t unquant_astc_endpoint_val(uint32_t packed_val, uint32_t range) + { + assert(range < BC7ENC_TOTAL_ASTC_RANGES); + assert(packed_val < (uint32_t)astc_get_levels(range)); + + const uint32_t bits = g_astc_bise_range_table[range][0]; + const uint32_t trits = g_astc_bise_range_table[range][1]; + const uint32_t quints = g_astc_bise_range_table[range][2]; + + if ((!trits) && (!quints)) + return unquant_astc_endpoint(packed_val, 0, 0, range); + else if (trits) + return unquant_astc_endpoint(packed_val & ((1 << bits) - 1), packed_val >> bits, 0, range); + else + return unquant_astc_endpoint(packed_val & ((1 << bits) - 1), 0, packed_val >> bits, range); + } + + // BC7 - Various BC7 tables/helpers + const uint32_t g_bc7_weights1[2] = { 0, 64 }; + const uint32_t g_bc7_weights2[4] = { 0, 21, 43, 64 }; + const uint32_t g_bc7_weights3[8] = { 0, 9, 18, 27, 37, 46, 55, 64 }; + const uint32_t g_bc7_weights4[16] = { 0, 4, 9, 13, 17, 21, 26, 30, 34, 38, 43, 47, 51, 55, 60, 64 }; + const uint32_t g_astc_weights4[16] = { 0, 4, 8, 12, 17, 21, 25, 29, 35, 39, 43, 47, 52, 56, 60, 64 }; + const uint32_t g_astc_weights5[32] = { 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64 }; + const uint32_t g_astc_weights_3levels[3] = { 0, 32, 64 }; + + const uint8_t g_bc7_partition1[16] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }; + + const uint8_t g_bc7_partition2[64 * 16] = + { + 0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1, 0,0,0,1,0,0,0,1,0,0,0,1,0,0,0,1, 0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1, 0,0,0,1,0,0,1,1,0,0,1,1,0,1,1,1, 0,0,0,0,0,0,0,1,0,0,0,1,0,0,1,1, 0,0,1,1,0,1,1,1,0,1,1,1,1,1,1,1, 0,0,0,1,0,0,1,1,0,1,1,1,1,1,1,1, 0,0,0,0,0,0,0,1,0,0,1,1,0,1,1,1, + 0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,1, 0,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1, 0,0,0,0,0,0,0,1,0,1,1,1,1,1,1,1, 0,0,0,0,0,0,0,0,0,0,0,1,0,1,1,1, 0,0,0,1,0,1,1,1,1,1,1,1,1,1,1,1, 0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1, 0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1, 0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1, + 0,0,0,0,1,0,0,0,1,1,1,0,1,1,1,1, 0,1,1,1,0,0,0,1,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,0, 0,1,1,1,0,0,1,1,0,0,0,1,0,0,0,0, 0,0,1,1,0,0,0,1,0,0,0,0,0,0,0,0, 0,0,0,0,1,0,0,0,1,1,0,0,1,1,1,0, 0,0,0,0,0,0,0,0,1,0,0,0,1,1,0,0, 0,1,1,1,0,0,1,1,0,0,1,1,0,0,0,1, + 0,0,1,1,0,0,0,1,0,0,0,1,0,0,0,0, 0,0,0,0,1,0,0,0,1,0,0,0,1,1,0,0, 0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0, 0,0,1,1,0,1,1,0,0,1,1,0,1,1,0,0, 0,0,0,1,0,1,1,1,1,1,1,0,1,0,0,0, 0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0, 0,1,1,1,0,0,0,1,1,0,0,0,1,1,1,0, 0,0,1,1,1,0,0,1,1,0,0,1,1,1,0,0, + 0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1, 0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1, 0,1,0,1,1,0,1,0,0,1,0,1,1,0,1,0, 0,0,1,1,0,0,1,1,1,1,0,0,1,1,0,0, 0,0,1,1,1,1,0,0,0,0,1,1,1,1,0,0, 0,1,0,1,0,1,0,1,1,0,1,0,1,0,1,0, 0,1,1,0,1,0,0,1,0,1,1,0,1,0,0,1, 0,1,0,1,1,0,1,0,1,0,1,0,0,1,0,1, + 0,1,1,1,0,0,1,1,1,1,0,0,1,1,1,0, 0,0,0,1,0,0,1,1,1,1,0,0,1,0,0,0, 0,0,1,1,0,0,1,0,0,1,0,0,1,1,0,0, 0,0,1,1,1,0,1,1,1,1,0,1,1,1,0,0, 0,1,1,0,1,0,0,1,1,0,0,1,0,1,1,0, 0,0,1,1,1,1,0,0,1,1,0,0,0,0,1,1, 0,1,1,0,0,1,1,0,1,0,0,1,1,0,0,1, 0,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0, + 0,1,0,0,1,1,1,0,0,1,0,0,0,0,0,0, 0,0,1,0,0,1,1,1,0,0,1,0,0,0,0,0, 0,0,0,0,0,0,1,0,0,1,1,1,0,0,1,0, 0,0,0,0,0,1,0,0,1,1,1,0,0,1,0,0, 0,1,1,0,1,1,0,0,1,0,0,1,0,0,1,1, 0,0,1,1,0,1,1,0,1,1,0,0,1,0,0,1, 0,1,1,0,0,0,1,1,1,0,0,1,1,1,0,0, 0,0,1,1,1,0,0,1,1,1,0,0,0,1,1,0, + 0,1,1,0,1,1,0,0,1,1,0,0,1,0,0,1, 0,1,1,0,0,0,1,1,0,0,1,1,1,0,0,1, 0,1,1,1,1,1,1,0,1,0,0,0,0,0,0,1, 0,0,0,1,1,0,0,0,1,1,1,0,0,1,1,1, 0,0,0,0,1,1,1,1,0,0,1,1,0,0,1,1, 0,0,1,1,0,0,1,1,1,1,1,1,0,0,0,0, 0,0,1,0,0,0,1,0,1,1,1,0,1,1,1,0, 0,1,0,0,0,1,0,0,0,1,1,1,0,1,1,1 + }; + + const uint8_t g_bc7_partition3[64 * 16] = + { + 0,0,1,1,0,0,1,1,0,2,2,1,2,2,2,2, 0,0,0,1,0,0,1,1,2,2,1,1,2,2,2,1, 0,0,0,0,2,0,0,1,2,2,1,1,2,2,1,1, 0,2,2,2,0,0,2,2,0,0,1,1,0,1,1,1, 0,0,0,0,0,0,0,0,1,1,2,2,1,1,2,2, 0,0,1,1,0,0,1,1,0,0,2,2,0,0,2,2, 0,0,2,2,0,0,2,2,1,1,1,1,1,1,1,1, 0,0,1,1,0,0,1,1,2,2,1,1,2,2,1,1, + 0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2, 0,0,0,0,1,1,1,1,1,1,1,1,2,2,2,2, 0,0,0,0,1,1,1,1,2,2,2,2,2,2,2,2, 0,0,1,2,0,0,1,2,0,0,1,2,0,0,1,2, 0,1,1,2,0,1,1,2,0,1,1,2,0,1,1,2, 0,1,2,2,0,1,2,2,0,1,2,2,0,1,2,2, 0,0,1,1,0,1,1,2,1,1,2,2,1,2,2,2, 0,0,1,1,2,0,0,1,2,2,0,0,2,2,2,0, + 0,0,0,1,0,0,1,1,0,1,1,2,1,1,2,2, 0,1,1,1,0,0,1,1,2,0,0,1,2,2,0,0, 0,0,0,0,1,1,2,2,1,1,2,2,1,1,2,2, 0,0,2,2,0,0,2,2,0,0,2,2,1,1,1,1, 0,1,1,1,0,1,1,1,0,2,2,2,0,2,2,2, 0,0,0,1,0,0,0,1,2,2,2,1,2,2,2,1, 0,0,0,0,0,0,1,1,0,1,2,2,0,1,2,2, 0,0,0,0,1,1,0,0,2,2,1,0,2,2,1,0, + 0,1,2,2,0,1,2,2,0,0,1,1,0,0,0,0, 0,0,1,2,0,0,1,2,1,1,2,2,2,2,2,2, 0,1,1,0,1,2,2,1,1,2,2,1,0,1,1,0, 0,0,0,0,0,1,1,0,1,2,2,1,1,2,2,1, 0,0,2,2,1,1,0,2,1,1,0,2,0,0,2,2, 0,1,1,0,0,1,1,0,2,0,0,2,2,2,2,2, 0,0,1,1,0,1,2,2,0,1,2,2,0,0,1,1, 0,0,0,0,2,0,0,0,2,2,1,1,2,2,2,1, + 0,0,0,0,0,0,0,2,1,1,2,2,1,2,2,2, 0,2,2,2,0,0,2,2,0,0,1,2,0,0,1,1, 0,0,1,1,0,0,1,2,0,0,2,2,0,2,2,2, 0,1,2,0,0,1,2,0,0,1,2,0,0,1,2,0, 0,0,0,0,1,1,1,1,2,2,2,2,0,0,0,0, 0,1,2,0,1,2,0,1,2,0,1,2,0,1,2,0, 0,1,2,0,2,0,1,2,1,2,0,1,0,1,2,0, 0,0,1,1,2,2,0,0,1,1,2,2,0,0,1,1, + 0,0,1,1,1,1,2,2,2,2,0,0,0,0,1,1, 0,1,0,1,0,1,0,1,2,2,2,2,2,2,2,2, 0,0,0,0,0,0,0,0,2,1,2,1,2,1,2,1, 0,0,2,2,1,1,2,2,0,0,2,2,1,1,2,2, 0,0,2,2,0,0,1,1,0,0,2,2,0,0,1,1, 0,2,2,0,1,2,2,1,0,2,2,0,1,2,2,1, 0,1,0,1,2,2,2,2,2,2,2,2,0,1,0,1, 0,0,0,0,2,1,2,1,2,1,2,1,2,1,2,1, + 0,1,0,1,0,1,0,1,0,1,0,1,2,2,2,2, 0,2,2,2,0,1,1,1,0,2,2,2,0,1,1,1, 0,0,0,2,1,1,1,2,0,0,0,2,1,1,1,2, 0,0,0,0,2,1,1,2,2,1,1,2,2,1,1,2, 0,2,2,2,0,1,1,1,0,1,1,1,0,2,2,2, 0,0,0,2,1,1,1,2,1,1,1,2,0,0,0,2, 0,1,1,0,0,1,1,0,0,1,1,0,2,2,2,2, 0,0,0,0,0,0,0,0,2,1,1,2,2,1,1,2, + 0,1,1,0,0,1,1,0,2,2,2,2,2,2,2,2, 0,0,2,2,0,0,1,1,0,0,1,1,0,0,2,2, 0,0,2,2,1,1,2,2,1,1,2,2,0,0,2,2, 0,0,0,0,0,0,0,0,0,0,0,0,2,1,1,2, 0,0,0,2,0,0,0,1,0,0,0,2,0,0,0,1, 0,2,2,2,1,2,2,2,0,2,2,2,1,2,2,2, 0,1,0,1,2,2,2,2,2,2,2,2,2,2,2,2, 0,1,1,1,2,0,1,1,2,2,0,1,2,2,2,0, + }; + + const uint8_t g_bc7_table_anchor_index_second_subset[64] = { 15,15,15,15,15,15,15,15, 15,15,15,15,15,15,15,15, 15, 2, 8, 2, 2, 8, 8,15, 2, 8, 2, 2, 8, 8, 2, 2, 15,15, 6, 8, 2, 8,15,15, 2, 8, 2, 2, 2,15,15, 6, 6, 2, 6, 8,15,15, 2, 2, 15,15,15,15,15, 2, 2,15 }; + + const uint8_t g_bc7_table_anchor_index_third_subset_1[64] = + { + 3, 3,15,15, 8, 3,15,15, 8, 8, 6, 6, 6, 5, 3, 3, 3, 3, 8,15, 3, 3, 6,10, 5, 8, 8, 6, 8, 5,15,15, 8,15, 3, 5, 6,10, 8,15, 15, 3,15, 5,15,15,15,15, 3,15, 5, 5, 5, 8, 5,10, 5,10, 8,13,15,12, 3, 3 + }; + + const uint8_t g_bc7_table_anchor_index_third_subset_2[64] = + { + 15, 8, 8, 3,15,15, 3, 8, 15,15,15,15,15,15,15, 8, 15, 8,15, 3,15, 8,15, 8, 3,15, 6,10,15,15,10, 8, 15, 3,15,10,10, 8, 9,10, 6,15, 8,15, 3, 6, 6, 8, 15, 3,15,15,15,15,15,15, 15,15,15,15, 3,15,15, 8 + }; + + const uint8_t g_bc7_num_subsets[8] = { 3, 2, 3, 2, 1, 1, 1, 2 }; + const uint8_t g_bc7_partition_bits[8] = { 4, 6, 6, 6, 0, 0, 0, 6 }; + const uint8_t g_bc7_color_index_bitcount[8] = { 3, 3, 2, 2, 2, 2, 4, 2 }; + + const uint8_t g_bc7_mode_has_p_bits[8] = { 1, 1, 0, 1, 0, 0, 1, 1 }; + const uint8_t g_bc7_mode_has_shared_p_bits[8] = { 0, 1, 0, 0, 0, 0, 0, 0 }; + const uint8_t g_bc7_color_precision_table[8] = { 4, 6, 5, 7, 5, 7, 7, 5 }; + const int8_t g_bc7_alpha_precision_table[8] = { 0, 0, 0, 0, 6, 8, 7, 5 }; + + const uint8_t g_bc7_alpha_index_bitcount[8] = { 0, 0, 0, 0, 3, 2, 4, 2 }; + + endpoint_err g_bc7_mode_6_optimal_endpoints[256][2]; // [c][pbit] + endpoint_err g_bc7_mode_5_optimal_endpoints[256]; // [c] + + static inline void bc7_set_block_bits(uint8_t* pBytes, uint32_t val, uint32_t num_bits, uint32_t* pCur_ofs) + { + assert((num_bits <= 32) && (val < (1ULL << num_bits))); + while (num_bits) + { + const uint32_t n = basisu::minimumu(8 - (*pCur_ofs & 7), num_bits); + pBytes[*pCur_ofs >> 3] |= (uint8_t)(val << (*pCur_ofs & 7)); + val >>= n; + num_bits -= n; + *pCur_ofs += n; + } + assert(*pCur_ofs <= 128); + } + + // TODO: Optimize this. + void encode_bc7_block(void* pBlock, const bc7_optimization_results* pResults) + { + const uint32_t best_mode = pResults->m_mode; + + const uint32_t total_subsets = g_bc7_num_subsets[best_mode]; + const uint32_t total_partitions = 1 << g_bc7_partition_bits[best_mode]; + //const uint32_t num_rotations = 1 << g_bc7_rotation_bits[best_mode]; + //const uint32_t num_index_selectors = (best_mode == 4) ? 2 : 1; + + const uint8_t* pPartition; + if (total_subsets == 1) + pPartition = &g_bc7_partition1[0]; + else if (total_subsets == 2) + pPartition = &g_bc7_partition2[pResults->m_partition * 16]; + else + pPartition = &g_bc7_partition3[pResults->m_partition * 16]; + + uint8_t color_selectors[16]; + memcpy(color_selectors, pResults->m_selectors, 16); + + uint8_t alpha_selectors[16]; + memcpy(alpha_selectors, pResults->m_alpha_selectors, 16); + + color_quad_u8 low[3], high[3]; + memcpy(low, pResults->m_low, sizeof(low)); + memcpy(high, pResults->m_high, sizeof(high)); + + uint32_t pbits[3][2]; + memcpy(pbits, pResults->m_pbits, sizeof(pbits)); + + int anchor[3] = { -1, -1, -1 }; + + for (uint32_t k = 0; k < total_subsets; k++) + { + uint32_t anchor_index = 0; + if (k) + { + if ((total_subsets == 3) && (k == 1)) + anchor_index = g_bc7_table_anchor_index_third_subset_1[pResults->m_partition]; + else if ((total_subsets == 3) && (k == 2)) + anchor_index = g_bc7_table_anchor_index_third_subset_2[pResults->m_partition]; + else + anchor_index = g_bc7_table_anchor_index_second_subset[pResults->m_partition]; + } + + anchor[k] = anchor_index; + + const uint32_t color_index_bits = get_bc7_color_index_size(best_mode, pResults->m_index_selector); + const uint32_t num_color_indices = 1 << color_index_bits; + + if (color_selectors[anchor_index] & (num_color_indices >> 1)) + { + for (uint32_t i = 0; i < 16; i++) + if (pPartition[i] == k) + color_selectors[i] = (uint8_t)((num_color_indices - 1) - color_selectors[i]); + + if (get_bc7_mode_has_seperate_alpha_selectors(best_mode)) + { + for (uint32_t q = 0; q < 3; q++) + { + uint8_t t = low[k].m_c[q]; + low[k].m_c[q] = high[k].m_c[q]; + high[k].m_c[q] = t; + } + } + else + { + color_quad_u8 tmp = low[k]; + low[k] = high[k]; + high[k] = tmp; + } + + if (!g_bc7_mode_has_shared_p_bits[best_mode]) + { + uint32_t t = pbits[k][0]; + pbits[k][0] = pbits[k][1]; + pbits[k][1] = t; + } + } + + if (get_bc7_mode_has_seperate_alpha_selectors(best_mode)) + { + const uint32_t alpha_index_bits = get_bc7_alpha_index_size(best_mode, pResults->m_index_selector); + const uint32_t num_alpha_indices = 1 << alpha_index_bits; + + if (alpha_selectors[anchor_index] & (num_alpha_indices >> 1)) + { + for (uint32_t i = 0; i < 16; i++) + if (pPartition[i] == k) + alpha_selectors[i] = (uint8_t)((num_alpha_indices - 1) - alpha_selectors[i]); + + uint8_t t = low[k].m_c[3]; + low[k].m_c[3] = high[k].m_c[3]; + high[k].m_c[3] = t; + } + } + } + + uint8_t* pBlock_bytes = (uint8_t*)(pBlock); + memset(pBlock_bytes, 0, BC7ENC_BLOCK_SIZE); + + uint32_t cur_bit_ofs = 0; + bc7_set_block_bits(pBlock_bytes, 1 << best_mode, best_mode + 1, &cur_bit_ofs); + + if ((best_mode == 4) || (best_mode == 5)) + bc7_set_block_bits(pBlock_bytes, pResults->m_rotation, 2, &cur_bit_ofs); + + if (best_mode == 4) + bc7_set_block_bits(pBlock_bytes, pResults->m_index_selector, 1, &cur_bit_ofs); + + if (total_partitions > 1) + bc7_set_block_bits(pBlock_bytes, pResults->m_partition, (total_partitions == 64) ? 6 : 4, &cur_bit_ofs); + + const uint32_t total_comps = (best_mode >= 4) ? 4 : 3; + for (uint32_t comp = 0; comp < total_comps; comp++) + { + for (uint32_t subset = 0; subset < total_subsets; subset++) + { + bc7_set_block_bits(pBlock_bytes, low[subset].m_c[comp], (comp == 3) ? g_bc7_alpha_precision_table[best_mode] : g_bc7_color_precision_table[best_mode], &cur_bit_ofs); + bc7_set_block_bits(pBlock_bytes, high[subset].m_c[comp], (comp == 3) ? g_bc7_alpha_precision_table[best_mode] : g_bc7_color_precision_table[best_mode], &cur_bit_ofs); + } + } + + if (g_bc7_mode_has_p_bits[best_mode]) + { + for (uint32_t subset = 0; subset < total_subsets; subset++) + { + bc7_set_block_bits(pBlock_bytes, pbits[subset][0], 1, &cur_bit_ofs); + if (!g_bc7_mode_has_shared_p_bits[best_mode]) + bc7_set_block_bits(pBlock_bytes, pbits[subset][1], 1, &cur_bit_ofs); + } + } + + for (uint32_t y = 0; y < 4; y++) + { + for (uint32_t x = 0; x < 4; x++) + { + int idx = x + y * 4; + + uint32_t n = pResults->m_index_selector ? get_bc7_alpha_index_size(best_mode, pResults->m_index_selector) : get_bc7_color_index_size(best_mode, pResults->m_index_selector); + + if ((idx == anchor[0]) || (idx == anchor[1]) || (idx == anchor[2])) + n--; + + bc7_set_block_bits(pBlock_bytes, pResults->m_index_selector ? alpha_selectors[idx] : color_selectors[idx], n, &cur_bit_ofs); + } + } + + if (get_bc7_mode_has_seperate_alpha_selectors(best_mode)) + { + for (uint32_t y = 0; y < 4; y++) + { + for (uint32_t x = 0; x < 4; x++) + { + int idx = x + y * 4; + + uint32_t n = pResults->m_index_selector ? get_bc7_color_index_size(best_mode, pResults->m_index_selector) : get_bc7_alpha_index_size(best_mode, pResults->m_index_selector); + + if ((idx == anchor[0]) || (idx == anchor[1]) || (idx == anchor[2])) + n--; + + bc7_set_block_bits(pBlock_bytes, pResults->m_index_selector ? color_selectors[idx] : alpha_selectors[idx], n, &cur_bit_ofs); + } + } + } + + assert(cur_bit_ofs == 128); + } + + // ASTC + static inline void astc_set_bits_1_to_9(uint32_t* pDst, int& bit_offset, uint32_t code, uint32_t codesize) + { + uint8_t* pBuf = reinterpret_cast(pDst); + + assert(codesize <= 9); + if (codesize) + { + uint32_t byte_bit_offset = bit_offset & 7; + uint32_t val = code << byte_bit_offset; + + uint32_t index = bit_offset >> 3; + pBuf[index] |= (uint8_t)val; + + if (codesize > (8 - byte_bit_offset)) + pBuf[index + 1] |= (uint8_t)(val >> 8); + + bit_offset += codesize; + } + } + + void pack_astc_solid_block(void* pDst_block, const color32& color) + { + uint32_t r = color[0], g = color[1], b = color[2]; + uint32_t a = color[3]; + + uint32_t* pOutput = static_cast(pDst_block); + uint8_t* pBytes = reinterpret_cast(pDst_block); + + pBytes[0] = 0xfc; pBytes[1] = 0xfd; pBytes[2] = 0xff; pBytes[3] = 0xff; + + pOutput[1] = 0xffffffff; + pOutput[2] = 0; + pOutput[3] = 0; + + int bit_pos = 64; + astc_set_bits(reinterpret_cast(pDst_block), bit_pos, r | (r << 8), 16); + astc_set_bits(reinterpret_cast(pDst_block), bit_pos, g | (g << 8), 16); + astc_set_bits(reinterpret_cast(pDst_block), bit_pos, b | (b << 8), 16); + astc_set_bits(reinterpret_cast(pDst_block), bit_pos, a | (a << 8), 16); + } + + // See 23.21 https://www.khronos.org/registry/DataFormat/specs/1.3/dataformat.1.3.inline.html#_partition_pattern_generation +#ifdef _DEBUG + static inline uint32_t astc_hash52(uint32_t v) + { + uint32_t p = v; + p ^= p >> 15; p -= p << 17; p += p << 7; p += p << 4; + p ^= p >> 5; p += p << 16; p ^= p >> 7; p ^= p >> 3; + p ^= p << 6; p ^= p >> 17; + return p; + } + + int astc_compute_texel_partition(int seed, int x, int y, int z, int partitioncount, bool small_block) + { + if (small_block) + { + x <<= 1; y <<= 1; z <<= 1; + } + seed += (partitioncount - 1) * 1024; + uint32_t rnum = astc_hash52(seed); + uint8_t seed1 = rnum & 0xF; + uint8_t seed2 = (rnum >> 4) & 0xF; + uint8_t seed3 = (rnum >> 8) & 0xF; + uint8_t seed4 = (rnum >> 12) & 0xF; + uint8_t seed5 = (rnum >> 16) & 0xF; + uint8_t seed6 = (rnum >> 20) & 0xF; + uint8_t seed7 = (rnum >> 24) & 0xF; + uint8_t seed8 = (rnum >> 28) & 0xF; + uint8_t seed9 = (rnum >> 18) & 0xF; + uint8_t seed10 = (rnum >> 22) & 0xF; + uint8_t seed11 = (rnum >> 26) & 0xF; + uint8_t seed12 = ((rnum >> 30) | (rnum << 2)) & 0xF; + + seed1 *= seed1; seed2 *= seed2; + seed3 *= seed3; seed4 *= seed4; + seed5 *= seed5; seed6 *= seed6; + seed7 *= seed7; seed8 *= seed8; + seed9 *= seed9; seed10 *= seed10; + seed11 *= seed11; seed12 *= seed12; + + int sh1, sh2, sh3; + if (seed & 1) + { + sh1 = (seed & 2 ? 4 : 5); sh2 = (partitioncount == 3 ? 6 : 5); + } + else + { + sh1 = (partitioncount == 3 ? 6 : 5); sh2 = (seed & 2 ? 4 : 5); + } + sh3 = (seed & 0x10) ? sh1 : sh2; + + seed1 >>= sh1; seed2 >>= sh2; seed3 >>= sh1; seed4 >>= sh2; + seed5 >>= sh1; seed6 >>= sh2; seed7 >>= sh1; seed8 >>= sh2; + seed9 >>= sh3; seed10 >>= sh3; seed11 >>= sh3; seed12 >>= sh3; + + int a = seed1 * x + seed2 * y + seed11 * z + (rnum >> 14); + int b = seed3 * x + seed4 * y + seed12 * z + (rnum >> 10); + int c = seed5 * x + seed6 * y + seed9 * z + (rnum >> 6); + int d = seed7 * x + seed8 * y + seed10 * z + (rnum >> 2); + + a &= 0x3F; b &= 0x3F; c &= 0x3F; d &= 0x3F; + + if (partitioncount < 4) d = 0; + if (partitioncount < 3) c = 0; + + if (a >= b && a >= c && a >= d) + return 0; + else if (b >= c && b >= d) + return 1; + else if (c >= d) + return 2; + else + return 3; + } +#endif + + static const uint8_t g_astc_quint_encode[125] = + { + 0, 1, 2, 3, 4, 8, 9, 10, 11, 12, 16, 17, 18, 19, 20, 24, 25, 26, 27, 28, 5, 13, 21, 29, 6, 32, 33, 34, 35, 36, 40, 41, 42, 43, 44, 48, 49, 50, 51, 52, 56, 57, + 58, 59, 60, 37, 45, 53, 61, 14, 64, 65, 66, 67, 68, 72, 73, 74, 75, 76, 80, 81, 82, 83, 84, 88, 89, 90, 91, 92, 69, 77, 85, 93, 22, 96, 97, 98, 99, 100, 104, + 105, 106, 107, 108, 112, 113, 114, 115, 116, 120, 121, 122, 123, 124, 101, 109, 117, 125, 30, 102, 103, 70, 71, 38, 110, 111, 78, 79, 46, 118, 119, 86, 87, 54, + 126, 127, 94, 95, 62, 39, 47, 55, 63, 31 + }; + + // Encodes 3 values to output, usable for any range that uses quints and bits + static inline void astc_encode_quints(uint32_t* pOutput, const uint8_t* pValues, int& bit_pos, int n) + { + // First extract the trits and the bits from the 5 input values + int quints = 0, bits[3]; + const uint32_t bit_mask = (1 << n) - 1; + for (int i = 0; i < 3; i++) + { + static const int s_muls[3] = { 1, 5, 25 }; + + const int t = pValues[i] >> n; + + quints += t * s_muls[i]; + bits[i] = pValues[i] & bit_mask; + } + + // Encode the quints, by inverting the bit manipulations done by the decoder, converting 3 quints into 7-bits. + // See https://www.khronos.org/registry/DataFormat/specs/1.2/dataformat.1.2.html#astc-integer-sequence-encoding + + assert(quints < 125); + const int T = g_astc_quint_encode[quints]; + + // Now interleave the 7 encoded quint bits with the bits to form the encoded output. See table 95-96. + astc_set_bits(pOutput, bit_pos, bits[0] | (astc_extract_bits(T, 0, 2) << n) | (bits[1] << (3 + n)) | (astc_extract_bits(T, 3, 4) << (3 + n * 2)) | + (bits[2] << (5 + n * 2)) | (astc_extract_bits(T, 5, 6) << (5 + n * 3)), 7 + n * 3); + } + + // Packs values using ASTC's BISE to output buffer. + static void astc_pack_bise(uint32_t* pDst, const uint8_t* pSrc_vals, int bit_pos, int num_vals, int range) + { + uint32_t temp[5] = { 0, 0, 0, 0, 0 }; + + const int num_bits = g_astc_bise_range_table[range][0]; + + int group_size = 0; + if (g_astc_bise_range_table[range][1]) + group_size = 5; + else if (g_astc_bise_range_table[range][2]) + group_size = 3; + + if (group_size) + { + // Range has trits or quints - pack each group of 5 or 3 values + const int total_groups = (group_size == 5) ? ((num_vals + 4) / 5) : ((num_vals + 2) / 3); + + for (int group_index = 0; group_index < total_groups; group_index++) + { + uint8_t vals[5] = { 0, 0, 0, 0, 0 }; + + const int limit = std::min(group_size, num_vals - group_index * group_size); + for (int i = 0; i < limit; i++) + vals[i] = pSrc_vals[group_index * group_size + i]; + + if (group_size == 5) + astc_encode_trits(temp, vals, bit_pos, num_bits); + else + astc_encode_quints(temp, vals, bit_pos, num_bits); + } + } + else + { + for (int i = 0; i < num_vals; i++) + astc_set_bits_1_to_9(temp, bit_pos, pSrc_vals[i], num_bits); + } + + pDst[0] |= temp[0]; pDst[1] |= temp[1]; + pDst[2] |= temp[2]; pDst[3] |= temp[3]; + } + + const uint32_t ASTC_BLOCK_MODE_BITS = 11; + const uint32_t ASTC_PART_BITS = 2; + const uint32_t ASTC_CEM_BITS = 4; + const uint32_t ASTC_PARTITION_INDEX_BITS = 10; + const uint32_t ASTC_CCS_BITS = 2; + + const uint32_t g_uastc_mode_astc_block_mode[TOTAL_UASTC_MODES] = { 0x242, 0x42, 0x53, 0x42, 0x42, 0x53, 0x442, 0x42, 0, 0x42, 0x242, 0x442, 0x53, 0x441, 0x42, 0x242, 0x42, 0x442, 0x253 }; + + bool pack_astc_block(uint32_t* pDst, const astc_block_desc* pBlock, uint32_t uastc_mode) + { + assert(uastc_mode < TOTAL_UASTC_MODES); + uint8_t* pDst_bytes = reinterpret_cast(pDst); + + const int total_weights = pBlock->m_dual_plane ? 32 : 16; + + // Set mode bits - see Table 146-147 + uint32_t mode = g_uastc_mode_astc_block_mode[uastc_mode]; + pDst_bytes[0] = (uint8_t)mode; + pDst_bytes[1] = (uint8_t)(mode >> 8); + + memset(pDst_bytes + 2, 0, 16 - 2); + + int bit_pos = ASTC_BLOCK_MODE_BITS; + + // We only support 1-5 bit weight indices + assert(!g_astc_bise_range_table[pBlock->m_weight_range][1] && !g_astc_bise_range_table[pBlock->m_weight_range][2]); + const int bits_per_weight = g_astc_bise_range_table[pBlock->m_weight_range][0]; + + // See table 143 - PART + astc_set_bits_1_to_9(pDst, bit_pos, pBlock->m_subsets - 1, ASTC_PART_BITS); + + if (pBlock->m_subsets == 1) + astc_set_bits_1_to_9(pDst, bit_pos, pBlock->m_cem, ASTC_CEM_BITS); + else + { + // See table 145 + astc_set_bits(pDst, bit_pos, pBlock->m_partition_seed, ASTC_PARTITION_INDEX_BITS); + + // Table 150 - we assume all CEM's are equal, so write 2 0's along with the CEM + astc_set_bits_1_to_9(pDst, bit_pos, (pBlock->m_cem << 2) & 63, ASTC_CEM_BITS + 2); + } + + if (pBlock->m_dual_plane) + { + const int total_weight_bits = total_weights * bits_per_weight; + + // See Illegal Encodings 23.24 + // https://www.khronos.org/registry/DataFormat/specs/1.3/dataformat.1.3.inline.html#_illegal_encodings + assert((total_weight_bits >= 24) && (total_weight_bits <= 96)); + + int ccs_bit_pos = 128 - total_weight_bits - ASTC_CCS_BITS; + astc_set_bits_1_to_9(pDst, ccs_bit_pos, pBlock->m_ccs, ASTC_CCS_BITS); + } + + const int num_cem_pairs = (1 + (pBlock->m_cem >> 2)) * pBlock->m_subsets; + assert(num_cem_pairs <= 9); + + astc_pack_bise(pDst, pBlock->m_endpoints, bit_pos, num_cem_pairs * 2, g_uastc_mode_endpoint_ranges[uastc_mode]); + + // Write the weight bits in reverse bit order. + switch (bits_per_weight) + { + case 1: + { + const uint32_t N = 1; + for (int i = 0; i < total_weights; i++) + { + const uint32_t ofs = 128 - N - i; + assert((ofs >> 3) < 16); + pDst_bytes[ofs >> 3] |= (pBlock->m_weights[i] << (ofs & 7)); + } + break; + } + case 2: + { + const uint32_t N = 2; + for (int i = 0; i < total_weights; i++) + { + static const uint8_t s_reverse_bits2[4] = { 0, 2, 1, 3 }; + const uint32_t ofs = 128 - N - (i * N); + assert((ofs >> 3) < 16); + pDst_bytes[ofs >> 3] |= (s_reverse_bits2[pBlock->m_weights[i]] << (ofs & 7)); + } + break; + } + case 3: + { + const uint32_t N = 3; + for (int i = 0; i < total_weights; i++) + { + static const uint8_t s_reverse_bits3[8] = { 0, 4, 2, 6, 1, 5, 3, 7 }; + + const uint32_t ofs = 128 - N - (i * N); + const uint32_t rev = s_reverse_bits3[pBlock->m_weights[i]] << (ofs & 7); + + uint32_t index = ofs >> 3; + assert(index < 16); + pDst_bytes[index++] |= rev & 0xFF; + if (index < 16) + pDst_bytes[index++] |= (rev >> 8); + } + break; + } + case 4: + { + const uint32_t N = 4; + for (int i = 0; i < total_weights; i++) + { + static const uint8_t s_reverse_bits4[16] = { 0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15 }; + const int ofs = 128 - N - (i * N); + assert(ofs >= 0 && (ofs >> 3) < 16); + pDst_bytes[ofs >> 3] |= (s_reverse_bits4[pBlock->m_weights[i]] << (ofs & 7)); + } + break; + } + case 5: + { + const uint32_t N = 5; + for (int i = 0; i < total_weights; i++) + { + static const uint8_t s_reverse_bits5[32] = { 0, 16, 8, 24, 4, 20, 12, 28, 2, 18, 10, 26, 6, 22, 14, 30, 1, 17, 9, 25, 5, 21, 13, 29, 3, 19, 11, 27, 7, 23, 15, 31 }; + + const uint32_t ofs = 128 - N - (i * N); + const uint32_t rev = s_reverse_bits5[pBlock->m_weights[i]] << (ofs & 7); + + uint32_t index = ofs >> 3; + assert(index < 16); + pDst_bytes[index++] |= rev & 0xFF; + if (index < 16) + pDst_bytes[index++] |= (rev >> 8); + } + + break; + } + default: + assert(0); + break; + } + + return true; + } + + const uint8_t* get_anchor_indices(uint32_t subsets, uint32_t mode, uint32_t common_pattern, const uint8_t*& pPartition_pattern) + { + const uint8_t* pSubset_anchor_indices = g_zero_pattern; + pPartition_pattern = g_zero_pattern; + + if (subsets >= 2) + { + if (subsets == 3) + { + pPartition_pattern = &g_astc_bc7_patterns3[common_pattern][0]; + pSubset_anchor_indices = &g_astc_bc7_pattern3_anchors[common_pattern][0]; + } + else if (mode == 7) + { + pPartition_pattern = &g_bc7_3_astc2_patterns2[common_pattern][0]; + pSubset_anchor_indices = &g_bc7_3_astc2_patterns2_anchors[common_pattern][0]; + } + else + { + pPartition_pattern = &g_astc_bc7_patterns2[common_pattern][0]; + pSubset_anchor_indices = &g_astc_bc7_pattern2_anchors[common_pattern][0]; + } + } + + return pSubset_anchor_indices; + } + + static inline uint32_t read_bit(const uint8_t* pBuf, uint32_t& bit_offset) + { + uint32_t byte_bits = pBuf[bit_offset >> 3] >> (bit_offset & 7); + bit_offset += 1; + return byte_bits & 1; + } + + static inline uint32_t read_bits1_to_9(const uint8_t* pBuf, uint32_t& bit_offset, uint32_t codesize) + { + assert(codesize <= 9); + if (!codesize) + return 0; + + if ((IS_BIG_ENDIAN) || (!USE_UNALIGNED_WORD_READS) || (bit_offset >= 112)) + { + const uint8_t* pBytes = &pBuf[bit_offset >> 3U]; + + uint32_t byte_bit_offset = bit_offset & 7U; + + uint32_t bits = pBytes[0] >> byte_bit_offset; + uint32_t bits_read = basisu::minimum(codesize, 8 - byte_bit_offset); + + uint32_t bits_remaining = codesize - bits_read; + if (bits_remaining) + bits |= ((uint32_t)pBytes[1]) << bits_read; + + bit_offset += codesize; + + return bits & ((1U << codesize) - 1U); + } + + uint32_t byte_bit_offset = bit_offset & 7U; + const uint16_t w = *(const uint16_t *)(&pBuf[bit_offset >> 3U]); + bit_offset += codesize; + return (w >> byte_bit_offset) & ((1U << codesize) - 1U); + } + + inline uint64_t read_bits64(const uint8_t* pBuf, uint32_t& bit_offset, uint32_t codesize) + { + assert(codesize <= 64U); + uint64_t bits = 0; + uint32_t total_bits = 0; + + while (total_bits < codesize) + { + uint32_t byte_bit_offset = bit_offset & 7U; + uint32_t bits_to_read = basisu::minimum(codesize - total_bits, 8U - byte_bit_offset); + + uint32_t byte_bits = pBuf[bit_offset >> 3U] >> byte_bit_offset; + byte_bits &= ((1U << bits_to_read) - 1U); + + bits |= ((uint64_t)(byte_bits) << total_bits); + + total_bits += bits_to_read; + bit_offset += bits_to_read; + } + + return bits; + } + + static inline uint32_t read_bits1_to_9_fst(const uint8_t* pBuf, uint32_t& bit_offset, uint32_t codesize) + { + assert(codesize <= 9); + if (!codesize) + return 0; + assert(bit_offset < 112); + + if ((IS_BIG_ENDIAN) || (!USE_UNALIGNED_WORD_READS)) + { + const uint8_t* pBytes = &pBuf[bit_offset >> 3U]; + + uint32_t byte_bit_offset = bit_offset & 7U; + + uint32_t bits = pBytes[0] >> byte_bit_offset; + uint32_t bits_read = basisu::minimum(codesize, 8 - byte_bit_offset); + + uint32_t bits_remaining = codesize - bits_read; + if (bits_remaining) + bits |= ((uint32_t)pBytes[1]) << bits_read; + + bit_offset += codesize; + + return bits & ((1U << codesize) - 1U); + } + + uint32_t byte_bit_offset = bit_offset & 7U; + const uint16_t w = *(const uint16_t*)(&pBuf[bit_offset >> 3U]); + bit_offset += codesize; + return (w >> byte_bit_offset)& ((1U << codesize) - 1U); + } + + bool unpack_uastc(const uastc_block& blk, unpacked_uastc_block& unpacked, bool blue_contract_check, bool read_hints) + { + //memset(&unpacked, 0, sizeof(unpacked)); + +#if 0 + uint8_t table[128]; + memset(table, 0xFF, sizeof(table)); + + { + for (uint32_t mode = 0; mode <= TOTAL_UASTC_MODES; mode++) + { + const uint32_t code = g_uastc_mode_huff_codes[mode][0]; + const uint32_t codesize = g_uastc_mode_huff_codes[mode][1]; + + table[code] = mode; + + uint32_t bits_left = 7 - codesize; + for (uint32_t i = 0; i < (1 << bits_left); i++) + table[code | (i << codesize)] = mode; + } + + for (uint32_t i = 0; i < 128; i++) + printf("%u,", table[i]); + exit(0); + } +#endif + + const int mode = g_uastc_huff_modes[blk.m_bytes[0] & 127]; + if (mode >= (int)TOTAL_UASTC_MODES) + return false; + + unpacked.m_mode = mode; + + uint32_t bit_ofs = g_uastc_mode_huff_codes[mode][1]; + + if (mode == UASTC_MODE_INDEX_SOLID_COLOR) + { + unpacked.m_solid_color.r = (uint8_t)read_bits1_to_9_fst(blk.m_bytes, bit_ofs, 8); + unpacked.m_solid_color.g = (uint8_t)read_bits1_to_9_fst(blk.m_bytes, bit_ofs, 8); + unpacked.m_solid_color.b = (uint8_t)read_bits1_to_9_fst(blk.m_bytes, bit_ofs, 8); + unpacked.m_solid_color.a = (uint8_t)read_bits1_to_9_fst(blk.m_bytes, bit_ofs, 8); + + if (read_hints) + { + unpacked.m_etc1_flip = false; + unpacked.m_etc1_diff = read_bit(blk.m_bytes, bit_ofs) != 0; + unpacked.m_etc1_inten0 = (uint32_t)read_bits1_to_9_fst(blk.m_bytes, bit_ofs, 3); + unpacked.m_etc1_inten1 = 0; + unpacked.m_etc1_selector = (uint32_t)read_bits1_to_9_fst(blk.m_bytes, bit_ofs, 2); + unpacked.m_etc1_r = (uint32_t)read_bits1_to_9_fst(blk.m_bytes, bit_ofs, 5); + unpacked.m_etc1_g = (uint32_t)read_bits1_to_9_fst(blk.m_bytes, bit_ofs, 5); + unpacked.m_etc1_b = (uint32_t)read_bits1_to_9_fst(blk.m_bytes, bit_ofs, 5); + unpacked.m_etc1_bias = 0; + unpacked.m_etc2_hints = 0; + } + + return true; + } + + if (read_hints) + { + if (g_uastc_mode_has_bc1_hint0[mode]) + unpacked.m_bc1_hint0 = read_bit(blk.m_bytes, bit_ofs) != 0; + else + unpacked.m_bc1_hint0 = false; + + if (g_uastc_mode_has_bc1_hint1[mode]) + unpacked.m_bc1_hint1 = read_bit(blk.m_bytes, bit_ofs) != 0; + else + unpacked.m_bc1_hint1 = false; + + unpacked.m_etc1_flip = read_bit(blk.m_bytes, bit_ofs) != 0; + unpacked.m_etc1_diff = read_bit(blk.m_bytes, bit_ofs) != 0; + unpacked.m_etc1_inten0 = (uint32_t)read_bits1_to_9_fst(blk.m_bytes, bit_ofs, 3); + unpacked.m_etc1_inten1 = (uint32_t)read_bits1_to_9_fst(blk.m_bytes, bit_ofs, 3); + + if (g_uastc_mode_has_etc1_bias[mode]) + unpacked.m_etc1_bias = (uint32_t)read_bits1_to_9_fst(blk.m_bytes, bit_ofs, 5); + else + unpacked.m_etc1_bias = 0; + + if (g_uastc_mode_has_alpha[mode]) + { + unpacked.m_etc2_hints = (uint32_t)read_bits1_to_9_fst(blk.m_bytes, bit_ofs, 8); + //assert(unpacked.m_etc2_hints > 0); + } + else + unpacked.m_etc2_hints = 0; + } + else + bit_ofs += g_uastc_mode_total_hint_bits[mode]; + + uint32_t subsets = 1; + switch (mode) + { + case 2: + case 4: + case 7: + case 9: + case 16: + unpacked.m_common_pattern = (uint32_t)read_bits1_to_9_fst(blk.m_bytes, bit_ofs, 5); + subsets = 2; + break; + case 3: + unpacked.m_common_pattern = (uint32_t)read_bits1_to_9_fst(blk.m_bytes, bit_ofs, 4); + subsets = 3; + break; + default: + break; + } + + uint32_t part_seed = 0; + switch (mode) + { + case 2: + case 4: + case 9: + case 16: + if (unpacked.m_common_pattern >= TOTAL_ASTC_BC7_COMMON_PARTITIONS2) + return false; + + part_seed = g_astc_bc7_common_partitions2[unpacked.m_common_pattern].m_astc; + break; + case 3: + if (unpacked.m_common_pattern >= TOTAL_ASTC_BC7_COMMON_PARTITIONS3) + return false; + + part_seed = g_astc_bc7_common_partitions3[unpacked.m_common_pattern].m_astc; + break; + case 7: + if (unpacked.m_common_pattern >= TOTAL_BC7_3_ASTC2_COMMON_PARTITIONS) + return false; + + part_seed = g_bc7_3_astc2_common_partitions[unpacked.m_common_pattern].m_astc2; + break; + default: + break; + } + + uint32_t total_planes = 1; + switch (mode) + { + case 6: + case 11: + case 13: + unpacked.m_astc.m_ccs = (int)read_bits1_to_9_fst(blk.m_bytes, bit_ofs, 2); + total_planes = 2; + break; + case 17: + unpacked.m_astc.m_ccs = 3; + total_planes = 2; + break; + default: + break; + } + + unpacked.m_astc.m_dual_plane = (total_planes == 2); + + unpacked.m_astc.m_subsets = subsets; + unpacked.m_astc.m_partition_seed = part_seed; + + const uint32_t total_comps = g_uastc_mode_comps[mode]; + + const uint32_t weight_bits = g_uastc_mode_weight_bits[mode]; + + unpacked.m_astc.m_weight_range = g_uastc_mode_weight_ranges[mode]; + + const uint32_t total_values = total_comps * 2 * subsets; + const uint32_t endpoint_range = g_uastc_mode_endpoint_ranges[mode]; + + const uint32_t cem = g_uastc_mode_cem[mode]; + unpacked.m_astc.m_cem = cem; + + const uint32_t ep_bits = g_astc_bise_range_table[endpoint_range][0]; + const uint32_t ep_trits = g_astc_bise_range_table[endpoint_range][1]; + const uint32_t ep_quints = g_astc_bise_range_table[endpoint_range][2]; + + uint32_t total_tqs = 0; + uint32_t bundle_size = 0, mul = 0; + if (ep_trits) + { + total_tqs = (total_values + 4) / 5; + bundle_size = 5; + mul = 3; + } + else if (ep_quints) + { + total_tqs = (total_values + 2) / 3; + bundle_size = 3; + mul = 5; + } + + uint32_t tq_values[8]; + for (uint32_t i = 0; i < total_tqs; i++) + { + uint32_t num_bits = ep_trits ? 8 : 7; + if (i == (total_tqs - 1)) + { + uint32_t num_remaining = total_values - (total_tqs - 1) * bundle_size; + if (ep_trits) + { + switch (num_remaining) + { + case 1: num_bits = 2; break; + case 2: num_bits = 4; break; + case 3: num_bits = 5; break; + case 4: num_bits = 7; break; + default: break; + } + } + else if (ep_quints) + { + switch (num_remaining) + { + case 1: num_bits = 3; break; + case 2: num_bits = 5; break; + default: break; + } + } + } + + tq_values[i] = (uint32_t)read_bits1_to_9_fst(blk.m_bytes, bit_ofs, num_bits); + } // i + + uint32_t accum = 0; + uint32_t accum_remaining = 0; + uint32_t next_tq_index = 0; + + for (uint32_t i = 0; i < total_values; i++) + { + uint32_t value = (uint32_t)read_bits1_to_9_fst(blk.m_bytes, bit_ofs, ep_bits); + + if (total_tqs) + { + if (!accum_remaining) + { + assert(next_tq_index < total_tqs); + accum = tq_values[next_tq_index++]; + accum_remaining = bundle_size; + } + + // TODO: Optimize with tables + uint32_t v = accum % mul; + accum /= mul; + accum_remaining--; + + value |= (v << ep_bits); + } + + unpacked.m_astc.m_endpoints[i] = (uint8_t)value; + } + + const uint8_t* pPartition_pattern; + const uint8_t* pSubset_anchor_indices = get_anchor_indices(subsets, mode, unpacked.m_common_pattern, pPartition_pattern); + +#ifdef _DEBUG + for (uint32_t i = 0; i < 16; i++) + assert(pPartition_pattern[i] == astc_compute_texel_partition(part_seed, i & 3, i >> 2, 0, subsets, true)); + + for (uint32_t subset_index = 0; subset_index < subsets; subset_index++) + { + uint32_t anchor_index = 0; + + for (uint32_t i = 0; i < 16; i++) + { + if (pPartition_pattern[i] == subset_index) + { + anchor_index = i; + break; + } + } + + assert(pSubset_anchor_indices[subset_index] == anchor_index); + } +#endif + +#if 0 + const uint32_t total_planes_shift = total_planes - 1; + for (uint32_t i = 0; i < 16 * total_planes; i++) + { + uint32_t num_bits = weight_bits; + for (uint32_t s = 0; s < subsets; s++) + { + if (pSubset_anchor_indices[s] == (i >> total_planes_shift)) + { + num_bits--; + break; + } + } + + unpacked.m_astc.m_weights[i] = (uint8_t)read_bits1_to_9(blk.m_bytes, bit_ofs, num_bits); + } +#endif + + if (mode == 18) + { + // Mode 18 is the only mode with more than 64 weight bits. + for (uint32_t i = 0; i < 16; i++) + unpacked.m_astc.m_weights[i] = (uint8_t)read_bits1_to_9(blk.m_bytes, bit_ofs, i ? weight_bits : (weight_bits - 1)); + } + else + { + // All other modes have <= 64 weight bits. + uint64_t bits; + + // Read the weight bits + if ((IS_BIG_ENDIAN) || (!USE_UNALIGNED_WORD_READS)) + bits = read_bits64(blk.m_bytes, bit_ofs, std::min(64, 128 - (int)bit_ofs)); + else + { + bits = blk.m_qwords[1]; + + if (bit_ofs >= 64U) + bits >>= (bit_ofs - 64U); + else + { + assert(bit_ofs >= 56U); + + uint32_t bits_needed = 64U - bit_ofs; + bits <<= bits_needed; + bits |= (blk.m_bytes[7] >> (8U - bits_needed)); + } + } + + bit_ofs = 0; + + const uint32_t mask = (1U << weight_bits) - 1U; + const uint32_t anchor_mask = (1U << (weight_bits - 1U)) - 1U; + + if (total_planes == 2) + { + // Dual plane modes always have a single subset, and the first 2 weights are anchors. + + unpacked.m_astc.m_weights[0] = (uint8_t)((uint32_t)(bits >> bit_ofs) & anchor_mask); + bit_ofs += (weight_bits - 1); + + unpacked.m_astc.m_weights[1] = (uint8_t)((uint32_t)(bits >> bit_ofs) & anchor_mask); + bit_ofs += (weight_bits - 1); + + for (uint32_t i = 2; i < 32; i++) + { + unpacked.m_astc.m_weights[i] = (uint8_t)((uint32_t)(bits >> bit_ofs) & mask); + bit_ofs += weight_bits; + } + } + else + { + if (subsets == 1) + { + // Specialize the single subset case. + if (weight_bits == 4) + { + assert(bit_ofs == 0); + + // Specialize the most common case: 4-bit weights. + unpacked.m_astc.m_weights[0] = (uint8_t)((uint32_t)(bits) & 7); + unpacked.m_astc.m_weights[1] = (uint8_t)((uint32_t)(bits >> 3) & 15); + unpacked.m_astc.m_weights[2] = (uint8_t)((uint32_t)(bits >> (3 + 4 * 1)) & 15); + unpacked.m_astc.m_weights[3] = (uint8_t)((uint32_t)(bits >> (3 + 4 * 2)) & 15); + + unpacked.m_astc.m_weights[4] = (uint8_t)((uint32_t)(bits >> (3 + 4 * 3)) & 15); + unpacked.m_astc.m_weights[5] = (uint8_t)((uint32_t)(bits >> (3 + 4 * 4)) & 15); + unpacked.m_astc.m_weights[6] = (uint8_t)((uint32_t)(bits >> (3 + 4 * 5)) & 15); + unpacked.m_astc.m_weights[7] = (uint8_t)((uint32_t)(bits >> (3 + 4 * 6)) & 15); + + unpacked.m_astc.m_weights[8] = (uint8_t)((uint32_t)(bits >> (3 + 4 * 7)) & 15); + unpacked.m_astc.m_weights[9] = (uint8_t)((uint32_t)(bits >> (3 + 4 * 8)) & 15); + unpacked.m_astc.m_weights[10] = (uint8_t)((uint32_t)(bits >> (3 + 4 * 9)) & 15); + unpacked.m_astc.m_weights[11] = (uint8_t)((uint32_t)(bits >> (3 + 4 * 10)) & 15); + + unpacked.m_astc.m_weights[12] = (uint8_t)((uint32_t)(bits >> (3 + 4 * 11)) & 15); + unpacked.m_astc.m_weights[13] = (uint8_t)((uint32_t)(bits >> (3 + 4 * 12)) & 15); + unpacked.m_astc.m_weights[14] = (uint8_t)((uint32_t)(bits >> (3 + 4 * 13)) & 15); + unpacked.m_astc.m_weights[15] = (uint8_t)((uint32_t)(bits >> (3 + 4 * 14)) & 15); + } + else + { + // First weight is always an anchor. + unpacked.m_astc.m_weights[0] = (uint8_t)((uint32_t)(bits >> bit_ofs) & anchor_mask); + bit_ofs += (weight_bits - 1); + + for (uint32_t i = 1; i < 16; i++) + { + unpacked.m_astc.m_weights[i] = (uint8_t)((uint32_t)(bits >> bit_ofs) & mask); + bit_ofs += weight_bits; + } + } + } + else + { + const uint32_t a0 = pSubset_anchor_indices[0], a1 = pSubset_anchor_indices[1], a2 = pSubset_anchor_indices[2]; + + for (uint32_t i = 0; i < 16; i++) + { + if ((i == a0) || (i == a1) || (i == a2)) + { + unpacked.m_astc.m_weights[i] = (uint8_t)((uint32_t)(bits >> bit_ofs) & anchor_mask); + bit_ofs += (weight_bits - 1); + } + else + { + unpacked.m_astc.m_weights[i] = (uint8_t)((uint32_t)(bits >> bit_ofs) & mask); + bit_ofs += weight_bits; + } + } + } + } + } + + if ((blue_contract_check) && (total_comps >= 3)) + { + // We only need to disable ASTC Blue Contraction when we'll be packing to ASTC. The other transcoders don't care. + bool invert_subset[3] = { false, false, false }; + bool any_flag = false; + + for (uint32_t subset_index = 0; subset_index < subsets; subset_index++) + { + const int s0 = g_astc_unquant[endpoint_range][unpacked.m_astc.m_endpoints[subset_index * total_comps * 2 + 0]].m_unquant + + g_astc_unquant[endpoint_range][unpacked.m_astc.m_endpoints[subset_index * total_comps * 2 + 2]].m_unquant + + g_astc_unquant[endpoint_range][unpacked.m_astc.m_endpoints[subset_index * total_comps * 2 + 4]].m_unquant; + + const int s1 = g_astc_unquant[endpoint_range][unpacked.m_astc.m_endpoints[subset_index * total_comps * 2 + 1]].m_unquant + + g_astc_unquant[endpoint_range][unpacked.m_astc.m_endpoints[subset_index * total_comps * 2 + 3]].m_unquant + + g_astc_unquant[endpoint_range][unpacked.m_astc.m_endpoints[subset_index * total_comps * 2 + 5]].m_unquant; + + if (s1 < s0) + { + for (uint32_t c = 0; c < total_comps; c++) + std::swap(unpacked.m_astc.m_endpoints[subset_index * total_comps * 2 + c * 2 + 0], unpacked.m_astc.m_endpoints[subset_index * total_comps * 2 + c * 2 + 1]); + + invert_subset[subset_index] = true; + any_flag = true; + } + } + + if (any_flag) + { + const uint32_t weight_mask = (1 << weight_bits) - 1; + + for (uint32_t i = 0; i < 16; i++) + { + uint32_t subset = pPartition_pattern[i]; + + if (invert_subset[subset]) + { + unpacked.m_astc.m_weights[i * total_planes] = (uint8_t)(weight_mask - unpacked.m_astc.m_weights[i * total_planes]); + + if (total_planes == 2) + unpacked.m_astc.m_weights[i * total_planes + 1] = (uint8_t)(weight_mask - unpacked.m_astc.m_weights[i * total_planes + 1]); + } + } + } + } + + return true; + } + + static const uint32_t* g_astc_weight_tables[6] = { nullptr, g_bc7_weights1, g_bc7_weights2, g_bc7_weights3, g_astc_weights4, g_astc_weights5 }; + + bool unpack_uastc(uint32_t mode, uint32_t common_pattern, const color32& solid_color, const astc_block_desc& astc, color32* pPixels, bool srgb) + { + if (mode == UASTC_MODE_INDEX_SOLID_COLOR) + { + for (uint32_t i = 0; i < 16; i++) + pPixels[i] = solid_color; + return true; + } + + color32 endpoints[3][2]; + + const uint32_t total_subsets = g_uastc_mode_subsets[mode]; + const uint32_t total_comps = std::min(4U, g_uastc_mode_comps[mode]); + const uint32_t endpoint_range = g_uastc_mode_endpoint_ranges[mode]; + const uint32_t total_planes = g_uastc_mode_planes[mode]; + const uint32_t weight_bits = g_uastc_mode_weight_bits[mode]; + const uint32_t weight_levels = 1 << weight_bits; + + for (uint32_t subset_index = 0; subset_index < total_subsets; subset_index++) + { + if (total_comps == 2) + { + const uint32_t ll = g_astc_unquant[endpoint_range][astc.m_endpoints[subset_index * total_comps * 2 + 0 * 2 + 0]].m_unquant; + const uint32_t lh = g_astc_unquant[endpoint_range][astc.m_endpoints[subset_index * total_comps * 2 + 0 * 2 + 1]].m_unquant; + + const uint32_t al = g_astc_unquant[endpoint_range][astc.m_endpoints[subset_index * total_comps * 2 + 1 * 2 + 0]].m_unquant; + const uint32_t ah = g_astc_unquant[endpoint_range][astc.m_endpoints[subset_index * total_comps * 2 + 1 * 2 + 1]].m_unquant; + + endpoints[subset_index][0].set_noclamp_rgba(ll, ll, ll, al); + endpoints[subset_index][1].set_noclamp_rgba(lh, lh, lh, ah); + } + else + { + for (uint32_t comp_index = 0; comp_index < total_comps; comp_index++) + { + endpoints[subset_index][0][comp_index] = g_astc_unquant[endpoint_range][astc.m_endpoints[subset_index * total_comps * 2 + comp_index * 2 + 0]].m_unquant; + endpoints[subset_index][1][comp_index] = g_astc_unquant[endpoint_range][astc.m_endpoints[subset_index * total_comps * 2 + comp_index * 2 + 1]].m_unquant; + } + for (uint32_t comp_index = total_comps; comp_index < 4; comp_index++) + { + endpoints[subset_index][0][comp_index] = 255; + endpoints[subset_index][1][comp_index] = 255; + } + } + } + + color32 block_colors[3][32]; + + const uint32_t* pWeights = g_astc_weight_tables[weight_bits]; + + for (uint32_t subset_index = 0; subset_index < total_subsets; subset_index++) + { + for (uint32_t l = 0; l < weight_levels; l++) + { + if (total_comps == 2) + { + const uint8_t lc = (uint8_t)astc_interpolate(endpoints[subset_index][0][0], endpoints[subset_index][1][0], pWeights[l], srgb); + const uint8_t ac = (uint8_t)astc_interpolate(endpoints[subset_index][0][3], endpoints[subset_index][1][3], pWeights[l], srgb); + + block_colors[subset_index][l].set(lc, lc, lc, ac); + } + else + { + uint32_t comp_index; + for (comp_index = 0; comp_index < total_comps; comp_index++) + block_colors[subset_index][l][comp_index] = (uint8_t)astc_interpolate(endpoints[subset_index][0][comp_index], endpoints[subset_index][1][comp_index], pWeights[l], srgb); + + for (; comp_index < 4; comp_index++) + block_colors[subset_index][l][comp_index] = 255; + } + } + } + + const uint8_t* pPartition_pattern = g_zero_pattern; + + if (total_subsets >= 2) + { + if (total_subsets == 3) + pPartition_pattern = &g_astc_bc7_patterns3[common_pattern][0]; + else if (mode == 7) + pPartition_pattern = &g_bc7_3_astc2_patterns2[common_pattern][0]; + else + pPartition_pattern = &g_astc_bc7_patterns2[common_pattern][0]; + +#ifdef _DEBUG + for (uint32_t i = 0; i < 16; i++) + { + assert(pPartition_pattern[i] == (uint8_t)astc_compute_texel_partition(astc.m_partition_seed, i & 3, i >> 2, 0, total_subsets, true)); + } +#endif + } + + if (total_planes == 1) + { + if (total_subsets == 1) + { + for (uint32_t i = 0; i < 16; i++) + { + assert(astc.m_weights[i] < weight_levels); + pPixels[i] = block_colors[0][astc.m_weights[i]]; + } + } + else + { + for (uint32_t i = 0; i < 16; i++) + { + assert(astc.m_weights[i] < weight_levels); + pPixels[i] = block_colors[pPartition_pattern[i]][astc.m_weights[i]]; + } + } + } + else + { + assert(total_subsets == 1); + + for (uint32_t i = 0; i < 16; i++) + { + const uint32_t subset_index = 0; // pPartition_pattern[i]; + + const uint32_t weight_index0 = astc.m_weights[i * 2]; + const uint32_t weight_index1 = astc.m_weights[i * 2 + 1]; + + assert(weight_index0 < weight_levels && weight_index1 < weight_levels); + + color32& c = pPixels[i]; + for (uint32_t comp = 0; comp < 4; comp++) + { + if ((int)comp == astc.m_ccs) + c[comp] = block_colors[subset_index][weight_index1][comp]; + else + c[comp] = block_colors[subset_index][weight_index0][comp]; + } + } + } + + return true; + } + + bool unpack_uastc(const unpacked_uastc_block& unpacked_blk, color32* pPixels, bool srgb) + { + return unpack_uastc(unpacked_blk.m_mode, unpacked_blk.m_common_pattern, unpacked_blk.m_solid_color, unpacked_blk.m_astc, pPixels, srgb); + } + + bool unpack_uastc(const uastc_block& blk, color32* pPixels, bool srgb) + { + unpacked_uastc_block unpacked_blk; + + if (!unpack_uastc(blk, unpacked_blk, false, false)) + return false; + + return unpack_uastc(unpacked_blk, pPixels, srgb); + } + + // Determines the best shared pbits to use to encode xl/xh + static void determine_shared_pbits( + uint32_t total_comps, uint32_t comp_bits, float xl[4], float xh[4], + color_quad_u8& bestMinColor, color_quad_u8& bestMaxColor, uint32_t best_pbits[2]) + { + const uint32_t total_bits = comp_bits + 1; + assert(total_bits >= 4 && total_bits <= 8); + + const int iscalep = (1 << total_bits) - 1; + const float scalep = (float)iscalep; + + float best_err = 1e+9f; + + for (int p = 0; p < 2; p++) + { + color_quad_u8 xMinColor, xMaxColor; + for (uint32_t c = 0; c < 4; c++) + { + xMinColor.m_c[c] = (uint8_t)(clampi(((int)((xl[c] * scalep - p) / 2.0f + .5f)) * 2 + p, p, iscalep - 1 + p)); + xMaxColor.m_c[c] = (uint8_t)(clampi(((int)((xh[c] * scalep - p) / 2.0f + .5f)) * 2 + p, p, iscalep - 1 + p)); + } + + color_quad_u8 scaledLow, scaledHigh; + + for (uint32_t i = 0; i < 4; i++) + { + scaledLow.m_c[i] = (xMinColor.m_c[i] << (8 - total_bits)); + scaledLow.m_c[i] |= (scaledLow.m_c[i] >> total_bits); + assert(scaledLow.m_c[i] <= 255); + + scaledHigh.m_c[i] = (xMaxColor.m_c[i] << (8 - total_bits)); + scaledHigh.m_c[i] |= (scaledHigh.m_c[i] >> total_bits); + assert(scaledHigh.m_c[i] <= 255); + } + + float err = 0; + for (uint32_t i = 0; i < total_comps; i++) + err += basisu::squaref((scaledLow.m_c[i] / 255.0f) - xl[i]) + basisu::squaref((scaledHigh.m_c[i] / 255.0f) - xh[i]); + + if (err < best_err) + { + best_err = err; + best_pbits[0] = p; + best_pbits[1] = p; + for (uint32_t j = 0; j < 4; j++) + { + bestMinColor.m_c[j] = xMinColor.m_c[j] >> 1; + bestMaxColor.m_c[j] = xMaxColor.m_c[j] >> 1; + } + } + } + } + + // Determines the best unique pbits to use to encode xl/xh + static void determine_unique_pbits( + uint32_t total_comps, uint32_t comp_bits, float xl[4], float xh[4], + color_quad_u8& bestMinColor, color_quad_u8& bestMaxColor, uint32_t best_pbits[2]) + { + const uint32_t total_bits = comp_bits + 1; + const int iscalep = (1 << total_bits) - 1; + const float scalep = (float)iscalep; + + float best_err0 = 1e+9f; + float best_err1 = 1e+9f; + + for (int p = 0; p < 2; p++) + { + color_quad_u8 xMinColor, xMaxColor; + + for (uint32_t c = 0; c < 4; c++) + { + xMinColor.m_c[c] = (uint8_t)(clampi(((int)((xl[c] * scalep - p) / 2.0f + .5f)) * 2 + p, p, iscalep - 1 + p)); + xMaxColor.m_c[c] = (uint8_t)(clampi(((int)((xh[c] * scalep - p) / 2.0f + .5f)) * 2 + p, p, iscalep - 1 + p)); + } + + color_quad_u8 scaledLow, scaledHigh; + for (uint32_t i = 0; i < 4; i++) + { + scaledLow.m_c[i] = (xMinColor.m_c[i] << (8 - total_bits)); + scaledLow.m_c[i] |= (scaledLow.m_c[i] >> total_bits); + assert(scaledLow.m_c[i] <= 255); + + scaledHigh.m_c[i] = (xMaxColor.m_c[i] << (8 - total_bits)); + scaledHigh.m_c[i] |= (scaledHigh.m_c[i] >> total_bits); + assert(scaledHigh.m_c[i] <= 255); + } + + float err0 = 0, err1 = 0; + for (uint32_t i = 0; i < total_comps; i++) + { + err0 += basisu::squaref(scaledLow.m_c[i] - xl[i] * 255.0f); + err1 += basisu::squaref(scaledHigh.m_c[i] - xh[i] * 255.0f); + } + + if (err0 < best_err0) + { + best_err0 = err0; + best_pbits[0] = p; + + bestMinColor.m_c[0] = xMinColor.m_c[0] >> 1; + bestMinColor.m_c[1] = xMinColor.m_c[1] >> 1; + bestMinColor.m_c[2] = xMinColor.m_c[2] >> 1; + bestMinColor.m_c[3] = xMinColor.m_c[3] >> 1; + } + + if (err1 < best_err1) + { + best_err1 = err1; + best_pbits[1] = p; + + bestMaxColor.m_c[0] = xMaxColor.m_c[0] >> 1; + bestMaxColor.m_c[1] = xMaxColor.m_c[1] >> 1; + bestMaxColor.m_c[2] = xMaxColor.m_c[2] >> 1; + bestMaxColor.m_c[3] = xMaxColor.m_c[3] >> 1; + } + } + } + + bool transcode_uastc_to_astc(const uastc_block& src_blk, void* pDst) + { + unpacked_uastc_block unpacked_src_blk; + if (!unpack_uastc(src_blk, unpacked_src_blk, true, false)) + return false; + + bool success = false; + if (unpacked_src_blk.m_mode == UASTC_MODE_INDEX_SOLID_COLOR) + { + pack_astc_solid_block(pDst, unpacked_src_blk.m_solid_color); + success = true; + } + else + { + success = pack_astc_block(static_cast(pDst), &unpacked_src_blk.m_astc, unpacked_src_blk.m_mode); + } + + return success; + } + + bool transcode_uastc_to_bc7(const unpacked_uastc_block& unpacked_src_blk, bc7_optimization_results& dst_blk) + { + memset(&dst_blk, 0, sizeof(dst_blk)); + + const uint32_t mode = unpacked_src_blk.m_mode; + + const uint32_t endpoint_range = g_uastc_mode_endpoint_ranges[mode]; + const uint32_t total_comps = g_uastc_mode_comps[mode]; + + switch (mode) + { + case 0: + case 5: + case 10: + case 12: + case 14: + case 15: + case 18: + { + // MODE 0: DualPlane: 0, WeightRange: 8 (16), Subsets: 1, EndpointRange: 19 (192) - BC7 MODE6 RGB + // MODE 5: DualPlane: 0, WeightRange : 5 (8), Subsets : 1, EndpointRange : 20 (256) - BC7 MODE6 RGB + // MODE 10 DualPlane: 0, WeightRange: 8 (16), Subsets: 1, EndpointRange: 13 (48) - BC7 MODE6 + // MODE 12: DualPlane: 0, WeightRange : 5 (8), Subsets : 1, EndpointRange : 19 (192) - BC7 MODE6 + // MODE 14: DualPlane: 0, WeightRange : 2 (4), Subsets : 1, EndpointRange : 20 (256) - BC7 MODE6 + // MODE 18: DualPlane: 0, WeightRange : 11 (32), Subsets : 1, CEM : 8, EndpointRange : 11 (32) - BC7 MODE6 + // MODE 15: DualPlane: 0, WeightRange : 8 (16), Subsets : 1, CEM : 4 (LA Direct), EndpointRange : 20 (256) - BC7 MODE6 + dst_blk.m_mode = 6; + + float xl[4], xh[4]; + if (total_comps == 2) + { + xl[0] = g_astc_unquant[endpoint_range][unpacked_src_blk.m_astc.m_endpoints[0]].m_unquant / 255.0f; + xh[0] = g_astc_unquant[endpoint_range][unpacked_src_blk.m_astc.m_endpoints[1]].m_unquant / 255.0f; + + xl[1] = xl[0]; + xh[1] = xh[0]; + + xl[2] = xl[0]; + xh[2] = xh[0]; + + xl[3] = g_astc_unquant[endpoint_range][unpacked_src_blk.m_astc.m_endpoints[2]].m_unquant / 255.0f; + xh[3] = g_astc_unquant[endpoint_range][unpacked_src_blk.m_astc.m_endpoints[3]].m_unquant / 255.0f; + } + else + { + xl[0] = g_astc_unquant[endpoint_range][unpacked_src_blk.m_astc.m_endpoints[0]].m_unquant / 255.0f; + xl[1] = g_astc_unquant[endpoint_range][unpacked_src_blk.m_astc.m_endpoints[2]].m_unquant / 255.0f; + xl[2] = g_astc_unquant[endpoint_range][unpacked_src_blk.m_astc.m_endpoints[4]].m_unquant / 255.0f; + + xh[0] = g_astc_unquant[endpoint_range][unpacked_src_blk.m_astc.m_endpoints[1]].m_unquant / 255.0f; + xh[1] = g_astc_unquant[endpoint_range][unpacked_src_blk.m_astc.m_endpoints[3]].m_unquant / 255.0f; + xh[2] = g_astc_unquant[endpoint_range][unpacked_src_blk.m_astc.m_endpoints[5]].m_unquant / 255.0f; + + if (total_comps == 4) + { + xl[3] = g_astc_unquant[endpoint_range][unpacked_src_blk.m_astc.m_endpoints[6]].m_unquant / 255.0f; + xh[3] = g_astc_unquant[endpoint_range][unpacked_src_blk.m_astc.m_endpoints[7]].m_unquant / 255.0f; + } + else + { + xl[3] = 1.0f; + xh[3] = 1.0f; + } + } + + uint32_t best_pbits[2]; + color_quad_u8 bestMinColor, bestMaxColor; + determine_unique_pbits((total_comps == 2) ? 4 : total_comps, 7, xl, xh, bestMinColor, bestMaxColor, best_pbits); + + dst_blk.m_low[0] = bestMinColor; + dst_blk.m_high[0] = bestMaxColor; + + if (total_comps == 3) + { + dst_blk.m_low[0].m_c[3] = 127; + dst_blk.m_high[0].m_c[3] = 127; + } + + dst_blk.m_pbits[0][0] = best_pbits[0]; + dst_blk.m_pbits[0][1] = best_pbits[1]; + + if (mode == 18) + { + const uint8_t s_bc7_5_to_4[32] = { 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 6, 7, 8, 9, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15 }; + for (uint32_t i = 0; i < 16; i++) + dst_blk.m_selectors[i] = s_bc7_5_to_4[unpacked_src_blk.m_astc.m_weights[i]]; + } + else if (mode == 14) + { + const uint8_t s_bc7_2_to_4[4] = { 0, 5, 10, 15 }; + for (uint32_t i = 0; i < 16; i++) + dst_blk.m_selectors[i] = s_bc7_2_to_4[unpacked_src_blk.m_astc.m_weights[i]]; + } + else if ((mode == 5) || (mode == 12)) + { + const uint8_t s_bc7_3_to_4[8] = { 0, 2, 4, 6, 9, 11, 13, 15 }; + for (uint32_t i = 0; i < 16; i++) + dst_blk.m_selectors[i] = s_bc7_3_to_4[unpacked_src_blk.m_astc.m_weights[i]]; + } + else + { + for (uint32_t i = 0; i < 16; i++) + dst_blk.m_selectors[i] = unpacked_src_blk.m_astc.m_weights[i]; + } + + break; + } + case 1: + { + // DualPlane: 0, WeightRange : 2 (4), Subsets : 1, EndpointRange : 20 (256) - BC7 MODE3 + // Mode 1 uses endpoint range 20 - no need to use ASTC dequant tables. + dst_blk.m_mode = 3; + + float xl[4], xh[4]; + xl[0] = unpacked_src_blk.m_astc.m_endpoints[0] / 255.0f; + xl[1] = unpacked_src_blk.m_astc.m_endpoints[2] / 255.0f; + xl[2] = unpacked_src_blk.m_astc.m_endpoints[4] / 255.0f; + xl[3] = 1.0f; + + xh[0] = unpacked_src_blk.m_astc.m_endpoints[1] / 255.0f; + xh[1] = unpacked_src_blk.m_astc.m_endpoints[3] / 255.0f; + xh[2] = unpacked_src_blk.m_astc.m_endpoints[5] / 255.0f; + xh[3] = 1.0f; + + uint32_t best_pbits[2]; + color_quad_u8 bestMinColor, bestMaxColor; + memset(&bestMinColor, 0, sizeof(bestMinColor)); + memset(&bestMaxColor, 0, sizeof(bestMaxColor)); + determine_unique_pbits(3, 7, xl, xh, bestMinColor, bestMaxColor, best_pbits); + + for (uint32_t i = 0; i < 3; i++) + { + dst_blk.m_low[0].m_c[i] = bestMinColor.m_c[i]; + dst_blk.m_high[0].m_c[i] = bestMaxColor.m_c[i]; + dst_blk.m_low[1].m_c[i] = bestMinColor.m_c[i]; + dst_blk.m_high[1].m_c[i] = bestMaxColor.m_c[i]; + } + dst_blk.m_pbits[0][0] = best_pbits[0]; + dst_blk.m_pbits[0][1] = best_pbits[1]; + dst_blk.m_pbits[1][0] = best_pbits[0]; + dst_blk.m_pbits[1][1] = best_pbits[1]; + + for (uint32_t i = 0; i < 16; i++) + dst_blk.m_selectors[i] = unpacked_src_blk.m_astc.m_weights[i]; + + break; + } + case 2: + { + // 2. DualPlane: 0, WeightRange : 5 (8), Subsets : 2, EndpointRange : 8 (16) - BC7 MODE1 + dst_blk.m_mode = 1; + dst_blk.m_partition = g_astc_bc7_common_partitions2[unpacked_src_blk.m_common_pattern].m_bc7; + + const bool invert_partition = g_astc_bc7_common_partitions2[unpacked_src_blk.m_common_pattern].m_invert; + + float xl[4], xh[4]; + xl[3] = 1.0f; + xh[3] = 1.0f; + + for (uint32_t subset = 0; subset < 2; subset++) + { + for (uint32_t i = 0; i < 3; i++) + { + uint32_t v = unpacked_src_blk.m_astc.m_endpoints[i * 2 + subset * 6]; + v = (v << 4) | v; + xl[i] = v / 255.0f; + + v = unpacked_src_blk.m_astc.m_endpoints[i * 2 + subset * 6 + 1]; + v = (v << 4) | v; + xh[i] = v / 255.0f; + } + + uint32_t best_pbits[2] = { 0, 0 }; + color_quad_u8 bestMinColor, bestMaxColor; + memset(&bestMinColor, 0, sizeof(bestMinColor)); + memset(&bestMaxColor, 0, sizeof(bestMaxColor)); + determine_shared_pbits(3, 6, xl, xh, bestMinColor, bestMaxColor, best_pbits); + + const uint32_t bc7_subset_index = invert_partition ? (1 - subset) : subset; + + for (uint32_t i = 0; i < 3; i++) + { + dst_blk.m_low[bc7_subset_index].m_c[i] = bestMinColor.m_c[i]; + dst_blk.m_high[bc7_subset_index].m_c[i] = bestMaxColor.m_c[i]; + } + + dst_blk.m_pbits[bc7_subset_index][0] = best_pbits[0]; + } // subset + + for (uint32_t i = 0; i < 16; i++) + dst_blk.m_selectors[i] = unpacked_src_blk.m_astc.m_weights[i]; + + break; + } + case 3: + { + // DualPlane: 0, WeightRange : 2 (4), Subsets : 3, EndpointRange : 7 (12) - BC7 MODE2 + dst_blk.m_mode = 2; + dst_blk.m_partition = g_astc_bc7_common_partitions3[unpacked_src_blk.m_common_pattern].m_bc7; + + const uint32_t perm = g_astc_bc7_common_partitions3[unpacked_src_blk.m_common_pattern].m_astc_to_bc7_perm; + + for (uint32_t subset = 0; subset < 3; subset++) + { + for (uint32_t comp = 0; comp < 3; comp++) + { + uint32_t lo = g_astc_unquant[endpoint_range][unpacked_src_blk.m_astc.m_endpoints[comp * 2 + 0 + subset * 6]].m_unquant; + uint32_t hi = g_astc_unquant[endpoint_range][unpacked_src_blk.m_astc.m_endpoints[comp * 2 + 1 + subset * 6]].m_unquant; + + // TODO: I think this can be improved by using tables like Basis Universal does with ETC1S conversion. + lo = (lo * 31 + 127) / 255; + hi = (hi * 31 + 127) / 255; + + const uint32_t bc7_subset_index = g_astc_to_bc7_partition_index_perm_tables[perm][subset]; + + dst_blk.m_low[bc7_subset_index].m_c[comp] = (uint8_t)lo; + dst_blk.m_high[bc7_subset_index].m_c[comp] = (uint8_t)hi; + } + } + + for (uint32_t i = 0; i < 16; i++) + dst_blk.m_selectors[i] = unpacked_src_blk.m_astc.m_weights[i]; + + break; + } + case 4: + { + // 4. DualPlane: 0, WeightRange: 2 (4), Subsets: 2, EndpointRange: 12 (40) - BC7 MODE3 + dst_blk.m_mode = 3; + dst_blk.m_partition = g_astc_bc7_common_partitions2[unpacked_src_blk.m_common_pattern].m_bc7; + + const bool invert_partition = g_astc_bc7_common_partitions2[unpacked_src_blk.m_common_pattern].m_invert; + + float xl[4], xh[4]; + xl[3] = 1.0f; + xh[3] = 1.0f; + + for (uint32_t subset = 0; subset < 2; subset++) + { + for (uint32_t i = 0; i < 3; i++) + { + xl[i] = g_astc_unquant[endpoint_range][unpacked_src_blk.m_astc.m_endpoints[i * 2 + subset * 6]].m_unquant / 255.0f; + xh[i] = g_astc_unquant[endpoint_range][unpacked_src_blk.m_astc.m_endpoints[i * 2 + subset * 6 + 1]].m_unquant / 255.0f; + } + + uint32_t best_pbits[2] = { 0, 0 }; + color_quad_u8 bestMinColor, bestMaxColor; + memset(&bestMinColor, 0, sizeof(bestMinColor)); + memset(&bestMaxColor, 0, sizeof(bestMaxColor)); + determine_unique_pbits(3, 7, xl, xh, bestMinColor, bestMaxColor, best_pbits); + + const uint32_t bc7_subset_index = invert_partition ? (1 - subset) : subset; + + for (uint32_t i = 0; i < 3; i++) + { + dst_blk.m_low[bc7_subset_index].m_c[i] = bestMinColor.m_c[i]; + dst_blk.m_high[bc7_subset_index].m_c[i] = bestMaxColor.m_c[i]; + } + dst_blk.m_low[bc7_subset_index].m_c[3] = 127; + dst_blk.m_high[bc7_subset_index].m_c[3] = 127; + + dst_blk.m_pbits[bc7_subset_index][0] = best_pbits[0]; + dst_blk.m_pbits[bc7_subset_index][1] = best_pbits[1]; + + } // subset + + for (uint32_t i = 0; i < 16; i++) + dst_blk.m_selectors[i] = unpacked_src_blk.m_astc.m_weights[i]; + + break; + } + case 6: + case 11: + case 13: + case 17: + { + // MODE 6: DualPlane: 1, WeightRange : 2 (4), Subsets : 1, EndpointRange : 18 (160) - BC7 MODE5 RGB + // MODE 11: DualPlane: 1, WeightRange: 2 (4), Subsets: 1, EndpointRange: 13 (48) - BC7 MODE5 + // MODE 13: DualPlane: 1, WeightRange: 0 (2), Subsets : 1, EndpointRange : 20 (256) - BC7 MODE5 + // MODE 17: DualPlane: 1, WeightRange: 2 (4), Subsets: 1, CEM: 4 (LA Direct), EndpointRange: 20 (256) - BC7 MODE5 + dst_blk.m_mode = 5; + dst_blk.m_rotation = (unpacked_src_blk.m_astc.m_ccs + 1) & 3; + + if (total_comps == 2) + { + assert(unpacked_src_blk.m_astc.m_ccs == 3); + + dst_blk.m_low->m_c[0] = (uint8_t)((g_astc_unquant[endpoint_range][unpacked_src_blk.m_astc.m_endpoints[0]].m_unquant * 127 + 127) / 255); + dst_blk.m_high->m_c[0] = (uint8_t)((g_astc_unquant[endpoint_range][unpacked_src_blk.m_astc.m_endpoints[1]].m_unquant * 127 + 127) / 255); + + dst_blk.m_low->m_c[1] = dst_blk.m_low->m_c[0]; + dst_blk.m_high->m_c[1] = dst_blk.m_high->m_c[0]; + + dst_blk.m_low->m_c[2] = dst_blk.m_low->m_c[0]; + dst_blk.m_high->m_c[2] = dst_blk.m_high->m_c[0]; + + dst_blk.m_low->m_c[3] = (uint8_t)(g_astc_unquant[endpoint_range][unpacked_src_blk.m_astc.m_endpoints[2]].m_unquant); + dst_blk.m_high->m_c[3] = (uint8_t)(g_astc_unquant[endpoint_range][unpacked_src_blk.m_astc.m_endpoints[3]].m_unquant); + } + else + { + for (uint32_t astc_comp = 0; astc_comp < 4; astc_comp++) + { + uint32_t bc7_comp = astc_comp; + // ASTC and BC7 handle dual plane component rotations differently: + // ASTC: 2nd plane separately interpolates the CCS channel. + // BC7: 2nd plane channel is swapped with alpha, 2nd plane controls alpha interpolation, then we swap alpha with the desired channel. + if (astc_comp == (uint32_t)unpacked_src_blk.m_astc.m_ccs) + bc7_comp = 3; + else if (astc_comp == 3) + bc7_comp = unpacked_src_blk.m_astc.m_ccs; + + uint32_t l = 255, h = 255; + if (astc_comp < total_comps) + { + l = g_astc_unquant[endpoint_range][unpacked_src_blk.m_astc.m_endpoints[astc_comp * 2 + 0]].m_unquant; + h = g_astc_unquant[endpoint_range][unpacked_src_blk.m_astc.m_endpoints[astc_comp * 2 + 1]].m_unquant; + } + + if (bc7_comp < 3) + { + l = (l * 127 + 127) / 255; + h = (h * 127 + 127) / 255; + } + + dst_blk.m_low->m_c[bc7_comp] = (uint8_t)l; + dst_blk.m_high->m_c[bc7_comp] = (uint8_t)h; + } + } + + if (mode == 13) + { + for (uint32_t i = 0; i < 16; i++) + { + dst_blk.m_selectors[i] = unpacked_src_blk.m_astc.m_weights[i * 2] ? 3 : 0; + dst_blk.m_alpha_selectors[i] = unpacked_src_blk.m_astc.m_weights[i * 2 + 1] ? 3 : 0; + } + } + else + { + for (uint32_t i = 0; i < 16; i++) + { + dst_blk.m_selectors[i] = unpacked_src_blk.m_astc.m_weights[i * 2]; + dst_blk.m_alpha_selectors[i] = unpacked_src_blk.m_astc.m_weights[i * 2 + 1]; + } + } + + break; + } + case 7: + { + // DualPlane: 0, WeightRange : 2 (4), Subsets : 2, EndpointRange : 12 (40) - BC7 MODE2 + dst_blk.m_mode = 2; + dst_blk.m_partition = g_bc7_3_astc2_common_partitions[unpacked_src_blk.m_common_pattern].m_bc73; + + const uint32_t common_pattern_k = g_bc7_3_astc2_common_partitions[unpacked_src_blk.m_common_pattern].k; + + for (uint32_t bc7_part = 0; bc7_part < 3; bc7_part++) + { + const uint32_t astc_part = bc7_convert_partition_index_3_to_2(bc7_part, common_pattern_k); + + for (uint32_t c = 0; c < 3; c++) + { + dst_blk.m_low[bc7_part].m_c[c] = (g_astc_unquant[endpoint_range][unpacked_src_blk.m_astc.m_endpoints[c * 2 + 0 + astc_part * 6]].m_unquant * 31 + 127) / 255; + dst_blk.m_high[bc7_part].m_c[c] = (g_astc_unquant[endpoint_range][unpacked_src_blk.m_astc.m_endpoints[c * 2 + 1 + astc_part * 6]].m_unquant * 31 + 127) / 255; + } + } + + for (uint32_t i = 0; i < 16; i++) + dst_blk.m_selectors[i] = unpacked_src_blk.m_astc.m_weights[i]; + + break; + } + case UASTC_MODE_INDEX_SOLID_COLOR: + { + // Void-Extent: Solid Color RGBA (BC7 MODE5 or MODE6) + const color32& solid_color = unpacked_src_blk.m_solid_color; + + uint32_t best_err0 = g_bc7_mode_6_optimal_endpoints[solid_color.r][0].m_error + g_bc7_mode_6_optimal_endpoints[solid_color.g][0].m_error + + g_bc7_mode_6_optimal_endpoints[solid_color.b][0].m_error + g_bc7_mode_6_optimal_endpoints[solid_color.a][0].m_error; + + uint32_t best_err1 = g_bc7_mode_6_optimal_endpoints[solid_color.r][1].m_error + g_bc7_mode_6_optimal_endpoints[solid_color.g][1].m_error + + g_bc7_mode_6_optimal_endpoints[solid_color.b][1].m_error + g_bc7_mode_6_optimal_endpoints[solid_color.a][1].m_error; + + if (best_err0 > 0 && best_err1 > 0) + { + dst_blk.m_mode = 5; + + for (uint32_t c = 0; c < 3; c++) + { + dst_blk.m_low[0].m_c[c] = g_bc7_mode_5_optimal_endpoints[solid_color.c[c]].m_lo; + dst_blk.m_high[0].m_c[c] = g_bc7_mode_5_optimal_endpoints[solid_color.c[c]].m_hi; + } + + memset(dst_blk.m_selectors, BC7ENC_MODE_5_OPTIMAL_INDEX, 16); + + dst_blk.m_low[0].m_c[3] = solid_color.c[3]; + dst_blk.m_high[0].m_c[3] = solid_color.c[3]; + + //memset(dst_blk.m_alpha_selectors, 0, 16); + } + else + { + dst_blk.m_mode = 6; + + uint32_t best_p = 0; + if (best_err1 < best_err0) + best_p = 1; + + for (uint32_t c = 0; c < 4; c++) + { + dst_blk.m_low[0].m_c[c] = g_bc7_mode_6_optimal_endpoints[solid_color.c[c]][best_p].m_lo; + dst_blk.m_high[0].m_c[c] = g_bc7_mode_6_optimal_endpoints[solid_color.c[c]][best_p].m_hi; + } + + dst_blk.m_pbits[0][0] = best_p; + dst_blk.m_pbits[0][1] = best_p; + memset(dst_blk.m_selectors, BC7ENC_MODE_6_OPTIMAL_INDEX, 16); + } + + break; + } + case 9: + case 16: + { + // 9. DualPlane: 0, WeightRange : 2 (4), Subsets : 2, EndpointRange : 8 (16) - BC7 MODE7 + // 16. DualPlane: 0, WeightRange: 2 (4), Subsets: 2, CEM: 4 (LA Direct), EndpointRange: 20 (256) - BC7 MODE7 + + dst_blk.m_mode = 7; + dst_blk.m_partition = g_astc_bc7_common_partitions2[unpacked_src_blk.m_common_pattern].m_bc7; + + const bool invert_partition = g_astc_bc7_common_partitions2[unpacked_src_blk.m_common_pattern].m_invert; + + for (uint32_t astc_subset = 0; astc_subset < 2; astc_subset++) + { + float xl[4], xh[4]; + + if (total_comps == 2) + { + xl[0] = g_astc_unquant[endpoint_range][unpacked_src_blk.m_astc.m_endpoints[0 + astc_subset * 4]].m_unquant / 255.0f; + xh[0] = g_astc_unquant[endpoint_range][unpacked_src_blk.m_astc.m_endpoints[1 + astc_subset * 4]].m_unquant / 255.0f; + + xl[1] = xl[0]; + xh[1] = xh[0]; + + xl[2] = xl[0]; + xh[2] = xh[0]; + + xl[3] = g_astc_unquant[endpoint_range][unpacked_src_blk.m_astc.m_endpoints[2 + astc_subset * 4]].m_unquant / 255.0f; + xh[3] = g_astc_unquant[endpoint_range][unpacked_src_blk.m_astc.m_endpoints[3 + astc_subset * 4]].m_unquant / 255.0f; + } + else + { + xl[0] = g_astc_unquant[endpoint_range][unpacked_src_blk.m_astc.m_endpoints[0 + astc_subset * 8]].m_unquant / 255.0f; + xl[1] = g_astc_unquant[endpoint_range][unpacked_src_blk.m_astc.m_endpoints[2 + astc_subset * 8]].m_unquant / 255.0f; + xl[2] = g_astc_unquant[endpoint_range][unpacked_src_blk.m_astc.m_endpoints[4 + astc_subset * 8]].m_unquant / 255.0f; + xl[3] = g_astc_unquant[endpoint_range][unpacked_src_blk.m_astc.m_endpoints[6 + astc_subset * 8]].m_unquant / 255.0f; + + xh[0] = g_astc_unquant[endpoint_range][unpacked_src_blk.m_astc.m_endpoints[1 + astc_subset * 8]].m_unquant / 255.0f; + xh[1] = g_astc_unquant[endpoint_range][unpacked_src_blk.m_astc.m_endpoints[3 + astc_subset * 8]].m_unquant / 255.0f; + xh[2] = g_astc_unquant[endpoint_range][unpacked_src_blk.m_astc.m_endpoints[5 + astc_subset * 8]].m_unquant / 255.0f; + xh[3] = g_astc_unquant[endpoint_range][unpacked_src_blk.m_astc.m_endpoints[7 + astc_subset * 8]].m_unquant / 255.0f; + } + + uint32_t best_pbits[2] = { 0, 0 }; + color_quad_u8 bestMinColor, bestMaxColor; + memset(&bestMinColor, 0, sizeof(bestMinColor)); + memset(&bestMaxColor, 0, sizeof(bestMaxColor)); + determine_unique_pbits(4, 5, xl, xh, bestMinColor, bestMaxColor, best_pbits); + + const uint32_t bc7_subset_index = invert_partition ? (1 - astc_subset) : astc_subset; + + dst_blk.m_low[bc7_subset_index] = bestMinColor; + dst_blk.m_high[bc7_subset_index] = bestMaxColor; + + dst_blk.m_pbits[bc7_subset_index][0] = best_pbits[0]; + dst_blk.m_pbits[bc7_subset_index][1] = best_pbits[1]; + } // astc_subset + + for (uint32_t i = 0; i < 16; i++) + dst_blk.m_selectors[i] = unpacked_src_blk.m_astc.m_weights[i]; + + break; + } + default: + return false; + } + + return true; + } + + bool transcode_uastc_to_bc7(const uastc_block& src_blk, bc7_optimization_results& dst_blk) + { + unpacked_uastc_block unpacked_src_blk; + if (!unpack_uastc(src_blk, unpacked_src_blk, false, false)) + return false; + + return transcode_uastc_to_bc7(unpacked_src_blk, dst_blk); + } + + bool transcode_uastc_to_bc7(const uastc_block& src_blk, void* pDst) + { + bc7_optimization_results temp; + if (!transcode_uastc_to_bc7(src_blk, temp)) + return false; + + encode_bc7_block(pDst, &temp); + return true; + } + + color32 apply_etc1_bias(const color32 &block_color, uint32_t bias, uint32_t limit, uint32_t subblock) + { + color32 result; + + for (uint32_t c = 0; c < 3; c++) + { + static const int s_divs[3] = { 1, 3, 9 }; + + int delta = 0; + + switch (bias) + { + case 2: delta = subblock ? 0 : ((c == 0) ? -1 : 0); break; + case 5: delta = subblock ? 0 : ((c == 1) ? -1 : 0); break; + case 6: delta = subblock ? 0 : ((c == 2) ? -1 : 0); break; + + case 7: delta = subblock ? 0 : ((c == 0) ? 1 : 0); break; + case 11: delta = subblock ? 0 : ((c == 1) ? 1 : 0); break; + case 15: delta = subblock ? 0 : ((c == 2) ? 1 : 0); break; + + case 18: delta = subblock ? ((c == 0) ? -1 : 0) : 0; break; + case 19: delta = subblock ? ((c == 1) ? -1 : 0) : 0; break; + case 20: delta = subblock ? ((c == 2) ? -1 : 0) : 0; break; + + case 21: delta = subblock ? ((c == 0) ? 1 : 0) : 0; break; + case 24: delta = subblock ? ((c == 1) ? 1 : 0) : 0; break; + case 8: delta = subblock ? ((c == 2) ? 1 : 0) : 0; break; + + case 10: delta = -2; break; + + case 27: delta = subblock ? 0 : -1; break; + case 28: delta = subblock ? -1 : 1; break; + case 29: delta = subblock ? 1 : 0; break; + case 30: delta = subblock ? -1 : 0; break; + case 31: delta = subblock ? 0 : 1; break; + + default: + delta = ((bias / s_divs[c]) % 3) - 1; + break; + } + + int v = block_color[c]; + if (v == 0) + { + if (delta == -2) + v += 3; + else + v += delta + 1; + } + else if (v == (int)limit) + { + v += (delta - 1); + } + else + { + v += delta; + if ((v < 0) || (v > (int)limit)) + v = (v - delta) - delta; + } + + assert(v >= 0); + assert(v <= (int)limit); + + result[c] = (uint8_t)v; + } + + return result; + } + + static void etc1_determine_selectors(decoder_etc_block& dst_blk, const color32* pSource_pixels, uint32_t first_subblock, uint32_t last_subblock) + { + static const uint8_t s_tran[4] = { 1, 0, 2, 3 }; + + uint16_t l_bitmask = 0; + uint16_t h_bitmask = 0; + + for (uint32_t subblock = first_subblock; subblock < last_subblock; subblock++) + { + color32 block_colors[4]; + dst_blk.get_block_colors(block_colors, subblock); + + uint32_t block_y[4]; + for (uint32_t i = 0; i < 4; i++) + block_y[i] = block_colors[i][0] * 54 + block_colors[i][1] * 183 + block_colors[i][2] * 19; + + const uint32_t block_y01 = block_y[0] + block_y[1]; + const uint32_t block_y12 = block_y[1] + block_y[2]; + const uint32_t block_y23 = block_y[2] + block_y[3]; + + // X0 X0 X0 X0 X1 X1 X1 X1 X2 X2 X2 X2 X3 X3 X3 X3 + // Y0 Y1 Y2 Y3 Y0 Y1 Y2 Y3 Y0 Y1 Y2 Y3 Y0 Y1 Y2 Y3 + + if (dst_blk.get_flip_bit()) + { + uint32_t ofs = subblock * 2; + + for (uint32_t y = 0; y < 2; y++) + { + for (uint32_t x = 0; x < 4; x++) + { + const color32& c = pSource_pixels[x + (subblock * 2 + y) * 4]; + const uint32_t l = c[0] * 108 + c[1] * 366 + c[2] * 38; + + uint32_t t = s_tran[(l < block_y01) + (l < block_y12) + (l < block_y23)]; + + assert(ofs < 16); + l_bitmask |= ((t & 1) << ofs); + h_bitmask |= ((t >> 1) << ofs); + ofs += 4; + } + + ofs = (int)ofs + 1 - 4 * 4; + } + } + else + { + uint32_t ofs = (subblock * 2) * 4; + for (uint32_t x = 0; x < 2; x++) + { + for (uint32_t y = 0; y < 4; y++) + { + const color32& c = pSource_pixels[subblock * 2 + x + y * 4]; + const uint32_t l = c[0] * 108 + c[1] * 366 + c[2] * 38; + + uint32_t t = s_tran[(l < block_y01) + (l < block_y12) + (l < block_y23)]; + + assert(ofs < 16); + l_bitmask |= ((t & 1) << ofs); + h_bitmask |= ((t >> 1) << ofs); + ++ofs; + } + } + } + } + + dst_blk.m_bytes[7] = (uint8_t)(l_bitmask); + dst_blk.m_bytes[6] = (uint8_t)(l_bitmask >> 8); + dst_blk.m_bytes[5] = (uint8_t)(h_bitmask); + dst_blk.m_bytes[4] = (uint8_t)(h_bitmask >> 8); + } + + static const uint8_t s_etc1_solid_selectors[4][4] = { { 255, 255, 255, 255 }, { 255, 255, 0, 0 }, { 0, 0, 0, 0 }, {0, 0, 255, 255 } }; + + struct etc_coord2 + { + uint8_t m_x, m_y; + }; + + // [flip][subblock][pixel_index] + const etc_coord2 g_etc1_pixel_coords[2][2][8] = + { + { + { + { 0, 0 }, { 0, 1 }, { 0, 2 }, { 0, 3 }, + { 1, 0 }, { 1, 1 }, { 1, 2 }, { 1, 3 } + }, + { + { 2, 0 }, { 2, 1 }, { 2, 2 }, { 2, 3 }, + { 3, 0 }, { 3, 1 }, { 3, 2 }, { 3, 3 } + } + }, + { + { + { 0, 0 }, { 1, 0 }, { 2, 0 }, { 3, 0 }, + { 0, 1 }, { 1, 1 }, { 2, 1 }, { 3, 1 } + }, + { + { 0, 2 }, { 1, 2 }, { 2, 2 }, { 3, 2 }, + { 0, 3 }, { 1, 3 }, { 2, 3 }, { 3, 3 } + }, + } + }; + + void transcode_uastc_to_etc1(unpacked_uastc_block& unpacked_src_blk, color32 block_pixels[4][4], void* pDst) + { + decoder_etc_block& dst_blk = *static_cast(pDst); + + if (unpacked_src_blk.m_mode == UASTC_MODE_INDEX_SOLID_COLOR) + { + dst_blk.m_bytes[3] = (uint8_t)((unpacked_src_blk.m_etc1_diff << 1) | (unpacked_src_blk.m_etc1_inten0 << 5) | (unpacked_src_blk.m_etc1_inten0 << 2)); + + if (unpacked_src_blk.m_etc1_diff) + { + dst_blk.m_bytes[0] = (uint8_t)(unpacked_src_blk.m_etc1_r << 3); + dst_blk.m_bytes[1] = (uint8_t)(unpacked_src_blk.m_etc1_g << 3); + dst_blk.m_bytes[2] = (uint8_t)(unpacked_src_blk.m_etc1_b << 3); + } + else + { + dst_blk.m_bytes[0] = (uint8_t)(unpacked_src_blk.m_etc1_r | (unpacked_src_blk.m_etc1_r << 4)); + dst_blk.m_bytes[1] = (uint8_t)(unpacked_src_blk.m_etc1_g | (unpacked_src_blk.m_etc1_g << 4)); + dst_blk.m_bytes[2] = (uint8_t)(unpacked_src_blk.m_etc1_b | (unpacked_src_blk.m_etc1_b << 4)); + } + + memcpy(dst_blk.m_bytes + 4, &s_etc1_solid_selectors[unpacked_src_blk.m_etc1_selector][0], 4); + + return; + } + + const bool flip = unpacked_src_blk.m_etc1_flip != 0; + const bool diff = unpacked_src_blk.m_etc1_diff != 0; + + dst_blk.m_bytes[3] = (uint8_t)((int)flip | (diff << 1) | (unpacked_src_blk.m_etc1_inten0 << 5) | (unpacked_src_blk.m_etc1_inten1 << 2)); + + const uint32_t limit = diff ? 31 : 15; + + color32 block_colors[2]; + + for (uint32_t subset = 0; subset < 2; subset++) + { + uint32_t avg_color[3]; + memset(avg_color, 0, sizeof(avg_color)); + + for (uint32_t j = 0; j < 8; j++) + { + const etc_coord2& c = g_etc1_pixel_coords[flip][subset][j]; + + avg_color[0] += block_pixels[c.m_y][c.m_x].r; + avg_color[1] += block_pixels[c.m_y][c.m_x].g; + avg_color[2] += block_pixels[c.m_y][c.m_x].b; + } // j + + block_colors[subset][0] = (uint8_t)((avg_color[0] * limit + 1020) / (8 * 255)); + block_colors[subset][1] = (uint8_t)((avg_color[1] * limit + 1020) / (8 * 255)); + block_colors[subset][2] = (uint8_t)((avg_color[2] * limit + 1020) / (8 * 255)); + block_colors[subset][3] = 0; + + if (g_uastc_mode_has_etc1_bias[unpacked_src_blk.m_mode]) + { + block_colors[subset] = apply_etc1_bias(block_colors[subset], unpacked_src_blk.m_etc1_bias, limit, subset); + } + + } // subset + + if (diff) + { + int dr = block_colors[1].r - block_colors[0].r; + int dg = block_colors[1].g - block_colors[0].g; + int db = block_colors[1].b - block_colors[0].b; + + dr = basisu::clamp(dr, cETC1ColorDeltaMin, cETC1ColorDeltaMax); + dg = basisu::clamp(dg, cETC1ColorDeltaMin, cETC1ColorDeltaMax); + db = basisu::clamp(db, cETC1ColorDeltaMin, cETC1ColorDeltaMax); + + if (dr < 0) dr += 8; + if (dg < 0) dg += 8; + if (db < 0) db += 8; + + dst_blk.m_bytes[0] = (uint8_t)((block_colors[0].r << 3) | dr); + dst_blk.m_bytes[1] = (uint8_t)((block_colors[0].g << 3) | dg); + dst_blk.m_bytes[2] = (uint8_t)((block_colors[0].b << 3) | db); + } + else + { + dst_blk.m_bytes[0] = (uint8_t)(block_colors[1].r | (block_colors[0].r << 4)); + dst_blk.m_bytes[1] = (uint8_t)(block_colors[1].g | (block_colors[0].g << 4)); + dst_blk.m_bytes[2] = (uint8_t)(block_colors[1].b | (block_colors[0].b << 4)); + } + + etc1_determine_selectors(dst_blk, &block_pixels[0][0], 0, 2); + } + + bool transcode_uastc_to_etc1(const uastc_block& src_blk, void* pDst) + { + unpacked_uastc_block unpacked_src_blk; + if (!unpack_uastc(src_blk, unpacked_src_blk, false)) + return false; + + color32 block_pixels[4][4]; + if (unpacked_src_blk.m_mode != UASTC_MODE_INDEX_SOLID_COLOR) + { + const bool unpack_srgb = false; + if (!unpack_uastc(unpacked_src_blk, &block_pixels[0][0], unpack_srgb)) + return false; + } + + transcode_uastc_to_etc1(unpacked_src_blk, block_pixels, pDst); + + return true; + } + + static inline int gray_distance2(const uint8_t c, int y) + { + int gray_dist = (int)c - y; + return gray_dist * gray_dist; + } + + static bool pack_etc1_y_estimate_flipped(const uint8_t* pSrc_pixels, + int& upper_avg, int& lower_avg, int& left_avg, int& right_avg) + { + int sums[2][2]; + +#define GET_XY(x, y) pSrc_pixels[(x) + ((y) * 4)] + + sums[0][0] = GET_XY(0, 0) + GET_XY(0, 1) + GET_XY(1, 0) + GET_XY(1, 1); + sums[1][0] = GET_XY(2, 0) + GET_XY(2, 1) + GET_XY(3, 0) + GET_XY(3, 1); + sums[0][1] = GET_XY(0, 2) + GET_XY(0, 3) + GET_XY(1, 2) + GET_XY(1, 3); + sums[1][1] = GET_XY(2, 2) + GET_XY(2, 3) + GET_XY(3, 2) + GET_XY(3, 3); + + upper_avg = (sums[0][0] + sums[1][0] + 4) / 8; + lower_avg = (sums[0][1] + sums[1][1] + 4) / 8; + left_avg = (sums[0][0] + sums[0][1] + 4) / 8; + right_avg = (sums[1][0] + sums[1][1] + 4) / 8; + +#undef GET_XY +#define GET_XY(x, y, a) gray_distance2(pSrc_pixels[(x) + ((y) * 4)], a) + + int upper_gray_dist = 0, lower_gray_dist = 0, left_gray_dist = 0, right_gray_dist = 0; + for (uint32_t i = 0; i < 4; i++) + { + for (uint32_t j = 0; j < 2; j++) + { + upper_gray_dist += GET_XY(i, j, upper_avg); + lower_gray_dist += GET_XY(i, 2 + j, lower_avg); + left_gray_dist += GET_XY(j, i, left_avg); + right_gray_dist += GET_XY(2 + j, i, right_avg); + } + } + +#undef GET_XY + + int upper_lower_sum = upper_gray_dist + lower_gray_dist; + int left_right_sum = left_gray_dist + right_gray_dist; + + return upper_lower_sum < left_right_sum; + } + + // Base Sel Table + // XXXXX XX XXX + static const uint16_t g_etc1_y_solid_block_configs[256] = + { + 0,781,64,161,260,192,33,131,96,320,65,162,261,193,34,291,97,224,66,163,262,194,35,549,98,4,67,653,164,195,523,36,99,5,578,68,165,353,196,37,135,100,324,69,166,354,197,38,295,101,228,70,167, + 355,198,39,553,102,8,71,608,168,199,527,40,103,9,582,72,169,357,200,41,139,104,328,73,170,358,201,42,299,105,232,74,171,359,202,43,557,106,12,75,612,172,203,531,44,107,13,586,76,173,361, + 204,45,143,108,332,77,174,362,205,46,303,109,236,78,175,363,206,47,561,110,16,79,616,176,207,535,48,111,17,590,80,177,365,208,49,147,112,336,81,178,366,209,50,307,113,240,82,179,367,210, + 51,565,114,20,83,620,180,211,539,52,115,21,594,84,181,369,212,53,151,116,340,85,182,370,213,54,311,117,244,86,183,371,214,55,569,118,24,87,624,184,215,543,56,119,25,598,88,185,373,216,57, + 155,120,344,89,186,374,217,58,315,121,248,90,187,375,218,59,573,122,28,91,628,188,219,754,60,123,29,602,92,189,377,220,61,159,124,348,93,190,378,221,62,319,125,252,94,191,379,222,63,882,126 + }; + + // individual + // table base sel0 sel1 sel2 sel3 + static const uint16_t g_etc1_y_solid_block_4i_configs[256] = + { + 0xA000,0xA800,0x540B,0xAA01,0xAA01,0xFE00,0xFF00,0xFF00,0x8,0x5515,0x5509,0x5509,0xAA03,0x5508,0x5508,0x9508,0xA508,0xA908,0xAA08,0x5513,0xAA09,0xAA09,0xAA05,0xFF08,0xFF08,0x10,0x551D,0x5511,0x5511, + 0xAA0B,0x5510,0x5510,0x9510,0xA510,0xA910,0xAA10,0x551B,0xAA11,0xAA11,0xAA0D,0xFF10,0xFF10,0x18,0x5525,0x5519,0x5519,0xAA13,0x5518,0x5518,0x9518,0xA518,0xA918,0xAA18,0x5523,0xAA19,0xAA19,0xAA15, + 0xFF18,0xFF18,0x20,0x552D,0x5521,0x5521,0xAA1B,0x5520,0x5520,0x9520,0xA520,0xA920,0xAA20,0x552B,0xAA21,0xAA21,0xAA1D,0xFF20,0xFF20,0x28,0x5535,0x5529,0x5529,0xAA23,0x5528,0x5528,0x9528,0xA528,0xA928, + 0xAA28,0x5533,0xAA29,0xAA29,0xAA25,0xFF28,0xFF28,0x30,0x553D,0x5531,0x5531,0xAA2B,0x5530,0x5530,0x9530,0xA530,0xA930,0xAA30,0x553B,0xAA31,0xAA31,0xAA2D,0xFF30,0xFF30,0x38,0x5545,0x5539,0x5539,0xAA33, + 0x5538,0x5538,0x9538,0xA538,0xA938,0xAA38,0x5543,0xAA39,0xAA39,0xAA35,0xFF38,0xFF38,0x40,0x554D,0x5541,0x5541,0xAA3B,0x5540,0x5540,0x9540,0xA540,0xA940,0xAA40,0x554B,0xAA41,0xAA41,0xAA3D,0xFF40,0xFF40, + 0x48,0x5555,0x5549,0x5549,0xAA43,0x5548,0x5548,0x9548,0xA548,0xA948,0xAA48,0x5553,0xAA49,0xAA49,0xAA45,0xFF48,0xFF48,0x50,0x555D,0x5551,0x5551,0xAA4B,0x5550,0x5550,0x9550,0xA550,0xA950,0xAA50,0x555B, + 0xAA51,0xAA51,0xAA4D,0xFF50,0xFF50,0x58,0x5565,0x5559,0x5559,0xAA53,0x5558,0x5558,0x9558,0xA558,0xA958,0xAA58,0x5563,0xAA59,0xAA59,0xAA55,0xFF58,0xFF58,0x60,0x556D,0x5561,0x5561,0xAA5B,0x5560,0x5560, + 0x9560,0xA560,0xA960,0xAA60,0x556B,0xAA61,0xAA61,0xAA5D,0xFF60,0xFF60,0x68,0x5575,0x5569,0x5569,0xAA63,0x5568,0x5568,0x9568,0xA568,0xA968,0xAA68,0x5573,0xAA69,0xAA69,0xAA65,0xFF68,0xFF68,0x70,0x557D, + 0x5571,0x5571,0xAA6B,0x5570,0x5570,0x9570,0xA570,0xA970,0xAA70,0x557B,0xAA71,0xAA71,0xAA6D,0xFF70,0xFF70,0x78,0x78,0x5579,0x5579,0xAA73,0x5578,0x9578,0x2578,0xE6E,0x278 + }; + + static const uint16_t g_etc1_y_solid_block_2i_configs[256] = + { + 0x416,0x800,0xA00,0x50B,0xA01,0xA01,0xF00,0xF00,0xF00,0x8,0x515,0x509,0x509,0xA03,0x508,0x508,0xF01,0xF01,0xA08,0xA08,0x513,0xA09,0xA09,0xA05,0xF08,0xF08,0x10,0x51D,0x511,0x511,0xA0B,0x510,0x510,0xF09, + 0xF09,0xA10,0xA10,0x51B,0xA11,0xA11,0xA0D,0xF10,0xF10,0x18,0x525,0x519,0x519,0xA13,0x518,0x518,0xF11,0xF11,0xA18,0xA18,0x523,0xA19,0xA19,0xA15,0xF18,0xF18,0x20,0x52D,0x521,0x521,0xA1B,0x520,0x520,0xF19, + 0xF19,0xA20,0xA20,0x52B,0xA21,0xA21,0xA1D,0xF20,0xF20,0x28,0x535,0x529,0x529,0xA23,0x528,0x528,0xF21,0xF21,0xA28,0xA28,0x533,0xA29,0xA29,0xA25,0xF28,0xF28,0x30,0x53D,0x531,0x531,0xA2B,0x530,0x530,0xF29, + 0xF29,0xA30,0xA30,0x53B,0xA31,0xA31,0xA2D,0xF30,0xF30,0x38,0x545,0x539,0x539,0xA33,0x538,0x538,0xF31,0xF31,0xA38,0xA38,0x543,0xA39,0xA39,0xA35,0xF38,0xF38,0x40,0x54D,0x541,0x541,0xA3B,0x540,0x540,0xF39, + 0xF39,0xA40,0xA40,0x54B,0xA41,0xA41,0xA3D,0xF40,0xF40,0x48,0x555,0x549,0x549,0xA43,0x548,0x548,0xF41,0xF41,0xA48,0xA48,0x553,0xA49,0xA49,0xA45,0xF48,0xF48,0x50,0x55D,0x551,0x551,0xA4B,0x550,0x550,0xF49, + 0xF49,0xA50,0xA50,0x55B,0xA51,0xA51,0xA4D,0xF50,0xF50,0x58,0x565,0x559,0x559,0xA53,0x558,0x558,0xF51,0xF51,0xA58,0xA58,0x563,0xA59,0xA59,0xA55,0xF58,0xF58,0x60,0x56D,0x561,0x561,0xA5B,0x560,0x560,0xF59, + 0xF59,0xA60,0xA60,0x56B,0xA61,0xA61,0xA5D,0xF60,0xF60,0x68,0x575,0x569,0x569,0xA63,0x568,0x568,0xF61,0xF61,0xA68,0xA68,0x573,0xA69,0xA69,0xA65,0xF68,0xF68,0x70,0x57D,0x571,0x571,0xA6B,0x570,0x570,0xF69, + 0xF69,0xA70,0xA70,0x57B,0xA71,0xA71,0xA6D,0xF70,0xF70,0x78,0x78,0x579,0x579,0xA73,0x578,0x578,0xE6E,0x278 + }; + + static const uint16_t g_etc1_y_solid_block_1i_configs[256] = + { + 0x0,0x116,0x200,0x200,0x10B,0x201,0x201,0x300,0x300,0x8,0x115,0x109,0x109,0x203,0x108,0x108,0x114,0x301,0x204,0x208,0x208,0x113,0x209,0x209,0x205,0x308,0x10,0x11D,0x111,0x111,0x20B,0x110,0x110,0x11C,0x309, + 0x20C,0x210,0x210,0x11B,0x211,0x211,0x20D,0x310,0x18,0x125,0x119,0x119,0x213,0x118,0x118,0x124,0x311,0x214,0x218,0x218,0x123,0x219,0x219,0x215,0x318,0x20,0x12D,0x121,0x121,0x21B,0x120,0x120,0x12C,0x319,0x21C, + 0x220,0x220,0x12B,0x221,0x221,0x21D,0x320,0x28,0x135,0x129,0x129,0x223,0x128,0x128,0x134,0x321,0x224,0x228,0x228,0x133,0x229,0x229,0x225,0x328,0x30,0x13D,0x131,0x131,0x22B,0x130,0x130,0x13C,0x329,0x22C,0x230, + 0x230,0x13B,0x231,0x231,0x22D,0x330,0x38,0x145,0x139,0x139,0x233,0x138,0x138,0x144,0x331,0x234,0x238,0x238,0x143,0x239,0x239,0x235,0x338,0x40,0x14D,0x141,0x141,0x23B,0x140,0x140,0x14C,0x339,0x23C,0x240,0x240, + 0x14B,0x241,0x241,0x23D,0x340,0x48,0x155,0x149,0x149,0x243,0x148,0x148,0x154,0x341,0x244,0x248,0x248,0x153,0x249,0x249,0x245,0x348,0x50,0x15D,0x151,0x151,0x24B,0x150,0x150,0x15C,0x349,0x24C,0x250,0x250,0x15B, + 0x251,0x251,0x24D,0x350,0x58,0x165,0x159,0x159,0x253,0x158,0x158,0x164,0x351,0x254,0x258,0x258,0x163,0x259,0x259,0x255,0x358,0x60,0x16D,0x161,0x161,0x25B,0x160,0x160,0x16C,0x359,0x25C,0x260,0x260,0x16B,0x261, + 0x261,0x25D,0x360,0x68,0x175,0x169,0x169,0x263,0x168,0x168,0x174,0x361,0x264,0x268,0x268,0x173,0x269,0x269,0x265,0x368,0x70,0x17D,0x171,0x171,0x26B,0x170,0x170,0x17C,0x369,0x26C,0x270,0x270,0x17B,0x271,0x271, + 0x26D,0x370,0x78,0x78,0x179,0x179,0x273,0x178,0x178,0x26E,0x278 + }; + + // We don't have any useful hints to accelerate single channel ETC1, so we need to real-time encode from scratch. + bool transcode_uastc_to_etc1(const uastc_block& src_blk, void* pDst, uint32_t channel) + { + unpacked_uastc_block unpacked_src_blk; + if (!unpack_uastc(src_blk, unpacked_src_blk, false)) + return false; + +#if 0 + for (uint32_t individ = 0; individ < 2; individ++) + { + uint32_t overall_error = 0; + + for (uint32_t c = 0; c < 256; c++) + { + uint32_t best_err = UINT32_MAX; + uint32_t best_individ = 0; + uint32_t best_base = 0; + uint32_t best_sels[4] = { 0,0,0,0 }; + uint32_t best_table = 0; + + const uint32_t limit = individ ? 16 : 32; + + for (uint32_t table = 0; table < 8; table++) + { + for (uint32_t base = 0; base < limit; base++) + { + uint32_t total_e = 0; + uint32_t sels[4] = { 0,0,0,0 }; + + const uint32_t N = 4; + for (uint32_t i = 0; i < std::min(N, (256 - c)); i++) + { + uint32_t best_sel_e = UINT32_MAX; + uint32_t best_sel = 0; + + for (uint32_t sel = 0; sel < 4; sel++) + { + int val = individ ? ((base << 4) | base) : ((base << 3) | (base >> 2)); + val = clamp255(val + g_etc1_inten_tables[table][sel]); + + int e = iabs(val - clamp255(c + i)); + if (e < best_sel_e) + { + best_sel_e = e; + best_sel = sel; + } + + } // sel + + sels[i] = best_sel; + total_e += best_sel_e * best_sel_e; + + } // i + + if (total_e < best_err) + { + best_err = total_e; + best_individ = individ; + best_base = base; + memcpy(best_sels, sels, sizeof(best_sels)); + best_table = table; + } + + } // base + } // table + + //printf("%u: %u,%u,%u,%u,%u,%u,%u,%u\n", c, best_err, best_individ, best_table, best_base, best_sels[0], best_sels[1], best_sels[2], best_sels[3]); + + uint32_t encoded = best_table | (best_base << 3) | + (best_sels[0] << 8) | + (best_sels[1] << 10) | + (best_sels[2] << 12) | + (best_sels[3] << 14); + + printf("0x%X,", encoded); + + overall_error += best_err; + } // c + + printf("\n"); + printf("Overall error: %u\n", overall_error); + + } // individ + + exit(0); +#endif + +#if 0 + for (uint32_t individ = 0; individ < 2; individ++) + { + uint32_t overall_error = 0; + + for (uint32_t c = 0; c < 256; c++) + { + uint32_t best_err = UINT32_MAX; + uint32_t best_individ = 0; + uint32_t best_base = 0; + uint32_t best_sels[4] = { 0,0,0,0 }; + uint32_t best_table = 0; + + const uint32_t limit = individ ? 16 : 32; + + for (uint32_t table = 0; table < 8; table++) + { + for (uint32_t base = 0; base < limit; base++) + { + uint32_t total_e = 0; + uint32_t sels[4] = { 0,0,0,0 }; + + const uint32_t N = 1; + for (uint32_t i = 0; i < std::min(N, (256 - c)); i++) + { + uint32_t best_sel_e = UINT32_MAX; + uint32_t best_sel = 0; + + for (uint32_t sel = 0; sel < 4; sel++) + { + int val = individ ? ((base << 4) | base) : ((base << 3) | (base >> 2)); + val = clamp255(val + g_etc1_inten_tables[table][sel]); + + int e = iabs(val - clamp255(c + i)); + if (e < best_sel_e) + { + best_sel_e = e; + best_sel = sel; + } + + } // sel + + sels[i] = best_sel; + total_e += best_sel_e * best_sel_e; + + } // i + + if (total_e < best_err) + { + best_err = total_e; + best_individ = individ; + best_base = base; + memcpy(best_sels, sels, sizeof(best_sels)); + best_table = table; + } + + } // base + } // table + + //printf("%u: %u,%u,%u,%u,%u,%u,%u,%u\n", c, best_err, best_individ, best_table, best_base, best_sels[0], best_sels[1], best_sels[2], best_sels[3]); + + uint32_t encoded = best_table | (best_base << 3) | + (best_sels[0] << 8) | + (best_sels[1] << 10) | + (best_sels[2] << 12) | + (best_sels[3] << 14); + + printf("0x%X,", encoded); + + overall_error += best_err; + } // c + + printf("\n"); + printf("Overall error: %u\n", overall_error); + + } // individ + + exit(0); +#endif + + decoder_etc_block& dst_blk = *static_cast(pDst); + + if (unpacked_src_blk.m_mode == UASTC_MODE_INDEX_SOLID_COLOR) + { + const uint32_t y = unpacked_src_blk.m_solid_color[channel]; + const uint32_t encoded_config = g_etc1_y_solid_block_configs[y]; + + const uint32_t base = encoded_config & 31; + const uint32_t sel = (encoded_config >> 5) & 3; + const uint32_t table = encoded_config >> 7; + + dst_blk.m_bytes[3] = (uint8_t)(2 | (table << 5) | (table << 2)); + + dst_blk.m_bytes[0] = (uint8_t)(base << 3); + dst_blk.m_bytes[1] = (uint8_t)(base << 3); + dst_blk.m_bytes[2] = (uint8_t)(base << 3); + + memcpy(dst_blk.m_bytes + 4, &s_etc1_solid_selectors[sel][0], 4); + return true; + } + + color32 block_pixels[4][4]; + const bool unpack_srgb = false; + if (!unpack_uastc(unpacked_src_blk, &block_pixels[0][0], unpack_srgb)) + return false; + + uint8_t block_y[4][4]; + for (uint32_t i = 0; i < 16; i++) + ((uint8_t*)block_y)[i] = ((color32*)block_pixels)[i][channel]; + + int upper_avg, lower_avg, left_avg, right_avg; + bool flip = pack_etc1_y_estimate_flipped(&block_y[0][0], upper_avg, lower_avg, left_avg, right_avg); + + // non-flipped: | | + // vs. + // flipped: -- + // -- + + uint32_t low[2] = { 255, 255 }, high[2] = { 0, 0 }; + + if (flip) + { + for (uint32_t y = 0; y < 2; y++) + { + for (uint32_t x = 0; x < 4; x++) + { + const uint32_t v = block_y[y][x]; + low[0] = std::min(low[0], v); + high[0] = std::max(high[0], v); + } + } + for (uint32_t y = 2; y < 4; y++) + { + for (uint32_t x = 0; x < 4; x++) + { + const uint32_t v = block_y[y][x]; + low[1] = std::min(low[1], v); + high[1] = std::max(high[1], v); + } + } + } + else + { + for (uint32_t y = 0; y < 4; y++) + { + for (uint32_t x = 0; x < 2; x++) + { + const uint32_t v = block_y[y][x]; + low[0] = std::min(low[0], v); + high[0] = std::max(high[0], v); + } + } + for (uint32_t y = 0; y < 4; y++) + { + for (uint32_t x = 2; x < 4; x++) + { + const uint32_t v = block_y[y][x]; + low[1] = std::min(low[1], v); + high[1] = std::max(high[1], v); + } + } + } + + const uint32_t range[2] = { high[0] - low[0], high[1] - low[1] }; + + dst_blk.m_bytes[3] = (uint8_t)((int)flip); + + if ((range[0] <= 3) && (range[1] <= 3)) + { + // This is primarily for better gradients. + dst_blk.m_bytes[0] = 0; + dst_blk.m_bytes[1] = 0; + dst_blk.m_bytes[2] = 0; + + uint16_t l_bitmask = 0, h_bitmask = 0; + + for (uint32_t subblock = 0; subblock < 2; subblock++) + { + const uint32_t encoded = (range[subblock] == 0) ? g_etc1_y_solid_block_1i_configs[low[subblock]] : ((range[subblock] < 2) ? g_etc1_y_solid_block_2i_configs[low[subblock]] : g_etc1_y_solid_block_4i_configs[low[subblock]]); + + const uint32_t table = encoded & 7; + const uint32_t base = (encoded >> 3) & 31; + assert(base <= 15); + const uint32_t sels[4] = { (encoded >> 8) & 3, (encoded >> 10) & 3, (encoded >> 12) & 3, (encoded >> 14) & 3 }; + + dst_blk.m_bytes[3] |= (uint8_t)(table << (subblock ? 2 : 5)); + + const uint32_t sv = base << (subblock ? 0 : 4); + dst_blk.m_bytes[0] |= (uint8_t)(sv); + dst_blk.m_bytes[1] |= (uint8_t)(sv); + dst_blk.m_bytes[2] |= (uint8_t)(sv); + + if (flip) + { + uint32_t ofs = subblock * 2; + for (uint32_t y = 0; y < 2; y++) + { + for (uint32_t x = 0; x < 4; x++) + { + uint32_t t = block_y[y + subblock * 2][x]; + assert(t >= low[subblock] && t <= high[subblock]); + t -= low[subblock]; + assert(t <= 3); + + t = g_selector_index_to_etc1[sels[t]]; + + assert(ofs < 16); + l_bitmask |= ((t & 1) << ofs); + h_bitmask |= ((t >> 1) << ofs); + ofs += 4; + } + + ofs = (int)ofs + 1 - 4 * 4; + } + } + else + { + uint32_t ofs = (subblock * 2) * 4; + for (uint32_t x = 0; x < 2; x++) + { + for (uint32_t y = 0; y < 4; y++) + { + uint32_t t = block_y[y][x + subblock * 2]; + assert(t >= low[subblock] && t <= high[subblock]); + t -= low[subblock]; + assert(t <= 3); + + t = g_selector_index_to_etc1[sels[t]]; + + assert(ofs < 16); + l_bitmask |= ((t & 1) << ofs); + h_bitmask |= ((t >> 1) << ofs); + ++ofs; + } + } + } + } // subblock + + dst_blk.m_bytes[7] = (uint8_t)(l_bitmask); + dst_blk.m_bytes[6] = (uint8_t)(l_bitmask >> 8); + dst_blk.m_bytes[5] = (uint8_t)(h_bitmask); + dst_blk.m_bytes[4] = (uint8_t)(h_bitmask >> 8); + + return true; + } + + uint32_t y0 = ((flip ? upper_avg : left_avg) * 31 + 127) / 255; + uint32_t y1 = ((flip ? lower_avg : right_avg) * 31 + 127) / 255; + + bool diff = true; + + int dy = y1 - y0; + + if ((dy < cETC1ColorDeltaMin) || (dy > cETC1ColorDeltaMax)) + { + diff = false; + + y0 = ((flip ? upper_avg : left_avg) * 15 + 127) / 255; + y1 = ((flip ? lower_avg : right_avg) * 15 + 127) / 255; + + dst_blk.m_bytes[0] = (uint8_t)(y1 | (y0 << 4)); + dst_blk.m_bytes[1] = (uint8_t)(y1 | (y0 << 4)); + dst_blk.m_bytes[2] = (uint8_t)(y1 | (y0 << 4)); + } + else + { + dy = basisu::clamp(dy, cETC1ColorDeltaMin, cETC1ColorDeltaMax); + + y1 = y0 + dy; + + if (dy < 0) dy += 8; + + dst_blk.m_bytes[0] = (uint8_t)((y0 << 3) | dy); + dst_blk.m_bytes[1] = (uint8_t)((y0 << 3) | dy); + dst_blk.m_bytes[2] = (uint8_t)((y0 << 3) | dy); + + dst_blk.m_bytes[3] |= 2; + } + + const uint32_t base_y[2] = { diff ? ((y0 << 3) | (y0 >> 2)) : ((y0 << 4) | y0), diff ? ((y1 << 3) | (y1 >> 2)) : ((y1 << 4) | y1) }; + + uint32_t enc_range[2]; + for (uint32_t subset = 0; subset < 2; subset++) + { + const int pos = basisu::iabs((int)high[subset] - (int)base_y[subset]); + const int neg = basisu::iabs((int)base_y[subset] - (int)low[subset]); + + enc_range[subset] = basisu::maximum(pos, neg); + } + + uint16_t l_bitmask = 0, h_bitmask = 0; + for (uint32_t subblock = 0; subblock < 2; subblock++) + { + if ((!diff) && (range[subblock] <= 3)) + { + const uint32_t encoded = (range[subblock] == 0) ? g_etc1_y_solid_block_1i_configs[low[subblock]] : ((range[subblock] < 2) ? g_etc1_y_solid_block_2i_configs[low[subblock]] : g_etc1_y_solid_block_4i_configs[low[subblock]]); + + const uint32_t table = encoded & 7; + const uint32_t base = (encoded >> 3) & 31; + assert(base <= 15); + const uint32_t sels[4] = { (encoded >> 8) & 3, (encoded >> 10) & 3, (encoded >> 12) & 3, (encoded >> 14) & 3 }; + + dst_blk.m_bytes[3] |= (uint8_t)(table << (subblock ? 2 : 5)); + + const uint32_t mask = ~(0xF << (subblock ? 0 : 4)); + + dst_blk.m_bytes[0] &= mask; + dst_blk.m_bytes[1] &= mask; + dst_blk.m_bytes[2] &= mask; + + const uint32_t sv = base << (subblock ? 0 : 4); + dst_blk.m_bytes[0] |= (uint8_t)(sv); + dst_blk.m_bytes[1] |= (uint8_t)(sv); + dst_blk.m_bytes[2] |= (uint8_t)(sv); + + if (flip) + { + uint32_t ofs = subblock * 2; + for (uint32_t y = 0; y < 2; y++) + { + for (uint32_t x = 0; x < 4; x++) + { + uint32_t t = block_y[y + subblock * 2][x]; + assert(t >= low[subblock] && t <= high[subblock]); + t -= low[subblock]; + assert(t <= 3); + + t = g_selector_index_to_etc1[sels[t]]; + + assert(ofs < 16); + l_bitmask |= ((t & 1) << ofs); + h_bitmask |= ((t >> 1) << ofs); + ofs += 4; + } + + ofs = (int)ofs + 1 - 4 * 4; + } + } + else + { + uint32_t ofs = (subblock * 2) * 4; + for (uint32_t x = 0; x < 2; x++) + { + for (uint32_t y = 0; y < 4; y++) + { + uint32_t t = block_y[y][x + subblock * 2]; + assert(t >= low[subblock] && t <= high[subblock]); + t -= low[subblock]; + assert(t <= 3); + + t = g_selector_index_to_etc1[sels[t]]; + + assert(ofs < 16); + l_bitmask |= ((t & 1) << ofs); + h_bitmask |= ((t >> 1) << ofs); + ++ofs; + } + } + } + + continue; + } // if + + uint32_t best_err = UINT32_MAX; + uint8_t best_sels[8]; + uint32_t best_inten = 0; + + const int base = base_y[subblock]; + + const int low_limit = -base; + const int high_limit = 255 - base; + + assert(low_limit <= 0 && high_limit >= 0); + + uint32_t inten_table_mask = 0xFF; + const uint32_t er = enc_range[subblock]; + // Each one of these tables is expensive to evaluate, so let's only examine the ones we know may be useful. + if (er <= 51) + { + inten_table_mask = 0xF; + + if (er > 22) + inten_table_mask &= ~(1 << 0); + + if ((er < 4) || (er > 39)) + inten_table_mask &= ~(1 << 1); + + if (er < 9) + inten_table_mask &= ~(1 << 2); + + if (er < 12) + inten_table_mask &= ~(1 << 3); + } + else + { + inten_table_mask &= ~((1 << 0) | (1 << 1)); + + if (er > 60) + inten_table_mask &= ~(1 << 2); + + if (er > 89) + inten_table_mask &= ~(1 << 3); + + if (er > 120) + inten_table_mask &= ~(1 << 4); + + if (er > 136) + inten_table_mask &= ~(1 << 5); + + if (er > 174) + inten_table_mask &= ~(1 << 6); + } + + for (uint32_t inten = 0; inten < 8; inten++) + { + if ((inten_table_mask & (1 << inten)) == 0) + continue; + + const int t0 = std::max(low_limit, g_etc1_inten_tables[inten][0]); + const int t1 = std::max(low_limit, g_etc1_inten_tables[inten][1]); + const int t2 = std::min(high_limit, g_etc1_inten_tables[inten][2]); + const int t3 = std::min(high_limit, g_etc1_inten_tables[inten][3]); + assert((t0 <= t1) && (t1 <= t2) && (t2 <= t3)); + + const int tv[4] = { t2, t3, t1, t0 }; + + const int thresh01 = t0 + t1; + const int thresh12 = t1 + t2; + const int thresh23 = t2 + t3; + + assert(thresh01 <= thresh12 && thresh12 <= thresh23); + + static const uint8_t s_table[4] = { 1, 0, 2, 3 }; + + uint32_t total_err = 0; + uint8_t sels[8]; + + if (flip) + { + if (((int)high[subblock] - base) * 2 < thresh01) + { + memset(sels, 3, 8); + + for (uint32_t y = 0; y < 2; y++) + { + for (uint32_t x = 0; x < 4; x++) + { + const int delta = (int)block_y[y + subblock * 2][x] - base; + + const uint32_t c = 3; + + uint32_t e = basisu::iabs(tv[c] - delta); + total_err += e * e; + } + if (total_err >= best_err) + break; + } + } + else if (((int)low[subblock] - base) * 2 >= thresh23) + { + memset(sels, 1, 8); + + for (uint32_t y = 0; y < 2; y++) + { + for (uint32_t x = 0; x < 4; x++) + { + const int delta = (int)block_y[y + subblock * 2][x] - base; + + const uint32_t c = 1; + + uint32_t e = basisu::iabs(tv[c] - delta); + total_err += e * e; + } + if (total_err >= best_err) + break; + } + } + else + { + for (uint32_t y = 0; y < 2; y++) + { + for (uint32_t x = 0; x < 4; x++) + { + const int delta = (int)block_y[y + subblock * 2][x] - base; + const int delta2 = delta * 2; + + uint32_t c = s_table[(delta2 < thresh01) + (delta2 < thresh12) + (delta2 < thresh23)]; + sels[y * 4 + x] = (uint8_t)c; + + uint32_t e = basisu::iabs(tv[c] - delta); + total_err += e * e; + } + if (total_err >= best_err) + break; + } + } + } + else + { + if (((int)high[subblock] - base) * 2 < thresh01) + { + memset(sels, 3, 8); + + for (uint32_t y = 0; y < 4; y++) + { + for (uint32_t x = 0; x < 2; x++) + { + const int delta = (int)block_y[y][x + subblock * 2] - base; + + const uint32_t c = 3; + + uint32_t e = basisu::iabs(tv[c] - delta); + total_err += e * e; + } + if (total_err >= best_err) + break; + } + } + else if (((int)low[subblock] - base) * 2 >= thresh23) + { + memset(sels, 1, 8); + + for (uint32_t y = 0; y < 4; y++) + { + for (uint32_t x = 0; x < 2; x++) + { + const int delta = (int)block_y[y][x + subblock * 2] - base; + + const uint32_t c = 1; + + uint32_t e = basisu::iabs(tv[c] - delta); + total_err += e * e; + } + if (total_err >= best_err) + break; + } + } + else + { + for (uint32_t y = 0; y < 4; y++) + { + for (uint32_t x = 0; x < 2; x++) + { + const int delta = (int)block_y[y][x + subblock * 2] - base; + const int delta2 = delta * 2; + + uint32_t c = s_table[(delta2 < thresh01) + (delta2 < thresh12) + (delta2 < thresh23)]; + sels[y * 2 + x] = (uint8_t)c; + + uint32_t e = basisu::iabs(tv[c] - delta); + total_err += e * e; + } + if (total_err >= best_err) + break; + } + } + } + + if (total_err < best_err) + { + best_err = total_err; + best_inten = inten; + memcpy(best_sels, sels, 8); + } + + } // inten + + //g_inten_hist[best_inten][enc_range[subblock]]++; + + dst_blk.m_bytes[3] |= (uint8_t)(best_inten << (subblock ? 2 : 5)); + + if (flip) + { + uint32_t ofs = subblock * 2; + for (uint32_t y = 0; y < 2; y++) + { + for (uint32_t x = 0; x < 4; x++) + { + uint32_t t = best_sels[y * 4 + x]; + + assert(ofs < 16); + l_bitmask |= ((t & 1) << ofs); + h_bitmask |= ((t >> 1) << ofs); + ofs += 4; + } + + ofs = (int)ofs + 1 - 4 * 4; + } + } + else + { + uint32_t ofs = (subblock * 2) * 4; + for (uint32_t x = 0; x < 2; x++) + { + for (uint32_t y = 0; y < 4; y++) + { + uint32_t t = best_sels[y * 2 + x]; + + assert(ofs < 16); + l_bitmask |= ((t & 1) << ofs); + h_bitmask |= ((t >> 1) << ofs); + ++ofs; + } + } + } + + } // subblock + + dst_blk.m_bytes[7] = (uint8_t)(l_bitmask); + dst_blk.m_bytes[6] = (uint8_t)(l_bitmask >> 8); + dst_blk.m_bytes[5] = (uint8_t)(h_bitmask); + dst_blk.m_bytes[4] = (uint8_t)(h_bitmask >> 8); + + return true; + } + + const uint32_t ETC2_EAC_MIN_VALUE_SELECTOR = 3, ETC2_EAC_MAX_VALUE_SELECTOR = 7; + + void transcode_uastc_to_etc2_eac_a8(unpacked_uastc_block& unpacked_src_blk, color32 block_pixels[4][4], void* pDst) + { + eac_block& dst = *static_cast(pDst); + const color32* pSrc_pixels = &block_pixels[0][0]; + + if ((!g_uastc_mode_has_alpha[unpacked_src_blk.m_mode]) || (unpacked_src_blk.m_mode == UASTC_MODE_INDEX_SOLID_COLOR)) + { + const uint32_t a = (unpacked_src_blk.m_mode == UASTC_MODE_INDEX_SOLID_COLOR) ? unpacked_src_blk.m_solid_color[3] : 255; + + dst.m_base = a; + dst.m_table = 13; + dst.m_multiplier = 1; + + memcpy(dst.m_selectors, g_etc2_eac_a8_sel4, sizeof(g_etc2_eac_a8_sel4)); + + return; + } + + uint32_t min_a = 255, max_a = 0; + for (uint32_t i = 0; i < 16; i++) + { + min_a = std::min(min_a, pSrc_pixels[i].a); + max_a = std::max(max_a, pSrc_pixels[i].a); + } + + if (min_a == max_a) + { + dst.m_base = min_a; + dst.m_table = 13; + dst.m_multiplier = 1; + + memcpy(dst.m_selectors, g_etc2_eac_a8_sel4, sizeof(g_etc2_eac_a8_sel4)); + return; + } + + const uint32_t table = unpacked_src_blk.m_etc2_hints & 0xF; + const int multiplier = unpacked_src_blk.m_etc2_hints >> 4; + + assert(multiplier >= 1); + + dst.m_multiplier = multiplier; + dst.m_table = table; + + const float range = (float)(g_eac_modifier_table[dst.m_table][ETC2_EAC_MAX_VALUE_SELECTOR] - g_eac_modifier_table[dst.m_table][ETC2_EAC_MIN_VALUE_SELECTOR]); + const int center = (int)roundf(basisu::lerp((float)min_a, (float)max_a, (float)(0 - g_eac_modifier_table[dst.m_table][ETC2_EAC_MIN_VALUE_SELECTOR]) / range)); + + dst.m_base = center; + + const int8_t* pTable = &g_eac_modifier_table[dst.m_table][0]; + + uint32_t vals[8]; + for (uint32_t j = 0; j < 8; j++) + vals[j] = clamp255(center + (pTable[j] * multiplier)); + + uint64_t sels = 0; + for (uint32_t i = 0; i < 16; i++) + { + const uint32_t a = block_pixels[i & 3][i >> 2].a; + + const uint32_t err0 = (basisu::iabs(vals[0] - a) << 3) | 0; + const uint32_t err1 = (basisu::iabs(vals[1] - a) << 3) | 1; + const uint32_t err2 = (basisu::iabs(vals[2] - a) << 3) | 2; + const uint32_t err3 = (basisu::iabs(vals[3] - a) << 3) | 3; + const uint32_t err4 = (basisu::iabs(vals[4] - a) << 3) | 4; + const uint32_t err5 = (basisu::iabs(vals[5] - a) << 3) | 5; + const uint32_t err6 = (basisu::iabs(vals[6] - a) << 3) | 6; + const uint32_t err7 = (basisu::iabs(vals[7] - a) << 3) | 7; + + const uint32_t min_err = basisu::minimum(basisu::minimum(basisu::minimum(basisu::minimum(basisu::minimum(basisu::minimum(err0, err1, err2), err3), err4), err5), err6), err7); + + const uint64_t best_index = min_err & 7; + sels |= (best_index << (45 - i * 3)); + } + + dst.set_selector_bits(sels); + } + + bool transcode_uastc_to_etc2_rgba(const uastc_block& src_blk, void* pDst) + { + eac_block& dst_etc2_eac_a8_blk = *static_cast(pDst); + decoder_etc_block& dst_etc1_blk = static_cast(pDst)[1]; + + unpacked_uastc_block unpacked_src_blk; + if (!unpack_uastc(src_blk, unpacked_src_blk, false)) + return false; + + color32 block_pixels[4][4]; + if (unpacked_src_blk.m_mode != UASTC_MODE_INDEX_SOLID_COLOR) + { + const bool unpack_srgb = false; + if (!unpack_uastc(unpacked_src_blk, &block_pixels[0][0], unpack_srgb)) + return false; + } + + transcode_uastc_to_etc2_eac_a8(unpacked_src_blk, block_pixels, &dst_etc2_eac_a8_blk); + + transcode_uastc_to_etc1(unpacked_src_blk, block_pixels, &dst_etc1_blk); + + return true; + } + + static const uint8_t s_uastc5_to_bc1[32] = { 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1 }; + static const uint8_t s_uastc4_to_bc1[16] = { 0, 0, 0, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 1, 1, 1 }; + static const uint8_t s_uastc3_to_bc1[8] = { 0, 0, 2, 2, 3, 3, 1, 1 }; + static const uint8_t s_uastc2_to_bc1[4] = { 0, 2, 3, 1 }; + static const uint8_t s_uastc1_to_bc1[2] = { 0, 1 }; + const uint8_t* s_uastc_to_bc1_weights[6] = { nullptr, s_uastc1_to_bc1, s_uastc2_to_bc1, s_uastc3_to_bc1, s_uastc4_to_bc1, s_uastc5_to_bc1 }; + + void encode_bc4(void* pDst, const uint8_t* pPixels, uint32_t stride) + { + uint32_t min0_v, max0_v, min1_v, max1_v,min2_v, max2_v, min3_v, max3_v; + + { + min0_v = max0_v = pPixels[0 * stride]; + min1_v = max1_v = pPixels[1 * stride]; + min2_v = max2_v = pPixels[2 * stride]; + min3_v = max3_v = pPixels[3 * stride]; + } + + { + uint32_t v0 = pPixels[4 * stride]; min0_v = std::min(min0_v, v0); max0_v = std::max(max0_v, v0); + uint32_t v1 = pPixels[5 * stride]; min1_v = std::min(min1_v, v1); max1_v = std::max(max1_v, v1); + uint32_t v2 = pPixels[6 * stride]; min2_v = std::min(min2_v, v2); max2_v = std::max(max2_v, v2); + uint32_t v3 = pPixels[7 * stride]; min3_v = std::min(min3_v, v3); max3_v = std::max(max3_v, v3); + } + + { + uint32_t v0 = pPixels[8 * stride]; min0_v = std::min(min0_v, v0); max0_v = std::max(max0_v, v0); + uint32_t v1 = pPixels[9 * stride]; min1_v = std::min(min1_v, v1); max1_v = std::max(max1_v, v1); + uint32_t v2 = pPixels[10 * stride]; min2_v = std::min(min2_v, v2); max2_v = std::max(max2_v, v2); + uint32_t v3 = pPixels[11 * stride]; min3_v = std::min(min3_v, v3); max3_v = std::max(max3_v, v3); + } + + { + uint32_t v0 = pPixels[12 * stride]; min0_v = std::min(min0_v, v0); max0_v = std::max(max0_v, v0); + uint32_t v1 = pPixels[13 * stride]; min1_v = std::min(min1_v, v1); max1_v = std::max(max1_v, v1); + uint32_t v2 = pPixels[14 * stride]; min2_v = std::min(min2_v, v2); max2_v = std::max(max2_v, v2); + uint32_t v3 = pPixels[15 * stride]; min3_v = std::min(min3_v, v3); max3_v = std::max(max3_v, v3); + } + + const uint32_t min_v = basisu::minimum(min0_v, min1_v, min2_v, min3_v); + const uint32_t max_v = basisu::maximum(max0_v, max1_v, max2_v, max3_v); + + uint8_t* pDst_bytes = static_cast(pDst); + pDst_bytes[0] = (uint8_t)max_v; + pDst_bytes[1] = (uint8_t)min_v; + + if (max_v == min_v) + { + memset(pDst_bytes + 2, 0, 6); + return; + } + + const uint32_t delta = max_v - min_v; + + // min_v is now 0. Compute thresholds between values by scaling max_v. It's x14 because we're adding two x7 scale factors. + const int t0 = delta * 13; + const int t1 = delta * 11; + const int t2 = delta * 9; + const int t3 = delta * 7; + const int t4 = delta * 5; + const int t5 = delta * 3; + const int t6 = delta * 1; + + // BC4 floors in its divisions, which we compensate for with the 4 bias. + // This function is optimal for all possible inputs (i.e. it outputs the same results as checking all 8 values and choosing the closest one). + const int bias = 4 - min_v * 14; + + static const uint32_t s_tran0[8] = { 1U , 7U , 6U , 5U , 4U , 3U , 2U , 0U }; + static const uint32_t s_tran1[8] = { 1U << 3U, 7U << 3U, 6U << 3U, 5U << 3U, 4U << 3U, 3U << 3U, 2U << 3U, 0U << 3U }; + static const uint32_t s_tran2[8] = { 1U << 6U, 7U << 6U, 6U << 6U, 5U << 6U, 4U << 6U, 3U << 6U, 2U << 6U, 0U << 6U }; + static const uint32_t s_tran3[8] = { 1U << 9U, 7U << 9U, 6U << 9U, 5U << 9U, 4U << 9U, 3U << 9U, 2U << 9U, 0U << 9U }; + + uint64_t a0, a1, a2, a3; + { + const int v0 = pPixels[0 * stride] * 14 + bias; + const int v1 = pPixels[1 * stride] * 14 + bias; + const int v2 = pPixels[2 * stride] * 14 + bias; + const int v3 = pPixels[3 * stride] * 14 + bias; + a0 = s_tran0[(v0 >= t0) + (v0 >= t1) + (v0 >= t2) + (v0 >= t3) + (v0 >= t4) + (v0 >= t5) + (v0 >= t6)]; + a1 = s_tran1[(v1 >= t0) + (v1 >= t1) + (v1 >= t2) + (v1 >= t3) + (v1 >= t4) + (v1 >= t5) + (v1 >= t6)]; + a2 = s_tran2[(v2 >= t0) + (v2 >= t1) + (v2 >= t2) + (v2 >= t3) + (v2 >= t4) + (v2 >= t5) + (v2 >= t6)]; + a3 = s_tran3[(v3 >= t0) + (v3 >= t1) + (v3 >= t2) + (v3 >= t3) + (v3 >= t4) + (v3 >= t5) + (v3 >= t6)]; + } + + { + const int v0 = pPixels[4 * stride] * 14 + bias; + const int v1 = pPixels[5 * stride] * 14 + bias; + const int v2 = pPixels[6 * stride] * 14 + bias; + const int v3 = pPixels[7 * stride] * 14 + bias; + a0 |= (s_tran0[(v0 >= t0) + (v0 >= t1) + (v0 >= t2) + (v0 >= t3) + (v0 >= t4) + (v0 >= t5) + (v0 >= t6)] << 12U); + a1 |= (s_tran1[(v1 >= t0) + (v1 >= t1) + (v1 >= t2) + (v1 >= t3) + (v1 >= t4) + (v1 >= t5) + (v1 >= t6)] << 12U); + a2 |= (s_tran2[(v2 >= t0) + (v2 >= t1) + (v2 >= t2) + (v2 >= t3) + (v2 >= t4) + (v2 >= t5) + (v2 >= t6)] << 12U); + a3 |= (s_tran3[(v3 >= t0) + (v3 >= t1) + (v3 >= t2) + (v3 >= t3) + (v3 >= t4) + (v3 >= t5) + (v3 >= t6)] << 12U); + } + + { + const int v0 = pPixels[8 * stride] * 14 + bias; + const int v1 = pPixels[9 * stride] * 14 + bias; + const int v2 = pPixels[10 * stride] * 14 + bias; + const int v3 = pPixels[11 * stride] * 14 + bias; + a0 |= (((uint64_t)s_tran0[(v0 >= t0) + (v0 >= t1) + (v0 >= t2) + (v0 >= t3) + (v0 >= t4) + (v0 >= t5) + (v0 >= t6)]) << 24U); + a1 |= (((uint64_t)s_tran1[(v1 >= t0) + (v1 >= t1) + (v1 >= t2) + (v1 >= t3) + (v1 >= t4) + (v1 >= t5) + (v1 >= t6)]) << 24U); + a2 |= (((uint64_t)s_tran2[(v2 >= t0) + (v2 >= t1) + (v2 >= t2) + (v2 >= t3) + (v2 >= t4) + (v2 >= t5) + (v2 >= t6)]) << 24U); + a3 |= (((uint64_t)s_tran3[(v3 >= t0) + (v3 >= t1) + (v3 >= t2) + (v3 >= t3) + (v3 >= t4) + (v3 >= t5) + (v3 >= t6)]) << 24U); + } + + { + const int v0 = pPixels[12 * stride] * 14 + bias; + const int v1 = pPixels[13 * stride] * 14 + bias; + const int v2 = pPixels[14 * stride] * 14 + bias; + const int v3 = pPixels[15 * stride] * 14 + bias; + a0 |= (((uint64_t)s_tran0[(v0 >= t0) + (v0 >= t1) + (v0 >= t2) + (v0 >= t3) + (v0 >= t4) + (v0 >= t5) + (v0 >= t6)]) << 36U); + a1 |= (((uint64_t)s_tran1[(v1 >= t0) + (v1 >= t1) + (v1 >= t2) + (v1 >= t3) + (v1 >= t4) + (v1 >= t5) + (v1 >= t6)]) << 36U); + a2 |= (((uint64_t)s_tran2[(v2 >= t0) + (v2 >= t1) + (v2 >= t2) + (v2 >= t3) + (v2 >= t4) + (v2 >= t5) + (v2 >= t6)]) << 36U); + a3 |= (((uint64_t)s_tran3[(v3 >= t0) + (v3 >= t1) + (v3 >= t2) + (v3 >= t3) + (v3 >= t4) + (v3 >= t5) + (v3 >= t6)]) << 36U); + } + + const uint64_t f = a0 | a1 | a2 | a3; + + pDst_bytes[2] = (uint8_t)f; + pDst_bytes[3] = (uint8_t)(f >> 8U); + pDst_bytes[4] = (uint8_t)(f >> 16U); + pDst_bytes[5] = (uint8_t)(f >> 24U); + pDst_bytes[6] = (uint8_t)(f >> 32U); + pDst_bytes[7] = (uint8_t)(f >> 40U); + } + + static void bc1_find_sels(const color32 *pSrc_pixels, uint32_t lr, uint32_t lg, uint32_t lb, uint32_t hr, uint32_t hg, uint32_t hb, uint8_t sels[16]) + { + uint32_t block_r[4], block_g[4], block_b[4]; + + block_r[0] = (lr << 3) | (lr >> 2); block_g[0] = (lg << 2) | (lg >> 4); block_b[0] = (lb << 3) | (lb >> 2); + block_r[3] = (hr << 3) | (hr >> 2); block_g[3] = (hg << 2) | (hg >> 4); block_b[3] = (hb << 3) | (hb >> 2); + block_r[1] = (block_r[0] * 2 + block_r[3]) / 3; block_g[1] = (block_g[0] * 2 + block_g[3]) / 3; block_b[1] = (block_b[0] * 2 + block_b[3]) / 3; + block_r[2] = (block_r[3] * 2 + block_r[0]) / 3; block_g[2] = (block_g[3] * 2 + block_g[0]) / 3; block_b[2] = (block_b[3] * 2 + block_b[0]) / 3; + + int ar = block_r[3] - block_r[0], ag = block_g[3] - block_g[0], ab = block_b[3] - block_b[0]; + + int dots[4]; + for (uint32_t i = 0; i < 4; i++) + dots[i] = (int)block_r[i] * ar + (int)block_g[i] * ag + (int)block_b[i] * ab; + + int t0 = dots[0] + dots[1], t1 = dots[1] + dots[2], t2 = dots[2] + dots[3]; + + ar *= 2; ag *= 2; ab *= 2; + + for (uint32_t i = 0; i < 16; i++) + { + const int d = pSrc_pixels[i].r * ar + pSrc_pixels[i].g * ag + pSrc_pixels[i].b * ab; + static const uint8_t s_sels[4] = { 3, 2, 1, 0 }; + + // Rounding matters here! + // d <= t0: <=, not <, to the later LS step "sees" a wider range of selectors. It matters for quality. + sels[i] = s_sels[(d <= t0) + (d < t1) + (d < t2)]; + } + } + + static inline void bc1_find_sels_2(const color32* pSrc_pixels, uint32_t lr, uint32_t lg, uint32_t lb, uint32_t hr, uint32_t hg, uint32_t hb, uint8_t sels[16]) + { + uint32_t block_r[4], block_g[4], block_b[4]; + + block_r[0] = (lr << 3) | (lr >> 2); block_g[0] = (lg << 2) | (lg >> 4); block_b[0] = (lb << 3) | (lb >> 2); + block_r[3] = (hr << 3) | (hr >> 2); block_g[3] = (hg << 2) | (hg >> 4); block_b[3] = (hb << 3) | (hb >> 2); + block_r[1] = (block_r[0] * 2 + block_r[3]) / 3; block_g[1] = (block_g[0] * 2 + block_g[3]) / 3; block_b[1] = (block_b[0] * 2 + block_b[3]) / 3; + block_r[2] = (block_r[3] * 2 + block_r[0]) / 3; block_g[2] = (block_g[3] * 2 + block_g[0]) / 3; block_b[2] = (block_b[3] * 2 + block_b[0]) / 3; + + int ar = block_r[3] - block_r[0], ag = block_g[3] - block_g[0], ab = block_b[3] - block_b[0]; + + int dots[4]; + for (uint32_t i = 0; i < 4; i++) + dots[i] = (int)block_r[i] * ar + (int)block_g[i] * ag + (int)block_b[i] * ab; + + int t0 = dots[0] + dots[1], t1 = dots[1] + dots[2], t2 = dots[2] + dots[3]; + + ar *= 2; ag *= 2; ab *= 2; + + static const uint8_t s_sels[4] = { 3, 2, 1, 0 }; + + for (uint32_t i = 0; i < 16; i += 4) + { + const int d0 = pSrc_pixels[i+0].r * ar + pSrc_pixels[i+0].g * ag + pSrc_pixels[i+0].b * ab; + const int d1 = pSrc_pixels[i+1].r * ar + pSrc_pixels[i+1].g * ag + pSrc_pixels[i+1].b * ab; + const int d2 = pSrc_pixels[i+2].r * ar + pSrc_pixels[i+2].g * ag + pSrc_pixels[i+2].b * ab; + const int d3 = pSrc_pixels[i+3].r * ar + pSrc_pixels[i+3].g * ag + pSrc_pixels[i+3].b * ab; + + sels[i+0] = s_sels[(d0 <= t0) + (d0 < t1) + (d0 < t2)]; + sels[i+1] = s_sels[(d1 <= t0) + (d1 < t1) + (d1 < t2)]; + sels[i+2] = s_sels[(d2 <= t0) + (d2 < t1) + (d2 < t2)]; + sels[i+3] = s_sels[(d3 <= t0) + (d3 < t1) + (d3 < t2)]; + } + } + + struct vec3F { float c[3]; }; + + static bool compute_least_squares_endpoints_rgb(const color32* pColors, const uint8_t* pSelectors, vec3F* pXl, vec3F* pXh) + { + // Derived from bc7enc16's LS function. + // Least squares using normal equations: http://www.cs.cornell.edu/~bindel/class/cs3220-s12/notes/lec10.pdf + // I did this in matrix form first, expanded out all the ops, then optimized it a bit. + uint32_t uq00_r = 0, uq10_r = 0, ut_r = 0, uq00_g = 0, uq10_g = 0, ut_g = 0, uq00_b = 0, uq10_b = 0, ut_b = 0; + + // This table is: 9 * (w * w), 9 * ((1.0f - w) * w), 9 * ((1.0f - w) * (1.0f - w)) + // where w is [0,1/3,2/3,1]. 9 is the perfect multiplier. + static const uint32_t s_weight_vals[4] = { 0x000009, 0x010204, 0x040201, 0x090000 }; + + uint32_t weight_accum = 0; + for (uint32_t i = 0; i < 16; i++) + { + const uint32_t r = pColors[i].c[0], g = pColors[i].c[1], b = pColors[i].c[2]; + const uint32_t sel = pSelectors[i]; + ut_r += r; + ut_g += g; + ut_b += b; + weight_accum += s_weight_vals[sel]; + uq00_r += sel * r; + uq00_g += sel * g; + uq00_b += sel * b; + } + + float q00_r = (float)uq00_r, q10_r = (float)uq10_r, t_r = (float)ut_r; + float q00_g = (float)uq00_g, q10_g = (float)uq10_g, t_g = (float)ut_g; + float q00_b = (float)uq00_b, q10_b = (float)uq10_b, t_b = (float)ut_b; + + q10_r = t_r * 3.0f - q00_r; + q10_g = t_g * 3.0f - q00_g; + q10_b = t_b * 3.0f - q00_b; + + float z00 = (float)((weight_accum >> 16) & 0xFF); + float z10 = (float)((weight_accum >> 8) & 0xFF); + float z11 = (float)(weight_accum & 0xFF); + float z01 = z10; + + float det = z00 * z11 - z01 * z10; + if (fabs(det) < 1e-8f) + return false; + + det = 3.0f / det; + + float iz00, iz01, iz10, iz11; + iz00 = z11 * det; + iz01 = -z01 * det; + iz10 = -z10 * det; + iz11 = z00 * det; + + pXl->c[0] = iz00 * q00_r + iz01 * q10_r; pXh->c[0] = iz10 * q00_r + iz11 * q10_r; + pXl->c[1] = iz00 * q00_g + iz01 * q10_g; pXh->c[1] = iz10 * q00_g + iz11 * q10_g; + pXl->c[2] = iz00 * q00_b + iz01 * q10_b; pXh->c[2] = iz10 * q00_b + iz11 * q10_b; + + // Check and fix channel singularities - might not be needed, but is in UASTC's encoder. + for (uint32_t c = 0; c < 3; c++) + { + if ((pXl->c[c] < 0.0f) || (pXh->c[c] > 255.0f)) + { + uint32_t lo_v = UINT32_MAX, hi_v = 0; + for (uint32_t i = 0; i < 16; i++) + { + lo_v = basisu::minimumu(lo_v, pColors[i].c[c]); + hi_v = basisu::maximumu(hi_v, pColors[i].c[c]); + } + + if (lo_v == hi_v) + { + pXl->c[c] = (float)lo_v; + pXh->c[c] = (float)hi_v; + } + } + } + + return true; + } + + void encode_bc1_solid_block(void* pDst, uint32_t fr, uint32_t fg, uint32_t fb) + { + dxt1_block* pDst_block = static_cast(pDst); + + uint32_t mask = 0xAA; + uint32_t max16 = (g_bc1_match5_equals_1[fr].m_hi << 11) | (g_bc1_match6_equals_1[fg].m_hi << 5) | g_bc1_match5_equals_1[fb].m_hi; + uint32_t min16 = (g_bc1_match5_equals_1[fr].m_lo << 11) | (g_bc1_match6_equals_1[fg].m_lo << 5) | g_bc1_match5_equals_1[fb].m_lo; + + if (min16 == max16) + { + // Always forbid 3 color blocks + // This is to guarantee that BC3 blocks never use punchthrough alpha (3 color) mode, which isn't supported on some (all?) GPU's. + mask = 0; + + // Make l > h + if (min16 > 0) + min16--; + else + { + // l = h = 0 + assert(min16 == max16 && max16 == 0); + + max16 = 1; + min16 = 0; + mask = 0x55; + } + + assert(max16 > min16); + } + + if (max16 < min16) + { + std::swap(max16, min16); + mask ^= 0x55; + } + + pDst_block->set_low_color(static_cast(max16)); + pDst_block->set_high_color(static_cast(min16)); + pDst_block->m_selectors[0] = static_cast(mask); + pDst_block->m_selectors[1] = static_cast(mask); + pDst_block->m_selectors[2] = static_cast(mask); + pDst_block->m_selectors[3] = static_cast(mask); + } + + static inline uint8_t to_5(uint32_t v) { v = v * 31 + 128; return (uint8_t)((v + (v >> 8)) >> 8); } + static inline uint8_t to_6(uint32_t v) { v = v * 63 + 128; return (uint8_t)((v + (v >> 8)) >> 8); } + + // Good references: squish library, stb_dxt. + void encode_bc1(void* pDst, const uint8_t* pPixels, uint32_t flags) + { + const color32* pSrc_pixels = (const color32*)pPixels; + dxt1_block* pDst_block = static_cast(pDst); + + int avg_r = -1, avg_g = 0, avg_b = 0; + int lr = 0, lg = 0, lb = 0, hr = 0, hg = 0, hb = 0; + uint8_t sels[16]; + + const bool use_sels = (flags & cEncodeBC1UseSelectors) != 0; + if (use_sels) + { + // Caller is jamming in their own selectors for us to try. + const uint32_t s = pDst_block->m_selectors[0] | (pDst_block->m_selectors[1] << 8) | (pDst_block->m_selectors[2] << 16) | (pDst_block->m_selectors[3] << 24); + + static const uint8_t s_sel_tran[4] = { 0, 3, 1, 2 }; + + for (uint32_t i = 0; i < 16; i++) + sels[i] = s_sel_tran[(s >> (i * 2)) & 3]; + } + else + { + const uint32_t fr = pSrc_pixels[0].r, fg = pSrc_pixels[0].g, fb = pSrc_pixels[0].b; + + uint32_t j; + for (j = 1; j < 16; j++) + if ((pSrc_pixels[j].r != fr) || (pSrc_pixels[j].g != fg) || (pSrc_pixels[j].b != fb)) + break; + + if (j == 16) + { + encode_bc1_solid_block(pDst, fr, fg, fb); + return; + } + + // Select 2 colors along the principle axis. (There must be a faster/simpler way.) + int total_r = fr, total_g = fg, total_b = fb; + int max_r = fr, max_g = fg, max_b = fb; + int min_r = fr, min_g = fg, min_b = fb; + for (uint32_t i = 1; i < 16; i++) + { + const int r = pSrc_pixels[i].r, g = pSrc_pixels[i].g, b = pSrc_pixels[i].b; + max_r = std::max(max_r, r); max_g = std::max(max_g, g); max_b = std::max(max_b, b); + min_r = std::min(min_r, r); min_g = std::min(min_g, g); min_b = std::min(min_b, b); + total_r += r; total_g += g; total_b += b; + } + + avg_r = (total_r + 8) >> 4, avg_g = (total_g + 8) >> 4, avg_b = (total_b + 8) >> 4; + + int icov[6] = { 0, 0, 0, 0, 0, 0 }; + for (uint32_t i = 0; i < 16; i++) + { + int r = (int)pSrc_pixels[i].r - avg_r; + int g = (int)pSrc_pixels[i].g - avg_g; + int b = (int)pSrc_pixels[i].b - avg_b; + icov[0] += r * r; + icov[1] += r * g; + icov[2] += r * b; + icov[3] += g * g; + icov[4] += g * b; + icov[5] += b * b; + } + + float cov[6]; + for (uint32_t i = 0; i < 6; i++) + cov[i] = static_cast(icov[i])* (1.0f / 255.0f); + +#if 0 + // Seems silly to use full PCA to choose 2 colors. The diff in avg. PSNR between using PCA vs. not is small (~.025 difference). + // TODO: Try 2 or 3 different normalized diagonal vectors, choose the one that results in the largest dot delta + int saxis_r = max_r - min_r; + int saxis_g = max_g - min_g; + int saxis_b = max_b - min_b; +#else + float xr = (float)(max_r - min_r); + float xg = (float)(max_g - min_g); + float xb = (float)(max_b - min_b); + //float xr = (float)(max_r - avg_r); // max-avg is nearly the same, and doesn't require computing min's + //float xg = (float)(max_g - avg_g); + //float xb = (float)(max_b - avg_b); + for (uint32_t power_iter = 0; power_iter < 4; power_iter++) + { + float r = xr * cov[0] + xg * cov[1] + xb * cov[2]; + float g = xr * cov[1] + xg * cov[3] + xb * cov[4]; + float b = xr * cov[2] + xg * cov[4] + xb * cov[5]; + xr = r; xg = g; xb = b; + } + + float k = basisu::maximum(fabsf(xr), fabsf(xg), fabsf(xb)); + int saxis_r = 306, saxis_g = 601, saxis_b = 117; + if (k >= 2) + { + float m = 1024.0f / k; + saxis_r = (int)(xr * m); + saxis_g = (int)(xg * m); + saxis_b = (int)(xb * m); + } +#endif + + int low_dot = INT_MAX, high_dot = INT_MIN, low_c = 0, high_c = 0; + for (uint32_t i = 0; i < 16; i++) + { + int dot = pSrc_pixels[i].r * saxis_r + pSrc_pixels[i].g * saxis_g + pSrc_pixels[i].b * saxis_b; + if (dot < low_dot) + { + low_dot = dot; + low_c = i; + } + if (dot > high_dot) + { + high_dot = dot; + high_c = i; + } + } + + lr = to_5(pSrc_pixels[low_c].r); + lg = to_6(pSrc_pixels[low_c].g); + lb = to_5(pSrc_pixels[low_c].b); + + hr = to_5(pSrc_pixels[high_c].r); + hg = to_6(pSrc_pixels[high_c].g); + hb = to_5(pSrc_pixels[high_c].b); + + bc1_find_sels(pSrc_pixels, lr, lg, lb, hr, hg, hb, sels); + } // if (use_sels) + + const uint32_t total_ls_passes = (flags & cEncodeBC1HigherQuality) ? 3 : (flags & cEncodeBC1HighQuality ? 2 : 1); + for (uint32_t ls_pass = 0; ls_pass < total_ls_passes; ls_pass++) + { + // This is where the real magic happens. We have an array of candidate selectors, so let's use least squares to compute the optimal low/high endpoint colors. + vec3F xl, xh; + if (!compute_least_squares_endpoints_rgb(pSrc_pixels, sels, &xl, &xh)) + { + if (avg_r < 0) + { + int total_r = 0, total_g = 0, total_b = 0; + for (uint32_t i = 0; i < 16; i++) + { + total_r += pSrc_pixels[i].r; + total_g += pSrc_pixels[i].g; + total_b += pSrc_pixels[i].b; + } + + avg_r = (total_r + 8) >> 4, avg_g = (total_g + 8) >> 4, avg_b = (total_b + 8) >> 4; + } + + // All selectors equal - treat it as a solid block which should always be equal or better. + lr = g_bc1_match5_equals_1[avg_r].m_hi; + lg = g_bc1_match6_equals_1[avg_g].m_hi; + lb = g_bc1_match5_equals_1[avg_b].m_hi; + + hr = g_bc1_match5_equals_1[avg_r].m_lo; + hg = g_bc1_match6_equals_1[avg_g].m_lo; + hb = g_bc1_match5_equals_1[avg_b].m_lo; + + // In high/higher quality mode, let it try again in case the optimal tables have caused the sels to diverge. + } + else + { + lr = basisu::clamp((int)((xl.c[0]) * (31.0f / 255.0f) + .5f), 0, 31); + lg = basisu::clamp((int)((xl.c[1]) * (63.0f / 255.0f) + .5f), 0, 63); + lb = basisu::clamp((int)((xl.c[2]) * (31.0f / 255.0f) + .5f), 0, 31); + + hr = basisu::clamp((int)((xh.c[0]) * (31.0f / 255.0f) + .5f), 0, 31); + hg = basisu::clamp((int)((xh.c[1]) * (63.0f / 255.0f) + .5f), 0, 63); + hb = basisu::clamp((int)((xh.c[2]) * (31.0f / 255.0f) + .5f), 0, 31); + } + + bc1_find_sels(pSrc_pixels, lr, lg, lb, hr, hg, hb, sels); + } + + uint32_t lc16 = dxt1_block::pack_unscaled_color(lr, lg, lb); + uint32_t hc16 = dxt1_block::pack_unscaled_color(hr, hg, hb); + + // Always forbid 3 color blocks + if (lc16 == hc16) + { + uint8_t mask = 0; + + // Make l > h + if (hc16 > 0) + hc16--; + else + { + // lc16 = hc16 = 0 + assert(lc16 == hc16 && hc16 == 0); + + hc16 = 0; + lc16 = 1; + mask = 0x55; // select hc16 + } + + assert(lc16 > hc16); + pDst_block->set_low_color(static_cast(lc16)); + pDst_block->set_high_color(static_cast(hc16)); + + pDst_block->m_selectors[0] = mask; + pDst_block->m_selectors[1] = mask; + pDst_block->m_selectors[2] = mask; + pDst_block->m_selectors[3] = mask; + } + else + { + uint8_t invert_mask = 0; + if (lc16 < hc16) + { + std::swap(lc16, hc16); + invert_mask = 0x55; + } + + assert(lc16 > hc16); + pDst_block->set_low_color((uint16_t)lc16); + pDst_block->set_high_color((uint16_t)hc16); + + uint32_t packed_sels = 0; + static const uint8_t s_sel_trans[4] = { 0, 2, 3, 1 }; + for (uint32_t i = 0; i < 16; i++) + packed_sels |= ((uint32_t)s_sel_trans[sels[i]] << (i * 2)); + + pDst_block->m_selectors[0] = (uint8_t)packed_sels ^ invert_mask; + pDst_block->m_selectors[1] = (uint8_t)(packed_sels >> 8) ^ invert_mask; + pDst_block->m_selectors[2] = (uint8_t)(packed_sels >> 16) ^ invert_mask; + pDst_block->m_selectors[3] = (uint8_t)(packed_sels >> 24) ^ invert_mask; + } + } + + void encode_bc1_alt(void* pDst, const uint8_t* pPixels, uint32_t flags) + { + const color32* pSrc_pixels = (const color32*)pPixels; + dxt1_block* pDst_block = static_cast(pDst); + + int avg_r = -1, avg_g = 0, avg_b = 0; + int lr = 0, lg = 0, lb = 0, hr = 0, hg = 0, hb = 0; + uint8_t sels[16]; + + const bool use_sels = (flags & cEncodeBC1UseSelectors) != 0; + if (use_sels) + { + // Caller is jamming in their own selectors for us to try. + const uint32_t s = pDst_block->m_selectors[0] | (pDst_block->m_selectors[1] << 8) | (pDst_block->m_selectors[2] << 16) | (pDst_block->m_selectors[3] << 24); + + static const uint8_t s_sel_tran[4] = { 0, 3, 1, 2 }; + + for (uint32_t i = 0; i < 16; i++) + sels[i] = s_sel_tran[(s >> (i * 2)) & 3]; + } + else + { + const uint32_t fr = pSrc_pixels[0].r, fg = pSrc_pixels[0].g, fb = pSrc_pixels[0].b; + + uint32_t j; + for (j = 1; j < 16; j++) + if ((pSrc_pixels[j].r != fr) || (pSrc_pixels[j].g != fg) || (pSrc_pixels[j].b != fb)) + break; + + if (j == 16) + { + encode_bc1_solid_block(pDst, fr, fg, fb); + return; + } + + // Select 2 colors along the principle axis. (There must be a faster/simpler way.) + int total_r = fr, total_g = fg, total_b = fb; + int max_r = fr, max_g = fg, max_b = fb; + int min_r = fr, min_g = fg, min_b = fb; + uint32_t grayscale_flag = (fr == fg) && (fr == fb); + for (uint32_t i = 1; i < 16; i++) + { + const int r = pSrc_pixels[i].r, g = pSrc_pixels[i].g, b = pSrc_pixels[i].b; + grayscale_flag &= ((r == g) && (r == b)); + max_r = std::max(max_r, r); max_g = std::max(max_g, g); max_b = std::max(max_b, b); + min_r = std::min(min_r, r); min_g = std::min(min_g, g); min_b = std::min(min_b, b); + total_r += r; total_g += g; total_b += b; + } + + if (grayscale_flag) + { + // Grayscale blocks are a common enough case to specialize. + if ((max_r - min_r) < 2) + { + lr = lb = hr = hb = to_5(fr); + lg = hg = to_6(fr); + } + else + { + lr = lb = to_5(min_r); + lg = to_6(min_r); + + hr = hb = to_5(max_r); + hg = to_6(max_r); + } + } + else + { + avg_r = (total_r + 8) >> 4, avg_g = (total_g + 8) >> 4, avg_b = (total_b + 8) >> 4; + + // Find the shortest vector from a AABB corner to the block's average color. + // This is to help avoid outliers. + + uint32_t dist[3][2]; + dist[0][0] = basisu::square(min_r - avg_r) << 3; dist[0][1] = basisu::square(max_r - avg_r) << 3; + dist[1][0] = basisu::square(min_g - avg_g) << 3; dist[1][1] = basisu::square(max_g - avg_g) << 3; + dist[2][0] = basisu::square(min_b - avg_b) << 3; dist[2][1] = basisu::square(max_b - avg_b) << 3; + + uint32_t min_d0 = (dist[0][0] + dist[1][0] + dist[2][0]); + uint32_t d4 = (dist[0][0] + dist[1][0] + dist[2][1]) | 4; + min_d0 = std::min(min_d0, d4); + + uint32_t min_d1 = (dist[0][1] + dist[1][0] + dist[2][0]) | 1; + uint32_t d5 = (dist[0][1] + dist[1][0] + dist[2][1]) | 5; + min_d1 = std::min(min_d1, d5); + + uint32_t d2 = (dist[0][0] + dist[1][1] + dist[2][0]) | 2; + min_d0 = std::min(min_d0, d2); + + uint32_t d3 = (dist[0][1] + dist[1][1] + dist[2][0]) | 3; + min_d1 = std::min(min_d1, d3); + + uint32_t d6 = (dist[0][0] + dist[1][1] + dist[2][1]) | 6; + min_d0 = std::min(min_d0, d6); + + uint32_t d7 = (dist[0][1] + dist[1][1] + dist[2][1]) | 7; + min_d1 = std::min(min_d1, d7); + + uint32_t min_d = std::min(min_d0, min_d1); + uint32_t best_i = min_d & 7; + + int delta_r = (best_i & 1) ? (max_r - avg_r) : (avg_r - min_r); + int delta_g = (best_i & 2) ? (max_g - avg_g) : (avg_g - min_g); + int delta_b = (best_i & 4) ? (max_b - avg_b) : (avg_b - min_b); + + // Note: if delta_r/g/b==0, we actually want to choose a single color, so the block average color optimization kicks in. + uint32_t low_c = 0, high_c = 0; + if ((delta_r | delta_g | delta_b) != 0) + { + // Now we have a smaller AABB going from the block's average color to a cornerpoint of the larger AABB. + // Project all pixels colors along the 4 vectors going from a smaller AABB cornerpoint to the opposite cornerpoint, find largest projection. + // One of these vectors will be a decent approximation of the block's PCA. + const int saxis0_r = delta_r, saxis0_g = delta_g, saxis0_b = delta_b; + + int low_dot0 = INT_MAX, high_dot0 = INT_MIN; + int low_dot1 = INT_MAX, high_dot1 = INT_MIN; + int low_dot2 = INT_MAX, high_dot2 = INT_MIN; + int low_dot3 = INT_MAX, high_dot3 = INT_MIN; + + //int low_c0, low_c1, low_c2, low_c3; + //int high_c0, high_c1, high_c2, high_c3; + + for (uint32_t i = 0; i < 16; i++) + { + const int dotx = pSrc_pixels[i].r * saxis0_r; + const int doty = pSrc_pixels[i].g * saxis0_g; + const int dotz = pSrc_pixels[i].b * saxis0_b; + + const int dot0 = ((dotz + dotx + doty) << 4) + i; + const int dot1 = ((dotz - dotx - doty) << 4) + i; + const int dot2 = ((dotz - dotx + doty) << 4) + i; + const int dot3 = ((dotz + dotx - doty) << 4) + i; + + if (dot0 < low_dot0) + { + low_dot0 = dot0; + //low_c0 = i; + } + if ((dot0 ^ 15) > high_dot0) + { + high_dot0 = dot0 ^ 15; + //high_c0 = i; + } + + if (dot1 < low_dot1) + { + low_dot1 = dot1; + //low_c1 = i; + } + if ((dot1 ^ 15) > high_dot1) + { + high_dot1 = dot1 ^ 15; + //high_c1 = i; + } + + if (dot2 < low_dot2) + { + low_dot2 = dot2; + //low_c2 = i; + } + if ((dot2 ^ 15) > high_dot2) + { + high_dot2 = dot2 ^ 15; + //high_c2 = i; + } + + if (dot3 < low_dot3) + { + low_dot3 = dot3; + //low_c3 = i; + } + if ((dot3 ^ 15) > high_dot3) + { + high_dot3 = dot3 ^ 15; + //high_c3 = i; + } + } + + low_c = low_dot0 & 15, high_c = ~high_dot0 & 15; + uint32_t r = (high_dot0 & ~15) - (low_dot0 & ~15); + + uint32_t tr = (high_dot1 & ~15) - (low_dot1 & ~15); + if (tr > r) + low_c = low_dot1 & 15, high_c = ~high_dot1 & 15, r = tr; + + tr = (high_dot2 & ~15) - (low_dot2 & ~15); + if (tr > r) + low_c = low_dot2 & 15, high_c = ~high_dot2 & 15, r = tr; + + tr = (high_dot3 & ~15) - (low_dot3 & ~15); + if (tr > r) + low_c = low_dot3 & 15, high_c = ~high_dot3 & 15; + } + + lr = to_5(pSrc_pixels[low_c].r); + lg = to_6(pSrc_pixels[low_c].g); + lb = to_5(pSrc_pixels[low_c].b); + + hr = to_5(pSrc_pixels[high_c].r); + hg = to_6(pSrc_pixels[high_c].g); + hb = to_5(pSrc_pixels[high_c].b); + } + + bc1_find_sels_2(pSrc_pixels, lr, lg, lb, hr, hg, hb, sels); + } // if (use_sels) + + const uint32_t total_ls_passes = (flags & cEncodeBC1HigherQuality) ? 3 : (flags & cEncodeBC1HighQuality ? 2 : 1); + for (uint32_t ls_pass = 0; ls_pass < total_ls_passes; ls_pass++) + { + int prev_lr = lr, prev_lg = lg, prev_lb = lb, prev_hr = hr, prev_hg = hg, prev_hb = hb; + + // This is where the real magic happens. We have an array of candidate selectors, so let's use least squares to compute the optimal low/high endpoint colors. + vec3F xl, xh; + if (!compute_least_squares_endpoints_rgb(pSrc_pixels, sels, &xl, &xh)) + { + if (avg_r < 0) + { + int total_r = 0, total_g = 0, total_b = 0; + for (uint32_t i = 0; i < 16; i++) + { + total_r += pSrc_pixels[i].r; + total_g += pSrc_pixels[i].g; + total_b += pSrc_pixels[i].b; + } + + avg_r = (total_r + 8) >> 4, avg_g = (total_g + 8) >> 4, avg_b = (total_b + 8) >> 4; + } + + // All selectors equal - treat it as a solid block which should always be equal or better. + lr = g_bc1_match5_equals_1[avg_r].m_hi; + lg = g_bc1_match6_equals_1[avg_g].m_hi; + lb = g_bc1_match5_equals_1[avg_b].m_hi; + + hr = g_bc1_match5_equals_1[avg_r].m_lo; + hg = g_bc1_match6_equals_1[avg_g].m_lo; + hb = g_bc1_match5_equals_1[avg_b].m_lo; + + // In high/higher quality mode, let it try again in case the optimal tables have caused the sels to diverge. + } + else + { + lr = basisu::clamp((int)((xl.c[0]) * (31.0f / 255.0f) + .5f), 0, 31); + lg = basisu::clamp((int)((xl.c[1]) * (63.0f / 255.0f) + .5f), 0, 63); + lb = basisu::clamp((int)((xl.c[2]) * (31.0f / 255.0f) + .5f), 0, 31); + + hr = basisu::clamp((int)((xh.c[0]) * (31.0f / 255.0f) + .5f), 0, 31); + hg = basisu::clamp((int)((xh.c[1]) * (63.0f / 255.0f) + .5f), 0, 63); + hb = basisu::clamp((int)((xh.c[2]) * (31.0f / 255.0f) + .5f), 0, 31); + } + + if ((prev_lr == lr) && (prev_lg == lg) && (prev_lb == lb) && (prev_hr == hr) && (prev_hg == hg) && (prev_hb == hb)) + break; + + bc1_find_sels_2(pSrc_pixels, lr, lg, lb, hr, hg, hb, sels); + } + + uint32_t lc16 = dxt1_block::pack_unscaled_color(lr, lg, lb); + uint32_t hc16 = dxt1_block::pack_unscaled_color(hr, hg, hb); + + // Always forbid 3 color blocks + if (lc16 == hc16) + { + uint8_t mask = 0; + + // Make l > h + if (hc16 > 0) + hc16--; + else + { + // lc16 = hc16 = 0 + assert(lc16 == hc16 && hc16 == 0); + + hc16 = 0; + lc16 = 1; + mask = 0x55; // select hc16 + } + + assert(lc16 > hc16); + pDst_block->set_low_color(static_cast(lc16)); + pDst_block->set_high_color(static_cast(hc16)); + + pDst_block->m_selectors[0] = mask; + pDst_block->m_selectors[1] = mask; + pDst_block->m_selectors[2] = mask; + pDst_block->m_selectors[3] = mask; + } + else + { + uint8_t invert_mask = 0; + if (lc16 < hc16) + { + std::swap(lc16, hc16); + invert_mask = 0x55; + } + + assert(lc16 > hc16); + pDst_block->set_low_color((uint16_t)lc16); + pDst_block->set_high_color((uint16_t)hc16); + + uint32_t packed_sels = 0; + static const uint8_t s_sel_trans[4] = { 0, 2, 3, 1 }; + for (uint32_t i = 0; i < 16; i++) + packed_sels |= ((uint32_t)s_sel_trans[sels[i]] << (i * 2)); + + pDst_block->m_selectors[0] = (uint8_t)packed_sels ^ invert_mask; + pDst_block->m_selectors[1] = (uint8_t)(packed_sels >> 8) ^ invert_mask; + pDst_block->m_selectors[2] = (uint8_t)(packed_sels >> 16) ^ invert_mask; + pDst_block->m_selectors[3] = (uint8_t)(packed_sels >> 24) ^ invert_mask; + } + } + + // Scale the UASTC first subset endpoints and first plane's weight indices directly to BC1's - fastest. + void transcode_uastc_to_bc1_hint0(const unpacked_uastc_block& unpacked_src_blk, void* pDst) + { + const uint32_t mode = unpacked_src_blk.m_mode; + const astc_block_desc& astc_blk = unpacked_src_blk.m_astc; + + dxt1_block& b = *static_cast(pDst); + + const uint32_t endpoint_range = g_uastc_mode_endpoint_ranges[mode]; + + const uint32_t total_comps = g_uastc_mode_comps[mode]; + + if (total_comps == 2) + { + const uint32_t l = g_astc_unquant[endpoint_range][astc_blk.m_endpoints[0]].m_unquant; + const uint32_t h = g_astc_unquant[endpoint_range][astc_blk.m_endpoints[1]].m_unquant; + + b.set_low_color(dxt1_block::pack_color(color32(l, l, l, 255), true, 127)); + b.set_high_color(dxt1_block::pack_color(color32(h, h, h, 255), true, 127)); + } + else + { + b.set_low_color(dxt1_block::pack_color( + color32(g_astc_unquant[endpoint_range][astc_blk.m_endpoints[0]].m_unquant, + g_astc_unquant[endpoint_range][astc_blk.m_endpoints[2]].m_unquant, + g_astc_unquant[endpoint_range][astc_blk.m_endpoints[4]].m_unquant, + 255), true, 127) + ); + + b.set_high_color(dxt1_block::pack_color( + color32(g_astc_unquant[endpoint_range][astc_blk.m_endpoints[1]].m_unquant, + g_astc_unquant[endpoint_range][astc_blk.m_endpoints[3]].m_unquant, + g_astc_unquant[endpoint_range][astc_blk.m_endpoints[5]].m_unquant, + 255), true, 127) + ); + } + + if (b.get_low_color() == b.get_high_color()) + { + // Always forbid 3 color blocks + uint16_t lc16 = (uint16_t)b.get_low_color(); + uint16_t hc16 = (uint16_t)b.get_high_color(); + + uint8_t mask = 0; + + // Make l > h + if (hc16 > 0) + hc16--; + else + { + // lc16 = hc16 = 0 + assert(lc16 == hc16 && hc16 == 0); + + hc16 = 0; + lc16 = 1; + mask = 0x55; // select hc16 + } + + assert(lc16 > hc16); + b.set_low_color(static_cast(lc16)); + b.set_high_color(static_cast(hc16)); + + b.m_selectors[0] = mask; + b.m_selectors[1] = mask; + b.m_selectors[2] = mask; + b.m_selectors[3] = mask; + } + else + { + bool invert = false; + if (b.get_low_color() < b.get_high_color()) + { + std::swap(b.m_low_color[0], b.m_high_color[0]); + std::swap(b.m_low_color[1], b.m_high_color[1]); + invert = true; + } + + const uint8_t* pTran = s_uastc_to_bc1_weights[g_uastc_mode_weight_bits[mode]]; + + const uint32_t plane_shift = g_uastc_mode_planes[mode] - 1; + + uint32_t sels = 0; + for (int i = 15; i >= 0; --i) + { + uint32_t s = pTran[astc_blk.m_weights[i << plane_shift]]; + + if (invert) + s ^= 1; + + sels = (sels << 2) | s; + } + b.m_selectors[0] = sels & 0xFF; + b.m_selectors[1] = (sels >> 8) & 0xFF; + b.m_selectors[2] = (sels >> 16) & 0xFF; + b.m_selectors[3] = (sels >> 24) & 0xFF; + } + } + + // Scale the UASTC first plane's weight indices to BC1, use 1 or 2 least squares passes to compute endpoints - no PCA needed. + void transcode_uastc_to_bc1_hint1(const unpacked_uastc_block& unpacked_src_blk, const color32 block_pixels[4][4], void* pDst, bool high_quality) + { + const uint32_t mode = unpacked_src_blk.m_mode; + + const astc_block_desc& astc_blk = unpacked_src_blk.m_astc; + + dxt1_block& b = *static_cast(pDst); + + b.set_low_color(1); + b.set_high_color(0); + + const uint8_t* pTran = s_uastc_to_bc1_weights[g_uastc_mode_weight_bits[mode]]; + + const uint32_t plane_shift = g_uastc_mode_planes[mode] - 1; + + uint32_t sels = 0; + for (int i = 15; i >= 0; --i) + { + sels <<= 2; + sels |= pTran[astc_blk.m_weights[i << plane_shift]]; + } + + b.m_selectors[0] = sels & 0xFF; + b.m_selectors[1] = (sels >> 8) & 0xFF; + b.m_selectors[2] = (sels >> 16) & 0xFF; + b.m_selectors[3] = (sels >> 24) & 0xFF; + + encode_bc1(&b, (const uint8_t*)&block_pixels[0][0].c[0], (high_quality ? cEncodeBC1HighQuality : 0) | cEncodeBC1UseSelectors); + } + + bool transcode_uastc_to_bc1(const uastc_block& src_blk, void* pDst, bool high_quality) + { + unpacked_uastc_block unpacked_src_blk; + if (!unpack_uastc(src_blk, unpacked_src_blk, false)) + return false; + + const uint32_t mode = unpacked_src_blk.m_mode; + + if (mode == UASTC_MODE_INDEX_SOLID_COLOR) + { + encode_bc1_solid_block(pDst, unpacked_src_blk.m_solid_color.r, unpacked_src_blk.m_solid_color.g, unpacked_src_blk.m_solid_color.b); + return true; + } + + if ((!high_quality) && (unpacked_src_blk.m_bc1_hint0)) + transcode_uastc_to_bc1_hint0(unpacked_src_blk, pDst); + else + { + color32 block_pixels[4][4]; + const bool unpack_srgb = false; + if (!unpack_uastc(unpacked_src_blk, &block_pixels[0][0], unpack_srgb)) + return false; + + if (unpacked_src_blk.m_bc1_hint1) + transcode_uastc_to_bc1_hint1(unpacked_src_blk, block_pixels, pDst, high_quality); + else + encode_bc1(pDst, &block_pixels[0][0].r, high_quality ? cEncodeBC1HighQuality : 0); + } + + return true; + } + + static void write_bc4_solid_block(uint8_t* pDst, uint32_t a) + { + pDst[0] = (uint8_t)a; + pDst[1] = (uint8_t)a; + memset(pDst + 2, 0, 6); + } + + bool transcode_uastc_to_bc3(const uastc_block& src_blk, void* pDst, bool high_quality) + { + unpacked_uastc_block unpacked_src_blk; + if (!unpack_uastc(src_blk, unpacked_src_blk, false)) + return false; + + const uint32_t mode = unpacked_src_blk.m_mode; + + void* pBC4_block = pDst; + dxt1_block* pBC1_block = &static_cast(pDst)[1]; + + if (mode == UASTC_MODE_INDEX_SOLID_COLOR) + { + write_bc4_solid_block(static_cast(pBC4_block), unpacked_src_blk.m_solid_color.a); + encode_bc1_solid_block(pBC1_block, unpacked_src_blk.m_solid_color.r, unpacked_src_blk.m_solid_color.g, unpacked_src_blk.m_solid_color.b); + return true; + } + + color32 block_pixels[4][4]; + const bool unpack_srgb = false; + if (!unpack_uastc(unpacked_src_blk, &block_pixels[0][0], unpack_srgb)) + return false; + + basist::encode_bc4(pBC4_block, &block_pixels[0][0].a, sizeof(color32)); + + if ((!high_quality) && (unpacked_src_blk.m_bc1_hint0)) + transcode_uastc_to_bc1_hint0(unpacked_src_blk, pBC1_block); + else + { + if (unpacked_src_blk.m_bc1_hint1) + transcode_uastc_to_bc1_hint1(unpacked_src_blk, block_pixels, pBC1_block, high_quality); + else + encode_bc1(pBC1_block, &block_pixels[0][0].r, high_quality ? cEncodeBC1HighQuality : 0); + } + + return true; + } + + bool transcode_uastc_to_bc4(const uastc_block& src_blk, void* pDst, bool high_quality, uint32_t chan0) + { + BASISU_NOTE_UNUSED(high_quality); + + unpacked_uastc_block unpacked_src_blk; + if (!unpack_uastc(src_blk, unpacked_src_blk, false)) + return false; + + const uint32_t mode = unpacked_src_blk.m_mode; + + void* pBC4_block = pDst; + + if (mode == UASTC_MODE_INDEX_SOLID_COLOR) + { + write_bc4_solid_block(static_cast(pBC4_block), unpacked_src_blk.m_solid_color.c[chan0]); + return true; + } + + color32 block_pixels[4][4]; + const bool unpack_srgb = false; + if (!unpack_uastc(unpacked_src_blk, &block_pixels[0][0], unpack_srgb)) + return false; + + basist::encode_bc4(pBC4_block, &block_pixels[0][0].c[chan0], sizeof(color32)); + + return true; + } + + bool transcode_uastc_to_bc5(const uastc_block& src_blk, void* pDst, bool high_quality, uint32_t chan0, uint32_t chan1) + { + BASISU_NOTE_UNUSED(high_quality); + + unpacked_uastc_block unpacked_src_blk; + if (!unpack_uastc(src_blk, unpacked_src_blk, false)) + return false; + + const uint32_t mode = unpacked_src_blk.m_mode; + + void* pBC4_block0 = pDst; + void* pBC4_block1 = (uint8_t*)pDst + 8; + + if (mode == UASTC_MODE_INDEX_SOLID_COLOR) + { + write_bc4_solid_block(static_cast(pBC4_block0), unpacked_src_blk.m_solid_color.c[chan0]); + write_bc4_solid_block(static_cast(pBC4_block1), unpacked_src_blk.m_solid_color.c[chan1]); + return true; + } + + color32 block_pixels[4][4]; + const bool unpack_srgb = false; + if (!unpack_uastc(unpacked_src_blk, &block_pixels[0][0], unpack_srgb)) + return false; + + basist::encode_bc4(pBC4_block0, &block_pixels[0][0].c[chan0], sizeof(color32)); + basist::encode_bc4(pBC4_block1, &block_pixels[0][0].c[chan1], sizeof(color32)); + + return true; + } + + static const uint8_t s_etc2_eac_bit_ofs[16] = { 45, 33, 21, 9, 42, 30, 18, 6, 39, 27, 15, 3, 36, 24, 12, 0 }; + + static void pack_eac_solid_block(eac_block& blk, uint32_t a) + { + blk.m_base = static_cast(a); + blk.m_table = 13; + blk.m_multiplier = 0; + + memcpy(blk.m_selectors, g_etc2_eac_a8_sel4, sizeof(g_etc2_eac_a8_sel4)); + + return; + } + + // Only checks 4 tables. + static void pack_eac(eac_block& blk, const uint8_t* pPixels, uint32_t stride) + { + uint32_t min_alpha = 255, max_alpha = 0; + for (uint32_t i = 0; i < 16; i++) + { + const uint32_t a = pPixels[i * stride]; + if (a < min_alpha) min_alpha = a; + if (a > max_alpha) max_alpha = a; + } + + if (min_alpha == max_alpha) + { + pack_eac_solid_block(blk, min_alpha); + return; + } + + const uint32_t alpha_range = max_alpha - min_alpha; + + const uint32_t SINGLE_TABLE_THRESH = 5; + if (alpha_range <= SINGLE_TABLE_THRESH) + { + // If alpha_range <= 5 table 13 is lossless + int base = clamp255((int)max_alpha - 2); + + blk.m_base = base; + blk.m_multiplier = 1; + blk.m_table = 13; + + base -= 3; + + uint64_t packed_sels = 0; + for (uint32_t i = 0; i < 16; i++) + { + const int a = pPixels[i * stride]; + + static const uint8_t s_sels[6] = { 2, 1, 0, 4, 5, 6 }; + + int sel = a - base; + assert(sel >= 0 && sel <= 5); + + packed_sels |= (static_cast(s_sels[sel]) << s_etc2_eac_bit_ofs[i]); + } + + blk.set_selector_bits(packed_sels); + + return; + } + + const uint32_t T0 = 2, T1 = 8, T2 = 11, T3 = 13; + static const uint8_t s_tables[4] = { T0, T1, T2, T3 }; + + int base[4], mul[4]; + uint32_t mul_or = 0; + for (uint32_t i = 0; i < 4; i++) + { + const uint32_t table = s_tables[i]; + + const float range = (float)(g_eac_modifier_table[table][ETC2_EAC_MAX_VALUE_SELECTOR] - g_eac_modifier_table[table][ETC2_EAC_MIN_VALUE_SELECTOR]); + + base[i] = clamp255((int)roundf(basisu::lerp((float)min_alpha, (float)max_alpha, (float)(0 - g_eac_modifier_table[table][ETC2_EAC_MIN_VALUE_SELECTOR]) / range))); + mul[i] = clampi((int)roundf(alpha_range / range), 1, 15); + mul_or |= mul[i]; + } + + uint32_t total_err[4] = { 0, 0, 0, 0 }; + uint8_t sels[4][16]; + + for (uint32_t i = 0; i < 16; i++) + { + const int a = pPixels[i * stride]; + + uint32_t l0 = UINT32_MAX, l1 = UINT32_MAX, l2 = UINT32_MAX, l3 = UINT32_MAX; + + if ((a < 7) || (a > (255 - 7))) + { + for (uint32_t s = 0; s < 8; s++) + { + const int v0 = clamp255(mul[0] * g_eac_modifier_table[T0][s] + base[0]); + const int v1 = clamp255(mul[1] * g_eac_modifier_table[T1][s] + base[1]); + const int v2 = clamp255(mul[2] * g_eac_modifier_table[T2][s] + base[2]); + const int v3 = clamp255(mul[3] * g_eac_modifier_table[T3][s] + base[3]); + + l0 = std::min(l0, (basisu::iabs(v0 - a) << 3) | s); + l1 = std::min(l1, (basisu::iabs(v1 - a) << 3) | s); + l2 = std::min(l2, (basisu::iabs(v2 - a) << 3) | s); + l3 = std::min(l3, (basisu::iabs(v3 - a) << 3) | s); + } + } + else if (mul_or == 1) + { + const int a0 = base[0] - a, a1 = base[1] - a, a2 = base[2] - a, a3 = base[3] - a; + + for (uint32_t s = 0; s < 8; s++) + { + const int v0 = g_eac_modifier_table[T0][s] + a0; + const int v1 = g_eac_modifier_table[T1][s] + a1; + const int v2 = g_eac_modifier_table[T2][s] + a2; + const int v3 = g_eac_modifier_table[T3][s] + a3; + + l0 = std::min(l0, (basisu::iabs(v0) << 3) | s); + l1 = std::min(l1, (basisu::iabs(v1) << 3) | s); + l2 = std::min(l2, (basisu::iabs(v2) << 3) | s); + l3 = std::min(l3, (basisu::iabs(v3) << 3) | s); + } + } + else + { + const int a0 = base[0] - a, a1 = base[1] - a, a2 = base[2] - a, a3 = base[3] - a; + + for (uint32_t s = 0; s < 8; s++) + { + const int v0 = mul[0] * g_eac_modifier_table[T0][s] + a0; + const int v1 = mul[1] * g_eac_modifier_table[T1][s] + a1; + const int v2 = mul[2] * g_eac_modifier_table[T2][s] + a2; + const int v3 = mul[3] * g_eac_modifier_table[T3][s] + a3; + + l0 = std::min(l0, (basisu::iabs(v0) << 3) | s); + l1 = std::min(l1, (basisu::iabs(v1) << 3) | s); + l2 = std::min(l2, (basisu::iabs(v2) << 3) | s); + l3 = std::min(l3, (basisu::iabs(v3) << 3) | s); + } + } + + sels[0][i] = l0 & 7; + sels[1][i] = l1 & 7; + sels[2][i] = l2 & 7; + sels[3][i] = l3 & 7; + + total_err[0] += basisu::square(l0 >> 3); + total_err[1] += basisu::square(l1 >> 3); + total_err[2] += basisu::square(l2 >> 3); + total_err[3] += basisu::square(l3 >> 3); + } + + uint32_t min_err = total_err[0], min_index = 0; + for (uint32_t i = 1; i < 4; i++) + { + if (total_err[i] < min_err) + { + min_err = total_err[i]; + min_index = i; + } + } + + blk.m_base = base[min_index]; + blk.m_multiplier = mul[min_index]; + blk.m_table = s_tables[min_index]; + + uint64_t packed_sels = 0; + const uint8_t* pSels = &sels[min_index][0]; + for (uint32_t i = 0; i < 16; i++) + packed_sels |= (static_cast(pSels[i]) << s_etc2_eac_bit_ofs[i]); + + blk.set_selector_bits(packed_sels); + } + + // Checks all 16 tables. Around ~2 dB better vs. pack_eac(), ~1.2 dB less than near-optimal. + static void pack_eac_high_quality(eac_block& blk, const uint8_t* pPixels, uint32_t stride) + { + uint32_t min_alpha = 255, max_alpha = 0; + for (uint32_t i = 0; i < 16; i++) + { + const uint32_t a = pPixels[i * stride]; + if (a < min_alpha) min_alpha = a; + if (a > max_alpha) max_alpha = a; + } + + if (min_alpha == max_alpha) + { + pack_eac_solid_block(blk, min_alpha); + return; + } + + const uint32_t alpha_range = max_alpha - min_alpha; + + const uint32_t SINGLE_TABLE_THRESH = 5; + if (alpha_range <= SINGLE_TABLE_THRESH) + { + // If alpha_range <= 5 table 13 is lossless + int base = clamp255((int)max_alpha - 2); + + blk.m_base = base; + blk.m_multiplier = 1; + blk.m_table = 13; + + base -= 3; + + uint64_t packed_sels = 0; + for (uint32_t i = 0; i < 16; i++) + { + const int a = pPixels[i * stride]; + + static const uint8_t s_sels[6] = { 2, 1, 0, 4, 5, 6 }; + + int sel = a - base; + assert(sel >= 0 && sel <= 5); + + packed_sels |= (static_cast(s_sels[sel]) << s_etc2_eac_bit_ofs[i]); + } + + blk.set_selector_bits(packed_sels); + + return; + } + + int base[16], mul[16]; + for (uint32_t table = 0; table < 16; table++) + { + const float range = (float)(g_eac_modifier_table[table][ETC2_EAC_MAX_VALUE_SELECTOR] - g_eac_modifier_table[table][ETC2_EAC_MIN_VALUE_SELECTOR]); + + base[table] = clamp255((int)roundf(basisu::lerp((float)min_alpha, (float)max_alpha, (float)(0 - g_eac_modifier_table[table][ETC2_EAC_MIN_VALUE_SELECTOR]) / range))); + mul[table] = clampi((int)roundf(alpha_range / range), 1, 15); + } + + uint32_t total_err[16]; + memset(total_err, 0, sizeof(total_err)); + + uint8_t sels[16][16]; + + for (uint32_t table = 0; table < 16; table++) + { + const int8_t* pTable = &g_eac_modifier_table[table][0]; + const int m = mul[table], b = base[table]; + + uint32_t prev_l = 0, prev_a = UINT32_MAX; + + for (uint32_t i = 0; i < 16; i++) + { + const int a = pPixels[i * stride]; + + if ((uint32_t)a == prev_a) + { + sels[table][i] = prev_l & 7; + total_err[table] += basisu::square(prev_l >> 3); + } + else + { + uint32_t l = basisu::iabs(clamp255(m * pTable[0] + b) - a) << 3; + l = std::min(l, (basisu::iabs(clamp255(m * pTable[1] + b) - a) << 3) | 1); + l = std::min(l, (basisu::iabs(clamp255(m * pTable[2] + b) - a) << 3) | 2); + l = std::min(l, (basisu::iabs(clamp255(m * pTable[3] + b) - a) << 3) | 3); + l = std::min(l, (basisu::iabs(clamp255(m * pTable[4] + b) - a) << 3) | 4); + l = std::min(l, (basisu::iabs(clamp255(m * pTable[5] + b) - a) << 3) | 5); + l = std::min(l, (basisu::iabs(clamp255(m * pTable[6] + b) - a) << 3) | 6); + l = std::min(l, (basisu::iabs(clamp255(m * pTable[7] + b) - a) << 3) | 7); + + sels[table][i] = l & 7; + total_err[table] += basisu::square(l >> 3); + + prev_l = l; + prev_a = a; + } + } + } + + uint32_t min_err = total_err[0], min_index = 0; + for (uint32_t i = 1; i < 16; i++) + { + if (total_err[i] < min_err) + { + min_err = total_err[i]; + min_index = i; + } + } + + blk.m_base = base[min_index]; + blk.m_multiplier = mul[min_index]; + blk.m_table = min_index; + + uint64_t packed_sels = 0; + const uint8_t* pSels = &sels[min_index][0]; + for (uint32_t i = 0; i < 16; i++) + packed_sels |= (static_cast(pSels[i]) << s_etc2_eac_bit_ofs[i]); + + blk.set_selector_bits(packed_sels); + } + + bool transcode_uastc_to_etc2_eac_r11(const uastc_block& src_blk, void* pDst, bool high_quality, uint32_t chan0) + { + unpacked_uastc_block unpacked_src_blk; + if (!unpack_uastc(src_blk, unpacked_src_blk, false)) + return false; + + const uint32_t mode = unpacked_src_blk.m_mode; + + if (mode == UASTC_MODE_INDEX_SOLID_COLOR) + { + pack_eac_solid_block(*static_cast(pDst), unpacked_src_blk.m_solid_color.c[chan0]); + return true; + } + + color32 block_pixels[4][4]; + const bool unpack_srgb = false; + if (!unpack_uastc(unpacked_src_blk, &block_pixels[0][0], unpack_srgb)) + return false; + + if (chan0 == 3) + transcode_uastc_to_etc2_eac_a8(unpacked_src_blk, block_pixels, pDst); + else + (high_quality ? pack_eac_high_quality : pack_eac)(*static_cast(pDst), &block_pixels[0][0].c[chan0], sizeof(color32)); + + return true; + } + + bool transcode_uastc_to_etc2_eac_rg11(const uastc_block& src_blk, void* pDst, bool high_quality, uint32_t chan0, uint32_t chan1) + { + unpacked_uastc_block unpacked_src_blk; + if (!unpack_uastc(src_blk, unpacked_src_blk, false)) + return false; + + const uint32_t mode = unpacked_src_blk.m_mode; + + if (mode == UASTC_MODE_INDEX_SOLID_COLOR) + { + pack_eac_solid_block(static_cast(pDst)[0], unpacked_src_blk.m_solid_color.c[chan0]); + pack_eac_solid_block(static_cast(pDst)[1], unpacked_src_blk.m_solid_color.c[chan1]); + return true; + } + + color32 block_pixels[4][4]; + const bool unpack_srgb = false; + if (!unpack_uastc(unpacked_src_blk, &block_pixels[0][0], unpack_srgb)) + return false; + + if (chan0 == 3) + transcode_uastc_to_etc2_eac_a8(unpacked_src_blk, block_pixels, &static_cast(pDst)[0]); + else + (high_quality ? pack_eac_high_quality : pack_eac)(static_cast(pDst)[0], &block_pixels[0][0].c[chan0], sizeof(color32)); + + if (chan1 == 3) + transcode_uastc_to_etc2_eac_a8(unpacked_src_blk, block_pixels, &static_cast(pDst)[1]); + else + (high_quality ? pack_eac_high_quality : pack_eac)(static_cast(pDst)[1], &block_pixels[0][0].c[chan1], sizeof(color32)); + return true; + } + + // PVRTC1 + static void fixup_pvrtc1_4_modulation_rgb( + const uastc_block* pSrc_blocks, + const uint32_t* pPVRTC_endpoints, + void* pDst_blocks, + uint32_t num_blocks_x, uint32_t num_blocks_y, bool from_alpha) + { + const uint32_t x_mask = num_blocks_x - 1; + const uint32_t y_mask = num_blocks_y - 1; + const uint32_t x_bits = basisu::total_bits(x_mask); + const uint32_t y_bits = basisu::total_bits(y_mask); + const uint32_t min_bits = basisu::minimum(x_bits, y_bits); + //const uint32_t max_bits = basisu::maximum(x_bits, y_bits); + const uint32_t swizzle_mask = (1 << (min_bits * 2)) - 1; + + uint32_t block_index = 0; + + // really 3x3 + int e0[4][4], e1[4][4]; + + for (int y = 0; y < static_cast(num_blocks_y); y++) + { + const uint32_t* pE_rows[3]; + + for (int ey = 0; ey < 3; ey++) + { + int by = y + ey - 1; + + const uint32_t* pE = &pPVRTC_endpoints[(by & y_mask) * num_blocks_x]; + + pE_rows[ey] = pE; + + for (int ex = 0; ex < 3; ex++) + { + int bx = 0 + ex - 1; + + const uint32_t e = pE[bx & x_mask]; + + e0[ex][ey] = (get_opaque_endpoint_l0(e) * 255) / 31; + e1[ex][ey] = (get_opaque_endpoint_l1(e) * 255) / 31; + } + } + + const uint32_t y_swizzle = (g_pvrtc_swizzle_table[y >> 8] << 16) | g_pvrtc_swizzle_table[y & 0xFF]; + + for (int x = 0; x < static_cast(num_blocks_x); x++, block_index++) + { + const uastc_block& src_block = pSrc_blocks[block_index]; + + color32 block_pixels[4][4]; + unpack_uastc(src_block, &block_pixels[0][0], false); + if (from_alpha) + { + // Just set RGB to alpha to avoid adding complexity below. + for (uint32_t i = 0; i < 16; i++) + { + const uint8_t a = ((color32*)block_pixels)[i].a; + ((color32*)block_pixels)[i].set(a, a, a, 255); + } + } + + const uint32_t x_swizzle = (g_pvrtc_swizzle_table[x >> 8] << 17) | (g_pvrtc_swizzle_table[x & 0xFF] << 1); + + uint32_t swizzled = x_swizzle | y_swizzle; + if (num_blocks_x != num_blocks_y) + { + swizzled &= swizzle_mask; + + if (num_blocks_x > num_blocks_y) + swizzled |= ((x >> min_bits) << (min_bits * 2)); + else + swizzled |= ((y >> min_bits) << (min_bits * 2)); + } + + pvrtc4_block* pDst_block = static_cast(pDst_blocks) + swizzled; + pDst_block->m_endpoints = pPVRTC_endpoints[block_index]; + + { + const uint32_t ex = 2; + int bx = x + ex - 1; + bx &= x_mask; + +#define DO_ROW(ey) \ + { \ + const uint32_t e = pE_rows[ey][bx]; \ + e0[ex][ey] = (get_opaque_endpoint_l0(e) * 255) / 31; \ + e1[ex][ey] = (get_opaque_endpoint_l1(e) * 255) / 31; \ + } + + DO_ROW(0); + DO_ROW(1); + DO_ROW(2); +#undef DO_ROW + } + + uint32_t mod = 0; + +#define DO_PIX(lx, ly, w0, w1, w2, w3) \ + { \ + int ca_l = a0 * w0 + a1 * w1 + a2 * w2 + a3 * w3; \ + int cb_l = b0 * w0 + b1 * w1 + b2 * w2 + b3 * w3; \ + int cl = (block_pixels[ly][lx].r + block_pixels[ly][lx].g + block_pixels[ly][lx].b) * 16; \ + int dl = cb_l - ca_l; \ + int vl = cl - ca_l; \ + int p = vl * 16; \ + if (ca_l > cb_l) { p = -p; dl = -dl; } \ + uint32_t m = 0; \ + if (p > 3 * dl) m = (uint32_t)(1 << ((ly) * 8 + (lx) * 2)); \ + if (p > 8 * dl) m = (uint32_t)(2 << ((ly) * 8 + (lx) * 2)); \ + if (p > 13 * dl) m = (uint32_t)(3 << ((ly) * 8 + (lx) * 2)); \ + mod |= m; \ + } + + { + const uint32_t ex = 0, ey = 0; + const int a0 = e0[ex][ey], a1 = e0[ex + 1][ey], a2 = e0[ex][ey + 1], a3 = e0[ex + 1][ey + 1]; + const int b0 = e1[ex][ey], b1 = e1[ex + 1][ey], b2 = e1[ex][ey + 1], b3 = e1[ex + 1][ey + 1]; + DO_PIX(0, 0, 4, 4, 4, 4); + DO_PIX(1, 0, 2, 6, 2, 6); + DO_PIX(0, 1, 2, 2, 6, 6); + DO_PIX(1, 1, 1, 3, 3, 9); + } + + { + const uint32_t ex = 1, ey = 0; + const int a0 = e0[ex][ey], a1 = e0[ex + 1][ey], a2 = e0[ex][ey + 1], a3 = e0[ex + 1][ey + 1]; + const int b0 = e1[ex][ey], b1 = e1[ex + 1][ey], b2 = e1[ex][ey + 1], b3 = e1[ex + 1][ey + 1]; + DO_PIX(2, 0, 8, 0, 8, 0); + DO_PIX(3, 0, 6, 2, 6, 2); + DO_PIX(2, 1, 4, 0, 12, 0); + DO_PIX(3, 1, 3, 1, 9, 3); + } + + { + const uint32_t ex = 0, ey = 1; + const int a0 = e0[ex][ey], a1 = e0[ex + 1][ey], a2 = e0[ex][ey + 1], a3 = e0[ex + 1][ey + 1]; + const int b0 = e1[ex][ey], b1 = e1[ex + 1][ey], b2 = e1[ex][ey + 1], b3 = e1[ex + 1][ey + 1]; + DO_PIX(0, 2, 8, 8, 0, 0); + DO_PIX(1, 2, 4, 12, 0, 0); + DO_PIX(0, 3, 6, 6, 2, 2); + DO_PIX(1, 3, 3, 9, 1, 3); + } + + { + const uint32_t ex = 1, ey = 1; + const int a0 = e0[ex][ey], a1 = e0[ex + 1][ey], a2 = e0[ex][ey + 1], a3 = e0[ex + 1][ey + 1]; + const int b0 = e1[ex][ey], b1 = e1[ex + 1][ey], b2 = e1[ex][ey + 1], b3 = e1[ex + 1][ey + 1]; + DO_PIX(2, 2, 16, 0, 0, 0); + DO_PIX(3, 2, 12, 4, 0, 0); + DO_PIX(2, 3, 12, 0, 4, 0); + DO_PIX(3, 3, 9, 3, 3, 1); + } +#undef DO_PIX + + pDst_block->m_modulation = mod; + + e0[0][0] = e0[1][0]; e0[1][0] = e0[2][0]; + e0[0][1] = e0[1][1]; e0[1][1] = e0[2][1]; + e0[0][2] = e0[1][2]; e0[1][2] = e0[2][2]; + + e1[0][0] = e1[1][0]; e1[1][0] = e1[2][0]; + e1[0][1] = e1[1][1]; e1[1][1] = e1[2][1]; + e1[0][2] = e1[1][2]; e1[1][2] = e1[2][2]; + + } // x + } // y + } + + static void fixup_pvrtc1_4_modulation_rgba( + const uastc_block* pSrc_blocks, + const uint32_t* pPVRTC_endpoints, + void* pDst_blocks, uint32_t num_blocks_x, uint32_t num_blocks_y) + { + const uint32_t x_mask = num_blocks_x - 1; + const uint32_t y_mask = num_blocks_y - 1; + const uint32_t x_bits = basisu::total_bits(x_mask); + const uint32_t y_bits = basisu::total_bits(y_mask); + const uint32_t min_bits = basisu::minimum(x_bits, y_bits); + //const uint32_t max_bits = basisu::maximum(x_bits, y_bits); + const uint32_t swizzle_mask = (1 << (min_bits * 2)) - 1; + + uint32_t block_index = 0; + + // really 3x3 + int e0[4][4], e1[4][4]; + + for (int y = 0; y < static_cast(num_blocks_y); y++) + { + const uint32_t* pE_rows[3]; + + for (int ey = 0; ey < 3; ey++) + { + int by = y + ey - 1; + + const uint32_t* pE = &pPVRTC_endpoints[(by & y_mask) * num_blocks_x]; + + pE_rows[ey] = pE; + + for (int ex = 0; ex < 3; ex++) + { + int bx = 0 + ex - 1; + + const uint32_t e = pE[bx & x_mask]; + + e0[ex][ey] = get_endpoint_l8(e, 0); + e1[ex][ey] = get_endpoint_l8(e, 1); + } + } + + const uint32_t y_swizzle = (g_pvrtc_swizzle_table[y >> 8] << 16) | g_pvrtc_swizzle_table[y & 0xFF]; + + for (int x = 0; x < static_cast(num_blocks_x); x++, block_index++) + { + const uastc_block& src_block = pSrc_blocks[block_index]; + + color32 block_pixels[4][4]; + unpack_uastc(src_block, &block_pixels[0][0], false); + + const uint32_t x_swizzle = (g_pvrtc_swizzle_table[x >> 8] << 17) | (g_pvrtc_swizzle_table[x & 0xFF] << 1); + + uint32_t swizzled = x_swizzle | y_swizzle; + if (num_blocks_x != num_blocks_y) + { + swizzled &= swizzle_mask; + + if (num_blocks_x > num_blocks_y) + swizzled |= ((x >> min_bits) << (min_bits * 2)); + else + swizzled |= ((y >> min_bits) << (min_bits * 2)); + } + + pvrtc4_block* pDst_block = static_cast(pDst_blocks) + swizzled; + pDst_block->m_endpoints = pPVRTC_endpoints[block_index]; + + { + const uint32_t ex = 2; + int bx = x + ex - 1; + bx &= x_mask; + +#define DO_ROW(ey) \ + { \ + const uint32_t e = pE_rows[ey][bx]; \ + e0[ex][ey] = get_endpoint_l8(e, 0); \ + e1[ex][ey] = get_endpoint_l8(e, 1); \ + } + + DO_ROW(0); + DO_ROW(1); + DO_ROW(2); +#undef DO_ROW + } + + uint32_t mod = 0; + +#define DO_PIX(lx, ly, w0, w1, w2, w3) \ + { \ + int ca_l = a0 * w0 + a1 * w1 + a2 * w2 + a3 * w3; \ + int cb_l = b0 * w0 + b1 * w1 + b2 * w2 + b3 * w3; \ + int cl = 16 * (block_pixels[ly][lx].r + block_pixels[ly][lx].g + block_pixels[ly][lx].b + block_pixels[ly][lx].a); \ + int dl = cb_l - ca_l; \ + int vl = cl - ca_l; \ + int p = vl * 16; \ + if (ca_l > cb_l) { p = -p; dl = -dl; } \ + uint32_t m = 0; \ + if (p > 3 * dl) m = (uint32_t)(1 << ((ly) * 8 + (lx) * 2)); \ + if (p > 8 * dl) m = (uint32_t)(2 << ((ly) * 8 + (lx) * 2)); \ + if (p > 13 * dl) m = (uint32_t)(3 << ((ly) * 8 + (lx) * 2)); \ + mod |= m; \ + } + + { + const uint32_t ex = 0, ey = 0; + const int a0 = e0[ex][ey], a1 = e0[ex + 1][ey], a2 = e0[ex][ey + 1], a3 = e0[ex + 1][ey + 1]; + const int b0 = e1[ex][ey], b1 = e1[ex + 1][ey], b2 = e1[ex][ey + 1], b3 = e1[ex + 1][ey + 1]; + DO_PIX(0, 0, 4, 4, 4, 4); + DO_PIX(1, 0, 2, 6, 2, 6); + DO_PIX(0, 1, 2, 2, 6, 6); + DO_PIX(1, 1, 1, 3, 3, 9); + } + + { + const uint32_t ex = 1, ey = 0; + const int a0 = e0[ex][ey], a1 = e0[ex + 1][ey], a2 = e0[ex][ey + 1], a3 = e0[ex + 1][ey + 1]; + const int b0 = e1[ex][ey], b1 = e1[ex + 1][ey], b2 = e1[ex][ey + 1], b3 = e1[ex + 1][ey + 1]; + DO_PIX(2, 0, 8, 0, 8, 0); + DO_PIX(3, 0, 6, 2, 6, 2); + DO_PIX(2, 1, 4, 0, 12, 0); + DO_PIX(3, 1, 3, 1, 9, 3); + } + + { + const uint32_t ex = 0, ey = 1; + const int a0 = e0[ex][ey], a1 = e0[ex + 1][ey], a2 = e0[ex][ey + 1], a3 = e0[ex + 1][ey + 1]; + const int b0 = e1[ex][ey], b1 = e1[ex + 1][ey], b2 = e1[ex][ey + 1], b3 = e1[ex + 1][ey + 1]; + DO_PIX(0, 2, 8, 8, 0, 0); + DO_PIX(1, 2, 4, 12, 0, 0); + DO_PIX(0, 3, 6, 6, 2, 2); + DO_PIX(1, 3, 3, 9, 1, 3); + } + + { + const uint32_t ex = 1, ey = 1; + const int a0 = e0[ex][ey], a1 = e0[ex + 1][ey], a2 = e0[ex][ey + 1], a3 = e0[ex + 1][ey + 1]; + const int b0 = e1[ex][ey], b1 = e1[ex + 1][ey], b2 = e1[ex][ey + 1], b3 = e1[ex + 1][ey + 1]; + DO_PIX(2, 2, 16, 0, 0, 0); + DO_PIX(3, 2, 12, 4, 0, 0); + DO_PIX(2, 3, 12, 0, 4, 0); + DO_PIX(3, 3, 9, 3, 3, 1); + } +#undef DO_PIX + + pDst_block->m_modulation = mod; + + e0[0][0] = e0[1][0]; e0[1][0] = e0[2][0]; + e0[0][1] = e0[1][1]; e0[1][1] = e0[2][1]; + e0[0][2] = e0[1][2]; e0[1][2] = e0[2][2]; + + e1[0][0] = e1[1][0]; e1[1][0] = e1[2][0]; + e1[0][1] = e1[1][1]; e1[1][1] = e1[2][1]; + e1[0][2] = e1[1][2]; e1[1][2] = e1[2][2]; + + } // x + } // y + } + + bool transcode_uastc_to_pvrtc1_4_rgb(const uastc_block* pSrc_blocks, void* pDst_blocks, uint32_t num_blocks_x, uint32_t num_blocks_y, bool high_quality, bool from_alpha) + { + BASISU_NOTE_UNUSED(high_quality); + + if ((!num_blocks_x) || (!num_blocks_y)) + return false; + + const uint32_t width = num_blocks_x * 4; + const uint32_t height = num_blocks_y * 4; + if (!basisu::is_pow2(width) || !basisu::is_pow2(height)) + return false; + + std::vector temp_endpoints(num_blocks_x * num_blocks_y); + + for (uint32_t y = 0; y < num_blocks_y; y++) + { + for (uint32_t x = 0; x < num_blocks_x; x++) + { + color32 block_pixels[16]; + if (!unpack_uastc(pSrc_blocks[x + y * num_blocks_x], block_pixels, false)) + return false; + + // Get block's RGB bounding box + color32 low_color(255, 255, 255, 255), high_color(0, 0, 0, 0); + + if (from_alpha) + { + uint32_t low_a = 255, high_a = 0; + for (uint32_t i = 0; i < 16; i++) + { + low_a = std::min(low_a, block_pixels[i].a); + high_a = std::max(high_a, block_pixels[i].a); + } + low_color.set(low_a, low_a, low_a, 255); + high_color.set(high_a, high_a, high_a, 255); + } + else + { + for (uint32_t i = 0; i < 16; i++) + { + low_color = color32::comp_min(low_color, block_pixels[i]); + high_color = color32::comp_max(high_color, block_pixels[i]); + } + } + + // Set PVRTC1 endpoints to floor/ceil of bounding box's coordinates. + pvrtc4_block temp; + temp.set_opaque_endpoint_floor(0, low_color); + temp.set_opaque_endpoint_ceil(1, high_color); + + temp_endpoints[x + y * num_blocks_x] = temp.m_endpoints; + } + } + + fixup_pvrtc1_4_modulation_rgb(pSrc_blocks, &temp_endpoints[0], pDst_blocks, num_blocks_x, num_blocks_y, from_alpha); + + return true; + } + + bool transcode_uastc_to_pvrtc1_4_rgba(const uastc_block* pSrc_blocks, void* pDst_blocks, uint32_t num_blocks_x, uint32_t num_blocks_y, bool high_quality) + { + BASISU_NOTE_UNUSED(high_quality); + + if ((!num_blocks_x) || (!num_blocks_y)) + return false; + + const uint32_t width = num_blocks_x * 4; + const uint32_t height = num_blocks_y * 4; + if (!basisu::is_pow2(width) || !basisu::is_pow2(height)) + return false; + + std::vector temp_endpoints(num_blocks_x * num_blocks_y); + + for (uint32_t y = 0; y < num_blocks_y; y++) + { + for (uint32_t x = 0; x < num_blocks_x; x++) + { + color32 block_pixels[16]; + if (!unpack_uastc(pSrc_blocks[x + y * num_blocks_x], block_pixels, false)) + return false; + + // Get block's RGBA bounding box + color32 low_color(255, 255, 255, 255), high_color(0, 0, 0, 0); + + for (uint32_t i = 0; i < 16; i++) + { + low_color = color32::comp_min(low_color, block_pixels[i]); + high_color = color32::comp_max(high_color, block_pixels[i]); + } + + // Set PVRTC1 endpoints to floor/ceil of bounding box's coordinates. + pvrtc4_block temp; + temp.set_endpoint_floor(0, low_color); + temp.set_endpoint_ceil(1, high_color); + + temp_endpoints[x + y * num_blocks_x] = temp.m_endpoints; + } + } + + fixup_pvrtc1_4_modulation_rgba(pSrc_blocks, &temp_endpoints[0], pDst_blocks, num_blocks_x, num_blocks_y); + + return true; + } + + void uastc_init() + { + for (uint32_t range = 0; range < BC7ENC_TOTAL_ASTC_RANGES; range++) + { + if (!astc_is_valid_endpoint_range(range)) + continue; + + const uint32_t levels = astc_get_levels(range); + + uint32_t vals[256]; + for (uint32_t i = 0; i < levels; i++) + vals[i] = (unquant_astc_endpoint_val(i, range) << 8) | i; + + std::sort(vals, vals + levels); + + for (uint32_t i = 0; i < levels; i++) + { + const uint32_t order = vals[i] & 0xFF; + const uint32_t unq = vals[i] >> 8; + + g_astc_unquant[range][order].m_unquant = (uint8_t)unq; + g_astc_unquant[range][order].m_index = (uint8_t)i; + + } // i + } + + // TODO: Precompute? + // BC7 777.1 + for (int c = 0; c < 256; c++) + { + for (uint32_t lp = 0; lp < 2; lp++) + { + endpoint_err best; + best.m_error = (uint16_t)UINT16_MAX; + + for (uint32_t l = 0; l < 128; l++) + { + const uint32_t low = (l << 1) | lp; + + for (uint32_t h = 0; h < 128; h++) + { + const uint32_t high = (h << 1) | lp; + + const int k = (low * (64 - g_bc7_weights4[BC7ENC_MODE_6_OPTIMAL_INDEX]) + high * g_bc7_weights4[BC7ENC_MODE_6_OPTIMAL_INDEX] + 32) >> 6; + + const int err = (k - c) * (k - c); + if (err < best.m_error) + { + best.m_error = (uint16_t)err; + best.m_lo = (uint8_t)l; + best.m_hi = (uint8_t)h; + } + } // h + } // l + + g_bc7_mode_6_optimal_endpoints[c][lp] = best; + } // lp + + } // c + + // BC7 777 + for (int c = 0; c < 256; c++) + { + endpoint_err best; + best.m_error = (uint16_t)UINT16_MAX; + + for (uint32_t l = 0; l < 128; l++) + { + const uint32_t low = (l << 1) | (l >> 6); + + for (uint32_t h = 0; h < 128; h++) + { + const uint32_t high = (h << 1) | (h >> 6); + + const int k = (low * (64 - g_bc7_weights2[BC7ENC_MODE_5_OPTIMAL_INDEX]) + high * g_bc7_weights2[BC7ENC_MODE_5_OPTIMAL_INDEX] + 32) >> 6; + + const int err = (k - c) * (k - c); + if (err < best.m_error) + { + best.m_error = (uint16_t)err; + best.m_lo = (uint8_t)l; + best.m_hi = (uint8_t)h; + } + } // h + } // l + + g_bc7_mode_5_optimal_endpoints[c] = best; + + } // c + } + +#endif // #if BASISD_SUPPORT_UASTC + } // namespace basist + + + + diff --git a/transcoder/basisu_transcoder.h b/transcoder/basisu_transcoder.h index 770c641..a34726b 100644 --- a/transcoder/basisu_transcoder.h +++ b/transcoder/basisu_transcoder.h @@ -1,5 +1,5 @@ // basisu_transcoder.h -// Copyright (C) 2019 Binomial LLC. All Rights Reserved. +// Copyright (C) 2019-2020 Binomial LLC. All Rights Reserved. // Important: If compiling with gcc, be sure strict aliasing is disabled: -fno-strict-aliasing // // Licensed under the Apache License, Version 2.0 (the "License"); @@ -15,10 +15,13 @@ // limitations under the License. #pragma once -// Set BASISU_DEVEL_MESSAGES to 1 to enable debug printf()'s whenever an error occurs, for easier debugging during development. -//#define BASISU_DEVEL_MESSAGES 1 +// Set BASISU_FORCE_DEVEL_MESSAGES to 1 to enable debug printf()'s whenever an error occurs, for easier debugging during development. +#ifndef BASISU_FORCE_DEVEL_MESSAGES +#define BASISU_FORCE_DEVEL_MESSAGES 0 +#endif #include "basisu_transcoder_internal.h" +#include "basisu_transcoder_uastc.h" #include "basisu_global_selector_palette.h" #include "basisu_file_headers.h" @@ -45,12 +48,11 @@ namespace basist cTFBC3_RGBA = 3, // Opaque+alpha, BC4 followed by a BC1 block, alpha channel will be opaque for opaque .basis files cTFBC4_R = 4, // Red only, alpha slice is transcoded to output if cDecodeFlagsTranscodeAlphaDataToOpaqueFormats flag is specified cTFBC5_RG = 5, // XY: Two BC4 blocks, X=R and Y=Alpha, .basis file should have alpha data (if not Y will be all 255's) - cTFBC7_M6_RGB = 6, // Opaque only, RGB or alpha if cDecodeFlagsTranscodeAlphaDataToOpaqueFormats flag is specified. Highest quality of all the non-ETC1 formats. - cTFBC7_M5_RGBA = 7, // Opaque+alpha, alpha channel will be opaque for opaque .basis files - + cTFBC7_RGBA = 6, // RGB or RGBA, mode 5 for ETC1S, modes (1,2,3,5,6,7) for UASTC + // PVRTC1 4bpp (mobile, PowerVR devices) cTFPVRTC1_4_RGB = 8, // Opaque only, RGB or alpha if cDecodeFlagsTranscodeAlphaDataToOpaqueFormats flag is specified, nearly lowest quality of any texture format. - cTFPVRTC1_4_RGBA = 9, // Opaque+alpha, most useful for simple opacity maps. If .basis file doens't have alpha cTFPVRTC1_4_RGB will be used instead. Lowest quality of any supported texture format. + cTFPVRTC1_4_RGBA = 9, // Opaque+alpha, most useful for simple opacity maps. If .basis file doesn't have alpha cTFPVRTC1_4_RGB will be used instead. Lowest quality of any supported texture format. // ASTC (mobile, Intel devices, hopefully all desktop GPU's one day) cTFASTC_4x4_RGBA = 10, // Opaque+alpha, ASTC 4x4, alpha channel will be opaque for opaque .basis files. Transcoder uses RGB/RGBA/L/LA modes, void extent, and up to two ([0,47] and [0,255]) endpoint precisions. @@ -85,26 +87,49 @@ namespace basist cTFBC3 = cTFBC3_RGBA, cTFBC4 = cTFBC4_R, cTFBC5 = cTFBC5_RG, - cTFBC7_M6_OPAQUE_ONLY = cTFBC7_M6_RGB, - cTFBC7_M5 = cTFBC7_M5_RGBA, + + // Previously, the caller had some control over which BC7 mode the transcoder output. We've simplified this due to UASTC, which supports numerous modes. + cTFBC7_M6_RGB = cTFBC7_RGBA, // Opaque only, RGB or alpha if cDecodeFlagsTranscodeAlphaDataToOpaqueFormats flag is specified. Highest quality of all the non-ETC1 formats. + cTFBC7_M5_RGBA = cTFBC7_RGBA, // Opaque+alpha, alpha channel will be opaque for opaque .basis files + cTFBC7_M6_OPAQUE_ONLY = cTFBC7_RGBA, + cTFBC7_M5 = cTFBC7_RGBA, + cTFBC7_ALT = 7, + cTFASTC_4x4 = cTFASTC_4x4_RGBA, + cTFATC_RGBA_INTERPOLATED_ALPHA = cTFATC_RGBA, }; - uint32_t basis_get_bytes_per_block(transcoder_texture_format fmt); + // For compressed texture formats, this returns the # of bytes per block. For uncompressed, it returns the # of bytes per pixel. + // NOTE: Previously, this function was called basis_get_bytes_per_block(), and it always returned 16*bytes_per_pixel for uncompressed formats which was confusing. + uint32_t basis_get_bytes_per_block_or_pixel(transcoder_texture_format fmt); + + // Returns format's name in ASCII const char* basis_get_format_name(transcoder_texture_format fmt); + + // Returns true if the format supports an alpha channel. bool basis_transcoder_format_has_alpha(transcoder_texture_format fmt); + + // Returns the basisu::texture_format corresponding to the specified transcoder_texture_format. basisu::texture_format basis_get_basisu_texture_format(transcoder_texture_format fmt); + + // Returns the texture type's name in ASCII. const char* basis_get_texture_type_name(basis_texture_type tex_type); + // Returns true if the transcoder texture type is an uncompressed (raw pixel) format. bool basis_transcoder_format_is_uncompressed(transcoder_texture_format tex_type); + + // Returns the # of bytes per pixel for uncompressed formats, or 0 for block texture formats. uint32_t basis_get_uncompressed_bytes_per_pixel(transcoder_texture_format fmt); + // Returns the block width for the specified texture format, which is currently either 4 or 8 for FXT1. uint32_t basis_get_block_width(transcoder_texture_format tex_type); + + // Returns the block height for the specified texture format, which is currently always 4. uint32_t basis_get_block_height(transcoder_texture_format tex_type); // Returns true if the specified format was enabled at compile time. - bool basis_is_format_supported(transcoder_texture_format tex_type); + bool basis_is_format_supported(transcoder_texture_format tex_type, basis_tex_format fmt = basis_tex_format::cETC1S); class basisu_transcoder; @@ -125,12 +150,12 @@ namespace basist }; // Low-level helper class that does the actual transcoding. - class basisu_lowlevel_transcoder + class basisu_lowlevel_etc1s_transcoder { friend class basisu_transcoder; public: - basisu_lowlevel_transcoder(const basist::etc1_global_selector_codebook *pGlobal_sel_codebook); + basisu_lowlevel_etc1s_transcoder(const basist::etc1_global_selector_codebook *pGlobal_sel_codebook); bool decode_palettes( uint32_t num_endpoints, const uint8_t *pEndpoints_data, uint32_t endpoints_data_size, @@ -142,6 +167,17 @@ namespace basist uint32_t output_block_or_pixel_stride_in_bytes, bool bc1_allow_threecolor_blocks, const basis_file_header &header, const basis_slice_desc& slice_desc, uint32_t output_row_pitch_in_blocks_or_pixels = 0, basisu_transcoder_state *pState = nullptr, bool astc_transcode_alpha = false, void* pAlpha_blocks = nullptr, uint32_t output_rows_in_pixels = 0); + void clear() + { + m_endpoints.clear(); + m_selectors.clear(); + m_endpoint_pred_model.clear(); + m_delta_endpoint_model.clear(); + m_selector_model.clear(); + m_selector_history_buf_rle_model.clear(); + m_selector_history_buf_size = 0; + } + private: typedef std::vector endpoint_vec; endpoint_vec m_endpoints; @@ -158,6 +194,38 @@ namespace basist basisu_transcoder_state m_def_state; }; + enum + { + // PVRTC1: decode non-pow2 ETC1S texture level to the next larger power of 2 (not implemented yet, but we're going to support it). Ignored if the slice's dimensions are already a power of 2. + cDecodeFlagsPVRTCDecodeToNextPow2 = 2, + + // When decoding to an opaque texture format, if the basis file has alpha, decode the alpha slice instead of the color slice to the output texture format. + // This is primarily to allow decoding of textures with alpha to multiple ETC1 textures (one for color, another for alpha). + cDecodeFlagsTranscodeAlphaDataToOpaqueFormats = 4, + + // Forbid usage of BC1 3 color blocks (we don't support BC1 punchthrough alpha yet). + // This flag is used internally when decoding to BC3. + cDecodeFlagsBC1ForbidThreeColorBlocks = 8, + + // The output buffer contains alpha endpoint/selector indices. + // Used internally when decoding formats like ASTC that require both color and alpha data to be available when transcoding to the output format. + cDecodeFlagsOutputHasAlphaIndices = 16, + + cDecodeFlagsHighQuality = 32 + }; + + class basisu_lowlevel_uastc_transcoder + { + friend class basisu_transcoder; + + public: + basisu_lowlevel_uastc_transcoder(); + + bool transcode_slice(void* pDst_blocks, uint32_t num_blocks_x, uint32_t num_blocks_y, const uint8_t* pImage_data, uint32_t image_data_size, block_format fmt, + uint32_t output_block_or_pixel_stride_in_bytes, bool bc1_allow_threecolor_blocks, const basis_file_header& header, const basis_slice_desc& slice_desc, uint32_t output_row_pitch_in_blocks_or_pixels = 0, + basisu_transcoder_state* pState = nullptr, uint32_t output_rows_in_pixels = 0, int channel0 = -1, int channel1 = -1, uint32_t decode_flags = 0); + }; + struct basisu_slice_info { uint32_t m_orig_width; @@ -251,10 +319,12 @@ namespace basist uint32_t m_userdata0; uint32_t m_userdata1; - - bool m_etc1s; // always true for basis universal + + basis_tex_format m_tex_format; // ETC1S, UASTC, etc. + bool m_y_flipped; // true if the image was Y flipped - bool m_has_alpha_slices; // true if the texture has alpha slices (even slices RGB, odd slices alpha) + bool m_etc1s; // true if the file is ETC1S + bool m_has_alpha_slices; // true if the texture has alpha slices (for ETC1S: even slices RGB, odd slices alpha) }; // High-level transcoder class which accepts .basis file data and allows the caller to query information about the file and transcode image levels to various texture formats. @@ -280,6 +350,8 @@ namespace basist // Note that the number of mipmap levels for each image may differ, and that images may have different resolutions. uint32_t get_total_images(const void *pData, uint32_t data_size) const; + basis_tex_format get_tex_format(const void* pData, uint32_t data_size) const; + // Returns the number of mipmap levels in an image. uint32_t get_total_image_levels(const void *pData, uint32_t data_size, uint32_t image_index) const; @@ -296,30 +368,14 @@ namespace basist bool get_file_info(const void *pData, uint32_t data_size, basisu_file_info &file_info) const; // start_transcoding() must be called before calling transcode_slice() or transcode_image_level(). - // This decompresses the selector/endpoint codebooks, so ideally you would only call this once per .basis file (not each image/mipmap level). - bool start_transcoding(const void *pData, uint32_t data_size) const; + // For ETC1S files, this call decompresses the selector/endpoint codebooks, so ideally you would only call this once per .basis file (not each image/mipmap level). + bool start_transcoding(const void *pData, uint32_t data_size); + + bool stop_transcoding(); // Returns true if start_transcoding() has been called. - bool get_ready_to_transcode() const { return m_lowlevel_decoder.m_endpoints.size() > 0; } - - enum - { - // PVRTC1: decode non-pow2 ETC1S texture level to the next larger power of 2 (not implemented yet, but we're going to support it). Ignored if the slice's dimensions are already a power of 2. - cDecodeFlagsPVRTCDecodeToNextPow2 = 2, - - // When decoding to an opaque texture format, if the basis file has alpha, decode the alpha slice instead of the color slice to the output texture format. - // This is primarily to allow decoding of textures with alpha to multiple ETC1 textures (one for color, another for alpha). - cDecodeFlagsTranscodeAlphaDataToOpaqueFormats = 4, - - // Forbid usage of BC1 3 color blocks (we don't support BC1 punchthrough alpha yet). - // This flag is used internally when decoding to BC3. - cDecodeFlagsBC1ForbidThreeColorBlocks = 8, - - // The output buffer contains alpha endpoint/selector indices. - // Used internally when decoding formats like ASTC that require both color and alpha data to be available when transcoding to the output format. - cDecodeFlagsOutputHasAlphaIndices = 16 - }; - + bool get_ready_to_transcode() const { return m_ready_to_transcode; } + // transcode_image_level() decodes a single mipmap level from the .basis file to any of the supported output texture formats. // It'll first find the slice(s) to transcode, then call transcode_slice() one or two times to decode both the color and alpha texture data (or RG texture data from two slices for BC5). // If the .basis file doesn't have alpha slices, the output alpha blocks will be set to fully opaque (all 255's). @@ -352,10 +408,14 @@ namespace basist // - basisu_transcoder_init() must have been called first to initialize the transcoder lookup tables before calling this function. bool transcode_slice(const void *pData, uint32_t data_size, uint32_t slice_index, void *pOutput_blocks, uint32_t output_blocks_buf_size_in_blocks_or_pixels, - block_format fmt, uint32_t output_block_stride_in_bytes, uint32_t decode_flags = 0, uint32_t output_row_pitch_in_blocks_or_pixels = 0, basisu_transcoder_state * pState = nullptr, void* pAlpha_blocks = nullptr, uint32_t output_rows_in_pixels = 0) const; + block_format fmt, uint32_t output_block_stride_in_bytes, uint32_t decode_flags = 0, uint32_t output_row_pitch_in_blocks_or_pixels = 0, basisu_transcoder_state * pState = nullptr, void* pAlpha_blocks = nullptr, + uint32_t output_rows_in_pixels = 0, int channel0 = -1, int channel1 = -1) const; private: - mutable basisu_lowlevel_transcoder m_lowlevel_decoder; + mutable basisu_lowlevel_etc1s_transcoder m_lowlevel_etc1s_decoder; + mutable basisu_lowlevel_uastc_transcoder m_lowlevel_uastc_decoder; + + bool m_ready_to_transcode; int find_first_slice_index(const void* pData, uint32_t data_size, uint32_t image_index, uint32_t level_index) const; diff --git a/transcoder/basisu_transcoder_internal.h b/transcoder/basisu_transcoder_internal.h index a9c6823..dc234bd 100644 --- a/transcoder/basisu_transcoder_internal.h +++ b/transcoder/basisu_transcoder_internal.h @@ -1,5 +1,5 @@ // basisu_transcoder_internal.h - Universal texture format transcoder library. -// Copyright (C) 2019 Binomial LLC. All Rights Reserved. +// Copyright (C) 2019-2020 Binomial LLC. All Rights Reserved. // // Important: If compiling with gcc, be sure strict aliasing is disabled: -fno-strict-aliasing // @@ -20,8 +20,8 @@ #pragma warning (disable: 4127) // conditional expression is constant #endif -#define BASISD_LIB_VERSION 107 -#define BASISD_VERSION_STRING "01.11" +#define BASISD_LIB_VERSION 112 +#define BASISD_VERSION_STRING "01.12" #ifdef _DEBUG #define BASISD_BUILD_DEBUG @@ -45,38 +45,44 @@ namespace basist enum class block_format { cETC1, // ETC1S RGB + cETC2_RGBA, // full ETC2 EAC RGBA8 block cBC1, // DXT1 RGB + cBC3, // BC4 block followed by a four color BC1 block cBC4, // DXT5A (alpha block only) + cBC5, // two BC4 blocks cPVRTC1_4_RGB, // opaque-only PVRTC1 4bpp cPVRTC1_4_RGBA, // PVRTC1 4bpp RGBA - cBC7_M6_OPAQUE_ONLY, // RGB BC7 mode 6 + cBC7, // Full BC7 block, any mode cBC7_M5_COLOR, // RGB BC7 mode 5 color (writes an opaque mode 5 block) cBC7_M5_ALPHA, // alpha portion of BC7 mode 5 (cBC7_M5_COLOR output data must have been written to the output buffer first to set the mode/rot fields etc.) cETC2_EAC_A8, // alpha block of ETC2 EAC (first 8 bytes of the 16-bit ETC2 EAC RGBA format) cASTC_4x4, // ASTC 4x4 (either color-only or color+alpha). Note that the transcoder always currently assumes sRGB is not enabled when outputting ASTC // data. If you use a sRGB ASTC format you'll get ~1 LSB of additional error, because of the different way ASTC decoders scale 8-bit endpoints to 16-bits during unpacking. + cATC_RGB, cATC_RGBA_INTERPOLATED_ALPHA, cFXT1_RGB, // Opaque-only, has oddball 8x4 pixel block size + + cPVRTC2_4_RGB, + cPVRTC2_4_RGBA, + + cETC2_EAC_R11, + cETC2_EAC_RG11, cIndices, // Used internally: Write 16-bit endpoint and selector indices directly to output (output block must be at least 32-bits) cRGB32, // Writes RGB components to 32bpp output pixels cRGBA32, // Writes RGB255 components to 32bpp output pixels cA32, // Writes alpha component to 32bpp output pixels - + cRGB565, cBGR565, cRGBA4444_COLOR, cRGBA4444_ALPHA, cRGBA4444_COLOR_OPAQUE, - - cPVRTC2_4_RGB, - cPVRTC2_4_RGBA, - - cETC2_EAC_R11, - + cRGBA4444, + cTotalBlockFormats }; @@ -635,6 +641,11 @@ namespace basist return (uint8_t)((i & 0xFFFFFF00U) ? (~(i >> 31)) : i); } + enum eNoClamp + { + cNoClamp = 0 + }; + struct color32 { union @@ -655,15 +666,22 @@ namespace basist color32() { } color32(uint32_t vr, uint32_t vg, uint32_t vb, uint32_t va) { set(vr, vg, vb, va); } + color32(eNoClamp unused, uint32_t vr, uint32_t vg, uint32_t vb, uint32_t va) { (void)unused; set_noclamp_rgba(vr, vg, vb, va); } void set(uint32_t vr, uint32_t vg, uint32_t vb, uint32_t va) { c[0] = static_cast(vr); c[1] = static_cast(vg); c[2] = static_cast(vb); c[3] = static_cast(va); } + void set_noclamp_rgb(uint32_t vr, uint32_t vg, uint32_t vb) { c[0] = static_cast(vr); c[1] = static_cast(vg); c[2] = static_cast(vb); } + void set_noclamp_rgba(uint32_t vr, uint32_t vg, uint32_t vb, uint32_t va) { set(vr, vg, vb, va); } + void set_clamped(int vr, int vg, int vb, int va) { c[0] = clamp255(vr); c[1] = clamp255(vg); c[2] = clamp255(vb); c[3] = clamp255(va); } uint8_t operator[] (uint32_t idx) const { assert(idx < 4); return c[idx]; } uint8_t &operator[] (uint32_t idx) { assert(idx < 4); return c[idx]; } bool operator== (const color32&rhs) const { return m == rhs.m; } + + static color32 comp_min(const color32& a, const color32& b) { return color32(cNoClamp, std::min(a[0], b[0]), std::min(a[1], b[1]), std::min(a[2], b[2]), std::min(a[3], b[3])); } + static color32 comp_max(const color32& a, const color32& b) { return color32(cNoClamp, std::max(a[0], b[0]), std::max(a[1], b[1]), std::max(a[2], b[2]), std::max(a[3], b[3])); } }; struct endpoint diff --git a/transcoder/basisu_transcoder_tables_bc7_m6.inc b/transcoder/basisu_transcoder_tables_bc7_m6.inc deleted file mode 100644 index 6b814e6..0000000 --- a/transcoder/basisu_transcoder_tables_bc7_m6.inc +++ /dev/null @@ -1,4383 +0,0 @@ -// Copyright (C) 2017-2019 Binomial LLC. All Rights Reserved. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -static const uint32_t g_etc1_to_bc7_m6_table0[] = { -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1, -0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, -0x0,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1, -0x1,0x40000,0x40000,0x40000,0x40000,0x40000,0x40000,0x40000,0x80000,0x80000,0x1,0x40000,0x40000,0x40000,0x80000,0x80000,0x1,0x80000,0x80000,0x1,0x1,0x40000,0x40000,0x40000,0x80000,0x80000,0x1,0x80000,0x80000,0x1,0x1,0x80000, -0x80000,0x1,0x1,0x1,0x40000,0x40000,0x40000,0x40000,0x40000,0x80000,0x80000,0x80000,0x40000,0x40000,0x80000,0x1,0x80000,0x100000,0x180000,0x2C0000,0x6000001,0x180000,0x2C0000,0x6000001,0x2C0000,0x6000001,0x6000001,0x180000,0x2C0000,0x6000001,0x2C0000,0x6000001, -0x6000001,0x2C0000,0x6000001,0x6000001,0x6000001,0x180000,0x2C0000,0x6000001,0x2C0000,0x6000001,0x6000001,0x2C0000,0x6000001,0x6000001,0x6000001,0x2C0000,0x6000001,0x6000001,0x6000001,0x6000001,0x140000,0x100000,0x100000,0x180000,0x240000,0x440000,0x6000001,0x6000001,0x140000,0x1C0000,0xD40000,0x6000001, -0x200000,0x4002C,0x16000004,0xA000005,0x6000005,0xE000012,0x8000005,0x6000001,0x6000012,0x400000A,0x4000012,0x8000023,0x600000D,0x6000005,0x6000016,0x400000E,0x4000016,0x4000023,0x4000013,0x400001B,0x2000023,0x4002C,0x6000011,0x6000009,0x600001A,0x4000012,0x400001A,0x2040027,0x4000017,0x200001F,0x2000024,0x8002C, -0x400001C,0x2000022,0x2000027,0x200002C,0x1600000B,0x48000012,0x78000004,0xE00000C,0xA000009,0x600000C,0x6000009,0x4000011,0x1000000F,0xA000012,0x4000013,0x200001F,0x8002C,0x80024,0x12040004,0xA040004,0x6000005,0xE000012,0x8000005,0x6000001,0x6000012,0x400000A,0x4000012,0x80023,0x600000D,0x6000005,0x6000016,0x400000E, -0x4000016,0xC0023,0x4000013,0x400001B,0x2000023,0x80023,0x600000D,0x6000005,0x6000016,0x400000E,0x4000016,0xC0023,0x4000013,0x400001B,0x2000023,0xC0023,0x4000013,0x400001B,0x2000023,0x2000023,0x1600000B,0x48000012,0x5A040004,0xE00000C,0xA000009,0x600000C,0x6000009,0x4000011,0x1000000E,0xA000011,0x4000013,0x400001B, -0xC0023,0x4,0x4,0x4,0x4,0x4000000,0x4000000,0x4000000,0x2000000,0x2000000,0x1,0x2000002,0x2000002,0x2000002,0x1,0x1,0x1,0x2,0x2,0x2,0x2,0x2000003,0x2000003,0x2000003,0x1,0x1,0x1,0x2,0x2,0x2,0x2,0x3, -0x3,0x3,0x3,0x3,0x4000001,0x18000000,0x4,0x2000001,0x4000001,0x1,0x1,0x1,0x2000001,0x4000001,0x2,0x2,0x3,0x4,0x4,0x4,0x4,0x4000000,0x4000000,0x4000000,0x2000000,0x2000000,0x1,0x2000002,0x2000002,0x2000002,0x1,0x1, -0x1,0x2,0x2,0x2,0x2,0x2000002,0x2000002,0x2000002,0x1,0x1,0x1,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x4000001,0x18000000,0x4,0x2000001,0x4000001,0x1,0x1,0x1,0x2000001,0x4000001,0x2,0x2, -0x2,0x80014,0x12040000,0xA040000,0x6040001,0x20C0012,0x8000005,0x6000001,0x180012,0x400000A,0x4000012,0x20C0012,0x8000005,0x6000001,0x180012,0x400000A,0x4000012,0x180012,0x400000A,0x4000012,0x4000012,0x20C0012,0x8000005,0x6000001,0x180012,0x400000A,0x4000012,0x180012,0x400000A,0x4000012,0x4000012,0x180012, -0x400000A,0x4000012,0x4000012,0x4000012,0x1C000008,0xC080012,0x5A040000,0xA040008,0xA000005,0x6000008,0x6000005,0x600000A,0x14000008,0xC000008,0x6000005,0x4000012,0x140012,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, -0x0,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x1,0x2,0x2,0x2,0x2,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1, -0x2,}; -static const uint32_t g_etc1_to_bc7_m6_table1[] = { -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1, -0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0xC0000,0xC0000,0xC0000,0xC0000,0xC0000,0xC0000,0xC0000,0xC0000,0xC0000,0xC0000,0x100000,0x100000,0x100000,0x100000,0x100000, -0x100000,0x200000,0x200000,0x200000,0x4000001,0x100000,0x100000,0x100000,0x100000,0x100000,0x100000,0x200000,0x200000,0x200000,0x4000001,0x200000,0x200000,0x200000,0x4000001,0x4000001,0xC0000,0xC0000,0xC0000,0x20C0000,0x40C0000,0x100000,0x100000,0x140000,0x20C0000,0x40C0000,0x180000,0x200000, -0x180000,0x140000,0x140000,0x140000,0x140000,0x1C0000,0x1C0000,0x1C0000,0x380000,0x380000,0x8000001,0x1C0000,0x1C0000,0x1C0000,0x380000,0x380000,0x8000001,0x380000,0x380000,0x8000001,0x8000001,0x1C0000,0x1C0000,0x1C0000,0x380000,0x380000,0x8000001,0x380000,0x380000,0x8000001,0x8000001,0x380000, -0x380000,0x8000001,0x8000001,0x8000001,0x180000,0x2140000,0x140000,0x2180000,0x200000,0x280000,0x2C0000,0x440000,0x180000,0x1C0000,0x280000,0x8000001,0x280000,0x200000,0x300000,0x5C0000,0xE000001,0x300000,0x5C0000,0xE000001,0x5C0000,0xE000001,0xE000001,0x300000,0x5C0000,0xE000001,0x5C0000,0xE000001, -0xE000001,0x5C0000,0xE000001,0xE000001,0xE000001,0x300000,0x5C0000,0xE000001,0x5C0000,0xE000001,0xE000001,0x5C0000,0xE000001,0xE000001,0xE000001,0x5C0000,0xE000001,0xE000001,0xE000001,0xE000001,0x280000,0x8200000,0x8200000,0x340000,0x4C0000,0x940000,0xE000001,0xE000001,0x2C0000,0x3C0000,0x1D40000,0xE000001, -0x400000,0x100088,0x220C0034,0x140C0034,0xE0C0035,0x1E080026,0x14080015,0xE080019,0x10080026,0xE040016,0xC040026,0x20000033,0x16000009,0x1004000F,0x12000012,0xE000002,0xC000016,0x10000033,0xE000011,0xA00001B,0xA000033,0x180088,0x1200003D,0xE000034,0x12000036,0xE00001B,0xC000026,0xC00004B,0xC000023,0xA00002B,0xA000043,0x2C0088, -0xA000054,0xA00004C,0x800005F,0x600008C,0x48000002,0x8C080026,0x9E0C0034,0x26000001,0x18000002,0x12000002,0x10000002,0xE000002,0x3200000E,0x1E000005,0x1000000B,0xA00002B,0x200088,0x140034,0x1E100008,0x12100009,0xE100009,0x1A0C0012,0x120C0001,0x100C0001,0x100C0012,0xE0C0005,0xC0C0012,0x200033,0x14040009,0xE080009,0x12000012,0xE000002, -0xC040012,0x3C0033,0xE000011,0xA00001B,0xA000033,0x200033,0x14040009,0xE080009,0x12000012,0xE000002,0xC040012,0x3C0033,0xE000011,0xA00001B,0xA000033,0x3C0033,0xE000011,0xA00001B,0xA000033,0xA000033,0x44040001,0x6E0C0012,0x80100008,0x20040001,0x18000002,0x12000002,0xE040002,0xE000002,0x32000005,0x1E000001,0x1000000A,0xA00001B, -0x2C0033,0xC0034,0xC0034,0xC0034,0xC0034,0x14080014,0x14080014,0x14080014,0xC080014,0xC080014,0x8040015,0x16000008,0x16000008,0x16000008,0xE000001,0xE000001,0xA000005,0xA00000A,0xA00000A,0x8000001,0x600000A,0x20C0033,0x20C0033,0x20C0033,0xC000015,0xC000015,0x8000013,0x8000019,0x8000019,0x800000A,0x600000E,0x180033, -0x180033,0x6000023,0x4000023,0x4000033,0x48000001,0x5C080014,0xC0034,0x24000001,0x18000001,0x12000001,0x10000001,0xC000001,0x24000009,0x1C000004,0xE000009,0x800000A,0x140033,0x100008,0x100008,0x100008,0x100008,0x100C0000,0x100C0000,0x100C0000,0xA0C0001,0xA0C0001,0x80C0001,0x180008,0x180008,0x180008,0xA080001,0xA080001, -0x8080001,0x2C0008,0x2C0008,0x8000001,0x600000A,0x180008,0x180008,0x180008,0xA080001,0xA080001,0x8080001,0x2C0008,0x2C0008,0x8000001,0x600000A,0x2C0008,0x2C0008,0x8000001,0x600000A,0x600000A,0x3A040000,0x3E0C0000,0x100008,0x1E040000,0x14040000,0x10040000,0xC080001,0xC040000,0x26040001,0x1C000000,0x200008,0x8000001, -0x200008,0x180014,0x1A140000,0x12140000,0xE140001,0x2240012,0x120C0001,0xE100001,0x4C0012,0xE000001,0xC000012,0x2240012,0x120C0001,0xE100001,0x4C0012,0xE000001,0xC000012,0x4C0012,0xE000001,0xC000012,0xC000012,0x2240012,0x120C0001,0xE100001,0x4C0012,0xE000001,0xC000012,0x4C0012,0xE000001,0xC000012,0xC000012,0x4C0012, -0xE000001,0xC000012,0xC000012,0xC000012,0x44040001,0x1C0012,0x62140000,0x26000000,0x18000001,0x12000001,0xE040001,0xE000002,0x36000002,0x1E000001,0x10040000,0xC000012,0x340012,0x40014,0x40014,0x40014,0x40014,0x40014,0x40014,0x40014,0x40014,0x40014,0x40014,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000, -0x10000000,0x8000000,0x8000000,0x8000000,0x4000001,0x80012,0x80012,0x80012,0x80012,0x80012,0x80012,0x6000005,0x6000005,0x6000005,0x4000005,0xC0012,0xC0012,0xC0012,0x400000A,0x2000012,0x58000000,0x40014,0x40014,0x28000000,0x1C000000,0x14000000,0x14000000,0xE000000,0x20000005,0x16000002,0xA000001,0x6000005, -0xC0012,}; -static const uint32_t g_etc1_to_bc7_m6_table2[] = { -0x100000,0x100000,0x100000,0x100000,0x100000,0x100000,0x100000,0x100000,0x100000,0x100000,0x100000,0x100000,0x100000,0x100000,0x100000,0x100000,0x100000,0x100000,0x100000,0x100000,0x180000,0x180000,0x180000,0x180000,0x180000,0x180000,0x180000,0x180000,0x180000,0x180000,0x2C0000, -0x2C0000,0x2C0000,0x2C0000,0x6000001,0x100000,0x100000,0x100000,0x100000,0x100000,0x100000,0x100000,0x100000,0x100000,0x100000,0x100000,0x180000,0x200000,0x1C0000,0x1C0000,0x1C0000,0x1C0000,0x1C0000,0x1C0000,0x1C0000,0x1C0000,0x1C0000,0x1C0000,0x280000,0x280000,0x280000,0x280000,0x280000, -0x280000,0x500000,0x500000,0x500000,0xC000001,0x280000,0x280000,0x280000,0x280000,0x280000,0x280000,0x500000,0x500000,0x500000,0xC000001,0x500000,0x500000,0x500000,0xC000001,0xC000001,0x61C0000,0x1C0000,0x1C0000,0x200000,0x4200000,0x2240000,0x2240000,0x22C0000,0x200000,0x4200000,0x380000,0x500000, -0x380000,0x240000,0x240000,0x240000,0x240000,0x340000,0x340000,0x340000,0x680000,0x680000,0x10000001,0x340000,0x340000,0x340000,0x680000,0x680000,0x10000001,0x680000,0x680000,0x10000001,0x10000001,0x340000,0x340000,0x340000,0x680000,0x680000,0x10000001,0x680000,0x680000,0x10000001,0x10000001,0x680000, -0x680000,0x10000001,0x10000001,0x10000001,0x2280000,0xA240000,0x240000,0x300000,0x3C0000,0x4C0000,0x540000,0x800000,0x2C0000,0x340000,0x4C0000,0x10000001,0x4C0000,0x300000,0x2440000,0x8C0000,0x16000001,0x2440000,0x8C0000,0x16000001,0x8C0000,0x16000001,0x16000001,0x2440000,0x8C0000,0x16000001,0x8C0000,0x16000001, -0x16000001,0x8C0000,0x16000001,0x16000001,0x16000001,0x2440000,0x8C0000,0x16000001,0x8C0000,0x16000001,0x16000001,0x8C0000,0x16000001,0x16000001,0x16000001,0x8C0000,0x16000001,0x16000001,0x16000001,0x16000001,0x3C0000,0x340000,0x340000,0x500000,0x740000,0xE00000,0x16000001,0x16000001,0x400000,0x580000,0x9E40000,0x16000001, -0x640000,0x200088,0x2A1C0034,0x1C1C0034,0x161C0035,0x26180026,0x1C180015,0x16180019,0x18180026,0x16140016,0x14140026,0x28100033,0x1E100009,0x1814000F,0x1A100012,0x16100002,0x14100016,0x18100033,0x160C000F,0x140C001A,0x12100033,0x300088,0x22040033,0x16100034,0x1C040026,0x18080013,0x140C0024,0x1A000035,0x1604000A,0x14000013,0x12040033,0x5C0088, -0x1600003C,0x12000034,0x10000044,0xE00008C,0x50100002,0x94180026,0xA61C0034,0x2E100001,0x20100002,0x1A100002,0x18100002,0x16100002,0x4A080001,0x2A0C0001,0x180C0009,0x14000013,0x400088,0x240034,0x26200008,0x1A200009,0x16200009,0x221C0012,0x1A1C0001,0x181C0001,0x181C0012,0x161C0005,0x141C0012,0x380033,0x1C140009,0x16180009,0x1A100012,0x16100002, -0x14140012,0x700033,0x16040009,0x14000012,0x12000033,0x380033,0x1C140009,0x16180009,0x1A100012,0x16100002,0x14140012,0x700033,0x16040009,0x14000012,0x12000033,0x700033,0x16040009,0x14000012,0x12000033,0x12000033,0x4C140001,0x761C0012,0x88200008,0x28140001,0x20100002,0x1A100002,0x16140002,0x160C0002,0x4A080001,0x26100001,0x180C0008,0x14000012, -0x500033,0x1C0034,0x1C0034,0x1C0034,0x1C0034,0x1C180014,0x1C180014,0x1C180014,0x14180014,0x14180014,0x10140015,0x1E100008,0x1E100008,0x1E100008,0x16100001,0x16100001,0x12100005,0x1210000A,0x1210000A,0x10100001,0xE10000A,0x2240033,0x2240033,0x2240033,0x18080012,0x18080012,0x10100013,0x16040009,0x16040009,0x10080002,0xE08000A,0x4C0033, -0x4C0033,0x10000013,0xE00000E,0xC000033,0x50100001,0x64180014,0x1C0034,0x2C100001,0x20100001,0x1A100001,0x18100001,0x14100001,0x48080000,0x2A0C0000,0x16100009,0x10080002,0x340033,0x200008,0x200008,0x200008,0x200008,0x181C0000,0x181C0000,0x181C0000,0x121C0001,0x121C0001,0x101C0001,0x300008,0x300008,0x300008,0x12180001,0x12180001, -0x10180001,0x5C0008,0x5C0008,0x10100001,0xE00000A,0x300008,0x300008,0x300008,0x12180001,0x12180001,0x10180001,0x5C0008,0x5C0008,0x10100001,0xE00000A,0x5C0008,0x5C0008,0x10100001,0xE00000A,0xE00000A,0x42140000,0x461C0000,0x200008,0x26140000,0x1C140000,0x18140000,0x14180001,0x14140000,0x3E0C0000,0x24100000,0x400008,0x10100001, -0x400008,0x280014,0x22240000,0x1A240000,0x16240001,0x23C0012,0x1A1C0001,0x16200001,0x7C0012,0x16100001,0x14000012,0x23C0012,0x1A1C0001,0x16200001,0x7C0012,0x16100001,0x14000012,0x7C0012,0x16100001,0x14000012,0x14000012,0x23C0012,0x1A1C0001,0x16200001,0x7C0012,0x16100001,0x14000012,0x7C0012,0x16100001,0x14000012,0x14000012,0x7C0012, -0x16100001,0x14000012,0x14000012,0x14000012,0x5C0C0000,0x2C0012,0x6A240000,0x2E100000,0x20100001,0x1C0C0000,0x16140001,0x16080001,0x52040000,0x2E080000,0x18140000,0x14000012,0x580012,0x140014,0x140014,0x140014,0x140014,0x140014,0x140014,0x140014,0x140014,0x140014,0x140014,0x18100000,0x18100000,0x18100000,0x18100000,0x18100000, -0x18100000,0x10100000,0x10100000,0x10100000,0xC100001,0x200012,0x200012,0x200012,0x200012,0x200012,0x200012,0x10080001,0x10080001,0x10080001,0xC0C0001,0x3C0012,0x3C0012,0x3C0012,0xC000002,0xA000012,0x60100000,0x140014,0x140014,0x30100000,0x24100000,0x1C100000,0x1C100000,0x16100000,0x48080000,0x2A0C0000,0x12100001,0x10080001, -0x2C0012,}; -static const uint32_t g_etc1_to_bc7_m6_table3[] = { -0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,0x300000,0x300000,0x300000,0x300000,0x300000,0x300000,0x300000,0x300000,0x300000,0x300000,0x5C0000, -0x5C0000,0x5C0000,0x5C0000,0xE000001,0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,0x8200000,0x8200000,0x8200000,0x300000,0x400000,0x2C0000,0x2C0000,0x2C0000,0x2C0000,0x2C0000,0x2C0000,0x2C0000,0x2C0000,0x2C0000,0x2C0000,0x400000,0x400000,0x400000,0x400000,0x400000, -0x400000,0x800000,0x800000,0x800000,0x14000001,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x800000,0x800000,0x800000,0x14000001,0x800000,0x800000,0x800000,0x14000001,0x14000001,0xE2C0000,0x2C0000,0x2C0000,0x340000,0x4340000,0x3C0000,0x3C0000,0x480000,0x340000,0x4340000,0x5C0000,0x800000, -0x5C0000,0x340000,0x340000,0x340000,0x340000,0x4C0000,0x4C0000,0x4C0000,0x980000,0x980000,0x18000001,0x4C0000,0x4C0000,0x4C0000,0x980000,0x980000,0x18000001,0x980000,0x980000,0x18000001,0x18000001,0x4C0000,0x4C0000,0x4C0000,0x980000,0x980000,0x18000001,0x980000,0x980000,0x18000001,0x18000001,0x980000, -0x980000,0x18000001,0x18000001,0x18000001,0x3C0000,0x380000,0x340000,0x2440000,0x2540000,0x6C0000,0x7C0000,0xBC0000,0x400000,0x4C0000,0x6C0000,0x18000001,0x6C0000,0x400000,0x25C0000,0xBC0000,0x1E000001,0x25C0000,0xBC0000,0x1E000001,0xBC0000,0x1E000001,0x1E000001,0x25C0000,0xBC0000,0x1E000001,0xBC0000,0x1E000001, -0x1E000001,0xBC0000,0x1E000001,0x1E000001,0x1E000001,0x25C0000,0xBC0000,0x1E000001,0xBC0000,0x1E000001,0x1E000001,0xBC0000,0x1E000001,0x1E000001,0x1E000001,0xBC0000,0x1E000001,0x1E000001,0x1E000001,0x1E000001,0x500000,0x440000,0x440000,0x6C0000,0x9C0000,0x1300000,0x1E000001,0x1E000001,0x2540000,0x780000,0x11F40000,0x1E000001, -0x880000,0x300088,0x322C0034,0x242C0034,0x1E2C0035,0x2E280026,0x24280015,0x1E280019,0x20280026,0x1E240016,0x1C240026,0x30200033,0x26200009,0x2024000F,0x22200012,0x1E200002,0x1C200016,0x20200033,0x1E1C000F,0x1C1C001A,0x1A200033,0x2440088,0x2A140033,0x1E200034,0x24140026,0x20180013,0x1C1C0024,0x240C0033,0x1E14000A,0x1C100013,0x1A140033,0x8C0088, -0x1E000034,0x1C000024,0x1A000037,0x1600008C,0x58200002,0x9C280026,0xAE2C0034,0x36200001,0x28200002,0x22200002,0x20200002,0x1E200002,0x52180001,0x321C0001,0x201C0009,0x1C100013,0x640088,0x340034,0x2E300008,0x22300009,0x1E300009,0x2A2C0012,0x222C0001,0x202C0001,0x202C0012,0x1E2C0005,0x1C2C0012,0x500033,0x24240009,0x1E280009,0x22200012,0x1E200002, -0x1C240012,0xA00033,0x1E140009,0x1C100012,0x1A000033,0x500033,0x24240009,0x1E280009,0x22200012,0x1E200002,0x1C240012,0xA00033,0x1E140009,0x1C100012,0x1A000033,0xA00033,0x1E140009,0x1C100012,0x1A000033,0x1A000033,0x54240001,0x7E2C0012,0x90300008,0x30240001,0x28200002,0x22200002,0x1E240002,0x1E1C0002,0x52180001,0x2E200001,0x201C0008,0x1C100012, -0x700033,0x2C0034,0x2C0034,0x2C0034,0x2C0034,0x24280014,0x24280014,0x24280014,0x1C280014,0x1C280014,0x18240015,0x26200008,0x26200008,0x26200008,0x1E200001,0x1E200001,0x1A200005,0x1A20000A,0x1A20000A,0x18200001,0x1620000A,0x23C0033,0x23C0033,0x23C0033,0x20180012,0x20180012,0x18200013,0x1E140009,0x1E140009,0x18180002,0x1618000A,0x7C0033, -0x7C0033,0x180C0013,0x1604000A,0x14000033,0x58200001,0x6C280014,0x2C0034,0x34200001,0x28200001,0x22200001,0x20200001,0x1C200001,0x50180000,0x321C0000,0x1E200009,0x18180002,0x580033,0x300008,0x300008,0x300008,0x300008,0x202C0000,0x202C0000,0x202C0000,0x1A2C0001,0x1A2C0001,0x182C0001,0x2440008,0x2440008,0x2440008,0x1A280001,0x1A280001, -0x18280001,0x8C0008,0x8C0008,0x18200001,0x1600000A,0x2440008,0x2440008,0x2440008,0x1A280001,0x1A280001,0x18280001,0x8C0008,0x8C0008,0x18200001,0x1600000A,0x8C0008,0x8C0008,0x18200001,0x1600000A,0x1600000A,0x4A240000,0x4E2C0000,0x300008,0x2E240000,0x24240000,0x20240000,0x1C280001,0x1C240000,0x461C0000,0x2C200000,0x640008,0x18200001, -0x640008,0x380014,0x2A340000,0x22340000,0x1E340001,0x540012,0x222C0001,0x1E300001,0xAC0012,0x1E200001,0x1C000012,0x540012,0x222C0001,0x1E300001,0xAC0012,0x1E200001,0x1C000012,0xAC0012,0x1E200001,0x1C000012,0x1C000012,0x540012,0x222C0001,0x1E300001,0xAC0012,0x1E200001,0x1C000012,0xAC0012,0x1E200001,0x1C000012,0x1C000012,0xAC0012, -0x1E200001,0x1C000012,0x1C000012,0x1C000012,0x641C0000,0x63C0012,0x72340000,0x36200000,0x28200001,0x241C0000,0x1E240001,0x1E180001,0x5A140000,0x36180000,0x20240000,0x1C000012,0x780012,0x240014,0x240014,0x240014,0x240014,0x240014,0x240014,0x240014,0x240014,0x240014,0x240014,0x20200000,0x20200000,0x20200000,0x20200000,0x20200000, -0x20200000,0x18200000,0x18200000,0x18200000,0x14200001,0x380012,0x380012,0x380012,0x380012,0x380012,0x380012,0x18180001,0x18180001,0x18180001,0x141C0001,0x700012,0x700012,0x700012,0x140C0001,0x12000012,0x68200000,0x240014,0x240014,0x38200000,0x2C200000,0x24200000,0x24200000,0x1E200000,0x50180000,0x321C0000,0x1A200001,0x18180001, -0x500012,}; -static const uint32_t g_etc1_to_bc7_m6_table4[] = { -0x300001,0x300001,0x300001,0x300001,0x300001,0x300001,0x300001,0x300001,0x300001,0x300001,0x300001,0x300001,0x300001,0x300001,0x300001,0x300001,0x300001,0x300001,0x300001,0x300001,0x480000,0x480000,0x480000,0x480000,0x480000,0x480000,0x480000,0x480000,0x480000,0x480000,0x940000, -0x940000,0x940000,0x940000,0x18000000,0x300001,0x300001,0x300001,0x300001,0x300001,0x300001,0x300001,0x300001,0x2340000,0x2340000,0x2340000,0x480000,0x680000,0x3C0001,0x3C0001,0x3C0001,0x3C0001,0x3C0001,0x3C0001,0x3C0001,0x3C0001,0x3C0001,0x3C0001,0x5C0000,0x5C0000,0x5C0000,0x5C0000,0x5C0000, -0x5C0000,0xB80000,0xB80000,0xB80000,0x1E000000,0x5C0000,0x5C0000,0x5C0000,0x5C0000,0x5C0000,0x5C0000,0xB80000,0xB80000,0xB80000,0x1E000000,0xB80000,0xB80000,0xB80000,0x1E000000,0x1E000000,0x8400000,0x3C0001,0x3C0001,0x480000,0x24C0000,0x540000,0x540000,0x680000,0x480000,0x24C0000,0x800000,0xB80000, -0x800000,0x440001,0x440001,0x440001,0x440001,0x680000,0x680000,0x680000,0xD00000,0xD00000,0x22000000,0x680000,0x680000,0x680000,0xD00000,0xD00000,0x22000000,0xD00000,0xD00000,0x22000000,0x22000000,0x680000,0x680000,0x680000,0xD00000,0xD00000,0x22000000,0xD00000,0xD00000,0x22000000,0x22000000,0xD00000, -0xD00000,0x22000000,0x22000000,0x22000000,0x500000,0xC480000,0x440001,0x25C0000,0x740000,0x940000,0xA80000,0x1000000,0x580000,0x680000,0x940000,0x22000000,0x940000,0x500001,0x780000,0xF40000,0x28000000,0x780000,0xF40000,0x28000000,0xF40000,0x28000000,0x28000000,0x780000,0xF40000,0x28000000,0xF40000,0x28000000, -0x28000000,0xF40000,0x28000000,0x28000000,0x28000000,0x780000,0xF40000,0x28000000,0xF40000,0x28000000,0x28000000,0xF40000,0x28000000,0x28000000,0x28000000,0xF40000,0x28000000,0x28000000,0x28000000,0x28000000,0x4640000,0x580000,0x580000,0x880000,0xC80000,0x1880000,0x28000000,0x28000000,0x700000,0x980000,0x1BE80000,0x28000000, -0xAC0000,0x40008C,0x3E3C0033,0x2E3C0033,0x283C0033,0x38380024,0x2E380013,0x2A38001A,0x2A380024,0x26380016,0x24380026,0x36340034,0x2E34000A,0x2A34000F,0x2C300013,0x28300002,0x24340016,0x28340034,0x2630000F,0x24300019,0x22300035,0x600088,0x32280033,0x28300033,0x2C280026,0x282C0012,0x24300026,0x2E1C0033,0x28200009,0x24240015,0x22280034,0xC40088, -0x280C0033,0x24140026,0x22080034,0x20000088,0x62340002,0xB4380024,0xC63C0033,0x3C340002,0x30340002,0x2A340002,0x28340002,0x28300002,0x5E280001,0x3E2C0001,0x28300009,0x24240015,0x8C0088,0x480033,0x3644000A,0x2C40000A,0x2840000A,0x30400013,0x2C3C0002,0x28400001,0x28400013,0x283C0005,0x243C0015,0x2680033,0x2E340009,0x2838000A,0x2C300012,0x28300001, -0x24380014,0xD80033,0x28200008,0x24240014,0x22000034,0x2680033,0x2E340009,0x2838000A,0x2C300012,0x28300001,0x24380014,0xD80033,0x28200008,0x24240014,0x22000034,0xD80033,0x28200008,0x24240014,0x22000034,0x22000034,0x62340001,0x78400013,0x8A44000A,0x3C340001,0x30340001,0x2A340001,0x28340001,0x28300001,0x5E280001,0x3A300001,0x28300009,0x24240014, -0x980033,0x3C0033,0x3C0033,0x3C0033,0x3C0033,0x30380012,0x30380012,0x30380012,0x26380012,0x26380012,0x22380012,0x2E340009,0x2E340009,0x2E340009,0x26340002,0x26340002,0x22340005,0x24300009,0x24300009,0x22300001,0x20300009,0x580033,0x580033,0x580033,0x282C0012,0x282C0012,0x22300012,0x26280009,0x26280009,0x22280001,0x20280009,0xB00033, -0xB00033,0x221C0012,0x20100008,0x1E000034,0x56340002,0x84380012,0x3C0033,0x3A340001,0x30340001,0x2A340001,0x28340002,0x26300002,0x5E280000,0x38300001,0x28300008,0x22280001,0x7C0033,0x40000A,0x40000A,0x40000A,0x40000A,0x28400001,0x28400001,0x28400001,0x243C0001,0x243C0001,0x223C0001,0x600008,0x600008,0x600008,0x24380001,0x24380001, -0x22380001,0xC40008,0xC40008,0x222C0000,0x20000008,0x600008,0x600008,0x600008,0x24380001,0x24380001,0x22380001,0xC40008,0xC40008,0x222C0000,0x20000008,0xC40008,0xC40008,0x222C0000,0x20000008,0x20000008,0x4A380000,0x48400001,0x40000A,0x3A340000,0x2C380000,0x28380000,0x26380000,0x24380001,0x4C300000,0x34340000,0x8C0008,0x222C0000, -0x8C0008,0x4C0012,0x32480001,0x2A480001,0x28440001,0x700012,0x2C3C0001,0x28400000,0xE40012,0x282C0000,0x24000014,0x700012,0x2C3C0001,0x28400000,0xE40012,0x282C0000,0x24000014,0xE40012,0x282C0000,0x24000014,0x24000014,0x700012,0x2C3C0001,0x28400000,0xE40012,0x282C0000,0x24000014,0xE40012,0x282C0000,0x24000014,0x24000014,0xE40012, -0x282C0000,0x24000014,0x24000014,0x24000014,0x722C0000,0x500012,0x6C480001,0x40300000,0x30340001,0x2C300000,0x28340000,0x28240000,0x66240000,0x3E2C0000,0x28380001,0x24000014,0xA00012,0x380012,0x380012,0x380012,0x380012,0x380012,0x380012,0x380012,0x380012,0x380012,0x380012,0x28340001,0x28340001,0x28340001,0x28340001,0x28340001, -0x28340001,0x20340001,0x20340001,0x20340001,0x1E300001,0x2500012,0x2500012,0x2500012,0x2500012,0x2500012,0x2500012,0x22280001,0x22280001,0x22280001,0x1E2C0000,0xA40012,0xA40012,0xA40012,0x1E180000,0x1A000014,0x62340001,0x380012,0x380012,0x3A340001,0x30340001,0x2A340001,0x2A340001,0x26340001,0x5E280000,0x402C0000,0x24300000,0x22280001, -0x740012,}; -static const uint32_t g_etc1_to_bc7_m6_table5[] = { -0x400001,0x400001,0x400001,0x400001,0x400001,0x400001,0x400001,0x400001,0x400001,0x400001,0x400001,0x400001,0x400001,0x400001,0x400001,0x400001,0x400001,0x400001,0x400001,0x400001,0x600000,0x600000,0x600000,0x600000,0x600000,0x600000,0x600000,0x600000,0x600000,0x600000,0xC40000, -0xC40000,0xC40000,0xC40000,0x20000000,0x400001,0x400001,0x400001,0x400001,0x400001,0x400001,0x400001,0x400001,0xA440000,0xA440000,0xA440000,0x600000,0x8C0000,0x4C0001,0x4C0001,0x4C0001,0x4C0001,0x4C0001,0x4C0001,0x4C0001,0x4C0001,0x4C0001,0x4C0001,0x740000,0x740000,0x740000,0x740000,0x740000, -0x740000,0xE80000,0xE80000,0xE80000,0x26000000,0x740000,0x740000,0x740000,0x740000,0x740000,0x740000,0xE80000,0xE80000,0xE80000,0x26000000,0xE80000,0xE80000,0xE80000,0x26000000,0x26000000,0x540000,0x4C0001,0x4C0001,0x4580000,0x2600000,0x2680000,0x2680000,0x2800000,0x4580000,0x2600000,0xA40000,0xE80000, -0xA40000,0x540001,0x540001,0x540001,0x540001,0x800000,0x800000,0x800000,0x1000000,0x1000000,0x2A000000,0x800000,0x800000,0x800000,0x1000000,0x1000000,0x2A000000,0x1000000,0x1000000,0x2A000000,0x2A000000,0x800000,0x800000,0x800000,0x1000000,0x1000000,0x2A000000,0x1000000,0x1000000,0x2A000000,0x2A000000,0x1000000, -0x1000000,0x2A000000,0x2A000000,0x2A000000,0x640000,0x5C0000,0x540001,0x740000,0x900000,0xB40000,0xD00000,0x13C0000,0x6C0000,0x800000,0xB40000,0x2A000000,0xB40000,0x600001,0x900000,0x1240000,0x30000000,0x900000,0x1240000,0x30000000,0x1240000,0x30000000,0x30000000,0x900000,0x1240000,0x30000000,0x1240000,0x30000000, -0x30000000,0x1240000,0x30000000,0x30000000,0x30000000,0x900000,0x1240000,0x30000000,0x1240000,0x30000000,0x30000000,0x1240000,0x30000000,0x30000000,0x30000000,0x1240000,0x30000000,0x30000000,0x30000000,0x30000000,0x4780000,0x680000,0x680000,0xA40000,0xEC0000,0x1D80000,0x30000000,0x30000000,0x840000,0xB80000,0x23F80000,0x30000000, -0xD00000,0x50008C,0x464C0033,0x364C0033,0x304C0033,0x40480024,0x36480013,0x3248001A,0x32480024,0x2E480016,0x2C480026,0x3E440034,0x3644000A,0x3244000F,0x34400013,0x30400002,0x2C440016,0x30440034,0x2E40000F,0x2C400019,0x2A400035,0x780088,0x3A380033,0x30400033,0x34380026,0x303C0012,0x2C400026,0x362C0033,0x30300009,0x2C340015,0x2A380034,0xF40088, -0x301C0033,0x2C240026,0x2A180034,0x28000088,0x6A440002,0xBC480024,0xCE4C0033,0x44440002,0x38440002,0x32440002,0x30440002,0x30400002,0x66380001,0x463C0001,0x30400009,0x2C340015,0xAC0088,0x580033,0x3E54000A,0x3450000A,0x3050000A,0x38500013,0x344C0002,0x30500001,0x30500013,0x304C0005,0x2C4C0015,0x2800033,0x36440009,0x3048000A,0x34400012,0x30400001, -0x2C480014,0x1080033,0x30300008,0x2C340014,0x2A000034,0x2800033,0x36440009,0x3048000A,0x34400012,0x30400001,0x2C480014,0x1080033,0x30300008,0x2C340014,0x2A000034,0x1080033,0x30300008,0x2C340014,0x2A000034,0x2A000034,0x6A440001,0x80500013,0x9254000A,0x44440001,0x38440001,0x32440001,0x30440001,0x30400001,0x66380001,0x42400001,0x30400009,0x2C340014, -0xB80033,0x4C0033,0x4C0033,0x4C0033,0x4C0033,0x38480012,0x38480012,0x38480012,0x2E480012,0x2E480012,0x2A480012,0x36440009,0x36440009,0x36440009,0x2E440002,0x2E440002,0x2A440005,0x2C400009,0x2C400009,0x2A400001,0x28400009,0x700033,0x700033,0x700033,0x303C0012,0x303C0012,0x2A400012,0x2E380009,0x2E380009,0x2A380001,0x28380009,0xE40033, -0xE40033,0x2A2C0012,0x28200008,0x26000034,0x5E440002,0x8C480012,0x4C0033,0x42440001,0x38440001,0x32440001,0x30440002,0x2E400002,0x66380000,0x40400001,0x30400008,0x2A380001,0xA00033,0x50000A,0x50000A,0x50000A,0x50000A,0x30500001,0x30500001,0x30500001,0x2C4C0001,0x2C4C0001,0x2A4C0001,0x780008,0x780008,0x780008,0x2C480001,0x2C480001, -0x2A480001,0xF40008,0xF40008,0x2A3C0000,0x28000008,0x780008,0x780008,0x780008,0x2C480001,0x2C480001,0x2A480001,0xF40008,0xF40008,0x2A3C0000,0x28000008,0xF40008,0xF40008,0x2A3C0000,0x28000008,0x28000008,0x52480000,0x50500001,0x50000A,0x42440000,0x34480000,0x30480000,0x2E480000,0x2C480001,0x54400000,0x3C440000,0xAC0008,0x2A3C0000, -0xAC0008,0x5C0012,0x3A580001,0x32580001,0x30540001,0x880012,0x344C0001,0x30500000,0x1140012,0x303C0000,0x2C000014,0x880012,0x344C0001,0x30500000,0x1140012,0x303C0000,0x2C000014,0x1140012,0x303C0000,0x2C000014,0x2C000014,0x880012,0x344C0001,0x30500000,0x1140012,0x303C0000,0x2C000014,0x1140012,0x303C0000,0x2C000014,0x2C000014,0x1140012, -0x303C0000,0x2C000014,0x2C000014,0x2C000014,0x7A3C0000,0x8600012,0x74580001,0x48400000,0x38440001,0x34400000,0x30440000,0x30340000,0x6E340000,0x463C0000,0x30480001,0x2C000014,0xC00012,0x480012,0x480012,0x480012,0x480012,0x480012,0x480012,0x480012,0x480012,0x480012,0x480012,0x30440001,0x30440001,0x30440001,0x30440001,0x30440001, -0x30440001,0x28440001,0x28440001,0x28440001,0x26400001,0x2680012,0x2680012,0x2680012,0x2680012,0x2680012,0x2680012,0x2A380001,0x2A380001,0x2A380001,0x263C0000,0xD80012,0xD80012,0xD80012,0x26280000,0x22000014,0x6A440001,0x480012,0x480012,0x42440001,0x38440001,0x32440001,0x32440001,0x2E440001,0x66380000,0x483C0000,0x2C400000,0x2A380001, -0x980012,}; -static const uint32_t g_etc1_to_bc7_m6_table6[] = { -0x500001,0x500001,0x500001,0x500001,0x500001,0x500001,0x500001,0x500001,0x500001,0x500001,0x500001,0x500001,0x500001,0x500001,0x500001,0x500001,0x500001,0x500001,0x500001,0x500001,0x780000,0x780000,0x780000,0x780000,0x780000,0x780000,0x780000,0x780000,0x780000,0x780000,0xF40000, -0xF40000,0xF40000,0xF40000,0x28000000,0x500001,0x500001,0x500001,0x500001,0x500001,0x500001,0x500001,0x500001,0x580000,0x580000,0x580000,0x780000,0xAC0000,0x5C0001,0x5C0001,0x5C0001,0x5C0001,0x5C0001,0x5C0001,0x5C0001,0x5C0001,0x5C0001,0x5C0001,0x8C0000,0x8C0000,0x8C0000,0x8C0000,0x8C0000, -0x8C0000,0x1180000,0x1180000,0x1180000,0x2E000000,0x8C0000,0x8C0000,0x8C0000,0x8C0000,0x8C0000,0x8C0000,0x1180000,0x1180000,0x1180000,0x2E000000,0x1180000,0x1180000,0x1180000,0x2E000000,0x2E000000,0x640000,0x5C0001,0x5C0001,0x6C0000,0x2740000,0x800000,0x800000,0x9C0000,0x6C0000,0x2740000,0xC80000,0x1180000, -0xC80000,0x640001,0x640001,0x640001,0x640001,0x980000,0x980000,0x980000,0x1300000,0x1300000,0x32000000,0x980000,0x980000,0x980000,0x1300000,0x1300000,0x32000000,0x1300000,0x1300000,0x32000000,0x32000000,0x980000,0x980000,0x980000,0x1300000,0x1300000,0x32000000,0x1300000,0x1300000,0x32000000,0x32000000,0x1300000, -0x1300000,0x32000000,0x32000000,0x32000000,0x4740000,0x6C0000,0x640001,0x2880000,0xAC0000,0xD80000,0xF80000,0x1780000,0x800000,0x980000,0xD80000,0x32000000,0xD80000,0x700001,0xA80000,0x1580000,0x38000000,0xA80000,0x1580000,0x38000000,0x1580000,0x38000000,0x38000000,0xA80000,0x1580000,0x38000000,0x1580000,0x38000000, -0x38000000,0x1580000,0x38000000,0x38000000,0x38000000,0xA80000,0x1580000,0x38000000,0x1580000,0x38000000,0x38000000,0x1580000,0x38000000,0x38000000,0x38000000,0x1580000,0x38000000,0x38000000,0x38000000,0x38000000,0x48C0000,0x4780000,0x4780000,0xC00000,0x1140000,0x7F80000,0x38000000,0x38000000,0x2980000,0xD40000,0x2DCC0000,0x38000000, -0xF00000,0x60008C,0x4E5C0033,0x3E5C0033,0x385C0033,0x48580024,0x3E580013,0x3A58001A,0x3A580024,0x36580016,0x34580026,0x46540034,0x3E54000A,0x3A54000F,0x3C500013,0x38500002,0x34540016,0x38540034,0x3650000F,0x34500019,0x32500035,0x900088,0x42480033,0x38500033,0x3C480026,0x384C0012,0x34500026,0x3E3C0033,0x38400009,0x34440015,0x32480034,0x1240088, -0x382C0033,0x34340026,0x32280034,0x30000088,0x72540002,0xC4580024,0xD65C0033,0x4C540002,0x40540002,0x3A540002,0x38540002,0x38500002,0x6E480001,0x4E4C0001,0x38500009,0x34440015,0xD00088,0x680033,0x4664000A,0x3C60000A,0x3860000A,0x40600013,0x3C5C0002,0x38600001,0x38600013,0x385C0005,0x345C0015,0x2980033,0x3E540009,0x3858000A,0x3C500012,0x38500001, -0x34580014,0x1380033,0x38400008,0x34440014,0x32000034,0x2980033,0x3E540009,0x3858000A,0x3C500012,0x38500001,0x34580014,0x1380033,0x38400008,0x34440014,0x32000034,0x1380033,0x38400008,0x34440014,0x32000034,0x32000034,0x72540001,0x88600013,0x9A64000A,0x4C540001,0x40540001,0x3A540001,0x38540001,0x38500001,0x6E480001,0x4A500001,0x38500009,0x34440014, -0xDC0033,0x5C0033,0x5C0033,0x5C0033,0x5C0033,0x40580012,0x40580012,0x40580012,0x36580012,0x36580012,0x32580012,0x3E540009,0x3E540009,0x3E540009,0x36540002,0x36540002,0x32540005,0x34500009,0x34500009,0x32500001,0x30500009,0x880033,0x880033,0x880033,0x384C0012,0x384C0012,0x32500012,0x36480009,0x36480009,0x32480001,0x30480009,0x1140033, -0x1140033,0x323C0012,0x30300008,0x2E000034,0x66540002,0x94580012,0x5C0033,0x4A540001,0x40540001,0x3A540001,0x38540002,0x36500002,0x6E480000,0x48500001,0x38500008,0x32480001,0xC00033,0x60000A,0x60000A,0x60000A,0x60000A,0x38600001,0x38600001,0x38600001,0x345C0001,0x345C0001,0x325C0001,0x900008,0x900008,0x900008,0x34580001,0x34580001, -0x32580001,0x1240008,0x1240008,0x324C0000,0x30000008,0x900008,0x900008,0x900008,0x34580001,0x34580001,0x32580001,0x1240008,0x1240008,0x324C0000,0x30000008,0x1240008,0x1240008,0x324C0000,0x30000008,0x30000008,0x5A580000,0x58600001,0x60000A,0x4A540000,0x3C580000,0x38580000,0x36580000,0x34580001,0x5C500000,0x44540000,0xD00008,0x324C0000, -0xD00008,0x6C0012,0x42680001,0x3A680001,0x38640001,0xA00012,0x3C5C0001,0x38600000,0x1440012,0x384C0000,0x34000014,0xA00012,0x3C5C0001,0x38600000,0x1440012,0x384C0000,0x34000014,0x1440012,0x384C0000,0x34000014,0x34000014,0xA00012,0x3C5C0001,0x38600000,0x1440012,0x384C0000,0x34000014,0x1440012,0x384C0000,0x34000014,0x34000014,0x1440012, -0x384C0000,0x34000014,0x34000014,0x34000014,0x824C0000,0x740012,0x7C680001,0x50500000,0x40540001,0x3C500000,0x38540000,0x38440000,0x76440000,0x4E4C0000,0x38580001,0x34000014,0xE40012,0x580012,0x580012,0x580012,0x580012,0x580012,0x580012,0x580012,0x580012,0x580012,0x580012,0x38540001,0x38540001,0x38540001,0x38540001,0x38540001, -0x38540001,0x30540001,0x30540001,0x30540001,0x2E500001,0x2800012,0x2800012,0x2800012,0x2800012,0x2800012,0x2800012,0x32480001,0x32480001,0x32480001,0x2E4C0000,0x1080012,0x1080012,0x1080012,0x2E380000,0x2A000014,0x72540001,0x580012,0x580012,0x4A540001,0x40540001,0x3A540001,0x3A540001,0x36540001,0x6E480000,0x504C0000,0x34500000,0x32480001, -0xB80012,}; -static const uint32_t g_etc1_to_bc7_m6_table7[] = { -0x600001,0x600001,0x600001,0x600001,0x600001,0x600001,0x600001,0x600001,0x600001,0x600001,0x600001,0x600001,0x600001,0x600001,0x600001,0x600001,0x600001,0x600001,0x600001,0x600001,0x900000,0x900000,0x900000,0x900000,0x900000,0x900000,0x900000,0x900000,0x900000,0x900000,0x1240000, -0x1240000,0x1240000,0x1240000,0x30000000,0x600001,0x600001,0x600001,0x600001,0x600001,0x600001,0x600001,0x600001,0x680000,0x680000,0x680000,0x900000,0xD00000,0x6C0001,0x6C0001,0x6C0001,0x6C0001,0x6C0001,0x6C0001,0x6C0001,0x6C0001,0x6C0001,0x6C0001,0xA40000,0xA40000,0xA40000,0xA40000,0xA40000, -0xA40000,0x14C0000,0x14C0000,0x14C0000,0x36000000,0xA40000,0xA40000,0xA40000,0xA40000,0xA40000,0xA40000,0x14C0000,0x14C0000,0x14C0000,0x36000000,0x14C0000,0x14C0000,0x14C0000,0x36000000,0x36000000,0x2740000,0x6C0001,0x6C0001,0x800000,0x2880000,0x940000,0x940000,0xB80000,0x800000,0x2880000,0xE80000,0x14C0000, -0xE80000,0x740001,0x740001,0x740001,0x740001,0xB00000,0xB00000,0xB00000,0x1640000,0x1640000,0x3A000000,0xB00000,0xB00000,0xB00000,0x1640000,0x1640000,0x3A000000,0x1640000,0x1640000,0x3A000000,0x3A000000,0xB00000,0xB00000,0xB00000,0x1640000,0x1640000,0x3A000000,0x1640000,0x1640000,0x3A000000,0x3A000000,0x1640000, -0x1640000,0x3A000000,0x3A000000,0x3A000000,0x880000,0x67C0000,0x740001,0xA00000,0xC40000,0xF80000,0x1200000,0x1B40000,0x940000,0xB00000,0xF80000,0x3A000000,0xF80000,0x800001,0xC00000,0x1880000,0x40000000,0xC00000,0x1880000,0x40000000,0x1880000,0x40000000,0x40000000,0xC00000,0x1880000,0x40000000,0x1880000,0x40000000, -0x40000000,0x1880000,0x40000000,0x40000000,0x40000000,0xC00000,0x1880000,0x40000000,0x1880000,0x40000000,0x40000000,0x1880000,0x40000000,0x40000000,0x40000000,0x1880000,0x40000000,0x40000000,0x40000000,0x40000000,0x4A00000,0xC880000,0xC880000,0xD80000,0x13C0000,0x11F80000,0x40000000,0x40000000,0xB00000,0xF40000,0x35DC0000,0x40000000, -0x1140000,0x70008C,0x566C0033,0x466C0033,0x406C0033,0x50680024,0x46680013,0x4268001A,0x42680024,0x3E680016,0x3C680026,0x4E640034,0x4664000A,0x4264000F,0x44600013,0x40600002,0x3C640016,0x40640034,0x3E60000F,0x3C600019,0x3A600035,0xA80088,0x4A580033,0x40600033,0x44580026,0x405C0012,0x3C600026,0x464C0033,0x40500009,0x3C540015,0x3A580034,0x1580088, -0x403C0033,0x3C440026,0x3A380034,0x38000088,0x7A640002,0xCC680024,0xDE6C0033,0x54640002,0x48640002,0x42640002,0x40640002,0x40600002,0x76580001,0x565C0001,0x40600009,0x3C540015,0xF00088,0x780033,0x4E74000A,0x4470000A,0x4070000A,0x48700013,0x446C0002,0x40700001,0x40700013,0x406C0005,0x3C6C0015,0x2B00033,0x46640009,0x4068000A,0x44600012,0x40600001, -0x3C680014,0x1680033,0x40500008,0x3C540014,0x3A000034,0x2B00033,0x46640009,0x4068000A,0x44600012,0x40600001,0x3C680014,0x1680033,0x40500008,0x3C540014,0x3A000034,0x1680033,0x40500008,0x3C540014,0x3A000034,0x3A000034,0x7A640001,0x90700013,0xA274000A,0x54640001,0x48640001,0x42640001,0x40640001,0x40600001,0x76580001,0x52600001,0x40600009,0x3C540014, -0xFC0033,0x6C0033,0x6C0033,0x6C0033,0x6C0033,0x48680012,0x48680012,0x48680012,0x3E680012,0x3E680012,0x3A680012,0x46640009,0x46640009,0x46640009,0x3E640002,0x3E640002,0x3A640005,0x3C600009,0x3C600009,0x3A600001,0x38600009,0xA00033,0xA00033,0xA00033,0x405C0012,0x405C0012,0x3A600012,0x3E580009,0x3E580009,0x3A580001,0x38580009,0x1440033, -0x1440033,0x3A4C0012,0x38400008,0x36000034,0x6E640002,0x9C680012,0x6C0033,0x52640001,0x48640001,0x42640001,0x40640002,0x3E600002,0x76580000,0x50600001,0x40600008,0x3A580001,0xE40033,0x70000A,0x70000A,0x70000A,0x70000A,0x40700001,0x40700001,0x40700001,0x3C6C0001,0x3C6C0001,0x3A6C0001,0xA80008,0xA80008,0xA80008,0x3C680001,0x3C680001, -0x3A680001,0x1580008,0x1580008,0x3A5C0000,0x38000008,0xA80008,0xA80008,0xA80008,0x3C680001,0x3C680001,0x3A680001,0x1580008,0x1580008,0x3A5C0000,0x38000008,0x1580008,0x1580008,0x3A5C0000,0x38000008,0x38000008,0x62680000,0x60700001,0x70000A,0x52640000,0x44680000,0x40680000,0x3E680000,0x3C680001,0x64600000,0x4C640000,0xF00008,0x3A5C0000, -0xF00008,0x7C0012,0x4A780001,0x42780001,0x40740001,0xB80012,0x446C0001,0x40700000,0x1740012,0x405C0000,0x3C000014,0xB80012,0x446C0001,0x40700000,0x1740012,0x405C0000,0x3C000014,0x1740012,0x405C0000,0x3C000014,0x3C000014,0xB80012,0x446C0001,0x40700000,0x1740012,0x405C0000,0x3C000014,0x1740012,0x405C0000,0x3C000014,0x3C000014,0x1740012, -0x405C0000,0x3C000014,0x3C000014,0x3C000014,0x8A5C0000,0x840012,0x84780001,0x58600000,0x48640001,0x44600000,0x40640000,0x40540000,0x7E540000,0x565C0000,0x40680001,0x3C000014,0x1080012,0x680012,0x680012,0x680012,0x680012,0x680012,0x680012,0x680012,0x680012,0x680012,0x680012,0x40640001,0x40640001,0x40640001,0x40640001,0x40640001, -0x40640001,0x38640001,0x38640001,0x38640001,0x36600001,0x2980012,0x2980012,0x2980012,0x2980012,0x2980012,0x2980012,0x3A580001,0x3A580001,0x3A580001,0x365C0000,0x1380012,0x1380012,0x1380012,0x36480000,0x32000014,0x7A640001,0x680012,0x680012,0x52640001,0x48640001,0x42640001,0x42640001,0x3E640001,0x76580000,0x585C0000,0x3C600000,0x3A580001, -0xDC0012,}; -static const uint32_t g_etc1_to_bc7_m6_table8[] = { -0x740000,0x740000,0x740000,0x740000,0x740000,0x740000,0x740000,0x740000,0x740000,0x740000,0x740000,0x740000,0x740000,0x740000,0x740000,0x740000,0x740000,0x740000,0x740000,0x740000,0xAC0000,0xAC0000,0xAC0000,0xAC0000,0xAC0000,0xAC0000,0xAC0000,0xAC0000,0xAC0000,0xAC0000,0x15C0000, -0x15C0000,0x15C0000,0x15C0000,0x38000001,0x740000,0x740000,0x740000,0x740000,0x740000,0x740000,0x740000,0x740000,0x7C0000,0x7C0000,0x7C0000,0xAC0000,0xF40000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x2BC0000,0x2BC0000,0x2BC0000,0x2BC0000,0x2BC0000, -0x2BC0000,0x1800000,0x1800000,0x1800000,0x3E000001,0x2BC0000,0x2BC0000,0x2BC0000,0x2BC0000,0x2BC0000,0x2BC0000,0x1800000,0x1800000,0x1800000,0x3E000001,0x1800000,0x1800000,0x1800000,0x3E000001,0x3E000001,0x880000,0x800000,0x800000,0x940000,0xA00000,0x2AC0000,0x2AC0000,0x2D40000,0x940000,0xA00000,0x1100000,0x1800000, -0x1100000,0x880000,0x880000,0x880000,0x880000,0xC80000,0xC80000,0xC80000,0x1980000,0x1980000,0x42000001,0xC80000,0xC80000,0xC80000,0x1980000,0x1980000,0x42000001,0x1980000,0x1980000,0x42000001,0x42000001,0xC80000,0xC80000,0xC80000,0x1980000,0x1980000,0x42000001,0x1980000,0x1980000,0x42000001,0x42000001,0x1980000, -0x1980000,0x42000001,0x42000001,0x42000001,0x49C0000,0x900000,0x880000,0xB80000,0xE40000,0x1200000,0x14C0000,0x1F80000,0x2A80000,0xC80000,0x1200000,0x42000001,0x1200000,0x940000,0xDC0000,0x1BC0000,0x48000001,0xDC0000,0x1BC0000,0x48000001,0x1BC0000,0x48000001,0x48000001,0xDC0000,0x1BC0000,0x48000001,0x1BC0000,0x48000001, -0x48000001,0x1BC0000,0x48000001,0x48000001,0x48000001,0xDC0000,0x1BC0000,0x48000001,0x1BC0000,0x48000001,0x48000001,0x1BC0000,0x48000001,0x48000001,0x48000001,0x1BC0000,0x48000001,0x48000001,0x48000001,0x48000001,0xB80000,0x69C0000,0x69C0000,0xF80000,0x1680000,0x1DF40000,0x48000001,0x48000001,0xC80000,0x1140000,0x3FD00000,0x48000001, -0x1380000,0x840088,0x5C800034,0x4E800034,0x48800035,0x587C0026,0x4E7C0015,0x487C0019,0x4A7C0026,0x48780016,0x46780026,0x5A740033,0x50740009,0x4A78000F,0x4C740012,0x48740002,0x46740016,0x4A740033,0x4870000F,0x4670001A,0x44740033,0xC40088,0x54680033,0x48740034,0x4E680026,0x4A6C0013,0x46700024,0x4E600033,0x4868000A,0x46640013,0x44680033,0x18C0088, -0x48540034,0x46500024,0x44440033,0x4000008C,0x82740002,0xC67C0026,0xD8800034,0x60740001,0x52740002,0x4C740002,0x4A740002,0x48740002,0x7C6C0001,0x5C700001,0x4A700009,0x46640013,0x1180088,0x880034,0x58840008,0x4C840009,0x48840009,0x54800012,0x4C800001,0x4A800001,0x4A800012,0x48800005,0x46800012,0xCC0033,0x4E780009,0x487C0009,0x4C740012,0x48740002, -0x46780012,0x1A00033,0x48680009,0x46640012,0x44000033,0xCC0033,0x4E780009,0x487C0009,0x4C740012,0x48740002,0x46780012,0x1A00033,0x48680009,0x46640012,0x44000033,0x1A00033,0x48680009,0x46640012,0x44000033,0x44000033,0x7E780001,0xA8800012,0xBA840008,0x5A780001,0x52740002,0x4C740002,0x48780002,0x48700002,0x7C6C0001,0x58740001,0x4A700008,0x46640012, -0x1240033,0x800034,0x800034,0x800034,0x800034,0x4E7C0014,0x4E7C0014,0x4E7C0014,0x467C0014,0x467C0014,0x42780015,0x50740008,0x50740008,0x50740008,0x48740001,0x48740001,0x44740005,0x4474000A,0x4474000A,0x42740001,0x4074000A,0xBC0033,0xBC0033,0xBC0033,0x4A6C0012,0x4A6C0012,0x42740013,0x48680009,0x48680009,0x426C0002,0x406C000A,0x17C0033, -0x17C0033,0x42600013,0x4058000A,0x3E000033,0x82740001,0x967C0014,0x800034,0x5E740001,0x52740001,0x4C740001,0x4A740001,0x46740001,0x7A6C0000,0x5C700000,0x48740009,0x426C0002,0x10C0033,0x840008,0x840008,0x840008,0x840008,0x4A800000,0x4A800000,0x4A800000,0x44800001,0x44800001,0x42800001,0xC40008,0xC40008,0xC40008,0x447C0001,0x447C0001, -0x427C0001,0x18C0008,0x18C0008,0x42740001,0x4000000A,0xC40008,0xC40008,0xC40008,0x447C0001,0x447C0001,0x427C0001,0x18C0008,0x18C0008,0x42740001,0x4000000A,0x18C0008,0x18C0008,0x42740001,0x4000000A,0x4000000A,0x74780000,0x78800000,0x840008,0x58780000,0x4E780000,0x4A780000,0x467C0001,0x46780000,0x70700000,0x56740000,0x1180008,0x42740001, -0x1180008,0x8C0014,0x54880000,0x4C880000,0x48880001,0x2D00012,0x4C800001,0x48840001,0x1AC0012,0x48740001,0x46000012,0x2D00012,0x4C800001,0x48840001,0x1AC0012,0x48740001,0x46000012,0x1AC0012,0x48740001,0x46000012,0x46000012,0x2D00012,0x4C800001,0x48840001,0x1AC0012,0x48740001,0x46000012,0x1AC0012,0x48740001,0x46000012,0x46000012,0x1AC0012, -0x48740001,0x46000012,0x46000012,0x46000012,0x8E700000,0x980012,0x9C880000,0x60740000,0x52740001,0x4E700000,0x48780001,0x486C0001,0x84680000,0x606C0000,0x4A780000,0x46000012,0x12C0012,0x780014,0x780014,0x780014,0x780014,0x780014,0x780014,0x780014,0x780014,0x780014,0x780014,0x4A740000,0x4A740000,0x4A740000,0x4A740000,0x4A740000, -0x4A740000,0x42740000,0x42740000,0x42740000,0x3E740001,0xB40012,0xB40012,0xB40012,0xB40012,0xB40012,0xB40012,0x426C0001,0x426C0001,0x426C0001,0x3E700001,0x1700012,0x1700012,0x1700012,0x3E600001,0x3C000012,0x92740000,0x780014,0x780014,0x62740000,0x56740000,0x4E740000,0x4E740000,0x48740000,0x7A6C0000,0x5C700000,0x44740001,0x426C0001, -0x1000012,}; -static const uint32_t g_etc1_to_bc7_m6_table9[] = { -0x840000,0x840000,0x840000,0x840000,0x840000,0x840000,0x840000,0x840000,0x840000,0x840000,0x840000,0x840000,0x840000,0x840000,0x840000,0x840000,0x840000,0x840000,0x840000,0x840000,0xC40000,0xC40000,0xC40000,0xC40000,0xC40000,0xC40000,0xC40000,0xC40000,0xC40000,0xC40000,0x18C0000, -0x18C0000,0x18C0000,0x18C0000,0x40000001,0x840000,0x840000,0x840000,0x840000,0x840000,0x840000,0x840000,0x840000,0x8C0000,0x8C0000,0x8C0000,0xC40000,0x1180000,0x900000,0x900000,0x900000,0x900000,0x900000,0x900000,0x900000,0x900000,0x900000,0x900000,0xD40000,0xD40000,0xD40000,0xD40000,0xD40000, -0xD40000,0x1B00000,0x1B00000,0x1B00000,0x46000001,0xD40000,0xD40000,0xD40000,0xD40000,0xD40000,0xD40000,0x1B00000,0x1B00000,0x1B00000,0x46000001,0x1B00000,0x1B00000,0x1B00000,0x46000001,0x46000001,0x4980000,0x900000,0x900000,0xA80000,0xB40000,0xC40000,0xC40000,0xF00000,0xA80000,0xB40000,0x1300000,0x1B00000, -0x1300000,0x980000,0x980000,0x980000,0x980000,0xE00000,0xE00000,0xE00000,0x1CC0000,0x1CC0000,0x4A000001,0xE00000,0xE00000,0xE00000,0x1CC0000,0x1CC0000,0x4A000001,0x1CC0000,0x1CC0000,0x4A000001,0x4A000001,0xE00000,0xE00000,0xE00000,0x1CC0000,0x1CC0000,0x4A000001,0x1CC0000,0x1CC0000,0x4A000001,0x4A000001,0x1CC0000, -0x1CC0000,0x4A000001,0x4A000001,0x4A000001,0xB00000,0x8A00000,0x980000,0x2CC0000,0x1000000,0x1400000,0x1740000,0xBFC0000,0x2BC0000,0xE00000,0x1400000,0x4A000001,0x1400000,0xA40000,0xF40000,0x1F00000,0x50000001,0xF40000,0x1F00000,0x50000001,0x1F00000,0x50000001,0x50000001,0xF40000,0x1F00000,0x50000001,0x1F00000,0x50000001, -0x50000001,0x1F00000,0x50000001,0x50000001,0x50000001,0xF40000,0x1F00000,0x50000001,0x1F00000,0x50000001,0x50000001,0x1F00000,0x50000001,0x50000001,0x50000001,0x1F00000,0x50000001,0x50000001,0x50000001,0x50000001,0x2CC0000,0xEAC0000,0xEAC0000,0x1140000,0x1900000,0x27F40000,0x50000001,0x50000001,0x2DC0000,0x1340000,0x47E00000,0x50000001, -0x15C0000,0x940088,0x64900034,0x56900034,0x50900035,0x608C0026,0x568C0015,0x508C0019,0x528C0026,0x50880016,0x4E880026,0x62840033,0x58840009,0x5288000F,0x54840012,0x50840002,0x4E840016,0x52840033,0x5080000F,0x4E80001A,0x4C840033,0xDC0088,0x5C780033,0x50840034,0x56780026,0x527C0013,0x4E800024,0x56700033,0x5078000A,0x4E740013,0x4C780033,0x1BC0088, -0x50640034,0x4E600024,0x4C540033,0x4800008C,0x8A840002,0xCE8C0026,0xE0900034,0x68840001,0x5A840002,0x54840002,0x52840002,0x50840002,0x847C0001,0x64800001,0x52800009,0x4E740013,0x1380088,0x980034,0x60940008,0x54940009,0x50940009,0x5C900012,0x54900001,0x52900001,0x52900012,0x50900005,0x4E900012,0xE40033,0x56880009,0x508C0009,0x54840012,0x50840002, -0x4E880012,0x1D00033,0x50780009,0x4E740012,0x4C000033,0xE40033,0x56880009,0x508C0009,0x54840012,0x50840002,0x4E880012,0x1D00033,0x50780009,0x4E740012,0x4C000033,0x1D00033,0x50780009,0x4E740012,0x4C000033,0x4C000033,0x86880001,0xB0900012,0xC2940008,0x62880001,0x5A840002,0x54840002,0x50880002,0x50800002,0x847C0001,0x60840001,0x52800008,0x4E740012, -0x1480033,0x900034,0x900034,0x900034,0x900034,0x568C0014,0x568C0014,0x568C0014,0x4E8C0014,0x4E8C0014,0x4A880015,0x58840008,0x58840008,0x58840008,0x50840001,0x50840001,0x4C840005,0x4C84000A,0x4C84000A,0x4A840001,0x4884000A,0x2D00033,0x2D00033,0x2D00033,0x527C0012,0x527C0012,0x4A840013,0x50780009,0x50780009,0x4A7C0002,0x487C000A,0x1AC0033, -0x1AC0033,0x4A700013,0x4868000A,0x46000033,0x8A840001,0x9E8C0014,0x900034,0x66840001,0x5A840001,0x54840001,0x52840001,0x4E840001,0x827C0000,0x64800000,0x50840009,0x4A7C0002,0x12C0033,0x940008,0x940008,0x940008,0x940008,0x52900000,0x52900000,0x52900000,0x4C900001,0x4C900001,0x4A900001,0xDC0008,0xDC0008,0xDC0008,0x4C8C0001,0x4C8C0001, -0x4A8C0001,0x1BC0008,0x1BC0008,0x4A840001,0x4800000A,0xDC0008,0xDC0008,0xDC0008,0x4C8C0001,0x4C8C0001,0x4A8C0001,0x1BC0008,0x1BC0008,0x4A840001,0x4800000A,0x1BC0008,0x1BC0008,0x4A840001,0x4800000A,0x4800000A,0x7C880000,0x80900000,0x940008,0x60880000,0x56880000,0x52880000,0x4E8C0001,0x4E880000,0x78800000,0x5E840000,0x1380008,0x4A840001, -0x1380008,0x9C0014,0x5C980000,0x54980000,0x50980001,0x2E80012,0x54900001,0x50940001,0x1DC0012,0x50840001,0x4E000012,0x2E80012,0x54900001,0x50940001,0x1DC0012,0x50840001,0x4E000012,0x1DC0012,0x50840001,0x4E000012,0x4E000012,0x2E80012,0x54900001,0x50940001,0x1DC0012,0x50840001,0x4E000012,0x1DC0012,0x50840001,0x4E000012,0x4E000012,0x1DC0012, -0x50840001,0x4E000012,0x4E000012,0x4E000012,0x96800000,0xA80012,0xA4980000,0x68840000,0x5A840001,0x56800000,0x50880001,0x507C0001,0x8C780000,0x687C0000,0x52880000,0x4E000012,0x1500012,0x880014,0x880014,0x880014,0x880014,0x880014,0x880014,0x880014,0x880014,0x880014,0x880014,0x52840000,0x52840000,0x52840000,0x52840000,0x52840000, -0x52840000,0x4A840000,0x4A840000,0x4A840000,0x46840001,0xCC0012,0xCC0012,0xCC0012,0xCC0012,0xCC0012,0xCC0012,0x4A7C0001,0x4A7C0001,0x4A7C0001,0x46800001,0x1A00012,0x1A00012,0x1A00012,0x46700001,0x44000012,0x9A840000,0x880014,0x880014,0x6A840000,0x5E840000,0x56840000,0x56840000,0x50840000,0x827C0000,0x64800000,0x4C840001,0x4A7C0001, -0x1240012,}; -static const uint32_t g_etc1_to_bc7_m6_table10[] = { -0x940000,0x940000,0x940000,0x940000,0x940000,0x940000,0x940000,0x940000,0x940000,0x940000,0x940000,0x940000,0x940000,0x940000,0x940000,0x940000,0x940000,0x940000,0x940000,0x940000,0xDC0000,0xDC0000,0xDC0000,0xDC0000,0xDC0000,0xDC0000,0xDC0000,0xDC0000,0xDC0000,0xDC0000,0x1BC0000, -0x1BC0000,0x1BC0000,0x1BC0000,0x48000001,0x940000,0x940000,0x940000,0x940000,0x940000,0x940000,0x940000,0x940000,0x69C0000,0x69C0000,0x69C0000,0xDC0000,0x1380000,0xA00000,0xA00000,0xA00000,0xA00000,0xA00000,0xA00000,0xA00000,0xA00000,0xA00000,0xA00000,0xEC0000,0xEC0000,0xEC0000,0xEC0000,0xEC0000, -0xEC0000,0x1E40000,0x1E40000,0x1E40000,0x4E000001,0xEC0000,0xEC0000,0xEC0000,0xEC0000,0xEC0000,0xEC0000,0x1E40000,0x1E40000,0x1E40000,0x4E000001,0x1E40000,0x1E40000,0x1E40000,0x4E000001,0x4E000001,0xCA80000,0xA00000,0xA00000,0x4B80000,0xC80000,0xD80000,0xD80000,0x10C0000,0x4B80000,0xC80000,0x1540000,0x1E40000, -0x1540000,0xA80000,0xA80000,0xA80000,0xA80000,0xF80000,0xF80000,0xF80000,0x1FC0000,0x1FC0000,0x52000001,0xF80000,0xF80000,0xF80000,0x1FC0000,0x1FC0000,0x52000001,0x1FC0000,0x1FC0000,0x52000001,0x52000001,0xF80000,0xF80000,0xF80000,0x1FC0000,0x1FC0000,0x52000001,0x1FC0000,0x1FC0000,0x52000001,0x52000001,0x1FC0000, -0x1FC0000,0x52000001,0x52000001,0x52000001,0xC40000,0xB40000,0xA80000,0xE40000,0x1180000,0x1640000,0x19C0000,0x17F80000,0x4D00000,0xF80000,0x1640000,0x52000001,0x1640000,0xB40000,0x10C0000,0xBF80000,0x58000001,0x10C0000,0xBF80000,0x58000001,0xBF80000,0x58000001,0x58000001,0x10C0000,0xBF80000,0x58000001,0xBF80000,0x58000001, -0x58000001,0xBF80000,0x58000001,0x58000001,0x58000001,0x10C0000,0xBF80000,0x58000001,0xBF80000,0x58000001,0x58000001,0xBF80000,0x58000001,0x58000001,0x58000001,0xBF80000,0x58000001,0x58000001,0x58000001,0x58000001,0x2E00000,0xC00000,0xC00000,0x32C0000,0x1B80000,0x31F40000,0x58000001,0x58000001,0xF40000,0x1500000,0x4FF00000,0x58000001, -0x17C0000,0xA40088,0x6CA00034,0x5EA00034,0x58A00035,0x689C0026,0x5E9C0015,0x589C0019,0x5A9C0026,0x58980016,0x56980026,0x6A940033,0x60940009,0x5A98000F,0x5C940012,0x58940002,0x56940016,0x5A940033,0x5890000F,0x5690001A,0x54940033,0xF40088,0x64880033,0x58940034,0x5E880026,0x5A8C0013,0x56900024,0x5E800033,0x5888000A,0x56840013,0x54880033,0x1F00088, -0x58740034,0x56700024,0x54640033,0x5000008C,0x92940002,0xD69C0026,0xE8A00034,0x70940001,0x62940002,0x5C940002,0x5A940002,0x58940002,0x8C8C0001,0x6C900001,0x5A900009,0x56840013,0x15C0088,0xA80034,0x68A40008,0x5CA40009,0x58A40009,0x64A00012,0x5CA00001,0x5AA00001,0x5AA00012,0x58A00005,0x56A00012,0xFC0033,0x5E980009,0x589C0009,0x5C940012,0x58940002, -0x56980012,0x3F80033,0x58880009,0x56840012,0x54000033,0xFC0033,0x5E980009,0x589C0009,0x5C940012,0x58940002,0x56980012,0x3F80033,0x58880009,0x56840012,0x54000033,0x3F80033,0x58880009,0x56840012,0x54000033,0x54000033,0x8E980001,0xB8A00012,0xCAA40008,0x6A980001,0x62940002,0x5C940002,0x58980002,0x58900002,0x8C8C0001,0x68940001,0x5A900008,0x56840012, -0x1680033,0xA00034,0xA00034,0xA00034,0xA00034,0x5E9C0014,0x5E9C0014,0x5E9C0014,0x569C0014,0x569C0014,0x52980015,0x60940008,0x60940008,0x60940008,0x58940001,0x58940001,0x54940005,0x5494000A,0x5494000A,0x52940001,0x5094000A,0x2E80033,0x2E80033,0x2E80033,0x5A8C0012,0x5A8C0012,0x52940013,0x58880009,0x58880009,0x528C0002,0x508C000A,0x1DC0033, -0x1DC0033,0x52800013,0x5078000A,0x4E000033,0x92940001,0xA69C0014,0xA00034,0x6E940001,0x62940001,0x5C940001,0x5A940001,0x56940001,0x8A8C0000,0x6C900000,0x58940009,0x528C0002,0x1500033,0xA40008,0xA40008,0xA40008,0xA40008,0x5AA00000,0x5AA00000,0x5AA00000,0x54A00001,0x54A00001,0x52A00001,0xF40008,0xF40008,0xF40008,0x549C0001,0x549C0001, -0x529C0001,0x1F00008,0x1F00008,0x52940001,0x5000000A,0xF40008,0xF40008,0xF40008,0x549C0001,0x549C0001,0x529C0001,0x1F00008,0x1F00008,0x52940001,0x5000000A,0x1F00008,0x1F00008,0x52940001,0x5000000A,0x5000000A,0x84980000,0x88A00000,0xA40008,0x68980000,0x5E980000,0x5A980000,0x569C0001,0x56980000,0x80900000,0x66940000,0x15C0008,0x52940001, -0x15C0008,0xAC0014,0x64A80000,0x5CA80000,0x58A80001,0x3000012,0x5CA00001,0x58A40001,0x5FC0012,0x58940001,0x56000012,0x3000012,0x5CA00001,0x58A40001,0x5FC0012,0x58940001,0x56000012,0x5FC0012,0x58940001,0x56000012,0x56000012,0x3000012,0x5CA00001,0x58A40001,0x5FC0012,0x58940001,0x56000012,0x5FC0012,0x58940001,0x56000012,0x56000012,0x5FC0012, -0x58940001,0x56000012,0x56000012,0x56000012,0x9E900000,0x4B80012,0xACA80000,0x70940000,0x62940001,0x5E900000,0x58980001,0x588C0001,0x94880000,0x708C0000,0x5A980000,0x56000012,0x1700012,0x980014,0x980014,0x980014,0x980014,0x980014,0x980014,0x980014,0x980014,0x980014,0x980014,0x5A940000,0x5A940000,0x5A940000,0x5A940000,0x5A940000, -0x5A940000,0x52940000,0x52940000,0x52940000,0x4E940001,0xE40012,0xE40012,0xE40012,0xE40012,0xE40012,0xE40012,0x528C0001,0x528C0001,0x528C0001,0x4E900001,0x1D00012,0x1D00012,0x1D00012,0x4E800001,0x4C000012,0xA2940000,0x980014,0x980014,0x72940000,0x66940000,0x5E940000,0x5E940000,0x58940000,0x8A8C0000,0x6C900000,0x54940001,0x528C0001, -0x1480012,}; -static const uint32_t g_etc1_to_bc7_m6_table11[] = { -0xA40000,0xA40000,0xA40000,0xA40000,0xA40000,0xA40000,0xA40000,0xA40000,0xA40000,0xA40000,0xA40000,0xA40000,0xA40000,0xA40000,0xA40000,0xA40000,0xA40000,0xA40000,0xA40000,0xA40000,0xF40000,0xF40000,0xF40000,0xF40000,0xF40000,0xF40000,0xF40000,0xF40000,0xF40000,0xF40000,0x1F00000, -0x1F00000,0x1F00000,0x1F00000,0x50000001,0xA40000,0xA40000,0xA40000,0xA40000,0xA40000,0xA40000,0xA40000,0xA40000,0xEAC0000,0xEAC0000,0xEAC0000,0xF40000,0x15C0000,0xB00000,0xB00000,0xB00000,0xB00000,0xB00000,0xB00000,0xB00000,0xB00000,0xB00000,0xB00000,0x1040000,0x1040000,0x1040000,0x1040000,0x1040000, -0x1040000,0x7FC0000,0x7FC0000,0x7FC0000,0x56000001,0x1040000,0x1040000,0x1040000,0x1040000,0x1040000,0x1040000,0x7FC0000,0x7FC0000,0x7FC0000,0x56000001,0x7FC0000,0x7FC0000,0x7FC0000,0x56000001,0x56000001,0xBC0000,0xB00000,0xB00000,0xCC0000,0xDC0000,0xF00000,0xF00000,0x1280000,0xCC0000,0xDC0000,0x1740000,0x7FC0000, -0x1740000,0xB80000,0xB80000,0xB80000,0xB80000,0x1100000,0x1100000,0x1100000,0xDFC0000,0xDFC0000,0x5A000001,0x1100000,0x1100000,0x1100000,0xDFC0000,0xDFC0000,0x5A000001,0xDFC0000,0xDFC0000,0x5A000001,0x5A000001,0x1100000,0x1100000,0x1100000,0xDFC0000,0xDFC0000,0x5A000001,0xDFC0000,0xDFC0000,0x5A000001,0x5A000001,0xDFC0000, -0xDFC0000,0x5A000001,0x5A000001,0x5A000001,0x2D40000,0xC40000,0xB80000,0x2F80000,0x1340000,0x1880000,0x1C00000,0x21FC0000,0x4E40000,0x1100000,0x1880000,0x5A000001,0x1880000,0xC40000,0x1240000,0x17F80000,0x60000001,0x1240000,0x17F80000,0x60000001,0x17F80000,0x60000001,0x60000001,0x1240000,0x17F80000,0x60000001,0x17F80000,0x60000001, -0x60000001,0x17F80000,0x60000001,0x60000001,0x60000001,0x1240000,0x17F80000,0x60000001,0x17F80000,0x60000001,0x60000001,0x17F80000,0x60000001,0x60000001,0x60000001,0x17F80000,0x60000001,0x60000001,0x60000001,0x60000001,0x2F40000,0xD00000,0xD00000,0x1480000,0x1E00000,0x3BF40000,0x60000001,0x60000001,0x3080000,0x1700000,0x59C40000,0x60000001, -0x1A00000,0xB40088,0x74B00034,0x66B00034,0x60B00035,0x70AC0026,0x66AC0015,0x60AC0019,0x62AC0026,0x60A80016,0x5EA80026,0x72A40033,0x68A40009,0x62A8000F,0x64A40012,0x60A40002,0x5EA40016,0x62A40033,0x60A0000F,0x5EA0001A,0x5CA40033,0x10C0088,0x6C980033,0x60A40034,0x66980026,0x629C0013,0x5EA00024,0x66900033,0x6098000A,0x5E940013,0x5C980033,0xBF80088, -0x60840034,0x5E800024,0x5C740033,0x5800008C,0x9AA40002,0xDEAC0026,0xF0B00034,0x78A40001,0x6AA40002,0x64A40002,0x62A40002,0x60A40002,0x949C0001,0x74A00001,0x62A00009,0x5E940013,0x17C0088,0xB80034,0x70B40008,0x64B40009,0x60B40009,0x6CB00012,0x64B00001,0x62B00001,0x62B00012,0x60B00005,0x5EB00012,0x1140033,0x66A80009,0x60AC0009,0x64A40012,0x60A40002, -0x5EA80012,0xFF80033,0x60980009,0x5E940012,0x5C000033,0x1140033,0x66A80009,0x60AC0009,0x64A40012,0x60A40002,0x5EA80012,0xFF80033,0x60980009,0x5E940012,0x5C000033,0xFF80033,0x60980009,0x5E940012,0x5C000033,0x5C000033,0x96A80001,0xC0B00012,0xD2B40008,0x72A80001,0x6AA40002,0x64A40002,0x60A80002,0x60A00002,0x949C0001,0x70A40001,0x62A00008,0x5E940012, -0x18C0033,0xB00034,0xB00034,0xB00034,0xB00034,0x66AC0014,0x66AC0014,0x66AC0014,0x5EAC0014,0x5EAC0014,0x5AA80015,0x68A40008,0x68A40008,0x68A40008,0x60A40001,0x60A40001,0x5CA40005,0x5CA4000A,0x5CA4000A,0x5AA40001,0x58A4000A,0x3000033,0x3000033,0x3000033,0x629C0012,0x629C0012,0x5AA40013,0x60980009,0x60980009,0x5A9C0002,0x589C000A,0x5FC0033, -0x5FC0033,0x5A900013,0x5888000A,0x56000033,0x9AA40001,0xAEAC0014,0xB00034,0x76A40001,0x6AA40001,0x64A40001,0x62A40001,0x5EA40001,0x929C0000,0x74A00000,0x60A40009,0x5A9C0002,0x1700033,0xB40008,0xB40008,0xB40008,0xB40008,0x62B00000,0x62B00000,0x62B00000,0x5CB00001,0x5CB00001,0x5AB00001,0x10C0008,0x10C0008,0x10C0008,0x5CAC0001,0x5CAC0001, -0x5AAC0001,0xBF80008,0xBF80008,0x5AA40001,0x5800000A,0x10C0008,0x10C0008,0x10C0008,0x5CAC0001,0x5CAC0001,0x5AAC0001,0xBF80008,0xBF80008,0x5AA40001,0x5800000A,0xBF80008,0xBF80008,0x5AA40001,0x5800000A,0x5800000A,0x8CA80000,0x90B00000,0xB40008,0x70A80000,0x66A80000,0x62A80000,0x5EAC0001,0x5EA80000,0x88A00000,0x6EA40000,0x17C0008,0x5AA40001, -0x17C0008,0xBC0014,0x6CB80000,0x64B80000,0x60B80001,0x3180012,0x64B00001,0x60B40001,0x11FC0012,0x60A40001,0x5E000012,0x3180012,0x64B00001,0x60B40001,0x11FC0012,0x60A40001,0x5E000012,0x11FC0012,0x60A40001,0x5E000012,0x5E000012,0x3180012,0x64B00001,0x60B40001,0x11FC0012,0x60A40001,0x5E000012,0x11FC0012,0x60A40001,0x5E000012,0x5E000012,0x11FC0012, -0x60A40001,0x5E000012,0x5E000012,0x5E000012,0xA6A00000,0xCC80012,0xB4B80000,0x78A40000,0x6AA40001,0x66A00000,0x60A80001,0x609C0001,0x9C980000,0x789C0000,0x62A80000,0x5E000012,0x1940012,0xA80014,0xA80014,0xA80014,0xA80014,0xA80014,0xA80014,0xA80014,0xA80014,0xA80014,0xA80014,0x62A40000,0x62A40000,0x62A40000,0x62A40000,0x62A40000, -0x62A40000,0x5AA40000,0x5AA40000,0x5AA40000,0x56A40001,0xFC0012,0xFC0012,0xFC0012,0xFC0012,0xFC0012,0xFC0012,0x5A9C0001,0x5A9C0001,0x5A9C0001,0x56A00001,0x3F80012,0x3F80012,0x3F80012,0x56900001,0x54000012,0xAAA40000,0xA80014,0xA80014,0x7AA40000,0x6EA40000,0x66A40000,0x66A40000,0x60A40000,0x929C0000,0x74A00000,0x5CA40001,0x5A9C0001, -0x1680012,}; -static const uint32_t g_etc1_to_bc7_m6_table12[] = { -0xB40001,0xB40001,0xB40001,0xB40001,0xB40001,0xB40001,0xB40001,0xB40001,0xB40001,0xB40001,0xB40001,0xB40001,0xB40001,0xB40001,0xB40001,0xB40001,0xB40001,0xB40001,0xB40001,0xB40001,0x30C0000,0x30C0000,0x30C0000,0x30C0000,0x30C0000,0x30C0000,0x30C0000,0x30C0000,0x30C0000,0x30C0000,0xBFC0000, -0xBFC0000,0xBFC0000,0xBFC0000,0x5A000000,0xB40001,0xB40001,0xB40001,0xB40001,0xB40001,0xB40001,0xB40001,0xB40001,0x8C00000,0x8C00000,0x8C00000,0x30C0000,0x1800000,0xC00001,0xC00001,0xC00001,0xC00001,0xC00001,0xC00001,0xC00001,0xC00001,0xC00001,0xC00001,0x1200000,0x1200000,0x1200000,0x1200000,0x1200000, -0x1200000,0x15F80000,0x15F80000,0x15F80000,0x60000000,0x1200000,0x1200000,0x1200000,0x1200000,0x1200000,0x1200000,0x15F80000,0x15F80000,0x15F80000,0x60000000,0x15F80000,0x15F80000,0x15F80000,0x60000000,0x60000000,0xECC0000,0xC00001,0xC00001,0x2E00000,0xF40000,0x1080000,0x1080000,0x1440000,0x2E00000,0xF40000,0x19C0000,0x15F80000, -0x19C0000,0xC80001,0xC80001,0xC80001,0xC80001,0x12C0000,0x12C0000,0x12C0000,0x1BF80000,0x1BF80000,0x64000000,0x12C0000,0x12C0000,0x12C0000,0x1BF80000,0x1BF80000,0x64000000,0x1BF80000,0x1BF80000,0x64000000,0x64000000,0x12C0000,0x12C0000,0x12C0000,0x1BF80000,0x1BF80000,0x64000000,0x1BF80000,0x1BF80000,0x64000000,0x64000000,0x1BF80000, -0x1BF80000,0x64000000,0x64000000,0x64000000,0x6E80000,0xD80000,0xC80001,0x3100000,0x1540000,0x1AC0000,0x1EC0000,0x2DFC0000,0xFC0000,0x12C0000,0x1AC0000,0x64000000,0x1AC0000,0xD40001,0x33C0000,0x23FC0000,0x6A000000,0x33C0000,0x23FC0000,0x6A000000,0x23FC0000,0x6A000000,0x6A000000,0x33C0000,0x23FC0000,0x6A000000,0x23FC0000,0x6A000000, -0x6A000000,0x23FC0000,0x6A000000,0x6A000000,0x6A000000,0x33C0000,0x23FC0000,0x6A000000,0x23FC0000,0x6A000000,0x6A000000,0x23FC0000,0x6A000000,0x6A000000,0x6A000000,0x23FC0000,0x6A000000,0x6A000000,0x6A000000,0x6A000000,0x10C0000,0xE40000,0xE40000,0x1680000,0x7F80000,0x45FC0000,0x6A000000,0x6A000000,0x1240000,0x1900000,0x61F40000,0x6A000000, -0x1C80000,0xC4008C,0x80C00033,0x70C00033,0x6AC00033,0x7ABC0024,0x70BC0013,0x6CBC001A,0x6CBC0024,0x68BC0016,0x66BC0026,0x78B80034,0x70B8000A,0x6CB8000F,0x6EB40013,0x6AB40002,0x66B80016,0x6AB80034,0x68B4000F,0x66B40019,0x64B40035,0x3240088,0x74AC0033,0x6AB40033,0x6EAC0026,0x6AB00012,0x66B40026,0x70A00033,0x6AA40009,0x66A80015,0x64AC0034,0x17FC0088, -0x6A900033,0x66980026,0x648C0034,0x62000088,0xA4B80002,0xF6BC0024,0xF8C00034,0x7EB80002,0x72B80002,0x6CB80002,0x6AB80002,0x6AB40002,0xA0AC0001,0x80B00001,0x6AB40009,0x66A80015,0x1A40088,0xCC0033,0x78C8000A,0x6EC4000A,0x6AC4000A,0x72C40013,0x6EC00002,0x6AC40001,0x6AC40013,0x6AC00005,0x66C00015,0x1300033,0x70B80009,0x6ABC000A,0x6EB40012,0x6AB40001, -0x66BC0014,0x1DF40033,0x6AA40008,0x66A80014,0x64000034,0x1300033,0x70B80009,0x6ABC000A,0x6EB40012,0x6AB40001,0x66BC0014,0x1DF40033,0x6AA40008,0x66A80014,0x64000034,0x1DF40033,0x6AA40008,0x66A80014,0x64000034,0x64000034,0xA4B80001,0xBAC40013,0xCCC8000A,0x7EB80001,0x72B80001,0x6CB80001,0x6AB80001,0x6AB40001,0xA0AC0001,0x7CB40001,0x6AB40009,0x66A80014, -0x1B00033,0xC00033,0xC00033,0xC00033,0xC00033,0x72BC0012,0x72BC0012,0x72BC0012,0x68BC0012,0x68BC0012,0x64BC0012,0x70B80009,0x70B80009,0x70B80009,0x68B80002,0x68B80002,0x64B80005,0x66B40009,0x66B40009,0x64B40001,0x62B40009,0x11C0033,0x11C0033,0x11C0033,0x6AB00012,0x6AB00012,0x64B40012,0x68AC0009,0x68AC0009,0x64AC0001,0x62AC0009,0x13FC0033, -0x13FC0033,0x64A00012,0x62940008,0x60000034,0x98B80002,0xC6BC0012,0xC00033,0x7CB80001,0x72B80001,0x6CB80001,0x6AB80002,0x68B40002,0xA0AC0000,0x7AB40001,0x6AB40008,0x64AC0001,0x1980033,0xC4000A,0xC4000A,0xC4000A,0xC4000A,0x6AC40001,0x6AC40001,0x6AC40001,0x66C00001,0x66C00001,0x64C00001,0x3240008,0x3240008,0x3240008,0x66BC0001,0x66BC0001, -0x64BC0001,0x17FC0008,0x17FC0008,0x64B00000,0x62000008,0x3240008,0x3240008,0x3240008,0x66BC0001,0x66BC0001,0x64BC0001,0x17FC0008,0x17FC0008,0x64B00000,0x62000008,0x17FC0008,0x17FC0008,0x64B00000,0x62000008,0x62000008,0x8CBC0000,0x8AC40001,0xC4000A,0x7CB80000,0x6EBC0000,0x6ABC0000,0x68BC0000,0x66BC0001,0x8EB40000,0x76B80000,0x1A40008,0x64B00000, -0x1A40008,0xD00012,0x74CC0001,0x6CCC0001,0x6AC80001,0x1340012,0x6EC00001,0x6AC40000,0x1FF80012,0x6AB00000,0x66000014,0x1340012,0x6EC00001,0x6AC40000,0x1FF80012,0x6AB00000,0x66000014,0x1FF80012,0x6AB00000,0x66000014,0x66000014,0x1340012,0x6EC00001,0x6AC40000,0x1FF80012,0x6AB00000,0x66000014,0x1FF80012,0x6AB00000,0x66000014,0x66000014,0x1FF80012, -0x6AB00000,0x66000014,0x66000014,0x66000014,0xB4B00000,0x6DC0012,0xAECC0001,0x82B40000,0x72B80001,0x6EB40000,0x6AB80000,0x6AA80000,0xA8A80000,0x80B00000,0x6ABC0001,0x66000014,0x1B80012,0xBC0012,0xBC0012,0xBC0012,0xBC0012,0xBC0012,0xBC0012,0xBC0012,0xBC0012,0xBC0012,0xBC0012,0x6AB80001,0x6AB80001,0x6AB80001,0x6AB80001,0x6AB80001, -0x6AB80001,0x62B80001,0x62B80001,0x62B80001,0x60B40001,0x1180012,0x1180012,0x1180012,0x1180012,0x1180012,0x1180012,0x64AC0001,0x64AC0001,0x64AC0001,0x60B00000,0x11F80012,0x11F80012,0x11F80012,0x609C0000,0x5C000014,0xA4B80001,0xBC0012,0xBC0012,0x7CB80001,0x72B80001,0x6CB80001,0x6CB80001,0x68B80001,0xA0AC0000,0x82B00000,0x66B40000,0x64AC0001, -0x1900012,}; -static const uint32_t g_etc1_to_bc7_m6_table13[] = { -0xC40001,0xC40001,0xC40001,0xC40001,0xC40001,0xC40001,0xC40001,0xC40001,0xC40001,0xC40001,0xC40001,0xC40001,0xC40001,0xC40001,0xC40001,0xC40001,0xC40001,0xC40001,0xC40001,0xC40001,0x3240000,0x3240000,0x3240000,0x3240000,0x3240000,0x3240000,0x3240000,0x3240000,0x3240000,0x3240000,0x17FC0000, -0x17FC0000,0x17FC0000,0x17FC0000,0x62000000,0xC40001,0xC40001,0xC40001,0xC40001,0xC40001,0xC40001,0xC40001,0xC40001,0xD40000,0xD40000,0xD40000,0x3240000,0x1A40000,0xD00001,0xD00001,0xD00001,0xD00001,0xD00001,0xD00001,0xD00001,0xD00001,0xD00001,0xD00001,0x1380000,0x1380000,0x1380000,0x1380000,0x1380000, -0x1380000,0x21F80000,0x21F80000,0x21F80000,0x68000000,0x1380000,0x1380000,0x1380000,0x1380000,0x1380000,0x1380000,0x21F80000,0x21F80000,0x21F80000,0x68000000,0x21F80000,0x21F80000,0x21F80000,0x68000000,0x68000000,0xE00000,0xD00001,0xD00001,0xF40000,0x1080000,0x11C0000,0x11C0000,0x1600000,0xF40000,0x1080000,0x1BC0000,0x21F80000, -0x1BC0000,0xD80001,0xD80001,0xD80001,0xD80001,0x1440000,0x1440000,0x1440000,0x27F80000,0x27F80000,0x6C000000,0x1440000,0x1440000,0x1440000,0x27F80000,0x27F80000,0x6C000000,0x27F80000,0x27F80000,0x6C000000,0x6C000000,0x1440000,0x1440000,0x1440000,0x27F80000,0x27F80000,0x6C000000,0x27F80000,0x27F80000,0x6C000000,0x6C000000,0x27F80000, -0x27F80000,0x6C000000,0x6C000000,0x6C000000,0x2FC0000,0xE80000,0xD80001,0x1280000,0x36C0000,0x1D00000,0x9FC0000,0x39F80000,0x1100000,0x1440000,0x1D00000,0x6C000000,0x1D00000,0xE40001,0x1540000,0x2FFC0000,0x72000000,0x1540000,0x2FFC0000,0x72000000,0x2FFC0000,0x72000000,0x72000000,0x1540000,0x2FFC0000,0x72000000,0x2FFC0000,0x72000000, -0x72000000,0x2FFC0000,0x72000000,0x72000000,0x72000000,0x1540000,0x2FFC0000,0x72000000,0x2FFC0000,0x72000000,0x72000000,0x2FFC0000,0x72000000,0x72000000,0x72000000,0x2FFC0000,0x72000000,0x72000000,0x72000000,0x72000000,0x1200000,0x2F40000,0x2F40000,0x3800000,0x15F80000,0x4FFC0000,0x72000000,0x72000000,0x1380000,0x1B00000,0x6BC80000,0x72000000, -0x1E80000,0xD4008C,0x88D00033,0x78D00033,0x72D00033,0x82CC0024,0x78CC0013,0x74CC001A,0x74CC0024,0x70CC0016,0x6ECC0026,0x80C80034,0x78C8000A,0x74C8000F,0x76C40013,0x72C40002,0x6EC80016,0x72C80034,0x70C4000F,0x6EC40019,0x6CC40035,0x33C0088,0x7CBC0033,0x72C40033,0x76BC0026,0x72C00012,0x6EC40026,0x78B00033,0x72B40009,0x6EB80015,0x6CBC0034,0x23FC0088, -0x72A00033,0x6EA80026,0x6C9C0034,0x6A000088,0xACC80002,0xFECC0024,0xF0D00037,0x86C80002,0x7AC80002,0x74C80002,0x72C80002,0x72C40002,0xA8BC0001,0x88C00001,0x72C40009,0x6EB80015,0x1C80088,0xDC0033,0x80D8000A,0x76D4000A,0x72D4000A,0x7AD40013,0x76D00002,0x72D40001,0x72D40013,0x72D00005,0x6ED00015,0x3440033,0x78C80009,0x72CC000A,0x76C40012,0x72C40001, -0x6ECC0014,0x27FC0033,0x72B40008,0x6EB80014,0x6C000034,0x3440033,0x78C80009,0x72CC000A,0x76C40012,0x72C40001,0x6ECC0014,0x27FC0033,0x72B40008,0x6EB80014,0x6C000034,0x27FC0033,0x72B40008,0x6EB80014,0x6C000034,0x6C000034,0xACC80001,0xC2D40013,0xD4D8000A,0x86C80001,0x7AC80001,0x74C80001,0x72C80001,0x72C40001,0xA8BC0001,0x84C40001,0x72C40009,0x6EB80014, -0x1D40033,0xD00033,0xD00033,0xD00033,0xD00033,0x7ACC0012,0x7ACC0012,0x7ACC0012,0x70CC0012,0x70CC0012,0x6CCC0012,0x78C80009,0x78C80009,0x78C80009,0x70C80002,0x70C80002,0x6CC80005,0x6EC40009,0x6EC40009,0x6CC40001,0x6AC40009,0x1340033,0x1340033,0x1340033,0x72C00012,0x72C00012,0x6CC40012,0x70BC0009,0x70BC0009,0x6CBC0001,0x6ABC0009,0x1FF80033, -0x1FF80033,0x6CB00012,0x6AA40008,0x68000034,0xA0C80002,0xCECC0012,0xD00033,0x84C80001,0x7AC80001,0x74C80001,0x72C80002,0x70C40002,0xA8BC0000,0x82C40001,0x72C40008,0x6CBC0001,0x1B80033,0xD4000A,0xD4000A,0xD4000A,0xD4000A,0x72D40001,0x72D40001,0x72D40001,0x6ED00001,0x6ED00001,0x6CD00001,0x33C0008,0x33C0008,0x33C0008,0x6ECC0001,0x6ECC0001, -0x6CCC0001,0x23FC0008,0x23FC0008,0x6CC00000,0x6A000008,0x33C0008,0x33C0008,0x33C0008,0x6ECC0001,0x6ECC0001,0x6CCC0001,0x23FC0008,0x23FC0008,0x6CC00000,0x6A000008,0x23FC0008,0x23FC0008,0x6CC00000,0x6A000008,0x6A000008,0x94CC0000,0x92D40001,0xD4000A,0x84C80000,0x76CC0000,0x72CC0000,0x70CC0000,0x6ECC0001,0x96C40000,0x7EC80000,0x1C80008,0x6CC00000, -0x1C80008,0xE00012,0x7CDC0001,0x74DC0001,0x72D80001,0x14C0012,0x76D00001,0x72D40000,0x2BF80012,0x72C00000,0x6E000014,0x14C0012,0x76D00001,0x72D40000,0x2BF80012,0x72C00000,0x6E000014,0x2BF80012,0x72C00000,0x6E000014,0x6E000014,0x14C0012,0x76D00001,0x72D40000,0x2BF80012,0x72C00000,0x6E000014,0x2BF80012,0x72C00000,0x6E000014,0x6E000014,0x2BF80012, -0x72C00000,0x6E000014,0x6E000014,0x6E000014,0xBCC00000,0xEEC0012,0xB6DC0001,0x8AC40000,0x7AC80001,0x76C40000,0x72C80000,0x72B80000,0xB0B80000,0x88C00000,0x72CC0001,0x6E000014,0x1DC0012,0xCC0012,0xCC0012,0xCC0012,0xCC0012,0xCC0012,0xCC0012,0xCC0012,0xCC0012,0xCC0012,0xCC0012,0x72C80001,0x72C80001,0x72C80001,0x72C80001,0x72C80001, -0x72C80001,0x6AC80001,0x6AC80001,0x6AC80001,0x68C40001,0x1300012,0x1300012,0x1300012,0x1300012,0x1300012,0x1300012,0x6CBC0001,0x6CBC0001,0x6CBC0001,0x68C00000,0x1DF40012,0x1DF40012,0x1DF40012,0x68AC0000,0x64000014,0xACC80001,0xCC0012,0xCC0012,0x84C80001,0x7AC80001,0x74C80001,0x74C80001,0x70C80001,0xA8BC0000,0x8AC00000,0x6EC40000,0x6CBC0001, -0x1B00012,}; -static const uint32_t g_etc1_to_bc7_m6_table14[] = { -0xD40001,0xD40001,0xD40001,0xD40001,0xD40001,0xD40001,0xD40001,0xD40001,0xD40001,0xD40001,0xD40001,0xD40001,0xD40001,0xD40001,0xD40001,0xD40001,0xD40001,0xD40001,0xD40001,0xD40001,0x33C0000,0x33C0000,0x33C0000,0x33C0000,0x33C0000,0x33C0000,0x33C0000,0x33C0000,0x33C0000,0x33C0000,0x23FC0000, -0x23FC0000,0x23FC0000,0x23FC0000,0x6A000000,0xD40001,0xD40001,0xD40001,0xD40001,0xD40001,0xD40001,0xD40001,0xD40001,0xE40000,0xE40000,0xE40000,0x33C0000,0x1C80000,0xE00001,0xE00001,0xE00001,0xE00001,0xE00001,0xE00001,0xE00001,0xE00001,0xE00001,0xE00001,0x1500000,0x1500000,0x1500000,0x1500000,0x1500000, -0x1500000,0x2DF80000,0x2DF80000,0x2DF80000,0x70000000,0x1500000,0x1500000,0x1500000,0x1500000,0x1500000,0x1500000,0x2DF80000,0x2DF80000,0x2DF80000,0x70000000,0x2DF80000,0x2DF80000,0x2DF80000,0x70000000,0x70000000,0xF00000,0xE00001,0xE00001,0x7040000,0x11C0000,0x1340000,0x1340000,0x17C0000,0x7040000,0x11C0000,0x1E00000,0x2DF80000, -0x1E00000,0xE80001,0xE80001,0xE80001,0xE80001,0x15C0000,0x15C0000,0x15C0000,0x33F80000,0x33F80000,0x74000000,0x15C0000,0x15C0000,0x15C0000,0x33F80000,0x33F80000,0x74000000,0x33F80000,0x33F80000,0x74000000,0x74000000,0x15C0000,0x15C0000,0x15C0000,0x33F80000,0x33F80000,0x74000000,0x33F80000,0x33F80000,0x74000000,0x74000000,0x33F80000, -0x33F80000,0x74000000,0x74000000,0x74000000,0x1100000,0x4F80000,0xE80001,0x33C0000,0x1880000,0x1F00000,0x17FC0000,0x43FC0000,0x1240000,0x15C0000,0x1F00000,0x74000000,0x1F00000,0xF40001,0x16C0000,0x3BFC0000,0x7A000000,0x16C0000,0x3BFC0000,0x7A000000,0x3BFC0000,0x7A000000,0x7A000000,0x16C0000,0x3BFC0000,0x7A000000,0x3BFC0000,0x7A000000, -0x7A000000,0x3BFC0000,0x7A000000,0x7A000000,0x7A000000,0x16C0000,0x3BFC0000,0x7A000000,0x3BFC0000,0x7A000000,0x7A000000,0x3BFC0000,0x7A000000,0x7A000000,0x7A000000,0x3BFC0000,0x7A000000,0x7A000000,0x7A000000,0x7A000000,0x1340000,0xB040000,0xB040000,0x19C0000,0x21FC0000,0x59FC0000,0x7A000000,0x7A000000,0x34C0000,0x1CC0000,0x73D80000,0x7A000000, -0x7FC0000,0xE4008C,0x90E00033,0x80E00033,0x7AE00033,0x8ADC0024,0x80DC0013,0x7CDC001A,0x7CDC0024,0x78DC0016,0x76DC0026,0x88D80034,0x80D8000A,0x7CD8000F,0x7ED40013,0x7AD40002,0x76D80016,0x7AD80034,0x78D4000F,0x76D40019,0x74D40035,0x1540088,0x84CC0033,0x7AD40033,0x7ECC0026,0x7AD00012,0x76D40026,0x80C00033,0x7AC40009,0x76C80015,0x74CC0034,0x2FFC0088, -0x7AB00033,0x76B80026,0x74AC0034,0x72000088,0xB4D80002,0xF6DC0026,0xF8E00037,0x8ED80002,0x82D80002,0x7CD80002,0x7AD80002,0x7AD40002,0xB0CC0001,0x90D00001,0x7AD40009,0x76C80015,0x1E80088,0xEC0033,0x88E8000A,0x7EE4000A,0x7AE4000A,0x82E40013,0x7EE00002,0x7AE40001,0x7AE40013,0x7AE00005,0x76E00015,0x35C0033,0x80D80009,0x7ADC000A,0x7ED40012,0x7AD40001, -0x76DC0014,0x33FC0033,0x7AC40008,0x76C80014,0x74000034,0x35C0033,0x80D80009,0x7ADC000A,0x7ED40012,0x7AD40001,0x76DC0014,0x33FC0033,0x7AC40008,0x76C80014,0x74000034,0x33FC0033,0x7AC40008,0x76C80014,0x74000034,0x74000034,0xB4D80001,0xCAE40013,0xDCE8000A,0x8ED80001,0x82D80001,0x7CD80001,0x7AD80001,0x7AD40001,0xB0CC0001,0x8CD40001,0x7AD40009,0x76C80014, -0x1F40033,0xE00033,0xE00033,0xE00033,0xE00033,0x82DC0012,0x82DC0012,0x82DC0012,0x78DC0012,0x78DC0012,0x74DC0012,0x80D80009,0x80D80009,0x80D80009,0x78D80002,0x78D80002,0x74D80005,0x76D40009,0x76D40009,0x74D40001,0x72D40009,0x14C0033,0x14C0033,0x14C0033,0x7AD00012,0x7AD00012,0x74D40012,0x78CC0009,0x78CC0009,0x74CC0001,0x72CC0009,0x2BF80033, -0x2BF80033,0x74C00012,0x72B40008,0x70000034,0xA8D80002,0xD6DC0012,0xE00033,0x8CD80001,0x82D80001,0x7CD80001,0x7AD80002,0x78D40002,0xB0CC0000,0x8AD40001,0x7AD40008,0x74CC0001,0x1DC0033,0xE4000A,0xE4000A,0xE4000A,0xE4000A,0x7AE40001,0x7AE40001,0x7AE40001,0x76E00001,0x76E00001,0x74E00001,0x1540008,0x1540008,0x1540008,0x76DC0001,0x76DC0001, -0x74DC0001,0x2FFC0008,0x2FFC0008,0x74D00000,0x72000008,0x1540008,0x1540008,0x1540008,0x76DC0001,0x76DC0001,0x74DC0001,0x2FFC0008,0x2FFC0008,0x74D00000,0x72000008,0x2FFC0008,0x2FFC0008,0x74D00000,0x72000008,0x72000008,0x9CDC0000,0x9AE40001,0xE4000A,0x8CD80000,0x7EDC0000,0x7ADC0000,0x78DC0000,0x76DC0001,0x9ED40000,0x86D80000,0x1E80008,0x74D00000, -0x1E80008,0xF00012,0x84EC0001,0x7CEC0001,0x7AE80001,0x1640012,0x7EE00001,0x7AE40000,0x37F80012,0x7AD00000,0x76000014,0x1640012,0x7EE00001,0x7AE40000,0x37F80012,0x7AD00000,0x76000014,0x37F80012,0x7AD00000,0x76000014,0x76000014,0x1640012,0x7EE00001,0x7AE40000,0x37F80012,0x7AD00000,0x76000014,0x37F80012,0x7AD00000,0x76000014,0x76000014,0x37F80012, -0x7AD00000,0x76000014,0x76000014,0x76000014,0xC4D00000,0x1000012,0xBEEC0001,0x92D40000,0x82D80001,0x7ED40000,0x7AD80000,0x7AC80000,0xB8C80000,0x90D00000,0x7ADC0001,0x76000014,0x1FC0012,0xDC0012,0xDC0012,0xDC0012,0xDC0012,0xDC0012,0xDC0012,0xDC0012,0xDC0012,0xDC0012,0xDC0012,0x7AD80001,0x7AD80001,0x7AD80001,0x7AD80001,0x7AD80001, -0x7AD80001,0x72D80001,0x72D80001,0x72D80001,0x70D40001,0x3440012,0x3440012,0x3440012,0x3440012,0x3440012,0x3440012,0x74CC0001,0x74CC0001,0x74CC0001,0x70D00000,0x27FC0012,0x27FC0012,0x27FC0012,0x70BC0000,0x6C000014,0xB4D80001,0xDC0012,0xDC0012,0x8CD80001,0x82D80001,0x7CD80001,0x7CD80001,0x78D80001,0xB0CC0000,0x92D00000,0x76D40000,0x74CC0001, -0x1D40012,}; -static const uint32_t g_etc1_to_bc7_m6_table15[] = { -0xE40001,0xE40001,0xE40001,0xE40001,0xE40001,0xE40001,0xE40001,0xE40001,0xE40001,0xE40001,0xE40001,0xE40001,0xE40001,0xE40001,0xE40001,0xE40001,0xE40001,0xE40001,0xE40001,0xE40001,0x1540000,0x1540000,0x1540000,0x1540000,0x1540000,0x1540000,0x1540000,0x1540000,0x1540000,0x1540000,0x2FFC0000, -0x2FFC0000,0x2FFC0000,0x2FFC0000,0x72000000,0xE40001,0xE40001,0xE40001,0xE40001,0xE40001,0xE40001,0xE40001,0xE40001,0x2F40000,0x2F40000,0x2F40000,0x1540000,0x1E80000,0xF00001,0xF00001,0xF00001,0xF00001,0xF00001,0xF00001,0xF00001,0xF00001,0xF00001,0xF00001,0x1680000,0x1680000,0x1680000,0x1680000,0x1680000, -0x1680000,0x39F80000,0x39F80000,0x39F80000,0x78000000,0x1680000,0x1680000,0x1680000,0x1680000,0x1680000,0x1680000,0x39F80000,0x39F80000,0x39F80000,0x78000000,0x39F80000,0x39F80000,0x39F80000,0x78000000,0x78000000,0x9000000,0xF00001,0xF00001,0x3180000,0x1300000,0x1480000,0x1480000,0x3940000,0x3180000,0x1300000,0x3FC0000,0x39F80000, -0x3FC0000,0xF80001,0xF80001,0xF80001,0xF80001,0x1740000,0x1740000,0x1740000,0x3FF80000,0x3FF80000,0x7C000000,0x1740000,0x1740000,0x1740000,0x3FF80000,0x3FF80000,0x7C000000,0x3FF80000,0x3FF80000,0x7C000000,0x7C000000,0x1740000,0x1740000,0x1740000,0x3FF80000,0x3FF80000,0x7C000000,0x3FF80000,0x3FF80000,0x7C000000,0x7C000000,0x3FF80000, -0x3FF80000,0x7C000000,0x7C000000,0x7C000000,0x7200000,0xD080000,0xF80001,0x1540000,0x1A40000,0xBFC0000,0x25FC0000,0x4FF80000,0x1380000,0x1740000,0xBFC0000,0x7C000000,0xBFC0000,0x1040001,0x1840000,0x47FC0000,0x82000000,0x1840000,0x47FC0000,0x82000000,0x47FC0000,0x82000000,0x82000000,0x1840000,0x47FC0000,0x82000000,0x47FC0000,0x82000000, -0x82000000,0x47FC0000,0x82000000,0x82000000,0x82000000,0x1840000,0x47FC0000,0x82000000,0x47FC0000,0x82000000,0x82000000,0x47FC0000,0x82000000,0x82000000,0x82000000,0x47FC0000,0x82000000,0x82000000,0x82000000,0x82000000,0x1480000,0x1180000,0x1180000,0x1B80000,0x2FFC0000,0x65F00000,0x82000000,0x82000000,0x1640000,0x1EC0000,0x7BE80000,0x82000000, -0x17FC0000,0xF4008C,0x98F00033,0x88F00033,0x82F00033,0x92EC0024,0x88EC0013,0x84EC001A,0x84EC0024,0x80EC0016,0x7EEC0026,0x90E80034,0x88E8000A,0x84E8000F,0x86E40013,0x82E40002,0x7EE80016,0x82E80034,0x80E4000F,0x7EE40019,0x7CE40035,0x16C0088,0x8CDC0033,0x82E40033,0x86DC0026,0x82E00012,0x7EE40026,0x88D00033,0x82D40009,0x7ED80015,0x7CDC0034,0x3BFC0088, -0x82C00033,0x7EC80026,0x7CBC0034,0x7A000088,0xBCE80002,0xFEEC0026,0xF0F0003C,0x96E80002,0x8AE80002,0x84E80002,0x82E80002,0x82E40002,0xB8DC0001,0x98E00001,0x82E40009,0x7ED80015,0x7FC0088,0xFC0033,0x90F8000A,0x86F4000A,0x82F4000A,0x8AF40013,0x86F00002,0x82F40001,0x82F40013,0x82F00005,0x7EF00015,0x3740033,0x88E80009,0x82EC000A,0x86E40012,0x82E40001, -0x7EEC0014,0x3FFC0033,0x82D40008,0x7ED80014,0x7C000034,0x3740033,0x88E80009,0x82EC000A,0x86E40012,0x82E40001,0x7EEC0014,0x3FFC0033,0x82D40008,0x7ED80014,0x7C000034,0x3FFC0033,0x82D40008,0x7ED80014,0x7C000034,0x7C000034,0xBCE80001,0xD2F40013,0xE4F8000A,0x96E80001,0x8AE80001,0x84E80001,0x82E80001,0x82E40001,0xB8DC0001,0x94E40001,0x82E40009,0x7ED80014, -0xDFC0033,0xF00033,0xF00033,0xF00033,0xF00033,0x8AEC0012,0x8AEC0012,0x8AEC0012,0x80EC0012,0x80EC0012,0x7CEC0012,0x88E80009,0x88E80009,0x88E80009,0x80E80002,0x80E80002,0x7CE80005,0x7EE40009,0x7EE40009,0x7CE40001,0x7AE40009,0x1640033,0x1640033,0x1640033,0x82E00012,0x82E00012,0x7CE40012,0x80DC0009,0x80DC0009,0x7CDC0001,0x7ADC0009,0x37F80033, -0x37F80033,0x7CD00012,0x7AC40008,0x78000034,0xB0E80002,0xDEEC0012,0xF00033,0x94E80001,0x8AE80001,0x84E80001,0x82E80002,0x80E40002,0xB8DC0000,0x92E40001,0x82E40008,0x7CDC0001,0x1FC0033,0xF4000A,0xF4000A,0xF4000A,0xF4000A,0x82F40001,0x82F40001,0x82F40001,0x7EF00001,0x7EF00001,0x7CF00001,0x16C0008,0x16C0008,0x16C0008,0x7EEC0001,0x7EEC0001, -0x7CEC0001,0x3BFC0008,0x3BFC0008,0x7CE00000,0x7A000008,0x16C0008,0x16C0008,0x16C0008,0x7EEC0001,0x7EEC0001,0x7CEC0001,0x3BFC0008,0x3BFC0008,0x7CE00000,0x7A000008,0x3BFC0008,0x3BFC0008,0x7CE00000,0x7A000008,0x7A000008,0xA4EC0000,0xA2F40001,0xF4000A,0x94E80000,0x86EC0000,0x82EC0000,0x80EC0000,0x7EEC0001,0xA6E40000,0x8EE80000,0x7FC0008,0x7CE00000, -0x7FC0008,0x1000012,0x8CFC0001,0x84FC0001,0x82F80001,0x17C0012,0x86F00001,0x82F40000,0x43F80012,0x82E00000,0x7E000014,0x17C0012,0x86F00001,0x82F40000,0x43F80012,0x82E00000,0x7E000014,0x43F80012,0x82E00000,0x7E000014,0x7E000014,0x17C0012,0x86F00001,0x82F40000,0x43F80012,0x82E00000,0x7E000014,0x43F80012,0x82E00000,0x7E000014,0x7E000014,0x43F80012, -0x82E00000,0x7E000014,0x7E000014,0x7E000014,0xCCE00000,0x1100012,0xC6FC0001,0x9AE40000,0x8AE80001,0x86E40000,0x82E80000,0x82D80000,0xC0D80000,0x98E00000,0x82EC0001,0x7E000014,0x11FC0012,0xEC0012,0xEC0012,0xEC0012,0xEC0012,0xEC0012,0xEC0012,0xEC0012,0xEC0012,0xEC0012,0xEC0012,0x82E80001,0x82E80001,0x82E80001,0x82E80001,0x82E80001, -0x82E80001,0x7AE80001,0x7AE80001,0x7AE80001,0x78E40001,0x35C0012,0x35C0012,0x35C0012,0x35C0012,0x35C0012,0x35C0012,0x7CDC0001,0x7CDC0001,0x7CDC0001,0x78E00000,0x33FC0012,0x33FC0012,0x33FC0012,0x78CC0000,0x74000014,0xBCE80001,0xEC0012,0xEC0012,0x94E80001,0x8AE80001,0x84E80001,0x84E80001,0x80E80001,0xB8DC0000,0x9AE00000,0x7EE40000,0x7CDC0001, -0x1F40012,}; -static const uint32_t g_etc1_to_bc7_m6_table16[] = { -0xF80000,0xF80000,0xF80000,0xF80000,0xF80000,0xF80000,0xF80000,0xF80000,0xF80000,0xF80000,0xF80000,0xF80000,0xF80000,0xF80000,0xF80000,0xF80000,0xF80000,0xF80000,0xF80000,0xF80000,0x1700000,0x1700000,0x1700000,0x1700000,0x1700000,0x1700000,0x1700000,0x1700000,0x1700000,0x1700000,0x3DF80000, -0x3DF80000,0x3DF80000,0x3DF80000,0x7A000001,0xF80000,0xF80000,0xF80000,0xF80000,0xF80000,0xF80000,0xF80000,0xF80000,0x1080000,0x1080000,0x1080000,0x1700000,0x9FC0000,0x1040000,0x1040000,0x1040000,0x1040000,0x1040000,0x1040000,0x1040000,0x1040000,0x1040000,0x1040000,0x3800000,0x3800000,0x3800000,0x3800000,0x3800000, -0x3800000,0x45FC0000,0x45FC0000,0x45FC0000,0x80000001,0x3800000,0x3800000,0x3800000,0x3800000,0x3800000,0x3800000,0x45FC0000,0x45FC0000,0x45FC0000,0x80000001,0x45FC0000,0x45FC0000,0x45FC0000,0x80000001,0x80000001,0x3140000,0x1040000,0x1040000,0x52C0000,0x3440000,0x1600000,0x1600000,0x1B40000,0x52C0000,0x3440000,0x15FC0000,0x45FC0000, -0x15FC0000,0x10C0000,0x10C0000,0x10C0000,0x10C0000,0x38C0000,0x38C0000,0x38C0000,0x4BFC0000,0x4BFC0000,0x84000001,0x38C0000,0x38C0000,0x38C0000,0x4BFC0000,0x4BFC0000,0x84000001,0x4BFC0000,0x4BFC0000,0x84000001,0x84000001,0x38C0000,0x38C0000,0x38C0000,0x4BFC0000,0x4BFC0000,0x84000001,0x4BFC0000,0x4BFC0000,0x84000001,0x84000001,0x4BFC0000, -0x4BFC0000,0x84000001,0x84000001,0x84000001,0x1380000,0x71C0000,0x10C0000,0x16C0000,0x3C00000,0x1DF80000,0x35F80000,0x5BF80000,0x1500000,0x38C0000,0x1DF80000,0x84000001,0x1DF80000,0x1180000,0x1A00000,0x55F80000,0x8A000001,0x1A00000,0x55F80000,0x8A000001,0x55F80000,0x8A000001,0x8A000001,0x1A00000,0x55F80000,0x8A000001,0x55F80000,0x8A000001, -0x8A000001,0x55F80000,0x8A000001,0x8A000001,0x8A000001,0x1A00000,0x55F80000,0x8A000001,0x55F80000,0x8A000001,0x8A000001,0x55F80000,0x8A000001,0x8A000001,0x8A000001,0x55F80000,0x8A000001,0x8A000001,0x8A000001,0x8A000001,0x1600000,0xD280000,0xD280000,0x3D40000,0x3FF80000,0x6FF80000,0x8A000001,0x8A000001,0x17C0000,0xBFC0000,0x85DC0000,0x8A000001, -0x27FC0000,0x1080088,0x9F040034,0x91040034,0x8B040035,0x9B000026,0x91000015,0x8B000019,0x8D000026,0x8AFC0016,0x88FC0026,0x9CF80033,0x92F80009,0x8CFC000F,0x8EF80012,0x8AF80002,0x88F80016,0x8CF80033,0x8AF4000F,0x88F4001A,0x86F80033,0x1880088,0x96EC0033,0x8AF80034,0x90EC0026,0x8CF00013,0x88F40024,0x90E40033,0x8AEC000A,0x88E80013,0x86EC0033,0x49F80088, -0x8AD80034,0x88D40024,0x86C80033,0x8200008C,0xC4F80002,0xF9000028,0xFB040038,0xA2F80001,0x94F80002,0x8EF80002,0x8CF80002,0x8AF80002,0xBEF00001,0x9EF40001,0x8CF40009,0x88E80013,0x19FC0088,0x10C0034,0x9B080008,0x8F080009,0x8B080009,0x97040012,0x8F040001,0x8D040001,0x8D040012,0x8B040005,0x89040012,0x1900033,0x90FC0009,0x8B000009,0x8EF80012,0x8AF80002, -0x88FC0012,0x4DFC0033,0x8AEC0009,0x88E80012,0x86000033,0x1900033,0x90FC0009,0x8B000009,0x8EF80012,0x8AF80002,0x88FC0012,0x4DFC0033,0x8AEC0009,0x88E80012,0x86000033,0x4DFC0033,0x8AEC0009,0x88E80012,0x86000033,0x86000033,0xC0FC0001,0xEB040012,0xFD080008,0x9CFC0001,0x94F80002,0x8EF80002,0x8AFC0002,0x8AF40002,0xBEF00001,0x9AF80001,0x8CF40008,0x88E80012, -0x1FF80033,0x1040034,0x1040034,0x1040034,0x1040034,0x91000014,0x91000014,0x91000014,0x89000014,0x89000014,0x84FC0015,0x92F80008,0x92F80008,0x92F80008,0x8AF80001,0x8AF80001,0x86F80005,0x86F8000A,0x86F8000A,0x84F80001,0x82F8000A,0x1800033,0x1800033,0x1800033,0x8CF00012,0x8CF00012,0x84F80013,0x8AEC0009,0x8AEC0009,0x84F00002,0x82F0000A,0x45F80033, -0x45F80033,0x84E40013,0x82DC000A,0x80000033,0xC4F80001,0xD9000014,0x1040034,0xA0F80001,0x94F80001,0x8EF80001,0x8CF80001,0x88F80001,0xBCF00000,0x9EF40000,0x8AF80009,0x84F00002,0x13FC0033,0x1080008,0x1080008,0x1080008,0x1080008,0x8D040000,0x8D040000,0x8D040000,0x87040001,0x87040001,0x85040001,0x1880008,0x1880008,0x1880008,0x87000001,0x87000001, -0x85000001,0x49F80008,0x49F80008,0x84F80001,0x8200000A,0x1880008,0x1880008,0x1880008,0x87000001,0x87000001,0x85000001,0x49F80008,0x49F80008,0x84F80001,0x8200000A,0x49F80008,0x49F80008,0x84F80001,0x8200000A,0x8200000A,0xB6FC0000,0xBB040000,0x1080008,0x9AFC0000,0x90FC0000,0x8CFC0000,0x89000001,0x88FC0000,0xB2F40000,0x98F80000,0x19FC0008,0x84F80001, -0x19FC0008,0x1100014,0x970C0000,0x8F0C0000,0x8B0C0001,0x1980012,0x8F040001,0x8B080001,0x51F80012,0x8AF80001,0x88000012,0x1980012,0x8F040001,0x8B080001,0x51F80012,0x8AF80001,0x88000012,0x51F80012,0x8AF80001,0x88000012,0x88000012,0x1980012,0x8F040001,0x8B080001,0x51F80012,0x8AF80001,0x88000012,0x51F80012,0x8AF80001,0x88000012,0x88000012,0x51F80012, -0x8AF80001,0x88000012,0x88000012,0x88000012,0xD0F40000,0x1240012,0xDF0C0000,0xA2F80000,0x94F80001,0x90F40000,0x8AFC0001,0x8AF00001,0xC6EC0000,0xA2F00000,0x8CFC0000,0x88000012,0x21FC0012,0xFC0014,0xFC0014,0xFC0014,0xFC0014,0xFC0014,0xFC0014,0xFC0014,0xFC0014,0xFC0014,0xFC0014,0x8CF80000,0x8CF80000,0x8CF80000,0x8CF80000,0x8CF80000, -0x8CF80000,0x84F80000,0x84F80000,0x84F80000,0x80F80001,0x1780012,0x1780012,0x1780012,0x1780012,0x1780012,0x1780012,0x84F00001,0x84F00001,0x84F00001,0x80F40001,0x41FC0012,0x41FC0012,0x41FC0012,0x80E40001,0x7E000012,0xD4F80000,0xFC0014,0xFC0014,0xA4F80000,0x98F80000,0x90F80000,0x90F80000,0x8AF80000,0xBCF00000,0x9EF40000,0x86F80001,0x84F00001, -0xFFC0012,}; -static const uint32_t g_etc1_to_bc7_m6_table17[] = { -0x1080000,0x1080000,0x1080000,0x1080000,0x1080000,0x1080000,0x1080000,0x1080000,0x1080000,0x1080000,0x1080000,0x1080000,0x1080000,0x1080000,0x1080000,0x1080000,0x1080000,0x1080000,0x1080000,0x1080000,0x1880000,0x1880000,0x1880000,0x1880000,0x1880000,0x1880000,0x1880000,0x1880000,0x1880000,0x1880000,0x49F80000, -0x49F80000,0x49F80000,0x49F80000,0x82000001,0x1080000,0x1080000,0x1080000,0x1080000,0x1080000,0x1080000,0x1080000,0x1080000,0x5180000,0x5180000,0x5180000,0x1880000,0x19FC0000,0x1140000,0x1140000,0x1140000,0x1140000,0x1140000,0x1140000,0x1140000,0x1140000,0x1140000,0x1140000,0x3980000,0x3980000,0x3980000,0x3980000,0x3980000, -0x3980000,0x51FC0000,0x51FC0000,0x51FC0000,0x88000001,0x3980000,0x3980000,0x3980000,0x3980000,0x3980000,0x3980000,0x51FC0000,0x51FC0000,0x51FC0000,0x88000001,0x51FC0000,0x51FC0000,0x51FC0000,0x88000001,0x88000001,0xB240000,0x1140000,0x1140000,0x1400000,0x3580000,0x1780000,0x1780000,0x1D00000,0x1400000,0x3580000,0x23FC0000,0x51FC0000, -0x23FC0000,0x11C0000,0x11C0000,0x11C0000,0x11C0000,0x3A40000,0x3A40000,0x3A40000,0x57FC0000,0x57FC0000,0x8C000001,0x3A40000,0x3A40000,0x3A40000,0x57FC0000,0x57FC0000,0x8C000001,0x57FC0000,0x57FC0000,0x8C000001,0x8C000001,0x3A40000,0x3A40000,0x3A40000,0x57FC0000,0x57FC0000,0x8C000001,0x57FC0000,0x57FC0000,0x8C000001,0x8C000001,0x57FC0000, -0x57FC0000,0x8C000001,0x8C000001,0x8C000001,0x5480000,0xF2C0000,0x11C0000,0x3800000,0x1DC0000,0x2BFC0000,0x41FC0000,0x65FC0000,0x1640000,0x3A40000,0x2BFC0000,0x8C000001,0x2BFC0000,0x1280000,0x1B80000,0x61F80000,0x92000001,0x1B80000,0x61F80000,0x92000001,0x61F80000,0x92000001,0x92000001,0x1B80000,0x61F80000,0x92000001,0x61F80000,0x92000001, -0x92000001,0x61F80000,0x92000001,0x92000001,0x92000001,0x1B80000,0x61F80000,0x92000001,0x61F80000,0x92000001,0x92000001,0x61F80000,0x92000001,0x92000001,0x92000001,0x61F80000,0x92000001,0x92000001,0x92000001,0x92000001,0x1740000,0x13C0000,0x13C0000,0x1F00000,0x4BFC0000,0x79F80000,0x92000001,0x92000001,0x3900000,0x1BFC0000,0x8DEC0000,0x92000001, -0x37FC0000,0x1180088,0xA7140034,0x99140034,0x93140035,0xA3100026,0x99100015,0x93100019,0x95100026,0x930C0016,0x910C0026,0xA5080033,0x9B080009,0x950C000F,0x97080012,0x93080002,0x91080016,0x95080033,0x9304000F,0x9104001A,0x8F080033,0x1A00088,0x9EFC0033,0x93080034,0x98FC0026,0x95000013,0x91040024,0x98F40033,0x92FC000A,0x90F80013,0x8EFC0033,0x55F80088, -0x92E80034,0x90E40024,0x8ED80033,0x8A00008C,0xCD080002,0xF110002E,0xF314003D,0xAB080001,0x9D080002,0x97080002,0x95080002,0x93080002,0xC7000001,0xA7040001,0x95040009,0x90F80013,0x27FC0088,0x11C0034,0xA3180008,0x97180009,0x93180009,0x9F140012,0x97140001,0x95140001,0x95140012,0x93140005,0x91140012,0x1A80033,0x990C0009,0x93100009,0x97080012,0x93080002, -0x910C0012,0x59FC0033,0x92FC0009,0x90F80012,0x8E000033,0x1A80033,0x990C0009,0x93100009,0x97080012,0x93080002,0x910C0012,0x59FC0033,0x92FC0009,0x90F80012,0x8E000033,0x59FC0033,0x92FC0009,0x90F80012,0x8E000033,0x8E000033,0xC90C0001,0xF3140012,0xF5180009,0xA50C0001,0x9D080002,0x97080002,0x930C0002,0x93040002,0xC7000001,0xA3080001,0x95040008,0x90F80012, -0x2DFC0033,0x1140034,0x1140034,0x1140034,0x1140034,0x99100014,0x99100014,0x99100014,0x91100014,0x91100014,0x8D0C0015,0x9B080008,0x9B080008,0x9B080008,0x93080001,0x93080001,0x8F080005,0x8F08000A,0x8F08000A,0x8D080001,0x8B08000A,0x1980033,0x1980033,0x1980033,0x95000012,0x95000012,0x8D080013,0x92FC0009,0x92FC0009,0x8D000002,0x8B00000A,0x51F80033, -0x51F80033,0x8CF40013,0x8AEC000A,0x88000033,0xCD080001,0xE1100014,0x1140034,0xA9080001,0x9D080001,0x97080001,0x95080001,0x91080001,0xC5000000,0xA7040000,0x93080009,0x8D000002,0x21FC0033,0x1180008,0x1180008,0x1180008,0x1180008,0x95140000,0x95140000,0x95140000,0x8F140001,0x8F140001,0x8D140001,0x1A00008,0x1A00008,0x1A00008,0x8F100001,0x8F100001, -0x8D100001,0x55F80008,0x55F80008,0x8D080001,0x8A00000A,0x1A00008,0x1A00008,0x1A00008,0x8F100001,0x8F100001,0x8D100001,0x55F80008,0x55F80008,0x8D080001,0x8A00000A,0x55F80008,0x55F80008,0x8D080001,0x8A00000A,0x8A00000A,0xBF0C0000,0xC3140000,0x1180008,0xA30C0000,0x990C0000,0x950C0000,0x91100001,0x910C0000,0xBB040000,0xA1080000,0x27FC0008,0x8D080001, -0x27FC0008,0x1200014,0x9F1C0000,0x971C0000,0x931C0001,0x1B00012,0x97140001,0x93180001,0x5DF40012,0x93080001,0x90000012,0x1B00012,0x97140001,0x93180001,0x5DF40012,0x93080001,0x90000012,0x5DF40012,0x93080001,0x90000012,0x90000012,0x1B00012,0x97140001,0x93180001,0x5DF40012,0x93080001,0x90000012,0x5DF40012,0x93080001,0x90000012,0x90000012,0x5DF40012, -0x93080001,0x90000012,0x90000012,0x90000012,0xD9040000,0x3340012,0xE71C0000,0xAB080000,0x9D080001,0x99040000,0x930C0001,0x93000001,0xCEFC0000,0xAB000000,0x950C0000,0x90000012,0x31FC0012,0x10C0014,0x10C0014,0x10C0014,0x10C0014,0x10C0014,0x10C0014,0x10C0014,0x10C0014,0x10C0014,0x10C0014,0x95080000,0x95080000,0x95080000,0x95080000,0x95080000, -0x95080000,0x8D080000,0x8D080000,0x8D080000,0x89080001,0x1900012,0x1900012,0x1900012,0x1900012,0x1900012,0x1900012,0x8D000001,0x8D000001,0x8D000001,0x89040001,0x4DFC0012,0x4DFC0012,0x4DFC0012,0x88F40001,0x86000012,0xDD080000,0x10C0014,0x10C0014,0xAD080000,0xA1080000,0x99080000,0x99080000,0x93080000,0xC5000000,0xA7040000,0x8F080001,0x8D000001, -0x1FF80012,}; -static const uint32_t g_etc1_to_bc7_m6_table18[] = { -0x1180000,0x1180000,0x1180000,0x1180000,0x1180000,0x1180000,0x1180000,0x1180000,0x1180000,0x1180000,0x1180000,0x1180000,0x1180000,0x1180000,0x1180000,0x1180000,0x1180000,0x1180000,0x1180000,0x1180000,0x1A00000,0x1A00000,0x1A00000,0x1A00000,0x1A00000,0x1A00000,0x1A00000,0x1A00000,0x1A00000,0x1A00000,0x55F80000, -0x55F80000,0x55F80000,0x55F80000,0x8A000001,0x1180000,0x1180000,0x1180000,0x1180000,0x1180000,0x1180000,0x1180000,0x1180000,0xD280000,0xD280000,0xD280000,0x1A00000,0x27FC0000,0x1240000,0x1240000,0x1240000,0x1240000,0x1240000,0x1240000,0x1240000,0x1240000,0x1240000,0x1240000,0x3B00000,0x3B00000,0x3B00000,0x3B00000,0x3B00000, -0x3B00000,0x5DFC0000,0x5DFC0000,0x5DFC0000,0x90000001,0x3B00000,0x3B00000,0x3B00000,0x3B00000,0x3B00000,0x3B00000,0x5DFC0000,0x5DFC0000,0x5DFC0000,0x90000001,0x5DFC0000,0x5DFC0000,0x5DFC0000,0x90000001,0x90000001,0x1380000,0x1240000,0x1240000,0x1540000,0x36C0000,0x18C0000,0x18C0000,0x1EC0000,0x1540000,0x36C0000,0x33FC0000,0x5DFC0000, -0x33FC0000,0x12C0000,0x12C0000,0x12C0000,0x12C0000,0x3BC0000,0x3BC0000,0x3BC0000,0x63FC0000,0x63FC0000,0x94000001,0x3BC0000,0x3BC0000,0x3BC0000,0x63FC0000,0x63FC0000,0x94000001,0x63FC0000,0x63FC0000,0x94000001,0x94000001,0x3BC0000,0x3BC0000,0x3BC0000,0x63FC0000,0x63FC0000,0x94000001,0x63FC0000,0x63FC0000,0x94000001,0x94000001,0x63FC0000, -0x63FC0000,0x94000001,0x94000001,0x94000001,0x15C0000,0x1400000,0x12C0000,0x1980000,0x1F80000,0x3BFC0000,0x4FFC0000,0x71F80000,0x1780000,0x3BC0000,0x3BFC0000,0x94000001,0x3BFC0000,0x1380000,0x1D00000,0x6DF80000,0x9A000001,0x1D00000,0x6DF80000,0x9A000001,0x6DF80000,0x9A000001,0x9A000001,0x1D00000,0x6DF80000,0x9A000001,0x6DF80000,0x9A000001, -0x9A000001,0x6DF80000,0x9A000001,0x9A000001,0x9A000001,0x1D00000,0x6DF80000,0x9A000001,0x6DF80000,0x9A000001,0x9A000001,0x6DF80000,0x9A000001,0x9A000001,0x9A000001,0x6DF80000,0x9A000001,0x9A000001,0x9A000001,0x9A000001,0x1880000,0x14C0000,0x14C0000,0xDFC0000,0x59FC0000,0x83F80000,0x9A000001,0x9A000001,0x1A80000,0x2DFC0000,0x95FC0000,0x9A000001, -0x45FC0000,0x1280088,0xAF240034,0xA1240034,0x9B240035,0xAB200026,0xA1200015,0x9B200019,0x9D200026,0x9B1C0016,0x991C0026,0xAD180033,0xA3180009,0x9D1C000F,0x9F180012,0x9B180002,0x99180016,0x9D180033,0x9B14000F,0x9914001A,0x97180033,0x1B80088,0xA70C0033,0x9B180034,0xA10C0026,0x9D100013,0x99140024,0xA1040033,0x9B0C000A,0x99080013,0x970C0033,0x61F80088, -0x9AF80034,0x98F40024,0x96E80033,0x9200008C,0xD5180002,0xF920002E,0xFB24003D,0xB3180001,0xA5180002,0x9F180002,0x9D180002,0x9B180002,0xCF100001,0xAF140001,0x9D140009,0x99080013,0x37FC0088,0x12C0034,0xAB280008,0x9F280009,0x9B280009,0xA7240012,0x9F240001,0x9D240001,0x9D240012,0x9B240005,0x99240012,0x1C00033,0xA11C0009,0x9B200009,0x9F180012,0x9B180002, -0x991C0012,0x65F80033,0x9B0C0009,0x99080012,0x96000033,0x1C00033,0xA11C0009,0x9B200009,0x9F180012,0x9B180002,0x991C0012,0x65F80033,0x9B0C0009,0x99080012,0x96000033,0x65F80033,0x9B0C0009,0x99080012,0x96000033,0x96000033,0xD11C0001,0xFB240012,0xFD280009,0xAD1C0001,0xA5180002,0x9F180002,0x9B1C0002,0x9B140002,0xCF100001,0xAB180001,0x9D140008,0x99080012, -0x3DF80033,0x1240034,0x1240034,0x1240034,0x1240034,0xA1200014,0xA1200014,0xA1200014,0x99200014,0x99200014,0x951C0015,0xA3180008,0xA3180008,0xA3180008,0x9B180001,0x9B180001,0x97180005,0x9718000A,0x9718000A,0x95180001,0x9318000A,0x1B00033,0x1B00033,0x1B00033,0x9D100012,0x9D100012,0x95180013,0x9B0C0009,0x9B0C0009,0x95100002,0x9310000A,0x5DF40033, -0x5DF40033,0x95040013,0x92FC000A,0x90000033,0xD5180001,0xE9200014,0x1240034,0xB1180001,0xA5180001,0x9F180001,0x9D180001,0x99180001,0xCD100000,0xAF140000,0x9B180009,0x95100002,0x31FC0033,0x1280008,0x1280008,0x1280008,0x1280008,0x9D240000,0x9D240000,0x9D240000,0x97240001,0x97240001,0x95240001,0x1B80008,0x1B80008,0x1B80008,0x97200001,0x97200001, -0x95200001,0x61F80008,0x61F80008,0x95180001,0x9200000A,0x1B80008,0x1B80008,0x1B80008,0x97200001,0x97200001,0x95200001,0x61F80008,0x61F80008,0x95180001,0x9200000A,0x61F80008,0x61F80008,0x95180001,0x9200000A,0x9200000A,0xC71C0000,0xCB240000,0x1280008,0xAB1C0000,0xA11C0000,0x9D1C0000,0x99200001,0x991C0000,0xC3140000,0xA9180000,0x37FC0008,0x95180001, -0x37FC0008,0x1300014,0xA72C0000,0x9F2C0000,0x9B2C0001,0x3C40012,0x9F240001,0x9B280001,0x67FC0012,0x9B180001,0x98000012,0x3C40012,0x9F240001,0x9B280001,0x67FC0012,0x9B180001,0x98000012,0x67FC0012,0x9B180001,0x98000012,0x98000012,0x3C40012,0x9F240001,0x9B280001,0x67FC0012,0x9B180001,0x98000012,0x67FC0012,0x9B180001,0x98000012,0x98000012,0x67FC0012, -0x9B180001,0x98000012,0x98000012,0x98000012,0xE1140000,0xB440012,0xEF2C0000,0xB3180000,0xA5180001,0xA1140000,0x9B1C0001,0x9B100001,0xD70C0000,0xB3100000,0x9D1C0000,0x98000012,0x3FFC0012,0x11C0014,0x11C0014,0x11C0014,0x11C0014,0x11C0014,0x11C0014,0x11C0014,0x11C0014,0x11C0014,0x11C0014,0x9D180000,0x9D180000,0x9D180000,0x9D180000,0x9D180000, -0x9D180000,0x95180000,0x95180000,0x95180000,0x91180001,0x1A80012,0x1A80012,0x1A80012,0x1A80012,0x1A80012,0x1A80012,0x95100001,0x95100001,0x95100001,0x91140001,0x59FC0012,0x59FC0012,0x59FC0012,0x91040001,0x8E000012,0xE5180000,0x11C0014,0x11C0014,0xB5180000,0xA9180000,0xA1180000,0xA1180000,0x9B180000,0xCD100000,0xAF140000,0x97180001,0x95100001, -0x2DFC0012,}; -static const uint32_t g_etc1_to_bc7_m6_table19[] = { -0x1280000,0x1280000,0x1280000,0x1280000,0x1280000,0x1280000,0x1280000,0x1280000,0x1280000,0x1280000,0x1280000,0x1280000,0x1280000,0x1280000,0x1280000,0x1280000,0x1280000,0x1280000,0x1280000,0x1280000,0x1B80000,0x1B80000,0x1B80000,0x1B80000,0x1B80000,0x1B80000,0x1B80000,0x1B80000,0x1B80000,0x1B80000,0x61F80000, -0x61F80000,0x61F80000,0x61F80000,0x92000001,0x1280000,0x1280000,0x1280000,0x1280000,0x1280000,0x1280000,0x1280000,0x1280000,0x13C0000,0x13C0000,0x13C0000,0x1B80000,0x37FC0000,0x1340000,0x1340000,0x1340000,0x1340000,0x1340000,0x1340000,0x1340000,0x1340000,0x1340000,0x1340000,0x1C80000,0x1C80000,0x1C80000,0x1C80000,0x1C80000, -0x1C80000,0x69FC0000,0x69FC0000,0x69FC0000,0x98000001,0x1C80000,0x1C80000,0x1C80000,0x1C80000,0x1C80000,0x1C80000,0x69FC0000,0x69FC0000,0x69FC0000,0x98000001,0x69FC0000,0x69FC0000,0x69FC0000,0x98000001,0x98000001,0x1480000,0x1340000,0x1340000,0x5640000,0x3800000,0x1A40000,0x1A40000,0x7FC0000,0x5640000,0x3800000,0x41FC0000,0x69FC0000, -0x41FC0000,0x13C0000,0x13C0000,0x13C0000,0x13C0000,0x1D40000,0x1D40000,0x1D40000,0x6FFC0000,0x6FFC0000,0x9C000001,0x1D40000,0x1D40000,0x1D40000,0x6FFC0000,0x6FFC0000,0x9C000001,0x6FFC0000,0x6FFC0000,0x9C000001,0x9C000001,0x1D40000,0x1D40000,0x1D40000,0x6FFC0000,0x6FFC0000,0x9C000001,0x6FFC0000,0x6FFC0000,0x9C000001,0x9C000001,0x6FFC0000, -0x6FFC0000,0x9C000001,0x9C000001,0x9C000001,0x1700000,0x1500000,0x13C0000,0x3AC0000,0x11FC0000,0x49FC0000,0x5DF80000,0x7BFC0000,0x18C0000,0x1D40000,0x49FC0000,0x9C000001,0x49FC0000,0x1480000,0x1E80000,0x79F80000,0xA2000001,0x1E80000,0x79F80000,0xA2000001,0x79F80000,0xA2000001,0xA2000001,0x1E80000,0x79F80000,0xA2000001,0x79F80000,0xA2000001, -0xA2000001,0x79F80000,0xA2000001,0xA2000001,0xA2000001,0x1E80000,0x79F80000,0xA2000001,0x79F80000,0xA2000001,0xA2000001,0x79F80000,0xA2000001,0xA2000001,0xA2000001,0x79F80000,0xA2000001,0xA2000001,0xA2000001,0xA2000001,0x19C0000,0x75C0000,0x75C0000,0x21FC0000,0x67F80000,0x8DF80000,0xA2000001,0xA2000001,0x3BC0000,0x3DFC0000,0x9FD00000,0xA2000001, -0x55FC0000,0x1380088,0xB7340034,0xA9340034,0xA3340035,0xB3300026,0xA9300015,0xA3300019,0xA5300026,0xA32C0016,0xA12C0026,0xB5280033,0xAB280009,0xA52C000F,0xA7280012,0xA3280002,0xA1280016,0xA5280033,0xA324000F,0xA124001A,0x9F280033,0x1D00088,0xAF1C0033,0xA3280034,0xA91C0026,0xA5200013,0xA1240024,0xA9140033,0xA31C000A,0xA1180013,0x9F1C0033,0x6DF80088, -0xA3080034,0xA1040024,0x9EF80033,0x9A00008C,0xDD280002,0xF1300038,0xF3340044,0xBB280001,0xAD280002,0xA7280002,0xA5280002,0xA3280002,0xD7200001,0xB7240001,0xA5240009,0xA1180013,0x45FC0088,0x13C0034,0xB3380008,0xA7380009,0xA3380009,0xAF340012,0xA7340001,0xA5340001,0xA5340012,0xA3340005,0xA1340012,0x1D80033,0xA92C0009,0xA3300009,0xA7280012,0xA3280002, -0xA12C0012,0x71F80033,0xA31C0009,0xA1180012,0x9E000033,0x1D80033,0xA92C0009,0xA3300009,0xA7280012,0xA3280002,0xA12C0012,0x71F80033,0xA31C0009,0xA1180012,0x9E000033,0x71F80033,0xA31C0009,0xA1180012,0x9E000033,0x9E000033,0xD92C0001,0xF3340014,0xF538000C,0xB52C0001,0xAD280002,0xA7280002,0xA32C0002,0xA3240002,0xD7200001,0xB3280001,0xA5240008,0xA1180012, -0x4BFC0033,0x1340034,0x1340034,0x1340034,0x1340034,0xA9300014,0xA9300014,0xA9300014,0xA1300014,0xA1300014,0x9D2C0015,0xAB280008,0xAB280008,0xAB280008,0xA3280001,0xA3280001,0x9F280005,0x9F28000A,0x9F28000A,0x9D280001,0x9B28000A,0x3C40033,0x3C40033,0x3C40033,0xA5200012,0xA5200012,0x9D280013,0xA31C0009,0xA31C0009,0x9D200002,0x9B20000A,0x67FC0033, -0x67FC0033,0x9D140013,0x9B0C000A,0x98000033,0xDD280001,0xF1300014,0x1340034,0xB9280001,0xAD280001,0xA7280001,0xA5280001,0xA1280001,0xD5200000,0xB7240000,0xA3280009,0x9D200002,0x3FFC0033,0x1380008,0x1380008,0x1380008,0x1380008,0xA5340000,0xA5340000,0xA5340000,0x9F340001,0x9F340001,0x9D340001,0x1D00008,0x1D00008,0x1D00008,0x9F300001,0x9F300001, -0x9D300001,0x6DF80008,0x6DF80008,0x9D280001,0x9A00000A,0x1D00008,0x1D00008,0x1D00008,0x9F300001,0x9F300001,0x9D300001,0x6DF80008,0x6DF80008,0x9D280001,0x9A00000A,0x6DF80008,0x6DF80008,0x9D280001,0x9A00000A,0x9A00000A,0xCF2C0000,0xD3340000,0x1380008,0xB32C0000,0xA92C0000,0xA52C0000,0xA1300001,0xA12C0000,0xCB240000,0xB1280000,0x45FC0008,0x9D280001, -0x45FC0008,0x1400014,0xAF3C0000,0xA73C0000,0xA33C0001,0x3DC0012,0xA7340001,0xA3380001,0x73FC0012,0xA3280001,0xA0000012,0x3DC0012,0xA7340001,0xA3380001,0x73FC0012,0xA3280001,0xA0000012,0x73FC0012,0xA3280001,0xA0000012,0xA0000012,0x3DC0012,0xA7340001,0xA3380001,0x73FC0012,0xA3280001,0xA0000012,0x73FC0012,0xA3280001,0xA0000012,0xA0000012,0x73FC0012, -0xA3280001,0xA0000012,0xA0000012,0xA0000012,0xE9240000,0x1580012,0xF73C0000,0xBB280000,0xAD280001,0xA9240000,0xA32C0001,0xA3200001,0xDF1C0000,0xBB200000,0xA52C0000,0xA0000012,0x4FFC0012,0x12C0014,0x12C0014,0x12C0014,0x12C0014,0x12C0014,0x12C0014,0x12C0014,0x12C0014,0x12C0014,0x12C0014,0xA5280000,0xA5280000,0xA5280000,0xA5280000,0xA5280000, -0xA5280000,0x9D280000,0x9D280000,0x9D280000,0x99280001,0x1C00012,0x1C00012,0x1C00012,0x1C00012,0x1C00012,0x1C00012,0x9D200001,0x9D200001,0x9D200001,0x99240001,0x65F80012,0x65F80012,0x65F80012,0x99140001,0x96000012,0xED280000,0x12C0014,0x12C0014,0xBD280000,0xB1280000,0xA9280000,0xA9280000,0xA3280000,0xD5200000,0xB7240000,0x9F280001,0x9D200001, -0x3DF80012,}; -static const uint32_t g_etc1_to_bc7_m6_table20[] = { -0x1380001,0x1380001,0x1380001,0x1380001,0x1380001,0x1380001,0x1380001,0x1380001,0x1380001,0x1380001,0x1380001,0x1380001,0x1380001,0x1380001,0x1380001,0x1380001,0x1380001,0x1380001,0x1380001,0x1380001,0x3D00000,0x3D00000,0x3D00000,0x3D00000,0x3D00000,0x3D00000,0x3D00000,0x3D00000,0x3D00000,0x3D00000,0x6DFC0000, -0x6DFC0000,0x6DFC0000,0x6DFC0000,0x9C000000,0x1380001,0x1380001,0x1380001,0x1380001,0x1380001,0x1380001,0x1380001,0x1380001,0xF4C0000,0xF4C0000,0xF4C0000,0x3D00000,0x47FC0000,0x1440001,0x1440001,0x1440001,0x1440001,0x1440001,0x1440001,0x1440001,0x1440001,0x1440001,0x1440001,0x1E40000,0x1E40000,0x1E40000,0x1E40000,0x1E40000, -0x1E40000,0x77F80000,0x77F80000,0x77F80000,0xA2000000,0x1E40000,0x1E40000,0x1E40000,0x1E40000,0x1E40000,0x1E40000,0x77F80000,0x77F80000,0x77F80000,0xA2000000,0x77F80000,0x77F80000,0x77F80000,0xA2000000,0xA2000000,0x15C0000,0x1440001,0x1440001,0x17C0000,0x1980000,0x1BC0000,0x1BC0000,0x1DFC0000,0x17C0000,0x1980000,0x53FC0000,0x77F80000, -0x53FC0000,0x14C0001,0x14C0001,0x14C0001,0x14C0001,0x1F00000,0x1F00000,0x1F00000,0x7DF80000,0x7DF80000,0xA6000000,0x1F00000,0x1F00000,0x1F00000,0x7DF80000,0x7DF80000,0xA6000000,0x7DF80000,0x7DF80000,0xA6000000,0xA6000000,0x1F00000,0x1F00000,0x1F00000,0x7DF80000,0x7DF80000,0xA6000000,0x7DF80000,0x7DF80000,0xA6000000,0xA6000000,0x7DF80000, -0x7DF80000,0xA6000000,0xA6000000,0xA6000000,0x1840000,0x1640000,0x14C0001,0x3C40000,0x27FC0000,0x5BFC0000,0x6BFC0000,0x87FC0000,0x5A00000,0x1F00000,0x5BFC0000,0xA6000000,0x5BFC0000,0x1580001,0x7FC0000,0x85FC0000,0xAC000000,0x7FC0000,0x85FC0000,0xAC000000,0x85FC0000,0xAC000000,0xAC000000,0x7FC0000,0x85FC0000,0xAC000000,0x85FC0000,0xAC000000, -0xAC000000,0x85FC0000,0xAC000000,0xAC000000,0xAC000000,0x7FC0000,0x85FC0000,0xAC000000,0x85FC0000,0xAC000000,0xAC000000,0x85FC0000,0xAC000000,0xAC000000,0xAC000000,0x85FC0000,0xAC000000,0xAC000000,0xAC000000,0xAC000000,0x3B00000,0x1700000,0x1700000,0x37FC0000,0x75FC0000,0x99F40000,0xAC000000,0xAC000000,0x3D40000,0x51FC0000,0xA9C40000,0xAC000000, -0x65FC0000,0x148008C,0xC3440033,0xB3440033,0xAD440033,0xBD400024,0xB3400013,0xAF40001A,0xAF400024,0xAB400016,0xA9400026,0xBB3C0034,0xB33C000A,0xAF3C000F,0xB1380013,0xAD380002,0xA93C0016,0xAD3C0034,0xAB38000F,0xA9380019,0xA7380035,0x3E80088,0xB7300033,0xAD380033,0xB1300026,0xAD340012,0xA9380026,0xB3240033,0xAD280009,0xA92C0015,0xA7300034,0x79FC0088, -0xAD140033,0xA91C0026,0xA7100034,0xA4000088,0xE73C0002,0xFB440034,0xFD480044,0xC13C0002,0xB53C0002,0xAF3C0002,0xAD3C0002,0xAD380002,0xE3300001,0xC3340001,0xAD380009,0xA92C0015,0x57FC0088,0x1500033,0xBB4C000A,0xB148000A,0xAD48000A,0xB5480013,0xB1440002,0xAD480001,0xAD480013,0xAD440005,0xA9440015,0x1F40033,0xB33C0009,0xAD40000A,0xB1380012,0xAD380001, -0xA9400014,0x7FF80033,0xAD280008,0xA92C0014,0xA6000034,0x1F40033,0xB33C0009,0xAD40000A,0xB1380012,0xAD380001,0xA9400014,0x7FF80033,0xAD280008,0xA92C0014,0xA6000034,0x7FF80033,0xAD280008,0xA92C0014,0xA6000034,0xA6000034,0xE73C0001,0xFD480013,0xFF4C000B,0xC13C0001,0xB53C0001,0xAF3C0001,0xAD3C0001,0xAD380001,0xE3300001,0xBF380001,0xAD380009,0xA92C0014, -0x5DF80033,0x1440033,0x1440033,0x1440033,0x1440033,0xB5400012,0xB5400012,0xB5400012,0xAB400012,0xAB400012,0xA7400012,0xB33C0009,0xB33C0009,0xB33C0009,0xAB3C0002,0xAB3C0002,0xA73C0005,0xA9380009,0xA9380009,0xA7380001,0xA5380009,0x1E00033,0x1E00033,0x1E00033,0xAD340012,0xAD340012,0xA7380012,0xAB300009,0xAB300009,0xA7300001,0xA5300009,0x75FC0033, -0x75FC0033,0xA7240012,0xA5180008,0xA2000034,0xDB3C0002,0xF9400013,0x1440033,0xBF3C0001,0xB53C0001,0xAF3C0001,0xAD3C0002,0xAB380002,0xE3300000,0xBD380001,0xAD380008,0xA7300001,0x51FC0033,0x148000A,0x148000A,0x148000A,0x148000A,0xAD480001,0xAD480001,0xAD480001,0xA9440001,0xA9440001,0xA7440001,0x3E80008,0x3E80008,0x3E80008,0xA9400001,0xA9400001, -0xA7400001,0x79FC0008,0x79FC0008,0xA7340000,0xA4000008,0x3E80008,0x3E80008,0x3E80008,0xA9400001,0xA9400001,0xA7400001,0x79FC0008,0x79FC0008,0xA7340000,0xA4000008,0x79FC0008,0x79FC0008,0xA7340000,0xA4000008,0xA4000008,0xCF400000,0xCD480001,0x148000A,0xBF3C0000,0xB1400000,0xAD400000,0xAB400000,0xA9400001,0xD1380000,0xB93C0000,0x57FC0008,0xA7340000, -0x57FC0008,0x1540012,0xB7500001,0xAF500001,0xAD4C0001,0x1F80012,0xB1440001,0xAD480000,0x81FC0012,0xAD340000,0xA8000014,0x1F80012,0xB1440001,0xAD480000,0x81FC0012,0xAD340000,0xA8000014,0x81FC0012,0xAD340000,0xA8000014,0xA8000014,0x1F80012,0xB1440001,0xAD480000,0x81FC0012,0xAD340000,0xA8000014,0x81FC0012,0xAD340000,0xA8000014,0xA8000014,0x81FC0012, -0xAD340000,0xA8000014,0xA8000014,0xA8000014,0xF7340000,0xD680012,0xF1500001,0xC5380000,0xB53C0001,0xB1380000,0xAD3C0000,0xAD2C0000,0xEB2C0000,0xC3340000,0xAD400001,0xA8000014,0x5FFC0012,0x1400012,0x1400012,0x1400012,0x1400012,0x1400012,0x1400012,0x1400012,0x1400012,0x1400012,0x1400012,0xAD3C0001,0xAD3C0001,0xAD3C0001,0xAD3C0001,0xAD3C0001, -0xAD3C0001,0xA53C0001,0xA53C0001,0xA53C0001,0xA3380001,0x1DC0012,0x1DC0012,0x1DC0012,0x1DC0012,0x1DC0012,0x1DC0012,0xA7300001,0xA7300001,0xA7300001,0xA3340000,0x73F80012,0x73F80012,0x73F80012,0xA3200000,0x9E000014,0xE73C0001,0x1400012,0x1400012,0xBF3C0001,0xB53C0001,0xAF3C0001,0xAF3C0001,0xAB3C0001,0xE3300000,0xC5340000,0xA9380000,0xA7300001, -0x4DFC0012,}; -static const uint32_t g_etc1_to_bc7_m6_table21[] = { -0x1480001,0x1480001,0x1480001,0x1480001,0x1480001,0x1480001,0x1480001,0x1480001,0x1480001,0x1480001,0x1480001,0x1480001,0x1480001,0x1480001,0x1480001,0x1480001,0x1480001,0x1480001,0x1480001,0x1480001,0x3E80000,0x3E80000,0x3E80000,0x3E80000,0x3E80000,0x3E80000,0x3E80000,0x3E80000,0x3E80000,0x3E80000,0x79FC0000, -0x79FC0000,0x79FC0000,0x79FC0000,0xA4000000,0x1480001,0x1480001,0x1480001,0x1480001,0x1480001,0x1480001,0x1480001,0x1480001,0x1600000,0x1600000,0x1600000,0x3E80000,0x57FC0000,0x1540001,0x1540001,0x1540001,0x1540001,0x1540001,0x1540001,0x1540001,0x1540001,0x1540001,0x1540001,0x1FC0000,0x1FC0000,0x1FC0000,0x1FC0000,0x1FC0000, -0x1FC0000,0x83F80000,0x83F80000,0x83F80000,0xAA000000,0x1FC0000,0x1FC0000,0x1FC0000,0x1FC0000,0x1FC0000,0x1FC0000,0x83F80000,0x83F80000,0x83F80000,0xAA000000,0x83F80000,0x83F80000,0x83F80000,0xAA000000,0xAA000000,0x16C0000,0x1540001,0x1540001,0x38C0000,0x1AC0000,0x1D00000,0x1D00000,0x31FC0000,0x38C0000,0x1AC0000,0x61FC0000,0x83F80000, -0x61FC0000,0x15C0001,0x15C0001,0x15C0001,0x15C0001,0xDFC0000,0xDFC0000,0xDFC0000,0x89F80000,0x89F80000,0xAE000000,0xDFC0000,0xDFC0000,0xDFC0000,0x89F80000,0x89F80000,0xAE000000,0x89F80000,0x89F80000,0xAE000000,0xAE000000,0xDFC0000,0xDFC0000,0xDFC0000,0x89F80000,0x89F80000,0xAE000000,0x89F80000,0x89F80000,0xAE000000,0xAE000000,0x89F80000, -0x89F80000,0xAE000000,0xAE000000,0xAE000000,0x1980000,0x3740000,0x15C0001,0x1DC0000,0x3BFC0000,0x69FC0000,0x79FC0000,0x93F80000,0x5B40000,0xDFC0000,0x69FC0000,0xAE000000,0x69FC0000,0x1680001,0x1FFC0000,0x91FC0000,0xB4000000,0x1FFC0000,0x91FC0000,0xB4000000,0x91FC0000,0xB4000000,0xB4000000,0x1FFC0000,0x91FC0000,0xB4000000,0x91FC0000,0xB4000000, -0xB4000000,0x91FC0000,0xB4000000,0xB4000000,0xB4000000,0x1FFC0000,0x91FC0000,0xB4000000,0x91FC0000,0xB4000000,0xB4000000,0x91FC0000,0xB4000000,0xB4000000,0xB4000000,0x91FC0000,0xB4000000,0xB4000000,0xB4000000,0xB4000000,0x3C40000,0x9800000,0x9800000,0x4BFC0000,0x83FC0000,0xA3F40000,0xB4000000,0xB4000000,0x1EC0000,0x63FC0000,0xB1D40000,0xB4000000, -0x75FC0000,0x158008C,0xCB540033,0xBB540033,0xB5540033,0xC5500024,0xBB500013,0xB750001A,0xB7500024,0xB3500016,0xB1500026,0xC34C0034,0xBB4C000A,0xB74C000F,0xB9480013,0xB5480002,0xB14C0016,0xB54C0034,0xB348000F,0xB1480019,0xAF480035,0x7FC0088,0xBF400033,0xB5480033,0xB9400026,0xB5440012,0xB1480026,0xBB340033,0xB5380009,0xB13C0015,0xAF400034,0x85FC0088, -0xB5240033,0xB12C0026,0xAF200034,0xAC000088,0xEF4C0002,0xF354003E,0xF558004B,0xC94C0002,0xBD4C0002,0xB74C0002,0xB54C0002,0xB5480002,0xEB400001,0xCB440001,0xB5480009,0xB13C0015,0x65FC0088,0x1600033,0xC35C000A,0xB958000A,0xB558000A,0xBD580013,0xB9540002,0xB5580001,0xB5580013,0xB5540005,0xB1540015,0xFFC0033,0xBB4C0009,0xB550000A,0xB9480012,0xB5480001, -0xB1500014,0x8BF80033,0xB5380008,0xB13C0014,0xAE000034,0xFFC0033,0xBB4C0009,0xB550000A,0xB9480012,0xB5480001,0xB1500014,0x8BF80033,0xB5380008,0xB13C0014,0xAE000034,0x8BF80033,0xB5380008,0xB13C0014,0xAE000034,0xAE000034,0xEF4C0001,0xF5580015,0xF75C000E,0xC94C0001,0xBD4C0001,0xB74C0001,0xB54C0001,0xB5480001,0xEB400001,0xC7480001,0xB5480009,0xB13C0014, -0x6BFC0033,0x1540033,0x1540033,0x1540033,0x1540033,0xBD500012,0xBD500012,0xBD500012,0xB3500012,0xB3500012,0xAF500012,0xBB4C0009,0xBB4C0009,0xBB4C0009,0xB34C0002,0xB34C0002,0xAF4C0005,0xB1480009,0xB1480009,0xAF480001,0xAD480009,0x1F80033,0x1F80033,0x1F80033,0xB5440012,0xB5440012,0xAF480012,0xB3400009,0xB3400009,0xAF400001,0xAD400009,0x81FC0033, -0x81FC0033,0xAF340012,0xAD280008,0xAA000034,0xE34C0002,0xF1500016,0x1540033,0xC74C0001,0xBD4C0001,0xB74C0001,0xB54C0002,0xB3480002,0xEB400000,0xC5480001,0xB5480008,0xAF400001,0x5FFC0033,0x158000A,0x158000A,0x158000A,0x158000A,0xB5580001,0xB5580001,0xB5580001,0xB1540001,0xB1540001,0xAF540001,0x7FC0008,0x7FC0008,0x7FC0008,0xB1500001,0xB1500001, -0xAF500001,0x85FC0008,0x85FC0008,0xAF440000,0xAC000008,0x7FC0008,0x7FC0008,0x7FC0008,0xB1500001,0xB1500001,0xAF500001,0x85FC0008,0x85FC0008,0xAF440000,0xAC000008,0x85FC0008,0x85FC0008,0xAF440000,0xAC000008,0xAC000008,0xD7500000,0xD5580001,0x158000A,0xC74C0000,0xB9500000,0xB5500000,0xB3500000,0xB1500001,0xD9480000,0xC14C0000,0x65FC0008,0xAF440000, -0x65FC0008,0x1640012,0xBF600001,0xB7600001,0xB55C0001,0x15FC0012,0xB9540001,0xB5580000,0x8DFC0012,0xB5440000,0xB0000014,0x15FC0012,0xB9540001,0xB5580000,0x8DFC0012,0xB5440000,0xB0000014,0x8DFC0012,0xB5440000,0xB0000014,0xB0000014,0x15FC0012,0xB9540001,0xB5580000,0x8DFC0012,0xB5440000,0xB0000014,0x8DFC0012,0xB5440000,0xB0000014,0xB0000014,0x8DFC0012, -0xB5440000,0xB0000014,0xB0000014,0xB0000014,0xFF440000,0x17C0012,0xF9600001,0xCD480000,0xBD4C0001,0xB9480000,0xB54C0000,0xB53C0000,0xF33C0000,0xCB440000,0xB5500001,0xB0000014,0x6FFC0012,0x1500012,0x1500012,0x1500012,0x1500012,0x1500012,0x1500012,0x1500012,0x1500012,0x1500012,0x1500012,0xB54C0001,0xB54C0001,0xB54C0001,0xB54C0001,0xB54C0001, -0xB54C0001,0xAD4C0001,0xAD4C0001,0xAD4C0001,0xAB480001,0x1F40012,0x1F40012,0x1F40012,0x1F40012,0x1F40012,0x1F40012,0xAF400001,0xAF400001,0xAF400001,0xAB440000,0x7FF80012,0x7FF80012,0x7FF80012,0xAB300000,0xA6000014,0xEF4C0001,0x1500012,0x1500012,0xC74C0001,0xBD4C0001,0xB74C0001,0xB74C0001,0xB34C0001,0xEB400000,0xCD440000,0xB1480000,0xAF400001, -0x5DF80012,}; -static const uint32_t g_etc1_to_bc7_m6_table22[] = { -0x1580001,0x1580001,0x1580001,0x1580001,0x1580001,0x1580001,0x1580001,0x1580001,0x1580001,0x1580001,0x1580001,0x1580001,0x1580001,0x1580001,0x1580001,0x1580001,0x1580001,0x1580001,0x1580001,0x1580001,0x7FC0000,0x7FC0000,0x7FC0000,0x7FC0000,0x7FC0000,0x7FC0000,0x7FC0000,0x7FC0000,0x7FC0000,0x7FC0000,0x85FC0000, -0x85FC0000,0x85FC0000,0x85FC0000,0xAC000000,0x1580001,0x1580001,0x1580001,0x1580001,0x1580001,0x1580001,0x1580001,0x1580001,0x1700000,0x1700000,0x1700000,0x7FC0000,0x65FC0000,0x1640001,0x1640001,0x1640001,0x1640001,0x1640001,0x1640001,0x1640001,0x1640001,0x1640001,0x1640001,0x19FC0000,0x19FC0000,0x19FC0000,0x19FC0000,0x19FC0000, -0x19FC0000,0x8FF80000,0x8FF80000,0x8FF80000,0xB2000000,0x19FC0000,0x19FC0000,0x19FC0000,0x19FC0000,0x19FC0000,0x19FC0000,0x8FF80000,0x8FF80000,0x8FF80000,0xB2000000,0x8FF80000,0x8FF80000,0x8FF80000,0xB2000000,0xB2000000,0x77C0000,0x1640001,0x1640001,0x1A00000,0x1C00000,0x1E80000,0x1E80000,0x45FC0000,0x1A00000,0x1C00000,0x71FC0000,0x8FF80000, -0x71FC0000,0x16C0001,0x16C0001,0x16C0001,0x16C0001,0x25FC0000,0x25FC0000,0x25FC0000,0x95F80000,0x95F80000,0xB6000000,0x25FC0000,0x25FC0000,0x25FC0000,0x95F80000,0x95F80000,0xB6000000,0x95F80000,0x95F80000,0xB6000000,0xB6000000,0x25FC0000,0x25FC0000,0x25FC0000,0x95F80000,0x95F80000,0xB6000000,0x95F80000,0x95F80000,0xB6000000,0xB6000000,0x95F80000, -0x95F80000,0xB6000000,0xB6000000,0xB6000000,0x3A80000,0xB840000,0x16C0001,0x3F00000,0x4FFC0000,0x79FC0000,0x87F80000,0x9DFC0000,0x1CC0000,0x25FC0000,0x79FC0000,0xB6000000,0x79FC0000,0x1780001,0x37FC0000,0x9DFC0000,0xBC000000,0x37FC0000,0x9DFC0000,0xBC000000,0x9DFC0000,0xBC000000,0xBC000000,0x37FC0000,0x9DFC0000,0xBC000000,0x9DFC0000,0xBC000000, -0xBC000000,0x9DFC0000,0xBC000000,0xBC000000,0xBC000000,0x37FC0000,0x9DFC0000,0xBC000000,0x9DFC0000,0xBC000000,0xBC000000,0x9DFC0000,0xBC000000,0xBC000000,0xBC000000,0x9DFC0000,0xBC000000,0xBC000000,0xBC000000,0xBC000000,0x3D80000,0x1940000,0x1940000,0x5DFC0000,0x91FC0000,0xADF40000,0xBC000000,0xBC000000,0x9FC0000,0x73FC0000,0xB9E40000,0xBC000000, -0x83FC0000,0x168008C,0xD3640033,0xC3640033,0xBD640033,0xCD600024,0xC3600013,0xBF60001A,0xBF600024,0xBB600016,0xB9600026,0xCB5C0034,0xC35C000A,0xBF5C000F,0xC1580013,0xBD580002,0xB95C0016,0xBD5C0034,0xBB58000F,0xB9580019,0xB7580035,0x1FFC0088,0xC7500033,0xBD580033,0xC1500026,0xBD540012,0xB9580026,0xC3440033,0xBD480009,0xB94C0015,0xB7500034,0x91FC0088, -0xBD340033,0xB93C0026,0xB7300034,0xB4000088,0xF75C0002,0xFB64003E,0xFD68004B,0xD15C0002,0xC55C0002,0xBF5C0002,0xBD5C0002,0xBD580002,0xF3500001,0xD3540001,0xBD580009,0xB94C0015,0x75FC0088,0x1700033,0xCB6C000A,0xC168000A,0xBD68000A,0xC5680013,0xC1640002,0xBD680001,0xBD680013,0xBD640005,0xB9640015,0x29FC0033,0xC35C0009,0xBD60000A,0xC1580012,0xBD580001, -0xB9600014,0x97F80033,0xBD480008,0xB94C0014,0xB6000034,0x29FC0033,0xC35C0009,0xBD60000A,0xC1580012,0xBD580001,0xB9600014,0x97F80033,0xBD480008,0xB94C0014,0xB6000034,0x97F80033,0xBD480008,0xB94C0014,0xB6000034,0xB6000034,0xF75C0001,0xFD680015,0xFF6C000E,0xD15C0001,0xC55C0001,0xBF5C0001,0xBD5C0001,0xBD580001,0xF3500001,0xCF580001,0xBD580009,0xB94C0014, -0x7BFC0033,0x1640033,0x1640033,0x1640033,0x1640033,0xC5600012,0xC5600012,0xC5600012,0xBB600012,0xBB600012,0xB7600012,0xC35C0009,0xC35C0009,0xC35C0009,0xBB5C0002,0xBB5C0002,0xB75C0005,0xB9580009,0xB9580009,0xB7580001,0xB5580009,0x15FC0033,0x15FC0033,0x15FC0033,0xBD540012,0xBD540012,0xB7580012,0xBB500009,0xBB500009,0xB7500001,0xB5500009,0x8DFC0033, -0x8DFC0033,0xB7440012,0xB5380008,0xB2000034,0xEB5C0002,0xF9600016,0x1640033,0xCF5C0001,0xC55C0001,0xBF5C0001,0xBD5C0002,0xBB580002,0xF3500000,0xCD580001,0xBD580008,0xB7500001,0x6FFC0033,0x168000A,0x168000A,0x168000A,0x168000A,0xBD680001,0xBD680001,0xBD680001,0xB9640001,0xB9640001,0xB7640001,0x1FFC0008,0x1FFC0008,0x1FFC0008,0xB9600001,0xB9600001, -0xB7600001,0x91FC0008,0x91FC0008,0xB7540000,0xB4000008,0x1FFC0008,0x1FFC0008,0x1FFC0008,0xB9600001,0xB9600001,0xB7600001,0x91FC0008,0x91FC0008,0xB7540000,0xB4000008,0x91FC0008,0x91FC0008,0xB7540000,0xB4000008,0xB4000008,0xDF600000,0xDD680001,0x168000A,0xCF5C0000,0xC1600000,0xBD600000,0xBB600000,0xB9600001,0xE1580000,0xC95C0000,0x75FC0008,0xB7540000, -0x75FC0008,0x1740012,0xC7700001,0xBF700001,0xBD6C0001,0x2FFC0012,0xC1640001,0xBD680000,0x99FC0012,0xBD540000,0xB8000014,0x2FFC0012,0xC1640001,0xBD680000,0x99FC0012,0xBD540000,0xB8000014,0x99FC0012,0xBD540000,0xB8000014,0xB8000014,0x2FFC0012,0xC1640001,0xBD680000,0x99FC0012,0xBD540000,0xB8000014,0x99FC0012,0xBD540000,0xB8000014,0xB8000014,0x99FC0012, -0xBD540000,0xB8000014,0xB8000014,0xB8000014,0xF15C0001,0x18C0012,0xF1700002,0xD5580000,0xC55C0001,0xC1580000,0xBD5C0000,0xBD4C0000,0xFB4C0000,0xD3540000,0xBD600001,0xB8000014,0x7FF80012,0x1600012,0x1600012,0x1600012,0x1600012,0x1600012,0x1600012,0x1600012,0x1600012,0x1600012,0x1600012,0xBD5C0001,0xBD5C0001,0xBD5C0001,0xBD5C0001,0xBD5C0001, -0xBD5C0001,0xB55C0001,0xB55C0001,0xB55C0001,0xB3580001,0xFFC0012,0xFFC0012,0xFFC0012,0xFFC0012,0xFFC0012,0xFFC0012,0xB7500001,0xB7500001,0xB7500001,0xB3540000,0x8BF80012,0x8BF80012,0x8BF80012,0xB3400000,0xAE000014,0xF75C0001,0x1600012,0x1600012,0xCF5C0001,0xC55C0001,0xBF5C0001,0xBF5C0001,0xBB5C0001,0xF3500000,0xD5540000,0xB9580000,0xB7500001, -0x6BFC0012,}; -static const uint32_t g_etc1_to_bc7_m6_table23[] = { -0x1680001,0x1680001,0x1680001,0x1680001,0x1680001,0x1680001,0x1680001,0x1680001,0x1680001,0x1680001,0x1680001,0x1680001,0x1680001,0x1680001,0x1680001,0x1680001,0x1680001,0x1680001,0x1680001,0x1680001,0x1FFC0000,0x1FFC0000,0x1FFC0000,0x1FFC0000,0x1FFC0000,0x1FFC0000,0x1FFC0000,0x1FFC0000,0x1FFC0000,0x1FFC0000,0x91FC0000, -0x91FC0000,0x91FC0000,0x91FC0000,0xB4000000,0x1680001,0x1680001,0x1680001,0x1680001,0x1680001,0x1680001,0x1680001,0x1680001,0x9800000,0x9800000,0x9800000,0x1FFC0000,0x75FC0000,0x1740001,0x1740001,0x1740001,0x1740001,0x1740001,0x1740001,0x1740001,0x1740001,0x1740001,0x1740001,0x31FC0000,0x31FC0000,0x31FC0000,0x31FC0000,0x31FC0000, -0x31FC0000,0x9BF80000,0x9BF80000,0x9BF80000,0xBA000000,0x31FC0000,0x31FC0000,0x31FC0000,0x31FC0000,0x31FC0000,0x31FC0000,0x9BF80000,0x9BF80000,0x9BF80000,0xBA000000,0x9BF80000,0x9BF80000,0x9BF80000,0xBA000000,0xBA000000,0xF8C0000,0x1740001,0x1740001,0x1B40000,0x1D40000,0x1FC0000,0x1FC0000,0x59FC0000,0x1B40000,0x1D40000,0x7FFC0000,0x9BF80000, -0x7FFC0000,0x17C0001,0x17C0001,0x17C0001,0x17C0001,0x3DFC0000,0x3DFC0000,0x3DFC0000,0xA1F80000,0xA1F80000,0xBE000000,0x3DFC0000,0x3DFC0000,0x3DFC0000,0xA1F80000,0xA1F80000,0xBE000000,0xA1F80000,0xA1F80000,0xBE000000,0xBE000000,0x3DFC0000,0x3DFC0000,0x3DFC0000,0xA1F80000,0xA1F80000,0xBE000000,0xA1F80000,0xA1F80000,0xBE000000,0xBE000000,0xA1F80000, -0xA1F80000,0xBE000000,0xBE000000,0xBE000000,0x1BC0000,0x1980000,0x17C0001,0xFFC0000,0x63FC0000,0x87FC0000,0x95F80000,0xA9F40000,0x1E00000,0x3DFC0000,0x87FC0000,0xBE000000,0x87FC0000,0x1880001,0x4FFC0000,0xA9FC0000,0xC4000000,0x4FFC0000,0xA9FC0000,0xC4000000,0xA9FC0000,0xC4000000,0xC4000000,0x4FFC0000,0xA9FC0000,0xC4000000,0xA9FC0000,0xC4000000, -0xC4000000,0xA9FC0000,0xC4000000,0xC4000000,0xC4000000,0x4FFC0000,0xA9FC0000,0xC4000000,0xA9FC0000,0xC4000000,0xC4000000,0xA9FC0000,0xC4000000,0xC4000000,0xC4000000,0xA9FC0000,0xC4000000,0xC4000000,0xC4000000,0xC4000000,0x3EC0000,0x1A40000,0x1A40000,0x71FC0000,0x9FF80000,0xB7F40000,0xC4000000,0xC4000000,0x27FC0000,0x85FC0000,0xC1F40000,0xC4000000, -0x93FC0000,0x178008C,0xDB740033,0xCB740033,0xC5740033,0xD5700024,0xCB700013,0xC770001A,0xC7700024,0xC3700016,0xC1700026,0xD36C0034,0xCB6C000A,0xC76C000F,0xC9680013,0xC5680002,0xC16C0016,0xC56C0034,0xC368000F,0xC1680019,0xBF680035,0x37FC0088,0xCF600033,0xC5680033,0xC9600026,0xC5640012,0xC1680026,0xCB540033,0xC5580009,0xC15C0015,0xBF600034,0x9DFC0088, -0xC5440033,0xC14C0026,0xBF400034,0xBC000088,0xFF6C0002,0xF374004C,0xF5780054,0xD96C0002,0xCD6C0002,0xC76C0002,0xC56C0002,0xC5680002,0xFB600001,0xDB640001,0xC5680009,0xC15C0015,0x83FC0088,0x1800033,0xD37C000A,0xC978000A,0xC578000A,0xCD780013,0xC9740002,0xC5780001,0xC5780013,0xC5740005,0xC1740015,0x41FC0033,0xCB6C0009,0xC570000A,0xC9680012,0xC5680001, -0xC1700014,0xA1FC0033,0xC5580008,0xC15C0014,0xBE000034,0x41FC0033,0xCB6C0009,0xC570000A,0xC9680012,0xC5680001,0xC1700014,0xA1FC0033,0xC5580008,0xC15C0014,0xBE000034,0xA1FC0033,0xC5580008,0xC15C0014,0xBE000034,0xBE000034,0xFF6C0001,0xF578001B,0xF77C0013,0xD96C0001,0xCD6C0001,0xC76C0001,0xC56C0001,0xC5680001,0xFB600001,0xD7680001,0xC5680009,0xC15C0014, -0x89FC0033,0x1740033,0x1740033,0x1740033,0x1740033,0xCD700012,0xCD700012,0xCD700012,0xC3700012,0xC3700012,0xBF700012,0xCB6C0009,0xCB6C0009,0xCB6C0009,0xC36C0002,0xC36C0002,0xBF6C0005,0xC1680009,0xC1680009,0xBF680001,0xBD680009,0x2FFC0033,0x2FFC0033,0x2FFC0033,0xC5640012,0xC5640012,0xBF680012,0xC3600009,0xC3600009,0xBF600001,0xBD600009,0x99FC0033, -0x99FC0033,0xBF540012,0xBD480008,0xBA000034,0xF36C0002,0xF170001B,0x1740033,0xD76C0001,0xCD6C0001,0xC76C0001,0xC56C0002,0xC3680002,0xFB600000,0xD5680001,0xC5680008,0xBF600001,0x7FF80033,0x178000A,0x178000A,0x178000A,0x178000A,0xC5780001,0xC5780001,0xC5780001,0xC1740001,0xC1740001,0xBF740001,0x37FC0008,0x37FC0008,0x37FC0008,0xC1700001,0xC1700001, -0xBF700001,0x9DFC0008,0x9DFC0008,0xBF640000,0xBC000008,0x37FC0008,0x37FC0008,0x37FC0008,0xC1700001,0xC1700001,0xBF700001,0x9DFC0008,0x9DFC0008,0xBF640000,0xBC000008,0x9DFC0008,0x9DFC0008,0xBF640000,0xBC000008,0xBC000008,0xE7700000,0xE5780001,0x178000A,0xD76C0000,0xC9700000,0xC5700000,0xC3700000,0xC1700001,0xE9680000,0xD16C0000,0x83FC0008,0xBF640000, -0x83FC0008,0x1840012,0xCF800001,0xC7800001,0xC57C0001,0x47FC0012,0xC9740001,0xC5780000,0xA5F80012,0xC5640000,0xC0000014,0x47FC0012,0xC9740001,0xC5780000,0xA5F80012,0xC5640000,0xC0000014,0xA5F80012,0xC5640000,0xC0000014,0xC0000014,0x47FC0012,0xC9740001,0xC5780000,0xA5F80012,0xC5640000,0xC0000014,0xA5F80012,0xC5640000,0xC0000014,0xC0000014,0xA5F80012, -0xC5640000,0xC0000014,0xC0000014,0xC0000014,0xF96C0001,0x79C0012,0xF9800002,0xDD680000,0xCD6C0001,0xC9680000,0xC56C0000,0xC55C0000,0xF9640001,0xDB640000,0xC5700001,0xC0000014,0x8DFC0012,0x1700012,0x1700012,0x1700012,0x1700012,0x1700012,0x1700012,0x1700012,0x1700012,0x1700012,0x1700012,0xC56C0001,0xC56C0001,0xC56C0001,0xC56C0001,0xC56C0001, -0xC56C0001,0xBD6C0001,0xBD6C0001,0xBD6C0001,0xBB680001,0x29FC0012,0x29FC0012,0x29FC0012,0x29FC0012,0x29FC0012,0x29FC0012,0xBF600001,0xBF600001,0xBF600001,0xBB640000,0x97F80012,0x97F80012,0x97F80012,0xBB500000,0xB6000014,0xFF6C0001,0x1700012,0x1700012,0xD76C0001,0xCD6C0001,0xC76C0001,0xC76C0001,0xC36C0001,0xFB600000,0xDD640000,0xC1680000,0xBF600001, -0x7BFC0012,}; -static const uint32_t g_etc1_to_bc7_m6_table24[] = { -0x17C0000,0x17C0000,0x17C0000,0x17C0000,0x17C0000,0x17C0000,0x17C0000,0x17C0000,0x17C0000,0x17C0000,0x17C0000,0x17C0000,0x17C0000,0x17C0000,0x17C0000,0x17C0000,0x17C0000,0x17C0000,0x17C0000,0x17C0000,0x3BFC0000,0x3BFC0000,0x3BFC0000,0x3BFC0000,0x3BFC0000,0x3BFC0000,0x3BFC0000,0x3BFC0000,0x3BFC0000,0x3BFC0000,0x9FF80000, -0x9FF80000,0x9FF80000,0x9FF80000,0xBC000001,0x17C0000,0x17C0000,0x17C0000,0x17C0000,0x17C0000,0x17C0000,0x17C0000,0x17C0000,0x3940000,0x3940000,0x3940000,0x3BFC0000,0x85FC0000,0x1880000,0x1880000,0x1880000,0x1880000,0x1880000,0x1880000,0x1880000,0x1880000,0x1880000,0x1880000,0x4DFC0000,0x4DFC0000,0x4DFC0000,0x4DFC0000,0x4DFC0000, -0x4DFC0000,0xA7FC0000,0xA7FC0000,0xA7FC0000,0xC2000001,0x4DFC0000,0x4DFC0000,0x4DFC0000,0x4DFC0000,0x4DFC0000,0x4DFC0000,0xA7FC0000,0xA7FC0000,0xA7FC0000,0xC2000001,0xA7FC0000,0xA7FC0000,0xA7FC0000,0xC2000001,0xC2000001,0x9A00000,0x1880000,0x1880000,0x1C80000,0x1EC0000,0x23FC0000,0x23FC0000,0x6FFC0000,0x1C80000,0x1EC0000,0x91FC0000,0xA7FC0000, -0x91FC0000,0x1900000,0x1900000,0x1900000,0x1900000,0x59FC0000,0x59FC0000,0x59FC0000,0xADFC0000,0xADFC0000,0xC6000001,0x59FC0000,0x59FC0000,0x59FC0000,0xADFC0000,0xADFC0000,0xC6000001,0xADFC0000,0xADFC0000,0xC6000001,0xC6000001,0x59FC0000,0x59FC0000,0x59FC0000,0xADFC0000,0xADFC0000,0xC6000001,0xADFC0000,0xADFC0000,0xC6000001,0xC6000001,0xADFC0000, -0xADFC0000,0xC6000001,0xC6000001,0xC6000001,0x1D00000,0xDA80000,0x1900000,0x31FC0000,0x79FC0000,0x99FC0000,0xA3FC0000,0xB5F80000,0x3F40000,0x59FC0000,0x99FC0000,0xC6000001,0x99FC0000,0x19C0000,0x6BFC0000,0xB7F80000,0xCC000001,0x6BFC0000,0xB7F80000,0xCC000001,0xB7F80000,0xCC000001,0xCC000001,0x6BFC0000,0xB7F80000,0xCC000001,0xB7F80000,0xCC000001, -0xCC000001,0xB7F80000,0xCC000001,0xCC000001,0xCC000001,0x6BFC0000,0xB7F80000,0xCC000001,0xB7F80000,0xCC000001,0xCC000001,0xB7F80000,0xCC000001,0xCC000001,0xCC000001,0xB7F80000,0xCC000001,0xCC000001,0xCC000001,0xCC000001,0x11FC0000,0x1B80000,0x1B80000,0x87FC0000,0xADFC0000,0xC3F00000,0xCC000001,0xCC000001,0x49FC0000,0x97FC0000,0xCBE80000,0xCC000001, -0xA3FC0000,0x18C0088,0xE1880034,0xD3880034,0xCD880035,0xDD840026,0xD3840015,0xCD840019,0xCF840026,0xCD800016,0xCB800026,0xDF7C0033,0xD57C0009,0xCF80000F,0xD17C0012,0xCD7C0002,0xCB7C0016,0xCF7C0033,0xCD78000F,0xCB78001A,0xC97C0033,0x53FC0088,0xD9700033,0xCD7C0034,0xD3700026,0xCF740013,0xCB780024,0xD3680033,0xCD70000A,0xCB6C0013,0xC9700033,0xABF80088, -0xCD5C0034,0xCB580024,0xC94C0033,0xC400008C,0xFF800006,0xFD880048,0xFD880058,0xE57C0001,0xD77C0002,0xD17C0002,0xCF7C0002,0xCD7C0002,0xFF740004,0xE1780001,0xCF780009,0xCB6C0013,0x95FC0088,0x1900034,0xDD8C0008,0xD18C0009,0xCD8C0009,0xD9880012,0xD1880001,0xCF880001,0xCF880012,0xCD880005,0xCB880012,0x5BFC0033,0xD3800009,0xCD840009,0xD17C0012,0xCD7C0002, -0xCB800012,0xAFFC0033,0xCD700009,0xCB6C0012,0xC8000033,0x5BFC0033,0xD3800009,0xCD840009,0xD17C0012,0xCD7C0002,0xCB800012,0xAFFC0033,0xCD700009,0xCB6C0012,0xC8000033,0xAFFC0033,0xCD700009,0xCB6C0012,0xC8000033,0xC8000033,0xFF800002,0xFF8C0018,0xFF8C0018,0xDF800001,0xD77C0002,0xD17C0002,0xCD800002,0xCD780002,0xFB780003,0xDD7C0001,0xCF780008,0xCB6C0012, -0x9BFC0033,0x1880034,0x1880034,0x1880034,0x1880034,0xD3840014,0xD3840014,0xD3840014,0xCB840014,0xCB840014,0xC7800015,0xD57C0008,0xD57C0008,0xD57C0008,0xCD7C0001,0xCD7C0001,0xC97C0005,0xC97C000A,0xC97C000A,0xC77C0001,0xC57C000A,0x49FC0033,0x49FC0033,0x49FC0033,0xCF740012,0xCF740012,0xC77C0013,0xCD700009,0xCD700009,0xC7740002,0xC574000A,0xA7F80033, -0xA7F80033,0xC7680013,0xC560000A,0xC2000033,0xF9800004,0xFB840018,0x1880034,0xE37C0001,0xD77C0001,0xD17C0001,0xCF7C0001,0xCB7C0001,0xFF740000,0xE1780000,0xCD7C0009,0xC7740002,0x8FFC0033,0x18C0008,0x18C0008,0x18C0008,0x18C0008,0xCF880000,0xCF880000,0xCF880000,0xC9880001,0xC9880001,0xC7880001,0x53FC0008,0x53FC0008,0x53FC0008,0xC9840001,0xC9840001, -0xC7840001,0xABF80008,0xABF80008,0xC77C0001,0xC400000A,0x53FC0008,0x53FC0008,0x53FC0008,0xC9840001,0xC9840001,0xC7840001,0xABF80008,0xABF80008,0xC77C0001,0xC400000A,0xABF80008,0xABF80008,0xC77C0001,0xC400000A,0xC400000A,0xF9800000,0xFD880000,0x18C0008,0xDD800000,0xD3800000,0xCF800000,0xCB840001,0xCB800000,0xF5780000,0xDB7C0000,0x95FC0008,0xC77C0001, -0x95FC0008,0x1940014,0xD9900000,0xD1900000,0xCD900001,0x63FC0012,0xD1880001,0xCD8C0001,0xB3F80012,0xCD7C0001,0xCA000012,0x63FC0012,0xD1880001,0xCD8C0001,0xB3F80012,0xCD7C0001,0xCA000012,0xB3F80012,0xCD7C0001,0xCA000012,0xCA000012,0x63FC0012,0xD1880001,0xCD8C0001,0xB3F80012,0xCD7C0001,0xCA000012,0xB3F80012,0xCD7C0001,0xCA000012,0xCA000012,0xB3F80012, -0xCD7C0001,0xCA000012,0xCA000012,0xCA000012,0xF7840002,0x1B00012,0xF3940005,0xE57C0000,0xD77C0001,0xD3780000,0xCD800001,0xCD740001,0xF57C0002,0xE5740000,0xCF800000,0xCA000012,0x9FF80012,0x1800014,0x1800014,0x1800014,0x1800014,0x1800014,0x1800014,0x1800014,0x1800014,0x1800014,0x1800014,0xCF7C0000,0xCF7C0000,0xCF7C0000,0xCF7C0000,0xCF7C0000, -0xCF7C0000,0xC77C0000,0xC77C0000,0xC77C0000,0xC37C0001,0x43FC0012,0x43FC0012,0x43FC0012,0x43FC0012,0x43FC0012,0x43FC0012,0xC7740001,0xC7740001,0xC7740001,0xC3780001,0xA3FC0012,0xA3FC0012,0xA3FC0012,0xC3680001,0xC0000012,0xF77C0004,0x1800014,0x1800014,0xE77C0000,0xDB7C0000,0xD37C0000,0xD37C0000,0xCD7C0000,0xFF740000,0xE1780000,0xC97C0001,0xC7740001, -0x8BFC0012,}; -static const uint32_t g_etc1_to_bc7_m6_table25[] = { -0x18C0000,0x18C0000,0x18C0000,0x18C0000,0x18C0000,0x18C0000,0x18C0000,0x18C0000,0x18C0000,0x18C0000,0x18C0000,0x18C0000,0x18C0000,0x18C0000,0x18C0000,0x18C0000,0x18C0000,0x18C0000,0x18C0000,0x18C0000,0x53FC0000,0x53FC0000,0x53FC0000,0x53FC0000,0x53FC0000,0x53FC0000,0x53FC0000,0x53FC0000,0x53FC0000,0x53FC0000,0xABF80000, -0xABF80000,0xABF80000,0xABF80000,0xC4000001,0x18C0000,0x18C0000,0x18C0000,0x18C0000,0x18C0000,0x18C0000,0x18C0000,0x18C0000,0xBA40000,0xBA40000,0xBA40000,0x53FC0000,0x95FC0000,0x1980000,0x1980000,0x1980000,0x1980000,0x1980000,0x1980000,0x1980000,0x1980000,0x1980000,0x1980000,0x65FC0000,0x65FC0000,0x65FC0000,0x65FC0000,0x65FC0000, -0x65FC0000,0xB3FC0000,0xB3FC0000,0xB3FC0000,0xCA000001,0x65FC0000,0x65FC0000,0x65FC0000,0x65FC0000,0x65FC0000,0x65FC0000,0xB3FC0000,0xB3FC0000,0xB3FC0000,0xCA000001,0xB3FC0000,0xB3FC0000,0xB3FC0000,0xCA000001,0xCA000001,0x1B40000,0x1980000,0x1980000,0x5D80000,0x7FC0000,0x41FC0000,0x41FC0000,0x83FC0000,0x5D80000,0x7FC0000,0x9FFC0000,0xB3FC0000, -0x9FFC0000,0x1A00000,0x1A00000,0x1A00000,0x1A00000,0x71FC0000,0x71FC0000,0x71FC0000,0xB9FC0000,0xB9FC0000,0xCE000001,0x71FC0000,0x71FC0000,0x71FC0000,0xB9FC0000,0xB9FC0000,0xCE000001,0xB9FC0000,0xB9FC0000,0xCE000001,0xCE000001,0x71FC0000,0x71FC0000,0x71FC0000,0xB9FC0000,0xB9FC0000,0xCE000001,0xB9FC0000,0xB9FC0000,0xCE000001,0xCE000001,0xB9FC0000, -0xB9FC0000,0xCE000001,0xCE000001,0xCE000001,0x1E40000,0x1BC0000,0x1A00000,0x4FFC0000,0x8DFC0000,0xA7FC0000,0xB1FC0000,0xBFFC0000,0x1BFC0000,0x71FC0000,0xA7FC0000,0xCE000001,0xA7FC0000,0x1AC0000,0x83FC0000,0xC3F80000,0xD4000001,0x83FC0000,0xC3F80000,0xD4000001,0xC3F80000,0xD4000001,0xD4000001,0x83FC0000,0xC3F80000,0xD4000001,0xC3F80000,0xD4000001, -0xD4000001,0xC3F80000,0xD4000001,0xD4000001,0xD4000001,0x83FC0000,0xC3F80000,0xD4000001,0xC3F80000,0xD4000001,0xD4000001,0xC3F80000,0xD4000001,0xD4000001,0xD4000001,0xC3F80000,0xD4000001,0xD4000001,0xD4000001,0xD4000001,0x37FC0000,0x1C80000,0x1C80000,0x9BFC0000,0xBBFC0000,0xCDF00000,0xD4000001,0xD4000001,0x67FC0000,0xA9FC0000,0xD3F80000,0xD4000001, -0xB3FC0000,0x19C0088,0xE9980034,0xDB980034,0xD5980035,0xE5940026,0xDB940015,0xD5940019,0xD7940026,0xD5900016,0xD3900026,0xE78C0033,0xDD8C0009,0xD790000F,0xD98C0012,0xD58C0002,0xD38C0016,0xD78C0033,0xD588000F,0xD388001A,0xD18C0033,0x6BFC0088,0xE1800033,0xD58C0034,0xDB800026,0xD7840013,0xD3880024,0xDB780033,0xD580000A,0xD37C0013,0xD1800033,0xB7F80088, -0xD56C0034,0xD3680024,0xD15C0033,0xCC00008C,0xFF90000E,0xF5980056,0xF79C0061,0xED8C0001,0xDF8C0002,0xD98C0002,0xD78C0002,0xD58C0002,0xFF880008,0xE9880001,0xD7880009,0xD37C0013,0xA3FC0088,0x1A00034,0xE59C0008,0xD99C0009,0xD59C0009,0xE1980012,0xD9980001,0xD7980001,0xD7980012,0xD5980005,0xD3980012,0x75FC0033,0xDB900009,0xD5940009,0xD98C0012,0xD58C0002, -0xD3900012,0xBBFC0033,0xD5800009,0xD37C0012,0xD0000033,0x75FC0033,0xDB900009,0xD5940009,0xD98C0012,0xD58C0002,0xD3900012,0xBBFC0033,0xD5800009,0xD37C0012,0xD0000033,0xBBFC0033,0xD5800009,0xD37C0012,0xD0000033,0xD0000033,0xFF940003,0xF79C001E,0xF9A00019,0xE7900001,0xDF8C0002,0xD98C0002,0xD5900002,0xD5880002,0xFF880004,0xE58C0001,0xD7880008,0xD37C0012, -0xA9FC0033,0x1980034,0x1980034,0x1980034,0x1980034,0xDB940014,0xDB940014,0xDB940014,0xD3940014,0xD3940014,0xCF900015,0xDD8C0008,0xDD8C0008,0xDD8C0008,0xD58C0001,0xD58C0001,0xD18C0005,0xD18C000A,0xD18C000A,0xCF8C0001,0xCD8C000A,0x63FC0033,0x63FC0033,0x63FC0033,0xD7840012,0xD7840012,0xCF8C0013,0xD5800009,0xD5800009,0xCF840002,0xCD84000A,0xB3F80033, -0xB3F80033,0xCF780013,0xCD70000A,0xCA000033,0xFF900005,0xF394001D,0x1980034,0xEB8C0001,0xDF8C0001,0xD98C0001,0xD78C0001,0xD38C0001,0xFB880002,0xE9880000,0xD58C0009,0xCF840002,0x9FF80033,0x19C0008,0x19C0008,0x19C0008,0x19C0008,0xD7980000,0xD7980000,0xD7980000,0xD1980001,0xD1980001,0xCF980001,0x6BFC0008,0x6BFC0008,0x6BFC0008,0xD1940001,0xD1940001, -0xCF940001,0xB7F80008,0xB7F80008,0xCF8C0001,0xCC00000A,0x6BFC0008,0x6BFC0008,0x6BFC0008,0xD1940001,0xD1940001,0xCF940001,0xB7F80008,0xB7F80008,0xCF8C0001,0xCC00000A,0xB7F80008,0xB7F80008,0xCF8C0001,0xCC00000A,0xCC00000A,0xEB940001,0xF5980001,0x19C0008,0xE5900000,0xDB900000,0xD7900000,0xD3940001,0xD3900000,0xFD880000,0xE38C0000,0xA3FC0008,0xCF8C0001, -0xA3FC0008,0x1A40014,0xE1A00000,0xD9A00000,0xD5A00001,0x7BFC0012,0xD9980001,0xD59C0001,0xBFF80012,0xD58C0001,0xD2000012,0x7BFC0012,0xD9980001,0xD59C0001,0xBFF80012,0xD58C0001,0xD2000012,0xBFF80012,0xD58C0001,0xD2000012,0xD2000012,0x7BFC0012,0xD9980001,0xD59C0001,0xBFF80012,0xD58C0001,0xD2000012,0xBFF80012,0xD58C0001,0xD2000012,0xD2000012,0xBFF80012, -0xD58C0001,0xD2000012,0xD2000012,0xD2000012,0xFF940002,0x9C00012,0xFBA40005,0xED8C0000,0xDF8C0001,0xDB880000,0xD5900001,0xD5840001,0xFD8C0002,0xED840000,0xD7900000,0xD2000012,0xADFC0012,0x1900014,0x1900014,0x1900014,0x1900014,0x1900014,0x1900014,0x1900014,0x1900014,0x1900014,0x1900014,0xD78C0000,0xD78C0000,0xD78C0000,0xD78C0000,0xD78C0000, -0xD78C0000,0xCF8C0000,0xCF8C0000,0xCF8C0000,0xCB8C0001,0x5BFC0012,0x5BFC0012,0x5BFC0012,0x5BFC0012,0x5BFC0012,0x5BFC0012,0xCF840001,0xCF840001,0xCF840001,0xCB880001,0xAFFC0012,0xAFFC0012,0xAFFC0012,0xCB780001,0xC8000012,0xFF8C0004,0x1900014,0x1900014,0xEF8C0000,0xE38C0000,0xDB8C0000,0xDB8C0000,0xD58C0000,0xFB880001,0xE9880000,0xD18C0001,0xCF840001, -0x9BFC0012,}; -static const uint32_t g_etc1_to_bc7_m6_table26[] = { -0x19C0000,0x19C0000,0x19C0000,0x19C0000,0x19C0000,0x19C0000,0x19C0000,0x19C0000,0x19C0000,0x19C0000,0x19C0000,0x19C0000,0x19C0000,0x19C0000,0x19C0000,0x19C0000,0x19C0000,0x19C0000,0x19C0000,0x19C0000,0x6BFC0000,0x6BFC0000,0x6BFC0000,0x6BFC0000,0x6BFC0000,0x6BFC0000,0x6BFC0000,0x6BFC0000,0x6BFC0000,0x6BFC0000,0xB7F80000, -0xB7F80000,0xB7F80000,0xB7F80000,0xCC000001,0x19C0000,0x19C0000,0x19C0000,0x19C0000,0x19C0000,0x19C0000,0x19C0000,0x19C0000,0x1B80000,0x1B80000,0x1B80000,0x6BFC0000,0xA3FC0000,0x1A80000,0x1A80000,0x1A80000,0x1A80000,0x1A80000,0x1A80000,0x1A80000,0x1A80000,0x1A80000,0x1A80000,0x7DFC0000,0x7DFC0000,0x7DFC0000,0x7DFC0000,0x7DFC0000, -0x7DFC0000,0xBFFC0000,0xBFFC0000,0xBFFC0000,0xD2000001,0x7DFC0000,0x7DFC0000,0x7DFC0000,0x7DFC0000,0x7DFC0000,0x7DFC0000,0xBFFC0000,0xBFFC0000,0xBFFC0000,0xD2000001,0xBFFC0000,0xBFFC0000,0xBFFC0000,0xD2000001,0xD2000001,0x1C40000,0x1A80000,0x1A80000,0x1EC0000,0x2DFC0000,0x5FFC0000,0x5FFC0000,0x97FC0000,0x1EC0000,0x2DFC0000,0xAFFC0000,0xBFFC0000, -0xAFFC0000,0x1B00000,0x1B00000,0x1B00000,0x1B00000,0x89FC0000,0x89FC0000,0x89FC0000,0xC5FC0000,0xC5FC0000,0xD6000001,0x89FC0000,0x89FC0000,0x89FC0000,0xC5FC0000,0xC5FC0000,0xD6000001,0xC5FC0000,0xC5FC0000,0xD6000001,0xD6000001,0x89FC0000,0x89FC0000,0x89FC0000,0xC5FC0000,0xC5FC0000,0xD6000001,0xC5FC0000,0xC5FC0000,0xD6000001,0xD6000001,0xC5FC0000, -0xC5FC0000,0xD6000001,0xD6000001,0xD6000001,0x5F40000,0x1CC0000,0x1B00000,0x6FFC0000,0xA1FC0000,0xB7FC0000,0xBFF80000,0xCBF80000,0x41FC0000,0x89FC0000,0xB7FC0000,0xD6000001,0xB7FC0000,0x1BC0000,0x9BFC0000,0xCFF80000,0xDC000001,0x9BFC0000,0xCFF80000,0xDC000001,0xCFF80000,0xDC000001,0xDC000001,0x9BFC0000,0xCFF80000,0xDC000001,0xCFF80000,0xDC000001, -0xDC000001,0xCFF80000,0xDC000001,0xDC000001,0xDC000001,0x9BFC0000,0xCFF80000,0xDC000001,0xCFF80000,0xDC000001,0xDC000001,0xCFF80000,0xDC000001,0xDC000001,0xDC000001,0xCFF80000,0xDC000001,0xDC000001,0xDC000001,0xDC000001,0x5FFC0000,0x5D80000,0x5D80000,0xAFFC0000,0xC9F80000,0xD7F00000,0xDC000001,0xDC000001,0x85FC0000,0xB9FC0000,0xDDCC0000,0xDC000001, -0xC1FC0000,0x1AC0088,0xF1A80034,0xE3A80034,0xDDA80035,0xEDA40026,0xE3A40015,0xDDA40019,0xDFA40026,0xDDA00016,0xDBA00026,0xEF9C0033,0xE59C0009,0xDFA0000F,0xE19C0012,0xDD9C0002,0xDB9C0016,0xDF9C0033,0xDD98000F,0xDB98001A,0xD99C0033,0x83FC0088,0xE9900033,0xDD9C0034,0xE3900026,0xDF940013,0xDB980024,0xE3880033,0xDD90000A,0xDB8C0013,0xD9900033,0xC3F80088, -0xDD7C0034,0xDB780024,0xD96C0033,0xD400008C,0xFFA00016,0xFDA80056,0xFFAC0061,0xF59C0001,0xE79C0002,0xE19C0002,0xDF9C0002,0xDD9C0002,0xFF9C0013,0xF1980001,0xDF980009,0xDB8C0013,0xB3FC0088,0x1B00034,0xEDAC0008,0xE1AC0009,0xDDAC0009,0xE9A80012,0xE1A80001,0xDFA80001,0xDFA80012,0xDDA80005,0xDBA80012,0x8DFC0033,0xE3A00009,0xDDA40009,0xE19C0012,0xDD9C0002, -0xDBA00012,0xC7FC0033,0xDD900009,0xDB8C0012,0xD8000033,0x8DFC0033,0xE3A00009,0xDDA40009,0xE19C0012,0xDD9C0002,0xDBA00012,0xC7FC0033,0xDD900009,0xDB8C0012,0xD8000033,0xC7FC0033,0xDD900009,0xDB8C0012,0xD8000033,0xD8000033,0xF9A80009,0xFFAC001E,0xF1B00020,0xEFA00001,0xE79C0002,0xE19C0002,0xDDA00002,0xDD980002,0xFDA00009,0xED9C0001,0xDF980008,0xDB8C0012, -0xB9FC0033,0x1A80034,0x1A80034,0x1A80034,0x1A80034,0xE3A40014,0xE3A40014,0xE3A40014,0xDBA40014,0xDBA40014,0xD7A00015,0xE59C0008,0xE59C0008,0xE59C0008,0xDD9C0001,0xDD9C0001,0xD99C0005,0xD99C000A,0xD99C000A,0xD79C0001,0xD59C000A,0x7BFC0033,0x7BFC0033,0x7BFC0033,0xDF940012,0xDF940012,0xD79C0013,0xDD900009,0xDD900009,0xD7940002,0xD594000A,0xBFF80033, -0xBFF80033,0xD7880013,0xD580000A,0xD2000033,0xFFA00006,0xFBA4001D,0x1A80034,0xF39C0001,0xE79C0001,0xE19C0001,0xDF9C0001,0xDB9C0001,0xFB980006,0xF1980000,0xDD9C0009,0xD7940002,0xADFC0033,0x1AC0008,0x1AC0008,0x1AC0008,0x1AC0008,0xDFA80000,0xDFA80000,0xDFA80000,0xD9A80001,0xD9A80001,0xD7A80001,0x83FC0008,0x83FC0008,0x83FC0008,0xD9A40001,0xD9A40001, -0xD7A40001,0xC3F80008,0xC3F80008,0xD79C0001,0xD400000A,0x83FC0008,0x83FC0008,0x83FC0008,0xD9A40001,0xD9A40001,0xD7A40001,0xC3F80008,0xC3F80008,0xD79C0001,0xD400000A,0xC3F80008,0xC3F80008,0xD79C0001,0xD400000A,0xD400000A,0xF3A40001,0xFDA80001,0x1AC0008,0xEDA00000,0xE3A00000,0xDFA00000,0xDBA40001,0xDBA00000,0xF5A00001,0xEB9C0000,0xB3FC0008,0xD79C0001, -0xB3FC0008,0x1B40014,0xE9B00000,0xE1B00000,0xDDB00001,0x93FC0012,0xE1A80001,0xDDAC0001,0xCBF80012,0xDD9C0001,0xDA000012,0x93FC0012,0xE1A80001,0xDDAC0001,0xCBF80012,0xDD9C0001,0xDA000012,0xCBF80012,0xDD9C0001,0xDA000012,0xDA000012,0x93FC0012,0xE1A80001,0xDDAC0001,0xCBF80012,0xDD9C0001,0xDA000012,0xCBF80012,0xDD9C0001,0xDA000012,0xDA000012,0xCBF80012, -0xDD9C0001,0xDA000012,0xDA000012,0xDA000012,0xF9A80005,0x1D40012,0xF3B40008,0xF59C0000,0xE79C0001,0xE3980000,0xDDA00001,0xDD940001,0xFBA40005,0xF5940000,0xDFA00000,0xDA000012,0xBDF80012,0x1A00014,0x1A00014,0x1A00014,0x1A00014,0x1A00014,0x1A00014,0x1A00014,0x1A00014,0x1A00014,0x1A00014,0xDF9C0000,0xDF9C0000,0xDF9C0000,0xDF9C0000,0xDF9C0000, -0xDF9C0000,0xD79C0000,0xD79C0000,0xD79C0000,0xD39C0001,0x75FC0012,0x75FC0012,0x75FC0012,0x75FC0012,0x75FC0012,0x75FC0012,0xD7940001,0xD7940001,0xD7940001,0xD3980001,0xBBFC0012,0xBBFC0012,0xBBFC0012,0xD3880001,0xD0000012,0xF9A00005,0x1A00014,0x1A00014,0xF79C0000,0xEB9C0000,0xE39C0000,0xE39C0000,0xDD9C0000,0xFB980002,0xF1980000,0xD99C0001,0xD7940001, -0xA9FC0012,}; -static const uint32_t g_etc1_to_bc7_m6_table27[] = { -0x1AC0000,0x1AC0000,0x1AC0000,0x1AC0000,0x1AC0000,0x1AC0000,0x1AC0000,0x1AC0000,0x1AC0000,0x1AC0000,0x1AC0000,0x1AC0000,0x1AC0000,0x1AC0000,0x1AC0000,0x1AC0000,0x1AC0000,0x1AC0000,0x1AC0000,0x1AC0000,0x83FC0000,0x83FC0000,0x83FC0000,0x83FC0000,0x83FC0000,0x83FC0000,0x83FC0000,0x83FC0000,0x83FC0000,0x83FC0000,0xC3F80000, -0xC3F80000,0xC3F80000,0xC3F80000,0xD4000001,0x1AC0000,0x1AC0000,0x1AC0000,0x1AC0000,0x1AC0000,0x1AC0000,0x1AC0000,0x1AC0000,0x1C80000,0x1C80000,0x1C80000,0x83FC0000,0xB3FC0000,0x1B80000,0x1B80000,0x1B80000,0x1B80000,0x1B80000,0x1B80000,0x1B80000,0x1B80000,0x1B80000,0x1B80000,0x95FC0000,0x95FC0000,0x95FC0000,0x95FC0000,0x95FC0000, -0x95FC0000,0xCBFC0000,0xCBFC0000,0xCBFC0000,0xDA000001,0x95FC0000,0x95FC0000,0x95FC0000,0x95FC0000,0x95FC0000,0x95FC0000,0xCBFC0000,0xCBFC0000,0xCBFC0000,0xDA000001,0xCBFC0000,0xCBFC0000,0xCBFC0000,0xDA000001,0xDA000001,0x3D40000,0x1B80000,0x1B80000,0x9FC0000,0x55FC0000,0x7DFC0000,0x7DFC0000,0xABFC0000,0x9FC0000,0x55FC0000,0xBFF80000,0xCBFC0000, -0xBFF80000,0x1C00000,0x1C00000,0x1C00000,0x1C00000,0xA3FC0000,0xA3FC0000,0xA3FC0000,0xD1FC0000,0xD1FC0000,0xDE000001,0xA3FC0000,0xA3FC0000,0xA3FC0000,0xD1FC0000,0xD1FC0000,0xDE000001,0xD1FC0000,0xD1FC0000,0xDE000001,0xDE000001,0xA3FC0000,0xA3FC0000,0xA3FC0000,0xD1FC0000,0xD1FC0000,0xDE000001,0xD1FC0000,0xD1FC0000,0xDE000001,0xDE000001,0xD1FC0000, -0xD1FC0000,0xDE000001,0xDE000001,0xDE000001,0x27FC0000,0x7DC0000,0x1C00000,0x8DFC0000,0xB3FC0000,0xC5FC0000,0xCBFC0000,0xD5FC0000,0x69FC0000,0xA3FC0000,0xC5FC0000,0xDE000001,0xC5FC0000,0x1CC0000,0xB5FC0000,0xDBF80000,0xE4000001,0xB5FC0000,0xDBF80000,0xE4000001,0xDBF80000,0xE4000001,0xE4000001,0xB5FC0000,0xDBF80000,0xE4000001,0xDBF80000,0xE4000001, -0xE4000001,0xDBF80000,0xE4000001,0xE4000001,0xE4000001,0xB5FC0000,0xDBF80000,0xE4000001,0xDBF80000,0xE4000001,0xE4000001,0xDBF80000,0xE4000001,0xE4000001,0xE4000001,0xDBF80000,0xE4000001,0xE4000001,0xE4000001,0xE4000001,0x87FC0000,0xDE80000,0xDE80000,0xC3FC0000,0xD5FC0000,0xE1F00000,0xE4000001,0xE4000001,0xA3FC0000,0xCBFC0000,0xE5DC0000,0xE4000001, -0xD1FC0000,0x1BC0088,0xF9B80034,0xEBB80034,0xE5B80035,0xF5B40026,0xEBB40015,0xE5B40019,0xE7B40026,0xE5B00016,0xE3B00026,0xF7AC0033,0xEDAC0009,0xE7B0000F,0xE9AC0012,0xE5AC0002,0xE3AC0016,0xE7AC0033,0xE5A8000F,0xE3A8001A,0xE1AC0033,0x9BFC0088,0xF1A00033,0xE5AC0034,0xEBA00026,0xE7A40013,0xE3A80024,0xEB980033,0xE5A0000A,0xE39C0013,0xE1A00033,0xCFF80088, -0xE58C0034,0xE3880024,0xE17C0033,0xDC00008C,0xFFB40021,0xF5B80068,0xF7BC006C,0xFDAC0001,0xEFAC0002,0xE9AC0002,0xE7AC0002,0xE5AC0002,0xFDB00021,0xF9A80001,0xE7A80009,0xE39C0013,0xC1FC0088,0x1C00034,0xF5BC0008,0xE9BC0009,0xE5BC0009,0xF1B80012,0xE9B80001,0xE7B80001,0xE7B80012,0xE5B80005,0xE3B80012,0xA5FC0033,0xEBB00009,0xE5B40009,0xE9AC0012,0xE5AC0002, -0xE3B00012,0xD3FC0033,0xE5A00009,0xE39C0012,0xE0000033,0xA5FC0033,0xEBB00009,0xE5B40009,0xE9AC0012,0xE5AC0002,0xE3B00012,0xD3FC0033,0xE5A00009,0xE39C0012,0xE0000033,0xD3FC0033,0xE5A00009,0xE39C0012,0xE0000033,0xE0000033,0xFDB8000E,0xF9C00024,0xF9C00020,0xF7B00001,0xEFAC0002,0xE9AC0002,0xE5B00002,0xE5A80002,0xFDB00011,0xF5AC0001,0xE7A80008,0xE39C0012, -0xC7FC0033,0x1B80034,0x1B80034,0x1B80034,0x1B80034,0xEBB40014,0xEBB40014,0xEBB40014,0xE3B40014,0xE3B40014,0xDFB00015,0xEDAC0008,0xEDAC0008,0xEDAC0008,0xE5AC0001,0xE5AC0001,0xE1AC0005,0xE1AC000A,0xE1AC000A,0xDFAC0001,0xDDAC000A,0x93FC0033,0x93FC0033,0x93FC0033,0xE7A40012,0xE7A40012,0xDFAC0013,0xE5A00009,0xE5A00009,0xDFA40002,0xDDA4000A,0xCBF80033, -0xCBF80033,0xDF980013,0xDD90000A,0xDA000033,0xF9B00011,0xF3B40024,0x1B80034,0xFBAC0001,0xEFAC0001,0xE9AC0001,0xE7AC0001,0xE3AC0001,0xFBAC0009,0xF9A80000,0xE5AC0009,0xDFA40002,0xBDF80033,0x1BC0008,0x1BC0008,0x1BC0008,0x1BC0008,0xE7B80000,0xE7B80000,0xE7B80000,0xE1B80001,0xE1B80001,0xDFB80001,0x9BFC0008,0x9BFC0008,0x9BFC0008,0xE1B40001,0xE1B40001, -0xDFB40001,0xCFF80008,0xCFF80008,0xDFAC0001,0xDC00000A,0x9BFC0008,0x9BFC0008,0x9BFC0008,0xE1B40001,0xE1B40001,0xDFB40001,0xCFF80008,0xCFF80008,0xDFAC0001,0xDC00000A,0xCFF80008,0xCFF80008,0xDFAC0001,0xDC00000A,0xDC00000A,0xFBB40001,0xF5B80004,0x1BC0008,0xF5B00000,0xEBB00000,0xE7B00000,0xE3B40001,0xE3B00000,0xFDB00001,0xF3AC0000,0xC1FC0008,0xDFAC0001, -0xC1FC0008,0x1C40014,0xF1C00000,0xE9C00000,0xE5C00001,0xABFC0012,0xE9B80001,0xE5BC0001,0xD7F80012,0xE5AC0001,0xE2000012,0xABFC0012,0xE9B80001,0xE5BC0001,0xD7F80012,0xE5AC0001,0xE2000012,0xD7F80012,0xE5AC0001,0xE2000012,0xE2000012,0xABFC0012,0xE9B80001,0xE5BC0001,0xD7F80012,0xE5AC0001,0xE2000012,0xD7F80012,0xE5AC0001,0xE2000012,0xE2000012,0xD7F80012, -0xE5AC0001,0xE2000012,0xE2000012,0xE2000012,0xFBBC0008,0x1E40012,0xFBC40008,0xFDAC0000,0xEFAC0001,0xEBA80000,0xE5B00001,0xE5A40001,0xF3BC0008,0xFDA40000,0xE7B00000,0xE2000012,0xCBFC0012,0x1B00014,0x1B00014,0x1B00014,0x1B00014,0x1B00014,0x1B00014,0x1B00014,0x1B00014,0x1B00014,0x1B00014,0xE7AC0000,0xE7AC0000,0xE7AC0000,0xE7AC0000,0xE7AC0000, -0xE7AC0000,0xDFAC0000,0xDFAC0000,0xDFAC0000,0xDBAC0001,0x8DFC0012,0x8DFC0012,0x8DFC0012,0x8DFC0012,0x8DFC0012,0x8DFC0012,0xDFA40001,0xDFA40001,0xDFA40001,0xDBA80001,0xC7FC0012,0xC7FC0012,0xC7FC0012,0xDB980001,0xD8000012,0xF1B00008,0x1B00014,0x1B00014,0xFFAC0000,0xF3AC0000,0xEBAC0000,0xEBAC0000,0xE5AC0000,0xF7AC0005,0xF9A80000,0xE1AC0001,0xDFA40001, -0xB9FC0012,}; -static const uint32_t g_etc1_to_bc7_m6_table28[] = { -0x1BC0001,0x1BC0001,0x1BC0001,0x1BC0001,0x1BC0001,0x1BC0001,0x1BC0001,0x1BC0001,0x1BC0001,0x1BC0001,0x1BC0001,0x1BC0001,0x1BC0001,0x1BC0001,0x1BC0001,0x1BC0001,0x1BC0001,0x1BC0001,0x1BC0001,0x1BC0001,0x9FFC0000,0x9FFC0000,0x9FFC0000,0x9FFC0000,0x9FFC0000,0x9FFC0000,0x9FFC0000,0x9FFC0000,0x9FFC0000,0x9FFC0000,0xD1F80000, -0xD1F80000,0xD1F80000,0xD1F80000,0xDE000000,0x1BC0001,0x1BC0001,0x1BC0001,0x1BC0001,0x1BC0001,0x1BC0001,0x1BC0001,0x1BC0001,0x1DC0000,0x1DC0000,0x1DC0000,0x9FFC0000,0xC3FC0000,0x1C80001,0x1C80001,0x1C80001,0x1C80001,0x1C80001,0x1C80001,0x1C80001,0x1C80001,0x1C80001,0x1C80001,0xB1FC0000,0xB1FC0000,0xB1FC0000,0xB1FC0000,0xB1FC0000, -0xB1FC0000,0xD9FC0000,0xD9FC0000,0xD9FC0000,0xE4000000,0xB1FC0000,0xB1FC0000,0xB1FC0000,0xB1FC0000,0xB1FC0000,0xB1FC0000,0xD9FC0000,0xD9FC0000,0xD9FC0000,0xE4000000,0xD9FC0000,0xD9FC0000,0xD9FC0000,0xE4000000,0xE4000000,0x1E80000,0x1C80001,0x1C80001,0x49FC0000,0x81FC0000,0x9FFC0000,0x9FFC0000,0xC1FC0000,0x49FC0000,0x81FC0000,0xCFFC0000,0xD9FC0000, -0xCFFC0000,0x1D00001,0x1D00001,0x1D00001,0x1D00001,0xBDFC0000,0xBDFC0000,0xBDFC0000,0xDFF80000,0xDFF80000,0xE8000000,0xBDFC0000,0xBDFC0000,0xBDFC0000,0xDFF80000,0xDFF80000,0xE8000000,0xDFF80000,0xDFF80000,0xE8000000,0xE8000000,0xBDFC0000,0xBDFC0000,0xBDFC0000,0xDFF80000,0xDFF80000,0xE8000000,0xDFF80000,0xDFF80000,0xE8000000,0xE8000000,0xDFF80000, -0xDFF80000,0xE8000000,0xE8000000,0xE8000000,0x67FC0000,0x1F00000,0x1D00001,0xAFFC0000,0xCBFC0000,0xD7FC0000,0xDBFC0000,0xE1FC0000,0x95FC0000,0xBDFC0000,0xD7FC0000,0xE8000000,0xD7FC0000,0x1DC0001,0xCFFC0000,0xE7FC0000,0xEE000000,0xCFFC0000,0xE7FC0000,0xEE000000,0xE7FC0000,0xEE000000,0xEE000000,0xCFFC0000,0xE7FC0000,0xEE000000,0xE7FC0000,0xEE000000, -0xEE000000,0xE7FC0000,0xEE000000,0xEE000000,0xEE000000,0xCFFC0000,0xE7FC0000,0xEE000000,0xE7FC0000,0xEE000000,0xEE000000,0xE7FC0000,0xEE000000,0xEE000000,0xEE000000,0xE7FC0000,0xEE000000,0xEE000000,0xEE000000,0xEE000000,0xB3FC0000,0x7FC0000,0x7FC0000,0xD9FC0000,0xE5FC0000,0xEBFC0000,0xEE000000,0xEE000000,0xC5FC0000,0xDDFC0000,0xEFD00000,0xEE000000, -0xE1FC0000,0x1CC008C,0xFFC80037,0xF5C80033,0xEFC80033,0xFFC40024,0xF5C40013,0xF1C4001A,0xF1C40024,0xEDC40016,0xEBC40026,0xFDC00034,0xF5C0000A,0xF1C0000F,0xF3BC0013,0xEFBC0002,0xEBC00016,0xEFC00034,0xEDBC000F,0xEBBC0019,0xE9BC0035,0xB7FC0088,0xF9B40033,0xEFBC0033,0xF3B40026,0xEFB80012,0xEBBC0026,0xF5A80033,0xEFAC0009,0xEBB00015,0xE9B40034,0xDDF40088, -0xEF980033,0xEBA00026,0xE9940034,0xE6000088,0xFDC8003F,0xFFCC0064,0xFFCC006C,0xFFC00007,0xF7C00002,0xF1C00002,0xEFC00002,0xEFBC0002,0xFFC40034,0xFFBC0005,0xEFBC0009,0xEBB00015,0xD3FC0088,0x1D40033,0xFDD0000A,0xF3CC000A,0xEFCC000A,0xF7CC0013,0xF3C80002,0xEFCC0001,0xEFCC0013,0xEFC80005,0xEBC80015,0xC1FC0033,0xF5C00009,0xEFC4000A,0xF3BC0012,0xEFBC0001, -0xEBC40014,0xE1F80033,0xEFAC0008,0xEBB00014,0xE8000034,0xC1FC0033,0xF5C00009,0xEFC4000A,0xF3BC0012,0xEFBC0001,0xEBC40014,0xE1F80033,0xEFAC0008,0xEBB00014,0xE8000034,0xE1F80033,0xEFAC0008,0xEBB00014,0xE8000034,0xE8000034,0xFDCC0014,0xF1D0002D,0xF3D4002A,0xFFC40003,0xF7C00001,0xF1C00001,0xEFC00001,0xEFBC0001,0xF7CC0019,0xFFC00002,0xEFBC0009,0xEBB00014, -0xD9FC0033,0x1C80033,0x1C80033,0x1C80033,0x1C80033,0xF7C40012,0xF7C40012,0xF7C40012,0xEDC40012,0xEDC40012,0xE9C40012,0xF5C00009,0xF5C00009,0xF5C00009,0xEDC00002,0xEDC00002,0xE9C00005,0xEBBC0009,0xEBBC0009,0xE9BC0001,0xE7BC0009,0xAFFC0033,0xAFFC0033,0xAFFC0033,0xEFB80012,0xEFB80012,0xE9BC0012,0xEDB40009,0xEDB40009,0xE9B40001,0xE7B40009,0xD7FC0033, -0xD7FC0033,0xE9A80012,0xE79C0008,0xE4000034,0xFBC40013,0xFDC80023,0x1C80033,0xFDC00003,0xF7C00001,0xF1C00001,0xEFC00002,0xEDBC0002,0xFDC00013,0xFFBC0001,0xEFBC0008,0xE9B40001,0xCDFC0033,0x1CC000A,0x1CC000A,0x1CC000A,0x1CC000A,0xEFCC0001,0xEFCC0001,0xEFCC0001,0xEBC80001,0xEBC80001,0xE9C80001,0xB7FC0008,0xB7FC0008,0xB7FC0008,0xEBC40001,0xEBC40001, -0xE9C40001,0xDDF40008,0xDDF40008,0xE9B80000,0xE6000008,0xB7FC0008,0xB7FC0008,0xB7FC0008,0xEBC40001,0xEBC40001,0xE9C40001,0xDDF40008,0xDDF40008,0xE9B80000,0xE6000008,0xDDF40008,0xDDF40008,0xE9B80000,0xE6000008,0xE6000008,0xFDC80002,0xFFCC0002,0x1CC000A,0xF5C80001,0xF3C40000,0xEFC40000,0xEDC40000,0xEBC40001,0xFFC40002,0xFBC00000,0xD3FC0008,0xE9B80000, -0xD3FC0008,0x1D80012,0xF9D40001,0xF1D40001,0xEFD00001,0xC7FC0012,0xF3C80001,0xEFCC0000,0xE3FC0012,0xEFB80000,0xEA000014,0xC7FC0012,0xF3C80001,0xEFCC0000,0xE3FC0012,0xEFB80000,0xEA000014,0xE3FC0012,0xEFB80000,0xEA000014,0xEA000014,0xC7FC0012,0xF3C80001,0xEFCC0000,0xE3FC0012,0xEFB80000,0xEA000014,0xE3FC0012,0xEFB80000,0xEA000014,0xEA000014,0xE3FC0012, -0xEFB80000,0xEA000014,0xEA000014,0xEA000014,0xFFD00008,0x1F80012,0xF5D8000D,0xFFC40002,0xF7C00001,0xF3BC0000,0xEFC00000,0xEFB00000,0xF9D00008,0xFFC00001,0xEFC40001,0xEA000014,0xDDF80012,0x1C40012,0x1C40012,0x1C40012,0x1C40012,0x1C40012,0x1C40012,0x1C40012,0x1C40012,0x1C40012,0x1C40012,0xEFC00001,0xEFC00001,0xEFC00001,0xEFC00001,0xEFC00001, -0xEFC00001,0xE7C00001,0xE7C00001,0xE7C00001,0xE5BC0001,0xA9FC0012,0xA9FC0012,0xA9FC0012,0xA9FC0012,0xA9FC0012,0xA9FC0012,0xE9B40001,0xE9B40001,0xE9B40001,0xE5B80000,0xD5F80012,0xD5F80012,0xD5F80012,0xE5A40000,0xE0000014,0xF9C0000A,0x1C40012,0x1C40012,0xF9C00002,0xF7C00001,0xF1C00001,0xF1C00001,0xEDC00001,0xFFBC0005,0xFFBC0001,0xEBBC0000,0xE9B40001, -0xC9FC0012,}; -static const uint32_t g_etc1_to_bc7_m6_table29[] = { -0x1CC0001,0x1CC0001,0x1CC0001,0x1CC0001,0x1CC0001,0x1CC0001,0x1CC0001,0x1CC0001,0x1CC0001,0x1CC0001,0x1CC0001,0x1CC0001,0x1CC0001,0x1CC0001,0x1CC0001,0x1CC0001,0x1CC0001,0x1CC0001,0x1CC0001,0x1CC0001,0xB7FC0000,0xB7FC0000,0xB7FC0000,0xB7FC0000,0xB7FC0000,0xB7FC0000,0xB7FC0000,0xB7FC0000,0xB7FC0000,0xB7FC0000,0xDDF40000, -0xDDF40000,0xDDF40000,0xDDF40000,0xE6000000,0x1CC0001,0x1CC0001,0x1CC0001,0x1CC0001,0x1CC0001,0x1CC0001,0x1CC0001,0x1CC0001,0x1EC0000,0x1EC0000,0x1EC0000,0xB7FC0000,0xD3FC0000,0x1D80001,0x1D80001,0x1D80001,0x1D80001,0x1D80001,0x1D80001,0x1D80001,0x1D80001,0x1D80001,0x1D80001,0xC9FC0000,0xC9FC0000,0xC9FC0000,0xC9FC0000,0xC9FC0000, -0xC9FC0000,0xE5F80000,0xE5F80000,0xE5F80000,0xEC000000,0xC9FC0000,0xC9FC0000,0xC9FC0000,0xC9FC0000,0xC9FC0000,0xC9FC0000,0xE5F80000,0xE5F80000,0xE5F80000,0xEC000000,0xE5F80000,0xE5F80000,0xE5F80000,0xEC000000,0xEC000000,0x5F80000,0x1D80001,0x1D80001,0x83FC0000,0xA9FC0000,0xBDFC0000,0xBDFC0000,0xD3FC0000,0x83FC0000,0xA9FC0000,0xDFF80000,0xE5F80000, -0xDFF80000,0x1E00001,0x1E00001,0x1E00001,0x1E00001,0xD5FC0000,0xD5FC0000,0xD5FC0000,0xEBF80000,0xEBF80000,0xF0000000,0xD5FC0000,0xD5FC0000,0xD5FC0000,0xEBF80000,0xEBF80000,0xF0000000,0xEBF80000,0xEBF80000,0xF0000000,0xF0000000,0xD5FC0000,0xD5FC0000,0xD5FC0000,0xEBF80000,0xEBF80000,0xF0000000,0xEBF80000,0xEBF80000,0xF0000000,0xF0000000,0xEBF80000, -0xEBF80000,0xF0000000,0xF0000000,0xF0000000,0x9FFC0000,0x27FC0000,0x1E00001,0xCDFC0000,0xDDFC0000,0xE5FC0000,0xE9F80000,0xEDF80000,0xBDFC0000,0xD5FC0000,0xE5FC0000,0xF0000000,0xE5FC0000,0x1EC0001,0xE9FC0000,0xF3FC0000,0xF6000000,0xE9FC0000,0xF3FC0000,0xF6000000,0xF3FC0000,0xF6000000,0xF6000000,0xE9FC0000,0xF3FC0000,0xF6000000,0xF3FC0000,0xF6000000, -0xF6000000,0xF3FC0000,0xF6000000,0xF6000000,0xF6000000,0xE9FC0000,0xF3FC0000,0xF6000000,0xF3FC0000,0xF6000000,0xF6000000,0xF3FC0000,0xF6000000,0xF6000000,0xF6000000,0xF3FC0000,0xF6000000,0xF6000000,0xF6000000,0xF6000000,0xDBFC0000,0x87FC0000,0x87FC0000,0xEDFC0000,0xF3F80000,0xF5FC0000,0xF6000000,0xF6000000,0xE3FC0000,0xEFFC0000,0xF7E00000,0xF6000000, -0xF1FC0000,0x1DC008C,0xFFDC0044,0xFDD80033,0xF7D80033,0xFDD80034,0xFDD40013,0xF9D4001A,0xF9D40024,0xF5D40016,0xF3D40026,0xFFD0003C,0xFDD0000A,0xF9D0000F,0xFBCC0013,0xF7CC0002,0xF3D00016,0xF7D00034,0xF5CC000F,0xF3CC0019,0xF1CC0035,0xCFFC0088,0xFFC80035,0xF7CC0033,0xFBC40026,0xF7C80012,0xF3CC0026,0xFDB80033,0xF7BC0009,0xF3C00015,0xF1C40034,0xE7FC0088, -0xF7A80033,0xF3B00026,0xF1A40034,0xEE000088,0xFFD8004E,0xF7DC0076,0xF7DC007B,0xFFD4001A,0xFFD00002,0xF9D00002,0xF7D00002,0xF7CC0002,0xFFD4004A,0xFFD00015,0xF7CC0009,0xF3C00015,0xE1FC0088,0x1E40033,0xFFE0000E,0xFBDC000A,0xF7DC000A,0xFFDC0013,0xFBD80002,0xF7DC0001,0xF7DC0013,0xF7D80005,0xF3D80015,0xD9FC0033,0xFDD00009,0xF7D4000A,0xFBCC0012,0xF7CC0001, -0xF3D40014,0xEDF80033,0xF7BC0008,0xF3C00014,0xF0000034,0xD9FC0033,0xFDD00009,0xF7D4000A,0xFBCC0012,0xF7CC0001,0xF3D40014,0xEDF80033,0xF7BC0008,0xF3C00014,0xF0000034,0xEDF80033,0xF7BC0008,0xF3C00014,0xF0000034,0xF0000034,0xFDE00021,0xF9E0002D,0xFBE4002A,0xFFD8000D,0xFFD00001,0xF9D00001,0xF7D00001,0xF7CC0001,0xFFDC0019,0xFFD4000A,0xF7CC0009,0xF3C00014, -0xE7FC0033,0x1D80033,0x1D80033,0x1D80033,0x1D80033,0xFFD40012,0xFFD40012,0xFFD40012,0xF5D40012,0xF5D40012,0xF1D40012,0xFDD00009,0xFDD00009,0xFDD00009,0xF5D00002,0xF5D00002,0xF1D00005,0xF3CC0009,0xF3CC0009,0xF1CC0001,0xEFCC0009,0xC7FC0033,0xC7FC0033,0xC7FC0033,0xF7C80012,0xF7C80012,0xF1CC0012,0xF5C40009,0xF5C40009,0xF1C40001,0xEFC40009,0xE3FC0033, -0xE3FC0033,0xF1B80012,0xEFAC0008,0xEC000034,0xFDD4001D,0xF5D8002A,0x1D80033,0xFFD4000A,0xFFD00001,0xF9D00001,0xF7D00002,0xF5CC0002,0xFFD00018,0xFFD00005,0xF7CC0008,0xF1C40001,0xDDF80033,0x1DC000A,0x1DC000A,0x1DC000A,0x1DC000A,0xF7DC0001,0xF7DC0001,0xF7DC0001,0xF3D80001,0xF3D80001,0xF1D80001,0xCFFC0008,0xCFFC0008,0xCFFC0008,0xF3D40001,0xF3D40001, -0xF1D40001,0xE7FC0008,0xE7FC0008,0xF1C80000,0xEE000008,0xCFFC0008,0xCFFC0008,0xCFFC0008,0xF3D40001,0xF3D40001,0xF1D40001,0xE7FC0008,0xE7FC0008,0xF1C80000,0xEE000008,0xE7FC0008,0xE7FC0008,0xF1C80000,0xEE000008,0xEE000008,0xFFD80004,0xF7DC0005,0x1DC000A,0xFDD80001,0xFBD40000,0xF7D40000,0xF5D40000,0xF3D40001,0xF1DC0005,0xFBD40001,0xE1FC0008,0xF1C80000, -0xE1FC0008,0x1E80012,0xFDE40002,0xF9E40001,0xF7E00001,0xDFFC0012,0xFBD80001,0xF7DC0000,0xEFFC0012,0xF7C80000,0xF2000014,0xDFFC0012,0xFBD80001,0xF7DC0000,0xEFFC0012,0xF7C80000,0xF2000014,0xEFFC0012,0xF7C80000,0xF2000014,0xF2000014,0xDFFC0012,0xFBD80001,0xF7DC0000,0xEFFC0012,0xF7C80000,0xF2000014,0xEFFC0012,0xF7C80000,0xF2000014,0xF2000014,0xEFFC0012, -0xF7C80000,0xF2000014,0xF2000014,0xF2000014,0xF7E8000D,0x57FC0012,0xFDE8000D,0xFDE00008,0xFFD00001,0xFBCC0000,0xF7D00000,0xF7C00000,0xF9E4000D,0xFFD80005,0xF7D40001,0xF2000014,0xEBFC0012,0x1D40012,0x1D40012,0x1D40012,0x1D40012,0x1D40012,0x1D40012,0x1D40012,0x1D40012,0x1D40012,0x1D40012,0xF7D00001,0xF7D00001,0xF7D00001,0xF7D00001,0xF7D00001, -0xF7D00001,0xEFD00001,0xEFD00001,0xEFD00001,0xEDCC0001,0xC1FC0012,0xC1FC0012,0xC1FC0012,0xC1FC0012,0xC1FC0012,0xC1FC0012,0xF1C40001,0xF1C40001,0xF1C40001,0xEDC80000,0xE1F80012,0xE1F80012,0xE1F80012,0xEDB40000,0xE8000014,0xF3D4000D,0x1D40012,0x1D40012,0xFBD00005,0xFFD00001,0xF9D00001,0xF9D00001,0xF5D00001,0xFBD00008,0xFDCC0004,0xF3CC0000,0xF1C40001, -0xD9FC0012,}; -static const uint32_t g_etc1_to_bc7_m6_table30[] = { -0x1DC0001,0x1DC0001,0x1DC0001,0x1DC0001,0x1DC0001,0x1DC0001,0x1DC0001,0x1DC0001,0x1DC0001,0x1DC0001,0x1DC0001,0x1DC0001,0x1DC0001,0x1DC0001,0x1DC0001,0x1DC0001,0x1DC0001,0x1DC0001,0x1DC0001,0x1DC0001,0xCFFC0000,0xCFFC0000,0xCFFC0000,0xCFFC0000,0xCFFC0000,0xCFFC0000,0xCFFC0000,0xCFFC0000,0xCFFC0000,0xCFFC0000,0xE7FC0000, -0xE7FC0000,0xE7FC0000,0xE7FC0000,0xEE000000,0x1DC0001,0x1DC0001,0x1DC0001,0x1DC0001,0x1DC0001,0x1DC0001,0x1DC0001,0x1DC0001,0x7FC0000,0x7FC0000,0x7FC0000,0xCFFC0000,0xE1FC0000,0x1E80001,0x1E80001,0x1E80001,0x1E80001,0x1E80001,0x1E80001,0x1E80001,0x1E80001,0x1E80001,0x1E80001,0xE3FC0000,0xE3FC0000,0xE3FC0000,0xE3FC0000,0xE3FC0000, -0xE3FC0000,0xF1F80000,0xF1F80000,0xF1F80000,0xF4000000,0xE3FC0000,0xE3FC0000,0xE3FC0000,0xE3FC0000,0xE3FC0000,0xE3FC0000,0xF1F80000,0xF1F80000,0xF1F80000,0xF4000000,0xF1F80000,0xF1F80000,0xF1F80000,0xF4000000,0xF4000000,0x67FC0000,0x1E80001,0x1E80001,0xBBFC0000,0xD1FC0000,0xDBFC0000,0xDBFC0000,0xE7FC0000,0xBBFC0000,0xD1FC0000,0xEDFC0000,0xF1F80000, -0xEDFC0000,0x1F00001,0x1F00001,0x1F00001,0x1F00001,0xEFFC0000,0xEFFC0000,0xEFFC0000,0xF7F80000,0xF7F80000,0xF8000000,0xEFFC0000,0xEFFC0000,0xEFFC0000,0xF7F80000,0xF7F80000,0xF8000000,0xF7F80000,0xF7F80000,0xF8000000,0xF8000000,0xEFFC0000,0xEFFC0000,0xEFFC0000,0xF7F80000,0xF7F80000,0xF8000000,0xF7F80000,0xF7F80000,0xF8000000,0xF8000000,0xF7F80000, -0xF7F80000,0xF8000000,0xF8000000,0xF8000000,0xD7FC0000,0xA7FC0000,0x1F00001,0xEBFC0000,0xF1FC0000,0xF5FC0000,0xF5FC0000,0xF7FC0000,0xE3FC0000,0xEFFC0000,0xF5FC0000,0xF8000000,0xF5FC0000,0x1FC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000, -0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xF7FC0001,0xF7FC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFFF00000,0xFE000000, -0xFFFC0000,0x1EC008C,0xFFEC005F,0xFFE80043,0xFFE80033,0xFFE8004C,0xFFE4002B,0xFFE4001B,0xFFE40026,0xFDE40016,0xFBE40026,0xFFE80054,0xFFE40023,0xFFE00011,0xFFE0001B,0xFFDC0002,0xFBE00016,0xFFE00034,0xFDDC000F,0xFBDC0019,0xF9DC0035,0xE9FC0088,0xFFE4004B,0xFFDC0033,0xFFD80036,0xFFD80012,0xFBDC0026,0xFFD8003D,0xFFCC0009,0xFBD00015,0xF9D40034,0xF3FC0088, -0xFFB80033,0xFBC00026,0xF9B40034,0xF6000088,0xFFEC006A,0xFFEC0076,0xFFEC007B,0xFFE8004F,0xFFE40026,0xFFE0000C,0xFFE00002,0xFFDC0002,0xFDEC006A,0xFFE4004A,0xFFDC0009,0xFBD00015,0xF1FC0088,0x1F40033,0xFDF00023,0xFFF0000E,0xFFEC000A,0xFDF00023,0xFFEC000A,0xFFEC0001,0xFFEC0013,0xFFE80005,0xFBE80015,0xF1FC0033,0xFFEC0019,0xFFE4000A,0xFFE40015,0xFFDC0001, -0xFBE40014,0xF9F80033,0xFFCC0008,0xFBD00014,0xF8000034,0xF1FC0033,0xFFEC0019,0xFFE4000A,0xFFE40015,0xFFDC0001,0xFBE40014,0xF9F80033,0xFFCC0008,0xFBD00014,0xF8000034,0xF9F80033,0xFFCC0008,0xFBD00014,0xF8000034,0xF8000034,0xFDF4002A,0xF3F40033,0xF3F40033,0xFFEC001E,0xFFE80012,0xFFE40009,0xFFE00001,0xFFDC0001,0xFFF00029,0xFFF00021,0xFFDC0009,0xFBD00014, -0xF7FC0033,0x1E80033,0x1E80033,0x1E80033,0x1E80033,0xFDE4001B,0xFDE4001B,0xFDE4001B,0xFDE40012,0xFDE40012,0xF9E40012,0xFFE00011,0xFFE00011,0xFFE00011,0xFDE00002,0xFDE00002,0xF9E00005,0xFBDC0009,0xFBDC0009,0xF9DC0001,0xF7DC0009,0xDFFC0033,0xDFFC0033,0xDFFC0033,0xFFD80012,0xFFD80012,0xF9DC0012,0xFDD40009,0xFDD40009,0xF9D40001,0xF7D40009,0xEFFC0033, -0xEFFC0033,0xF9C80012,0xF7BC0008,0xF4000034,0xFFE80022,0xFDE8002A,0x1E80033,0xFDE4001A,0xFFE4000D,0xFFE00003,0xFFE00002,0xFDDC0002,0xFFE40021,0xFFE00018,0xFFDC0008,0xF9D40001,0xEBFC0033,0x1EC000A,0x1EC000A,0x1EC000A,0x1EC000A,0xFFEC0001,0xFFEC0001,0xFFEC0001,0xFBE80001,0xFBE80001,0xF9E80001,0xE9FC0008,0xE9FC0008,0xE9FC0008,0xFBE40001,0xFBE40001, -0xF9E40001,0xF3FC0008,0xF3FC0008,0xF9D80000,0xF6000008,0xE9FC0008,0xE9FC0008,0xE9FC0008,0xFBE40001,0xFBE40001,0xF9E40001,0xF3FC0008,0xF3FC0008,0xF9D80000,0xF6000008,0xF3FC0008,0xF3FC0008,0xF9D80000,0xF6000008,0xF6000008,0xFBEC0005,0xFFEC0005,0x1EC000A,0xF9EC0005,0xFDE80002,0xFFE40000,0xFDE40000,0xFBE40001,0xF9EC0005,0xFFE80002,0xF1FC0008,0xF9D80000, -0xF1FC0008,0x1F80012,0xFFF4000A,0xFFF00005,0xFFF00001,0xF7FC0012,0xFFF00005,0xFFEC0000,0xFBFC0012,0xFFD80000,0xFA000014,0xF7FC0012,0xFFF00005,0xFFEC0000,0xFBFC0012,0xFFD80000,0xFA000014,0xFBFC0012,0xFFD80000,0xFA000014,0xFA000014,0xF7FC0012,0xFFF00005,0xFFEC0000,0xFBFC0012,0xFFD80000,0xFA000014,0xFBFC0012,0xFFD80000,0xFA000014,0xFA000014,0xFBFC0012, -0xFFD80000,0xFA000014,0xFA000014,0xFA000014,0xFFF8000D,0xD7FC0012,0xF5F80012,0xFFF4000D,0xFDF4000D,0xFFE80005,0xFFE00000,0xFFD00000,0xF5FC0012,0xFFF00011,0xFFE40001,0xFA000014,0xFBFC0012,0x1E40012,0x1E40012,0x1E40012,0x1E40012,0x1E40012,0x1E40012,0x1E40012,0x1E40012,0x1E40012,0x1E40012,0xFFE00001,0xFFE00001,0xFFE00001,0xFFE00001,0xFFE00001, -0xFFE00001,0xF7E00001,0xF7E00001,0xF7E00001,0xF5DC0001,0xD9FC0012,0xD9FC0012,0xD9FC0012,0xD9FC0012,0xD9FC0012,0xD9FC0012,0xF9D40001,0xF9D40001,0xF9D40001,0xF5D80000,0xEDF80012,0xEDF80012,0xEDF80012,0xF5C40000,0xF0000014,0xFBE4000D,0x1E40012,0x1E40012,0xFBE0000A,0xFDE00005,0xFFE00002,0xFFE00002,0xFDE00001,0xF7E4000D,0xFDE00008,0xFBDC0000,0xF9D40001, -0xE7FC0012,}; -static const uint32_t g_etc1_to_bc7_m6_table31[] = { -0x1EC0001,0x1EC0001,0x1EC0001,0x1EC0001,0x1EC0001,0x1EC0001,0x1EC0001,0x1EC0001,0x1EC0001,0x1EC0001,0x1EC0001,0x1EC0001,0x1EC0001,0x1EC0001,0x1EC0001,0x1EC0001,0x1EC0001,0x1EC0001,0x1EC0001,0x1EC0001,0xE9FC0000,0xE9FC0000,0xE9FC0000,0xE9FC0000,0xE9FC0000,0xE9FC0000,0xE9FC0000,0xE9FC0000,0xE9FC0000,0xE9FC0000,0xF3FC0000, -0xF3FC0000,0xF3FC0000,0xF3FC0000,0xF6000000,0x1EC0001,0x1EC0001,0x1EC0001,0x1EC0001,0x1EC0001,0x1EC0001,0x1EC0001,0x1EC0001,0x87FC0000,0x87FC0000,0x87FC0000,0xE9FC0000,0xF1FC0000,0x1F80001,0x1F80001,0x1F80001,0x1F80001,0x1F80001,0x1F80001,0x1F80001,0x1F80001,0x1F80001,0x1F80001,0xFBFC0000,0xFBFC0000,0xFBFC0000,0xFBFC0000,0xFBFC0000, -0xFBFC0000,0xFDF80000,0xFDF80000,0xFDF80000,0xFC000000,0xFBFC0000,0xFBFC0000,0xFBFC0000,0xFBFC0000,0xFBFC0000,0xFBFC0000,0xFDF80000,0xFDF80000,0xFDF80000,0xFC000000,0xFDF80000,0xFDF80000,0xFDF80000,0xFC000000,0xFC000000,0xE7FC0000,0x1F80001,0x1F80001,0xF5FC0000,0xF7FC0000,0xF9FC0000,0xF9FC0000,0xFBFC0000,0xF5FC0000,0xF7FC0000,0xFDF80000,0xFDF80000, -0xFDF80000,0x1FC0001,0x1FC0001,0x1FC0001,0x1FC0001,0xFDFC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000, -0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFBFC0001,0xF7FC0001,0x1FC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFFFC0000,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0x1FC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000, -0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xF7FC0001,0xF7FC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFFF00000,0xFE000000, -0xFFFC0000,0x1F8002C,0xFFF80027,0xFFF80024,0xFFF80023,0xFFF80022,0xFFF4001F,0xFFF4001B,0xFFF4001A,0xFFF40016,0xFFF40012,0xFFF4001C,0xFFF40017,0xFFF40013,0xFFF00012,0xFFF0000E,0xFFF0000A,0xFFF00009,0xFFF00005,0xFFF00001,0xFFEC0005,0xF7FC002C,0xFDF80027,0xFFF40023,0xFFF0001A,0xFFF00016,0xFFF00012,0xFFF00011,0xFFF0000D,0xFFE40005,0xFFE40005,0xFBFC002C, -0xFFEC0023,0xFFE00012,0xFFCC0004,0xFC00002C,0xFFF80027,0xF5F8002C,0xF5F8002C,0xFFF80022,0xFFF4001A,0xFFF40012,0xFFF40011,0xFFF00009,0xFFF80022,0xFFF4001F,0xFFF0000B,0xFFE40005,0xFBFC002C,0x1FC0003,0xFDFC0003,0xFFFC0002,0xFFFC0002,0xFDFC0003,0xFFFC0002,0xFFFC0002,0xFFFC0001,0xFFFC0001,0xFFF80001,0xFDFC0003,0xFFFC0002,0xFFFC0002,0xFFFC0001,0xFFF80001, -0xFFF80000,0xFFF80003,0xFFF80002,0xFFF00000,0xFE000004,0xFDFC0003,0xFFFC0002,0xFFFC0002,0xFFFC0001,0xFFF80001,0xFFF80000,0xFFF80003,0xFFF80002,0xFFF00000,0xFE000004,0xFFF80003,0xFFF80002,0xFFF00000,0xFE000004,0xFE000004,0xFDFC0003,0xF7FC0003,0xF7FC0003,0xFDFC0003,0xFFFC0002,0xFFFC0001,0xFFF80001,0xFFF80001,0xFDFC0003,0xFDFC0003,0xFFF80002,0xFFF00000, -0xFFF80003,0x1F80023,0x1F80023,0x1F80023,0x1F80023,0xFFF4001B,0xFFF4001B,0xFFF4001B,0xFFF40016,0xFFF40016,0xFFF40012,0xFFF40013,0xFFF40013,0xFFF40013,0xFFF0000E,0xFFF0000E,0xFFF0000A,0xFFF00005,0xFFF00005,0xFFF00001,0xFDEC0005,0xF7FC0023,0xF7FC0023,0xF7FC0023,0xFFF00016,0xFFF00016,0xFFF00012,0xFFF0000D,0xFFF0000D,0xFFE40005,0xFDE80004,0xFBFC0023, -0xFBFC0023,0xFFE00012,0xFDD40004,0xFA000024,0xFFF40022,0xF5F80023,0x1F80023,0xFFF4001D,0xFFF40016,0xFFF40011,0xFFF40011,0xFFF00009,0xFFF4001D,0xFFF40016,0xFFF0000B,0xFFE40005,0xFBFC0023,0x1FC0002,0x1FC0002,0x1FC0002,0x1FC0002,0xFDFC0002,0xFDFC0002,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFFF80001,0xFDFC0002,0xFDFC0002,0xFDFC0002,0xFFF80001,0xFFF80001, -0xFFF80000,0xFFF80002,0xFFF80002,0xFFF00000,0xFC000004,0xFDFC0002,0xFDFC0002,0xFDFC0002,0xFFF80001,0xFFF80001,0xFFF80000,0xFFF80002,0xFFF80002,0xFFF00000,0xFC000004,0xFFF80002,0xFFF80002,0xFFF00000,0xFC000004,0xFC000004,0xFBFC0002,0xF7FC0002,0x1FC0002,0xFDFC0002,0xFDFC0002,0xFFF80001,0xFFF80001,0xFFF80001,0xFDFC0002,0xFDFC0002,0xFFF80002,0xFFF00000, -0xFFF80002,0x1FC0002,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000, -0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0002,0xF7FC0002,0xF7FC0002,0xFDFC0002,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFFFC0000,0xFDFC0002,0xFDFC0002,0xFFFC0000,0xFE000000,0xFFFC0000,0x1F40012,0x1F40012,0x1F40012,0x1F40012,0x1F40012,0x1F40012,0x1F40012,0x1F40012,0x1F40012,0x1F40012,0xFDF0000A,0xFDF0000A,0xFDF0000A,0xFDF0000A,0xFDF0000A, -0xFDF0000A,0xFFF00001,0xFFF00001,0xFFF00001,0xFDEC0001,0xF1FC0012,0xF1FC0012,0xF1FC0012,0xF1FC0012,0xF1FC0012,0xF1FC0012,0xFDEC0005,0xFDEC0005,0xFDEC0005,0xFDE80000,0xF9F80012,0xF9F80012,0xF9F80012,0xFDD40000,0xF8000014,0xF3F40012,0x1F40012,0x1F40012,0xFFF4000D,0xFDF4000D,0xFFF0000A,0xFFF0000A,0xFFF00005,0xFFF4000D,0xFDF4000D,0xFFF00002,0xFDEC0005, -0xF7FC0012,}; -static const uint32_t g_etc1_to_bc7_m6_table32[] = { -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1, -0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, -0x0,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1, -0x1,0x80001,0x80001,0x80001,0x80001,0x20C0000,0x20C0000,0x20C0000,0x180000,0x180000,0x4000000,0x20C0000,0x20C0000,0x20C0000,0x180000,0x180000,0x4000000,0x180000,0x180000,0x4000000,0x4000000,0x20C0000,0x20C0000,0x20C0000,0x180000,0x180000,0x4000000,0x180000,0x180000,0x4000000,0x4000000,0x180000, -0x180000,0x4000000,0x4000000,0x4000000,0xC0000,0xC080000,0x80001,0xC0000,0x100000,0x140000,0x140000,0x200000,0xC0000,0x20C0000,0x140000,0x4000000,0x140000,0x200001,0x2300000,0x640000,0x10000000,0x2300000,0x640000,0x10000000,0x640000,0x10000000,0x10000000,0x2300000,0x640000,0x10000000,0x640000,0x10000000, -0x10000000,0x640000,0x10000000,0x10000000,0x10000000,0x2300000,0x640000,0x10000000,0x640000,0x10000000,0x10000000,0x640000,0x10000000,0x10000000,0x10000000,0x640000,0x10000000,0x10000000,0x10000000,0x10000000,0x2280000,0x240000,0x240000,0x380000,0x500000,0x9C0000,0x10000000,0x10000000,0x22C0000,0x400000,0x1F40000,0x10000000, -0x480000,0xC00C2,0x2E040011,0x18040011,0x10040011,0x20000048,0x18000009,0x10000001,0x10000048,0xE00001D,0xA000048,0x14000099,0x12000035,0xE00001D,0xC000060,0xC000030,0xA000058,0xA000099,0xA000059,0x8000074,0x6000099,0x1000C2,0x12000059,0xC000031,0xC000070,0xC000040,0x8000062,0x80000A7,0xA000069,0x800007D,0x600009D,0x1800C2, -0x8000089,0x8000098,0x40000B2,0x40000C2,0x42000029,0xA8000048,0xEA040011,0x1E000029,0x16000032,0xE000032,0xC000022,0xA00003D,0x2C000056,0x1A00003D,0xC00004F,0x800007D,0x1400C2,0x10009A,0x2E04000D,0x1804000D,0x1004000D,0x20000048,0x18000009,0x10000001,0x10000048,0xE00001D,0xA000048,0x140099,0x12000035,0xE00001D,0xC000060,0xC000030, -0xA000058,0x240099,0xA000059,0x8000074,0x6000099,0x140099,0x12000035,0xE00001D,0xC000060,0xC000030,0xA000058,0x240099,0xA000059,0x8000074,0x6000099,0x240099,0xA000059,0x8000074,0x6000099,0x6000099,0x42000029,0xA8000048,0xEA04000D,0x1E000029,0x16000032,0xE000032,0xC000022,0xA00003D,0x2C00004D,0x1A000039,0xC00004E,0x8000074, -0x1C0099,0x40011,0x40011,0x40011,0x40011,0xE000000,0xE000000,0xE000000,0x6000000,0x6000000,0x4000000,0x400000D,0x400000D,0x400000D,0x6000004,0x6000004,0x4000004,0x200000D,0x200000D,0x2000008,0x200000D,0x40011,0x40011,0x40011,0x6000008,0x6000008,0x2000006,0x200000E,0x200000E,0x2000009,0x200000E,0x80011, -0x80011,0x200000C,0x2000011,0x12,0x20000004,0x48000000,0x40011,0x10000004,0x6000005,0x8000004,0x8000004,0x4000005,0xC000009,0xA000006,0x200000D,0x2000009,0x80011,0x4000D,0x4000D,0x4000D,0x4000D,0xE000000,0xE000000,0xE000000,0x6000000,0x6000000,0x4000000,0x4000D,0x4000D,0x4000D,0x6000004,0x6000004, -0x4000004,0x8000D,0x8000D,0x2000008,0x200000D,0x4000D,0x4000D,0x4000D,0x6000004,0x6000004,0x4000004,0x8000D,0x8000D,0x2000008,0x200000D,0x8000D,0x8000D,0x2000008,0x200000D,0x200000D,0x20000004,0x48000000,0x4000D,0x10000004,0x6000005,0x8000004,0x8000004,0x4000005,0x4040008,0xA000005,0x8000D,0x2000008, -0x8000D,0x14004A,0x260C0001,0x16080001,0x10080001,0x200048,0x18000009,0x10000001,0x3C0048,0xE00001D,0xA000048,0x200048,0x18000009,0x10000001,0x3C0048,0xE00001D,0xA000048,0x3C0048,0xE00001D,0xA000048,0xA000048,0x200048,0x18000009,0x10000001,0x3C0048,0xE00001D,0xA000048,0x3C0048,0xE00001D,0xA000048,0xA000048,0x3C0048, -0xE00001D,0xA000048,0xA000048,0xA000048,0x42000019,0x180048,0xAE0C0001,0x1E000019,0x16000019,0x10000019,0xE000014,0xE000028,0x32000022,0x1E00001D,0x10000011,0xA000048,0x2C0048,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, -0x0,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x1,0x2,0x2,0x2,0x2,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1, -0x2,}; -static const uint32_t g_etc1_to_bc7_m6_table33[] = { -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1, -0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x40001,0x40001,0x40001,0x40001,0x40001,0x40001,0x40001,0x40001,0x40001,0x40001,0x80000,0x80000,0x80000,0x80000,0x80000, -0x80000,0xC0000,0xC0000,0xC0000,0x2000000,0x80000,0x80000,0x80000,0x80000,0x80000,0x80000,0xC0000,0xC0000,0xC0000,0x2000000,0xC0000,0xC0000,0xC0000,0x2000000,0x2000000,0xA040000,0x40001,0x40001,0x6040000,0x80000,0x80000,0x80000,0x80000,0x6040000,0x80000,0xC0000,0xC0000, -0xC0000,0x180001,0x180001,0x180001,0x180001,0x2240000,0x2240000,0x2240000,0x4C0000,0x4C0000,0xC000000,0x2240000,0x2240000,0x2240000,0x4C0000,0x4C0000,0xC000000,0x4C0000,0x4C0000,0xC000000,0xC000000,0x2240000,0x2240000,0x2240000,0x4C0000,0x4C0000,0xC000000,0x4C0000,0x4C0000,0xC000000,0xC000000,0x4C0000, -0x4C0000,0xC000000,0xC000000,0xC000000,0x41C0000,0x1C0000,0x180001,0x240000,0x2C0000,0x340000,0x3C0000,0x5C0000,0x200000,0x2240000,0x340000,0xC000000,0x340000,0x300001,0x480000,0x940000,0x18000000,0x480000,0x940000,0x18000000,0x940000,0x18000000,0x18000000,0x480000,0x940000,0x18000000,0x940000,0x18000000, -0x18000000,0x940000,0x18000000,0x18000000,0x18000000,0x480000,0x940000,0x18000000,0x940000,0x18000000,0x18000000,0x940000,0x18000000,0x18000000,0x18000000,0x940000,0x18000000,0x18000000,0x18000000,0x18000000,0x23C0000,0x2340000,0x2340000,0x540000,0x780000,0xEC0000,0x18000000,0x18000000,0x440000,0x5C0000,0xBC80000,0x18000000, -0x680000,0x14017F,0x3E0C005E,0x220C005E,0x180C005E,0x3404004D,0x22040006,0x1804000E,0x1A04004D,0x16000011,0x1204004D,0x2A0000F3,0x22000045,0x18000032,0x18000069,0x14000021,0x12000051,0x140000F3,0x10000084,0x10000090,0xC0000F4,0x1C017F,0x1E0000AE,0x18000072,0x180000A9,0x12000051,0x12000075,0x12000118,0x100000A8,0xE0000B2,0xC000104,0x38017F, -0x100000FD,0xE0000FD,0xA000139,0xA000181,0x6400001A,0xFA04004F,0xFE0C0067,0x3400001A,0x22000021,0x1A00001A,0x1600000E,0x14000038,0x42000066,0x2C000041,0x1600005C,0xE0000B2,0x28017F,0x1C00F3,0x3A100032,0x20100032,0x18100032,0x30080049,0x22040002,0x18080005,0x1A040049,0x1604000E,0x12040049,0x2800F3,0x22000045,0x18000032,0x18000069,0x14000021, -0x12000051,0x5000F3,0x10000084,0x10000090,0xC0000F4,0x2800F3,0x22000045,0x18000032,0x18000069,0x14000021,0x12000051,0x5000F3,0x10000084,0x10000090,0xC0000F4,0x5000F3,0x10000084,0x10000090,0xC0000F4,0xC0000F4,0x6400001A,0xEC080049,0xF0100036,0x3400001A,0x22000021,0x1A00001A,0x1600000E,0x14000038,0x50000052,0x2C000038,0x1600005B,0x10000090, -0x3800F3,0xC005E,0xC005E,0xC005E,0xC005E,0x22040005,0x22040005,0x22040005,0x12040005,0x12040005,0xC040005,0x16000032,0x16000032,0x16000032,0x12000009,0x12000009,0xC000001,0xA000034,0xA000034,0xA000014,0x6000034,0x20C005D,0x20C005D,0x20C005D,0xC000021,0xC000021,0xC000011,0x8000043,0x8000043,0x8000022,0x6000038,0x18005D, -0x18005D,0x800003D,0x400004D,0x400005D,0x52000005,0xAA040005,0xC005E,0x2C00000A,0x1A000008,0x1600000A,0x12000008,0xC00000D,0x3400001D,0x1C000016,0xE000033,0x8000022,0x14005D,0x100032,0x100032,0x100032,0x100032,0x1E080001,0x1E080001,0x1E080001,0x10080001,0x10080001,0xC040001,0x180032,0x180032,0x180032,0x12000009,0x12000009, -0xC000001,0x2C0032,0x2C0032,0xA000014,0x6000034,0x180032,0x180032,0x180032,0x12000009,0x12000009,0xC000001,0x2C0032,0x2C0032,0xA000014,0x6000034,0x2C0032,0x2C0032,0xA000014,0x6000034,0x6000034,0x52000005,0x8C080001,0x100032,0x2C00000A,0x1A000008,0x1600000A,0x12000008,0xC00000D,0x34000014,0x1C000012,0x200032,0xA000014, -0x200032,0x24004A,0x2E1C0001,0x1E180001,0x18180001,0x380048,0x22040001,0x180C0001,0x700048,0x16000008,0x12000048,0x380048,0x22040001,0x180C0001,0x700048,0x16000008,0x12000048,0x700048,0x16000008,0x12000048,0x12000048,0x380048,0x22040001,0x180C0001,0x700048,0x16000008,0x12000048,0x700048,0x16000008,0x12000048,0x12000048,0x700048, -0x16000008,0x12000048,0x12000048,0x12000048,0x7400000A,0x280048,0xB61C0001,0x38000008,0x2204000D,0x1C000008,0x18000004,0x14000014,0x50000012,0x2E00000D,0x1A000001,0x12000048,0x500048,0x40005,0x40005,0x40005,0x40005,0x40005,0x40005,0x40005,0x40005,0x40005,0x40005,0x8000000,0x8000000,0x8000000,0x8000000,0x8000000, -0x8000000,0x4000000,0x4000000,0x4000000,0x2000000,0x40005,0x40005,0x40005,0x40005,0x40005,0x40005,0x2000002,0x2000002,0x2000002,0x2000001,0x5,0x5,0x5,0x2000004,0x5,0x28000000,0x40005,0x40005,0x12000000,0xC000000,0xA000000,0xA000000,0x6000000,0x12000001,0xC000001,0x4000000,0x2000002, -0x5,}; -static const uint32_t g_etc1_to_bc7_m6_table34[] = { -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1, -0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x140001,0x140001,0x140001,0x140001,0x140001,0x140001,0x140001,0x140001,0x140001,0x140001,0x200000,0x200000,0x200000,0x200000,0x200000, -0x200000,0x3C0000,0x3C0000,0x3C0000,0xA000000,0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,0x3C0000,0x3C0000,0x3C0000,0xA000000,0x3C0000,0x3C0000,0x3C0000,0xA000000,0xA000000,0x180000,0x140001,0x140001,0x2180000,0x1C0000,0x1C0000,0x1C0000,0x240000,0x2180000,0x1C0000,0x2C0000,0x3C0000, -0x2C0000,0x280001,0x280001,0x280001,0x280001,0x23C0000,0x23C0000,0x23C0000,0x7C0000,0x7C0000,0x14000000,0x23C0000,0x23C0000,0x23C0000,0x7C0000,0x7C0000,0x14000000,0x7C0000,0x7C0000,0x14000000,0x14000000,0x23C0000,0x23C0000,0x23C0000,0x7C0000,0x7C0000,0x14000000,0x7C0000,0x7C0000,0x14000000,0x14000000,0x7C0000, -0x7C0000,0x14000000,0x14000000,0x14000000,0x300000,0x2C0000,0x280001,0x380000,0x440000,0x580000,0x640000,0x980000,0x340000,0x23C0000,0x580000,0x14000000,0x580000,0x400001,0x600000,0xC40000,0x20000000,0x600000,0xC40000,0x20000000,0xC40000,0x20000000,0x20000000,0x600000,0xC40000,0x20000000,0xC40000,0x20000000, -0x20000000,0xC40000,0x20000000,0x20000000,0x20000000,0x600000,0xC40000,0x20000000,0xC40000,0x20000000,0x20000000,0xC40000,0x20000000,0x20000000,0x20000000,0xC40000,0x20000000,0x20000000,0x20000000,0x20000000,0x4500000,0xA440000,0xA440000,0x26C0000,0xA00000,0x13C0000,0x20000000,0x20000000,0x580000,0x7C0000,0x13D80000,0x20000000, -0x8C0000,0x200253,0x4E1400DE,0x2A1400DF,0x201400DE,0x440C0085,0x2C0C0042,0x220C005A,0x240C0085,0x1E0C0045,0x1A0C0085,0x420000F3,0x30000032,0x2008004A,0x2600004E,0x20000001,0x1A00004C,0x200000F3,0x1C000054,0x18000074,0x140000F4,0x300253,0x28000106,0x200000DD,0x220000D3,0x1E000069,0x18000099,0x1E000158,0x1A0000AF,0x180000B4,0x14000125,0x5C0253, -0x16000179,0x16000159,0x100001AD,0x10000255,0x9C000003,0xF01000B1,0xF4180106,0x4E000001,0x36000001,0x28000001,0x20000005,0x1E00000C,0x64000051,0x3E00001D,0x20000042,0x180000B4,0x400253,0x2C00F3,0x42200032,0x28200032,0x20200032,0x38180049,0x2A140002,0x20180005,0x22140049,0x1E14000E,0x1A140049,0x4000F3,0x30000032,0x20100032,0x2404004E,0x20000001, -0x1A040049,0x8000F3,0x1C000054,0x18000074,0x140000F4,0x4000F3,0x30000032,0x20100032,0x2404004E,0x20000001,0x1A040049,0x8000F3,0x1C000054,0x18000074,0x140000F4,0x8000F3,0x1C000054,0x18000074,0x140000F4,0x140000F4,0x9C000003,0xF4180049,0xF8200036,0x4E000001,0x36000001,0x28000001,0x20080001,0x1E00000C,0x6C000021,0x3E00000D,0x2000003E,0x18000074, -0x5C00F3,0x1400DE,0x1400DE,0x1400DE,0x1400DE,0x320C003D,0x320C003D,0x320C003D,0x1C0C003D,0x1C0C003D,0x140C003D,0x30000032,0x30000032,0x30000032,0x1E000001,0x1E000001,0x1604000C,0x16000034,0x16000034,0x12000008,0xE000034,0x2000DD,0x2000DD,0x2000DD,0x18000059,0x18000059,0x12000041,0x12000068,0x12000068,0x1200002C,0xE00004D,0x3C00DD, -0x3C00DD,0xE000089,0xA000095,0xA0000DD,0x98000002,0xEE0C003D,0x1400DE,0x4E000000,0x32000001,0x26000001,0x24000002,0x1A000001,0x56000023,0x36000012,0x1E000036,0x1200002C,0x2C00DD,0x200032,0x200032,0x200032,0x200032,0x26180001,0x26180001,0x26180001,0x18180001,0x18180001,0x14140001,0x300032,0x300032,0x300032,0x1C040001,0x1C040001, -0x140C0000,0x5C0032,0x5C0032,0x12000008,0xE000034,0x300032,0x300032,0x300032,0x1C040001,0x1C040001,0x140C0000,0x5C0032,0x5C0032,0x12000008,0xE000034,0x5C0032,0x5C0032,0x12000008,0xE000034,0xE000034,0x7A080000,0x94180001,0x200032,0x4E000000,0x2C080001,0x24040000,0x1E080001,0x1A000001,0x5C000008,0x3C000002,0x400032,0x12000008, -0x400032,0x34004A,0x362C0001,0x26280001,0x20280001,0x500048,0x2A140001,0x201C0001,0xA00048,0x20000001,0x1A000048,0x500048,0x2A140001,0x201C0001,0xA00048,0x20000001,0x1A000048,0xA00048,0x20000001,0x1A000048,0x1A000048,0x500048,0x2A140001,0x201C0001,0xA00048,0x20000001,0x1A000048,0xA00048,0x20000001,0x1A000048,0x1A000048,0xA00048, -0x20000001,0x1A000048,0x1A000048,0x1A000048,0x9C000002,0x4380048,0xBE2C0001,0x4A040001,0x36000001,0x28000001,0x20080000,0x1E000008,0x72000008,0x46000004,0x220C0000,0x1A000048,0x700048,0xC003D,0xC003D,0xC003D,0xC003D,0xC003D,0xC003D,0xC003D,0xC003D,0xC003D,0xC003D,0x20000000,0x20000000,0x20000000,0x20000000,0x20000000, -0x20000000,0x10000000,0x10000000,0x10000000,0xA000000,0x10003D,0x10003D,0x10003D,0x10003D,0x10003D,0x10003D,0xC000014,0xC000014,0xC000014,0x800000D,0x18003D,0x18003D,0x18003D,0x8000028,0x400003D,0xA8000000,0xC003D,0xC003D,0x4A000000,0x34000000,0x28000000,0x28000000,0x1A000000,0x44000011,0x34000009,0x14000001,0xC000014, -0x14003D,}; -static const uint32_t g_etc1_to_bc7_m6_table35[] = { -0xC0001,0xC0001,0xC0001,0xC0001,0xC0001,0xC0001,0xC0001,0xC0001,0xC0001,0xC0001,0xC0001,0xC0001,0xC0001,0xC0001,0xC0001,0xC0001,0xC0001,0xC0001,0xC0001,0xC0001,0x140000,0x140000,0x140000,0x140000,0x140000,0x140000,0x140000,0x140000,0x140000,0x140000,0x240000, -0x240000,0x240000,0x240000,0x6000000,0xC0001,0xC0001,0xC0001,0xC0001,0xC0001,0xC0001,0xC0001,0xC0001,0xE0C0000,0xE0C0000,0xE0C0000,0x140000,0x1C0000,0x240001,0x240001,0x240001,0x240001,0x240001,0x240001,0x240001,0x240001,0x240001,0x240001,0x380000,0x380000,0x380000,0x380000,0x380000, -0x380000,0x700000,0x700000,0x700000,0x12000000,0x380000,0x380000,0x380000,0x380000,0x380000,0x380000,0x700000,0x700000,0x700000,0x12000000,0x700000,0x700000,0x700000,0x12000000,0x12000000,0x280000,0x240001,0x240001,0x2C0000,0x300000,0x340000,0x340000,0x400000,0x2C0000,0x300000,0x500000,0x700000, -0x500000,0x380001,0x380001,0x380001,0x380001,0x540000,0x540000,0x540000,0xAC0000,0xAC0000,0x1C000000,0x540000,0x540000,0x540000,0xAC0000,0xAC0000,0x1C000000,0xAC0000,0xAC0000,0x1C000000,0x1C000000,0x540000,0x540000,0x540000,0xAC0000,0xAC0000,0x1C000000,0xAC0000,0xAC0000,0x1C000000,0x1C000000,0xAC0000, -0xAC0000,0x1C000000,0x1C000000,0x1C000000,0x440000,0x63C0000,0x380001,0x24C0000,0x600000,0x780000,0x8C0000,0xD40000,0x480000,0x540000,0x780000,0x1C000000,0x780000,0x500001,0x780000,0xF40000,0x28000000,0x780000,0xF40000,0x28000000,0xF40000,0x28000000,0x28000000,0x780000,0xF40000,0x28000000,0xF40000,0x28000000, -0x28000000,0xF40000,0x28000000,0x28000000,0x28000000,0x780000,0xF40000,0x28000000,0xF40000,0x28000000,0x28000000,0xF40000,0x28000000,0x28000000,0x28000000,0xF40000,0x28000000,0x28000000,0x28000000,0x28000000,0x4640000,0x580000,0x580000,0x880000,0xC80000,0x1880000,0x28000000,0x28000000,0x700000,0x980000,0x1BE80000,0x28000000, -0xAC0000,0x300274,0x562400F3,0x322400F4,0x282400F3,0x4C1C0092,0x341C004F,0x2A1C0067,0x2C1C0092,0x2818004E,0x22180092,0x4A1000F4,0x38100033,0x2A140051,0x300C004A,0x28100002,0x2210004D,0x280C00F4,0x24080053,0x20080069,0x1C0C00F5,0x2440274,0x3A0000F5,0x281000F4,0x2E0000AA,0x28000049,0x22040090,0x2800011F,0x2400005D,0x20000069,0x1C0000FD,0x8C0274, -0x2000015B,0x1C000120,0x1A000181,0x16000278,0xA4100004,0xF82000C2,0xFC28011F,0x56100002,0x3E100002,0x30100002,0x28100006,0x260C0006,0x90000009,0x54040000,0x2A080035,0x20000069,0x640274,0x3C00F3,0x4A300032,0x30300032,0x28300032,0x40280049,0x32240002,0x28280005,0x2A240049,0x2624000E,0x22240049,0x5800F3,0x38100032,0x28200032,0x300C0049,0x28100001, -0x22140049,0xB000F3,0x2600003E,0x20000059,0x1C0000F4,0x5800F3,0x38100032,0x28200032,0x300C0049,0x28100001,0x22140049,0xB000F3,0x2600003E,0x20000059,0x1C0000F4,0xB000F3,0x2600003E,0x20000059,0x1C0000F4,0x1C0000F4,0xA4100003,0xFC280049,0xF030003B,0x56100001,0x3E100001,0x30100001,0x28180001,0x28080004,0x90000005,0x54040000,0x2A040033,0x20000059, -0x7C00F3,0x2400F3,0x2400F3,0x2400F3,0x2400F3,0x3A1C004A,0x3A1C004A,0x3A1C004A,0x2418004A,0x2418004A,0x1C18004A,0x38100033,0x38100033,0x38100033,0x26100002,0x26100002,0x1E10000E,0x200C0033,0x200C0033,0x1C0C0005,0x160C0035,0x3400F3,0x3400F3,0x3400F3,0x28000049,0x28000049,0x1C08004A,0x22000042,0x22000042,0x1A000009,0x16000035,0x6800F3, -0x6800F3,0x16000074,0x16000074,0x120000F4,0xA0100003,0xF61C004A,0x2400F3,0x56100001,0x3A100002,0x2E100002,0x2C100003,0x240C0001,0x84000005,0x54040000,0x260C0033,0x1A000009,0x4C00F3,0x300032,0x300032,0x300032,0x300032,0x2E280001,0x2E280001,0x2E280001,0x20280001,0x20280001,0x1C240001,0x2440032,0x2440032,0x2440032,0x24140001,0x24140001, -0x1C1C0000,0x8C0032,0x8C0032,0x1C000000,0x16000034,0x2440032,0x2440032,0x2440032,0x24140001,0x24140001,0x1C1C0000,0x8C0032,0x8C0032,0x1C000000,0x16000034,0x8C0032,0x8C0032,0x1C000000,0x16000034,0x16000034,0x82180000,0x9C280001,0x300032,0x56100000,0x34180001,0x2C140000,0x26180001,0x240C0000,0x84040001,0x4E080000,0x640032,0x1C000000, -0x640032,0x44004A,0x3E3C0001,0x2E380001,0x28380001,0x680048,0x32240001,0x282C0001,0xD00048,0x28080000,0x22000048,0x680048,0x32240001,0x282C0001,0xD00048,0x28080000,0x22000048,0xD00048,0x28080000,0x22000048,0x22000048,0x680048,0x32240001,0x282C0001,0xD00048,0x28080000,0x22000048,0xD00048,0x28080000,0x22000048,0x22000048,0xD00048, -0x28080000,0x22000048,0x22000048,0x22000048,0xB8080000,0xC480048,0xC63C0001,0x5A0C0000,0x3E0C0001,0x32080000,0x28180000,0x28000001,0x94000002,0x54040000,0x2A1C0000,0x22000048,0x940048,0x18004A,0x18004A,0x18004A,0x18004A,0x18004A,0x18004A,0x18004A,0x18004A,0x18004A,0x18004A,0x28100001,0x28100001,0x28100001,0x28100001,0x28100001, -0x28100001,0x180C0001,0x180C0001,0x180C0001,0x120C0001,0x2240048,0x2240048,0x2240048,0x2240048,0x2240048,0x2240048,0x18000005,0x18000005,0x18000005,0x12000001,0x4C0048,0x4C0048,0x4C0048,0x10000014,0xC000048,0xB0100001,0x18004A,0x18004A,0x52100001,0x3C100001,0x30100001,0x30100001,0x22100001,0x84000001,0x54040000,0x1C0C0001,0x18000005, -0x340048,}; -static const uint32_t g_etc1_to_bc7_m6_table36[] = { -0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,0x300000,0x300000,0x300000,0x300000,0x300000,0x300000,0x300000,0x300000,0x300000,0x300000,0x5C0000, -0x5C0000,0x5C0000,0x5C0000,0xE000001,0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,0x8200000,0x8200000,0x8200000,0x300000,0x400000,0x380000,0x380000,0x380000,0x380000,0x380000,0x380000,0x380000,0x380000,0x380000,0x380000,0x2500000,0x2500000,0x2500000,0x2500000,0x2500000, -0x2500000,0xA40000,0xA40000,0xA40000,0x1A000001,0x2500000,0x2500000,0x2500000,0x2500000,0x2500000,0x2500000,0xA40000,0xA40000,0xA40000,0x1A000001,0xA40000,0xA40000,0xA40000,0x1A000001,0x1A000001,0x3C0000,0x380000,0x380000,0x400000,0x2440000,0x4C0000,0x4C0000,0x5C0000,0x400000,0x2440000,0x740000,0xA40000, -0x740000,0x4C0000,0x4C0000,0x4C0000,0x4C0000,0x700000,0x700000,0x700000,0xE40000,0xE40000,0x24000001,0x700000,0x700000,0x700000,0xE40000,0xE40000,0x24000001,0xE40000,0xE40000,0x24000001,0x24000001,0x700000,0x700000,0x700000,0xE40000,0xE40000,0x24000001,0xE40000,0xE40000,0x24000001,0x24000001,0xE40000, -0xE40000,0x24000001,0x24000001,0x24000001,0x580000,0x500000,0x4C0000,0x680000,0x800000,0xA00000,0xB80000,0x1180000,0x600000,0x700000,0xA00000,0x24000001,0xA00000,0x640000,0x940000,0x12C0000,0x30000001,0x940000,0x12C0000,0x30000001,0x12C0000,0x30000001,0x30000001,0x940000,0x12C0000,0x30000001,0x12C0000,0x30000001, -0x30000001,0x12C0000,0x30000001,0x30000001,0x30000001,0x940000,0x12C0000,0x30000001,0x12C0000,0x30000001,0x30000001,0x12C0000,0x30000001,0x30000001,0x30000001,0x12C0000,0x30000001,0x30000001,0x30000001,0x30000001,0x7C0000,0xC680000,0xC680000,0xA80000,0xF40000,0x1E00000,0x30000001,0x30000001,0x880000,0xBC0000,0x25DC0000,0x30000001, -0xD40000,0x400278,0x5E3800F4,0x3C3800F4,0x303800F5,0x582C0090,0x402C004D,0x34300069,0x362C0090,0x302C004D,0x2A2C0092,0x542000F3,0x42200032,0x34280053,0x38200049,0x30200002,0x2C20004E,0x302000F4,0x2E1C0051,0x2A1C0067,0x262000F3,0x600274,0x460C00F3,0x302000F4,0x3E040092,0x3210004A,0x2A180092,0x360400FD,0x30000033,0x2A00004F,0x260800F4,0xC40274, -0x2C000121,0x260000E2,0x2400014C,0x20000274,0xB4200005,0xF23400D0,0xF63C012C,0x62200000,0x48200001,0x38200002,0x32240006,0x30200006,0xAC080002,0x5A180002,0x321C0035,0x2A00004F,0x8C0274,0x4C00F4,0x52440034,0x3A400034,0x30400035,0x4C380048,0x3A380001,0x32380005,0x3238004A,0x3034000E,0x2A38004A,0x7400F3,0x40240032,0x32300033,0x38200049,0x30200002, -0x2A28004A,0xE800F3,0x30000033,0x2A00004B,0x260000F3,0x7400F3,0x40240032,0x32300033,0x38200049,0x30200002,0x2A28004A,0xE800F3,0x30000033,0x2A00004B,0x260000F3,0xE800F3,0x30000033,0x2A00004B,0x260000F3,0x260000F3,0xA8240003,0xF63C004C,0xFA440038,0x62200000,0x48200001,0x38200002,0x32280001,0x30180003,0xAC080001,0x5A180001,0x34140032,0x2A00004B, -0xA400F3,0x3800F4,0x3800F4,0x3800F4,0x3800F4,0x462C0048,0x462C0048,0x462C0048,0x2C2C0049,0x2C2C0049,0x242C0049,0x42200032,0x42200032,0x42200032,0x30200001,0x30200001,0x2624000E,0x28200032,0x28200032,0x24200005,0x20200032,0x5000F3,0x5000F3,0x5000F3,0x32100049,0x32100049,0x241C0049,0x30000032,0x30000032,0x240C0002,0x20100032,0xA000F3, -0xA000F3,0x22000059,0x1E000053,0x1A0000F3,0xA8200004,0xFE2C0049,0x3800F4,0x62200000,0x44200001,0x38200001,0x34200004,0x2C200001,0xA20C0000,0x5A180001,0x301C0032,0x240C0002,0x7000F3,0x400034,0x400034,0x400034,0x400034,0x38380000,0x38380000,0x38380000,0x2A380000,0x2A380000,0x24380001,0x600032,0x600032,0x600032,0x2C280001,0x2C280001, -0x24300001,0xC40032,0xC40032,0x24140001,0x20000032,0x600032,0x600032,0x600032,0x2C280001,0x2C280001,0x24300001,0xC40032,0xC40032,0x24140001,0x20000032,0xC40032,0xC40032,0x24140001,0x20000032,0x20000032,0x90280000,0xB4380000,0x400034,0x62200000,0x42240000,0x36240000,0x32280000,0x2C200001,0xA20C0000,0x5A180000,0x8C0032,0x24140001, -0x8C0032,0x580048,0x4A4C0000,0x364C0001,0x304C0001,0x2800048,0x3A380001,0x30400001,0x1080048,0x301C0001,0x2A00004A,0x2800048,0x3A380001,0x30400001,0x1080048,0x301C0001,0x2A00004A,0x1080048,0x301C0001,0x2A00004A,0x2A00004A,0x2800048,0x3A380001,0x30400001,0x1080048,0x301C0001,0x2A00004A,0x1080048,0x301C0001,0x2A00004A,0x2A00004A,0x1080048, -0x301C0001,0x2A00004A,0x2A00004A,0x2A00004A,0xC4180000,0x65C0048,0xDE4C0000,0x62200000,0x46200001,0x3A1C0000,0x302C0001,0x300C0001,0xB4040000,0x5E140000,0x32300001,0x2A00004A,0xB80048,0x2C0048,0x2C0048,0x2C0048,0x2C0048,0x2C0048,0x2C0048,0x2C0048,0x2C0048,0x2C0048,0x2C0048,0x34200000,0x34200000,0x34200000,0x34200000,0x34200000, -0x34200000,0x20200001,0x20200001,0x20200001,0x1A200001,0x400048,0x400048,0x400048,0x400048,0x400048,0x400048,0x240C0001,0x240C0001,0x240C0001,0x1A140001,0x800048,0x800048,0x800048,0x1A000005,0x1400004A,0xC8200000,0x2C0048,0x2C0048,0x62200000,0x48200000,0x3C200000,0x3C200000,0x2C200000,0x9E0C0000,0x62140000,0x281C0000,0x240C0001, -0x5C0048,}; -static const uint32_t g_etc1_to_bc7_m6_table37[] = { -0x300000,0x300000,0x300000,0x300000,0x300000,0x300000,0x300000,0x300000,0x300000,0x300000,0x300000,0x300000,0x300000,0x300000,0x300000,0x300000,0x300000,0x300000,0x300000,0x300000,0x2440000,0x2440000,0x2440000,0x2440000,0x2440000,0x2440000,0x2440000,0x2440000,0x2440000,0x2440000,0x8C0000, -0x8C0000,0x8C0000,0x8C0000,0x16000001,0x300000,0x300000,0x300000,0x300000,0x300000,0x300000,0x300000,0x300000,0x340000,0x340000,0x340000,0x2440000,0x640000,0x480000,0x480000,0x480000,0x480000,0x480000,0x480000,0x480000,0x480000,0x480000,0x480000,0x2680000,0x2680000,0x2680000,0x2680000,0x2680000, -0x2680000,0xD80000,0xD80000,0xD80000,0x22000001,0x2680000,0x2680000,0x2680000,0x2680000,0x2680000,0x2680000,0xD80000,0xD80000,0xD80000,0x22000001,0xD80000,0xD80000,0xD80000,0x22000001,0x22000001,0x4C0000,0x480000,0x480000,0x540000,0x2580000,0x600000,0x600000,0x780000,0x540000,0x2580000,0x980000,0xD80000, -0x980000,0x5C0000,0x5C0000,0x5C0000,0x5C0000,0x880000,0x880000,0x880000,0x1140000,0x1140000,0x2C000001,0x880000,0x880000,0x880000,0x1140000,0x1140000,0x2C000001,0x1140000,0x1140000,0x2C000001,0x2C000001,0x880000,0x880000,0x880000,0x1140000,0x1140000,0x2C000001,0x1140000,0x1140000,0x2C000001,0x2C000001,0x1140000, -0x1140000,0x2C000001,0x2C000001,0x2C000001,0x6680000,0x8600000,0x5C0000,0x7C0000,0x980000,0xC00000,0xE00000,0x1540000,0x740000,0x880000,0xC00000,0x2C000001,0xC00000,0x740000,0xAC0000,0x15C0000,0x38000001,0xAC0000,0x15C0000,0x38000001,0x15C0000,0x38000001,0x38000001,0xAC0000,0x15C0000,0x38000001,0x15C0000,0x38000001, -0x38000001,0x15C0000,0x38000001,0x38000001,0x38000001,0xAC0000,0x15C0000,0x38000001,0x15C0000,0x38000001,0x38000001,0x15C0000,0x38000001,0x38000001,0x38000001,0x15C0000,0x38000001,0x38000001,0x38000001,0x38000001,0x900000,0x7C0000,0x7C0000,0x2C00000,0x11C0000,0x9F00000,0x38000001,0x38000001,0x9C0000,0xD80000,0x2DEC0000,0x38000001, -0xF40000,0x500278,0x664800F4,0x444800F4,0x384800F5,0x603C0090,0x483C004D,0x3C400069,0x3E3C0090,0x383C004D,0x323C0092,0x5C3000F3,0x4A300032,0x3C380053,0x40300049,0x38300002,0x3430004E,0x383000F4,0x362C0051,0x322C0067,0x2E3000F3,0x780274,0x4E1C00F3,0x383000F4,0x46140092,0x3A20004A,0x32280092,0x440400F3,0x38100033,0x3210004F,0x2E1800F4,0xF40274, -0x36000104,0x320000B2,0x2C00011F,0x28000274,0xBC300005,0xFA4400D0,0xFE4C012C,0x6A300000,0x50300001,0x40300002,0x3A340006,0x38300006,0xB4180002,0x62280002,0x3A2C0035,0x3210004F,0xAC0274,0x5C00F4,0x5A540034,0x42500034,0x38500035,0x54480048,0x42480001,0x3A480005,0x3A48004A,0x3844000E,0x3248004A,0x8C00F3,0x48340032,0x3A400033,0x40300049,0x38300002, -0x3238004A,0x11800F3,0x38100033,0x3208004A,0x2E0000F3,0x8C00F3,0x48340032,0x3A400033,0x40300049,0x38300002,0x3238004A,0x11800F3,0x38100033,0x3208004A,0x2E0000F3,0x11800F3,0x38100033,0x3208004A,0x2E0000F3,0x2E0000F3,0xB0340003,0xFE4C004C,0xF254003D,0x6A300000,0x50300001,0x40300002,0x3A380001,0x38280003,0xB4180001,0x62280001,0x3C240032,0x3208004A, -0xC800F3,0x4800F4,0x4800F4,0x4800F4,0x4800F4,0x4E3C0048,0x4E3C0048,0x4E3C0048,0x343C0049,0x343C0049,0x2C3C0049,0x4A300032,0x4A300032,0x4A300032,0x38300001,0x38300001,0x2E34000E,0x30300032,0x30300032,0x2C300005,0x28300032,0x6800F3,0x6800F3,0x6800F3,0x3A200049,0x3A200049,0x2C2C0049,0x38100032,0x38100032,0x2C1C0002,0x28200032,0xD000F3, -0xD000F3,0x2C000049,0x2600003E,0x220000F3,0xB0300004,0xF63C004C,0x4800F4,0x6A300000,0x4C300001,0x40300001,0x3C300004,0x34300001,0xAA1C0000,0x62280001,0x382C0032,0x2C1C0002,0x9400F3,0x500034,0x500034,0x500034,0x500034,0x40480000,0x40480000,0x40480000,0x32480000,0x32480000,0x2C480001,0x780032,0x780032,0x780032,0x34380001,0x34380001, -0x2C400001,0xF40032,0xF40032,0x2C240001,0x28000032,0x780032,0x780032,0x780032,0x34380001,0x34380001,0x2C400001,0xF40032,0xF40032,0x2C240001,0x28000032,0xF40032,0xF40032,0x2C240001,0x28000032,0x28000032,0x98380000,0xBC480000,0x500034,0x6A300000,0x4A340000,0x3E340000,0x3A380000,0x34300001,0xAA1C0000,0x62280000,0xAC0032,0x2C240001, -0xAC0032,0x680048,0x525C0000,0x3E5C0001,0x385C0001,0x2980048,0x42480001,0x38500001,0x1380048,0x382C0001,0x3200004A,0x2980048,0x42480001,0x38500001,0x1380048,0x382C0001,0x3200004A,0x1380048,0x382C0001,0x3200004A,0x3200004A,0x2980048,0x42480001,0x38500001,0x1380048,0x382C0001,0x3200004A,0x1380048,0x382C0001,0x3200004A,0x3200004A,0x1380048, -0x382C0001,0x3200004A,0x3200004A,0x3200004A,0xCC280000,0xE6C0048,0xE65C0000,0x6A300000,0x4E300001,0x422C0000,0x383C0001,0x381C0001,0xBC140000,0x66240000,0x3A400001,0x3200004A,0xDC0048,0x3C0048,0x3C0048,0x3C0048,0x3C0048,0x3C0048,0x3C0048,0x3C0048,0x3C0048,0x3C0048,0x3C0048,0x3C300000,0x3C300000,0x3C300000,0x3C300000,0x3C300000, -0x3C300000,0x28300001,0x28300001,0x28300001,0x22300001,0x580048,0x580048,0x580048,0x580048,0x580048,0x580048,0x2C1C0001,0x2C1C0001,0x2C1C0001,0x22240001,0xB00048,0xB00048,0xB00048,0x22000001,0x1C00004A,0xD0300000,0x3C0048,0x3C0048,0x6A300000,0x50300000,0x44300000,0x44300000,0x34300000,0xA61C0000,0x6A240000,0x302C0000,0x2C1C0001, -0x7C0048,}; -static const uint32_t g_etc1_to_bc7_m6_table38[] = { -0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x25C0000,0x25C0000,0x25C0000,0x25C0000,0x25C0000,0x25C0000,0x25C0000,0x25C0000,0x25C0000,0x25C0000,0xBC0000, -0xBC0000,0xBC0000,0xBC0000,0x1E000001,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x440000,0x440000,0x440000,0x25C0000,0x880000,0x580000,0x580000,0x580000,0x580000,0x580000,0x580000,0x580000,0x580000,0x580000,0x580000,0x2800000,0x2800000,0x2800000,0x2800000,0x2800000, -0x2800000,0x1080000,0x1080000,0x1080000,0x2A000001,0x2800000,0x2800000,0x2800000,0x2800000,0x2800000,0x2800000,0x1080000,0x1080000,0x1080000,0x2A000001,0x1080000,0x1080000,0x1080000,0x2A000001,0x2A000001,0x65C0000,0x580000,0x580000,0x4640000,0x26C0000,0x780000,0x780000,0x940000,0x4640000,0x26C0000,0xB80000,0x1080000, -0xB80000,0x6C0000,0x6C0000,0x6C0000,0x6C0000,0xA00000,0xA00000,0xA00000,0x1440000,0x1440000,0x34000001,0xA00000,0xA00000,0xA00000,0x1440000,0x1440000,0x34000001,0x1440000,0x1440000,0x34000001,0x34000001,0xA00000,0xA00000,0xA00000,0x1440000,0x1440000,0x34000001,0x1440000,0x1440000,0x34000001,0x34000001,0x1440000, -0x1440000,0x34000001,0x34000001,0x34000001,0x27C0000,0x740000,0x6C0000,0x2900000,0xB40000,0xE40000,0x1080000,0x1900000,0x880000,0xA00000,0xE40000,0x34000001,0xE40000,0x840000,0xC40000,0x18C0000,0x40000001,0xC40000,0x18C0000,0x40000001,0x18C0000,0x40000001,0x40000001,0xC40000,0x18C0000,0x40000001,0x18C0000,0x40000001, -0x40000001,0x18C0000,0x40000001,0x40000001,0x40000001,0xC40000,0x18C0000,0x40000001,0x18C0000,0x40000001,0x40000001,0x18C0000,0x40000001,0x40000001,0x40000001,0x18C0000,0x40000001,0x40000001,0x40000001,0x40000001,0xA40000,0x8C0000,0x8C0000,0xDC0000,0x1400000,0x13F00000,0x40000001,0x40000001,0xB40000,0xF80000,0x35FC0000,0x40000001, -0x1180000,0x600278,0x6E5800F4,0x4C5800F4,0x405800F5,0x684C0090,0x504C004D,0x44500069,0x464C0090,0x404C004D,0x3A4C0092,0x644000F3,0x52400032,0x44480053,0x48400049,0x40400002,0x3C40004E,0x404000F4,0x3E3C0051,0x3A3C0067,0x364000F3,0x900274,0x562C00F3,0x404000F4,0x4E240092,0x4230004A,0x3A380092,0x4C1400F3,0x40200033,0x3A20004F,0x362800F4,0x1240274, -0x400000F5,0x3A00009A,0x3400010B,0x30000274,0xC4400005,0xF25400E2,0xF65C0139,0x72400000,0x58400001,0x48400002,0x42440006,0x40400006,0xBC280002,0x6A380002,0x423C0035,0x3A20004F,0xD00274,0x6C00F4,0x62640034,0x4A600034,0x40600035,0x5C580048,0x4A580001,0x42580005,0x4258004A,0x4054000E,0x3A58004A,0xA400F3,0x50440032,0x42500033,0x48400049,0x40400002, -0x3A48004A,0x14C00F3,0x40200033,0x3A18004A,0x360000F3,0xA400F3,0x50440032,0x42500033,0x48400049,0x40400002,0x3A48004A,0x14C00F3,0x40200033,0x3A18004A,0x360000F3,0x14C00F3,0x40200033,0x3A18004A,0x360000F3,0x360000F3,0xB8440003,0xF65C004E,0xFA64003D,0x72400000,0x58400001,0x48400002,0x42480001,0x40380003,0xBC280001,0x6A380001,0x44340032,0x3A18004A, -0xE800F3,0x5800F4,0x5800F4,0x5800F4,0x5800F4,0x564C0048,0x564C0048,0x564C0048,0x3C4C0049,0x3C4C0049,0x344C0049,0x52400032,0x52400032,0x52400032,0x40400001,0x40400001,0x3644000E,0x38400032,0x38400032,0x34400005,0x30400032,0x8000F3,0x8000F3,0x8000F3,0x42300049,0x42300049,0x343C0049,0x40200032,0x40200032,0x342C0002,0x30300032,0x10000F3, -0x10000F3,0x340C0049,0x30000033,0x2A0000F3,0xB8400004,0xFE4C004C,0x5800F4,0x72400000,0x54400001,0x48400001,0x44400004,0x3C400001,0xB22C0000,0x6A380001,0x403C0032,0x342C0002,0xB400F3,0x600034,0x600034,0x600034,0x600034,0x48580000,0x48580000,0x48580000,0x3A580000,0x3A580000,0x34580001,0x900032,0x900032,0x900032,0x3C480001,0x3C480001, -0x34500001,0x1240032,0x1240032,0x34340001,0x30000032,0x900032,0x900032,0x900032,0x3C480001,0x3C480001,0x34500001,0x1240032,0x1240032,0x34340001,0x30000032,0x1240032,0x1240032,0x34340001,0x30000032,0x30000032,0xA0480000,0xC4580000,0x600034,0x72400000,0x52440000,0x46440000,0x42480000,0x3C400001,0xB22C0000,0x6A380000,0xD00032,0x34340001, -0xD00032,0x780048,0x5A6C0000,0x466C0001,0x406C0001,0x2B00048,0x4A580001,0x40600001,0x1680048,0x403C0001,0x3A00004A,0x2B00048,0x4A580001,0x40600001,0x1680048,0x403C0001,0x3A00004A,0x1680048,0x403C0001,0x3A00004A,0x3A00004A,0x2B00048,0x4A580001,0x40600001,0x1680048,0x403C0001,0x3A00004A,0x1680048,0x403C0001,0x3A00004A,0x3A00004A,0x1680048, -0x403C0001,0x3A00004A,0x3A00004A,0x3A00004A,0xD4380000,0x800048,0xEE6C0000,0x72400000,0x56400001,0x4A3C0000,0x404C0001,0x402C0001,0xC4240000,0x6E340000,0x42500001,0x3A00004A,0xFC0048,0x4C0048,0x4C0048,0x4C0048,0x4C0048,0x4C0048,0x4C0048,0x4C0048,0x4C0048,0x4C0048,0x4C0048,0x44400000,0x44400000,0x44400000,0x44400000,0x44400000, -0x44400000,0x30400001,0x30400001,0x30400001,0x2A400001,0x700048,0x700048,0x700048,0x700048,0x700048,0x700048,0x342C0001,0x342C0001,0x342C0001,0x2A340001,0xE40048,0xE40048,0xE40048,0x2A100001,0x2400004A,0xD8400000,0x4C0048,0x4C0048,0x72400000,0x58400000,0x4C400000,0x4C400000,0x3C400000,0xAE2C0000,0x72340000,0x383C0000,0x342C0001, -0xA00048,}; -static const uint32_t g_etc1_to_bc7_m6_table39[] = { -0x500000,0x500000,0x500000,0x500000,0x500000,0x500000,0x500000,0x500000,0x500000,0x500000,0x500000,0x500000,0x500000,0x500000,0x500000,0x500000,0x500000,0x500000,0x500000,0x500000,0x2740000,0x2740000,0x2740000,0x2740000,0x2740000,0x2740000,0x2740000,0x2740000,0x2740000,0x2740000,0xF00000, -0xF00000,0xF00000,0xF00000,0x26000001,0x500000,0x500000,0x500000,0x500000,0x500000,0x500000,0x500000,0x500000,0x2540000,0x2540000,0x2540000,0x2740000,0xA80000,0x680000,0x680000,0x680000,0x680000,0x680000,0x680000,0x680000,0x680000,0x680000,0x680000,0x2980000,0x2980000,0x2980000,0x2980000,0x2980000, -0x2980000,0x1380000,0x1380000,0x1380000,0x32000001,0x2980000,0x2980000,0x2980000,0x2980000,0x2980000,0x2980000,0x1380000,0x1380000,0x1380000,0x32000001,0x1380000,0x1380000,0x1380000,0x32000001,0x32000001,0xE6C0000,0x680000,0x680000,0x780000,0x2800000,0x8C0000,0x8C0000,0x2AC0000,0x780000,0x2800000,0xDC0000,0x1380000, -0xDC0000,0x7C0000,0x7C0000,0x7C0000,0x7C0000,0xB80000,0xB80000,0xB80000,0x1740000,0x1740000,0x3C000001,0xB80000,0xB80000,0xB80000,0x1740000,0x1740000,0x3C000001,0x1740000,0x1740000,0x3C000001,0x3C000001,0xB80000,0xB80000,0xB80000,0x1740000,0x1740000,0x3C000001,0x1740000,0x1740000,0x3C000001,0x3C000001,0x1740000, -0x1740000,0x3C000001,0x3C000001,0x3C000001,0x900000,0x840000,0x7C0000,0xA80000,0xD00000,0x1080000,0x12C0000,0x1CC0000,0x9C0000,0xB80000,0x1080000,0x3C000001,0x1080000,0x940000,0xDC0000,0x1BC0000,0x48000001,0xDC0000,0x1BC0000,0x48000001,0x1BC0000,0x48000001,0x48000001,0xDC0000,0x1BC0000,0x48000001,0x1BC0000,0x48000001, -0x48000001,0x1BC0000,0x48000001,0x48000001,0x48000001,0xDC0000,0x1BC0000,0x48000001,0x1BC0000,0x48000001,0x48000001,0x1BC0000,0x48000001,0x48000001,0x48000001,0x1BC0000,0x48000001,0x48000001,0x48000001,0x48000001,0xB80000,0x69C0000,0x69C0000,0xF80000,0x1680000,0x1DF40000,0x48000001,0x48000001,0xC80000,0x1140000,0x3FD00000,0x48000001, -0x1380000,0x700278,0x766800F4,0x546800F4,0x486800F5,0x705C0090,0x585C004D,0x4C600069,0x4E5C0090,0x485C004D,0x425C0092,0x6C5000F3,0x5A500032,0x4C580053,0x50500049,0x48500002,0x4450004E,0x485000F4,0x464C0051,0x424C0067,0x3E5000F3,0xA80274,0x5E3C00F3,0x485000F4,0x56340092,0x4A40004A,0x42480092,0x542400F3,0x48300033,0x4230004F,0x3E3800F4,0x1580274, -0x480C00F4,0x42040092,0x3E0000F7,0x38000274,0xCC500005,0xFA6400E2,0xFE6C0139,0x7A500000,0x60500001,0x50500002,0x4A540006,0x48500006,0xC4380002,0x72480002,0x4A4C0035,0x4230004F,0xF00274,0x7C00F4,0x6A740034,0x52700034,0x48700035,0x64680048,0x52680001,0x4A680005,0x4A68004A,0x4864000E,0x4268004A,0xBC00F3,0x58540032,0x4A600033,0x50500049,0x48500002, -0x4258004A,0x17C00F3,0x48300033,0x4228004A,0x3E0000F3,0xBC00F3,0x58540032,0x4A600033,0x50500049,0x48500002,0x4258004A,0x17C00F3,0x48300033,0x4228004A,0x3E0000F3,0x17C00F3,0x48300033,0x4228004A,0x3E0000F3,0x3E0000F3,0xC0540003,0xFE6C004E,0xF2740044,0x7A500000,0x60500001,0x50500002,0x4A580001,0x48480003,0xC4380001,0x72480001,0x4C440032,0x4228004A, -0x10C00F3,0x6800F4,0x6800F4,0x6800F4,0x6800F4,0x5E5C0048,0x5E5C0048,0x5E5C0048,0x445C0049,0x445C0049,0x3C5C0049,0x5A500032,0x5A500032,0x5A500032,0x48500001,0x48500001,0x3E54000E,0x40500032,0x40500032,0x3C500005,0x38500032,0x9800F3,0x9800F3,0x9800F3,0x4A400049,0x4A400049,0x3C4C0049,0x48300032,0x48300032,0x3C3C0002,0x38400032,0x13000F3, -0x13000F3,0x3C1C0049,0x38080032,0x320000F3,0xC0500004,0xF65C0051,0x6800F4,0x7A500000,0x5C500001,0x50500001,0x4C500004,0x44500001,0xBA3C0000,0x72480001,0x484C0032,0x3C3C0002,0xD800F3,0x700034,0x700034,0x700034,0x700034,0x50680000,0x50680000,0x50680000,0x42680000,0x42680000,0x3C680001,0xA80032,0xA80032,0xA80032,0x44580001,0x44580001, -0x3C600001,0x1580032,0x1580032,0x3C440001,0x38000032,0xA80032,0xA80032,0xA80032,0x44580001,0x44580001,0x3C600001,0x1580032,0x1580032,0x3C440001,0x38000032,0x1580032,0x1580032,0x3C440001,0x38000032,0x38000032,0xA8580000,0xCC680000,0x700034,0x7A500000,0x5A540000,0x4E540000,0x4A580000,0x44500001,0xBA3C0000,0x72480000,0xF00032,0x3C440001, -0xF00032,0x880048,0x627C0000,0x4E7C0001,0x487C0001,0xC80048,0x52680001,0x48700001,0x1980048,0x484C0001,0x4200004A,0xC80048,0x52680001,0x48700001,0x1980048,0x484C0001,0x4200004A,0x1980048,0x484C0001,0x4200004A,0x4200004A,0xC80048,0x52680001,0x48700001,0x1980048,0x484C0001,0x4200004A,0x1980048,0x484C0001,0x4200004A,0x4200004A,0x1980048, -0x484C0001,0x4200004A,0x4200004A,0x4200004A,0xDC480000,0x900048,0xF67C0000,0x7A500000,0x5E500001,0x524C0000,0x485C0001,0x483C0001,0xCC340000,0x76440000,0x4A600001,0x4200004A,0x1200048,0x5C0048,0x5C0048,0x5C0048,0x5C0048,0x5C0048,0x5C0048,0x5C0048,0x5C0048,0x5C0048,0x5C0048,0x4C500000,0x4C500000,0x4C500000,0x4C500000,0x4C500000, -0x4C500000,0x38500001,0x38500001,0x38500001,0x32500001,0x880048,0x880048,0x880048,0x880048,0x880048,0x880048,0x3C3C0001,0x3C3C0001,0x3C3C0001,0x32440001,0x1140048,0x1140048,0x1140048,0x32200001,0x2C00004A,0xE0500000,0x5C0048,0x5C0048,0x7A500000,0x60500000,0x54500000,0x54500000,0x44500000,0xB63C0000,0x7A440000,0x404C0000,0x3C3C0001, -0xC00048,}; -static const uint32_t g_etc1_to_bc7_m6_table40[] = { -0x600001,0x600001,0x600001,0x600001,0x600001,0x600001,0x600001,0x600001,0x600001,0x600001,0x600001,0x600001,0x600001,0x600001,0x600001,0x600001,0x600001,0x600001,0x600001,0x600001,0x900000,0x900000,0x900000,0x900000,0x900000,0x900000,0x900000,0x900000,0x900000,0x900000,0x1240000, -0x1240000,0x1240000,0x1240000,0x30000000,0x600001,0x600001,0x600001,0x600001,0x600001,0x600001,0x600001,0x600001,0x680000,0x680000,0x680000,0x900000,0xD00000,0x780001,0x780001,0x780001,0x780001,0x780001,0x780001,0x780001,0x780001,0x780001,0x780001,0xB40000,0xB40000,0xB40000,0xB40000,0xB40000, -0xB40000,0x1700000,0x1700000,0x1700000,0x3C000000,0xB40000,0xB40000,0xB40000,0xB40000,0xB40000,0xB40000,0x1700000,0x1700000,0x1700000,0x3C000000,0x1700000,0x1700000,0x1700000,0x3C000000,0x3C000000,0x8800000,0x780001,0x780001,0x28C0000,0x980000,0x2A40000,0x2A40000,0xCC0000,0x28C0000,0x980000,0x1000000,0x1700000, -0x1000000,0x8C0001,0x8C0001,0x8C0001,0x8C0001,0x2D00000,0x2D00000,0x2D00000,0x1AC0000,0x1AC0000,0x46000000,0x2D00000,0x2D00000,0x2D00000,0x1AC0000,0x1AC0000,0x46000000,0x1AC0000,0x1AC0000,0x46000000,0x46000000,0x2D00000,0x2D00000,0x2D00000,0x1AC0000,0x1AC0000,0x46000000,0x1AC0000,0x1AC0000,0x46000000,0x46000000,0x1AC0000, -0x1AC0000,0x46000000,0x46000000,0x46000000,0xA40000,0x980000,0x8C0001,0xC00000,0x2EC0000,0x12C0000,0x15C0000,0x5F80000,0x2B00000,0x2D00000,0x12C0000,0x46000000,0x12C0000,0xA40001,0x2F40000,0x1F40000,0x52000000,0x2F40000,0x1F40000,0x52000000,0x1F40000,0x52000000,0x52000000,0x2F40000,0x1F40000,0x52000000,0x1F40000,0x52000000, -0x52000000,0x1F40000,0x52000000,0x52000000,0x52000000,0x2F40000,0x1F40000,0x52000000,0x1F40000,0x52000000,0x52000000,0x1F40000,0x52000000,0x52000000,0x52000000,0x1F40000,0x52000000,0x52000000,0x52000000,0x52000000,0xD00000,0xB00000,0xB00000,0x3140000,0x1940000,0x27FC0000,0x52000000,0x52000000,0xE00000,0x1380000,0x49C40000,0x52000000, -0x1600000,0x840274,0x807800F3,0x5C7800F4,0x527800F3,0x76700092,0x5E70004F,0x54700067,0x56700092,0x526C004E,0x4C6C0092,0x746400F4,0x62640033,0x54680051,0x5A60004A,0x52640002,0x4C64004D,0x526000F4,0x4E5C0053,0x4A5C0069,0x466000F5,0xC40274,0x684C00F3,0x526400F4,0x5E480092,0x52540049,0x4C580090,0x5C3800F3,0x52400032,0x4C40004D,0x464C00F4,0x18C0274, -0x521800F3,0x4C140090,0x460800F4,0x40000278,0xCE640004,0xF47800F4,0xF67C014C,0x80640002,0x68640002,0x5A640002,0x52640006,0x50600006,0xCE4C0002,0x7E580000,0x545C0035,0x4C40004D,0x1180274,0x9000F3,0x74840032,0x5A840032,0x52840032,0x6A7C0049,0x5C780002,0x527C0005,0x54780049,0x5078000E,0x4C780049,0xD400F3,0x62640032,0x52740032,0x5A600049,0x52640001, -0x4C680049,0x1B000F3,0x523C0032,0x4C380048,0x460000F4,0xD400F3,0x62640032,0x52740032,0x5A600049,0x52640001,0x4C680049,0x1B000F3,0x523C0032,0x4C380048,0x460000F4,0x1B000F3,0x523C0032,0x4C380048,0x460000F4,0x460000F4,0xCE640003,0xF8800053,0xFC880043,0x80640001,0x68640001,0x5A640001,0x526C0001,0x525C0004,0xD4480001,0x7E580000,0x54580033,0x4C380048, -0x13000F3,0x7800F3,0x7800F3,0x7800F3,0x7800F3,0x6470004A,0x6470004A,0x6470004A,0x4E6C004A,0x4E6C004A,0x466C004A,0x62640033,0x62640033,0x62640033,0x50640002,0x50640002,0x4864000E,0x4A600033,0x4A600033,0x46600005,0x40600035,0x2B000F3,0x2B000F3,0x2B000F3,0x52540049,0x52540049,0x465C004A,0x50440032,0x50440032,0x464C0001,0x42500034,0x16800F3, -0x16800F3,0x462C0048,0x40200034,0x3C0000F4,0xCA640003,0xF0700053,0x7800F3,0x80640001,0x64640002,0x58640002,0x56640003,0x4E600001,0xBE500000,0x7E580000,0x50600033,0x464C0001,0xFC00F3,0x840032,0x840032,0x840032,0x840032,0x587C0001,0x587C0001,0x587C0001,0x4A7C0001,0x4A7C0001,0x46780001,0xC40032,0xC40032,0xC40032,0x4E680001,0x4E680001, -0x46700000,0x18C0032,0x18C0032,0x46500000,0x40000034,0xC40032,0xC40032,0xC40032,0x4E680001,0x4E680001,0x46700000,0x18C0032,0x18C0032,0x46500000,0x40000034,0x18C0032,0x18C0032,0x46500000,0x40000034,0x40000034,0xAC6C0000,0xC67C0001,0x840032,0x80640000,0x5E6C0001,0x56680000,0x506C0001,0x4E600000,0xBE500000,0x785C0000,0x1180032,0x46500000, -0x1180032,0x98004A,0x68900001,0x588C0001,0x528C0001,0xE40048,0x5C780001,0x52800001,0x1D00048,0x525C0000,0x4C000048,0xE40048,0x5C780001,0x52800001,0x1D00048,0x525C0000,0x4C000048,0x1D00048,0x525C0000,0x4C000048,0x4C000048,0xE40048,0x5C780001,0x52800001,0x1D00048,0x525C0000,0x4C000048,0x1D00048,0x525C0000,0x4C000048,0x4C000048,0x1D00048, -0x525C0000,0x4C000048,0x4C000048,0x4C000048,0xE25C0000,0xA40048,0xF0900001,0x84600000,0x68600001,0x5C5C0000,0x526C0000,0x52480000,0xD8440000,0x7E580000,0x54700000,0x4C000048,0x1480048,0x6C004A,0x6C004A,0x6C004A,0x6C004A,0x6C004A,0x6C004A,0x6C004A,0x6C004A,0x6C004A,0x6C004A,0x52640001,0x52640001,0x52640001,0x52640001,0x52640001, -0x52640001,0x42600001,0x42600001,0x42600001,0x3C600001,0xA40048,0xA40048,0xA40048,0xA40048,0xA40048,0xA40048,0x464C0001,0x464C0001,0x464C0001,0x3C540001,0x14C0048,0x14C0048,0x14C0048,0x3C300000,0x36000048,0xDA640001,0x6C004A,0x6C004A,0x7C640001,0x66640001,0x5A640001,0x5A640001,0x4C640001,0xBA500000,0x7E580000,0x46600001,0x464C0001, -0xE80048,}; -static const uint32_t g_etc1_to_bc7_m6_table41[] = { -0x700001,0x700001,0x700001,0x700001,0x700001,0x700001,0x700001,0x700001,0x700001,0x700001,0x700001,0x700001,0x700001,0x700001,0x700001,0x700001,0x700001,0x700001,0x700001,0x700001,0xA80000,0xA80000,0xA80000,0xA80000,0xA80000,0xA80000,0xA80000,0xA80000,0xA80000,0xA80000,0x1580000, -0x1580000,0x1580000,0x1580000,0x38000000,0x700001,0x700001,0x700001,0x700001,0x700001,0x700001,0x700001,0x700001,0x4780000,0x4780000,0x4780000,0xA80000,0xF00000,0x880001,0x880001,0x880001,0x880001,0x880001,0x880001,0x880001,0x880001,0x880001,0x880001,0xCC0000,0xCC0000,0xCC0000,0xCC0000,0xCC0000, -0xCC0000,0x1A00000,0x1A00000,0x1A00000,0x44000000,0xCC0000,0xCC0000,0xCC0000,0xCC0000,0xCC0000,0xCC0000,0x1A00000,0x1A00000,0x1A00000,0x44000000,0x1A00000,0x1A00000,0x1A00000,0x44000000,0x44000000,0x940000,0x880001,0x880001,0xA00000,0xAC0000,0xBC0000,0xBC0000,0xE80000,0xA00000,0xAC0000,0x1240000,0x1A00000, -0x1240000,0x9C0001,0x9C0001,0x9C0001,0x9C0001,0x2E80000,0x2E80000,0x2E80000,0x1DC0000,0x1DC0000,0x4E000000,0x2E80000,0x2E80000,0x2E80000,0x1DC0000,0x1DC0000,0x4E000000,0x1DC0000,0x1DC0000,0x4E000000,0x4E000000,0x2E80000,0x2E80000,0x2E80000,0x1DC0000,0x1DC0000,0x4E000000,0x1DC0000,0x1DC0000,0x4E000000,0x4E000000,0x1DC0000, -0x1DC0000,0x4E000000,0x4E000000,0x4E000000,0xB80000,0xA80000,0x9C0001,0x2D40000,0x1080000,0x1500000,0x1800000,0x11F40000,0x2C40000,0x2E80000,0x1500000,0x4E000000,0x1500000,0xB40001,0x30C0000,0xBFC0000,0x5A000000,0x30C0000,0xBFC0000,0x5A000000,0xBFC0000,0x5A000000,0x5A000000,0x30C0000,0xBFC0000,0x5A000000,0xBFC0000,0x5A000000, -0x5A000000,0xBFC0000,0x5A000000,0x5A000000,0x5A000000,0x30C0000,0xBFC0000,0x5A000000,0xBFC0000,0x5A000000,0x5A000000,0xBFC0000,0x5A000000,0x5A000000,0x5A000000,0xBFC0000,0x5A000000,0x5A000000,0x5A000000,0x5A000000,0xE40000,0x8C00000,0x8C00000,0x1300000,0x1BC0000,0x31FC0000,0x5A000000,0x5A000000,0xF80000,0x1540000,0x51D40000,0x5A000000, -0x1800000,0x940274,0x888800F3,0x648800F4,0x5A8800F3,0x7E800092,0x6680004F,0x5C800067,0x5E800092,0x5A7C004E,0x547C0092,0x7C7400F4,0x6A740033,0x5C780051,0x6270004A,0x5A740002,0x5474004D,0x5A7000F4,0x566C0053,0x526C0069,0x4E7000F5,0xDC0274,0x705C00F3,0x5A7400F4,0x66580092,0x5A640049,0x54680090,0x644800F3,0x5A500032,0x5450004D,0x4E5C00F4,0x1BC0274, -0x5A2800F3,0x54240090,0x4E1800F4,0x48000278,0xD6740004,0xFC8800F4,0xFE8C014C,0x88740002,0x70740002,0x62740002,0x5A740006,0x58700006,0xD65C0002,0x86680000,0x5C6C0035,0x5450004D,0x1380274,0xA000F3,0x7C940032,0x62940032,0x5A940032,0x728C0049,0x64880002,0x5A8C0005,0x5C880049,0x5888000E,0x54880049,0xEC00F3,0x6A740032,0x5A840032,0x62700049,0x5A740001, -0x54780049,0x1E400F3,0x5A4C0032,0x54480048,0x4E0000F4,0xEC00F3,0x6A740032,0x5A840032,0x62700049,0x5A740001,0x54780049,0x1E400F3,0x5A4C0032,0x54480048,0x4E0000F4,0x1E400F3,0x5A4C0032,0x54480048,0x4E0000F4,0x4E0000F4,0xD6740003,0xF0900059,0xF498004A,0x88740001,0x70740001,0x62740001,0x5A7C0001,0x5A6C0004,0xDC580001,0x86680000,0x5C680033,0x54480048, -0x15400F3,0x8800F3,0x8800F3,0x8800F3,0x8800F3,0x6C80004A,0x6C80004A,0x6C80004A,0x567C004A,0x567C004A,0x4E7C004A,0x6A740033,0x6A740033,0x6A740033,0x58740002,0x58740002,0x5074000E,0x52700033,0x52700033,0x4E700005,0x48700035,0xC800F3,0xC800F3,0xC800F3,0x5A640049,0x5A640049,0x4E6C004A,0x58540032,0x58540032,0x4E5C0001,0x4A600034,0x19800F3, -0x19800F3,0x4E3C0048,0x48300034,0x440000F4,0xD2740003,0xF8800053,0x8800F3,0x88740001,0x6C740002,0x60740002,0x5E740003,0x56700001,0xC6600000,0x86680000,0x58700033,0x4E5C0001,0x12000F3,0x940032,0x940032,0x940032,0x940032,0x608C0001,0x608C0001,0x608C0001,0x528C0001,0x528C0001,0x4E880001,0xDC0032,0xDC0032,0xDC0032,0x56780001,0x56780001, -0x4E800000,0x1BC0032,0x1BC0032,0x4E600000,0x48000034,0xDC0032,0xDC0032,0xDC0032,0x56780001,0x56780001,0x4E800000,0x1BC0032,0x1BC0032,0x4E600000,0x48000034,0x1BC0032,0x1BC0032,0x4E600000,0x48000034,0x48000034,0xB47C0000,0xCE8C0001,0x940032,0x88740000,0x667C0001,0x5E780000,0x587C0001,0x56700000,0xC6600000,0x806C0000,0x1380032,0x4E600000, -0x1380032,0xA8004A,0x70A00001,0x609C0001,0x5A9C0001,0xFC0048,0x64880001,0x5A900001,0x3F80048,0x5A6C0000,0x54000048,0xFC0048,0x64880001,0x5A900001,0x3F80048,0x5A6C0000,0x54000048,0x3F80048,0x5A6C0000,0x54000048,0x54000048,0xFC0048,0x64880001,0x5A900001,0x3F80048,0x5A6C0000,0x54000048,0x3F80048,0x5A6C0000,0x54000048,0x54000048,0x3F80048, -0x5A6C0000,0x54000048,0x54000048,0x54000048,0xEA6C0000,0x2B40048,0xF8A00001,0x8C700000,0x70700001,0x646C0000,0x5A7C0000,0x5A580000,0xE0540000,0x86680000,0x5C800000,0x54000048,0x1680048,0x7C004A,0x7C004A,0x7C004A,0x7C004A,0x7C004A,0x7C004A,0x7C004A,0x7C004A,0x7C004A,0x7C004A,0x5A740001,0x5A740001,0x5A740001,0x5A740001,0x5A740001, -0x5A740001,0x4A700001,0x4A700001,0x4A700001,0x44700001,0xBC0048,0xBC0048,0xBC0048,0xBC0048,0xBC0048,0xBC0048,0x4E5C0001,0x4E5C0001,0x4E5C0001,0x44640001,0x17C0048,0x17C0048,0x17C0048,0x44400000,0x3E000048,0xE2740001,0x7C004A,0x7C004A,0x84740001,0x6E740001,0x62740001,0x62740001,0x54740001,0xC2600000,0x86680000,0x4E700001,0x4E5C0001, -0x10C0048,}; -static const uint32_t g_etc1_to_bc7_m6_table42[] = { -0x800001,0x800001,0x800001,0x800001,0x800001,0x800001,0x800001,0x800001,0x800001,0x800001,0x800001,0x800001,0x800001,0x800001,0x800001,0x800001,0x800001,0x800001,0x800001,0x800001,0xC00000,0xC00000,0xC00000,0xC00000,0xC00000,0xC00000,0xC00000,0xC00000,0xC00000,0xC00000,0x1880000, -0x1880000,0x1880000,0x1880000,0x40000000,0x800001,0x800001,0x800001,0x800001,0x800001,0x800001,0x800001,0x800001,0xC880000,0xC880000,0xC880000,0xC00000,0x1140000,0x980001,0x980001,0x980001,0x980001,0x980001,0x980001,0x980001,0x980001,0x980001,0x980001,0xE40000,0xE40000,0xE40000,0xE40000,0xE40000, -0xE40000,0x1D00000,0x1D00000,0x1D00000,0x4C000000,0xE40000,0xE40000,0xE40000,0xE40000,0xE40000,0xE40000,0x1D00000,0x1D00000,0x1D00000,0x4C000000,0x1D00000,0x1D00000,0x1D00000,0x4C000000,0x4C000000,0xA40000,0x980001,0x980001,0xB40000,0xC00000,0xD00000,0xD00000,0x3000000,0xB40000,0xC00000,0x1480000,0x1D00000, -0x1480000,0xAC0001,0xAC0001,0xAC0001,0xAC0001,0x3000000,0x3000000,0x3000000,0x5FC0000,0x5FC0000,0x56000000,0x3000000,0x3000000,0x3000000,0x5FC0000,0x5FC0000,0x56000000,0x5FC0000,0x5FC0000,0x56000000,0x56000000,0x3000000,0x3000000,0x3000000,0x5FC0000,0x5FC0000,0x56000000,0x5FC0000,0x5FC0000,0x56000000,0x56000000,0x5FC0000, -0x5FC0000,0x56000000,0x56000000,0x56000000,0x4C80000,0x4B80000,0xAC0001,0xEC0000,0x1240000,0x1700000,0x1A80000,0x1BF80000,0x2D80000,0x3000000,0x1700000,0x56000000,0x1700000,0xC40001,0x3240000,0x17FC0000,0x62000000,0x3240000,0x17FC0000,0x62000000,0x17FC0000,0x62000000,0x62000000,0x3240000,0x17FC0000,0x62000000,0x17FC0000,0x62000000, -0x62000000,0x17FC0000,0x62000000,0x62000000,0x62000000,0x3240000,0x17FC0000,0x62000000,0x17FC0000,0x62000000,0x62000000,0x17FC0000,0x62000000,0x62000000,0x62000000,0x17FC0000,0x62000000,0x62000000,0x62000000,0x62000000,0xF80000,0xD40000,0xD40000,0x14C0000,0x1E40000,0x3BFC0000,0x62000000,0x62000000,0x10C0000,0x1740000,0x59E40000,0x62000000, -0x1A40000,0xA40274,0x909800F3,0x6C9800F4,0x629800F3,0x86900092,0x6E90004F,0x64900067,0x66900092,0x628C004E,0x5C8C0092,0x848400F4,0x72840033,0x64880051,0x6A80004A,0x62840002,0x5C84004D,0x628000F4,0x5E7C0053,0x5A7C0069,0x568000F5,0xF40274,0x786C00F3,0x628400F4,0x6E680092,0x62740049,0x5C780090,0x6C5800F3,0x62600032,0x5C60004D,0x566C00F4,0x1F00274, -0x623800F3,0x5C340090,0x562800F4,0x50000278,0xDE840004,0xF498010A,0xF8A0015B,0x90840002,0x78840002,0x6A840002,0x62840006,0x60800006,0xDE6C0002,0x8E780000,0x647C0035,0x5C60004D,0x15C0274,0xB000F3,0x84A40032,0x6AA40032,0x62A40032,0x7A9C0049,0x6C980002,0x629C0005,0x64980049,0x6098000E,0x5C980049,0x10400F3,0x72840032,0x62940032,0x6A800049,0x62840001, -0x5C880049,0x7FC00F3,0x625C0032,0x5C580048,0x560000F4,0x10400F3,0x72840032,0x62940032,0x6A800049,0x62840001,0x5C880049,0x7FC00F3,0x625C0032,0x5C580048,0x560000F4,0x7FC00F3,0x625C0032,0x5C580048,0x560000F4,0x560000F4,0xDE840003,0xF8A00059,0xFCA8004A,0x90840001,0x78840001,0x6A840001,0x628C0001,0x627C0004,0xE4680001,0x8E780000,0x64780033,0x5C580048, -0x17400F3,0x9800F3,0x9800F3,0x9800F3,0x9800F3,0x7490004A,0x7490004A,0x7490004A,0x5E8C004A,0x5E8C004A,0x568C004A,0x72840033,0x72840033,0x72840033,0x60840002,0x60840002,0x5884000E,0x5A800033,0x5A800033,0x56800005,0x50800035,0xE000F3,0xE000F3,0xE000F3,0x62740049,0x62740049,0x567C004A,0x60640032,0x60640032,0x566C0001,0x52700034,0x1CC00F3, -0x1CC00F3,0x564C0048,0x50400034,0x4C0000F4,0xDA840003,0xF090005A,0x9800F3,0x90840001,0x74840002,0x68840002,0x66840003,0x5E800001,0xCE700000,0x8E780000,0x60800033,0x566C0001,0x14000F3,0xA40032,0xA40032,0xA40032,0xA40032,0x689C0001,0x689C0001,0x689C0001,0x5A9C0001,0x5A9C0001,0x56980001,0xF40032,0xF40032,0xF40032,0x5E880001,0x5E880001, -0x56900000,0x1F00032,0x1F00032,0x56700000,0x50000034,0xF40032,0xF40032,0xF40032,0x5E880001,0x5E880001,0x56900000,0x1F00032,0x1F00032,0x56700000,0x50000034,0x1F00032,0x1F00032,0x56700000,0x50000034,0x50000034,0xBC8C0000,0xD69C0001,0xA40032,0x90840000,0x6E8C0001,0x66880000,0x608C0001,0x5E800000,0xCE700000,0x887C0000,0x15C0032,0x56700000, -0x15C0032,0xB8004A,0x78B00001,0x68AC0001,0x62AC0001,0x1140048,0x6C980001,0x62A00001,0xFF80048,0x627C0000,0x5C000048,0x1140048,0x6C980001,0x62A00001,0xFF80048,0x627C0000,0x5C000048,0xFF80048,0x627C0000,0x5C000048,0x5C000048,0x1140048,0x6C980001,0x62A00001,0xFF80048,0x627C0000,0x5C000048,0xFF80048,0x627C0000,0x5C000048,0x5C000048,0xFF80048, -0x627C0000,0x5C000048,0x5C000048,0x5C000048,0xF27C0000,0xAC40048,0xF0B00002,0x94800000,0x78800001,0x6C7C0000,0x628C0000,0x62680000,0xE8640000,0x8E780000,0x64900000,0x5C000048,0x18C0048,0x8C004A,0x8C004A,0x8C004A,0x8C004A,0x8C004A,0x8C004A,0x8C004A,0x8C004A,0x8C004A,0x8C004A,0x62840001,0x62840001,0x62840001,0x62840001,0x62840001, -0x62840001,0x52800001,0x52800001,0x52800001,0x4C800001,0x2D00048,0x2D00048,0x2D00048,0x2D00048,0x2D00048,0x2D00048,0x566C0001,0x566C0001,0x566C0001,0x4C740001,0x1AC0048,0x1AC0048,0x1AC0048,0x4C500000,0x46000048,0xEA840001,0x8C004A,0x8C004A,0x8C840001,0x76840001,0x6A840001,0x6A840001,0x5C840001,0xCA700000,0x8E780000,0x56800001,0x566C0001, -0x12C0048,}; -static const uint32_t g_etc1_to_bc7_m6_table43[] = { -0x900001,0x900001,0x900001,0x900001,0x900001,0x900001,0x900001,0x900001,0x900001,0x900001,0x900001,0x900001,0x900001,0x900001,0x900001,0x900001,0x900001,0x900001,0x900001,0x900001,0xD80000,0xD80000,0xD80000,0xD80000,0xD80000,0xD80000,0xD80000,0xD80000,0xD80000,0xD80000,0x1B80000, -0x1B80000,0x1B80000,0x1B80000,0x48000000,0x900001,0x900001,0x900001,0x900001,0x900001,0x900001,0x900001,0x900001,0x9C0000,0x9C0000,0x9C0000,0xD80000,0x1340000,0xA80001,0xA80001,0xA80001,0xA80001,0xA80001,0xA80001,0xA80001,0xA80001,0xA80001,0xA80001,0xFC0000,0xFC0000,0xFC0000,0xFC0000,0xFC0000, -0xFC0000,0x3F80000,0x3F80000,0x3F80000,0x54000000,0xFC0000,0xFC0000,0xFC0000,0xFC0000,0xFC0000,0xFC0000,0x3F80000,0x3F80000,0x3F80000,0x54000000,0x3F80000,0x3F80000,0x3F80000,0x54000000,0x54000000,0x2B40000,0xA80001,0xA80001,0x2C40000,0xD40000,0xE80000,0xE80000,0x11C0000,0x2C40000,0xD40000,0x1680000,0x3F80000, -0x1680000,0xBC0001,0xBC0001,0xBC0001,0xBC0001,0x3180000,0x3180000,0x3180000,0x11FC0000,0x11FC0000,0x5E000000,0x3180000,0x3180000,0x3180000,0x11FC0000,0x11FC0000,0x5E000000,0x11FC0000,0x11FC0000,0x5E000000,0x5E000000,0x3180000,0x3180000,0x3180000,0x11FC0000,0x11FC0000,0x5E000000,0x11FC0000,0x11FC0000,0x5E000000,0x5E000000,0x11FC0000, -0x11FC0000,0x5E000000,0x5E000000,0x5E000000,0xDC0000,0xCC80000,0xBC0001,0x3000000,0x1400000,0x1940000,0x1D00000,0x25FC0000,0x2EC0000,0x3180000,0x1940000,0x5E000000,0x1940000,0xD40001,0x33C0000,0x23FC0000,0x6A000000,0x33C0000,0x23FC0000,0x6A000000,0x23FC0000,0x6A000000,0x6A000000,0x33C0000,0x23FC0000,0x6A000000,0x23FC0000,0x6A000000, -0x6A000000,0x23FC0000,0x6A000000,0x6A000000,0x6A000000,0x33C0000,0x23FC0000,0x6A000000,0x23FC0000,0x6A000000,0x6A000000,0x23FC0000,0x6A000000,0x6A000000,0x6A000000,0x23FC0000,0x6A000000,0x6A000000,0x6A000000,0x6A000000,0x10C0000,0xE40000,0xE40000,0x1680000,0x7F80000,0x45FC0000,0x6A000000,0x6A000000,0x1240000,0x1900000,0x61F40000,0x6A000000, -0x1C80000,0xB40274,0x98A800F3,0x74A800F4,0x6AA800F3,0x8EA00092,0x76A0004F,0x6CA00067,0x6EA00092,0x6A9C004E,0x649C0092,0x8C9400F4,0x7A940033,0x6C980051,0x7290004A,0x6A940002,0x6494004D,0x6A9000F4,0x668C0053,0x628C0069,0x5E9000F5,0x10C0274,0x807C00F3,0x6A9400F4,0x76780092,0x6A840049,0x64880090,0x746800F3,0x6A700032,0x6470004D,0x5E7C00F4,0xBF80274, -0x6A4800F3,0x64440090,0x5E3800F4,0x58000278,0xE6940004,0xFCA8010A,0xFEAC015F,0x98940002,0x80940002,0x72940002,0x6A940006,0x68900006,0xE67C0002,0x96880000,0x6C8C0035,0x6470004D,0x17C0274,0xC000F3,0x8CB40032,0x72B40032,0x6AB40032,0x82AC0049,0x74A80002,0x6AAC0005,0x6CA80049,0x68A8000E,0x64A80049,0x11C00F3,0x7A940032,0x6AA40032,0x72900049,0x6A940001, -0x64980049,0x13FC00F3,0x6A6C0032,0x64680048,0x5E0000F4,0x11C00F3,0x7A940032,0x6AA40032,0x72900049,0x6A940001,0x64980049,0x13FC00F3,0x6A6C0032,0x64680048,0x5E0000F4,0x13FC00F3,0x6A6C0032,0x64680048,0x5E0000F4,0x5E0000F4,0xE6940003,0xF0B00063,0xF4B80053,0x98940001,0x80940001,0x72940001,0x6A9C0001,0x6A8C0004,0xEC780001,0x96880000,0x6C880033,0x64680048, -0x19800F3,0xA800F3,0xA800F3,0xA800F3,0xA800F3,0x7CA0004A,0x7CA0004A,0x7CA0004A,0x669C004A,0x669C004A,0x5E9C004A,0x7A940033,0x7A940033,0x7A940033,0x68940002,0x68940002,0x6094000E,0x62900033,0x62900033,0x5E900005,0x58900035,0xF800F3,0xF800F3,0xF800F3,0x6A840049,0x6A840049,0x5E8C004A,0x68740032,0x68740032,0x5E7C0001,0x5A800034,0x1FC00F3, -0x1FC00F3,0x5E5C0048,0x58500034,0x540000F4,0xE2940003,0xF8A0005A,0xA800F3,0x98940001,0x7C940002,0x70940002,0x6E940003,0x66900001,0xD6800000,0x96880000,0x68900033,0x5E7C0001,0x16400F3,0xB40032,0xB40032,0xB40032,0xB40032,0x70AC0001,0x70AC0001,0x70AC0001,0x62AC0001,0x62AC0001,0x5EA80001,0x10C0032,0x10C0032,0x10C0032,0x66980001,0x66980001, -0x5EA00000,0xBF80032,0xBF80032,0x5E800000,0x58000034,0x10C0032,0x10C0032,0x10C0032,0x66980001,0x66980001,0x5EA00000,0xBF80032,0xBF80032,0x5E800000,0x58000034,0xBF80032,0xBF80032,0x5E800000,0x58000034,0x58000034,0xC49C0000,0xDEAC0001,0xB40032,0x98940000,0x769C0001,0x6E980000,0x689C0001,0x66900000,0xD6800000,0x908C0000,0x17C0032,0x5E800000, -0x17C0032,0xC8004A,0x80C00001,0x70BC0001,0x6ABC0001,0x12C0048,0x74A80001,0x6AB00001,0x1BF80048,0x6A8C0000,0x64000048,0x12C0048,0x74A80001,0x6AB00001,0x1BF80048,0x6A8C0000,0x64000048,0x1BF80048,0x6A8C0000,0x64000048,0x64000048,0x12C0048,0x74A80001,0x6AB00001,0x1BF80048,0x6A8C0000,0x64000048,0x1BF80048,0x6A8C0000,0x64000048,0x64000048,0x1BF80048, -0x6A8C0000,0x64000048,0x64000048,0x64000048,0xFA8C0000,0xD80048,0xF8C00002,0x9C900000,0x80900001,0x748C0000,0x6A9C0000,0x6A780000,0xF0740000,0x96880000,0x6CA00000,0x64000048,0x1AC0048,0x9C004A,0x9C004A,0x9C004A,0x9C004A,0x9C004A,0x9C004A,0x9C004A,0x9C004A,0x9C004A,0x9C004A,0x6A940001,0x6A940001,0x6A940001,0x6A940001,0x6A940001, -0x6A940001,0x5A900001,0x5A900001,0x5A900001,0x54900001,0x2E80048,0x2E80048,0x2E80048,0x2E80048,0x2E80048,0x2E80048,0x5E7C0001,0x5E7C0001,0x5E7C0001,0x54840001,0x1DC0048,0x1DC0048,0x1DC0048,0x54600000,0x4E000048,0xF2940001,0x9C004A,0x9C004A,0x94940001,0x7E940001,0x72940001,0x72940001,0x64940001,0xD2800000,0x96880000,0x5E900001,0x5E7C0001, -0x1500048,}; -static const uint32_t g_etc1_to_bc7_m6_table44[] = { -0xA40000,0xA40000,0xA40000,0xA40000,0xA40000,0xA40000,0xA40000,0xA40000,0xA40000,0xA40000,0xA40000,0xA40000,0xA40000,0xA40000,0xA40000,0xA40000,0xA40000,0xA40000,0xA40000,0xA40000,0xF40000,0xF40000,0xF40000,0xF40000,0xF40000,0xF40000,0xF40000,0xF40000,0xF40000,0xF40000,0x1F00000, -0x1F00000,0x1F00000,0x1F00000,0x50000001,0xA40000,0xA40000,0xA40000,0xA40000,0xA40000,0xA40000,0xA40000,0xA40000,0xEAC0000,0xEAC0000,0xEAC0000,0xF40000,0x15C0000,0xBC0000,0xBC0000,0xBC0000,0xBC0000,0xBC0000,0xBC0000,0xBC0000,0xBC0000,0xBC0000,0xBC0000,0x1180000,0x1180000,0x1180000,0x1180000,0x1180000, -0x1180000,0x11F80000,0x11F80000,0x11F80000,0x5C000001,0x1180000,0x1180000,0x1180000,0x1180000,0x1180000,0x1180000,0x11F80000,0x11F80000,0x11F80000,0x5C000001,0x11F80000,0x11F80000,0x11F80000,0x5C000001,0x5C000001,0xC80000,0xBC0000,0xBC0000,0x4D80000,0xEC0000,0x1000000,0x1000000,0x13C0000,0x4D80000,0xEC0000,0x1900000,0x11F80000, -0x1900000,0xD00000,0xD00000,0xD00000,0xD00000,0x1340000,0x1340000,0x1340000,0x1FF80000,0x1FF80000,0x66000001,0x1340000,0x1340000,0x1340000,0x1FF80000,0x1FF80000,0x66000001,0x1FF80000,0x1FF80000,0x66000001,0x66000001,0x1340000,0x1340000,0x1340000,0x1FF80000,0x1FF80000,0x66000001,0x1FF80000,0x1FF80000,0x66000001,0x66000001,0x1FF80000, -0x1FF80000,0x66000001,0x66000001,0x66000001,0x2F00000,0x6DC0000,0xD00000,0x3180000,0x15C0000,0x1B80000,0x1FC0000,0x33F40000,0x1040000,0x1340000,0x1B80000,0x66000001,0x1B80000,0xE80000,0x1580000,0x31F80000,0x72000001,0x1580000,0x31F80000,0x72000001,0x31F80000,0x72000001,0x72000001,0x1580000,0x31F80000,0x72000001,0x31F80000,0x72000001, -0x72000001,0x31F80000,0x72000001,0x72000001,0x72000001,0x1580000,0x31F80000,0x72000001,0x31F80000,0x72000001,0x72000001,0x31F80000,0x72000001,0x72000001,0x72000001,0x31F80000,0x72000001,0x72000001,0x72000001,0x72000001,0x5200000,0xF80000,0xF80000,0x1840000,0x15FC0000,0x51F80000,0x72000001,0x72000001,0x13C0000,0x1B40000,0x6BE80000,0x72000001, -0x1EC0000,0xC40278,0xA0BC00F4,0x7EBC00F4,0x72BC00F5,0x9AB00090,0x82B0004D,0x76B40069,0x78B00090,0x72B0004D,0x6CB00092,0x96A400F3,0x84A40032,0x76AC0053,0x7AA40049,0x72A40002,0x6EA4004E,0x72A400F4,0x70A00051,0x6CA00067,0x68A400F3,0x3240274,0x889000F3,0x72A400F4,0x80880092,0x7494004A,0x6C9C0092,0x7E7800F3,0x72840033,0x6C84004F,0x688C00F4,0x17FC0274, -0x726000F4,0x6C580092,0x684400F3,0x62000274,0xF6A40005,0xF6BC0120,0xF8C0016C,0xA4A40000,0x8AA40001,0x7AA40002,0x74A80006,0x72A40006,0xEE8C0002,0x9C9C0002,0x74A00035,0x6C84004F,0x1A40274,0xD000F4,0x94C80034,0x7CC40034,0x72C40035,0x8EBC0048,0x7CBC0001,0x74BC0005,0x74BC004A,0x72B8000E,0x6CBC004A,0x13800F3,0x82A80032,0x74B40033,0x7AA40049,0x72A40002, -0x6CAC004A,0x21F800F3,0x72840033,0x6C7C004A,0x680000F3,0x13800F3,0x82A80032,0x74B40033,0x7AA40049,0x72A40002,0x6CAC004A,0x21F800F3,0x72840033,0x6C7C004A,0x680000F3,0x21F800F3,0x72840033,0x6C7C004A,0x680000F3,0x680000F3,0xEAA80003,0xFAC40060,0xFECC0054,0xA4A40000,0x8AA40001,0x7AA40002,0x74AC0001,0x729C0003,0xEE8C0001,0x9C9C0001,0x76980032,0x6C7C004A, -0x1BC00F3,0xBC00F4,0xBC00F4,0xBC00F4,0xBC00F4,0x88B00048,0x88B00048,0x88B00048,0x6EB00049,0x6EB00049,0x66B00049,0x84A40032,0x84A40032,0x84A40032,0x72A40001,0x72A40001,0x68A8000E,0x6AA40032,0x6AA40032,0x66A40005,0x62A40032,0x11400F3,0x11400F3,0x11400F3,0x74940049,0x74940049,0x66A00049,0x72840032,0x72840032,0x66900002,0x62940032,0xFF800F3, -0xFF800F3,0x66700049,0x625C0032,0x5C0000F3,0xEAA40004,0xF2B40060,0xBC00F4,0xA4A40000,0x86A40001,0x7AA40001,0x76A40004,0x6EA40001,0xE4900000,0x9C9C0001,0x72A00032,0x66900002,0x18C00F3,0xC40034,0xC40034,0xC40034,0xC40034,0x7ABC0000,0x7ABC0000,0x7ABC0000,0x6CBC0000,0x6CBC0000,0x66BC0001,0x3240032,0x3240032,0x3240032,0x6EAC0001,0x6EAC0001, -0x66B40001,0x17FC0032,0x17FC0032,0x66980001,0x62000032,0x3240032,0x3240032,0x3240032,0x6EAC0001,0x6EAC0001,0x66B40001,0x17FC0032,0x17FC0032,0x66980001,0x62000032,0x17FC0032,0x17FC0032,0x66980001,0x62000032,0x62000032,0xD2AC0000,0xF6BC0000,0xC40034,0xA4A40000,0x84A80000,0x78A80000,0x74AC0000,0x6EA40001,0xE4900000,0x9C9C0000,0x1A40032,0x66980001, -0x1A40032,0xDC0048,0x8CD00000,0x78D00001,0x72D00001,0x3440048,0x7CBC0001,0x72C40001,0x27FC0048,0x72A00001,0x6C00004A,0x3440048,0x7CBC0001,0x72C40001,0x27FC0048,0x72A00001,0x6C00004A,0x27FC0048,0x72A00001,0x6C00004A,0x6C00004A,0x3440048,0x7CBC0001,0x72C40001,0x27FC0048,0x72A00001,0x6C00004A,0x27FC0048,0x72A00001,0x6C00004A,0x6C00004A,0x27FC0048, -0x72A00001,0x6C00004A,0x6C00004A,0x6C00004A,0xF6A40001,0xCE80048,0xF2D40005,0xA4A40000,0x88A40001,0x7CA00000,0x72B00001,0x72900001,0xF6880000,0xA0980000,0x74B40001,0x6C00004A,0x1D40048,0xB00048,0xB00048,0xB00048,0xB00048,0xB00048,0xB00048,0xB00048,0xB00048,0xB00048,0xB00048,0x76A40000,0x76A40000,0x76A40000,0x76A40000,0x76A40000, -0x76A40000,0x62A40001,0x62A40001,0x62A40001,0x5CA40001,0x1040048,0x1040048,0x1040048,0x1040048,0x1040048,0x1040048,0x66900001,0x66900001,0x66900001,0x5C980001,0x7FC0048,0x7FC0048,0x7FC0048,0x5C740001,0x5600004A,0xFAA40001,0xB00048,0xB00048,0xA4A40000,0x8AA40000,0x7EA40000,0x7EA40000,0x6EA40000,0xE0900000,0xA4980000,0x6AA00000,0x66900001, -0x1740048,}; -static const uint32_t g_etc1_to_bc7_m6_table45[] = { -0xB40000,0xB40000,0xB40000,0xB40000,0xB40000,0xB40000,0xB40000,0xB40000,0xB40000,0xB40000,0xB40000,0xB40000,0xB40000,0xB40000,0xB40000,0xB40000,0xB40000,0xB40000,0xB40000,0xB40000,0x10C0000,0x10C0000,0x10C0000,0x10C0000,0x10C0000,0x10C0000,0x10C0000,0x10C0000,0x10C0000,0x10C0000,0xBF80000, -0xBF80000,0xBF80000,0xBF80000,0x58000001,0xB40000,0xB40000,0xB40000,0xB40000,0xB40000,0xB40000,0xB40000,0xB40000,0xC00000,0xC00000,0xC00000,0x10C0000,0x17C0000,0xCC0000,0xCC0000,0xCC0000,0xCC0000,0xCC0000,0xCC0000,0xCC0000,0xCC0000,0xCC0000,0xCC0000,0x1300000,0x1300000,0x1300000,0x1300000,0x1300000, -0x1300000,0x1DF40000,0x1DF40000,0x1DF40000,0x64000001,0x1300000,0x1300000,0x1300000,0x1300000,0x1300000,0x1300000,0x1DF40000,0x1DF40000,0x1DF40000,0x64000001,0x1DF40000,0x1DF40000,0x1DF40000,0x64000001,0x64000001,0x4D80000,0xCC0000,0xCC0000,0xEC0000,0x1000000,0x1140000,0x1140000,0x3540000,0xEC0000,0x1000000,0x1B00000,0x1DF40000, -0x1B00000,0xE00000,0xE00000,0xE00000,0xE00000,0x14C0000,0x14C0000,0x14C0000,0x2BF80000,0x2BF80000,0x6E000001,0x14C0000,0x14C0000,0x14C0000,0x2BF80000,0x2BF80000,0x6E000001,0x2BF80000,0x2BF80000,0x6E000001,0x6E000001,0x14C0000,0x14C0000,0x14C0000,0x2BF80000,0x2BF80000,0x6E000001,0x2BF80000,0x2BF80000,0x6E000001,0x6E000001,0x2BF80000, -0x2BF80000,0x6E000001,0x6E000001,0x6E000001,0x1040000,0xEEC0000,0xE00000,0x1300000,0x1780000,0x1DC0000,0xFFC0000,0x3DF80000,0x1180000,0x14C0000,0x1DC0000,0x6E000001,0x1DC0000,0xF80000,0x1700000,0x3DF80000,0x7A000001,0x1700000,0x3DF80000,0x7A000001,0x3DF80000,0x7A000001,0x7A000001,0x1700000,0x3DF80000,0x7A000001,0x3DF80000,0x7A000001, -0x7A000001,0x3DF80000,0x7A000001,0x7A000001,0x7A000001,0x1700000,0x3DF80000,0x7A000001,0x3DF80000,0x7A000001,0x7A000001,0x3DF80000,0x7A000001,0x7A000001,0x7A000001,0x3DF80000,0x7A000001,0x7A000001,0x7A000001,0x7A000001,0x5340000,0x1080000,0x1080000,0x1A00000,0x23FC0000,0x5BF80000,0x7A000001,0x7A000001,0x1500000,0x1D00000,0x73F80000,0x7A000001, -0x9FC0000,0xD40278,0xA8CC00F4,0x86CC00F4,0x7ACC00F5,0xA2C00090,0x8AC0004D,0x7EC40069,0x80C00090,0x7AC0004D,0x74C00092,0x9EB400F3,0x8CB40032,0x7EBC0053,0x82B40049,0x7AB40002,0x76B4004E,0x7AB400F4,0x78B00051,0x74B00067,0x70B400F3,0x33C0274,0x90A000F3,0x7AB400F4,0x88980092,0x7CA4004A,0x74AC0092,0x868800F3,0x7A940033,0x7494004F,0x709C00F4,0x23FC0274, -0x7A7000F4,0x74680092,0x705400F3,0x6A000274,0xFEB40005,0xFECC0120,0xF0D00181,0xACB40000,0x92B40001,0x82B40002,0x7CB80006,0x7AB40006,0xF69C0002,0xA4AC0002,0x7CB00035,0x7494004F,0x1C80274,0xE000F4,0x9CD80034,0x84D40034,0x7AD40035,0x96CC0048,0x84CC0001,0x7CCC0005,0x7CCC004A,0x7AC8000E,0x74CC004A,0x15000F3,0x8AB80032,0x7CC40033,0x82B40049,0x7AB40002, -0x74BC004A,0x2DF800F3,0x7A940033,0x748C004A,0x700000F3,0x15000F3,0x8AB80032,0x7CC40033,0x82B40049,0x7AB40002,0x74BC004A,0x2DF800F3,0x7A940033,0x748C004A,0x700000F3,0x2DF800F3,0x7A940033,0x748C004A,0x700000F3,0x700000F3,0xF2B80003,0xF2D4006A,0xF6DC005D,0xACB40000,0x92B40001,0x82B40002,0x7CBC0001,0x7AAC0003,0xF69C0001,0xA4AC0001,0x7EA80032,0x748C004A, -0x1E000F3,0xCC00F4,0xCC00F4,0xCC00F4,0xCC00F4,0x90C00048,0x90C00048,0x90C00048,0x76C00049,0x76C00049,0x6EC00049,0x8CB40032,0x8CB40032,0x8CB40032,0x7AB40001,0x7AB40001,0x70B8000E,0x72B40032,0x72B40032,0x6EB40005,0x6AB40032,0x12C00F3,0x12C00F3,0x12C00F3,0x7CA40049,0x7CA40049,0x6EB00049,0x7A940032,0x7A940032,0x6EA00002,0x6AA40032,0x1BF800F3, -0x1BF800F3,0x6E800049,0x6A6C0032,0x640000F3,0xF2B40004,0xFAC40060,0xCC00F4,0xACB40000,0x8EB40001,0x82B40001,0x7EB40004,0x76B40001,0xECA00000,0xA4AC0001,0x7AB00032,0x6EA00002,0x1AC00F3,0xD40034,0xD40034,0xD40034,0xD40034,0x82CC0000,0x82CC0000,0x82CC0000,0x74CC0000,0x74CC0000,0x6ECC0001,0x33C0032,0x33C0032,0x33C0032,0x76BC0001,0x76BC0001, -0x6EC40001,0x23FC0032,0x23FC0032,0x6EA80001,0x6A000032,0x33C0032,0x33C0032,0x33C0032,0x76BC0001,0x76BC0001,0x6EC40001,0x23FC0032,0x23FC0032,0x6EA80001,0x6A000032,0x23FC0032,0x23FC0032,0x6EA80001,0x6A000032,0x6A000032,0xDABC0000,0xFECC0000,0xD40034,0xACB40000,0x8CB80000,0x80B80000,0x7CBC0000,0x76B40001,0xECA00000,0xA4AC0000,0x1C80032,0x6EA80001, -0x1C80032,0xEC0048,0x94E00000,0x80E00001,0x7AE00001,0x35C0048,0x84CC0001,0x7AD40001,0x33FC0048,0x7AB00001,0x7400004A,0x35C0048,0x84CC0001,0x7AD40001,0x33FC0048,0x7AB00001,0x7400004A,0x33FC0048,0x7AB00001,0x7400004A,0x7400004A,0x35C0048,0x84CC0001,0x7AD40001,0x33FC0048,0x7AB00001,0x7400004A,0x33FC0048,0x7AB00001,0x7400004A,0x7400004A,0x33FC0048, -0x7AB00001,0x7400004A,0x7400004A,0x7400004A,0xFEB40001,0xFC0048,0xFAE40005,0xACB40000,0x90B40001,0x84B00000,0x7AC00001,0x7AA00001,0xFE980000,0xA8A80000,0x7CC40001,0x7400004A,0x1F40048,0xC00048,0xC00048,0xC00048,0xC00048,0xC00048,0xC00048,0xC00048,0xC00048,0xC00048,0xC00048,0x7EB40000,0x7EB40000,0x7EB40000,0x7EB40000,0x7EB40000, -0x7EB40000,0x6AB40001,0x6AB40001,0x6AB40001,0x64B40001,0x11C0048,0x11C0048,0x11C0048,0x11C0048,0x11C0048,0x11C0048,0x6EA00001,0x6EA00001,0x6EA00001,0x64A80001,0x13FC0048,0x13FC0048,0x13FC0048,0x64840001,0x5E00004A,0xF2B40004,0xC00048,0xC00048,0xACB40000,0x92B40000,0x86B40000,0x86B40000,0x76B40000,0xE8A00000,0xACA80000,0x72B00000,0x6EA00001, -0x1980048,}; -static const uint32_t g_etc1_to_bc7_m6_table46[] = { -0xC40000,0xC40000,0xC40000,0xC40000,0xC40000,0xC40000,0xC40000,0xC40000,0xC40000,0xC40000,0xC40000,0xC40000,0xC40000,0xC40000,0xC40000,0xC40000,0xC40000,0xC40000,0xC40000,0xC40000,0x1240000,0x1240000,0x1240000,0x1240000,0x1240000,0x1240000,0x1240000,0x1240000,0x1240000,0x1240000,0x17F80000, -0x17F80000,0x17F80000,0x17F80000,0x60000001,0xC40000,0xC40000,0xC40000,0xC40000,0xC40000,0xC40000,0xC40000,0xC40000,0xD00000,0xD00000,0xD00000,0x1240000,0x1A00000,0xDC0000,0xDC0000,0xDC0000,0xDC0000,0xDC0000,0xDC0000,0xDC0000,0xDC0000,0xDC0000,0xDC0000,0x3440000,0x3440000,0x3440000,0x3440000,0x3440000, -0x3440000,0x27FC0000,0x27FC0000,0x27FC0000,0x6C000001,0x3440000,0x3440000,0x3440000,0x3440000,0x3440000,0x3440000,0x27FC0000,0x27FC0000,0x27FC0000,0x6C000001,0x27FC0000,0x27FC0000,0x27FC0000,0x6C000001,0x6C000001,0xCE80000,0xDC0000,0xDC0000,0x1000000,0x1140000,0x12C0000,0x12C0000,0x1700000,0x1000000,0x1140000,0x1D40000,0x27FC0000, -0x1D40000,0xF00000,0xF00000,0xF00000,0xF00000,0x1640000,0x1640000,0x1640000,0x37F80000,0x37F80000,0x76000001,0x1640000,0x1640000,0x1640000,0x37F80000,0x37F80000,0x76000001,0x37F80000,0x37F80000,0x76000001,0x76000001,0x1640000,0x1640000,0x1640000,0x37F80000,0x37F80000,0x76000001,0x37F80000,0x37F80000,0x76000001,0x76000001,0x37F80000, -0x37F80000,0x76000001,0x76000001,0x76000001,0x1180000,0x1000000,0xF00000,0x3440000,0x1940000,0x1FC0000,0x1DF80000,0x47FC0000,0x12C0000,0x1640000,0x1FC0000,0x76000001,0x1FC0000,0x1080000,0x1880000,0x49F80000,0x82000001,0x1880000,0x49F80000,0x82000001,0x49F80000,0x82000001,0x82000001,0x1880000,0x49F80000,0x82000001,0x49F80000,0x82000001, -0x82000001,0x49F80000,0x82000001,0x82000001,0x82000001,0x1880000,0x49F80000,0x82000001,0x49F80000,0x82000001,0x82000001,0x49F80000,0x82000001,0x82000001,0x82000001,0x49F80000,0x82000001,0x82000001,0x82000001,0x82000001,0x14C0000,0x5180000,0x5180000,0x1BC0000,0x31FC0000,0x65F80000,0x82000001,0x82000001,0x1680000,0x1F00000,0x7DCC0000,0x82000001, -0x19FC0000,0xE40278,0xB0DC00F4,0x8EDC00F4,0x82DC00F5,0xAAD00090,0x92D0004D,0x86D40069,0x88D00090,0x82D0004D,0x7CD00092,0xA6C400F3,0x94C40032,0x86CC0053,0x8AC40049,0x82C40002,0x7EC4004E,0x82C400F4,0x80C00051,0x7CC00067,0x78C400F3,0x1540274,0x98B000F3,0x82C400F4,0x90A80092,0x84B4004A,0x7CBC0092,0x8E9800F3,0x82A40033,0x7CA4004F,0x78AC00F4,0x2FFC0274, -0x828000F4,0x7C780092,0x786400F3,0x72000274,0xFAC80007,0xF6DC013A,0xF8E00181,0xB4C40000,0x9AC40001,0x8AC40002,0x84C80006,0x82C40006,0xFEAC0002,0xACBC0002,0x84C00035,0x7CA4004F,0x1E80274,0xF000F4,0xA4E80034,0x8CE40034,0x82E40035,0x9EDC0048,0x8CDC0001,0x84DC0005,0x84DC004A,0x82D8000E,0x7CDC004A,0x16800F3,0x92C80032,0x84D40033,0x8AC40049,0x82C40002, -0x7CCC004A,0x39F800F3,0x82A40033,0x7C9C004A,0x780000F3,0x16800F3,0x92C80032,0x84D40033,0x8AC40049,0x82C40002,0x7CCC004A,0x39F800F3,0x82A40033,0x7C9C004A,0x780000F3,0x39F800F3,0x82A40033,0x7C9C004A,0x780000F3,0x780000F3,0xFAC80003,0xFAE4006A,0xFEEC005D,0xB4C40000,0x9AC40001,0x8AC40002,0x84CC0001,0x82BC0003,0xFEAC0001,0xACBC0001,0x86B80032,0x7C9C004A, -0x3FC00F3,0xDC00F4,0xDC00F4,0xDC00F4,0xDC00F4,0x98D00048,0x98D00048,0x98D00048,0x7ED00049,0x7ED00049,0x76D00049,0x94C40032,0x94C40032,0x94C40032,0x82C40001,0x82C40001,0x78C8000E,0x7AC40032,0x7AC40032,0x76C40005,0x72C40032,0x14400F3,0x14400F3,0x14400F3,0x84B40049,0x84B40049,0x76C00049,0x82A40032,0x82A40032,0x76B00002,0x72B40032,0x27F800F3, -0x27F800F3,0x76900049,0x727C0032,0x6C0000F3,0xFAC40004,0xF2D40069,0xDC00F4,0xB4C40000,0x96C40001,0x8AC40001,0x86C40004,0x7EC40001,0xF4B00000,0xACBC0001,0x82C00032,0x76B00002,0x1D000F3,0xE40034,0xE40034,0xE40034,0xE40034,0x8ADC0000,0x8ADC0000,0x8ADC0000,0x7CDC0000,0x7CDC0000,0x76DC0001,0x1540032,0x1540032,0x1540032,0x7ECC0001,0x7ECC0001, -0x76D40001,0x2FFC0032,0x2FFC0032,0x76B80001,0x72000032,0x1540032,0x1540032,0x1540032,0x7ECC0001,0x7ECC0001,0x76D40001,0x2FFC0032,0x2FFC0032,0x76B80001,0x72000032,0x2FFC0032,0x2FFC0032,0x76B80001,0x72000032,0x72000032,0xE2CC0000,0xF6DC0001,0xE40034,0xB4C40000,0x94C80000,0x88C80000,0x84CC0000,0x7EC40001,0xF4B00000,0xACBC0000,0x1E80032,0x76B80001, -0x1E80032,0xFC0048,0x9CF00000,0x88F00001,0x82F00001,0x3740048,0x8CDC0001,0x82E40001,0x3FFC0048,0x82C00001,0x7C00004A,0x3740048,0x8CDC0001,0x82E40001,0x3FFC0048,0x82C00001,0x7C00004A,0x3FFC0048,0x82C00001,0x7C00004A,0x7C00004A,0x3740048,0x8CDC0001,0x82E40001,0x3FFC0048,0x82C00001,0x7C00004A,0x3FFC0048,0x82C00001,0x7C00004A,0x7C00004A,0x3FFC0048, -0x82C00001,0x7C00004A,0x7C00004A,0x7C00004A,0xFAC80002,0x10C0048,0xF2F40008,0xB4C40000,0x98C40001,0x8CC00000,0x82D00001,0x82B00001,0xFEAC0001,0xB0B80000,0x84D40001,0x7C00004A,0xDFC0048,0xD00048,0xD00048,0xD00048,0xD00048,0xD00048,0xD00048,0xD00048,0xD00048,0xD00048,0xD00048,0x86C40000,0x86C40000,0x86C40000,0x86C40000,0x86C40000, -0x86C40000,0x72C40001,0x72C40001,0x72C40001,0x6CC40001,0x1340048,0x1340048,0x1340048,0x1340048,0x1340048,0x1340048,0x76B00001,0x76B00001,0x76B00001,0x6CB80001,0x1FF80048,0x1FF80048,0x1FF80048,0x6C940001,0x6600004A,0xFAC40004,0xD00048,0xD00048,0xB4C40000,0x9AC40000,0x8EC40000,0x8EC40000,0x7EC40000,0xF0B00000,0xB4B80000,0x7AC00000,0x76B00001, -0x1B80048,}; -static const uint32_t g_etc1_to_bc7_m6_table47[] = { -0xD40000,0xD40000,0xD40000,0xD40000,0xD40000,0xD40000,0xD40000,0xD40000,0xD40000,0xD40000,0xD40000,0xD40000,0xD40000,0xD40000,0xD40000,0xD40000,0xD40000,0xD40000,0xD40000,0xD40000,0x13C0000,0x13C0000,0x13C0000,0x13C0000,0x13C0000,0x13C0000,0x13C0000,0x13C0000,0x13C0000,0x13C0000,0x21FC0000, -0x21FC0000,0x21FC0000,0x21FC0000,0x68000001,0xD40000,0xD40000,0xD40000,0xD40000,0xD40000,0xD40000,0xD40000,0xD40000,0x8E00000,0x8E00000,0x8E00000,0x13C0000,0x1C00000,0xEC0000,0xEC0000,0xEC0000,0xEC0000,0xEC0000,0xEC0000,0xEC0000,0xEC0000,0xEC0000,0xEC0000,0x35C0000,0x35C0000,0x35C0000,0x35C0000,0x35C0000, -0x35C0000,0x33FC0000,0x33FC0000,0x33FC0000,0x74000001,0x35C0000,0x35C0000,0x35C0000,0x35C0000,0x35C0000,0x35C0000,0x33FC0000,0x33FC0000,0x33FC0000,0x74000001,0x33FC0000,0x33FC0000,0x33FC0000,0x74000001,0x74000001,0xFC0000,0xEC0000,0xEC0000,0x5100000,0x1280000,0x1400000,0x1400000,0x18C0000,0x5100000,0x1280000,0x1F40000,0x33FC0000, -0x1F40000,0x1000000,0x1000000,0x1000000,0x1000000,0x17C0000,0x17C0000,0x17C0000,0x43F80000,0x43F80000,0x7E000001,0x17C0000,0x17C0000,0x17C0000,0x43F80000,0x43F80000,0x7E000001,0x43F80000,0x43F80000,0x7E000001,0x7E000001,0x17C0000,0x17C0000,0x17C0000,0x43F80000,0x43F80000,0x7E000001,0x43F80000,0x43F80000,0x7E000001,0x7E000001,0x43F80000, -0x43F80000,0x7E000001,0x7E000001,0x7E000001,0x3280000,0x1100000,0x1000000,0x15C0000,0x3AC0000,0x11FC0000,0x29FC0000,0x53F80000,0x1400000,0x17C0000,0x11FC0000,0x7E000001,0x11FC0000,0x1180000,0x1A00000,0x55F80000,0x8A000001,0x1A00000,0x55F80000,0x8A000001,0x55F80000,0x8A000001,0x8A000001,0x1A00000,0x55F80000,0x8A000001,0x55F80000,0x8A000001, -0x8A000001,0x55F80000,0x8A000001,0x8A000001,0x8A000001,0x1A00000,0x55F80000,0x8A000001,0x55F80000,0x8A000001,0x8A000001,0x55F80000,0x8A000001,0x8A000001,0x8A000001,0x55F80000,0x8A000001,0x8A000001,0x8A000001,0x8A000001,0x1600000,0xD280000,0xD280000,0x3D40000,0x3FF80000,0x6FF80000,0x8A000001,0x8A000001,0x17C0000,0xBFC0000,0x85DC0000,0x8A000001, -0x27FC0000,0xF40278,0xB8EC00F4,0x96EC00F4,0x8AEC00F5,0xB2E00090,0x9AE0004D,0x8EE40069,0x90E00090,0x8AE0004D,0x84E00092,0xAED400F3,0x9CD40032,0x8EDC0053,0x92D40049,0x8AD40002,0x86D4004E,0x8AD400F4,0x88D00051,0x84D00067,0x80D400F3,0x16C0274,0xA0C000F3,0x8AD400F4,0x98B80092,0x8CC4004A,0x84CC0092,0x96A800F3,0x8AB40033,0x84B4004F,0x80BC00F4,0x3BFC0274, -0x8A9000F4,0x84880092,0x807400F3,0x7A000274,0xFED8000A,0xFEEC013A,0xF0F00198,0xBCD40000,0xA2D40001,0x92D40002,0x8CD80006,0x8AD40006,0xFCC00004,0xB4CC0002,0x8CD00035,0x84B4004F,0x7FC0274,0x10000F4,0xACF80034,0x94F40034,0x8AF40035,0xA6EC0048,0x94EC0001,0x8CEC0005,0x8CEC004A,0x8AE8000E,0x84EC004A,0x18000F3,0x9AD80032,0x8CE40033,0x92D40049,0x8AD40002, -0x84DC004A,0x45F800F3,0x8AB40033,0x84AC004A,0x800000F3,0x18000F3,0x9AD80032,0x8CE40033,0x92D40049,0x8AD40002,0x84DC004A,0x45F800F3,0x8AB40033,0x84AC004A,0x800000F3,0x45F800F3,0x8AB40033,0x84AC004A,0x800000F3,0x800000F3,0xF6DC0006,0xF4F80074,0xF6FC0068,0xBCD40000,0xA2D40001,0x92D40002,0x8CDC0001,0x8ACC0003,0xFCC00004,0xB4CC0001,0x8EC80032,0x84AC004A, -0x13FC00F3,0xEC00F4,0xEC00F4,0xEC00F4,0xEC00F4,0xA0E00048,0xA0E00048,0xA0E00048,0x86E00049,0x86E00049,0x7EE00049,0x9CD40032,0x9CD40032,0x9CD40032,0x8AD40001,0x8AD40001,0x80D8000E,0x82D40032,0x82D40032,0x7ED40005,0x7AD40032,0x15C00F3,0x15C00F3,0x15C00F3,0x8CC40049,0x8CC40049,0x7ED00049,0x8AB40032,0x8AB40032,0x7EC00002,0x7AC40032,0x33F800F3, -0x33F800F3,0x7EA00049,0x7A8C0032,0x740000F3,0xF6D80005,0xFAE40069,0xEC00F4,0xBCD40000,0x9ED40001,0x92D40001,0x8ED40004,0x86D40001,0xFCC00000,0xB4CC0001,0x8AD00032,0x7EC00002,0x1F000F3,0xF40034,0xF40034,0xF40034,0xF40034,0x92EC0000,0x92EC0000,0x92EC0000,0x84EC0000,0x84EC0000,0x7EEC0001,0x16C0032,0x16C0032,0x16C0032,0x86DC0001,0x86DC0001, -0x7EE40001,0x3BFC0032,0x3BFC0032,0x7EC80001,0x7A000032,0x16C0032,0x16C0032,0x16C0032,0x86DC0001,0x86DC0001,0x7EE40001,0x3BFC0032,0x3BFC0032,0x7EC80001,0x7A000032,0x3BFC0032,0x3BFC0032,0x7EC80001,0x7A000032,0x7A000032,0xEADC0000,0xFEEC0001,0xF40034,0xBCD40000,0x9CD80000,0x90D80000,0x8CDC0000,0x86D40001,0xFCC00000,0xB4CC0000,0x7FC0032,0x7EC80001, -0x7FC0032,0x10C0048,0xA5000000,0x91000001,0x8B000001,0x38C0048,0x94EC0001,0x8AF40001,0x4BFC0048,0x8AD00001,0x8400004A,0x38C0048,0x94EC0001,0x8AF40001,0x4BFC0048,0x8AD00001,0x8400004A,0x4BFC0048,0x8AD00001,0x8400004A,0x8400004A,0x38C0048,0x94EC0001,0x8AF40001,0x4BFC0048,0x8AD00001,0x8400004A,0x4BFC0048,0x8AD00001,0x8400004A,0x8400004A,0x4BFC0048, -0x8AD00001,0x8400004A,0x8400004A,0x8400004A,0xF2E00005,0x71C0048,0xFB040008,0xBCD40000,0xA0D40001,0x94D00000,0x8AE00001,0x8AC00001,0xF4C80002,0xB8C80000,0x8CE40001,0x8400004A,0x1DF80048,0xE00048,0xE00048,0xE00048,0xE00048,0xE00048,0xE00048,0xE00048,0xE00048,0xE00048,0xE00048,0x8ED40000,0x8ED40000,0x8ED40000,0x8ED40000,0x8ED40000, -0x8ED40000,0x7AD40001,0x7AD40001,0x7AD40001,0x74D40001,0x14C0048,0x14C0048,0x14C0048,0x14C0048,0x14C0048,0x14C0048,0x7EC00001,0x7EC00001,0x7EC00001,0x74C80001,0x2BF80048,0x2BF80048,0x2BF80048,0x74A40001,0x6E00004A,0xF4D80005,0xE00048,0xE00048,0xBCD40000,0xA2D40000,0x96D40000,0x96D40000,0x86D40000,0xF8C00000,0xBCC80000,0x82D00000,0x7EC00001, -0x1DC0048,}; -static const uint32_t g_etc1_to_bc7_m6_table48[] = { -0xE40001,0xE40001,0xE40001,0xE40001,0xE40001,0xE40001,0xE40001,0xE40001,0xE40001,0xE40001,0xE40001,0xE40001,0xE40001,0xE40001,0xE40001,0xE40001,0xE40001,0xE40001,0xE40001,0xE40001,0x1540000,0x1540000,0x1540000,0x1540000,0x1540000,0x1540000,0x1540000,0x1540000,0x1540000,0x1540000,0x2FFC0000, -0x2FFC0000,0x2FFC0000,0x2FFC0000,0x72000000,0xE40001,0xE40001,0xE40001,0xE40001,0xE40001,0xE40001,0xE40001,0xE40001,0x2F40000,0x2F40000,0x2F40000,0x1540000,0x1E80000,0xFC0001,0xFC0001,0xFC0001,0xFC0001,0xFC0001,0xFC0001,0xFC0001,0xFC0001,0xFC0001,0xFC0001,0x1780000,0x1780000,0x1780000,0x1780000,0x1780000, -0x1780000,0x41FC0000,0x41FC0000,0x41FC0000,0x7E000000,0x1780000,0x1780000,0x1780000,0x1780000,0x1780000,0x1780000,0x41FC0000,0x41FC0000,0x41FC0000,0x7E000000,0x41FC0000,0x41FC0000,0x41FC0000,0x7E000000,0x7E000000,0xF0C0000,0xFC0001,0xFC0001,0x1280000,0x33C0000,0x1580000,0x1580000,0x1AC0000,0x1280000,0x33C0000,0xFFC0000,0x41FC0000, -0xFFC0000,0x1100001,0x1100001,0x1100001,0x1100001,0x1980000,0x1980000,0x1980000,0x51F80000,0x51F80000,0x88000000,0x1980000,0x1980000,0x1980000,0x51F80000,0x51F80000,0x88000000,0x51F80000,0x51F80000,0x88000000,0x88000000,0x1980000,0x1980000,0x1980000,0x51F80000,0x51F80000,0x88000000,0x51F80000,0x51F80000,0x88000000,0x88000000,0x51F80000, -0x51F80000,0x88000000,0x88000000,0x88000000,0x73C0000,0x1240000,0x1100001,0x1740000,0x1CC0000,0x21FC0000,0x39FC0000,0x5FF80000,0x1580000,0x1980000,0x21FC0000,0x88000000,0x21FC0000,0x1280001,0x1BC0000,0x61FC0000,0x94000000,0x1BC0000,0x61FC0000,0x94000000,0x61FC0000,0x94000000,0x94000000,0x1BC0000,0x61FC0000,0x94000000,0x61FC0000,0x94000000, -0x94000000,0x61FC0000,0x94000000,0x94000000,0x94000000,0x1BC0000,0x61FC0000,0x94000000,0x61FC0000,0x94000000,0x94000000,0x61FC0000,0x94000000,0x94000000,0x94000000,0x61FC0000,0x94000000,0x94000000,0x94000000,0x94000000,0x3740000,0x73C0000,0x73C0000,0x1F40000,0x4DFC0000,0x7BF40000,0x94000000,0x94000000,0x1940000,0x1DFC0000,0x8FD00000,0x94000000, -0x39FC0000,0x1080274,0xC2FC00F3,0x9EFC00F4,0x94FC00F3,0xB8F40092,0xA0F4004F,0x96F40067,0x98F40092,0x94F0004E,0x8EF00092,0xB6E800F4,0xA4E80033,0x96EC0051,0x9CE4004A,0x94E80002,0x8EE8004D,0x94E400F4,0x90E00053,0x8CE00069,0x88E400F5,0x1880274,0xAAD000F3,0x94E800F4,0xA0CC0092,0x94D80049,0x8EDC0090,0x9EBC00F3,0x94C40032,0x8EC4004D,0x88D000F4,0x49F80274, -0x949C00F3,0x8E980090,0x888C00F4,0x82000278,0xFEEC0012,0xF9000154,0xFB040194,0xC2E80002,0xAAE80002,0x9CE80002,0x94E80006,0x92E40006,0xFCD80009,0xC0DC0000,0x96E00035,0x8EC4004D,0x19FC0274,0x11400F3,0xB7080032,0x9D080032,0x95080032,0xAD000049,0x9EFC0002,0x95000005,0x96FC0049,0x92FC000E,0x8EFC0049,0x39800F3,0xA4E80032,0x94F80032,0x9CE40049,0x94E80001, -0x8EEC0049,0x51FC00F3,0x94C00032,0x8EBC0048,0x880000F4,0x39800F3,0xA4E80032,0x94F80032,0x9CE40049,0x94E80001,0x8EEC0049,0x51FC00F3,0x94C00032,0x8EBC0048,0x880000F4,0x51FC00F3,0x94C00032,0x8EBC0048,0x880000F4,0x880000F4,0xFAF00006,0xFD080073,0xFF0C006B,0xC2E80001,0xAAE80001,0x9CE80001,0x94F00001,0x94E00004,0xFCD80005,0xC0DC0000,0x96DC0033,0x8EBC0048, -0x23FC00F3,0xFC00F3,0xFC00F3,0xFC00F3,0xFC00F3,0xA6F4004A,0xA6F4004A,0xA6F4004A,0x90F0004A,0x90F0004A,0x88F0004A,0xA4E80033,0xA4E80033,0xA4E80033,0x92E80002,0x92E80002,0x8AE8000E,0x8CE40033,0x8CE40033,0x88E40005,0x82E40035,0x37400F3,0x37400F3,0x37400F3,0x94D80049,0x94D80049,0x88E0004A,0x92C80032,0x92C80032,0x88D00001,0x84D40034,0x3FFC00F3, -0x3FFC00F3,0x88B00048,0x82A40034,0x7E0000F4,0xFEE80006,0xF4F80073,0xFC00F3,0xC2E80001,0xA6E80002,0x9AE80002,0x98E80003,0x90E40001,0xFCD40001,0xC0DC0000,0x92E40033,0x88D00001,0xDFC00F3,0x1080032,0x1080032,0x1080032,0x1080032,0x9B000001,0x9B000001,0x9B000001,0x8D000001,0x8D000001,0x88FC0001,0x1880032,0x1880032,0x1880032,0x90EC0001,0x90EC0001, -0x88F40000,0x49F80032,0x49F80032,0x88D40000,0x82000034,0x1880032,0x1880032,0x1880032,0x90EC0001,0x90EC0001,0x88F40000,0x49F80032,0x49F80032,0x88D40000,0x82000034,0x49F80032,0x49F80032,0x88D40000,0x82000034,0x82000034,0xEEF00000,0xF9000002,0x1080032,0xC2E80000,0xA0F00001,0x98EC0000,0x92F00001,0x90E40000,0xF0DC0001,0xBAE00000,0x19FC0032,0x88D40000, -0x19FC0032,0x11C004A,0xAB140001,0x9B100001,0x95100001,0x1A80048,0x9EFC0001,0x95040001,0x59FC0048,0x94E00000,0x8E000048,0x1A80048,0x9EFC0001,0x95040001,0x59FC0048,0x94E00000,0x8E000048,0x59FC0048,0x94E00000,0x8E000048,0x8E000048,0x1A80048,0x9EFC0001,0x95040001,0x59FC0048,0x94E00000,0x8E000048,0x59FC0048,0x94E00000,0x8E000048,0x8E000048,0x59FC0048, -0x94E00000,0x8E000048,0x8E000048,0x8E000048,0xFAF00005,0x1300048,0xF518000D,0xC6E40000,0xAAE40001,0x9EE00000,0x94F00000,0x94CC0000,0xFCD80004,0xC0DC0000,0x96F40000,0x8E000048,0x2DFC0048,0xF0004A,0xF0004A,0xF0004A,0xF0004A,0xF0004A,0xF0004A,0xF0004A,0xF0004A,0xF0004A,0xF0004A,0x94E80001,0x94E80001,0x94E80001,0x94E80001,0x94E80001, -0x94E80001,0x84E40001,0x84E40001,0x84E40001,0x7EE40001,0x1680048,0x1680048,0x1680048,0x1680048,0x1680048,0x1680048,0x88D00001,0x88D00001,0x88D00001,0x7ED80001,0x39F80048,0x39F80048,0x39F80048,0x7EB40000,0x78000048,0xFCE80005,0xF0004A,0xF0004A,0xBEE80001,0xA8E80001,0x9CE80001,0x9CE80001,0x8EE80001,0xFCD40000,0xC0DC0000,0x88E40001,0x88D00001, -0x3FC0048,}; -static const uint32_t g_etc1_to_bc7_m6_table49[] = { -0xF40001,0xF40001,0xF40001,0xF40001,0xF40001,0xF40001,0xF40001,0xF40001,0xF40001,0xF40001,0xF40001,0xF40001,0xF40001,0xF40001,0xF40001,0xF40001,0xF40001,0xF40001,0xF40001,0xF40001,0x16C0000,0x16C0000,0x16C0000,0x16C0000,0x16C0000,0x16C0000,0x16C0000,0x16C0000,0x16C0000,0x16C0000,0x3BFC0000, -0x3BFC0000,0x3BFC0000,0x3BFC0000,0x7A000000,0xF40001,0xF40001,0xF40001,0xF40001,0xF40001,0xF40001,0xF40001,0xF40001,0xB040000,0xB040000,0xB040000,0x16C0000,0x7FC0000,0x10C0001,0x10C0001,0x10C0001,0x10C0001,0x10C0001,0x10C0001,0x10C0001,0x10C0001,0x10C0001,0x10C0001,0x1900000,0x1900000,0x1900000,0x1900000,0x1900000, -0x1900000,0x4DFC0000,0x4DFC0000,0x4DFC0000,0x86000000,0x1900000,0x1900000,0x1900000,0x1900000,0x1900000,0x1900000,0x4DFC0000,0x4DFC0000,0x4DFC0000,0x86000000,0x4DFC0000,0x4DFC0000,0x4DFC0000,0x86000000,0x86000000,0x1200000,0x10C0001,0x10C0001,0x5380000,0x5500000,0x1700000,0x1700000,0x1C40000,0x5380000,0x5500000,0x1FF80000,0x4DFC0000, -0x1FF80000,0x1200001,0x1200001,0x1200001,0x1200001,0x1B00000,0x1B00000,0x1B00000,0x5DF40000,0x5DF40000,0x90000000,0x1B00000,0x1B00000,0x1B00000,0x5DF40000,0x5DF40000,0x90000000,0x5DF40000,0x5DF40000,0x90000000,0x90000000,0x1B00000,0x1B00000,0x1B00000,0x5DF40000,0x5DF40000,0x90000000,0x5DF40000,0x5DF40000,0x90000000,0x90000000,0x5DF40000, -0x5DF40000,0x90000000,0x90000000,0x90000000,0x1500000,0x3340000,0x1200001,0x3880000,0x1E80000,0x31FC0000,0x47F80000,0x69FC0000,0x16C0000,0x1B00000,0x31FC0000,0x90000000,0x31FC0000,0x1380001,0x3D00000,0x6DFC0000,0x9C000000,0x3D00000,0x6DFC0000,0x9C000000,0x6DFC0000,0x9C000000,0x9C000000,0x3D00000,0x6DFC0000,0x9C000000,0x6DFC0000,0x9C000000, -0x9C000000,0x6DFC0000,0x9C000000,0x9C000000,0x9C000000,0x3D00000,0x6DFC0000,0x9C000000,0x6DFC0000,0x9C000000,0x9C000000,0x6DFC0000,0x9C000000,0x9C000000,0x9C000000,0x6DFC0000,0x9C000000,0x9C000000,0x9C000000,0x9C000000,0x3880000,0xF4C0000,0xF4C0000,0xFFC0000,0x5BFC0000,0x85F40000,0x9C000000,0x9C000000,0x1AC0000,0x2FFC0000,0x97E00000,0x9C000000, -0x47FC0000,0x1180274,0xCB0C00F3,0xA70C00F4,0x9D0C00F3,0xC1040092,0xA904004F,0x9F040067,0xA1040092,0x9D00004E,0x97000092,0xBEF800F4,0xACF80033,0x9EFC0051,0xA4F4004A,0x9CF80002,0x96F8004D,0x9CF400F4,0x98F00053,0x94F00069,0x90F400F5,0x1A00274,0xB2E000F3,0x9CF800F4,0xA8DC0092,0x9CE80049,0x96EC0090,0xA6CC00F3,0x9CD40032,0x96D4004D,0x90E000F4,0x55F80274, -0x9CAC00F3,0x96A80090,0x909C00F4,0x8A000278,0xFCFC0024,0xFF0C0164,0xF31401AB,0xCAF80002,0xB2F80002,0xA4F80002,0x9CF80006,0x9AF40006,0xFCEC0016,0xC8EC0000,0x9EF00035,0x96D4004D,0x27FC0274,0x12400F3,0xBF180032,0xA5180032,0x9D180032,0xB5100049,0xA70C0002,0x9D100005,0x9F0C0049,0x9B0C000E,0x970C0049,0x3B000F3,0xACF80032,0x9D080032,0xA4F40049,0x9CF80001, -0x96FC0049,0x5DFC00F3,0x9CD00032,0x96CC0048,0x900000F4,0x3B000F3,0xACF80032,0x9D080032,0xA4F40049,0x9CF80001,0x96FC0049,0x5DFC00F3,0x9CD00032,0x96CC0048,0x900000F4,0x5DFC00F3,0x9CD00032,0x96CC0048,0x900000F4,0x900000F4,0xFF00000B,0xF5180081,0xF9200076,0xCAF80001,0xB2F80001,0xA4F80001,0x9D000001,0x9CF00004,0xFCEC000D,0xC8EC0000,0x9EEC0033,0x96CC0048, -0x33FC00F3,0x10C00F3,0x10C00F3,0x10C00F3,0x10C00F3,0xAF04004A,0xAF04004A,0xAF04004A,0x9900004A,0x9900004A,0x9100004A,0xACF80033,0xACF80033,0xACF80033,0x9AF80002,0x9AF80002,0x92F8000E,0x94F40033,0x94F40033,0x90F40005,0x8AF40035,0x38C00F3,0x38C00F3,0x38C00F3,0x9CE80049,0x9CE80049,0x90F0004A,0x9AD80032,0x9AD80032,0x90E00001,0x8CE40034,0x4BFC00F3, -0x4BFC00F3,0x90C00048,0x8AB40034,0x860000F4,0xFAFC000B,0xFD080073,0x10C00F3,0xCAF80001,0xAEF80002,0xA2F80002,0xA0F80003,0x98F40001,0xF8E80005,0xC8EC0000,0x9AF40033,0x90E00001,0x1DF800F3,0x1180032,0x1180032,0x1180032,0x1180032,0xA3100001,0xA3100001,0xA3100001,0x95100001,0x95100001,0x910C0001,0x1A00032,0x1A00032,0x1A00032,0x98FC0001,0x98FC0001, -0x91040000,0x55F80032,0x55F80032,0x90E40000,0x8A000034,0x1A00032,0x1A00032,0x1A00032,0x98FC0001,0x98FC0001,0x91040000,0x55F80032,0x55F80032,0x90E40000,0x8A000034,0x55F80032,0x55F80032,0x90E40000,0x8A000034,0x8A000034,0xF7000000,0xF1100005,0x1180032,0xCAF80000,0xA9000001,0xA0FC0000,0x9B000001,0x98F40000,0xF8EC0001,0xC2F00000,0x27FC0032,0x90E40000, -0x27FC0032,0x12C004A,0xB3240001,0xA3200001,0x9D200001,0x1C00048,0xA70C0001,0x9D140001,0x65F80048,0x9CF00000,0x96000048,0x1C00048,0xA70C0001,0x9D140001,0x65F80048,0x9CF00000,0x96000048,0x65F80048,0x9CF00000,0x96000048,0x96000048,0x1C00048,0xA70C0001,0x9D140001,0x65F80048,0x9CF00000,0x96000048,0x65F80048,0x9CF00000,0x96000048,0x96000048,0x65F80048, -0x9CF00000,0x96000048,0x96000048,0x96000048,0xFB040008,0x9400048,0xFD28000D,0xCEF40000,0xB2F40001,0xA6F00000,0x9D000000,0x9CDC0000,0xFEF00005,0xC8EC0000,0x9F040000,0x96000048,0x3DF80048,0x100004A,0x100004A,0x100004A,0x100004A,0x100004A,0x100004A,0x100004A,0x100004A,0x100004A,0x100004A,0x9CF80001,0x9CF80001,0x9CF80001,0x9CF80001,0x9CF80001, -0x9CF80001,0x8CF40001,0x8CF40001,0x8CF40001,0x86F40001,0x1800048,0x1800048,0x1800048,0x1800048,0x1800048,0x1800048,0x90E00001,0x90E00001,0x90E00001,0x86E80001,0x45F80048,0x45F80048,0x45F80048,0x86C40000,0x80000048,0xF4F8000A,0x100004A,0x100004A,0xC6F80001,0xB0F80001,0xA4F80001,0xA4F80001,0x96F80001,0xF8E80001,0xC8EC0000,0x90F40001,0x90E00001, -0x13FC0048,}; -static const uint32_t g_etc1_to_bc7_m6_table50[] = { -0x1040001,0x1040001,0x1040001,0x1040001,0x1040001,0x1040001,0x1040001,0x1040001,0x1040001,0x1040001,0x1040001,0x1040001,0x1040001,0x1040001,0x1040001,0x1040001,0x1040001,0x1040001,0x1040001,0x1040001,0x1840000,0x1840000,0x1840000,0x1840000,0x1840000,0x1840000,0x1840000,0x1840000,0x1840000,0x1840000,0x47FC0000, -0x47FC0000,0x47FC0000,0x47FC0000,0x82000000,0x1040001,0x1040001,0x1040001,0x1040001,0x1040001,0x1040001,0x1040001,0x1040001,0x1180000,0x1180000,0x1180000,0x1840000,0x17FC0000,0x11C0001,0x11C0001,0x11C0001,0x11C0001,0x11C0001,0x11C0001,0x11C0001,0x11C0001,0x11C0001,0x11C0001,0x1A80000,0x1A80000,0x1A80000,0x1A80000,0x1A80000, -0x1A80000,0x59FC0000,0x59FC0000,0x59FC0000,0x8E000000,0x1A80000,0x1A80000,0x1A80000,0x1A80000,0x1A80000,0x1A80000,0x59FC0000,0x59FC0000,0x59FC0000,0x8E000000,0x59FC0000,0x59FC0000,0x59FC0000,0x8E000000,0x8E000000,0x1300000,0x11C0001,0x11C0001,0x14C0000,0x5640000,0x1840000,0x1840000,0x1E00000,0x14C0000,0x5640000,0x2DFC0000,0x59FC0000, -0x2DFC0000,0x1300001,0x1300001,0x1300001,0x1300001,0x3C40000,0x3C40000,0x3C40000,0x67FC0000,0x67FC0000,0x98000000,0x3C40000,0x3C40000,0x3C40000,0x67FC0000,0x67FC0000,0x98000000,0x67FC0000,0x67FC0000,0x98000000,0x98000000,0x3C40000,0x3C40000,0x3C40000,0x67FC0000,0x67FC0000,0x98000000,0x67FC0000,0x67FC0000,0x98000000,0x98000000,0x67FC0000, -0x67FC0000,0x98000000,0x98000000,0x98000000,0x1640000,0xB440000,0x1300001,0x1A00000,0x5FC0000,0x3FFC0000,0x55F80000,0x75F80000,0x1800000,0x3C40000,0x3FFC0000,0x98000000,0x3FFC0000,0x1480001,0x3E80000,0x79FC0000,0xA4000000,0x3E80000,0x79FC0000,0xA4000000,0x79FC0000,0xA4000000,0xA4000000,0x3E80000,0x79FC0000,0xA4000000,0x79FC0000,0xA4000000, -0xA4000000,0x79FC0000,0xA4000000,0xA4000000,0xA4000000,0x3E80000,0x79FC0000,0xA4000000,0x79FC0000,0xA4000000,0xA4000000,0x79FC0000,0xA4000000,0xA4000000,0xA4000000,0x79FC0000,0xA4000000,0xA4000000,0xA4000000,0xA4000000,0x39C0000,0x1600000,0x1600000,0x23FC0000,0x69F80000,0x8FF40000,0xA4000000,0xA4000000,0x1C00000,0x41FC0000,0x9FF00000,0xA4000000, -0x57FC0000,0x1280274,0xD31C00F3,0xAF1C00F4,0xA51C00F3,0xC9140092,0xB114004F,0xA7140067,0xA9140092,0xA510004E,0x9F100092,0xC70800F4,0xB5080033,0xA70C0051,0xAD04004A,0xA5080002,0x9F08004D,0xA50400F4,0xA1000053,0x9D000069,0x990400F5,0x1B80274,0xBAF000F3,0xA50800F4,0xB0EC0092,0xA4F80049,0x9EFC0090,0xAEDC00F3,0xA4E40032,0x9EE4004D,0x98F000F4,0x61F80274, -0xA4BC00F3,0x9EB80090,0x98AC00F4,0x92000278,0xFF0C0032,0xF9200172,0xFB2401AB,0xD3080002,0xBB080002,0xAD080002,0xA5080006,0xA3040006,0xFCFC0024,0xD0FC0000,0xA7000035,0x9EE4004D,0x37FC0274,0x13400F3,0xC7280032,0xAD280032,0xA5280032,0xBD200049,0xAF1C0002,0xA5200005,0xA71C0049,0xA31C000E,0x9F1C0049,0x1C800F3,0xB5080032,0xA5180032,0xAD040049,0xA5080001, -0x9F0C0049,0x69FC00F3,0xA4E00032,0x9EDC0048,0x980000F4,0x1C800F3,0xB5080032,0xA5180032,0xAD040049,0xA5080001,0x9F0C0049,0x69FC00F3,0xA4E00032,0x9EDC0048,0x980000F4,0x69FC00F3,0xA4E00032,0x9EDC0048,0x980000F4,0x980000F4,0xFF14000E,0xFD280081,0xFF2C007A,0xD3080001,0xBB080001,0xAD080001,0xA5100001,0xA5000004,0xFF000013,0xD0FC0000,0xA6FC0033,0x9EDC0048, -0x41FC00F3,0x11C00F3,0x11C00F3,0x11C00F3,0x11C00F3,0xB714004A,0xB714004A,0xB714004A,0xA110004A,0xA110004A,0x9910004A,0xB5080033,0xB5080033,0xB5080033,0xA3080002,0xA3080002,0x9B08000E,0x9D040033,0x9D040033,0x99040005,0x93040035,0x3A400F3,0x3A400F3,0x3A400F3,0xA4F80049,0xA4F80049,0x9900004A,0xA2E80032,0xA2E80032,0x98F00001,0x94F40034,0x57FC00F3, -0x57FC00F3,0x98D00048,0x92C40034,0x8E0000F4,0xFF0C000E,0xF518007E,0x11C00F3,0xD3080001,0xB7080002,0xAB080002,0xA9080003,0xA1040001,0xFEF80006,0xD0FC0000,0xA3040033,0x98F00001,0x2BFC00F3,0x1280032,0x1280032,0x1280032,0x1280032,0xAB200001,0xAB200001,0xAB200001,0x9D200001,0x9D200001,0x991C0001,0x1B80032,0x1B80032,0x1B80032,0xA10C0001,0xA10C0001, -0x99140000,0x61F80032,0x61F80032,0x98F40000,0x92000034,0x1B80032,0x1B80032,0x1B80032,0xA10C0001,0xA10C0001,0x99140000,0x61F80032,0x61F80032,0x98F40000,0x92000034,0x61F80032,0x61F80032,0x98F40000,0x92000034,0x92000034,0xFF100000,0xF9200005,0x1280032,0xD3080000,0xB1100001,0xA90C0000,0xA3100001,0xA1040000,0xF5000002,0xCB000000,0x37FC0032,0x98F40000, -0x37FC0032,0x13C004A,0xBB340001,0xAB300001,0xA5300001,0x1D80048,0xAF1C0001,0xA5240001,0x71F80048,0xA5000000,0x9E000048,0x1D80048,0xAF1C0001,0xA5240001,0x71F80048,0xA5000000,0x9E000048,0x71F80048,0xA5000000,0x9E000048,0x9E000048,0x1D80048,0xAF1C0001,0xA5240001,0x71F80048,0xA5000000,0x9E000048,0x71F80048,0xA5000000,0x9E000048,0x9E000048,0x71F80048, -0xA5000000,0x9E000048,0x9E000048,0x9E000048,0xFF14000A,0x1540048,0xF5380012,0xD7040000,0xBB040001,0xAF000000,0xA5100000,0xA4EC0000,0xF7080008,0xD0FC0000,0xA7140000,0x9E000048,0x4BFC0048,0x110004A,0x110004A,0x110004A,0x110004A,0x110004A,0x110004A,0x110004A,0x110004A,0x110004A,0x110004A,0xA5080001,0xA5080001,0xA5080001,0xA5080001,0xA5080001, -0xA5080001,0x95040001,0x95040001,0x95040001,0x8F040001,0x1980048,0x1980048,0x1980048,0x1980048,0x1980048,0x1980048,0x98F00001,0x98F00001,0x98F00001,0x8EF80001,0x51F80048,0x51F80048,0x51F80048,0x8ED40000,0x88000048,0xFD08000A,0x110004A,0x110004A,0xCF080001,0xB9080001,0xAD080001,0xAD080001,0x9F080001,0xF8F80002,0xD0FC0000,0x99040001,0x98F00001, -0x21FC0048,}; -static const uint32_t g_etc1_to_bc7_m6_table51[] = { -0x1140001,0x1140001,0x1140001,0x1140001,0x1140001,0x1140001,0x1140001,0x1140001,0x1140001,0x1140001,0x1140001,0x1140001,0x1140001,0x1140001,0x1140001,0x1140001,0x1140001,0x1140001,0x1140001,0x1140001,0x19C0000,0x19C0000,0x19C0000,0x19C0000,0x19C0000,0x19C0000,0x19C0000,0x19C0000,0x19C0000,0x19C0000,0x53FC0000, -0x53FC0000,0x53FC0000,0x53FC0000,0x8A000000,0x1140001,0x1140001,0x1140001,0x1140001,0x1140001,0x1140001,0x1140001,0x1140001,0x1280000,0x1280000,0x1280000,0x19C0000,0x25FC0000,0x12C0001,0x12C0001,0x12C0001,0x12C0001,0x12C0001,0x12C0001,0x12C0001,0x12C0001,0x12C0001,0x12C0001,0x1C00000,0x1C00000,0x1C00000,0x1C00000,0x1C00000, -0x1C00000,0x65F80000,0x65F80000,0x65F80000,0x96000000,0x1C00000,0x1C00000,0x1C00000,0x1C00000,0x1C00000,0x1C00000,0x65F80000,0x65F80000,0x65F80000,0x96000000,0x65F80000,0x65F80000,0x65F80000,0x96000000,0x96000000,0x9400000,0x12C0001,0x12C0001,0x1600000,0x5780000,0x3980000,0x3980000,0x1FC0000,0x1600000,0x5780000,0x3DF80000,0x65F80000, -0x3DF80000,0x1400001,0x1400001,0x1400001,0x1400001,0x3DC0000,0x3DC0000,0x3DC0000,0x73FC0000,0x73FC0000,0xA0000000,0x3DC0000,0x3DC0000,0x3DC0000,0x73FC0000,0x73FC0000,0xA0000000,0x73FC0000,0x73FC0000,0xA0000000,0xA0000000,0x3DC0000,0x3DC0000,0x3DC0000,0x73FC0000,0x73FC0000,0xA0000000,0x73FC0000,0x73FC0000,0xA0000000,0xA0000000,0x73FC0000, -0x73FC0000,0xA0000000,0xA0000000,0xA0000000,0x5740000,0x1580000,0x1400001,0x3B40000,0x19FC0000,0x4FFC0000,0x61FC0000,0x7FFC0000,0x1940000,0x3DC0000,0x4FFC0000,0xA0000000,0x4FFC0000,0x1580001,0x7FC0000,0x85FC0000,0xAC000000,0x7FC0000,0x85FC0000,0xAC000000,0x85FC0000,0xAC000000,0xAC000000,0x7FC0000,0x85FC0000,0xAC000000,0x85FC0000,0xAC000000, -0xAC000000,0x85FC0000,0xAC000000,0xAC000000,0xAC000000,0x7FC0000,0x85FC0000,0xAC000000,0x85FC0000,0xAC000000,0xAC000000,0x85FC0000,0xAC000000,0xAC000000,0xAC000000,0x85FC0000,0xAC000000,0xAC000000,0xAC000000,0xAC000000,0x3B00000,0x1700000,0x1700000,0x37FC0000,0x75FC0000,0x99F40000,0xAC000000,0xAC000000,0x3D40000,0x51FC0000,0xA9C40000,0xAC000000, -0x65FC0000,0x1380274,0xDB2C00F3,0xB72C00F4,0xAD2C00F3,0xD1240092,0xB924004F,0xAF240067,0xB1240092,0xAD20004E,0xA7200092,0xCF1800F4,0xBD180033,0xAF1C0051,0xB514004A,0xAD180002,0xA718004D,0xAD1400F4,0xA9100053,0xA5100069,0xA11400F5,0x1D00274,0xC30000F3,0xAD1800F4,0xB8FC0092,0xAD080049,0xA70C0090,0xB6EC00F3,0xACF40032,0xA6F4004D,0xA10000F4,0x6DF80274, -0xACCC00F3,0xA6C80090,0xA0BC00F4,0x9A000278,0xFF20003E,0xFF2C018A,0xF33401C4,0xDB180002,0xC3180002,0xB5180002,0xAD180006,0xAB140006,0xFF10002E,0xD90C0000,0xAF100035,0xA6F4004D,0x45FC0274,0x14400F3,0xCF380032,0xB5380032,0xAD380032,0xC5300049,0xB72C0002,0xAD300005,0xAF2C0049,0xAB2C000E,0xA72C0049,0x1E000F3,0xBD180032,0xAD280032,0xB5140049,0xAD180001, -0xA71C0049,0x75FC00F3,0xACF00032,0xA6EC0048,0xA00000F4,0x1E000F3,0xBD180032,0xAD280032,0xB5140049,0xAD180001,0xA71C0049,0x75FC00F3,0xACF00032,0xA6EC0048,0xA00000F4,0x75FC00F3,0xACF00032,0xA6EC0048,0xA00000F4,0xA00000F4,0xF928001A,0xF73C008B,0xF9400083,0xDB180001,0xC3180001,0xB5180001,0xAD200001,0xAD100004,0xFD140019,0xD90C0000,0xAF0C0033,0xA6EC0048, -0x51FC00F3,0x12C00F3,0x12C00F3,0x12C00F3,0x12C00F3,0xBF24004A,0xBF24004A,0xBF24004A,0xA920004A,0xA920004A,0xA120004A,0xBD180033,0xBD180033,0xBD180033,0xAB180002,0xAB180002,0xA318000E,0xA5140033,0xA5140033,0xA1140005,0x9B140035,0x3BC00F3,0x3BC00F3,0x3BC00F3,0xAD080049,0xAD080049,0xA110004A,0xAAF80032,0xAAF80032,0xA1000001,0x9D040034,0x63FC00F3, -0x63FC00F3,0xA0E00048,0x9AD40034,0x960000F4,0xFD1C0016,0xFD28007E,0x12C00F3,0xDB180001,0xBF180002,0xB3180002,0xB1180003,0xA9140001,0xFD0C000D,0xD90C0000,0xAB140033,0xA1000001,0x3BFC00F3,0x1380032,0x1380032,0x1380032,0x1380032,0xB3300001,0xB3300001,0xB3300001,0xA5300001,0xA5300001,0xA12C0001,0x1D00032,0x1D00032,0x1D00032,0xA91C0001,0xA91C0001, -0xA1240000,0x6DF80032,0x6DF80032,0xA1040000,0x9A000034,0x1D00032,0x1D00032,0x1D00032,0xA91C0001,0xA91C0001,0xA1240000,0x6DF80032,0x6DF80032,0xA1040000,0x9A000034,0x6DF80032,0x6DF80032,0xA1040000,0x9A000034,0x9A000034,0xFF200001,0xF130000A,0x1380032,0xDB180000,0xB9200001,0xB11C0000,0xAB200001,0xA9140000,0xFD100002,0xD3100000,0x45FC0032,0xA1040000, -0x45FC0032,0x14C004A,0xC3440001,0xB3400001,0xAD400001,0x1F00048,0xB72C0001,0xAD340001,0x7DF80048,0xAD100000,0xA6000048,0x1F00048,0xB72C0001,0xAD340001,0x7DF80048,0xAD100000,0xA6000048,0x7DF80048,0xAD100000,0xA6000048,0xA6000048,0x1F00048,0xB72C0001,0xAD340001,0x7DF80048,0xAD100000,0xA6000048,0x7DF80048,0xAD100000,0xA6000048,0xA6000048,0x7DF80048, -0xAD100000,0xA6000048,0xA6000048,0xA6000048,0xFB2C000D,0x1640048,0xFD480012,0xDF140000,0xC3140001,0xB7100000,0xAD200000,0xACFC0000,0xFF180008,0xD90C0000,0xAF240000,0xA6000048,0x5BFC0048,0x120004A,0x120004A,0x120004A,0x120004A,0x120004A,0x120004A,0x120004A,0x120004A,0x120004A,0x120004A,0xAD180001,0xAD180001,0xAD180001,0xAD180001,0xAD180001, -0xAD180001,0x9D140001,0x9D140001,0x9D140001,0x97140001,0x1B00048,0x1B00048,0x1B00048,0x1B00048,0x1B00048,0x1B00048,0xA1000001,0xA1000001,0xA1000001,0x97080001,0x5DF40048,0x5DF40048,0x5DF40048,0x96E40000,0x90000048,0xF71C000D,0x120004A,0x120004A,0xD7180001,0xC1180001,0xB5180001,0xB5180001,0xA7180001,0xFB080004,0xD90C0000,0xA1140001,0xA1000001, -0x31FC0048,}; -static const uint32_t g_etc1_to_bc7_m6_table52[] = { -0x1280000,0x1280000,0x1280000,0x1280000,0x1280000,0x1280000,0x1280000,0x1280000,0x1280000,0x1280000,0x1280000,0x1280000,0x1280000,0x1280000,0x1280000,0x1280000,0x1280000,0x1280000,0x1280000,0x1280000,0x1B80000,0x1B80000,0x1B80000,0x1B80000,0x1B80000,0x1B80000,0x1B80000,0x1B80000,0x1B80000,0x1B80000,0x61F80000, -0x61F80000,0x61F80000,0x61F80000,0x92000001,0x1280000,0x1280000,0x1280000,0x1280000,0x1280000,0x1280000,0x1280000,0x1280000,0x13C0000,0x13C0000,0x13C0000,0x1B80000,0x37FC0000,0x1400000,0x1400000,0x1400000,0x1400000,0x1400000,0x1400000,0x1400000,0x1400000,0x1400000,0x1400000,0x1DC0000,0x1DC0000,0x1DC0000,0x1DC0000,0x1DC0000, -0x1DC0000,0x73F80000,0x73F80000,0x73F80000,0x9E000001,0x1DC0000,0x1DC0000,0x1DC0000,0x1DC0000,0x1DC0000,0x1DC0000,0x73F80000,0x73F80000,0x73F80000,0x9E000001,0x73F80000,0x73F80000,0x73F80000,0x9E000001,0x9E000001,0x3540000,0x1400000,0x1400000,0x1740000,0x1900000,0x1B40000,0x1B40000,0x17FC0000,0x1740000,0x1900000,0x4DFC0000,0x73F80000, -0x4DFC0000,0x1540000,0x1540000,0x1540000,0x1540000,0x1F80000,0x1F80000,0x1F80000,0x81FC0000,0x81FC0000,0xA8000001,0x1F80000,0x1F80000,0x1F80000,0x81FC0000,0x81FC0000,0xA8000001,0x81FC0000,0x81FC0000,0xA8000001,0xA8000001,0x1F80000,0x1F80000,0x1F80000,0x81FC0000,0x81FC0000,0xA8000001,0x81FC0000,0x81FC0000,0xA8000001,0xA8000001,0x81FC0000, -0x81FC0000,0xA8000001,0xA8000001,0xA8000001,0x18C0000,0xD680000,0x1540000,0x3CC0000,0x2FFC0000,0x5FFC0000,0x71FC0000,0x8BFC0000,0x3A80000,0x1F80000,0x5FFC0000,0xA8000001,0x5FFC0000,0x16C0000,0x23FC0000,0x93FC0000,0xB4000001,0x23FC0000,0x93FC0000,0xB4000001,0x93FC0000,0xB4000001,0xB4000001,0x23FC0000,0x93FC0000,0xB4000001,0x93FC0000,0xB4000001, -0xB4000001,0x93FC0000,0xB4000001,0xB4000001,0xB4000001,0x23FC0000,0x93FC0000,0xB4000001,0x93FC0000,0xB4000001,0xB4000001,0x93FC0000,0xB4000001,0xB4000001,0xB4000001,0x93FC0000,0xB4000001,0xB4000001,0xB4000001,0xB4000001,0x1C80000,0x1840000,0x1840000,0x4DFC0000,0x85FC0000,0xA5F00000,0xB4000001,0xB4000001,0x1F00000,0x65FC0000,0xB1F40000,0xB4000001, -0x77FC0000,0x1480278,0xE34000F4,0xC14000F4,0xB54000F5,0xDD340090,0xC534004D,0xB9380069,0xBB340090,0xB534004D,0xAF340092,0xD92800F3,0xC7280032,0xB9300053,0xBD280049,0xB5280002,0xB128004E,0xB52800F4,0xB3240051,0xAF240067,0xAB2800F3,0x3E80274,0xCB1400F3,0xB52800F4,0xC30C0092,0xB718004A,0xAF200092,0xC0FC00F3,0xB5080033,0xAF08004F,0xAB1000F4,0x79FC0274, -0xB4E400F4,0xAEDC0092,0xAAC800F3,0xA4000274,0xFF340059,0xFB440190,0xFD4801C4,0xE7280000,0xCD280001,0xBD280002,0xB72C0006,0xB5280006,0xFF24004F,0xDF200002,0xB7240035,0xAF08004F,0x57FC0274,0x15400F4,0xD74C0034,0xBF480034,0xB5480035,0xD1400048,0xBF400001,0xB7400005,0xB740004A,0xB53C000E,0xAF40004A,0x1FC00F3,0xC52C0032,0xB7380033,0xBD280049,0xB5280002, -0xAF30004A,0x83F800F3,0xB5080033,0xAF00004A,0xAA0000F3,0x1FC00F3,0xC52C0032,0xB7380033,0xBD280049,0xB5280002,0xAF30004A,0x83F800F3,0xB5080033,0xAF00004A,0xAA0000F3,0x83F800F3,0xB5080033,0xAF00004A,0xAA0000F3,0xAA0000F3,0xFF3C0024,0xFF4C008C,0xF1500095,0xE7280000,0xCD280001,0xBD280002,0xB7300001,0xB5200003,0xFB2C002A,0xDF200001,0xB91C0032,0xAF00004A, -0x61FC00F3,0x14000F4,0x14000F4,0x14000F4,0x14000F4,0xCB340048,0xCB340048,0xCB340048,0xB1340049,0xB1340049,0xA9340049,0xC7280032,0xC7280032,0xC7280032,0xB5280001,0xB5280001,0xAB2C000E,0xAD280032,0xAD280032,0xA9280005,0xA5280032,0x1D800F3,0x1D800F3,0x1D800F3,0xB7180049,0xB7180049,0xA9240049,0xB5080032,0xB5080032,0xA9140002,0xA5180032,0x71F800F3, -0x71F800F3,0xA8F40049,0xA4E00032,0x9E0000F3,0xF9300024,0xF73C008C,0x14000F4,0xE7280000,0xC9280001,0xBD280001,0xB9280004,0xB1280001,0xFF200012,0xDF200001,0xB5240032,0xA9140002,0x4BFC00F3,0x1480034,0x1480034,0x1480034,0x1480034,0xBD400000,0xBD400000,0xBD400000,0xAF400000,0xAF400000,0xA9400001,0x3E80032,0x3E80032,0x3E80032,0xB1300001,0xB1300001, -0xA9380001,0x79FC0032,0x79FC0032,0xA91C0001,0xA4000032,0x3E80032,0x3E80032,0x3E80032,0xB1300001,0xB1300001,0xA9380001,0x79FC0032,0x79FC0032,0xA91C0001,0xA4000032,0x79FC0032,0x79FC0032,0xA91C0001,0xA4000032,0xA4000032,0xFB340004,0xFB440008,0x1480034,0xE7280000,0xC72C0000,0xBB2C0000,0xB7300000,0xB1280001,0xF9280005,0xDF200000,0x57FC0032,0xA91C0001, -0x57FC0032,0x1600048,0xCF540000,0xBB540001,0xB5540001,0xFFC0048,0xBF400001,0xB5480001,0x8BF80048,0xB5240001,0xAE00004A,0xFFC0048,0xBF400001,0xB5480001,0x8BF80048,0xB5240001,0xAE00004A,0x8BF80048,0xB5240001,0xAE00004A,0xAE00004A,0xFFC0048,0xBF400001,0xB5480001,0x8BF80048,0xB5240001,0xAE00004A,0x8BF80048,0xB5240001,0xAE00004A,0xAE00004A,0x8BF80048, -0xB5240001,0xAE00004A,0xAE00004A,0xAE00004A,0xFD400012,0x1780048,0xF75C0019,0xE7280000,0xCB280001,0xBF240000,0xB5340001,0xB5140001,0xFF2C0011,0xE31C0000,0xB7380001,0xAE00004A,0x6BFC0048,0x1340048,0x1340048,0x1340048,0x1340048,0x1340048,0x1340048,0x1340048,0x1340048,0x1340048,0x1340048,0xB9280000,0xB9280000,0xB9280000,0xB9280000,0xB9280000, -0xB9280000,0xA5280001,0xA5280001,0xA5280001,0x9F280001,0x1C80048,0x1C80048,0x1C80048,0x1C80048,0x1C80048,0x1C80048,0xA9140001,0xA9140001,0xA9140001,0x9F1C0001,0x69FC0048,0x69FC0048,0x69FC0048,0x9EF80001,0x9800004A,0xFF2C000D,0x1340048,0x1340048,0xE7280000,0xCD280000,0xC1280000,0xC1280000,0xB1280000,0xFD1C0005,0xE71C0000,0xAD240000,0xA9140001, -0x41FC0048,}; -static const uint32_t g_etc1_to_bc7_m6_table53[] = { -0x1380000,0x1380000,0x1380000,0x1380000,0x1380000,0x1380000,0x1380000,0x1380000,0x1380000,0x1380000,0x1380000,0x1380000,0x1380000,0x1380000,0x1380000,0x1380000,0x1380000,0x1380000,0x1380000,0x1380000,0x1D00000,0x1D00000,0x1D00000,0x1D00000,0x1D00000,0x1D00000,0x1D00000,0x1D00000,0x1D00000,0x1D00000,0x6DF80000, -0x6DF80000,0x6DF80000,0x6DF80000,0x9A000001,0x1380000,0x1380000,0x1380000,0x1380000,0x1380000,0x1380000,0x1380000,0x1380000,0x14C0000,0x14C0000,0x14C0000,0x1D00000,0x45FC0000,0x1500000,0x1500000,0x1500000,0x1500000,0x1500000,0x1500000,0x1500000,0x1500000,0x1500000,0x1500000,0x1F40000,0x1F40000,0x1F40000,0x1F40000,0x1F40000, -0x1F40000,0x7FF80000,0x7FF80000,0x7FF80000,0xA6000001,0x1F40000,0x1F40000,0x1F40000,0x1F40000,0x1F40000,0x1F40000,0x7FF80000,0x7FF80000,0x7FF80000,0xA6000001,0x7FF80000,0x7FF80000,0x7FF80000,0xA6000001,0xA6000001,0xB640000,0x1500000,0x1500000,0x7840000,0x1A40000,0x1C80000,0x1C80000,0x2BFC0000,0x7840000,0x1A40000,0x5DF80000,0x7FF80000, -0x5DF80000,0x1640000,0x1640000,0x1640000,0x1640000,0x15FC0000,0x15FC0000,0x15FC0000,0x8DFC0000,0x8DFC0000,0xB0000001,0x15FC0000,0x15FC0000,0x15FC0000,0x8DFC0000,0x8DFC0000,0xB0000001,0x8DFC0000,0x8DFC0000,0xB0000001,0xB0000001,0x15FC0000,0x15FC0000,0x15FC0000,0x8DFC0000,0x8DFC0000,0xB0000001,0x8DFC0000,0x8DFC0000,0xB0000001,0xB0000001,0x8DFC0000, -0x8DFC0000,0xB0000001,0xB0000001,0xB0000001,0x59C0000,0x17C0000,0x1640000,0x1E40000,0x43FC0000,0x6FFC0000,0x7FF80000,0x97F80000,0x3BC0000,0x15FC0000,0x6FFC0000,0xB0000001,0x6FFC0000,0x17C0000,0x3BFC0000,0x9FF80000,0xBC000001,0x3BFC0000,0x9FF80000,0xBC000001,0x9FF80000,0xBC000001,0xBC000001,0x3BFC0000,0x9FF80000,0xBC000001,0x9FF80000,0xBC000001, -0xBC000001,0x9FF80000,0xBC000001,0xBC000001,0xBC000001,0x3BFC0000,0x9FF80000,0xBC000001,0x9FF80000,0xBC000001,0xBC000001,0x9FF80000,0xBC000001,0xBC000001,0xBC000001,0x9FF80000,0xBC000001,0xBC000001,0xBC000001,0xBC000001,0x1DC0000,0x3940000,0x3940000,0x61FC0000,0x93F80000,0xAFF00000,0xBC000001,0xBC000001,0xDFC0000,0x75FC0000,0xBBC80000,0xBC000001, -0x85FC0000,0x1580278,0xEB5000F4,0xC95000F4,0xBD5000F5,0xE5440090,0xCD44004D,0xC1480069,0xC3440090,0xBD44004D,0xB7440092,0xE13800F3,0xCF380032,0xC1400053,0xC5380049,0xBD380002,0xB938004E,0xBD3800F4,0xBB340051,0xB7340067,0xB33800F3,0x7FC0274,0xD32400F3,0xBD3800F4,0xCB1C0092,0xBF28004A,0xB7300092,0xC90C00F3,0xBD180033,0xB718004F,0xB32000F4,0x85FC0274, -0xBCF400F4,0xB6EC0092,0xB2D800F3,0xAC000274,0xFF44007E,0xF35401B2,0xF55801DD,0xEF380000,0xD5380001,0xC5380002,0xBF3C0006,0xBD380006,0xFF34006A,0xE7300002,0xBF340035,0xB718004F,0x65FC0274,0x16400F4,0xDF5C0034,0xC7580034,0xBD580035,0xD9500048,0xC7500001,0xBF500005,0xBF50004A,0xBD4C000E,0xB750004A,0x19FC00F3,0xCD3C0032,0xBF480033,0xC5380049,0xBD380002, -0xB740004A,0x8FF800F3,0xBD180033,0xB710004A,0xB20000F3,0x19FC00F3,0xCD3C0032,0xBF480033,0xC5380049,0xBD380002,0xB740004A,0x8FF800F3,0xBD180033,0xB710004A,0xB20000F3,0x8FF800F3,0xBD180033,0xB710004A,0xB20000F3,0xB20000F3,0xFD4C002D,0xF960009A,0xF9600095,0xEF380000,0xD5380001,0xC5380002,0xBF400001,0xBD300003,0xFD400033,0xE7300001,0xC12C0032,0xB710004A, -0x71FC00F3,0x15000F4,0x15000F4,0x15000F4,0x15000F4,0xD3440048,0xD3440048,0xD3440048,0xB9440049,0xB9440049,0xB1440049,0xCF380032,0xCF380032,0xCF380032,0xBD380001,0xBD380001,0xB33C000E,0xB5380032,0xB5380032,0xB1380005,0xAD380032,0x1F000F3,0x1F000F3,0x1F000F3,0xBF280049,0xBF280049,0xB1340049,0xBD180032,0xBD180032,0xB1240002,0xAD280032,0x7DF800F3, -0x7DF800F3,0xB1040049,0xACF00032,0xA60000F3,0xF940002D,0xFF4C008C,0x15000F4,0xEF380000,0xD1380001,0xC5380001,0xC1380004,0xB9380001,0xFF340019,0xE7300001,0xBD340032,0xB1240002,0x5BFC00F3,0x1580034,0x1580034,0x1580034,0x1580034,0xC5500000,0xC5500000,0xC5500000,0xB7500000,0xB7500000,0xB1500001,0x7FC0032,0x7FC0032,0x7FC0032,0xB9400001,0xB9400001, -0xB1480001,0x85FC0032,0x85FC0032,0xB12C0001,0xAC000032,0x7FC0032,0x7FC0032,0x7FC0032,0xB9400001,0xB9400001,0xB1480001,0x85FC0032,0x85FC0032,0xB12C0001,0xAC000032,0x85FC0032,0x85FC0032,0xB12C0001,0xAC000032,0xAC000032,0xF7480005,0xF354000D,0x1580034,0xEF380000,0xCF3C0000,0xC33C0000,0xBF400000,0xB9380001,0xF53C0008,0xE7300000,0x65FC0032,0xB12C0001, -0x65FC0032,0x1700048,0xD7640000,0xC3640001,0xBD640001,0x29FC0048,0xC7500001,0xBD580001,0x97F80048,0xBD340001,0xB600004A,0x29FC0048,0xC7500001,0xBD580001,0x97F80048,0xBD340001,0xB600004A,0x97F80048,0xBD340001,0xB600004A,0xB600004A,0x29FC0048,0xC7500001,0xBD580001,0x97F80048,0xBD340001,0xB600004A,0x97F80048,0xBD340001,0xB600004A,0xB600004A,0x97F80048, -0xBD340001,0xB600004A,0xB600004A,0xB600004A,0xFF500014,0x1880048,0xFF6C0019,0xEF380000,0xD3380001,0xC7340000,0xBD440001,0xBD240001,0xF9480012,0xEB2C0000,0xBF480001,0xB600004A,0x7BFC0048,0x1440048,0x1440048,0x1440048,0x1440048,0x1440048,0x1440048,0x1440048,0x1440048,0x1440048,0x1440048,0xC1380000,0xC1380000,0xC1380000,0xC1380000,0xC1380000, -0xC1380000,0xAD380001,0xAD380001,0xAD380001,0xA7380001,0x1E00048,0x1E00048,0x1E00048,0x1E00048,0x1E00048,0x1E00048,0xB1240001,0xB1240001,0xB1240001,0xA72C0001,0x75FC0048,0x75FC0048,0x75FC0048,0xA7080001,0xA000004A,0xF73C0014,0x1440048,0x1440048,0xEF380000,0xD5380000,0xC9380000,0xC9380000,0xB9380000,0xF9300008,0xEF2C0000,0xB5340000,0xB1240001, -0x51FC0048,}; -static const uint32_t g_etc1_to_bc7_m6_table54[] = { -0x1480000,0x1480000,0x1480000,0x1480000,0x1480000,0x1480000,0x1480000,0x1480000,0x1480000,0x1480000,0x1480000,0x1480000,0x1480000,0x1480000,0x1480000,0x1480000,0x1480000,0x1480000,0x1480000,0x1480000,0x1E80000,0x1E80000,0x1E80000,0x1E80000,0x1E80000,0x1E80000,0x1E80000,0x1E80000,0x1E80000,0x1E80000,0x79F80000, -0x79F80000,0x79F80000,0x79F80000,0xA2000001,0x1480000,0x1480000,0x1480000,0x1480000,0x1480000,0x1480000,0x1480000,0x1480000,0x75C0000,0x75C0000,0x75C0000,0x1E80000,0x55FC0000,0x1600000,0x1600000,0x1600000,0x1600000,0x1600000,0x1600000,0x1600000,0x1600000,0x1600000,0x1600000,0xFFC0000,0xFFC0000,0xFFC0000,0xFFC0000,0xFFC0000, -0xFFC0000,0x8BF80000,0x8BF80000,0x8BF80000,0xAE000001,0xFFC0000,0xFFC0000,0xFFC0000,0xFFC0000,0xFFC0000,0xFFC0000,0x8BF80000,0x8BF80000,0x8BF80000,0xAE000001,0x8BF80000,0x8BF80000,0x8BF80000,0xAE000001,0xAE000001,0x1780000,0x1600000,0x1600000,0x3980000,0x1B80000,0x3DC0000,0x3DC0000,0x3DFC0000,0x3980000,0x1B80000,0x6BFC0000,0x8BF80000, -0x6BFC0000,0x1740000,0x1740000,0x1740000,0x1740000,0x2FFC0000,0x2FFC0000,0x2FFC0000,0x99FC0000,0x99FC0000,0xB8000001,0x2FFC0000,0x2FFC0000,0x2FFC0000,0x99FC0000,0x99FC0000,0xB8000001,0x99FC0000,0x99FC0000,0xB8000001,0xB8000001,0x2FFC0000,0x2FFC0000,0x2FFC0000,0x99FC0000,0x99FC0000,0xB8000001,0x99FC0000,0x99FC0000,0xB8000001,0xB8000001,0x99FC0000, -0x99FC0000,0xB8000001,0xB8000001,0xB8000001,0x1B00000,0x18C0000,0x1740000,0x3F80000,0x57FC0000,0x7FF80000,0x8BFC0000,0xA1FC0000,0x5D00000,0x2FFC0000,0x7FF80000,0xB8000001,0x7FF80000,0x18C0000,0x53FC0000,0xABF80000,0xC4000001,0x53FC0000,0xABF80000,0xC4000001,0xABF80000,0xC4000001,0xC4000001,0x53FC0000,0xABF80000,0xC4000001,0xABF80000,0xC4000001, -0xC4000001,0xABF80000,0xC4000001,0xC4000001,0xC4000001,0x53FC0000,0xABF80000,0xC4000001,0xABF80000,0xC4000001,0xC4000001,0xABF80000,0xC4000001,0xC4000001,0xC4000001,0xABF80000,0xC4000001,0xC4000001,0xC4000001,0xC4000001,0x1F00000,0xBA40000,0xBA40000,0x73FC0000,0x9FFC0000,0xB9F00000,0xC4000001,0xC4000001,0x2BFC0000,0x87FC0000,0xC3D80000,0xC4000001, -0x95FC0000,0x1680278,0xF36000F4,0xD16000F4,0xC56000F5,0xED540090,0xD554004D,0xC9580069,0xCB540090,0xC554004D,0xBF540092,0xE94800F3,0xD7480032,0xC9500053,0xCD480049,0xC5480002,0xC148004E,0xC54800F4,0xC3440051,0xBF440067,0xBB4800F3,0x1FFC0274,0xDB3400F3,0xC54800F4,0xD32C0092,0xC738004A,0xBF400092,0xD11C00F3,0xC5280033,0xBF28004F,0xBB3000F4,0x91FC0274, -0xC50400F4,0xBEFC0092,0xBAE800F3,0xB4000274,0xFF580096,0xFB6401B2,0xFD6801DD,0xF7480000,0xDD480001,0xCD480002,0xC74C0006,0xC5480006,0xFD4C008A,0xEF400002,0xC7440035,0xBF28004F,0x75FC0274,0x17400F4,0xE76C0034,0xCF680034,0xC5680035,0xE1600048,0xCF600001,0xC7600005,0xC760004A,0xC55C000E,0xBF60004A,0x31FC00F3,0xD54C0032,0xC7580033,0xCD480049,0xC5480002, -0xBF50004A,0x9BF800F3,0xC5280033,0xBF20004A,0xBA0000F3,0x31FC00F3,0xD54C0032,0xC7580033,0xCD480049,0xC5480002,0xBF50004A,0x9BF800F3,0xC5280033,0xBF20004A,0xBA0000F3,0x9BF800F3,0xC5280033,0xBF20004A,0xBA0000F3,0xBA0000F3,0xFD60003E,0xFF6C009E,0xF37400A4,0xF7480000,0xDD480001,0xCD480002,0xC7500001,0xC5400003,0xFB54003D,0xEF400001,0xC93C0032,0xBF20004A, -0x7FFC00F3,0x16000F4,0x16000F4,0x16000F4,0x16000F4,0xDB540048,0xDB540048,0xDB540048,0xC1540049,0xC1540049,0xB9540049,0xD7480032,0xD7480032,0xD7480032,0xC5480001,0xC5480001,0xBB4C000E,0xBD480032,0xBD480032,0xB9480005,0xB5480032,0xDFC00F3,0xDFC00F3,0xDFC00F3,0xC7380049,0xC7380049,0xB9440049,0xC5280032,0xC5280032,0xB9340002,0xB5380032,0x89F800F3, -0x89F800F3,0xB9140049,0xB5000032,0xAE0000F3,0xFD540035,0xF75C0099,0x16000F4,0xF7480000,0xD9480001,0xCD480001,0xC9480004,0xC1480001,0xFB480029,0xEF400001,0xC5440032,0xB9340002,0x69FC00F3,0x1680034,0x1680034,0x1680034,0x1680034,0xCD600000,0xCD600000,0xCD600000,0xBF600000,0xBF600000,0xB9600001,0x1FFC0032,0x1FFC0032,0x1FFC0032,0xC1500001,0xC1500001, -0xB9580001,0x91FC0032,0x91FC0032,0xB93C0001,0xB4000032,0x1FFC0032,0x1FFC0032,0x1FFC0032,0xC1500001,0xC1500001,0xB9580001,0x91FC0032,0x91FC0032,0xB93C0001,0xB4000032,0x91FC0032,0x91FC0032,0xB93C0001,0xB4000032,0xB4000032,0xFF580005,0xFB64000D,0x1680034,0xF7480000,0xD74C0000,0xCB4C0000,0xC7500000,0xC1480001,0xFD4C0008,0xEF400000,0x75FC0032,0xB93C0001, -0x75FC0032,0x1800048,0xDF740000,0xCB740001,0xC5740001,0x41FC0048,0xCF600001,0xC5680001,0xA1FC0048,0xC5440001,0xBE00004A,0x41FC0048,0xCF600001,0xC5680001,0xA1FC0048,0xC5440001,0xBE00004A,0xA1FC0048,0xC5440001,0xBE00004A,0xBE00004A,0x41FC0048,0xCF600001,0xC5680001,0xA1FC0048,0xC5440001,0xBE00004A,0xA1FC0048,0xC5440001,0xBE00004A,0xBE00004A,0xA1FC0048, -0xC5440001,0xBE00004A,0xBE00004A,0xBE00004A,0xF7680019,0x5980048,0xF77C0020,0xF7480000,0xDB480001,0xCF440000,0xC5540001,0xC5340001,0xFD580014,0xF33C0000,0xC7580001,0xBE00004A,0x89FC0048,0x1540048,0x1540048,0x1540048,0x1540048,0x1540048,0x1540048,0x1540048,0x1540048,0x1540048,0x1540048,0xC9480000,0xC9480000,0xC9480000,0xC9480000,0xC9480000, -0xC9480000,0xB5480001,0xB5480001,0xB5480001,0xAF480001,0x1F80048,0x1F80048,0x1F80048,0x1F80048,0x1F80048,0x1F80048,0xB9340001,0xB9340001,0xB9340001,0xAF3C0001,0x81FC0048,0x81FC0048,0x81FC0048,0xAF180001,0xA800004A,0xFF4C0014,0x1540048,0x1540048,0xF7480000,0xDD480000,0xD1480000,0xD1480000,0xC1480000,0xF544000D,0xF73C0000,0xBD440000,0xB9340001, -0x5FFC0048,}; -static const uint32_t g_etc1_to_bc7_m6_table55[] = { -0x1580000,0x1580000,0x1580000,0x1580000,0x1580000,0x1580000,0x1580000,0x1580000,0x1580000,0x1580000,0x1580000,0x1580000,0x1580000,0x1580000,0x1580000,0x1580000,0x1580000,0x1580000,0x1580000,0x1580000,0x3FC0000,0x3FC0000,0x3FC0000,0x3FC0000,0x3FC0000,0x3FC0000,0x3FC0000,0x3FC0000,0x3FC0000,0x3FC0000,0x85F80000, -0x85F80000,0x85F80000,0x85F80000,0xAA000001,0x1580000,0x1580000,0x1580000,0x1580000,0x1580000,0x1580000,0x1580000,0x1580000,0xF6C0000,0xF6C0000,0xF6C0000,0x3FC0000,0x63FC0000,0x1700000,0x1700000,0x1700000,0x1700000,0x1700000,0x1700000,0x1700000,0x1700000,0x1700000,0x1700000,0x29FC0000,0x29FC0000,0x29FC0000,0x29FC0000,0x29FC0000, -0x29FC0000,0x97F80000,0x97F80000,0x97F80000,0xB6000001,0x29FC0000,0x29FC0000,0x29FC0000,0x29FC0000,0x29FC0000,0x29FC0000,0x97F80000,0x97F80000,0x97F80000,0xB6000001,0x97F80000,0x97F80000,0x97F80000,0xB6000001,0xB6000001,0x1880000,0x1700000,0x1700000,0x1AC0000,0x3CC0000,0x1F40000,0x1F40000,0x51FC0000,0x1AC0000,0x3CC0000,0x7BFC0000,0x97F80000, -0x7BFC0000,0x1840000,0x1840000,0x1840000,0x1840000,0x47FC0000,0x47FC0000,0x47FC0000,0xA5F80000,0xA5F80000,0xC0000001,0x47FC0000,0x47FC0000,0x47FC0000,0xA5F80000,0xA5F80000,0xC0000001,0xA5F80000,0xA5F80000,0xC0000001,0xC0000001,0x47FC0000,0x47FC0000,0x47FC0000,0xA5F80000,0xA5F80000,0xC0000001,0xA5F80000,0xA5F80000,0xC0000001,0xC0000001,0xA5F80000, -0xA5F80000,0xC0000001,0xC0000001,0xC0000001,0x1C40000,0x79C0000,0x1840000,0x1BFC0000,0x6BFC0000,0x8DFC0000,0x99FC0000,0xADF80000,0x5E40000,0x47FC0000,0x8DFC0000,0xC0000001,0x8DFC0000,0x19C0000,0x6BFC0000,0xB7F80000,0xCC000001,0x6BFC0000,0xB7F80000,0xCC000001,0xB7F80000,0xCC000001,0xCC000001,0x6BFC0000,0xB7F80000,0xCC000001,0xB7F80000,0xCC000001, -0xCC000001,0xB7F80000,0xCC000001,0xCC000001,0xCC000001,0x6BFC0000,0xB7F80000,0xCC000001,0xB7F80000,0xCC000001,0xCC000001,0xB7F80000,0xCC000001,0xCC000001,0xCC000001,0xB7F80000,0xCC000001,0xCC000001,0xCC000001,0xCC000001,0x11FC0000,0x1B80000,0x1B80000,0x87FC0000,0xADFC0000,0xC3F00000,0xCC000001,0xCC000001,0x49FC0000,0x97FC0000,0xCBE80000,0xCC000001, -0xA3FC0000,0x1780278,0xFB7000F4,0xD97000F4,0xCD7000F5,0xF5640090,0xDD64004D,0xD1680069,0xD3640090,0xCD64004D,0xC7640092,0xF15800F3,0xDF580032,0xD1600053,0xD5580049,0xCD580002,0xC958004E,0xCD5800F4,0xCB540051,0xC7540067,0xC35800F3,0x37FC0274,0xE34400F3,0xCD5800F4,0xDB3C0092,0xCF48004A,0xC7500092,0xD92C00F3,0xCD380033,0xC738004F,0xC34000F4,0x9DFC0274, -0xCD1400F4,0xC70C0092,0xC2F800F3,0xBC000274,0xFF6C00C2,0xF37401D8,0xF57801F8,0xFF580000,0xE5580001,0xD5580002,0xCF5C0006,0xCD580006,0xFF5C00A6,0xF7500002,0xCF540035,0xC738004F,0x83FC0274,0x18400F4,0xEF7C0034,0xD7780034,0xCD780035,0xE9700048,0xD7700001,0xCF700005,0xCF70004A,0xCD6C000E,0xC770004A,0x49FC00F3,0xDD5C0032,0xCF680033,0xD5580049,0xCD580002, -0xC760004A,0xA7F800F3,0xCD380033,0xC730004A,0xC20000F3,0x49FC00F3,0xDD5C0032,0xCF680033,0xD5580049,0xCD580002,0xC760004A,0xA7F800F3,0xCD380033,0xC730004A,0xC20000F3,0xA7F800F3,0xCD380033,0xC730004A,0xC20000F3,0xC20000F3,0xFD740049,0xF98000A8,0xFB8400A4,0xFF580000,0xE5580001,0xD5580002,0xCF600001,0xCD500003,0xFB680055,0xF7500001,0xD14C0032,0xC730004A, -0x8FFC00F3,0x17000F4,0x17000F4,0x17000F4,0x17000F4,0xE3640048,0xE3640048,0xE3640048,0xC9640049,0xC9640049,0xC1640049,0xDF580032,0xDF580032,0xDF580032,0xCD580001,0xCD580001,0xC35C000E,0xC5580032,0xC5580032,0xC1580005,0xBD580032,0x25FC00F3,0x25FC00F3,0x25FC00F3,0xCF480049,0xCF480049,0xC1540049,0xCD380032,0xCD380032,0xC1440002,0xBD480032,0x95F800F3, -0x95F800F3,0xC1240049,0xBD100032,0xB60000F3,0xFD64003E,0xFF6C0099,0x17000F4,0xFF580000,0xE1580001,0xD5580001,0xD1580004,0xC9580001,0xFF580032,0xF7500001,0xCD540032,0xC1440002,0x79FC00F3,0x1780034,0x1780034,0x1780034,0x1780034,0xD5700000,0xD5700000,0xD5700000,0xC7700000,0xC7700000,0xC1700001,0x37FC0032,0x37FC0032,0x37FC0032,0xC9600001,0xC9600001, -0xC1680001,0x9DFC0032,0x9DFC0032,0xC14C0001,0xBC000032,0x37FC0032,0x37FC0032,0x37FC0032,0xC9600001,0xC9600001,0xC1680001,0x9DFC0032,0x9DFC0032,0xC14C0001,0xBC000032,0x9DFC0032,0x9DFC0032,0xC14C0001,0xBC000032,0xBC000032,0xFB6C0008,0xF3740014,0x1780034,0xFF580000,0xDF5C0000,0xD35C0000,0xCF600000,0xC9580001,0xF564000D,0xF7500000,0x83FC0032,0xC14C0001, -0x83FC0032,0x1900048,0xE7840000,0xD3840001,0xCD840001,0x59FC0048,0xD7700001,0xCD780001,0xADFC0048,0xCD540001,0xC600004A,0x59FC0048,0xD7700001,0xCD780001,0xADFC0048,0xCD540001,0xC600004A,0xADFC0048,0xCD540001,0xC600004A,0xC600004A,0x59FC0048,0xD7700001,0xCD780001,0xADFC0048,0xCD540001,0xC600004A,0xADFC0048,0xCD540001,0xC600004A,0xC600004A,0xADFC0048, -0xCD540001,0xC600004A,0xC600004A,0xC600004A,0xFF780019,0xDA80048,0xFF8C0020,0xFF580000,0xE3580001,0xD7540000,0xCD640001,0xCD440001,0xFF700019,0xFB4C0000,0xCF680001,0xC600004A,0x99FC0048,0x1640048,0x1640048,0x1640048,0x1640048,0x1640048,0x1640048,0x1640048,0x1640048,0x1640048,0x1640048,0xD1580000,0xD1580000,0xD1580000,0xD1580000,0xD1580000, -0xD1580000,0xBD580001,0xBD580001,0xBD580001,0xB7580001,0x15FC0048,0x15FC0048,0x15FC0048,0x15FC0048,0x15FC0048,0x15FC0048,0xC1440001,0xC1440001,0xC1440001,0xB74C0001,0x8DFC0048,0x8DFC0048,0x8DFC0048,0xB7280001,0xB000004A,0xF9600019,0x1640048,0x1640048,0xFF580000,0xE5580000,0xD9580000,0xD9580000,0xC9580000,0xFD54000D,0xFF4C0000,0xC5540000,0xC1440001, -0x6FFC0048,}; -static const uint32_t g_etc1_to_bc7_m6_table56[] = { -0x1680001,0x1680001,0x1680001,0x1680001,0x1680001,0x1680001,0x1680001,0x1680001,0x1680001,0x1680001,0x1680001,0x1680001,0x1680001,0x1680001,0x1680001,0x1680001,0x1680001,0x1680001,0x1680001,0x1680001,0x1FFC0000,0x1FFC0000,0x1FFC0000,0x1FFC0000,0x1FFC0000,0x1FFC0000,0x1FFC0000,0x1FFC0000,0x1FFC0000,0x1FFC0000,0x91FC0000, -0x91FC0000,0x91FC0000,0x91FC0000,0xB4000000,0x1680001,0x1680001,0x1680001,0x1680001,0x1680001,0x1680001,0x1680001,0x1680001,0x9800000,0x9800000,0x9800000,0x1FFC0000,0x75FC0000,0x1800001,0x1800001,0x1800001,0x1800001,0x1800001,0x1800001,0x1800001,0x1800001,0x1800001,0x1800001,0x43FC0000,0x43FC0000,0x43FC0000,0x43FC0000,0x43FC0000, -0x43FC0000,0xA3FC0000,0xA3FC0000,0xA3FC0000,0xC0000000,0x43FC0000,0x43FC0000,0x43FC0000,0x43FC0000,0x43FC0000,0x43FC0000,0xA3FC0000,0xA3FC0000,0xA3FC0000,0xC0000000,0xA3FC0000,0xA3FC0000,0xA3FC0000,0xC0000000,0xC0000000,0x19C0000,0x1800001,0x1800001,0x1C00000,0x1E40000,0x17FC0000,0x17FC0000,0x67FC0000,0x1C00000,0x1E40000,0x8BFC0000,0xA3FC0000, -0x8BFC0000,0x1940001,0x1940001,0x1940001,0x1940001,0x63FC0000,0x63FC0000,0x63FC0000,0xB3F80000,0xB3F80000,0xCA000000,0x63FC0000,0x63FC0000,0x63FC0000,0xB3F80000,0xB3F80000,0xCA000000,0xB3F80000,0xB3F80000,0xCA000000,0xCA000000,0x63FC0000,0x63FC0000,0x63FC0000,0xB3F80000,0xB3F80000,0xCA000000,0xB3F80000,0xB3F80000,0xCA000000,0xCA000000,0xB3F80000, -0xB3F80000,0xCA000000,0xCA000000,0xCA000000,0x1D80000,0x1B00000,0x1940001,0x3DFC0000,0x81FC0000,0x9FF80000,0xA9F80000,0xB9F80000,0x1FC0000,0x63FC0000,0x9FF80000,0xCA000000,0x9FF80000,0x1AC0001,0x87FC0000,0xC5F80000,0xD6000000,0x87FC0000,0xC5F80000,0xD6000000,0xC5F80000,0xD6000000,0xD6000000,0x87FC0000,0xC5F80000,0xD6000000,0xC5F80000,0xD6000000, -0xD6000000,0xC5F80000,0xD6000000,0xD6000000,0xD6000000,0x87FC0000,0xC5F80000,0xD6000000,0xC5F80000,0xD6000000,0xD6000000,0xC5F80000,0xD6000000,0xD6000000,0xD6000000,0xC5F80000,0xD6000000,0xD6000000,0xD6000000,0xD6000000,0x3DFC0000,0xDC80000,0xDC80000,0x9DFC0000,0xBDF80000,0xCDF80000,0xD6000000,0xD6000000,0x6BFC0000,0xABFC0000,0xD5DC0000,0xD6000000, -0xB5FC0000,0x18C0274,0xFF8000F7,0xE18000F4,0xD78000F3,0xFB780092,0xE378004F,0xD9780067,0xDB780092,0xD774004E,0xD1740092,0xF96C00F4,0xE76C0033,0xD9700051,0xDF68004A,0xD76C0002,0xD16C004D,0xD76800F4,0xD3640053,0xCF640069,0xCB6800F5,0x53FC0274,0xED5400F3,0xD76C00F4,0xE3500092,0xD75C0049,0xD1600090,0xE14000F3,0xD7480032,0xD148004D,0xCB5400F4,0xABF80274, -0xD72000F3,0xD11C0090,0xCB1000F4,0xC4000278,0xFF8000EA,0xFD8801D4,0xFD8801FC,0xFF70000E,0xED6C0002,0xDF6C0002,0xD76C0006,0xD5680006,0xFD7400D7,0xFF600006,0xD9640035,0xD148004D,0x95FC0274,0x19800F3,0xF98C0032,0xDF8C0032,0xD78C0032,0xEF840049,0xE1800002,0xD7840005,0xD9800049,0xD580000E,0xD1800049,0x65FC00F3,0xE76C0032,0xD77C0032,0xDF680049,0xD76C0001, -0xD1700049,0xB3FC00F3,0xD7440032,0xD1400048,0xCA0000F4,0x65FC00F3,0xE76C0032,0xD77C0032,0xDF680049,0xD76C0001,0xD1700049,0xB3FC00F3,0xD7440032,0xD1400048,0xCA0000F4,0xB3FC00F3,0xD7440032,0xD1400048,0xCA0000F4,0xCA0000F4,0xFD880063,0xF39400B9,0xF39400B6,0xFF700005,0xED6C0001,0xDF6C0001,0xD7740001,0xD7640004,0xFF780062,0xFF640002,0xD9600033,0xD1400048, -0x9FFC00F3,0x18000F3,0x18000F3,0x18000F3,0x18000F3,0xE978004A,0xE978004A,0xE978004A,0xD374004A,0xD374004A,0xCB74004A,0xE76C0033,0xE76C0033,0xE76C0033,0xD56C0002,0xD56C0002,0xCD6C000E,0xCF680033,0xCF680033,0xCB680005,0xC5680035,0x41FC00F3,0x41FC00F3,0x41FC00F3,0xD75C0049,0xD75C0049,0xCB64004A,0xD54C0032,0xD54C0032,0xCB540001,0xC7580034,0xA1FC00F3, -0xA1FC00F3,0xCB340048,0xC5280034,0xC00000F4,0xFF740053,0xF77C00AB,0x18000F3,0xFD6C0006,0xE96C0002,0xDD6C0002,0xDB6C0003,0xD3680001,0xFF6C0049,0xFF600002,0xD5680033,0xCB540001,0x89FC00F3,0x18C0032,0x18C0032,0x18C0032,0x18C0032,0xDD840001,0xDD840001,0xDD840001,0xCF840001,0xCF840001,0xCB800001,0x53FC0032,0x53FC0032,0x53FC0032,0xD3700001,0xD3700001, -0xCB780000,0xABF80032,0xABF80032,0xCB580000,0xC4000034,0x53FC0032,0x53FC0032,0x53FC0032,0xD3700001,0xD3700001,0xCB780000,0xABF80032,0xABF80032,0xCB580000,0xC4000034,0xABF80032,0xABF80032,0xCB580000,0xC4000034,0xC4000034,0xF780000D,0xFD880012,0x18C0032,0xFB700001,0xE3740001,0xDB700000,0xD5740001,0xD3680000,0xFD74000D,0xFD640000,0x95FC0032,0xCB580000, -0x95FC0032,0x1A0004A,0xED980001,0xDD940001,0xD7940001,0x75FC0048,0xE1800001,0xD7880001,0xBBFC0048,0xD7640000,0xD0000048,0x75FC0048,0xE1800001,0xD7880001,0xBBFC0048,0xD7640000,0xD0000048,0xBBFC0048,0xD7640000,0xD0000048,0xD0000048,0x75FC0048,0xE1800001,0xD7880001,0xBBFC0048,0xD7640000,0xD0000048,0xBBFC0048,0xD7640000,0xD0000048,0xD0000048,0xBBFC0048, -0xD7640000,0xD0000048,0xD0000048,0xD0000048,0xFD900020,0x7BC0048,0xF9A00029,0xFF740002,0xED680001,0xE1640000,0xD7740000,0xD7500000,0xFB880020,0xFF640001,0xD9780000,0xD0000048,0xA9FC0048,0x174004A,0x174004A,0x174004A,0x174004A,0x174004A,0x174004A,0x174004A,0x174004A,0x174004A,0x174004A,0xD76C0001,0xD76C0001,0xD76C0001,0xD76C0001,0xD76C0001, -0xD76C0001,0xC7680001,0xC7680001,0xC7680001,0xC1680001,0x31FC0048,0x31FC0048,0x31FC0048,0x31FC0048,0x31FC0048,0x31FC0048,0xCB540001,0xCB540001,0xCB540001,0xC15C0001,0x9BF80048,0x9BF80048,0x9BF80048,0xC1380000,0xBA000048,0xF1700022,0x174004A,0x174004A,0xFB6C0002,0xEB6C0001,0xDF6C0001,0xDF6C0001,0xD16C0001,0xF9680012,0xFD600001,0xCB680001,0xCB540001, -0x7FFC0048,}; -static const uint32_t g_etc1_to_bc7_m6_table57[] = { -0x1780001,0x1780001,0x1780001,0x1780001,0x1780001,0x1780001,0x1780001,0x1780001,0x1780001,0x1780001,0x1780001,0x1780001,0x1780001,0x1780001,0x1780001,0x1780001,0x1780001,0x1780001,0x1780001,0x1780001,0x37FC0000,0x37FC0000,0x37FC0000,0x37FC0000,0x37FC0000,0x37FC0000,0x37FC0000,0x37FC0000,0x37FC0000,0x37FC0000,0x9DFC0000, -0x9DFC0000,0x9DFC0000,0x9DFC0000,0xBC000000,0x1780001,0x1780001,0x1780001,0x1780001,0x1780001,0x1780001,0x1780001,0x1780001,0x1940000,0x1940000,0x1940000,0x37FC0000,0x83FC0000,0x1900001,0x1900001,0x1900001,0x1900001,0x1900001,0x1900001,0x1900001,0x1900001,0x1900001,0x1900001,0x5BFC0000,0x5BFC0000,0x5BFC0000,0x5BFC0000,0x5BFC0000, -0x5BFC0000,0xAFFC0000,0xAFFC0000,0xAFFC0000,0xC8000000,0x5BFC0000,0x5BFC0000,0x5BFC0000,0x5BFC0000,0x5BFC0000,0x5BFC0000,0xAFFC0000,0xAFFC0000,0xAFFC0000,0xC8000000,0xAFFC0000,0xAFFC0000,0xAFFC0000,0xC8000000,0xC8000000,0x1AC0000,0x1900001,0x1900001,0x1D40000,0x1F80000,0x35FC0000,0x35FC0000,0x7BFC0000,0x1D40000,0x1F80000,0x9BFC0000,0xAFFC0000, -0x9BFC0000,0x1A40001,0x1A40001,0x1A40001,0x1A40001,0x7BFC0000,0x7BFC0000,0x7BFC0000,0xBFF80000,0xBFF80000,0xD2000000,0x7BFC0000,0x7BFC0000,0x7BFC0000,0xBFF80000,0xBFF80000,0xD2000000,0xBFF80000,0xBFF80000,0xD2000000,0xD2000000,0x7BFC0000,0x7BFC0000,0x7BFC0000,0xBFF80000,0xBFF80000,0xD2000000,0xBFF80000,0xBFF80000,0xD2000000,0xD2000000,0xBFF80000, -0xBFF80000,0xD2000000,0xD2000000,0xD2000000,0x7E80000,0x9C00000,0x1A40001,0x5BFC0000,0x93FC0000,0xADFC0000,0xB5FC0000,0xC3FC0000,0x29FC0000,0x7BFC0000,0xADFC0000,0xD2000000,0xADFC0000,0x1BC0001,0x9FFC0000,0xD1F80000,0xDE000000,0x9FFC0000,0xD1F80000,0xDE000000,0xD1F80000,0xDE000000,0xDE000000,0x9FFC0000,0xD1F80000,0xDE000000,0xD1F80000,0xDE000000, -0xDE000000,0xD1F80000,0xDE000000,0xDE000000,0xDE000000,0x9FFC0000,0xD1F80000,0xDE000000,0xD1F80000,0xDE000000,0xDE000000,0xD1F80000,0xDE000000,0xDE000000,0xDE000000,0xD1F80000,0xDE000000,0xDE000000,0xDE000000,0xDE000000,0x63FC0000,0x1DC0000,0x1DC0000,0xB1FC0000,0xC9FC0000,0xD7F80000,0xDE000000,0xDE000000,0x89FC0000,0xBBFC0000,0xDDEC0000,0xDE000000, -0xC3FC0000,0x19C0274,0xFD94010B,0xE99000F4,0xDF9000F3,0xFD88009A,0xEB88004F,0xE1880067,0xE3880092,0xDF84004E,0xD9840092,0xFD7C00F5,0xEF7C0033,0xE1800051,0xE778004A,0xDF7C0002,0xD97C004D,0xDF7800F4,0xDB740053,0xD7740069,0xD37800F5,0x6BFC0274,0xF56400F3,0xDF7C00F4,0xEB600092,0xDF6C0049,0xD9700090,0xE95000F3,0xDF580032,0xD958004D,0xD36400F4,0xB7F80274, -0xDF3000F3,0xD92C0090,0xD32000F4,0xCC000278,0xFF8C0114,0xF59801FA,0xF79C0217,0xFF800026,0xF57C0002,0xE77C0002,0xDF7C0006,0xDD780006,0xFF880104,0xFF78001B,0xE1740035,0xD958004D,0xA3FC0274,0x1A800F3,0xFF9C0033,0xE79C0032,0xDF9C0032,0xF7940049,0xE9900002,0xDF940005,0xE1900049,0xDD90000E,0xD9900049,0x7DFC00F3,0xEF7C0032,0xDF8C0032,0xE7780049,0xDF7C0001, -0xD9800049,0xBFFC00F3,0xDF540032,0xD9500048,0xD20000F4,0x7DFC00F3,0xEF7C0032,0xDF8C0032,0xE7780049,0xDF7C0001,0xD9800049,0xBFFC00F3,0xDF540032,0xD9500048,0xD20000F4,0xBFFC00F3,0xDF540032,0xD9500048,0xD20000F4,0xD20000F4,0xFB980075,0xFBA400B9,0xFBA400B6,0xFF880013,0xF57C0001,0xE77C0001,0xDF840001,0xDF740004,0xFF900071,0xFD7C000D,0xE1700033,0xD9500048, -0xAFFC00F3,0x19000F3,0x19000F3,0x19000F3,0x19000F3,0xF188004A,0xF188004A,0xF188004A,0xDB84004A,0xDB84004A,0xD384004A,0xEF7C0033,0xEF7C0033,0xEF7C0033,0xDD7C0002,0xDD7C0002,0xD57C000E,0xD7780033,0xD7780033,0xD3780005,0xCD780035,0x59FC00F3,0x59FC00F3,0x59FC00F3,0xDF6C0049,0xDF6C0049,0xD374004A,0xDD5C0032,0xDD5C0032,0xD3640001,0xCF680034,0xADFC00F3, -0xADFC00F3,0xD3440048,0xCD380034,0xC80000F4,0xFF840062,0xFF8C00AB,0x19000F3,0xFF80000D,0xF17C0002,0xE57C0002,0xE37C0003,0xDB780001,0xFF800055,0xFF740006,0xDD780033,0xD3640001,0x99FC00F3,0x19C0032,0x19C0032,0x19C0032,0x19C0032,0xE5940001,0xE5940001,0xE5940001,0xD7940001,0xD7940001,0xD3900001,0x6BFC0032,0x6BFC0032,0x6BFC0032,0xDB800001,0xDB800001, -0xD3880000,0xB7F80032,0xB7F80032,0xD3680000,0xCC000034,0x6BFC0032,0x6BFC0032,0x6BFC0032,0xDB800001,0xDB800001,0xD3880000,0xB7F80032,0xB7F80032,0xD3680000,0xCC000034,0xB7F80032,0xB7F80032,0xD3680000,0xCC000034,0xCC000034,0xFF90000D,0xF5980019,0x19C0032,0xFD840002,0xEB840001,0xE3800000,0xDD840001,0xDB780000,0xFD880012,0xFB7C0002,0xA3FC0032,0xD3680000, -0xA3FC0032,0x1B0004A,0xF5A80001,0xE5A40001,0xDFA40001,0x8DFC0048,0xE9900001,0xDF980001,0xC7FC0048,0xDF740000,0xD8000048,0x8DFC0048,0xE9900001,0xDF980001,0xC7FC0048,0xDF740000,0xD8000048,0xC7FC0048,0xDF740000,0xD8000048,0xD8000048,0x8DFC0048,0xE9900001,0xDF980001,0xC7FC0048,0xDF740000,0xD8000048,0xC7FC0048,0xDF740000,0xD8000048,0xD8000048,0xC7FC0048, -0xDF740000,0xD8000048,0xD8000048,0xD8000048,0xF7A40029,0xFCC0048,0xFFAC002D,0xFF8C0008,0xF5780001,0xE9740000,0xDF840000,0xDF600000,0xFF980022,0xFD800005,0xE1880000,0xD8000048,0xB9FC0048,0x184004A,0x184004A,0x184004A,0x184004A,0x184004A,0x184004A,0x184004A,0x184004A,0x184004A,0x184004A,0xDF7C0001,0xDF7C0001,0xDF7C0001,0xDF7C0001,0xDF7C0001, -0xDF7C0001,0xCF780001,0xCF780001,0xCF780001,0xC9780001,0x49FC0048,0x49FC0048,0x49FC0048,0x49FC0048,0x49FC0048,0x49FC0048,0xD3640001,0xD3640001,0xD3640001,0xC96C0001,0xA7F80048,0xA7F80048,0xA7F80048,0xC9480000,0xC2000048,0xF9800022,0x184004A,0x184004A,0xFB7C0005,0xF37C0001,0xE77C0001,0xE77C0001,0xD97C0001,0xF57C0019,0xFD740002,0xD3780001,0xD3640001, -0x8FFC0048,}; -static const uint32_t g_etc1_to_bc7_m6_table58[] = { -0x1880001,0x1880001,0x1880001,0x1880001,0x1880001,0x1880001,0x1880001,0x1880001,0x1880001,0x1880001,0x1880001,0x1880001,0x1880001,0x1880001,0x1880001,0x1880001,0x1880001,0x1880001,0x1880001,0x1880001,0x4FFC0000,0x4FFC0000,0x4FFC0000,0x4FFC0000,0x4FFC0000,0x4FFC0000,0x4FFC0000,0x4FFC0000,0x4FFC0000,0x4FFC0000,0xA9FC0000, -0xA9FC0000,0xA9FC0000,0xA9FC0000,0xC4000000,0x1880001,0x1880001,0x1880001,0x1880001,0x1880001,0x1880001,0x1880001,0x1880001,0x1A40000,0x1A40000,0x1A40000,0x4FFC0000,0x93FC0000,0x1A00001,0x1A00001,0x1A00001,0x1A00001,0x1A00001,0x1A00001,0x1A00001,0x1A00001,0x1A00001,0x1A00001,0x75FC0000,0x75FC0000,0x75FC0000,0x75FC0000,0x75FC0000, -0x75FC0000,0xBBFC0000,0xBBFC0000,0xBBFC0000,0xD0000000,0x75FC0000,0x75FC0000,0x75FC0000,0x75FC0000,0x75FC0000,0x75FC0000,0xBBFC0000,0xBBFC0000,0xBBFC0000,0xD0000000,0xBBFC0000,0xBBFC0000,0xBBFC0000,0xD0000000,0xD0000000,0x7BC0000,0x1A00001,0x1A00001,0x5E40000,0x1FFC0000,0x53FC0000,0x53FC0000,0x8FFC0000,0x5E40000,0x1FFC0000,0xA9FC0000,0xBBFC0000, -0xA9FC0000,0x1B40001,0x1B40001,0x1B40001,0x1B40001,0x93FC0000,0x93FC0000,0x93FC0000,0xCBF80000,0xCBF80000,0xDA000000,0x93FC0000,0x93FC0000,0x93FC0000,0xCBF80000,0xCBF80000,0xDA000000,0xCBF80000,0xCBF80000,0xDA000000,0xDA000000,0x93FC0000,0x93FC0000,0x93FC0000,0xCBF80000,0xCBF80000,0xDA000000,0xCBF80000,0xCBF80000,0xDA000000,0xDA000000,0xCBF80000, -0xCBF80000,0xDA000000,0xDA000000,0xDA000000,0x3FC0000,0x1D40000,0x1B40001,0x79FC0000,0xA7FC0000,0xBDF80000,0xC3FC0000,0xCFF80000,0x51FC0000,0x93FC0000,0xBDF80000,0xDA000000,0xBDF80000,0x1CC0001,0xB7FC0000,0xDDF40000,0xE6000000,0xB7FC0000,0xDDF40000,0xE6000000,0xDDF40000,0xE6000000,0xE6000000,0xB7FC0000,0xDDF40000,0xE6000000,0xDDF40000,0xE6000000, -0xE6000000,0xDDF40000,0xE6000000,0xE6000000,0xE6000000,0xB7FC0000,0xDDF40000,0xE6000000,0xDDF40000,0xE6000000,0xE6000000,0xDDF40000,0xE6000000,0xE6000000,0xE6000000,0xDDF40000,0xE6000000,0xE6000000,0xE6000000,0xE6000000,0x8BFC0000,0x1EC0000,0x1EC0000,0xC5FC0000,0xD7FC0000,0xE1FC0000,0xE6000000,0xE6000000,0xA7FC0000,0xCDFC0000,0xE5FC0000,0xE6000000, -0xD3FC0000,0x1AC0274,0xFFA4011F,0xF1A000F4,0xE7A000F3,0xFF9800B2,0xF398004F,0xE9980067,0xEB980092,0xE794004E,0xE1940092,0xFF900104,0xF78C0033,0xE9900051,0xEF88004A,0xE78C0002,0xE18C004D,0xE78800F4,0xE3840053,0xDF840069,0xDB8800F5,0x83FC0274,0xFD7400F3,0xE78C00F4,0xF3700092,0xE77C0049,0xE1800090,0xF16000F3,0xE7680032,0xE168004D,0xDB7400F4,0xC3F80274, -0xE74000F3,0xE13C0090,0xDB3000F4,0xD4000278,0xFFA00136,0xFDA801FA,0xFFAC0217,0xFF940053,0xFD8C0002,0xEF8C0002,0xE78C0006,0xE5880006,0xFF98012A,0xFF8C0042,0xE9840035,0xE168004D,0xB3FC0274,0x1B800F3,0xFFB0003E,0xEFAC0032,0xE7AC0032,0xFFA40049,0xF1A00002,0xE7A40005,0xE9A00049,0xE5A0000E,0xE1A00049,0x95FC00F3,0xF78C0032,0xE79C0032,0xEF880049,0xE78C0001, -0xE1900049,0xCBFC00F3,0xE7640032,0xE1600048,0xDA0000F4,0x95FC00F3,0xF78C0032,0xE79C0032,0xEF880049,0xE78C0001,0xE1900049,0xCBFC00F3,0xE7640032,0xE1600048,0xDA0000F4,0xCBFC00F3,0xE7640032,0xE1600048,0xDA0000F4,0xDA0000F4,0xFBAC0082,0xF3B400CB,0xF3B400CB,0xFF980029,0xFD8C0001,0xEF8C0001,0xE7940001,0xE7840004,0xFFA40082,0xFF90001E,0xE9800033,0xE1600048, -0xBFF800F3,0x1A000F3,0x1A000F3,0x1A000F3,0x1A000F3,0xF998004A,0xF998004A,0xF998004A,0xE394004A,0xE394004A,0xDB94004A,0xF78C0033,0xF78C0033,0xF78C0033,0xE58C0002,0xE58C0002,0xDD8C000E,0xDF880033,0xDF880033,0xDB880005,0xD5880035,0x71FC00F3,0x71FC00F3,0x71FC00F3,0xE77C0049,0xE77C0049,0xDB84004A,0xE56C0032,0xE56C0032,0xDB740001,0xD7780034,0xB9FC00F3, -0xB9FC00F3,0xDB540048,0xD5480034,0xD00000F4,0xFB980075,0xF9A000BA,0x1A000F3,0xFF90001A,0xF98C0002,0xED8C0002,0xEB8C0003,0xE3880001,0xFF940064,0xFD8C0019,0xE5880033,0xDB740001,0xA7FC00F3,0x1AC0032,0x1AC0032,0x1AC0032,0x1AC0032,0xEDA40001,0xEDA40001,0xEDA40001,0xDFA40001,0xDFA40001,0xDBA00001,0x83FC0032,0x83FC0032,0x83FC0032,0xE3900001,0xE3900001, -0xDB980000,0xC3F80032,0xC3F80032,0xDB780000,0xD4000034,0x83FC0032,0x83FC0032,0x83FC0032,0xE3900001,0xE3900001,0xDB980000,0xC3F80032,0xC3F80032,0xDB780000,0xD4000034,0xC3F80032,0xC3F80032,0xDB780000,0xD4000034,0xD4000034,0xFFA00014,0xFDA80019,0x1AC0032,0xFF980005,0xF3940001,0xEB900000,0xE5940001,0xE3880000,0xF5A00019,0xFB900005,0xB3FC0032,0xDB780000, -0xB3FC0032,0x1C0004A,0xFDB80001,0xEDB40001,0xE7B40001,0xA5FC0048,0xF1A00001,0xE7A80001,0xD3FC0048,0xE7840000,0xE0000048,0xA5FC0048,0xF1A00001,0xE7A80001,0xD3FC0048,0xE7840000,0xE0000048,0xD3FC0048,0xE7840000,0xE0000048,0xE0000048,0xA5FC0048,0xF1A00001,0xE7A80001,0xD3FC0048,0xE7840000,0xE0000048,0xD3FC0048,0xE7840000,0xE0000048,0xE0000048,0xD3FC0048, -0xE7840000,0xE0000048,0xE0000048,0xE0000048,0xFFB40029,0x1E00048,0xF9C00032,0xFFA00011,0xFD880001,0xF1840000,0xE7940000,0xE7700000,0xFFAC002D,0xFD9C000D,0xE9980000,0xE0000048,0xC7FC0048,0x194004A,0x194004A,0x194004A,0x194004A,0x194004A,0x194004A,0x194004A,0x194004A,0x194004A,0x194004A,0xE78C0001,0xE78C0001,0xE78C0001,0xE78C0001,0xE78C0001, -0xE78C0001,0xD7880001,0xD7880001,0xD7880001,0xD1880001,0x63FC0048,0x63FC0048,0x63FC0048,0x63FC0048,0x63FC0048,0x63FC0048,0xDB740001,0xDB740001,0xDB740001,0xD17C0001,0xB3F80048,0xB3F80048,0xB3F80048,0xD1580000,0xCA000048,0xF3940029,0x194004A,0x194004A,0xFD8C000A,0xFB8C0001,0xEF8C0001,0xEF8C0001,0xE18C0001,0xFD8C0019,0xF9880008,0xDB880001,0xDB740001, -0x9FF80048,}; -static const uint32_t g_etc1_to_bc7_m6_table59[] = { -0x1980001,0x1980001,0x1980001,0x1980001,0x1980001,0x1980001,0x1980001,0x1980001,0x1980001,0x1980001,0x1980001,0x1980001,0x1980001,0x1980001,0x1980001,0x1980001,0x1980001,0x1980001,0x1980001,0x1980001,0x69FC0000,0x69FC0000,0x69FC0000,0x69FC0000,0x69FC0000,0x69FC0000,0x69FC0000,0x69FC0000,0x69FC0000,0x69FC0000,0xB5FC0000, -0xB5FC0000,0xB5FC0000,0xB5FC0000,0xCC000000,0x1980001,0x1980001,0x1980001,0x1980001,0x1980001,0x1980001,0x1980001,0x1980001,0x3B40000,0x3B40000,0x3B40000,0x69FC0000,0xA1FC0000,0x1B00001,0x1B00001,0x1B00001,0x1B00001,0x1B00001,0x1B00001,0x1B00001,0x1B00001,0x1B00001,0x1B00001,0x8DFC0000,0x8DFC0000,0x8DFC0000,0x8DFC0000,0x8DFC0000, -0x8DFC0000,0xC7FC0000,0xC7FC0000,0xC7FC0000,0xD8000000,0x8DFC0000,0x8DFC0000,0x8DFC0000,0x8DFC0000,0x8DFC0000,0x8DFC0000,0xC7FC0000,0xC7FC0000,0xC7FC0000,0xD8000000,0xC7FC0000,0xC7FC0000,0xC7FC0000,0xD8000000,0xD8000000,0xFCC0000,0x1B00001,0x1B00001,0x1F80000,0x47FC0000,0x71FC0000,0x71FC0000,0xA3FC0000,0x1F80000,0x47FC0000,0xB9FC0000,0xC7FC0000, -0xB9FC0000,0x1C40001,0x1C40001,0x1C40001,0x1C40001,0xABFC0000,0xABFC0000,0xABFC0000,0xD7F80000,0xD7F80000,0xE2000000,0xABFC0000,0xABFC0000,0xABFC0000,0xD7F80000,0xD7F80000,0xE2000000,0xD7F80000,0xD7F80000,0xE2000000,0xE2000000,0xABFC0000,0xABFC0000,0xABFC0000,0xD7F80000,0xD7F80000,0xE2000000,0xD7F80000,0xD7F80000,0xE2000000,0xE2000000,0xD7F80000, -0xD7F80000,0xE2000000,0xE2000000,0xE2000000,0x3BFC0000,0x1E40000,0x1C40001,0x97FC0000,0xBBFC0000,0xCBFC0000,0xD1FC0000,0xD9FC0000,0x77FC0000,0xABFC0000,0xCBFC0000,0xE2000000,0xCBFC0000,0x1DC0001,0xCFFC0000,0xE7FC0000,0xEE000000,0xCFFC0000,0xE7FC0000,0xEE000000,0xE7FC0000,0xEE000000,0xEE000000,0xCFFC0000,0xE7FC0000,0xEE000000,0xE7FC0000,0xEE000000, -0xEE000000,0xE7FC0000,0xEE000000,0xEE000000,0xEE000000,0xCFFC0000,0xE7FC0000,0xEE000000,0xE7FC0000,0xEE000000,0xEE000000,0xE7FC0000,0xEE000000,0xEE000000,0xEE000000,0xE7FC0000,0xEE000000,0xEE000000,0xEE000000,0xEE000000,0xB3FC0000,0x7FC0000,0x7FC0000,0xD9FC0000,0xE5FC0000,0xEBFC0000,0xEE000000,0xEE000000,0xC5FC0000,0xDDFC0000,0xEFD00000,0xEE000000, -0xE1FC0000,0x1BC0274,0xFFB4014C,0xF9B000F4,0xEFB000F3,0xFFB000E2,0xFBA8004F,0xF1A80067,0xF3A80092,0xEFA4004E,0xE9A40092,0xFFA40121,0xFF9C0033,0xF1A00051,0xF798004A,0xEF9C0002,0xE99C004D,0xEF9800F4,0xEB940053,0xE7940069,0xE39800F5,0x9BFC0274,0xFD9000FD,0xEF9C00F4,0xFB800092,0xEF8C0049,0xE9900090,0xF97000F3,0xEF780032,0xE978004D,0xE38400F4,0xCFF80274, -0xEF5000F3,0xE94C0090,0xE34000F4,0xDC000278,0xFFB4016B,0xF5B80224,0xF7BC0234,0xFFAC009E,0xFF9C0013,0xF79C0002,0xEF9C0006,0xED980006,0xFDB0016B,0xFFA00086,0xF1940035,0xE978004D,0xC1FC0274,0x1C800F3,0xFDC00053,0xF7BC0032,0xEFBC0032,0xFDB80059,0xF9B00002,0xEFB40005,0xF1B00049,0xEDB0000E,0xE9B00049,0xAFFC00F3,0xFF9C0032,0xEFAC0032,0xF7980049,0xEF9C0001, -0xE9A00049,0xD7FC00F3,0xEF740032,0xE9700048,0xE20000F4,0xAFFC00F3,0xFF9C0032,0xEFAC0032,0xF7980049,0xEF9C0001,0xE9A00049,0xD7FC00F3,0xEF740032,0xE9700048,0xE20000F4,0xD7FC00F3,0xEF740032,0xE9700048,0xE20000F4,0xE20000F4,0xFFBC0095,0xFBC400CB,0xFBC400CB,0xFFB00042,0xFFA40009,0xF79C0001,0xEFA40001,0xEF940004,0xFFB4009E,0xFFAC003D,0xF1900033,0xE9700048, -0xCDFC00F3,0x1B000F3,0x1B000F3,0x1B000F3,0x1B000F3,0xFFA8004B,0xFFA8004B,0xFFA8004B,0xEBA4004A,0xEBA4004A,0xE3A4004A,0xFF9C0033,0xFF9C0033,0xFF9C0033,0xED9C0002,0xED9C0002,0xE59C000E,0xE7980033,0xE7980033,0xE3980005,0xDD980035,0x89FC00F3,0x89FC00F3,0x89FC00F3,0xEF8C0049,0xEF8C0049,0xE394004A,0xED7C0032,0xED7C0032,0xE3840001,0xDF880034,0xC5FC00F3, -0xC5FC00F3,0xE3640048,0xDD580034,0xD80000F4,0xFFAC0082,0xFFAC00BE,0x1B000F3,0xFFA40033,0xFF9C0003,0xF59C0002,0xF39C0003,0xEB980001,0xFFA00079,0xFF9C002A,0xED980033,0xE3840001,0xB7FC00F3,0x1BC0032,0x1BC0032,0x1BC0032,0x1BC0032,0xF5B40001,0xF5B40001,0xF5B40001,0xE7B40001,0xE7B40001,0xE3B00001,0x9BFC0032,0x9BFC0032,0x9BFC0032,0xEBA00001,0xEBA00001, -0xE3A80000,0xCFF80032,0xCFF80032,0xE3880000,0xDC000034,0x9BFC0032,0x9BFC0032,0x9BFC0032,0xEBA00001,0xEBA00001,0xE3A80000,0xCFF80032,0xCFF80032,0xE3880000,0xDC000034,0xCFF80032,0xCFF80032,0xE3880000,0xDC000034,0xDC000034,0xFBB40019,0xF5B80022,0x1BC0032,0xFBAC000D,0xFBA40001,0xF3A00000,0xEDA40001,0xEB980000,0xFDB00019,0xFFA40008,0xC1FC0032,0xE3880000, -0xC1FC0032,0x1D0004A,0xFFC80005,0xF5C40001,0xEFC40001,0xBDFC0048,0xF9B00001,0xEFB80001,0xDFF80048,0xEF940000,0xE8000048,0xBDFC0048,0xF9B00001,0xEFB80001,0xDFF80048,0xEF940000,0xE8000048,0xDFF80048,0xEF940000,0xE8000048,0xE8000048,0xBDFC0048,0xF9B00001,0xEFB80001,0xDFF80048,0xEF940000,0xE8000048,0xDFF80048,0xEF940000,0xE8000048,0xE8000048,0xDFF80048, -0xEF940000,0xE8000048,0xE8000048,0xE8000048,0xFBC80034,0x1F00048,0xFFCC003A,0xFDBC0019,0xFFA40005,0xF9940000,0xEFA40000,0xEF800000,0xF9C80032,0xFBB80019,0xF1A80000,0xE8000048,0xD7FC0048,0x1A4004A,0x1A4004A,0x1A4004A,0x1A4004A,0x1A4004A,0x1A4004A,0x1A4004A,0x1A4004A,0x1A4004A,0x1A4004A,0xEF9C0001,0xEF9C0001,0xEF9C0001,0xEF9C0001,0xEF9C0001, -0xEF9C0001,0xDF980001,0xDF980001,0xDF980001,0xD9980001,0x7BFC0048,0x7BFC0048,0x7BFC0048,0x7BFC0048,0x7BFC0048,0x7BFC0048,0xE3840001,0xE3840001,0xE3840001,0xD98C0001,0xBFF80048,0xBFF80048,0xBFF80048,0xD9680000,0xD2000048,0xFBA40029,0x1A4004A,0x1A4004A,0xFFA0000D,0xFD9C0002,0xF79C0001,0xF79C0001,0xE99C0001,0xFD9C0020,0xFB98000D,0xE3980001,0xE3840001, -0xADFC0048,}; -static const uint32_t g_etc1_to_bc7_m6_table60[] = { -0x1AC0000,0x1AC0000,0x1AC0000,0x1AC0000,0x1AC0000,0x1AC0000,0x1AC0000,0x1AC0000,0x1AC0000,0x1AC0000,0x1AC0000,0x1AC0000,0x1AC0000,0x1AC0000,0x1AC0000,0x1AC0000,0x1AC0000,0x1AC0000,0x1AC0000,0x1AC0000,0x83FC0000,0x83FC0000,0x83FC0000,0x83FC0000,0x83FC0000,0x83FC0000,0x83FC0000,0x83FC0000,0x83FC0000,0x83FC0000,0xC3F80000, -0xC3F80000,0xC3F80000,0xC3F80000,0xD4000001,0x1AC0000,0x1AC0000,0x1AC0000,0x1AC0000,0x1AC0000,0x1AC0000,0x1AC0000,0x1AC0000,0x1C80000,0x1C80000,0x1C80000,0x83FC0000,0xB3FC0000,0x1C40000,0x1C40000,0x1C40000,0x1C40000,0x1C40000,0x1C40000,0x1C40000,0x1C40000,0x1C40000,0x1C40000,0xA9FC0000,0xA9FC0000,0xA9FC0000,0xA9FC0000,0xA9FC0000, -0xA9FC0000,0xD5F80000,0xD5F80000,0xD5F80000,0xE0000001,0xA9FC0000,0xA9FC0000,0xA9FC0000,0xA9FC0000,0xA9FC0000,0xA9FC0000,0xD5F80000,0xD5F80000,0xD5F80000,0xE0000001,0xD5F80000,0xD5F80000,0xD5F80000,0xE0000001,0xE0000001,0x9E00000,0x1C40000,0x1C40000,0x35FC0000,0x73FC0000,0x93FC0000,0x93FC0000,0xB9FC0000,0x35FC0000,0x73FC0000,0xC9FC0000,0xD5F80000, -0xC9FC0000,0x1D80000,0x1D80000,0x1D80000,0x1D80000,0xC7FC0000,0xC7FC0000,0xC7FC0000,0xE3FC0000,0xE3FC0000,0xEA000001,0xC7FC0000,0xC7FC0000,0xC7FC0000,0xE3FC0000,0xE3FC0000,0xEA000001,0xE3FC0000,0xE3FC0000,0xEA000001,0xEA000001,0xC7FC0000,0xC7FC0000,0xC7FC0000,0xE3FC0000,0xE3FC0000,0xEA000001,0xE3FC0000,0xE3FC0000,0xEA000001,0xEA000001,0xE3FC0000, -0xE3FC0000,0xEA000001,0xEA000001,0xEA000001,0x7BFC0000,0x1F80000,0x1D80000,0xB9FC0000,0xD1FC0000,0xDDF80000,0xDFFC0000,0xE5FC0000,0xA3FC0000,0xC7FC0000,0xDDF80000,0xEA000001,0xDDF80000,0x1F00000,0xEBFC0000,0xF5FC0000,0xF6000001,0xEBFC0000,0xF5FC0000,0xF6000001,0xF5FC0000,0xF6000001,0xF6000001,0xEBFC0000,0xF5FC0000,0xF6000001,0xF5FC0000,0xF6000001, -0xF6000001,0xF5FC0000,0xF6000001,0xF6000001,0xF6000001,0xEBFC0000,0xF5FC0000,0xF6000001,0xF5FC0000,0xF6000001,0xF6000001,0xF5FC0000,0xF6000001,0xF6000001,0xF6000001,0xF5FC0000,0xF6000001,0xF6000001,0xF6000001,0xF6000001,0xDFFC0000,0x97FC0000,0x97FC0000,0xEFFC0000,0xF5F80000,0xF7F40000,0xF6000001,0xF6000001,0xE7FC0000,0xF1FC0000,0xF9C40000,0xF6000001, -0xF3FC0000,0x1CC0278,0xFFC80181,0xFFC400FD,0xF7C400F5,0xFFC40120,0xFFBC0069,0xFBBC0069,0xFDB80090,0xF7B8004D,0xF1B80092,0xFFBC015B,0xFFB4005D,0xFBB40053,0xFFAC0049,0xF7AC0002,0xF3AC004E,0xF7AC00F4,0xF5A80051,0xF1A80067,0xEDAC00F3,0xB7FC0274,0xFFAC011F,0xF7AC00F4,0xFF9C00AA,0xF99C004A,0xF1A40092,0xFF8800F5,0xF78C0033,0xF18C004F,0xED9400F4,0xDDF40274, -0xF76800F4,0xF1600092,0xED4C00F3,0xE6000274,0xFFC401B8,0xFFCC0220,0xFFCC0234,0xFFC000F1,0xFFB40059,0xFFAC0002,0xF9B00006,0xF7AC0006,0xFFC401A8,0xFFB800EA,0xF9A80035,0xF18C004F,0xD3FC0274,0x1D800F4,0xFFD00074,0xFFCC0035,0xF7CC0035,0xFFD00074,0xFFC40009,0xF9C40005,0xF9C4004A,0xF7C0000E,0xF1C4004A,0xC9FC00F3,0xFFB80042,0xF9BC0033,0xFFAC0049,0xF7AC0002, -0xF1B4004A,0xE5F800F3,0xF78C0033,0xF184004A,0xEC0000F3,0xC9FC00F3,0xFFB80042,0xF9BC0033,0xFFAC0049,0xF7AC0002,0xF1B4004A,0xE5F800F3,0xF78C0033,0xF184004A,0xEC0000F3,0xE5F800F3,0xF78C0033,0xF184004A,0xEC0000F3,0xEC0000F3,0xFFD000AB,0xF5D800DE,0xF5D800DD,0xFFC80076,0xFFBC002E,0xFFAC0002,0xF9B40001,0xF7A40003,0xFDD000B5,0xFFC80063,0xFBA00032,0xF184004A, -0xDFF800F3,0x1C400F4,0x1C400F4,0x1C400F4,0x1C400F4,0xFFBC0059,0xFFBC0059,0xFFBC0059,0xF3B80049,0xF3B80049,0xEBB80049,0xFFB0003E,0xFFB0003E,0xFFB0003E,0xF7AC0001,0xF7AC0001,0xEDB0000E,0xEFAC0032,0xEFAC0032,0xEBAC0005,0xE7AC0032,0xA5FC00F3,0xA5FC00F3,0xA5FC00F3,0xF99C0049,0xF99C0049,0xEBA80049,0xF78C0032,0xF78C0032,0xEB980002,0xE79C0032,0xD3FC00F3, -0xD3FC00F3,0xEB780049,0xE7640032,0xE00000F3,0xFFBC0095,0xF9C000CC,0x1C400F4,0xFDB80056,0xFFB00018,0xFFAC0001,0xFBAC0004,0xF3AC0001,0xFFB40091,0xFFB00045,0xF7A80032,0xEB980002,0xC7FC00F3,0x1CC0034,0x1CC0034,0x1CC0034,0x1CC0034,0xFFC40000,0xFFC40000,0xFFC40000,0xF1C40000,0xF1C40000,0xEBC40001,0xB7FC0032,0xB7FC0032,0xB7FC0032,0xF3B40001,0xF3B40001, -0xEBBC0001,0xDDF40032,0xDDF40032,0xEBA00001,0xE6000032,0xB7FC0032,0xB7FC0032,0xB7FC0032,0xF3B40001,0xF3B40001,0xEBBC0001,0xDDF40032,0xDDF40032,0xEBA00001,0xE6000032,0xDDF40032,0xDDF40032,0xEBA00001,0xE6000032,0xE6000032,0xFDC80020,0xFFCC0020,0x1CC0034,0xFDC00014,0xFDBC0005,0xFDB00000,0xF9B40000,0xF3AC0001,0xFFC40020,0xFBC00012,0xD3FC0032,0xEBA00001, -0xD3FC0032,0x1E40048,0xFFDC0014,0xFDD80001,0xF7D80001,0xD9FC0048,0xFFC80005,0xF7CC0001,0xEDF80048,0xF7A80001,0xF000004A,0xD9FC0048,0xFFC80005,0xF7CC0001,0xEDF80048,0xF7A80001,0xF000004A,0xEDF80048,0xF7A80001,0xF000004A,0xF000004A,0xD9FC0048,0xFFC80005,0xF7CC0001,0xEDF80048,0xF7A80001,0xF000004A,0xEDF80048,0xF7A80001,0xF000004A,0xF000004A,0xEDF80048, -0xF7A80001,0xF000004A,0xF000004A,0xF000004A,0xF5E4003D,0x37FC0048,0xFBE4003D,0xFFD40029,0xFDCC0019,0xFFAC0001,0xF7B80001,0xF7980001,0xFFDC0032,0xFFCC0028,0xF9BC0001,0xF000004A,0xE7FC0048,0x1B80048,0x1B80048,0x1B80048,0x1B80048,0x1B80048,0x1B80048,0x1B80048,0x1B80048,0x1B80048,0x1B80048,0xFBAC0000,0xFBAC0000,0xFBAC0000,0xFBAC0000,0xFBAC0000, -0xFBAC0000,0xE7AC0001,0xE7AC0001,0xE7AC0001,0xE1AC0001,0x95FC0048,0x95FC0048,0x95FC0048,0x95FC0048,0x95FC0048,0x95FC0048,0xEB980001,0xEB980001,0xEB980001,0xE1A00001,0xCBFC0048,0xCBFC0048,0xCBFC0048,0xE17C0001,0xDA00004A,0xF3B40034,0x1B80048,0x1B80048,0xFBB40019,0xFDB00008,0xFFAC0001,0xFFAC0001,0xF3AC0000,0xF9B00029,0xFBAC0014,0xEFA80000,0xEB980001, -0xBFF80048,}; -static const uint32_t g_etc1_to_bc7_m6_table61[] = { -0x1BC0000,0x1BC0000,0x1BC0000,0x1BC0000,0x1BC0000,0x1BC0000,0x1BC0000,0x1BC0000,0x1BC0000,0x1BC0000,0x1BC0000,0x1BC0000,0x1BC0000,0x1BC0000,0x1BC0000,0x1BC0000,0x1BC0000,0x1BC0000,0x1BC0000,0x1BC0000,0x9BFC0000,0x9BFC0000,0x9BFC0000,0x9BFC0000,0x9BFC0000,0x9BFC0000,0x9BFC0000,0x9BFC0000,0x9BFC0000,0x9BFC0000,0xCFF80000, -0xCFF80000,0xCFF80000,0xCFF80000,0xDC000001,0x1BC0000,0x1BC0000,0x1BC0000,0x1BC0000,0x1BC0000,0x1BC0000,0x1BC0000,0x1BC0000,0x5D80000,0x5D80000,0x5D80000,0x9BFC0000,0xC1FC0000,0x1D40000,0x1D40000,0x1D40000,0x1D40000,0x1D40000,0x1D40000,0x1D40000,0x1D40000,0x1D40000,0x1D40000,0xC1FC0000,0xC1FC0000,0xC1FC0000,0xC1FC0000,0xC1FC0000, -0xC1FC0000,0xE1F80000,0xE1F80000,0xE1F80000,0xE8000001,0xC1FC0000,0xC1FC0000,0xC1FC0000,0xC1FC0000,0xC1FC0000,0xC1FC0000,0xE1F80000,0xE1F80000,0xE1F80000,0xE8000001,0xE1F80000,0xE1F80000,0xE1F80000,0xE8000001,0xE8000001,0x1F40000,0x1D40000,0x1D40000,0x6DFC0000,0x9BFC0000,0xB1FC0000,0xB1FC0000,0xCDFC0000,0x6DFC0000,0x9BFC0000,0xD9FC0000,0xE1F80000, -0xD9FC0000,0x1E80000,0x1E80000,0x1E80000,0x1E80000,0xDFFC0000,0xDFFC0000,0xDFFC0000,0xEFFC0000,0xEFFC0000,0xF2000001,0xDFFC0000,0xDFFC0000,0xDFFC0000,0xEFFC0000,0xEFFC0000,0xF2000001,0xEFFC0000,0xEFFC0000,0xF2000001,0xF2000001,0xDFFC0000,0xDFFC0000,0xDFFC0000,0xEFFC0000,0xEFFC0000,0xF2000001,0xEFFC0000,0xEFFC0000,0xF2000001,0xF2000001,0xEFFC0000, -0xEFFC0000,0xF2000001,0xF2000001,0xF2000001,0xB5FC0000,0x57FC0000,0x1E80000,0xD7FC0000,0xE5FC0000,0xEBFC0000,0xEDFC0000,0xF1F80000,0xCBFC0000,0xDFFC0000,0xEBFC0000,0xF2000001,0xEBFC0000,0x1FC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000, -0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xF7FC0001,0xF7FC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFFF00000,0xFE000000, -0xFFFC0000,0x1DC0255,0xFFDC01AD,0xFFD40125,0xFFD400F4,0xFFD00159,0xFFCC00B4,0xFFCC0074,0xFFCC0099,0xFFC8004C,0xF9C80085,0xFFD00179,0xFFC800AF,0xFFC40054,0xFFC00069,0xFFBC0001,0xF9C00045,0xFFBC00DD,0xFBBC004A,0xF9B8005A,0xF5BC00DE,0xCFFC0253,0xFFC00158,0xFFBC00F3,0xFFB800D3,0xFFAC004E,0xF9B40085,0xFFAC0106,0xFF9C0032,0xF99C0042,0xF5A400DF,0xE7FC0253, -0xFF7800F3,0xF9700085,0xF55C00DE,0xEE000253,0xFFD801C7,0xF7DC0229,0xF7DC0234,0xFFD40139,0xFFCC00B5,0xFFC0003C,0xFFC0000C,0xFFBC0005,0xFFD401B7,0xFFD00122,0xFFB80036,0xF99C0042,0xE1FC0253,0x1E800DD,0xFDE40095,0xFFE0004D,0xFFDC0034,0xFFDC0089,0xFFD8002C,0xFFD80008,0xFFD40041,0xFDD0000C,0xF9D4003D,0xDFFC00DD,0xFFD80068,0xFFCC0034,0xFFCC0059,0xFFBC0001, -0xF9C4003D,0xEFFC00DD,0xFF9C0032,0xF994003D,0xF40000DE,0xDFFC00DD,0xFFD80068,0xFFCC0034,0xFFCC0059,0xFFBC0001,0xF9C4003D,0xEFFC00DD,0xFF9C0032,0xF994003D,0xF40000DE,0xEFFC00DD,0xFF9C0032,0xF994003D,0xF40000DE,0xF40000DE,0xFFE400B5,0xFDE800C9,0xFDE800C8,0xFFDC0089,0xFFD40062,0xFFC8001E,0xFFC40001,0xFFB40002,0xFFE000BA,0xFFDC0082,0xFFB80036,0xF994003D, -0xEBFC00DD,0x1D400F4,0x1D400F4,0x1D400F4,0x1D400F4,0xFDCC0074,0xFDCC0074,0xFDCC0074,0xFBC80049,0xFBC80049,0xF3C80049,0xFFC40054,0xFFC40054,0xFFC40054,0xFFBC0001,0xFFBC0001,0xF5C0000E,0xF7BC0032,0xF7BC0032,0xF3BC0005,0xEFBC0032,0xBDFC00F3,0xBDFC00F3,0xBDFC00F3,0xFDB4004E,0xFDB4004E,0xF3B80049,0xFF9C0032,0xFF9C0032,0xF3A80002,0xEFAC0032,0xDFF800F3, -0xDFF800F3,0xF3880049,0xEF740032,0xE80000F3,0xFFCC00A8,0xFFCC00E0,0x1D400F4,0xFFCC0071,0xFFC40038,0xFFC00018,0xFFC0000C,0xFBBC0001,0xFDCC00A3,0xFFC40068,0xFFB80032,0xF3A80002,0xD7FC00F3,0x1DC0034,0x1DC0034,0x1DC0034,0x1DC0034,0xFDD80008,0xFDD80008,0xFDD80008,0xF9D40000,0xF9D40000,0xF3D40001,0xCFFC0032,0xCFFC0032,0xCFFC0032,0xFBC40001,0xFBC40001, -0xF3CC0001,0xE7FC0032,0xE7FC0032,0xF3B00001,0xEE000032,0xCFFC0032,0xCFFC0032,0xCFFC0032,0xFBC40001,0xFBC40001,0xF3CC0001,0xE7FC0032,0xE7FC0032,0xF3B00001,0xEE000032,0xE7FC0032,0xE7FC0032,0xF3B00001,0xEE000032,0xEE000032,0xFFD80022,0xF7DC0029,0x1DC0034,0xFDD80019,0xFDD0000D,0xFFC80005,0xFFC40001,0xFBBC0001,0xF1DC0029,0xFBD40019,0xE1FC0032,0xF3B00001, -0xE1FC0032,0x1F4003D,0xFFEC0028,0xFFEC000D,0xFFE80000,0xEFFC003D,0xFFE40014,0xFFDC0000,0xF7F8003D,0xFFB80000,0xF800003D,0xEFFC003D,0xFFE40014,0xFFDC0000,0xF7F8003D,0xFFB80000,0xF800003D,0xF7F8003D,0xFFB80000,0xF800003D,0xF800003D,0xEFFC003D,0xFFE40014,0xFFDC0000,0xF7F8003D,0xFFB80000,0xF800003D,0xF7F8003D,0xFFB80000,0xF800003D,0xF800003D,0xF7F8003D, -0xFFB80000,0xF800003D,0xF800003D,0xF800003D,0xFBF00034,0xA7FC003D,0xF3F4003D,0xFFEC0029,0xFFE80020,0xFFD40011,0xFFC80000,0xFFA80000,0xFFF00032,0xFFEC0032,0xFFD00001,0xF800003D,0xF5FC003D,0x1C80048,0x1C80048,0x1C80048,0x1C80048,0x1C80048,0x1C80048,0x1C80048,0x1C80048,0x1C80048,0x1C80048,0xFFBC0001,0xFFBC0001,0xFFBC0001,0xFFBC0001,0xFFBC0001, -0xFFBC0001,0xEFBC0001,0xEFBC0001,0xEFBC0001,0xE9BC0001,0xAFFC0048,0xAFFC0048,0xAFFC0048,0xAFFC0048,0xAFFC0048,0xAFFC0048,0xF3A80001,0xF3A80001,0xF3A80001,0xE9B00001,0xD7FC0048,0xD7FC0048,0xD7FC0048,0xE98C0001,0xE200004A,0xFBC40034,0x1C80048,0x1C80048,0xFBC40020,0xFDC00014,0xFDC00008,0xFDC00008,0xFBBC0000,0xF5C40032,0xFFBC001D,0xF7B80000,0xF3A80001, -0xCDFC0048,}; -static const uint32_t g_etc1_to_bc7_m6_table62[] = { -0x1CC0000,0x1CC0000,0x1CC0000,0x1CC0000,0x1CC0000,0x1CC0000,0x1CC0000,0x1CC0000,0x1CC0000,0x1CC0000,0x1CC0000,0x1CC0000,0x1CC0000,0x1CC0000,0x1CC0000,0x1CC0000,0x1CC0000,0x1CC0000,0x1CC0000,0x1CC0000,0xB5FC0000,0xB5FC0000,0xB5FC0000,0xB5FC0000,0xB5FC0000,0xB5FC0000,0xB5FC0000,0xB5FC0000,0xB5FC0000,0xB5FC0000,0xDBF80000, -0xDBF80000,0xDBF80000,0xDBF80000,0xE4000001,0x1CC0000,0x1CC0000,0x1CC0000,0x1CC0000,0x1CC0000,0x1CC0000,0x1CC0000,0x1CC0000,0xDE80000,0xDE80000,0xDE80000,0xB5FC0000,0xD1FC0000,0x1E40000,0x1E40000,0x1E40000,0x1E40000,0x1E40000,0x1E40000,0x1E40000,0x1E40000,0x1E40000,0x1E40000,0xD9FC0000,0xD9FC0000,0xD9FC0000,0xD9FC0000,0xD9FC0000, -0xD9FC0000,0xEDF80000,0xEDF80000,0xEDF80000,0xF0000001,0xD9FC0000,0xD9FC0000,0xD9FC0000,0xD9FC0000,0xD9FC0000,0xD9FC0000,0xEDF80000,0xEDF80000,0xEDF80000,0xF0000001,0xEDF80000,0xEDF80000,0xEDF80000,0xF0000001,0xF0000001,0x37FC0000,0x1E40000,0x1E40000,0xA7FC0000,0xC1FC0000,0xCFFC0000,0xCFFC0000,0xE1FC0000,0xA7FC0000,0xC1FC0000,0xE7FC0000,0xEDF80000, -0xE7FC0000,0x1F80000,0x1F80000,0x1F80000,0x1F80000,0xF7FC0000,0xF7FC0000,0xF7FC0000,0xFBFC0000,0xFBFC0000,0xFA000001,0xF7FC0000,0xF7FC0000,0xF7FC0000,0xFBFC0000,0xFBFC0000,0xFA000001,0xFBFC0000,0xFBFC0000,0xFA000001,0xFA000001,0xF7FC0000,0xF7FC0000,0xF7FC0000,0xFBFC0000,0xFBFC0000,0xFA000001,0xFBFC0000,0xFBFC0000,0xFA000001,0xFA000001,0xFBFC0000, -0xFBFC0000,0xFA000001,0xFA000001,0xFA000001,0xEDFC0000,0xD7FC0000,0x1F80000,0xF5FC0000,0xF9FC0000,0xFBFC0000,0xFBFC0000,0xFBFC0000,0xF3FC0000,0xF7FC0000,0xFBFC0000,0xFA000001,0xFBFC0000,0x1FC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000, -0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xF7FC0001,0xF7FC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFFF00000,0xFE000000, -0xFFFC0000,0x1E80181,0xFFE80139,0xFFE40104,0xFFE400F4,0xFFE000FD,0xFFE000B2,0xFFDC0090,0xFFD80075,0xFFD80051,0xFDD8004D,0xFFDC00FD,0xFFDC00A8,0xFFDC0084,0xFFD80051,0xFFD00021,0xFFD00011,0xFFCC0072,0xFFCC0032,0xFDCC000E,0xF9CC005E,0xE3FC017F,0xFFD80118,0xFFD400F3,0xFFCC00A9,0xFFCC0069,0xFDC8004D,0xFFC000AE,0xFFB80045,0xFDB40006,0xF9B8005E,0xF1F8017F, -0xFFA800F3,0xFD90004D,0xF97C005E,0xF400017F,0xFFE40135,0xFDE8015D,0xFDE8016C,0xFFE000F5,0xFFDC00A3,0xFFD40055,0xFFD00038,0xFFD0000E,0xFFE40142,0xFFDC00E3,0xFFD0004E,0xFDB40006,0xEDFC017F,0x1F4005D,0xFDF0004D,0xFFF00038,0xFFEC0034,0xFFEC003D,0xFFEC0022,0xFFE80014,0xFFE40011,0xFFE40001,0xFDE40005,0xF1FC005D,0xFFEC0043,0xFFE40034,0xFFE40021,0xFFD80009, -0xFDD80005,0xF9F8005D,0xFFCC0032,0xFDB40005,0xF800005E,0xF1FC005D,0xFFEC0043,0xFFE40034,0xFFE40021,0xFFD80009,0xFDD80005,0xF9F8005D,0xFFCC0032,0xFDB40005,0xF800005E,0xF9F8005D,0xFFCC0032,0xFDB40005,0xF800005E,0xF800005E,0xFDF00051,0xF3F4005D,0xF3F4005D,0xFFEC0042,0xFFE80030,0xFFE4001B,0xFFE0000D,0xFFD80008,0xFBF00051,0xFFE80044,0xFFDC0033,0xFDB40005, -0xF7FC005D,0x1E400F4,0x1E400F4,0x1E400F4,0x1E400F4,0xFFDC0090,0xFFDC0090,0xFFDC0090,0xFFD80051,0xFFD80051,0xFBD80049,0xFFDC0084,0xFFDC0084,0xFFDC0084,0xFFD00021,0xFFD00021,0xFDD0000E,0xFFCC0032,0xFFCC0032,0xFBCC0005,0xF7CC0032,0xD5FC00F3,0xD5FC00F3,0xD5FC00F3,0xFFCC0069,0xFFCC0069,0xFBC80049,0xFFB80045,0xFFB80045,0xFBB80002,0xF7BC0032,0xEBF800F3, -0xEBF800F3,0xFB980049,0xF7840032,0xF00000F3,0xFBE000C9,0xF9E000E1,0x1E400F4,0xFFDC0095,0xFFD80068,0xFFD40045,0xFFD00038,0xFFD0000E,0xFDE000CA,0xFFDC0092,0xFFD0004D,0xFBB80002,0xE5FC00F3,0x1EC0034,0x1EC0034,0x1EC0034,0x1EC0034,0xFFE80014,0xFFE80014,0xFFE80014,0xFFE40001,0xFFE40001,0xFBE40001,0xE9FC0032,0xE9FC0032,0xE9FC0032,0xFFD80009,0xFFD80009, -0xFBDC0001,0xF3FC0032,0xF3FC0032,0xFBC00001,0xF6000032,0xE9FC0032,0xE9FC0032,0xE9FC0032,0xFFD80009,0xFFD80009,0xFBDC0001,0xF3FC0032,0xF3FC0032,0xFBC00001,0xF6000032,0xF3FC0032,0xF3FC0032,0xFBC00001,0xF6000032,0xF6000032,0xFBEC0029,0xFFEC0029,0x1EC0034,0xF9EC0029,0xFDE80020,0xFFE40012,0xFFE0000D,0xFFD80008,0xF9EC0029,0xFFE80020,0xF1FC0032,0xFBC00001, -0xF1FC0032,0x1FC0005,0xFFF80004,0xFFF80001,0xFFF80000,0xFBFC0005,0xFFF80002,0xFFF40000,0xFDF80005,0xFFEC0000,0xFC000005,0xFBFC0005,0xFFF80002,0xFFF40000,0xFDF80005,0xFFEC0000,0xFC000005,0xFDF80005,0xFFEC0000,0xFC000005,0xFC000005,0xFBFC0005,0xFFF80002,0xFFF40000,0xFDF80005,0xFFEC0000,0xFC000005,0xFDF80005,0xFFEC0000,0xFC000005,0xFC000005,0xFDF80005, -0xFFEC0000,0xFC000005,0xFC000005,0xFC000005,0xFFF80004,0xE7FC0005,0xF7FC0005,0xFBFC0005,0xFFF80002,0xFFF00001,0xFFF00000,0xFFE40000,0xF9FC0005,0xFBFC0005,0xFFF00000,0xFC000005,0xFDF80005,0x1D80048,0x1D80048,0x1D80048,0x1D80048,0x1D80048,0x1D80048,0x1D80048,0x1D80048,0x1D80048,0x1D80048,0xFFD00008,0xFFD00008,0xFFD00008,0xFFD00008,0xFFD00008, -0xFFD00008,0xF7CC0001,0xF7CC0001,0xF7CC0001,0xF1CC0001,0xC7FC0048,0xC7FC0048,0xC7FC0048,0xC7FC0048,0xC7FC0048,0xC7FC0048,0xFBB80001,0xFBB80001,0xFBB80001,0xF1C00001,0xE3FC0048,0xE3FC0048,0xE3FC0048,0xF19C0001,0xEA00004A,0xF5D8003D,0x1D80048,0x1D80048,0xFDD40029,0xFFD0001D,0xFDD00014,0xFDD00014,0xFFCC0004,0xFDD40032,0xFFD00022,0xFFC80000,0xFBB80001, -0xDDF80048,}; -static const uint32_t g_etc1_to_bc7_m6_table63[] = { -0x1DC0000,0x1DC0000,0x1DC0000,0x1DC0000,0x1DC0000,0x1DC0000,0x1DC0000,0x1DC0000,0x1DC0000,0x1DC0000,0x1DC0000,0x1DC0000,0x1DC0000,0x1DC0000,0x1DC0000,0x1DC0000,0x1DC0000,0x1DC0000,0x1DC0000,0x1DC0000,0xCDFC0000,0xCDFC0000,0xCDFC0000,0xCDFC0000,0xCDFC0000,0xCDFC0000,0xCDFC0000,0xCDFC0000,0xCDFC0000,0xCDFC0000,0xE7F80000, -0xE7F80000,0xE7F80000,0xE7F80000,0xEC000001,0x1DC0000,0x1DC0000,0x1DC0000,0x1DC0000,0x1DC0000,0x1DC0000,0x1DC0000,0x1DC0000,0x1FC0000,0x1FC0000,0x1FC0000,0xCDFC0000,0xDFFC0000,0x1F40000,0x1F40000,0x1F40000,0x1F40000,0x1F40000,0x1F40000,0x1F40000,0x1F40000,0x1F40000,0x1F40000,0xF1FC0000,0xF1FC0000,0xF1FC0000,0xF1FC0000,0xF1FC0000, -0xF1FC0000,0xF9F80000,0xF9F80000,0xF9F80000,0xF8000001,0xF1FC0000,0xF1FC0000,0xF1FC0000,0xF1FC0000,0xF1FC0000,0xF1FC0000,0xF9F80000,0xF9F80000,0xF9F80000,0xF8000001,0xF9F80000,0xF9F80000,0xF9F80000,0xF8000001,0xF8000001,0xB7FC0000,0x1F40000,0x1F40000,0xDFFC0000,0xE9FC0000,0xEFFC0000,0xEFFC0000,0xF3FC0000,0xDFFC0000,0xE9FC0000,0xF7FC0000,0xF9F80000, -0xF7FC0000,0x1FC0001,0x1FC0001,0x1FC0001,0x1FC0001,0xFDFC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000, -0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFBFC0001,0xF7FC0001,0x1FC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFFFC0000,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0x1FC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000, -0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xF7FC0001,0xF7FC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFFF00000,0xFE000000, -0xFFFC0000,0x1F400C2,0xFDF000B2,0xFFF0009D,0xFFF00099,0xFFEC0098,0xFFEC007D,0xFFEC0074,0xFFEC0062,0xFFE80058,0xFFE80048,0xFFEC0089,0xFFE80069,0xFFE80059,0xFFE40040,0xFFE40030,0xFFE0001D,0xFFE40031,0xFFE0001D,0xFFDC0001,0xFDDC0011,0xEFFC00C2,0xFFEC00A7,0xFFE80099,0xFFE40070,0xFFE40060,0xFFDC0048,0xFFD80059,0xFFD80035,0xFFCC0009,0xFDCC0011,0xF7F800C2, -0xFFD40099,0xFFB80048,0xFD9C0011,0xF80000C2,0xFDF000B0,0xF3F400C2,0xF3F400C2,0xFFF0008E,0xFFEC006D,0xFFE8004A,0xFFE8003D,0xFFE40022,0xFFF000A2,0xFFF0008E,0xFFE0003F,0xFFCC0009,0xF5FC00C2,0x1FC0012,0xFFF80011,0xFFF8000E,0xFFF8000D,0xFFF8000C,0xFFF80009,0xFFF80008,0xFFF80006,0xFFF40004,0xFFF40000,0xFBFC0011,0xFFF8000E,0xFFF4000D,0xFFF00008,0xFFF00004, -0xFFF00000,0xFDF80011,0xFFEC000D,0xFFE00000,0xFC000011,0xFBFC0011,0xFFF8000E,0xFFF4000D,0xFFF00008,0xFFF00004,0xFFF00000,0xFDF80011,0xFFEC000D,0xFFE00000,0xFC000011,0xFDF80011,0xFFEC000D,0xFFE00000,0xFC000011,0xFC000011,0xFFF80011,0xF7FC0012,0xF7FC0012,0xFFF8000C,0xFFF4000E,0xFFF40006,0xFFF40005,0xFFEC0004,0xFFF8000C,0xFBFC0011,0xFFF0000D,0xFFE00000, -0xFDF80011,0x1F00099,0x1F00099,0x1F00099,0x1F00099,0xFFEC0074,0xFFEC0074,0xFFEC0074,0xFFE80058,0xFFE80058,0xFFE80048,0xFFE80059,0xFFE80059,0xFFE80059,0xFFE40030,0xFFE40030,0xFFE0001D,0xFFE0001D,0xFFE0001D,0xFFDC0001,0xFDDC000D,0xEBFC0099,0xEBFC0099,0xEBFC0099,0xFFE40060,0xFFE40060,0xFFDC0048,0xFFD80035,0xFFD80035,0xFFCC0009,0xFDCC000D,0xF5FC0099, -0xF5FC0099,0xFFB80048,0xFD9C000D,0xF600009A,0xFFEC0089,0xFFEC0090,0x1F00099,0xFFE80074,0xFFEC005D,0xFFE80046,0xFFE8003D,0xFFE40022,0xFBEC0089,0xFFE80072,0xFFE0003E,0xFFCC0009,0xF3FC0099,0x1F8000D,0x1F8000D,0x1F8000D,0x1F8000D,0xFFF80008,0xFFF80008,0xFFF80008,0xFFF40004,0xFFF40004,0xFFF40000,0xF7FC000D,0xF7FC000D,0xF7FC000D,0xFFF00004,0xFFF00004, -0xFFF00000,0xFBFC000D,0xFBFC000D,0xFFE00000,0xFC00000D,0xF7FC000D,0xF7FC000D,0xF7FC000D,0xFFF00004,0xFFF00004,0xFFF00000,0xFBFC000D,0xFBFC000D,0xFFE00000,0xFC00000D,0xFBFC000D,0xFBFC000D,0xFFE00000,0xFC00000D,0xFC00000D,0xF5FC000D,0xF5F8000D,0x1F8000D,0xFFF80008,0xFFF4000A,0xFFF40005,0xFFF40005,0xFFEC0004,0xFFF80008,0xFFF4000A,0xFBFC000D,0xFFE00000, -0xFBFC000D,0x1FC0002,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000, -0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0002,0xF7FC0002,0xF7FC0002,0xFDFC0002,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFFFC0000,0xFDFC0002,0xFDFC0002,0xFFFC0000,0xFE000000,0xFFFC0000,0x1E80048,0x1E80048,0x1E80048,0x1E80048,0x1E80048,0x1E80048,0x1E80048,0x1E80048,0x1E80048,0x1E80048,0xFFE0001D,0xFFE0001D,0xFFE0001D,0xFFE0001D,0xFFE0001D, -0xFFE0001D,0xFFDC0001,0xFFDC0001,0xFFDC0001,0xF9DC0001,0xDFFC0048,0xDFFC0048,0xDFFC0048,0xDFFC0048,0xDFFC0048,0xDFFC0048,0xFFCC0009,0xFFCC0009,0xFFCC0009,0xF9D00001,0xEFFC0048,0xEFFC0048,0xEFFC0048,0xF9AC0001,0xF200004A,0xFDE8003D,0x1E80048,0x1E80048,0xFDE40034,0xFFE40029,0xFFE00028,0xFFE00028,0xFFE00014,0xF9E8003D,0xFFE40032,0xFFDC000A,0xFFCC0009, -0xEBFC0048,}; -static const uint32_t g_etc1_to_bc7_m6_table64[] = { -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1, -0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, -0x0,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1, -0x1,0x100001,0x100001,0x100001,0x100001,0x2180000,0x2180000,0x2180000,0x300000,0x300000,0x8000000,0x2180000,0x2180000,0x2180000,0x300000,0x300000,0x8000000,0x300000,0x300000,0x8000000,0x8000000,0x2180000,0x2180000,0x2180000,0x300000,0x300000,0x8000000,0x300000,0x300000,0x8000000,0x8000000,0x300000, -0x300000,0x8000000,0x8000000,0x8000000,0x140000,0x140000,0x100001,0x180000,0x1C0000,0x240000,0x280000,0x3C0000,0x2140000,0x2180000,0x240000,0x8000000,0x240000,0x380001,0x540000,0xAC0000,0x1C000000,0x540000,0xAC0000,0x1C000000,0xAC0000,0x1C000000,0x1C000000,0x540000,0xAC0000,0x1C000000,0xAC0000,0x1C000000, -0x1C000000,0xAC0000,0x1C000000,0x1C000000,0x1C000000,0x540000,0xAC0000,0x1C000000,0xAC0000,0x1C000000,0x1C000000,0xAC0000,0x1C000000,0x1C000000,0x1C000000,0xAC0000,0x1C000000,0x1C000000,0x1C000000,0x1C000000,0x480000,0x63C0000,0x63C0000,0x600000,0x8C0000,0x1140000,0x1C000000,0x1C000000,0x24C0000,0x6C0000,0xFD00000,0x1C000000, -0x780000,0x140232,0x4E080039,0x28080039,0x1C040039,0x380000C8,0x28000011,0x1C000001,0x1C0000C8,0x16000048,0x120000C8,0x260001B9,0x22000096,0x18000051,0x18000110,0x16000088,0x120000EC,0x120001B9,0x1000010D,0x10000149,0xC0001B9,0x1C0232,0x1E000109,0x18000091,0x18000150,0x140000BB,0x12000110,0x120001DD,0x10000131,0xE000165,0xC0001C9,0x300232, -0x10000186,0xA0001AA,0xA0001F2,0x8000232,0x7400007B,0xFA0400D2,0xFE0C0082,0x3400007B,0x2200008A,0x1A00007B,0x16000061,0x140000B5,0x460000F1,0x280000BD,0x160000CB,0xE000165,0x240232,0x1801BA,0x4E080029,0x28080029,0x1C080029,0x380000C8,0x28000011,0x1C000001,0x1C0000C8,0x16000048,0x120000C8,0x22401B9,0x22000096,0x18000051,0x18000110,0x16000088, -0x120000EC,0x4C01B9,0x1000010D,0x10000149,0xC0001B9,0x22401B9,0x22000096,0x18000051,0x18000110,0x16000088,0x120000EC,0x4C01B9,0x1000010D,0x10000149,0xC0001B9,0x4C01B9,0x1000010D,0x10000149,0xC0001B9,0xC0001B9,0x7400007B,0xFA0400CE,0xFE0C005E,0x3400007B,0x2200008A,0x1A00007B,0x16000061,0x140000B5,0x500000DB,0x280000B4,0x160000CA,0x10000149, -0x3401B9,0x40039,0x40039,0x40039,0x40039,0x1A000000,0x1A000000,0x1A000000,0xC000000,0xC000000,0x8000000,0xA000029,0xA000029,0xA000029,0xC000010,0xC000010,0x6000008,0x6000029,0x6000029,0x4000019,0x4000029,0x80036,0x80036,0x80036,0x6000018,0x6000018,0x600000C,0x600002D,0x600002D,0x400001D,0x400002D,0xC0036, -0xC0036,0x4000022,0x2000031,0x2000036,0x3600000A,0x88000000,0x40039,0x1C000011,0x1000000D,0xC00000D,0xC00000A,0xA000011,0x1600001A,0x10000013,0x6000029,0x400001D,0xC0036,0x80029,0x80029,0x80029,0x80029,0x1A000000,0x1A000000,0x1A000000,0xC000000,0xC000000,0x8000000,0xC0029,0xC0029,0xC0029,0xC000010,0xC000010, -0x6000008,0x140029,0x140029,0x4000019,0x4000029,0xC0029,0xC0029,0xC0029,0xC000010,0xC000010,0x6000008,0x140029,0x140029,0x4000019,0x4000029,0x140029,0x140029,0x4000019,0x4000029,0x4000029,0x3600000A,0x88000000,0x80029,0x1C000011,0x1000000D,0xC00000D,0xC00000A,0xA000011,0x16000019,0x10000012,0x100029,0x4000019, -0x100029,0x2400CA,0x42140001,0x26100001,0x1C100001,0x3800C8,0x28000011,0x1C000001,0x7000C8,0x16000048,0x120000C8,0x3800C8,0x28000011,0x1C000001,0x7000C8,0x16000048,0x120000C8,0x7000C8,0x16000048,0x120000C8,0x120000C8,0x3800C8,0x28000011,0x1C000001,0x7000C8,0x16000048,0x120000C8,0x7000C8,0x16000048,0x120000C8,0x120000C8,0x7000C8, -0x16000048,0x120000C8,0x120000C8,0x120000C8,0x7400004A,0x2800C8,0xF418000D,0x3C000041,0x2A000049,0x1E000041,0x18000034,0x18000061,0x50000062,0x34000050,0x1C000028,0x120000C8,0x5000C8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, -0x0,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x1,0x2,0x2,0x2,0x2,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1, -0x2,}; -static const uint32_t g_etc1_to_bc7_m6_table65[] = { -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1, -0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, -0x0,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1, -0x1,0x200001,0x200001,0x200001,0x200001,0x2300000,0x2300000,0x2300000,0x640000,0x640000,0x10000000,0x2300000,0x2300000,0x2300000,0x640000,0x640000,0x10000000,0x640000,0x640000,0x10000000,0x10000000,0x2300000,0x2300000,0x2300000,0x640000,0x640000,0x10000000,0x640000,0x640000,0x10000000,0x10000000,0x640000, -0x640000,0x10000000,0x10000000,0x10000000,0x280000,0x240000,0x200001,0x22C0000,0x380000,0x480000,0x500000,0x780000,0x2280000,0x2300000,0x480000,0x10000000,0x480000,0x480001,0x6C0000,0xDC0000,0x24000000,0x6C0000,0xDC0000,0x24000000,0xDC0000,0x24000000,0x24000000,0x6C0000,0xDC0000,0x24000000,0xDC0000,0x24000000, -0x24000000,0xDC0000,0x24000000,0x24000000,0x24000000,0x6C0000,0xDC0000,0x24000000,0xDC0000,0x24000000,0x24000000,0xDC0000,0x24000000,0x24000000,0x24000000,0xDC0000,0x24000000,0x24000000,0x24000000,0x24000000,0x5C0000,0xE4C0000,0xE4C0000,0x7C0000,0xB40000,0x1600000,0x24000000,0x24000000,0x640000,0x880000,0x17E00000,0x24000000, -0x9C0000,0x1C03A2,0x620C00C1,0x320C00C2,0x240C00C1,0x500000C8,0x34000001,0x26000014,0x260000CA,0x20000029,0x1A0000C8,0x360002AE,0x2E0000FE,0x220000A1,0x22000153,0x1E000098,0x18000110,0x1A0002AE,0x160001A9,0x160001C9,0x100002B1,0x2803A2,0x280001B3,0x2200011A,0x220001CC,0x1E0000FC,0x18000150,0x180002F1,0x160001E9,0x14000205,0x100002D5,0x4C03A2, -0x1600028A,0x10000282,0x1000032A,0xC0003A2,0x96000085,0xFE0C0142,0xF2140189,0x48000099,0x360000A2,0x26000098,0x1E000065,0x1C0000E0,0x6400015C,0x3C0000E9,0x1E000145,0x14000205,0x3403A2,0x2402AE,0x5E100091,0x32100091,0x24100091,0x500000C8,0x34000001,0x26040011,0x260000CA,0x20000029,0x1A0000C8,0x3402AE,0x2E0000FE,0x220000A1,0x22000153,0x1E000098, -0x18000110,0x6802AE,0x160001A9,0x160001C9,0x100002B1,0x3402AE,0x2E0000FE,0x220000A1,0x22000153,0x1E000098,0x18000110,0x6802AE,0x160001A9,0x160001C9,0x100002B1,0x6802AE,0x160001A9,0x160001C9,0x100002B1,0x100002B1,0x96000085,0xFE0C011E,0xF418010D,0x48000099,0x360000A2,0x26000098,0x1E000065,0x1C0000E0,0x64000138,0x3C0000D9,0x1E000141,0x160001C9, -0x4C02AE,0xC00C1,0xC00C1,0xC00C1,0xC00C1,0x32000000,0x32000000,0x32000000,0x18000000,0x18000000,0x10000000,0x16000091,0x16000091,0x16000091,0x12000034,0x12000034,0xE00001D,0xC000091,0xC000091,0xA000055,0x8000091,0x1000C1,0x1000C1,0x1000C1,0x12000058,0x12000058,0xC000030,0xC0000A1,0xC0000A1,0xA000065,0x6000099,0x2000C1, -0x2000C1,0xA000086,0x60000AE,0x40000C2,0x6000002D,0xF8000001,0xC00C1,0x3200003A,0x1E000034,0x1A00003A,0x1600002D,0xE000048,0x3400005E,0x26000054,0xE000092,0xA000065,0x1800C1,0x100091,0x100091,0x100091,0x100091,0x32000000,0x32000000,0x32000000,0x18000000,0x18000000,0x10000000,0x180091,0x180091,0x180091,0x12000034,0x12000034, -0xE00001D,0x2C0091,0x2C0091,0xA000055,0x8000091,0x180091,0x180091,0x180091,0x12000034,0x12000034,0xE00001D,0x2C0091,0x2C0091,0xA000055,0x8000091,0x2C0091,0x2C0091,0xA000055,0x8000091,0x8000091,0x6000002D,0xF8000001,0x100091,0x3200003A,0x1E000034,0x1A00003A,0x1600002D,0xE000048,0x34000055,0x26000050,0x200091,0xA000055, -0x200091,0x3400CA,0x4A240001,0x2E200001,0x24200001,0x5000C8,0x34000001,0x240C0001,0xA000C8,0x20000029,0x1A0000C8,0x5000C8,0x34000001,0x240C0001,0xA000C8,0x20000029,0x1A0000C8,0xA000C8,0x20000029,0x1A0000C8,0x1A0000C8,0x5000C8,0x34000001,0x240C0001,0xA000C8,0x20000029,0x1A0000C8,0xA000C8,0x20000029,0x1A0000C8,0x1A0000C8,0xA000C8, -0x20000029,0x1A0000C8,0x1A0000C8,0x1A0000C8,0xA400002D,0x43800C8,0xFC28000D,0x52000022,0x36000029,0x28000029,0x22000014,0x20000041,0x72000048,0x46000034,0x2400000D,0x1A0000C8,0x7000C8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, -0x0,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x1,0x2,0x2,0x2,0x2,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1, -0x2,}; -static const uint32_t g_etc1_to_bc7_m6_table66[] = { -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1, -0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0xC0001,0xC0001,0xC0001,0xC0001,0xC0001,0xC0001,0xC0001,0xC0001,0xC0001,0xC0001,0x140000,0x140000,0x140000,0x140000,0x140000, -0x140000,0x240000,0x240000,0x240000,0x6000000,0x140000,0x140000,0x140000,0x140000,0x140000,0x140000,0x240000,0x240000,0x240000,0x6000000,0x240000,0x240000,0x240000,0x6000000,0x6000000,0xE0C0000,0xC0001,0xC0001,0x100000,0x100000,0x2100000,0x2100000,0x2140000,0x100000,0x100000,0x1C0000,0x240000, -0x1C0000,0x300001,0x300001,0x300001,0x300001,0x480000,0x480000,0x480000,0x940000,0x940000,0x18000000,0x480000,0x480000,0x480000,0x940000,0x940000,0x18000000,0x940000,0x940000,0x18000000,0x18000000,0x480000,0x480000,0x480000,0x940000,0x940000,0x18000000,0x940000,0x940000,0x18000000,0x18000000,0x940000, -0x940000,0x18000000,0x18000000,0x18000000,0x4380000,0x2340000,0x300001,0x440000,0x540000,0x680000,0x780000,0xB40000,0x23C0000,0x480000,0x680000,0x18000000,0x680000,0x580001,0x840000,0x10C0000,0x2C000000,0x840000,0x10C0000,0x2C000000,0x10C0000,0x2C000000,0x2C000000,0x840000,0x10C0000,0x2C000000,0x10C0000,0x2C000000, -0x2C000000,0x10C0000,0x2C000000,0x2C000000,0x2C000000,0x840000,0x10C0000,0x2C000000,0x10C0000,0x2C000000,0x2C000000,0x10C0000,0x2C000000,0x2C000000,0x2C000000,0x10C0000,0x2C000000,0x2C000000,0x2C000000,0x2C000000,0x700000,0x600000,0x600000,0x2940000,0xDC0000,0x1B00000,0x2C000000,0x2C000000,0x2780000,0xA80000,0x1FF00000,0x2C000000, -0xBC0000,0x2804C3,0x7414014E,0x3C14014F,0x2C14014E,0x600800E1,0x4008001A,0x2C0C0049,0x300800E3,0x28040036,0x220800E1,0x4E0002D3,0x3A0000CD,0x2C0000A4,0x2E00011A,0x2800003D,0x220000D8,0x260002D3,0x2000017A,0x1C0001A0,0x180002D4,0x3804C1,0x34000216,0x2800016D,0x280001F7,0x280000E6,0x22000151,0x22000354,0x200001F3,0x1C000204,0x18000314,0x7004C1, -0x1C00031D,0x1A000305,0x160003C9,0x120004C1,0xC2000036,0xF41801F1,0xF8200266,0x6600003E,0x40000049,0x34000043,0x2A000015,0x24000084,0x82000121,0x5000009F,0x26000118,0x1C000204,0x5004C1,0x3402D3,0x662000A2,0x3A2000A2,0x2C2000A2,0x581000C9,0x3C100002,0x2E100015,0x300C00C9,0x2A080026,0x220C00C9,0x4C02D3,0x3A0000CD,0x2C0400A2,0x2E00011A,0x2800003D, -0x220000D8,0x9802D3,0x2000017A,0x1C0001A0,0x180002D4,0x4C02D3,0x3A0000CD,0x2C0400A2,0x2E00011A,0x2800003D,0x220000D8,0x9802D3,0x2000017A,0x1C0001A0,0x180002D4,0x9802D3,0x2000017A,0x1C0001A0,0x180002D4,0x180002D4,0xC2000036,0xF8200139,0xFC280126,0x6600003E,0x40000049,0x34000043,0x2A000015,0x24000084,0x900000DD,0x50000086,0x26000114,0x1C0001A0, -0x6C02D3,0x14014E,0x14014E,0x14014E,0x14014E,0x42080019,0x42080019,0x42080019,0x22080019,0x22080019,0x18080019,0x300000A2,0x300000A2,0x300000A2,0x22000011,0x22000011,0x18000001,0x160000A4,0x160000A4,0x14000041,0xE0000A4,0x20014D,0x20014D,0x20014D,0x1E00007D,0x1E00007D,0x14000041,0x120000D8,0x120000D8,0x1200006C,0xE0000BD,0x3C014D, -0x3C014D,0x100000C9,0xA000105,0xA00014D,0xA000000D,0xFE0C002E,0x14014E,0x50000019,0x32000019,0x2A000014,0x2600000D,0x20000025,0x56000063,0x3C000042,0x1E0000A6,0x1200006C,0x2C014D,0x2000A2,0x2000A2,0x2000A2,0x2000A2,0x3A100001,0x3A100001,0x3A100001,0x20100001,0x20100001,0x180C0001,0x3000A2,0x3000A2,0x3000A2,0x22000011,0x22000011, -0x18000001,0x5C00A2,0x5C00A2,0x14000041,0xE0000A4,0x3000A2,0x3000A2,0x3000A2,0x22000011,0x22000011,0x18000001,0x5C00A2,0x5C00A2,0x14000041,0xE0000A4,0x5C00A2,0x5C00A2,0x14000041,0xE0000A4,0xE0000A4,0xA000000D,0xF0100005,0x2000A2,0x50000019,0x32000019,0x2A000014,0x2600000D,0x20000025,0x64000041,0x3C000032,0x4000A2,0x14000041, -0x4000A2,0x4400CA,0x52340001,0x36300001,0x2C300001,0x6800C8,0x3C100001,0x2C1C0001,0xD000C8,0x2A000014,0x220000C8,0x6800C8,0x3C100001,0x2C1C0001,0xD000C8,0x2A000014,0x220000C8,0xD000C8,0x2A000014,0x220000C8,0x220000C8,0x6800C8,0x3C100001,0x2C1C0001,0xD000C8,0x2A000014,0x220000C8,0xD000C8,0x2A000014,0x220000C8,0x220000C8,0xD000C8, -0x2A000014,0x220000C8,0x220000C8,0x220000C8,0xC4040019,0xC4800C8,0xF4380012,0x6600000D,0x42040019,0x36000011,0x2C000004,0x28000029,0x94000032,0x58000019,0x2E000001,0x220000C8,0x9400C8,0x80019,0x80019,0x80019,0x80019,0x80019,0x80019,0x80019,0x80019,0x80019,0x80019,0x14000000,0x14000000,0x14000000,0x14000000,0x14000000, -0x14000000,0xA000000,0xA000000,0xA000000,0x6000000,0x80019,0x80019,0x80019,0x80019,0x80019,0x80019,0x6000008,0x6000008,0x6000008,0x6000004,0xC0019,0xC0019,0xC0019,0x400000D,0x2000019,0x68000000,0x80019,0x80019,0x2E000000,0x20000000,0x18000000,0x18000000,0x10000000,0x20000008,0x20000004,0xC000001,0x6000008, -0xC0019,}; -static const uint32_t g_etc1_to_bc7_m6_table67[] = { -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1, -0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1C0001,0x1C0001,0x1C0001,0x1C0001,0x1C0001,0x1C0001,0x1C0001,0x1C0001,0x1C0001,0x1C0001,0x2C0000,0x2C0000,0x2C0000,0x2C0000,0x2C0000, -0x2C0000,0x580000,0x580000,0x580000,0xE000000,0x2C0000,0x2C0000,0x2C0000,0x2C0000,0x2C0000,0x2C0000,0x580000,0x580000,0x580000,0xE000000,0x580000,0x580000,0x580000,0xE000000,0xE000000,0x200000,0x1C0001,0x1C0001,0x6200000,0x240000,0x280000,0x280000,0x300000,0x6200000,0x240000,0x3C0000,0x580000, -0x3C0000,0x400001,0x400001,0x400001,0x400001,0x600000,0x600000,0x600000,0xC40000,0xC40000,0x20000000,0x600000,0x600000,0x600000,0xC40000,0xC40000,0x20000000,0xC40000,0xC40000,0x20000000,0x20000000,0x600000,0x600000,0x600000,0xC40000,0xC40000,0x20000000,0xC40000,0xC40000,0x20000000,0x20000000,0xC40000, -0xC40000,0x20000000,0x20000000,0x20000000,0x4C0000,0xA440000,0x400001,0x580000,0x26C0000,0x8C0000,0xA00000,0xF00000,0x4500000,0x600000,0x8C0000,0x20000000,0x8C0000,0x680001,0x9C0000,0x13C0000,0x34000000,0x9C0000,0x13C0000,0x34000000,0x13C0000,0x34000000,0x34000000,0x9C0000,0x13C0000,0x34000000,0x13C0000,0x34000000, -0x34000000,0x13C0000,0x34000000,0x34000000,0x34000000,0x9C0000,0x13C0000,0x34000000,0x13C0000,0x34000000,0x34000000,0x13C0000,0x34000000,0x34000000,0x34000000,0x13C0000,0x34000000,0x34000000,0x34000000,0x34000000,0x840000,0x700000,0x700000,0xB00000,0x1000000,0x3F00000,0x34000000,0x34000000,0x900000,0xC40000,0x29C40000,0x34000000, -0xE00000,0x340627,0x80200222,0x46200222,0x34200222,0x72100139,0x4C100076,0x361400C1,0x3A10013B,0x320C0082,0x2A100139,0x660002D3,0x4C0000A5,0x360800C8,0x3C0000E9,0x32000009,0x2A0000C9,0x320002D3,0x2C00012A,0x26000161,0x200002D4,0x480625,0x400002BE,0x34000225,0x3400024F,0x2E000106,0x2800017D,0x2E0003BC,0x280001FB,0x24000204,0x1E00034C,0x940625, -0x26000412,0x200003A5,0x1C00047D,0x18000625,0xF8000009,0xFA2402DD,0xFE2C038E,0x7E00000B,0x5600000E,0x40000009,0x36000004,0x30000032,0xA40000F6,0x66000062,0x340000D4,0x24000204,0x680625,0x4402D3,0x6E3000A2,0x423000A2,0x343000A2,0x602000C9,0x44200002,0x36200015,0x381C00C9,0x32180026,0x2A1C00C9,0x6402D3,0x4C0000A5,0x341400A2,0x3C0000E9,0x32000009, -0x2A0400C8,0xCC02D3,0x2C00012A,0x26000161,0x200002D4,0x6402D3,0x4C0000A5,0x341400A2,0x3C0000E9,0x32000009,0x2A0400C8,0xCC02D3,0x2C00012A,0x26000161,0x200002D4,0xCC02D3,0x2C00012A,0x26000161,0x200002D4,0x200002D4,0xF8000009,0xFE2C0141,0xF438013B,0x7E00000B,0x5600000E,0x40000009,0x34040002,0x30000032,0xAC000086,0x68000035,0x340000CB,0x26000161, -0x9002D3,0x200222,0x200222,0x200222,0x200222,0x52100071,0x52100071,0x52100071,0x2C100071,0x2C100071,0x20100071,0x480000A2,0x480000A2,0x480000A2,0x2E000001,0x2E000001,0x2204000C,0x220000A2,0x220000A2,0x1C000020,0x160000A4,0x300222,0x300222,0x300222,0x280000C6,0x280000C6,0x1E000081,0x1E000118,0x1E000118,0x1A00007E,0x160000E4,0x5C0222, -0x5C0222,0x16000145,0x14000178,0xE000225,0xE8000000,0xF21400BD,0x200222,0x7A000004,0x50000001,0x3C000002,0x36000000,0x2A000005,0x8200006D,0x56000032,0x2C0000AB,0x1A00007E,0x400222,0x3000A2,0x3000A2,0x3000A2,0x3000A2,0x42200001,0x42200001,0x42200001,0x28200001,0x28200001,0x201C0001,0x24400A2,0x24400A2,0x24400A2,0x2E000001,0x2E000001, -0x200C0000,0x8C00A2,0x8C00A2,0x1C000020,0x160000A4,0x24400A2,0x24400A2,0x24400A2,0x2E000001,0x2E000001,0x200C0000,0x8C00A2,0x8C00A2,0x1C000020,0x160000A4,0x8C00A2,0x8C00A2,0x1C000020,0x160000A4,0x160000A4,0xE8000000,0xF8200005,0x3000A2,0x7A000004,0x50000001,0x3C000002,0x36000000,0x2A000005,0x96000028,0x5A000012,0x6400A2,0x1C000020, -0x6400A2,0x5400CA,0x5A440001,0x3E400001,0x34400001,0x8000C8,0x44200001,0x342C0001,0x10000C8,0x32000005,0x2A0000C8,0x8000C8,0x44200001,0x342C0001,0x10000C8,0x32000005,0x2A0000C8,0x10000C8,0x32000005,0x2A0000C8,0x2A0000C8,0x8000C8,0x44200001,0x342C0001,0x10000C8,0x32000005,0x2A0000C8,0x10000C8,0x32000005,0x2A0000C8,0x2A0000C8,0x10000C8, -0x32000005,0x2A0000C8,0x2A0000C8,0x2A0000C8,0xF8000008,0x5C00C8,0xFC480012,0x7E000002,0x56000005,0x3E040005,0x34080000,0x32000014,0xB6000020,0x6E00000A,0x36100001,0x2A0000C8,0xB400C8,0x100071,0x100071,0x100071,0x100071,0x100071,0x100071,0x100071,0x100071,0x100071,0x100071,0x2C000000,0x2C000000,0x2C000000,0x2C000000,0x2C000000, -0x2C000000,0x16000000,0x16000000,0x16000000,0xE000000,0x140071,0x140071,0x140071,0x140071,0x140071,0x140071,0x12000028,0x12000028,0x12000028,0xC000014,0x240071,0x240071,0x240071,0xA000041,0x6000071,0xE8000000,0x100071,0x100071,0x68000000,0x48000000,0x36000000,0x36000000,0x24000000,0x52000022,0x42000011,0x1C000004,0x12000028, -0x1C0071,}; -static const uint32_t g_etc1_to_bc7_m6_table68[] = { -0x80000,0x80000,0x80000,0x80000,0x80000,0x80000,0x80000,0x80000,0x80000,0x80000,0x80000,0x80000,0x80000,0x80000,0x80000,0x80000,0x80000,0x80000,0x80000,0x80000,0xC0000,0xC0000,0xC0000,0xC0000,0xC0000,0xC0000,0xC0000,0xC0000,0xC0000,0xC0000,0x140000, -0x140000,0x140000,0x140000,0x2000001,0x80000,0x80000,0x80000,0x80000,0x80000,0x80000,0x80000,0x80000,0x80000,0x80000,0x80000,0xC0000,0x100000,0x300000,0x300000,0x300000,0x300000,0x300000,0x300000,0x300000,0x300000,0x300000,0x300000,0x2440000,0x2440000,0x2440000,0x2440000,0x2440000, -0x2440000,0x8C0000,0x8C0000,0x8C0000,0x16000001,0x2440000,0x2440000,0x2440000,0x2440000,0x2440000,0x2440000,0x8C0000,0x8C0000,0x8C0000,0x16000001,0x8C0000,0x8C0000,0x8C0000,0x16000001,0x16000001,0x340000,0x300000,0x300000,0x380000,0x3C0000,0x400000,0x400000,0x500000,0x380000,0x3C0000,0x640000,0x8C0000, -0x640000,0x540000,0x540000,0x540000,0x540000,0x7C0000,0x7C0000,0x7C0000,0xFC0000,0xFC0000,0x28000001,0x7C0000,0x7C0000,0x7C0000,0xFC0000,0xFC0000,0x28000001,0xFC0000,0xFC0000,0x28000001,0x28000001,0x7C0000,0x7C0000,0x7C0000,0xFC0000,0xFC0000,0x28000001,0xFC0000,0xFC0000,0x28000001,0x28000001,0xFC0000, -0xFC0000,0x28000001,0x28000001,0x28000001,0x2600000,0x4580000,0x540000,0x2700000,0x8C0000,0xB00000,0xCC0000,0x1340000,0x680000,0x7C0000,0xB00000,0x28000001,0xB00000,0x7C0000,0xB80000,0x1740000,0x3C000001,0xB80000,0x1740000,0x3C000001,0x1740000,0x3C000001,0x3C000001,0xB80000,0x1740000,0x3C000001,0x1740000,0x3C000001, -0x3C000001,0x1740000,0x3C000001,0x3C000001,0x3C000001,0xB80000,0x1740000,0x3C000001,0x1740000,0x3C000001,0x3C000001,0x1740000,0x3C000001,0x3C000001,0x3C000001,0x1740000,0x3C000001,0x3C000001,0x3C000001,0x3C000001,0x9C0000,0x840000,0x840000,0xD00000,0x12C0000,0xDF80000,0x3C000001,0x3C000001,0xA80000,0xE80000,0x31F40000,0x3C000001, -0x1080000,0x400738,0x8A3002D4,0x503002D4,0x3C3002D5,0x801C0190,0x581C00D5,0x3E24013A,0x461C0190,0x3A1C00D5,0x321C0192,0x7A0802D3,0x5A0800A2,0x421400FF,0x4A0800D1,0x3C080002,0x320C00D7,0x3C0802D4,0x380000FD,0x3000013B,0x2A0802D3,0x600734,0x5200031F,0x3C0802D4,0x46000252,0x3A000107,0x320001A4,0x3A0003C9,0x340001AE,0x2E0001B3,0x2800032C,0xC40734, -0x2C000479,0x2C0003F2,0x260004DF,0x20000734,0xFC100021,0xF23403D0,0xF63C049C,0x92080000,0x64080001,0x4A080002,0x3E0C0012,0x3A080011,0xD000008E,0x7E000018,0x3E0000AB,0x2E0001B3,0x8C0734,0x5402D4,0x764400A4,0x4A4400A4,0x3C4000A5,0x6C3000C8,0x4E300001,0x3E340015,0x403000C8,0x3A2C0026,0x323000CA,0x8002D3,0x580C00A2,0x3C2800A3,0x4C0000C9,0x3C080002, -0x341400CA,0x10002D3,0x380000ED,0x3000012B,0x2A0002D3,0x8002D3,0x580C00A2,0x3C2800A3,0x4C0000C9,0x3C080002,0x341400CA,0x10002D3,0x380000ED,0x3000012B,0x2A0002D3,0x10002D3,0x380000ED,0x3000012B,0x2A0002D3,0x2A0002D3,0xFE140009,0xFA44014C,0xFE4C0138,0x92080000,0x64080001,0x4A080002,0x3E140002,0x3A00000A,0xD000003D,0x7E000008,0x3E0000AB,0x3000012B, -0xB402D3,0x3002D4,0x3002D4,0x3002D4,0x3002D4,0x621C00C8,0x621C00C8,0x621C00C8,0x361C00C8,0x361C00C8,0x281C00C9,0x5A0800A2,0x5A0800A2,0x5A0800A2,0x3C080001,0x3C080001,0x2C0C0026,0x2E0800A2,0x2E0800A2,0x28040015,0x200800A2,0x4402D3,0x4402D3,0x4402D3,0x340000FE,0x340000FE,0x2A0000C9,0x2E00011D,0x2E00011D,0x2400005A,0x1E0000CE,0x8802D3, -0x8802D3,0x20000199,0x1C0001A3,0x160002D3,0xFE0C0009,0xFA240139,0x3002D4,0x92080000,0x60080001,0x4A080001,0x440C0006,0x36080002,0xB400004B,0x76000012,0x3E0000A2,0x2400005A,0x6002D3,0x4000A4,0x4000A4,0x4000A4,0x4000A4,0x4E300000,0x4E300000,0x4E300000,0x32300000,0x32300000,0x28300001,0x6000A2,0x6000A2,0x6000A2,0x38100001,0x38100001, -0x28200001,0xC400A2,0xC400A2,0x2600000D,0x200000A2,0x6000A2,0x6000A2,0x6000A2,0x38100001,0x38100001,0x28200001,0xC400A2,0xC400A2,0x2600000D,0x200000A2,0xC400A2,0xC400A2,0x2600000D,0x200000A2,0x200000A2,0xEA140000,0xF2340008,0x4000A4,0x92080000,0x5E0C0000,0x480C0000,0x3E140001,0x38040000,0xC200000D,0x7C000002,0x8C00A2,0x2600000D, -0x8C00A2,0x6800C8,0x66540000,0x46540001,0x3C540001,0x29800C8,0x4E300001,0x3C400001,0x13800C8,0x3C040001,0x320000CA,0x29800C8,0x4E300001,0x3C400001,0x13800C8,0x3C040001,0x320000CA,0x13800C8,0x3C040001,0x320000CA,0x320000CA,0x29800C8,0x4E300001,0x3C400001,0x13800C8,0x3C040001,0x320000CA,0x13800C8,0x3C040001,0x320000CA,0x320000CA,0x13800C8, -0x3C040001,0x320000CA,0x320000CA,0x320000CA,0xFE140008,0xE6C00C8,0xF65C0019,0x8E0C0000,0x64040001,0x4C040000,0x3C1C0001,0x3A00000A,0xD6040012,0x7E040002,0x40200000,0x320000CA,0xDC00C8,0x1C00C8,0x1C00C8,0x1C00C8,0x1C00C8,0x1C00C8,0x1C00C8,0x1C00C8,0x1C00C8,0x1C00C8,0x1C00C8,0x40080000,0x40080000,0x40080000,0x40080000,0x40080000, -0x40080000,0x20080001,0x20080001,0x20080001,0x16080001,0x2800C8,0x2800C8,0x2800C8,0x2800C8,0x2800C8,0x2800C8,0x1E00002D,0x1E00002D,0x1E00002D,0x16000011,0x5000C8,0x5000C8,0x5000C8,0x10000062,0xC0000CA,0xFE0C0008,0x1C00C8,0x1C00C8,0x8E080000,0x64080000,0x4E080000,0x4E080000,0x34080000,0x92000022,0x74000009,0x28040001,0x1E00002D, -0x3800C8,}; -static const uint32_t g_etc1_to_bc7_m6_table69[] = { -0x180000,0x180000,0x180000,0x180000,0x180000,0x180000,0x180000,0x180000,0x180000,0x180000,0x180000,0x180000,0x180000,0x180000,0x180000,0x180000,0x180000,0x180000,0x180000,0x180000,0x240000,0x240000,0x240000,0x240000,0x240000,0x240000,0x240000,0x240000,0x240000,0x240000,0x440000, -0x440000,0x440000,0x440000,0xA000001,0x180000,0x180000,0x180000,0x180000,0x180000,0x180000,0x180000,0x180000,0x4180000,0x4180000,0x4180000,0x240000,0x300000,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x25C0000,0x25C0000,0x25C0000,0x25C0000,0x25C0000, -0x25C0000,0xBC0000,0xBC0000,0xBC0000,0x1E000001,0x25C0000,0x25C0000,0x25C0000,0x25C0000,0x25C0000,0x25C0000,0xBC0000,0xBC0000,0xBC0000,0x1E000001,0xBC0000,0xBC0000,0xBC0000,0x1E000001,0x1E000001,0x440000,0x400000,0x400000,0x4480000,0x500000,0x2540000,0x2540000,0x6C0000,0x4480000,0x500000,0x880000,0xBC0000, -0x880000,0x640000,0x640000,0x640000,0x640000,0x940000,0x940000,0x940000,0x12C0000,0x12C0000,0x30000001,0x940000,0x940000,0x940000,0x12C0000,0x12C0000,0x30000001,0x12C0000,0x12C0000,0x30000001,0x30000001,0x940000,0x940000,0x940000,0x12C0000,0x12C0000,0x30000001,0x12C0000,0x12C0000,0x30000001,0x30000001,0x12C0000, -0x12C0000,0x30000001,0x30000001,0x30000001,0x740000,0xC680000,0x640000,0x880000,0xA80000,0xD40000,0xF40000,0x1700000,0x7C0000,0x940000,0xD40000,0x30000001,0xD40000,0x8C0000,0xD00000,0x1A40000,0x44000001,0xD00000,0x1A40000,0x44000001,0x1A40000,0x44000001,0x44000001,0xD00000,0x1A40000,0x44000001,0x1A40000,0x44000001, -0x44000001,0x1A40000,0x44000001,0x44000001,0x44000001,0xD00000,0x1A40000,0x44000001,0x1A40000,0x44000001,0x44000001,0x1A40000,0x44000001,0x44000001,0x44000001,0x1A40000,0x44000001,0x44000001,0x44000001,0x44000001,0xB00000,0x2940000,0x2940000,0xEC0000,0x1540000,0x17F80000,0x44000001,0x44000001,0x2BC0000,0x1040000,0x3BC80000,0x44000001, -0x1280000,0x500738,0x924002D4,0x584002D4,0x444002D5,0x882C0190,0x602C00D5,0x4634013A,0x4E2C0190,0x422C00D5,0x3A2C0192,0x821802D3,0x621800A2,0x4A2400FF,0x521800D1,0x44180002,0x3A1C00D7,0x441802D4,0x401000FD,0x3810013B,0x321802D3,0x780734,0x620002DD,0x441802D4,0x520001E2,0x460000CF,0x3A080192,0x46000361,0x4000011E,0x3800012F,0x300002EB,0xF40734, -0x38000401,0x32000352,0x2C000477,0x28000734,0xFE20002A,0xFA4403D0,0xFE4C049C,0x9A180000,0x6C180001,0x52180002,0x461C0012,0x42180011,0xF6000022,0x8E080002,0x480C00A9,0x3800012F,0xAC0734,0x6402D4,0x7E5400A4,0x525400A4,0x445000A5,0x744000C8,0x56400001,0x46440015,0x484000C8,0x423C0026,0x3A4000CA,0x9802D3,0x601C00A2,0x443800A3,0x541000C9,0x44180002, -0x3C2400CA,0x13002D3,0x420000CB,0x380000FE,0x320002D3,0x9802D3,0x601C00A2,0x443800A3,0x541000C9,0x44180002,0x3C2400CA,0x13002D3,0x420000CB,0x380000FE,0x320002D3,0x13002D3,0x420000CB,0x380000FE,0x320002D3,0x320002D3,0xF8280011,0xF254015E,0xF65C014D,0x9A180000,0x6C180001,0x52180002,0x46240002,0x440C0005,0xFA000013,0x8E080001,0x4A0400A2,0x380000FE, -0xD802D3,0x4002D4,0x4002D4,0x4002D4,0x4002D4,0x6A2C00C8,0x6A2C00C8,0x6A2C00C8,0x3E2C00C8,0x3E2C00C8,0x302C00C9,0x621800A2,0x621800A2,0x621800A2,0x44180001,0x44180001,0x341C0026,0x361800A2,0x361800A2,0x30140015,0x281800A2,0x5C02D3,0x5C02D3,0x5C02D3,0x460000CE,0x460000CE,0x321000C9,0x3A0000D5,0x3A0000D5,0x2E000012,0x280000A3,0xB802D3, -0xB802D3,0x2A00015B,0x2400016B,0x1E0002D3,0xFC1C0011,0xF234014C,0x4002D4,0x9A180000,0x68180001,0x52180001,0x4C1C0006,0x3E180002,0xE400000D,0x8E080001,0x461000A2,0x2E000012,0x8002D3,0x5000A4,0x5000A4,0x5000A4,0x5000A4,0x56400000,0x56400000,0x56400000,0x3A400000,0x3A400000,0x30400001,0x7800A2,0x7800A2,0x7800A2,0x40200001,0x40200001, -0x30300001,0xF400A2,0xF400A2,0x30000002,0x280000A2,0x7800A2,0x7800A2,0x7800A2,0x40200001,0x40200001,0x30300001,0xF400A2,0xF400A2,0x30000002,0x280000A2,0xF400A2,0xF400A2,0x30000002,0x280000A2,0x280000A2,0xF2240000,0xFA440008,0x5000A4,0x9A180000,0x661C0000,0x501C0000,0x46240001,0x40140000,0xF4000004,0x8E080000,0xAC00A2,0x30000002, -0xAC00A2,0x7800C8,0x6E640000,0x4E640001,0x44640001,0x2B000C8,0x56400001,0x44500001,0x16800C8,0x44140001,0x3A0000CA,0x2B000C8,0x56400001,0x44500001,0x16800C8,0x44140001,0x3A0000CA,0x16800C8,0x44140001,0x3A0000CA,0x3A0000CA,0x2B000C8,0x56400001,0x44500001,0x16800C8,0x44140001,0x3A0000CA,0x16800C8,0x44140001,0x3A0000CA,0x3A0000CA,0x16800C8, -0x44140001,0x3A0000CA,0x3A0000CA,0x3A0000CA,0xF828000D,0x8000C8,0xFE6C0019,0x961C0000,0x6C140001,0x54140000,0x442C0001,0x44000002,0xF8040008,0x90080000,0x48300000,0x3A0000CA,0xFC00C8,0x2C00C8,0x2C00C8,0x2C00C8,0x2C00C8,0x2C00C8,0x2C00C8,0x2C00C8,0x2C00C8,0x2C00C8,0x2C00C8,0x48180000,0x48180000,0x48180000,0x48180000,0x48180000, -0x48180000,0x28180001,0x28180001,0x28180001,0x1E180001,0x4000C8,0x4000C8,0x4000C8,0x4000C8,0x4000C8,0x4000C8,0x2E000009,0x2E000009,0x2E000009,0x1E040001,0x8000C8,0x8000C8,0x8000C8,0x1C00003A,0x140000CA,0xF61C000D,0x2C00C8,0x2C00C8,0x96180000,0x6C180000,0x56180000,0x56180000,0x3C180000,0xE0000004,0x86080001,0x30140001,0x2E000009, -0x5C00C8,}; -static const uint32_t g_etc1_to_bc7_m6_table70[] = { -0x280000,0x280000,0x280000,0x280000,0x280000,0x280000,0x280000,0x280000,0x280000,0x280000,0x280000,0x280000,0x280000,0x280000,0x280000,0x280000,0x280000,0x280000,0x280000,0x280000,0x3C0000,0x3C0000,0x3C0000,0x3C0000,0x3C0000,0x3C0000,0x3C0000,0x3C0000,0x3C0000,0x3C0000,0x740000, -0x740000,0x740000,0x740000,0x12000001,0x280000,0x280000,0x280000,0x280000,0x280000,0x280000,0x280000,0x280000,0xC280000,0xC280000,0xC280000,0x3C0000,0x540000,0x500000,0x500000,0x500000,0x500000,0x500000,0x500000,0x500000,0x500000,0x500000,0x500000,0x2740000,0x2740000,0x2740000,0x2740000,0x2740000, -0x2740000,0xF00000,0xF00000,0xF00000,0x26000001,0x2740000,0x2740000,0x2740000,0x2740000,0x2740000,0x2740000,0xF00000,0xF00000,0xF00000,0x26000001,0xF00000,0xF00000,0xF00000,0x26000001,0x26000001,0x2540000,0x500000,0x500000,0x5C0000,0x640000,0x6C0000,0x6C0000,0x840000,0x5C0000,0x640000,0xA80000,0xF00000, -0xA80000,0x740000,0x740000,0x740000,0x740000,0xAC0000,0xAC0000,0xAC0000,0x15C0000,0x15C0000,0x38000001,0xAC0000,0xAC0000,0xAC0000,0x15C0000,0x15C0000,0x38000001,0x15C0000,0x15C0000,0x38000001,0x38000001,0xAC0000,0xAC0000,0xAC0000,0x15C0000,0x15C0000,0x38000001,0x15C0000,0x15C0000,0x38000001,0x38000001,0x15C0000, -0x15C0000,0x38000001,0x38000001,0x38000001,0x6840000,0x7C0000,0x740000,0x9C0000,0x2C00000,0xF40000,0x11C0000,0x1AC0000,0x900000,0xAC0000,0xF40000,0x38000001,0xF40000,0x9C0000,0xE80000,0x1D80000,0x4C000001,0xE80000,0x1D80000,0x4C000001,0x1D80000,0x4C000001,0x4C000001,0xE80000,0x1D80000,0x4C000001,0x1D80000,0x4C000001, -0x4C000001,0x1D80000,0x4C000001,0x4C000001,0x4C000001,0xE80000,0x1D80000,0x4C000001,0x1D80000,0x4C000001,0x4C000001,0x1D80000,0x4C000001,0x4C000001,0x4C000001,0x1D80000,0x4C000001,0x4C000001,0x4C000001,0x4C000001,0xC40000,0xAA40000,0xAA40000,0x1040000,0x17C0000,0x21FC0000,0x4C000001,0x4C000001,0xD40000,0x1240000,0x43D80000,0x4C000001, -0x14C0000,0x600738,0x9A5002D4,0x605002D4,0x4C5002D5,0x903C0190,0x683C00D5,0x4E44013A,0x563C0190,0x4A3C00D5,0x423C0192,0x8A2802D3,0x6A2800A2,0x523400FF,0x5A2800D1,0x4C280002,0x422C00D7,0x4C2802D4,0x482000FD,0x4020013B,0x3A2802D3,0x900734,0x720402D3,0x4C2802D4,0x6200019A,0x4E1000CF,0x42180192,0x52000319,0x4A0000C6,0x420000E7,0x3A0002D4,0x1240734, -0x440003A9,0x3E0002E2,0x3600041C,0x30000734,0xFE34003D,0xF2540402,0xF65C04C1,0xA2280000,0x74280001,0x5A280002,0x4E2C0012,0x4A280011,0xFE100022,0x96180002,0x501C00A9,0x420000E7,0xD00734,0x7402D4,0x866400A4,0x5A6400A4,0x4C6000A5,0x7C5000C8,0x5E500001,0x4E540015,0x505000C8,0x4A4C0026,0x425000CA,0xB002D3,0x682C00A2,0x4C4800A3,0x5C2000C9,0x4C280002, -0x443400CA,0x16402D3,0x4A0000AD,0x420000E3,0x3A0002D3,0xB002D3,0x682C00A2,0x4C4800A3,0x5C2000C9,0x4C280002,0x443400CA,0x16402D3,0x4A0000AD,0x420000E3,0x3A0002D3,0x16402D3,0x4A0000AD,0x420000E3,0x3A0002D3,0x3A0002D3,0xFC380018,0xFA64015E,0xFE6C014D,0xA2280000,0x74280001,0x5A280002,0x4E340002,0x4C1C0005,0xFE100019,0x96180001,0x521400A2,0x420000E3, -0xF802D3,0x5002D4,0x5002D4,0x5002D4,0x5002D4,0x723C00C8,0x723C00C8,0x723C00C8,0x463C00C8,0x463C00C8,0x383C00C9,0x6A2800A2,0x6A2800A2,0x6A2800A2,0x4C280001,0x4C280001,0x3C2C0026,0x3E2800A2,0x3E2800A2,0x38240015,0x302800A2,0x7402D3,0x7402D3,0x7402D3,0x520800C9,0x520800C9,0x3A2000C9,0x460000AD,0x460000AD,0x38040002,0x300C00A2,0xE802D3, -0xE802D3,0x32000119,0x2C000126,0x260002D3,0xFE2C0016,0xFA44014C,0x5002D4,0xA2280000,0x70280001,0x5A280001,0x542C0006,0x46280002,0xFA0C0005,0x96180001,0x4E2000A2,0x38040002,0xA402D3,0x6000A4,0x6000A4,0x6000A4,0x6000A4,0x5E500000,0x5E500000,0x5E500000,0x42500000,0x42500000,0x38500001,0x9000A2,0x9000A2,0x9000A2,0x48300001,0x48300001, -0x38400001,0x12400A2,0x12400A2,0x38080001,0x300000A2,0x9000A2,0x9000A2,0x9000A2,0x48300001,0x48300001,0x38400001,0x12400A2,0x12400A2,0x38080001,0x300000A2,0x12400A2,0x12400A2,0x38080001,0x300000A2,0x300000A2,0xFA340000,0xF254000D,0x6000A4,0xA2280000,0x6E2C0000,0x582C0000,0x4E340001,0x48240000,0xFE0C0002,0x96180000,0xD000A2,0x38080001, -0xD000A2,0x8800C8,0x76740000,0x56740001,0x4C740001,0xC800C8,0x5E500001,0x4C600001,0x19800C8,0x4C240001,0x420000CA,0xC800C8,0x5E500001,0x4C600001,0x19800C8,0x4C240001,0x420000CA,0x19800C8,0x4C240001,0x420000CA,0x420000CA,0xC800C8,0x5E500001,0x4C600001,0x19800C8,0x4C240001,0x420000CA,0x19800C8,0x4C240001,0x420000CA,0x420000CA,0x19800C8, -0x4C240001,0x420000CA,0x420000CA,0x420000CA,0xFA3C0012,0x9000C8,0xF67C0020,0x9E2C0000,0x74240001,0x5C240000,0x4C3C0001,0x4C080001,0xFC14000A,0x98180000,0x50400000,0x420000CA,0x12000C8,0x3C00C8,0x3C00C8,0x3C00C8,0x3C00C8,0x3C00C8,0x3C00C8,0x3C00C8,0x3C00C8,0x3C00C8,0x3C00C8,0x50280000,0x50280000,0x50280000,0x50280000,0x50280000, -0x50280000,0x30280001,0x30280001,0x30280001,0x26280001,0x5800C8,0x5800C8,0x5800C8,0x5800C8,0x5800C8,0x5800C8,0x38040001,0x38040001,0x38040001,0x26140001,0xB000C8,0xB000C8,0xB000C8,0x24000022,0x1C0000CA,0xFE2C000D,0x3C00C8,0x3C00C8,0x9E280000,0x74280000,0x5E280000,0x5E280000,0x44280000,0xF40C0001,0x8E180001,0x38240001,0x38040001, -0x7C00C8,}; -static const uint32_t g_etc1_to_bc7_m6_table71[] = { -0x380000,0x380000,0x380000,0x380000,0x380000,0x380000,0x380000,0x380000,0x380000,0x380000,0x380000,0x380000,0x380000,0x380000,0x380000,0x380000,0x380000,0x380000,0x380000,0x380000,0x2500000,0x2500000,0x2500000,0x2500000,0x2500000,0x2500000,0x2500000,0x2500000,0x2500000,0x2500000,0xA40000, -0xA40000,0xA40000,0xA40000,0x1A000001,0x380000,0x380000,0x380000,0x380000,0x380000,0x380000,0x380000,0x380000,0x3C0000,0x3C0000,0x3C0000,0x2500000,0x740000,0x600000,0x600000,0x600000,0x600000,0x600000,0x600000,0x600000,0x600000,0x600000,0x600000,0x28C0000,0x28C0000,0x28C0000,0x28C0000,0x28C0000, -0x28C0000,0x1200000,0x1200000,0x1200000,0x2E000001,0x28C0000,0x28C0000,0x28C0000,0x28C0000,0x28C0000,0x28C0000,0x1200000,0x1200000,0x1200000,0x2E000001,0x1200000,0x1200000,0x1200000,0x2E000001,0x2E000001,0xA640000,0x600000,0x600000,0x700000,0x780000,0x2800000,0x2800000,0xA00000,0x700000,0x780000,0xCC0000,0x1200000, -0xCC0000,0x840000,0x840000,0x840000,0x840000,0xC40000,0xC40000,0xC40000,0x18C0000,0x18C0000,0x40000001,0xC40000,0xC40000,0xC40000,0x18C0000,0x18C0000,0x40000001,0x18C0000,0x18C0000,0x40000001,0x40000001,0xC40000,0xC40000,0xC40000,0x18C0000,0x18C0000,0x40000001,0x18C0000,0x18C0000,0x40000001,0x40000001,0x18C0000, -0x18C0000,0x40000001,0x40000001,0x40000001,0x2980000,0x8C0000,0x840000,0xB40000,0xDC0000,0x1180000,0x1400000,0x1E80000,0xA40000,0xC40000,0x1180000,0x40000001,0x1180000,0xAC0000,0x1000000,0x5F80000,0x54000001,0x1000000,0x5F80000,0x54000001,0x5F80000,0x54000001,0x54000001,0x1000000,0x5F80000,0x54000001,0x5F80000,0x54000001, -0x54000001,0x5F80000,0x54000001,0x54000001,0x54000001,0x1000000,0x5F80000,0x54000001,0x5F80000,0x54000001,0x54000001,0x5F80000,0x54000001,0x54000001,0x54000001,0x5F80000,0x54000001,0x54000001,0x54000001,0x54000001,0xD80000,0xB80000,0xB80000,0x1200000,0x1A40000,0x2BFC0000,0x54000001,0x54000001,0x2E80000,0x3400000,0x4BE80000,0x54000001, -0x16C0000,0x700738,0xA26002D4,0x686002D4,0x546002D5,0x984C0190,0x704C00D5,0x5654013A,0x5E4C0190,0x524C00D5,0x4A4C0192,0x923802D3,0x723800A2,0x5A4400FF,0x623800D1,0x54380002,0x4A3C00D7,0x543802D4,0x503000FD,0x4830013B,0x423802D3,0xA80734,0x7A1402D3,0x543802D4,0x6C080192,0x562000CF,0x4A280192,0x620002E3,0x540000A3,0x4A0000D7,0x421002D4,0x1580734, -0x4A000361,0x44000272,0x3E0003BF,0x38000734,0xFE440056,0xFA640402,0xFE6C04C1,0xAA380000,0x7C380001,0x62380002,0x563C0012,0x52380011,0xFE24003B,0x9E280002,0x582C00A9,0x4A0000D7,0xF00734,0x8402D4,0x8E7400A4,0x627400A4,0x547000A5,0x846000C8,0x66600001,0x56640015,0x586000C8,0x525C0026,0x4A6000CA,0x2C402D3,0x703C00A2,0x545800A3,0x643000C9,0x54380002, -0x4C4400CA,0x19402D3,0x540000A3,0x4A0000CE,0x420002D3,0x2C402D3,0x703C00A2,0x545800A3,0x643000C9,0x54380002,0x4C4400CA,0x19402D3,0x540000A3,0x4A0000CE,0x420002D3,0x19402D3,0x540000A3,0x4A0000CE,0x420002D3,0x420002D3,0xFC4C001D,0xF2740174,0xF67C0164,0xAA380000,0x7C380001,0x62380002,0x56440002,0x542C0005,0xFE240022,0x9E280001,0x5A2400A2,0x4A0000CE, -0x11C02D3,0x6002D4,0x6002D4,0x6002D4,0x6002D4,0x7A4C00C8,0x7A4C00C8,0x7A4C00C8,0x4E4C00C8,0x4E4C00C8,0x404C00C9,0x723800A2,0x723800A2,0x723800A2,0x54380001,0x54380001,0x443C0026,0x463800A2,0x463800A2,0x40340015,0x383800A2,0x8C02D3,0x8C02D3,0x8C02D3,0x5A1800C9,0x5A1800C9,0x423000C9,0x540000A2,0x540000A2,0x40140002,0x381C00A2,0x11802D3, -0x11802D3,0x3E0000F1,0x360000FB,0x2E0002D3,0xF840001D,0xF2540161,0x6002D4,0xAA380000,0x78380001,0x62380001,0x5C3C0006,0x4E380002,0xFC1C000A,0x9E280001,0x563000A2,0x40140002,0xC802D3,0x7000A4,0x7000A4,0x7000A4,0x7000A4,0x66600000,0x66600000,0x66600000,0x4A600000,0x4A600000,0x40600001,0xA800A2,0xA800A2,0xA800A2,0x50400001,0x50400001, -0x40500001,0x15800A2,0x15800A2,0x40180001,0x380000A2,0xA800A2,0xA800A2,0xA800A2,0x50400001,0x50400001,0x40500001,0x15800A2,0x15800A2,0x40180001,0x380000A2,0x15800A2,0x15800A2,0x40180001,0x380000A2,0x380000A2,0xF6480001,0xFA64000D,0x7000A4,0xAA380000,0x763C0000,0x603C0000,0x56440001,0x50340000,0xF6240005,0x9E280000,0xF000A2,0x40180001, -0xF000A2,0x9800C8,0x7E840000,0x5E840001,0x54840001,0xE000C8,0x66600001,0x54700001,0x1CC00C8,0x54340001,0x4A0000CA,0xE000C8,0x66600001,0x54700001,0x1CC00C8,0x54340001,0x4A0000CA,0x1CC00C8,0x54340001,0x4A0000CA,0x4A0000CA,0xE000C8,0x66600001,0x54700001,0x1CC00C8,0x54340001,0x4A0000CA,0x1CC00C8,0x54340001,0x4A0000CA,0x4A0000CA,0x1CC00C8, -0x54340001,0x4A0000CA,0x4A0000CA,0x4A0000CA,0xFC4C0014,0x8A000C8,0xFE8C0020,0xA63C0000,0x7C340001,0x64340000,0x544C0001,0x54180001,0xFE2C000D,0xA0280000,0x58500000,0x4A0000CA,0x14000C8,0x4C00C8,0x4C00C8,0x4C00C8,0x4C00C8,0x4C00C8,0x4C00C8,0x4C00C8,0x4C00C8,0x4C00C8,0x4C00C8,0x58380000,0x58380000,0x58380000,0x58380000,0x58380000, -0x58380000,0x38380001,0x38380001,0x38380001,0x2E380001,0x7000C8,0x7000C8,0x7000C8,0x7000C8,0x7000C8,0x7000C8,0x40140001,0x40140001,0x40140001,0x2E240001,0xE400C8,0xE400C8,0xE400C8,0x2C00000D,0x240000CA,0xF63C0014,0x4C00C8,0x4C00C8,0xA6380000,0x7C380000,0x66380000,0x66380000,0x4C380000,0xFC1C0001,0x96280001,0x40340001,0x40140001, -0xA000C8,}; -static const uint32_t g_etc1_to_bc7_m6_table72[] = { -0x480001,0x480001,0x480001,0x480001,0x480001,0x480001,0x480001,0x480001,0x480001,0x480001,0x480001,0x480001,0x480001,0x480001,0x480001,0x480001,0x480001,0x480001,0x480001,0x480001,0x6C0000,0x6C0000,0x6C0000,0x6C0000,0x6C0000,0x6C0000,0x6C0000,0x6C0000,0x6C0000,0x6C0000,0xDC0000, -0xDC0000,0xDC0000,0xDC0000,0x24000000,0x480001,0x480001,0x480001,0x480001,0x480001,0x480001,0x480001,0x480001,0xE4C0000,0xE4C0000,0xE4C0000,0x6C0000,0x9C0000,0x700001,0x700001,0x700001,0x700001,0x700001,0x700001,0x700001,0x700001,0x700001,0x700001,0xA80000,0xA80000,0xA80000,0xA80000,0xA80000, -0xA80000,0x1580000,0x1580000,0x1580000,0x38000000,0xA80000,0xA80000,0xA80000,0xA80000,0xA80000,0xA80000,0x1580000,0x1580000,0x1580000,0x38000000,0x1580000,0x1580000,0x1580000,0x38000000,0x38000000,0x4780000,0x700001,0x700001,0x840000,0x48C0000,0x2980000,0x2980000,0xC00000,0x840000,0x48C0000,0xF00000,0x1580000, -0xF00000,0x940001,0x940001,0x940001,0x940001,0x2DC0000,0x2DC0000,0x2DC0000,0x1C40000,0x1C40000,0x4A000000,0x2DC0000,0x2DC0000,0x2DC0000,0x1C40000,0x1C40000,0x4A000000,0x1C40000,0x1C40000,0x4A000000,0x4A000000,0x2DC0000,0x2DC0000,0x2DC0000,0x1C40000,0x1C40000,0x4A000000,0x1C40000,0x1C40000,0x4A000000,0x4A000000,0x1C40000, -0x1C40000,0x4A000000,0x4A000000,0x4A000000,0x4AC0000,0xA00000,0x940001,0xCC0000,0xFC0000,0x13C0000,0x16C0000,0xBF80000,0xBC0000,0x2DC0000,0x13C0000,0x4A000000,0x13C0000,0xBC0001,0x3180000,0x11FC0000,0x5E000000,0x3180000,0x11FC0000,0x5E000000,0x11FC0000,0x5E000000,0x5E000000,0x3180000,0x11FC0000,0x5E000000,0x11FC0000,0x5E000000, -0x5E000000,0x11FC0000,0x5E000000,0x5E000000,0x5E000000,0x3180000,0x11FC0000,0x5E000000,0x11FC0000,0x5E000000,0x5E000000,0x11FC0000,0x5E000000,0x5E000000,0x5E000000,0x11FC0000,0x5E000000,0x5E000000,0x5E000000,0x5E000000,0x2EC0000,0xCC80000,0xCC80000,0x1400000,0x1D00000,0x37F40000,0x5E000000,0x5E000000,0x3000000,0x1640000,0x55DC0000,0x5E000000, -0x1940000,0x840734,0xAE7002D3,0x707002D4,0x5E7002D3,0xA0600192,0x786000D7,0x6264013B,0x66600192,0x5C5C00D7,0x545C0192,0x984C02D4,0x7A4C00A3,0x625400FD,0x6A4800CF,0x5E4C0002,0x545000D5,0x5E4802D4,0x584000FF,0x5048013A,0x4A4802D5,0xC40734,0x822802D3,0x5E4C02D4,0x76180192,0x5E3000D1,0x54380190,0x700002D3,0x5E1000A2,0x541400D5,0x4A2402D4,0x18C0734, -0x5600031B,0x50000212,0x48000378,0x40000738,0xFE580072,0xF4780434,0xF67C04EC,0xB24C0002,0x84480003,0x6C4C0002,0x5E500011,0x5C440012,0xFE34004E,0xAA380000,0x604000A9,0x541400D5,0x1180734,0x9802D3,0x988400A2,0x6C8400A2,0x5E8400A2,0x8A7400C9,0x6E740002,0x60740015,0x627000C9,0x5C6C0026,0x547000C9,0xE002D3,0x7A4C00A2,0x5E6800A2,0x6E4000C9,0x5E4C0001, -0x545800C8,0x1CC02D3,0x5E0C00A2,0x540000C8,0x4A0002D4,0xE002D3,0x7A4C00A2,0x5E6800A2,0x6E4000C9,0x5E4C0001,0x545800C8,0x1CC02D3,0x5E0C00A2,0x540000C8,0x4A0002D4,0x1CC02D3,0x5E0C00A2,0x540000C8,0x4A0002D4,0x4A0002D4,0xFC60002D,0xFC880173,0xFE8C016B,0xB24C0001,0x84480002,0x6C4C0001,0x5E580002,0x5C3C0006,0xFE3C0033,0xAA380000,0x623800A2,0x540000C8, -0x14002D3,0x7002D3,0x7002D3,0x7002D3,0x7002D3,0x806000CA,0x806000CA,0x806000CA,0x585C00CA,0x585C00CA,0x4A5C00CA,0x7A4C00A3,0x7A4C00A3,0x7A4C00A3,0x5C4C0002,0x5C4C0002,0x4C500026,0x4E4C00A3,0x4E4C00A3,0x48480015,0x404800A5,0x2A402D3,0x2A402D3,0x2A402D3,0x622C00C9,0x622C00C9,0x4A4400C8,0x5C1400A2,0x5C1400A2,0x4A240001,0x403000A4,0x15002D3, -0x15002D3,0x480000D4,0x3E0000CD,0x380002D4,0xFC540026,0xFC68015E,0x7002D3,0xB6480001,0x804C0002,0x6A4C0002,0x644C0005,0x58480002,0xFE34000E,0xAA380000,0x5E4400A3,0x4A240001,0xEC02D3,0x8400A2,0x8400A2,0x8400A2,0x8400A2,0x6C740001,0x6C740001,0x6C740001,0x52740001,0x52740001,0x4A700001,0xC400A2,0xC400A2,0xC400A2,0x58540001,0x58540001, -0x4A600000,0x18C00A2,0x18C00A2,0x4A280000,0x400000A4,0xC400A2,0xC400A2,0xC400A2,0x58540001,0x58540001,0x4A600000,0x18C00A2,0x18C00A2,0x4A280000,0x400000A4,0x18C00A2,0x18C00A2,0x4A280000,0x400000A4,0x400000A4,0xFE580001,0xF4780012,0x8400A2,0xB6480000,0x7C500000,0x68500000,0x60540000,0x58480001,0xFE340005,0xAA380000,0x11800A2,0x4A280000, -0x11800A2,0xA800CA,0x84980001,0x68940001,0x5E940001,0xFC00C8,0x6E740001,0x5E800001,0x3F800C8,0x5E440000,0x540000C8,0xFC00C8,0x6E740001,0x5E800001,0x3F800C8,0x5E440000,0x540000C8,0x3F800C8,0x5E440000,0x540000C8,0x540000C8,0xFC00C8,0x6E740001,0x5E800001,0x3F800C8,0x5E440000,0x540000C8,0x3F800C8,0x5E440000,0x540000C8,0x540000C8,0x3F800C8, -0x5E440000,0x540000C8,0x540000C8,0x540000C8,0xF6680019,0x2B400C8,0xF8A00029,0xB24C0000,0x84480001,0x6E440000,0x5E5C0000,0x5E240000,0xF4480012,0xAA380000,0x60640001,0x540000C8,0x16800C8,0x5C00CA,0x5C00CA,0x5C00CA,0x5C00CA,0x5C00CA,0x5C00CA,0x5C00CA,0x5C00CA,0x5C00CA,0x5C00CA,0x5E4C0001,0x5E4C0001,0x5E4C0001,0x5E4C0001,0x5E4C0001, -0x5E4C0001,0x42480001,0x42480001,0x42480001,0x38480001,0x8C00C8,0x8C00C8,0x8C00C8,0x8C00C8,0x8C00C8,0x8C00C8,0x48280001,0x48280001,0x48280001,0x38340001,0x11800C8,0x11800C8,0x11800C8,0x38000001,0x2E0000C8,0xF0500019,0x5C00CA,0x5C00CA,0xAA4C0001,0x824C0001,0x6C4C0001,0x6C4C0001,0x544C0001,0xF8300002,0xA8380000,0x4C440000,0x48280001, -0xC800C8,}; -static const uint32_t g_etc1_to_bc7_m6_table73[] = { -0x580001,0x580001,0x580001,0x580001,0x580001,0x580001,0x580001,0x580001,0x580001,0x580001,0x580001,0x580001,0x580001,0x580001,0x580001,0x580001,0x580001,0x580001,0x580001,0x580001,0x840000,0x840000,0x840000,0x840000,0x840000,0x840000,0x840000,0x840000,0x840000,0x840000,0x10C0000, -0x10C0000,0x10C0000,0x10C0000,0x2C000000,0x580001,0x580001,0x580001,0x580001,0x580001,0x580001,0x580001,0x580001,0x600000,0x600000,0x600000,0x840000,0xBC0000,0x800001,0x800001,0x800001,0x800001,0x800001,0x800001,0x800001,0x800001,0x800001,0x800001,0xC00000,0xC00000,0xC00000,0xC00000,0xC00000, -0xC00000,0x1880000,0x1880000,0x1880000,0x40000000,0xC00000,0xC00000,0xC00000,0xC00000,0xC00000,0xC00000,0x1880000,0x1880000,0x1880000,0x40000000,0x1880000,0x1880000,0x1880000,0x40000000,0x40000000,0xC880000,0x800001,0x800001,0x980000,0x4A00000,0xB00000,0xB00000,0xD80000,0x980000,0x4A00000,0x1140000,0x1880000, -0x1140000,0xA40001,0xA40001,0xA40001,0xA40001,0x2F40000,0x2F40000,0x2F40000,0x1F40000,0x1F40000,0x52000000,0x2F40000,0x2F40000,0x2F40000,0x1F40000,0x1F40000,0x52000000,0x1F40000,0x1F40000,0x52000000,0x52000000,0x2F40000,0x2F40000,0x2F40000,0x1F40000,0x1F40000,0x52000000,0x1F40000,0x1F40000,0x52000000,0x52000000,0x1F40000, -0x1F40000,0x52000000,0x52000000,0x52000000,0xC00000,0xB00000,0xA40001,0xE00000,0x3140000,0x1600000,0x1940000,0x15FC0000,0xD00000,0x2F40000,0x1600000,0x52000000,0x1600000,0xCC0001,0x3300000,0x1DFC0000,0x66000000,0x3300000,0x1DFC0000,0x66000000,0x1DFC0000,0x66000000,0x66000000,0x3300000,0x1DFC0000,0x66000000,0x1DFC0000,0x66000000, -0x66000000,0x1DFC0000,0x66000000,0x66000000,0x66000000,0x3300000,0x1DFC0000,0x66000000,0x1DFC0000,0x66000000,0x66000000,0x1DFC0000,0x66000000,0x66000000,0x66000000,0x1DFC0000,0x66000000,0x66000000,0x66000000,0x66000000,0x3000000,0xDC0000,0xDC0000,0x1580000,0x1F80000,0x41F40000,0x66000000,0x66000000,0x1180000,0x3800000,0x5DEC0000,0x66000000, -0x1B40000,0x940734,0xB68002D3,0x788002D4,0x668002D3,0xA8700192,0x807000D7,0x6A74013B,0x6E700192,0x646C00D7,0x5C6C0192,0xA05C02D4,0x825C00A3,0x6A6400FD,0x725800CF,0x665C0002,0x5C6000D5,0x665802D4,0x605000FF,0x5858013A,0x525802D5,0xDC0734,0x8A3802D3,0x665C02D4,0x7E280192,0x664000D1,0x5C480190,0x781002D3,0x662000A2,0x5C2400D5,0x523402D4,0x1BC0734, -0x600002F8,0x5A0001E0,0x50000339,0x48000738,0xFE6C0096,0xFC880434,0xFE8C04EC,0xBA5C0002,0x8C580003,0x745C0002,0x66600011,0x64540012,0xFC4C006E,0xB2480000,0x685000A9,0x5C2400D5,0x1380734,0xA802D3,0xA09400A2,0x749400A2,0x669400A2,0x928400C9,0x76840002,0x68840015,0x6A8000C9,0x647C0026,0x5C8000C9,0xF802D3,0x825C00A2,0x667800A2,0x765000C9,0x665C0001, -0x5C6800C8,0x1FC02D3,0x661C00A2,0x5C1000C8,0x520002D4,0xF802D3,0x825C00A2,0x667800A2,0x765000C9,0x665C0001,0x5C6800C8,0x1FC02D3,0x661C00A2,0x5C1000C8,0x520002D4,0x1FC02D3,0x661C00A2,0x5C1000C8,0x520002D4,0x520002D4,0xFC740036,0xF4980189,0xF8A0017A,0xBA5C0001,0x8C580002,0x745C0001,0x66680002,0x644C0006,0xFC50003D,0xB2480000,0x6A4800A2,0x5C1000C8, -0x16402D3,0x8002D3,0x8002D3,0x8002D3,0x8002D3,0x887000CA,0x887000CA,0x887000CA,0x606C00CA,0x606C00CA,0x526C00CA,0x825C00A3,0x825C00A3,0x825C00A3,0x645C0002,0x645C0002,0x54600026,0x565C00A3,0x565C00A3,0x50580015,0x485800A5,0x2BC02D3,0x2BC02D3,0x2BC02D3,0x6A3C00C9,0x6A3C00C9,0x525400C8,0x642400A2,0x642400A2,0x52340001,0x484000A4,0x18002D3, -0x18002D3,0x520000CA,0x480000B4,0x400002D4,0xFC64002D,0xF4780173,0x8002D3,0xBE580001,0x885C0002,0x725C0002,0x6C5C0005,0x60580002,0xFE440019,0xB2480000,0x665400A3,0x52340001,0x11002D3,0x9400A2,0x9400A2,0x9400A2,0x9400A2,0x74840001,0x74840001,0x74840001,0x5A840001,0x5A840001,0x52800001,0xDC00A2,0xDC00A2,0xDC00A2,0x60640001,0x60640001, -0x52700000,0x1BC00A2,0x1BC00A2,0x52380000,0x480000A4,0xDC00A2,0xDC00A2,0xDC00A2,0x60640001,0x60640001,0x52700000,0x1BC00A2,0x1BC00A2,0x52380000,0x480000A4,0x1BC00A2,0x1BC00A2,0x52380000,0x480000A4,0x480000A4,0xFA6C0002,0xFC880012,0x9400A2,0xBE580000,0x84600000,0x70600000,0x68640000,0x60580001,0xFA48000A,0xB2480000,0x13800A2,0x52380000, -0x13800A2,0xB800CA,0x8CA80001,0x70A40001,0x66A40001,0x11400C8,0x76840001,0x66900001,0xFF800C8,0x66540000,0x5C0000C8,0x11400C8,0x76840001,0x66900001,0xFF800C8,0x66540000,0x5C0000C8,0xFF800C8,0x66540000,0x5C0000C8,0x5C0000C8,0x11400C8,0x76840001,0x66900001,0xFF800C8,0x66540000,0x5C0000C8,0xFF800C8,0x66540000,0x5C0000C8,0x5C0000C8,0xFF800C8, -0x66540000,0x5C0000C8,0x5C0000C8,0x5C0000C8,0xFE780019,0xAC400C8,0xFEAC002D,0xBA5C0000,0x8C580001,0x76540000,0x666C0000,0x66340000,0xFC580012,0xB2480000,0x68740001,0x5C0000C8,0x18C00C8,0x6C00CA,0x6C00CA,0x6C00CA,0x6C00CA,0x6C00CA,0x6C00CA,0x6C00CA,0x6C00CA,0x6C00CA,0x6C00CA,0x665C0001,0x665C0001,0x665C0001,0x665C0001,0x665C0001, -0x665C0001,0x4A580001,0x4A580001,0x4A580001,0x40580001,0xA400C8,0xA400C8,0xA400C8,0xA400C8,0xA400C8,0xA400C8,0x50380001,0x50380001,0x50380001,0x40440001,0x14C00C8,0x14C00C8,0x14C00C8,0x40080000,0x360000C8,0xF8600019,0x6C00CA,0x6C00CA,0xB25C0001,0x8A5C0001,0x745C0001,0x745C0001,0x5C5C0001,0xF4440005,0xB0480000,0x54540000,0x50380001, -0xE800C8,}; -static const uint32_t g_etc1_to_bc7_m6_table74[] = { -0x680001,0x680001,0x680001,0x680001,0x680001,0x680001,0x680001,0x680001,0x680001,0x680001,0x680001,0x680001,0x680001,0x680001,0x680001,0x680001,0x680001,0x680001,0x680001,0x680001,0x9C0000,0x9C0000,0x9C0000,0x9C0000,0x9C0000,0x9C0000,0x9C0000,0x9C0000,0x9C0000,0x9C0000,0x13C0000, -0x13C0000,0x13C0000,0x13C0000,0x34000000,0x680001,0x680001,0x680001,0x680001,0x680001,0x680001,0x680001,0x680001,0x700000,0x700000,0x700000,0x9C0000,0xE00000,0x900001,0x900001,0x900001,0x900001,0x900001,0x900001,0x900001,0x900001,0x900001,0x900001,0xD80000,0xD80000,0xD80000,0xD80000,0xD80000, -0xD80000,0x1B80000,0x1B80000,0x1B80000,0x48000000,0xD80000,0xD80000,0xD80000,0xD80000,0xD80000,0xD80000,0x1B80000,0x1B80000,0x1B80000,0x48000000,0x1B80000,0x1B80000,0x1B80000,0x48000000,0x48000000,0x9C0000,0x900001,0x900001,0x2A80000,0x4B40000,0x2C40000,0x2C40000,0xF40000,0x2A80000,0x4B40000,0x1340000,0x1B80000, -0x1340000,0xB40001,0xB40001,0xB40001,0xB40001,0x30C0000,0x30C0000,0x30C0000,0xBFC0000,0xBFC0000,0x5A000000,0x30C0000,0x30C0000,0x30C0000,0xBFC0000,0xBFC0000,0x5A000000,0xBFC0000,0xBFC0000,0x5A000000,0x5A000000,0x30C0000,0x30C0000,0x30C0000,0xBFC0000,0xBFC0000,0x5A000000,0xBFC0000,0xBFC0000,0x5A000000,0x5A000000,0xBFC0000, -0xBFC0000,0x5A000000,0x5A000000,0x5A000000,0xD40000,0x8C00000,0xB40001,0xF80000,0x1300000,0x1800000,0x1BC0000,0x21F40000,0xE40000,0x30C0000,0x1800000,0x5A000000,0x1800000,0xDC0001,0x1480000,0x29FC0000,0x6E000000,0x1480000,0x29FC0000,0x6E000000,0x29FC0000,0x6E000000,0x6E000000,0x1480000,0x29FC0000,0x6E000000,0x29FC0000,0x6E000000, -0x6E000000,0x29FC0000,0x6E000000,0x6E000000,0x6E000000,0x1480000,0x29FC0000,0x6E000000,0x29FC0000,0x6E000000,0x6E000000,0x29FC0000,0x6E000000,0x6E000000,0x6E000000,0x29FC0000,0x6E000000,0x6E000000,0x6E000000,0x6E000000,0x3140000,0xEC0000,0xEC0000,0x1740000,0xDFC0000,0x4BF40000,0x6E000000,0x6E000000,0x32C0000,0x1A00000,0x65FC0000,0x6E000000, -0x1D80000,0xA40734,0xBE9002D3,0x809002D4,0x6E9002D3,0xB0800192,0x888000D7,0x7284013B,0x76800192,0x6C7C00D7,0x647C0192,0xA86C02D4,0x8A6C00A3,0x727400FD,0x7A6800CF,0x6E6C0002,0x647000D5,0x6E6802D4,0x686000FF,0x6068013A,0x5A6802D5,0xF40734,0x924802D3,0x6E6C02D4,0x86380192,0x6E5000D1,0x64580190,0x802002D3,0x6E3000A2,0x643400D5,0x5A4402D4,0x1F00734, -0x6C0002D8,0x600001B8,0x5A000314,0x50000738,0xFC7C00BA,0xF498046A,0xF8A00513,0xC26C0002,0x94680003,0x7C6C0002,0x6E700011,0x6C640012,0xFE5C0082,0xBA580000,0x706000A9,0x643400D5,0x15C0734,0xB802D3,0xA8A400A2,0x7CA400A2,0x6EA400A2,0x9A9400C9,0x7E940002,0x70940015,0x729000C9,0x6C8C0026,0x649000C9,0x11002D3,0x8A6C00A2,0x6E8800A2,0x7E6000C9,0x6E6C0001, -0x647800C8,0xDFC02D3,0x6E2C00A2,0x642000C8,0x5A0002D4,0x11002D3,0x8A6C00A2,0x6E8800A2,0x7E6000C9,0x6E6C0001,0x647800C8,0xDFC02D3,0x6E2C00A2,0x642000C8,0x5A0002D4,0xDFC02D3,0x6E2C00A2,0x642000C8,0x5A0002D4,0x5A0002D4,0xFE800049,0xFCA80189,0xFEAC0186,0xC26C0001,0x94680002,0x7C6C0001,0x6E780002,0x6C5C0006,0xFE600051,0xBA580000,0x725800A2,0x642000C8, -0x18802D3,0x9002D3,0x9002D3,0x9002D3,0x9002D3,0x908000CA,0x908000CA,0x908000CA,0x687C00CA,0x687C00CA,0x5A7C00CA,0x8A6C00A3,0x8A6C00A3,0x8A6C00A3,0x6C6C0002,0x6C6C0002,0x5C700026,0x5E6C00A3,0x5E6C00A3,0x58680015,0x506800A5,0xD402D3,0xD402D3,0xD402D3,0x724C00C9,0x724C00C9,0x5A6400C8,0x6C3400A2,0x6C3400A2,0x5A440001,0x505000A4,0x1B002D3, -0x1B002D3,0x5A0C00C8,0x500000A5,0x480002D4,0xFE74003B,0xFC880173,0x9002D3,0xC6680001,0x906C0002,0x7A6C0002,0x746C0005,0x68680002,0xFE580021,0xBA580000,0x6E6400A3,0x5A440001,0x13002D3,0xA400A2,0xA400A2,0xA400A2,0xA400A2,0x7C940001,0x7C940001,0x7C940001,0x62940001,0x62940001,0x5A900001,0xF400A2,0xF400A2,0xF400A2,0x68740001,0x68740001, -0x5A800000,0x1F000A2,0x1F000A2,0x5A480000,0x500000A4,0xF400A2,0xF400A2,0xF400A2,0x68740001,0x68740001,0x5A800000,0x1F000A2,0x1F000A2,0x5A480000,0x500000A4,0x1F000A2,0x1F000A2,0x5A480000,0x500000A4,0x500000A4,0xF6800005,0xF4980019,0xA400A2,0xC6680000,0x8C700000,0x78700000,0x70740000,0x68680001,0xF260000D,0xBA580000,0x15C00A2,0x5A480000, -0x15C00A2,0xC800CA,0x94B80001,0x78B40001,0x6EB40001,0x12C00C8,0x7E940001,0x6EA00001,0x1BF800C8,0x6E640000,0x640000C8,0x12C00C8,0x7E940001,0x6EA00001,0x1BF800C8,0x6E640000,0x640000C8,0x1BF800C8,0x6E640000,0x640000C8,0x640000C8,0x12C00C8,0x7E940001,0x6EA00001,0x1BF800C8,0x6E640000,0x640000C8,0x1BF800C8,0x6E640000,0x640000C8,0x640000C8,0x1BF800C8, -0x6E640000,0x640000C8,0x640000C8,0x640000C8,0xFA8C0020,0xD800C8,0xF8C00032,0xC26C0000,0x94680001,0x7E640000,0x6E7C0000,0x6E440000,0xFC6C0019,0xBA580000,0x70840001,0x640000C8,0x1AC00C8,0x7C00CA,0x7C00CA,0x7C00CA,0x7C00CA,0x7C00CA,0x7C00CA,0x7C00CA,0x7C00CA,0x7C00CA,0x7C00CA,0x6E6C0001,0x6E6C0001,0x6E6C0001,0x6E6C0001,0x6E6C0001, -0x6E6C0001,0x52680001,0x52680001,0x52680001,0x48680001,0xBC00C8,0xBC00C8,0xBC00C8,0xBC00C8,0xBC00C8,0xBC00C8,0x58480001,0x58480001,0x58480001,0x48540001,0x17C00C8,0x17C00C8,0x17C00C8,0x48180000,0x3E0000C8,0xF0700022,0x7C00CA,0x7C00CA,0xBA6C0001,0x926C0001,0x7C6C0001,0x7C6C0001,0x646C0001,0xFC540005,0xB8580000,0x5C640000,0x58480001, -0x10C00C8,}; -static const uint32_t g_etc1_to_bc7_m6_table75[] = { -0x780001,0x780001,0x780001,0x780001,0x780001,0x780001,0x780001,0x780001,0x780001,0x780001,0x780001,0x780001,0x780001,0x780001,0x780001,0x780001,0x780001,0x780001,0x780001,0x780001,0xB40000,0xB40000,0xB40000,0xB40000,0xB40000,0xB40000,0xB40000,0xB40000,0xB40000,0xB40000,0x1700000, -0x1700000,0x1700000,0x1700000,0x3C000000,0x780001,0x780001,0x780001,0x780001,0x780001,0x780001,0x780001,0x780001,0x8800000,0x8800000,0x8800000,0xB40000,0x1000000,0xA00001,0xA00001,0xA00001,0xA00001,0xA00001,0xA00001,0xA00001,0xA00001,0xA00001,0xA00001,0xF00000,0xF00000,0xF00000,0xF00000,0xF00000, -0xF00000,0x1E80000,0x1E80000,0x1E80000,0x50000000,0xF00000,0xF00000,0xF00000,0xF00000,0xF00000,0xF00000,0x1E80000,0x1E80000,0x1E80000,0x50000000,0x1E80000,0x1E80000,0x1E80000,0x50000000,0x50000000,0xAC0000,0xA00001,0xA00001,0xBC0000,0xCC0000,0xDC0000,0xDC0000,0x1100000,0xBC0000,0xCC0000,0x1580000,0x1E80000, -0x1580000,0xC40001,0xC40001,0xC40001,0xC40001,0x3240000,0x3240000,0x3240000,0x17FC0000,0x17FC0000,0x62000000,0x3240000,0x3240000,0x3240000,0x17FC0000,0x17FC0000,0x62000000,0x17FC0000,0x17FC0000,0x62000000,0x62000000,0x3240000,0x3240000,0x3240000,0x17FC0000,0x17FC0000,0x62000000,0x17FC0000,0x17FC0000,0x62000000,0x62000000,0x17FC0000, -0x17FC0000,0x62000000,0x62000000,0x62000000,0x4E40000,0xD40000,0xC40001,0x10C0000,0x14C0000,0x1A40000,0x1E40000,0x2BF80000,0xF80000,0x3240000,0x1A40000,0x62000000,0x1A40000,0xEC0001,0x1600000,0x35FC0000,0x76000000,0x1600000,0x35FC0000,0x76000000,0x35FC0000,0x76000000,0x76000000,0x1600000,0x35FC0000,0x76000000,0x35FC0000,0x76000000, -0x76000000,0x35FC0000,0x76000000,0x76000000,0x76000000,0x1600000,0x35FC0000,0x76000000,0x35FC0000,0x76000000,0x76000000,0x35FC0000,0x76000000,0x76000000,0x76000000,0x35FC0000,0x76000000,0x76000000,0x76000000,0x76000000,0x3280000,0x6FC0000,0x6FC0000,0x1900000,0x1BFC0000,0x55F40000,0x76000000,0x76000000,0x1440000,0x1C00000,0x6FD00000,0x76000000, -0x1F80000,0xB40734,0xC6A002D3,0x88A002D4,0x76A002D3,0xB8900192,0x909000D7,0x7A94013B,0x7E900192,0x748C00D7,0x6C8C0192,0xB07C02D4,0x927C00A3,0x7A8400FD,0x827800CF,0x767C0002,0x6C8000D5,0x767802D4,0x707000FF,0x6878013A,0x627802D5,0x10C0734,0x9A5802D3,0x767C02D4,0x8E480192,0x766000D1,0x6C680190,0x883002D3,0x764000A2,0x6C4400D5,0x625402D4,0xBF80734, -0x760002D3,0x6C000198,0x600002F8,0x58000738,0xFE8C00D4,0xFCA8046A,0xFEAC0517,0xCA7C0002,0x9C780003,0x847C0002,0x76800011,0x74740012,0xFE7000A7,0xC2680000,0x787000A9,0x6C4400D5,0x17C0734,0xC802D3,0xB0B400A2,0x84B400A2,0x76B400A2,0xA2A400C9,0x86A40002,0x78A40015,0x7AA000C9,0x749C0026,0x6CA000C9,0x12802D3,0x927C00A2,0x769800A2,0x867000C9,0x767C0001, -0x6C8800C8,0x19FC02D3,0x763C00A2,0x6C3000C8,0x620002D4,0x12802D3,0x927C00A2,0x769800A2,0x867000C9,0x767C0001,0x6C8800C8,0x19FC02D3,0x763C00A2,0x6C3000C8,0x620002D4,0x19FC02D3,0x763C00A2,0x6C3000C8,0x620002D4,0x620002D4,0xFE940050,0xF4B801A3,0xF8C00193,0xCA7C0001,0x9C780002,0x847C0001,0x76880002,0x746C0006,0xFE780056,0xC2680000,0x7A6800A2,0x6C3000C8, -0x1A802D3,0xA002D3,0xA002D3,0xA002D3,0xA002D3,0x989000CA,0x989000CA,0x989000CA,0x708C00CA,0x708C00CA,0x628C00CA,0x927C00A3,0x927C00A3,0x927C00A3,0x747C0002,0x747C0002,0x64800026,0x667C00A3,0x667C00A3,0x60780015,0x587800A5,0xEC02D3,0xEC02D3,0xEC02D3,0x7A5C00C9,0x7A5C00C9,0x627400C8,0x744400A2,0x744400A2,0x62540001,0x586000A4,0x1E402D3, -0x1E402D3,0x621C00C8,0x580800A4,0x500002D4,0xFE840046,0xF498018A,0xA002D3,0xCE780001,0x987C0002,0x827C0002,0x7C7C0005,0x70780002,0xF86C0032,0xC2680000,0x767400A3,0x62540001,0x15402D3,0xB400A2,0xB400A2,0xB400A2,0xB400A2,0x84A40001,0x84A40001,0x84A40001,0x6AA40001,0x6AA40001,0x62A00001,0x10C00A2,0x10C00A2,0x10C00A2,0x70840001,0x70840001, -0x62900000,0xBF800A2,0xBF800A2,0x62580000,0x580000A4,0x10C00A2,0x10C00A2,0x10C00A2,0x70840001,0x70840001,0x62900000,0xBF800A2,0xBF800A2,0x62580000,0x580000A4,0xBF800A2,0xBF800A2,0x62580000,0x580000A4,0x580000A4,0xFE900005,0xFCA80019,0xB400A2,0xCE780000,0x94800000,0x80800000,0x78840000,0x70780001,0xFA70000D,0xC2680000,0x17C00A2,0x62580000, -0x17C00A2,0xD800CA,0x9CC80001,0x80C40001,0x76C40001,0x14400C8,0x86A40001,0x76B00001,0x27F800C8,0x76740000,0x6C0000C8,0x14400C8,0x86A40001,0x76B00001,0x27F800C8,0x76740000,0x6C0000C8,0x27F800C8,0x76740000,0x6C0000C8,0x6C0000C8,0x14400C8,0x86A40001,0x76B00001,0x27F800C8,0x76740000,0x6C0000C8,0x27F800C8,0x76740000,0x6C0000C8,0x6C0000C8,0x27F800C8, -0x76740000,0x6C0000C8,0x6C0000C8,0x6C0000C8,0xF4A00029,0xE800C8,0xFECC003A,0xCA7C0000,0x9C780001,0x86740000,0x768C0000,0x76540000,0xF8840020,0xC2680000,0x78940001,0x6C0000C8,0x1D000C8,0x8C00CA,0x8C00CA,0x8C00CA,0x8C00CA,0x8C00CA,0x8C00CA,0x8C00CA,0x8C00CA,0x8C00CA,0x8C00CA,0x767C0001,0x767C0001,0x767C0001,0x767C0001,0x767C0001, -0x767C0001,0x5A780001,0x5A780001,0x5A780001,0x50780001,0x2D000C8,0x2D000C8,0x2D000C8,0x2D000C8,0x2D000C8,0x2D000C8,0x60580001,0x60580001,0x60580001,0x50640001,0x1AC00C8,0x1AC00C8,0x1AC00C8,0x50280000,0x460000C8,0xF8800022,0x8C00CA,0x8C00CA,0xC27C0001,0x9A7C0001,0x847C0001,0x847C0001,0x6C7C0001,0xFC640008,0xC0680000,0x64740000,0x60580001, -0x12C00C8,}; -static const uint32_t g_etc1_to_bc7_m6_table76[] = { -0x8C0000,0x8C0000,0x8C0000,0x8C0000,0x8C0000,0x8C0000,0x8C0000,0x8C0000,0x8C0000,0x8C0000,0x8C0000,0x8C0000,0x8C0000,0x8C0000,0x8C0000,0x8C0000,0x8C0000,0x8C0000,0x8C0000,0x8C0000,0xD00000,0xD00000,0xD00000,0xD00000,0xD00000,0xD00000,0xD00000,0xD00000,0xD00000,0xD00000,0x1A40000, -0x1A40000,0x1A40000,0x1A40000,0x44000001,0x8C0000,0x8C0000,0x8C0000,0x8C0000,0x8C0000,0x8C0000,0x8C0000,0x8C0000,0x2940000,0x2940000,0x2940000,0xD00000,0x1280000,0xB40000,0xB40000,0xB40000,0xB40000,0xB40000,0xB40000,0xB40000,0xB40000,0xB40000,0xB40000,0x10C0000,0x10C0000,0x10C0000,0x10C0000,0x10C0000, -0x10C0000,0xBF80000,0xBF80000,0xBF80000,0x58000001,0x10C0000,0x10C0000,0x10C0000,0x10C0000,0x10C0000,0x10C0000,0xBF80000,0xBF80000,0xBF80000,0x58000001,0xBF80000,0xBF80000,0xBF80000,0x58000001,0x58000001,0xC00000,0xB40000,0xB40000,0xD00000,0x2E00000,0xF40000,0xF40000,0x32C0000,0xD00000,0x2E00000,0x17C0000,0xBF80000, -0x17C0000,0xD80000,0xD80000,0xD80000,0xD80000,0x1400000,0x1400000,0x1400000,0x25F80000,0x25F80000,0x6A000001,0x1400000,0x1400000,0x1400000,0x25F80000,0x25F80000,0x6A000001,0x25F80000,0x25F80000,0x6A000001,0x6A000001,0x1400000,0x1400000,0x1400000,0x25F80000,0x25F80000,0x6A000001,0x25F80000,0x25F80000,0x6A000001,0x6A000001,0x25F80000, -0x25F80000,0x6A000001,0x6A000001,0x6A000001,0xFC0000,0xAE40000,0xD80000,0x3240000,0x16C0000,0x1CC0000,0x9F80000,0x37FC0000,0x50C0000,0x1400000,0x1CC0000,0x6A000001,0x1CC0000,0x1000000,0x17C0000,0x43F80000,0x7E000001,0x17C0000,0x43F80000,0x7E000001,0x43F80000,0x7E000001,0x7E000001,0x17C0000,0x43F80000,0x7E000001,0x43F80000,0x7E000001, -0x7E000001,0x43F80000,0x7E000001,0x7E000001,0x7E000001,0x17C0000,0x43F80000,0x7E000001,0x43F80000,0x7E000001,0x7E000001,0x43F80000,0x7E000001,0x7E000001,0x7E000001,0x43F80000,0x7E000001,0x7E000001,0x7E000001,0x7E000001,0x1400000,0x1100000,0x1100000,0x3AC0000,0x29FC0000,0x61F00000,0x7E000001,0x7E000001,0x15C0000,0x1E00000,0x79C40000,0x7E000001, -0x11FC0000,0xC40738,0xCCB402D4,0x92B402D4,0x7EB402D5,0xC2A00190,0x9AA000D5,0x80A8013A,0x88A00190,0x7CA000D5,0x74A00192,0xBC8C02D3,0x9C8C00A2,0x849800FF,0x8C8C00D1,0x7E8C0002,0x749000D7,0x7E8C02D4,0x7A8400FD,0x7284013B,0x6C8C02D3,0x3240734,0xA46802D3,0x7E8C02D4,0x965C0192,0x807400CF,0x747C0192,0x904402D3,0x7E5400A3,0x745400D7,0x6C6402D4,0x17FC0734, -0x7E1402D4,0x74080192,0x6C0002DC,0x62000734,0xFEA000FE,0xF6BC04A0,0xF8C0053C,0xD48C0000,0xA68C0001,0x8C8C0002,0x80900012,0x7C8C0011,0xFE8800DC,0xC87C0002,0x828000A9,0x745400D7,0x1A40734,0xD802D4,0xB8C800A4,0x8CC800A4,0x7EC400A5,0xAEB400C8,0x90B40001,0x80B80015,0x82B400C8,0x7CB00026,0x74B400CA,0x14402D3,0x9A9000A2,0x7EAC00A3,0x8E8400C9,0x7E8C0002, -0x769800CA,0x27F802D3,0x7E5400A3,0x744400CA,0x6C0002D3,0x14402D3,0x9A9000A2,0x7EAC00A3,0x8E8400C9,0x7E8C0002,0x769800CA,0x27F802D3,0x7E5400A3,0x744400CA,0x6C0002D3,0x27F802D3,0x7E5400A3,0x744400CA,0x6C0002D3,0x6C0002D3,0xFAAC0065,0xFECC01A0,0xF2D401AD,0xD48C0000,0xA68C0001,0x8C8C0002,0x80980002,0x7E800005,0xFA900071,0xC87C0001,0x847800A2,0x744400CA, -0x1D002D3,0xB402D4,0xB402D4,0xB402D4,0xB402D4,0xA4A000C8,0xA4A000C8,0xA4A000C8,0x78A000C8,0x78A000C8,0x6AA000C9,0x9C8C00A2,0x9C8C00A2,0x9C8C00A2,0x7E8C0001,0x7E8C0001,0x6E900026,0x708C00A2,0x708C00A2,0x6A880015,0x628C00A2,0x10802D3,0x10802D3,0x10802D3,0x846C00C9,0x846C00C9,0x6C8400C9,0x7E5400A2,0x7E5400A2,0x6A680002,0x627000A2,0x9F802D3, -0x9F802D3,0x6A3000C9,0x621400A2,0x580002D3,0xFC9C005A,0xFEAC0189,0xB402D4,0xD48C0000,0xA28C0001,0x8C8C0001,0x86900006,0x788C0002,0xFE80003E,0xC87C0001,0x808400A2,0x6A680002,0x17802D3,0xC400A4,0xC400A4,0xC400A4,0xC400A4,0x90B40000,0x90B40000,0x90B40000,0x74B40000,0x74B40000,0x6AB40001,0x32400A2,0x32400A2,0x32400A2,0x7A940001,0x7A940001, -0x6AA40001,0x17FC00A2,0x17FC00A2,0x6A6C0001,0x620000A2,0x32400A2,0x32400A2,0x32400A2,0x7A940001,0x7A940001,0x6AA40001,0x17FC00A2,0x17FC00A2,0x6A6C0001,0x620000A2,0x17FC00A2,0x17FC00A2,0x6A6C0001,0x620000A2,0x620000A2,0xFEA0000A,0xF6BC0020,0xC400A4,0xD48C0000,0xA0900000,0x8A900000,0x80980001,0x7A880000,0xF8880012,0xC87C0000,0x1A400A2,0x6A6C0001, -0x1A400A2,0xEC00C8,0xA8D80000,0x88D80001,0x7ED80001,0x35C00C8,0x90B40001,0x7EC40001,0x33FC00C8,0x7E880001,0x740000CA,0x35C00C8,0x90B40001,0x7EC40001,0x33FC00C8,0x7E880001,0x740000CA,0x33FC00C8,0x7E880001,0x740000CA,0x740000CA,0x35C00C8,0x90B40001,0x7EC40001,0x33FC00C8,0x7E880001,0x740000CA,0x33FC00C8,0x7E880001,0x740000CA,0x740000CA,0x33FC00C8, -0x7E880001,0x740000CA,0x740000CA,0x740000CA,0xFEB40029,0xFC00C8,0xFAE4003D,0xD0900000,0xA6880001,0x8E880000,0x7EA00001,0x7E6C0001,0xFE980020,0xCA7C0000,0x82A40000,0x740000CA,0x1F400C8,0xA000C8,0xA000C8,0xA000C8,0xA000C8,0xA000C8,0xA000C8,0xA000C8,0xA000C8,0xA000C8,0xA000C8,0x828C0000,0x828C0000,0x828C0000,0x828C0000,0x828C0000, -0x828C0000,0x628C0001,0x628C0001,0x628C0001,0x588C0001,0xEC00C8,0xEC00C8,0xEC00C8,0xEC00C8,0xEC00C8,0xEC00C8,0x6A680001,0x6A680001,0x6A680001,0x58780001,0x1E400C8,0x1E400C8,0x1E400C8,0x583C0001,0x4E0000CA,0xF2940029,0xA000C8,0xA000C8,0xD08C0000,0xA68C0000,0x908C0000,0x908C0000,0x768C0000,0xF47C000D,0xC07C0001,0x6A880001,0x6A680001, -0x15400C8,}; -static const uint32_t g_etc1_to_bc7_m6_table77[] = { -0x9C0000,0x9C0000,0x9C0000,0x9C0000,0x9C0000,0x9C0000,0x9C0000,0x9C0000,0x9C0000,0x9C0000,0x9C0000,0x9C0000,0x9C0000,0x9C0000,0x9C0000,0x9C0000,0x9C0000,0x9C0000,0x9C0000,0x9C0000,0xE80000,0xE80000,0xE80000,0xE80000,0xE80000,0xE80000,0xE80000,0xE80000,0xE80000,0xE80000,0x1D80000, -0x1D80000,0x1D80000,0x1D80000,0x4C000001,0x9C0000,0x9C0000,0x9C0000,0x9C0000,0x9C0000,0x9C0000,0x9C0000,0x9C0000,0xAA40000,0xAA40000,0xAA40000,0xE80000,0x14C0000,0xC40000,0xC40000,0xC40000,0xC40000,0xC40000,0xC40000,0xC40000,0xC40000,0xC40000,0xC40000,0x1240000,0x1240000,0x1240000,0x1240000,0x1240000, -0x1240000,0x17F80000,0x17F80000,0x17F80000,0x60000001,0x1240000,0x1240000,0x1240000,0x1240000,0x1240000,0x1240000,0x17F80000,0x17F80000,0x17F80000,0x60000001,0x17F80000,0x17F80000,0x17F80000,0x60000001,0x60000001,0xD00000,0xC40000,0xC40000,0xE40000,0x2F40000,0x3080000,0x3080000,0x1480000,0xE40000,0x2F40000,0x1A00000,0x17F80000, -0x1A00000,0xE80000,0xE80000,0xE80000,0xE80000,0x1580000,0x1580000,0x1580000,0x31F80000,0x31F80000,0x72000001,0x1580000,0x1580000,0x1580000,0x31F80000,0x31F80000,0x72000001,0x31F80000,0x31F80000,0x72000001,0x72000001,0x1580000,0x1580000,0x1580000,0x31F80000,0x31F80000,0x72000001,0x31F80000,0x31F80000,0x72000001,0x72000001,0x31F80000, -0x31F80000,0x72000001,0x72000001,0x72000001,0x30C0000,0xF80000,0xE80000,0x13C0000,0x1840000,0x1EC0000,0x15FC0000,0x43F40000,0x5200000,0x1580000,0x1EC0000,0x72000001,0x1EC0000,0x1100000,0x1940000,0x4FF80000,0x86000001,0x1940000,0x4FF80000,0x86000001,0x4FF80000,0x86000001,0x86000001,0x1940000,0x4FF80000,0x86000001,0x4FF80000,0x86000001, -0x86000001,0x4FF80000,0x86000001,0x86000001,0x86000001,0x1940000,0x4FF80000,0x86000001,0x4FF80000,0x86000001,0x86000001,0x4FF80000,0x86000001,0x86000001,0x86000001,0x4FF80000,0x86000001,0x86000001,0x86000001,0x86000001,0x1540000,0x9200000,0x9200000,0x1C80000,0x37FC0000,0x6BF00000,0x86000001,0x86000001,0x3700000,0x3FC0000,0x81D40000,0x86000001, -0x1FFC0000,0xD40738,0xD4C402D4,0x9AC402D4,0x86C402D5,0xCAB00190,0xA2B000D5,0x88B8013A,0x90B00190,0x84B000D5,0x7CB00192,0xC49C02D3,0xA49C00A2,0x8CA800FF,0x949C00D1,0x869C0002,0x7CA000D7,0x869C02D4,0x829400FD,0x7A94013B,0x749C02D3,0x33C0734,0xAC7802D3,0x869C02D4,0x9E6C0192,0x888400CF,0x7C8C0192,0x985402D3,0x866400A3,0x7C6400D7,0x747402D4,0x23FC0734, -0x862402D4,0x7C180192,0x740002D4,0x6A000734,0xFEB4012D,0xFECC04A0,0xFECC0554,0xDC9C0000,0xAE9C0001,0x949C0002,0x88A00012,0x849C0011,0xFE9800FA,0xD08C0002,0x8A9000A9,0x7C6400D7,0x1C80734,0xE802D4,0xC0D800A4,0x94D800A4,0x86D400A5,0xB6C400C8,0x98C40001,0x88C80015,0x8AC400C8,0x84C00026,0x7CC400CA,0x15C02D3,0xA2A000A2,0x86BC00A3,0x969400C9,0x869C0002, -0x7EA800CA,0x33F802D3,0x866400A3,0x7C5400CA,0x740002D3,0x15C02D3,0xA2A000A2,0x86BC00A3,0x969400C9,0x869C0002,0x7EA800CA,0x33F802D3,0x866400A3,0x7C5400CA,0x740002D3,0x33F802D3,0x866400A3,0x7C5400CA,0x740002D3,0x740002D3,0xFEBC0076,0xF6DC01BA,0xFAE401AD,0xDC9C0000,0xAE9C0001,0x949C0002,0x88A80002,0x86900005,0xFEA40081,0xD08C0001,0x8C8800A2,0x7C5400CA, -0x1F002D3,0xC402D4,0xC402D4,0xC402D4,0xC402D4,0xACB000C8,0xACB000C8,0xACB000C8,0x80B000C8,0x80B000C8,0x72B000C9,0xA49C00A2,0xA49C00A2,0xA49C00A2,0x869C0001,0x869C0001,0x76A00026,0x789C00A2,0x789C00A2,0x72980015,0x6A9C00A2,0x12002D3,0x12002D3,0x12002D3,0x8C7C00C9,0x8C7C00C9,0x749400C9,0x866400A2,0x866400A2,0x72780002,0x6A8000A2,0x15F802D3, -0x15F802D3,0x724000C9,0x6A2400A2,0x600002D3,0xFEAC0065,0xF6BC01A0,0xC402D4,0xDC9C0000,0xAA9C0001,0x949C0001,0x8EA00006,0x809C0002,0xFE90004A,0xD08C0001,0x889400A2,0x72780002,0x19C02D3,0xD400A4,0xD400A4,0xD400A4,0xD400A4,0x98C40000,0x98C40000,0x98C40000,0x7CC40000,0x7CC40000,0x72C40001,0x33C00A2,0x33C00A2,0x33C00A2,0x82A40001,0x82A40001, -0x72B40001,0x23FC00A2,0x23FC00A2,0x727C0001,0x6A0000A2,0x33C00A2,0x33C00A2,0x33C00A2,0x82A40001,0x82A40001,0x72B40001,0x23FC00A2,0x23FC00A2,0x727C0001,0x6A0000A2,0x23FC00A2,0x23FC00A2,0x727C0001,0x6A0000A2,0x6A0000A2,0xFAB4000D,0xFECC0020,0xD400A4,0xDC9C0000,0xA8A00000,0x92A00000,0x88A80001,0x82980000,0xF29C0019,0xD08C0000,0x1C800A2,0x727C0001, -0x1C800A2,0xFC00C8,0xB0E80000,0x90E80001,0x86E80001,0x37400C8,0x98C40001,0x86D40001,0x3FFC00C8,0x86980001,0x7C0000CA,0x37400C8,0x98C40001,0x86D40001,0x3FFC00C8,0x86980001,0x7C0000CA,0x3FFC00C8,0x86980001,0x7C0000CA,0x7C0000CA,0x37400C8,0x98C40001,0x86D40001,0x3FFC00C8,0x86980001,0x7C0000CA,0x3FFC00C8,0x86980001,0x7C0000CA,0x7C0000CA,0x3FFC00C8, -0x86980001,0x7C0000CA,0x7C0000CA,0x7C0000CA,0xFAC80032,0x10C00C8,0xF2F40048,0xD8A00000,0xAE980001,0x96980000,0x86B00001,0x867C0001,0xFEAC0029,0xD28C0000,0x8AB40000,0x7C0000CA,0xDFC00C8,0xB000C8,0xB000C8,0xB000C8,0xB000C8,0xB000C8,0xB000C8,0xB000C8,0xB000C8,0xB000C8,0xB000C8,0x8A9C0000,0x8A9C0000,0x8A9C0000,0x8A9C0000,0x8A9C0000, -0x8A9C0000,0x6A9C0001,0x6A9C0001,0x6A9C0001,0x609C0001,0x10400C8,0x10400C8,0x10400C8,0x10400C8,0x10400C8,0x10400C8,0x72780001,0x72780001,0x72780001,0x60880001,0x7FC00C8,0x7FC00C8,0x7FC00C8,0x604C0001,0x560000CA,0xFAA40029,0xB000C8,0xB000C8,0xD89C0000,0xAE9C0000,0x989C0000,0x989C0000,0x7E9C0000,0xFC8C000D,0xC88C0001,0x72980001,0x72780001, -0x17400C8,}; -static const uint32_t g_etc1_to_bc7_m6_table78[] = { -0xAC0000,0xAC0000,0xAC0000,0xAC0000,0xAC0000,0xAC0000,0xAC0000,0xAC0000,0xAC0000,0xAC0000,0xAC0000,0xAC0000,0xAC0000,0xAC0000,0xAC0000,0xAC0000,0xAC0000,0xAC0000,0xAC0000,0xAC0000,0x1000000,0x1000000,0x1000000,0x1000000,0x1000000,0x1000000,0x1000000,0x1000000,0x1000000,0x1000000,0x5F80000, -0x5F80000,0x5F80000,0x5F80000,0x54000001,0xAC0000,0xAC0000,0xAC0000,0xAC0000,0xAC0000,0xAC0000,0xAC0000,0xAC0000,0xB80000,0xB80000,0xB80000,0x1000000,0x16C0000,0xD40000,0xD40000,0xD40000,0xD40000,0xD40000,0xD40000,0xD40000,0xD40000,0xD40000,0xD40000,0x13C0000,0x13C0000,0x13C0000,0x13C0000,0x13C0000, -0x13C0000,0x21FC0000,0x21FC0000,0x21FC0000,0x68000001,0x13C0000,0x13C0000,0x13C0000,0x13C0000,0x13C0000,0x13C0000,0x21FC0000,0x21FC0000,0x21FC0000,0x68000001,0x21FC0000,0x21FC0000,0x21FC0000,0x68000001,0x68000001,0x8E00000,0xD40000,0xD40000,0x4F40000,0x3080000,0x1200000,0x1200000,0x1640000,0x4F40000,0x3080000,0x1C00000,0x21FC0000, -0x1C00000,0xF80000,0xF80000,0xF80000,0xF80000,0x1700000,0x1700000,0x1700000,0x3DF80000,0x3DF80000,0x7A000001,0x1700000,0x1700000,0x1700000,0x3DF80000,0x3DF80000,0x7A000001,0x3DF80000,0x3DF80000,0x7A000001,0x7A000001,0x1700000,0x1700000,0x1700000,0x3DF80000,0x3DF80000,0x7A000001,0x3DF80000,0x3DF80000,0x7A000001,0x7A000001,0x3DF80000, -0x3DF80000,0x7A000001,0x7A000001,0x7A000001,0x1200000,0x1080000,0xF80000,0x1500000,0x1A00000,0x9FC0000,0x23FC0000,0x4DFC0000,0x5340000,0x1700000,0x9FC0000,0x7A000001,0x9FC0000,0x1200000,0x1AC0000,0x5BF80000,0x8E000001,0x1AC0000,0x5BF80000,0x8E000001,0x5BF80000,0x8E000001,0x8E000001,0x1AC0000,0x5BF80000,0x8E000001,0x5BF80000,0x8E000001, -0x8E000001,0x5BF80000,0x8E000001,0x8E000001,0x8E000001,0x1AC0000,0x5BF80000,0x8E000001,0x5BF80000,0x8E000001,0x8E000001,0x5BF80000,0x8E000001,0x8E000001,0x8E000001,0x5BF80000,0x8E000001,0x8E000001,0x8E000001,0x8E000001,0x1680000,0x1340000,0x1340000,0x1E40000,0x45FC0000,0x75F00000,0x8E000001,0x8E000001,0x1880000,0x13FC0000,0x89E40000,0x8E000001, -0x2FFC0000,0xE40738,0xDCD402D4,0xA2D402D4,0x8ED402D5,0xD2C00190,0xAAC000D5,0x90C8013A,0x98C00190,0x8CC000D5,0x84C00192,0xCCAC02D3,0xACAC00A2,0x94B800FF,0x9CAC00D1,0x8EAC0002,0x84B000D7,0x8EAC02D4,0x8AA400FD,0x82A4013B,0x7CAC02D3,0x1540734,0xB48802D3,0x8EAC02D4,0xA67C0192,0x909400CF,0x849C0192,0xA06402D3,0x8E7400A3,0x847400D7,0x7C8402D4,0x2FFC0734, -0x8E3402D4,0x84280192,0x7C0C02D3,0x72000734,0xFEC40168,0xF6DC04DA,0xF8E00569,0xE4AC0000,0xB6AC0001,0x9CAC0002,0x90B00012,0x8CAC0011,0xFCB0013D,0xD89C0002,0x92A000A9,0x847400D7,0x1E80734,0xF802D4,0xC8E800A4,0x9CE800A4,0x8EE400A5,0xBED400C8,0xA0D40001,0x90D80015,0x92D400C8,0x8CD00026,0x84D400CA,0x17402D3,0xAAB000A2,0x8ECC00A3,0x9EA400C9,0x8EAC0002, -0x86B800CA,0x3FF802D3,0x8E7400A3,0x846400CA,0x7C0002D3,0x17402D3,0xAAB000A2,0x8ECC00A3,0x9EA400C9,0x8EAC0002,0x86B800CA,0x3FF802D3,0x8E7400A3,0x846400CA,0x7C0002D3,0x3FF802D3,0x8E7400A3,0x846400CA,0x7C0002D3,0x7C0002D3,0xFED00083,0xFEEC01BA,0xF2F401C8,0xE4AC0000,0xB6AC0001,0x9CAC0002,0x90B80002,0x8EA00005,0xFEB40095,0xD89C0001,0x949800A2,0x846400CA, -0xBFC02D3,0xD402D4,0xD402D4,0xD402D4,0xD402D4,0xB4C000C8,0xB4C000C8,0xB4C000C8,0x88C000C8,0x88C000C8,0x7AC000C9,0xACAC00A2,0xACAC00A2,0xACAC00A2,0x8EAC0001,0x8EAC0001,0x7EB00026,0x80AC00A2,0x80AC00A2,0x7AA80015,0x72AC00A2,0x13802D3,0x13802D3,0x13802D3,0x948C00C9,0x948C00C9,0x7CA400C9,0x8E7400A2,0x8E7400A2,0x7A880002,0x729000A2,0x21F802D3, -0x21F802D3,0x7A5000C9,0x723400A2,0x680002D3,0xFEBC0075,0xFECC01A0,0xD402D4,0xE4AC0000,0xB2AC0001,0x9CAC0001,0x96B00006,0x88AC0002,0xFEA0005A,0xD89C0001,0x90A400A2,0x7A880002,0x1BC02D3,0xE400A4,0xE400A4,0xE400A4,0xE400A4,0xA0D40000,0xA0D40000,0xA0D40000,0x84D40000,0x84D40000,0x7AD40001,0x15400A2,0x15400A2,0x15400A2,0x8AB40001,0x8AB40001, -0x7AC40001,0x2FFC00A2,0x2FFC00A2,0x7A8C0001,0x720000A2,0x15400A2,0x15400A2,0x15400A2,0x8AB40001,0x8AB40001,0x7AC40001,0x2FFC00A2,0x2FFC00A2,0x7A8C0001,0x720000A2,0x2FFC00A2,0x2FFC00A2,0x7A8C0001,0x720000A2,0x720000A2,0xF6C80012,0xF6DC0029,0xE400A4,0xE4AC0000,0xB0B00000,0x9AB00000,0x90B80001,0x8AA80000,0xFAAC0019,0xD89C0000,0x1E800A2,0x7A8C0001, -0x1E800A2,0x10C00C8,0xB8F80000,0x98F80001,0x8EF80001,0x38C00C8,0xA0D40001,0x8EE40001,0x4BFC00C8,0x8EA80001,0x840000CA,0x38C00C8,0xA0D40001,0x8EE40001,0x4BFC00C8,0x8EA80001,0x840000CA,0x4BFC00C8,0x8EA80001,0x840000CA,0x840000CA,0x38C00C8,0xA0D40001,0x8EE40001,0x4BFC00C8,0x8EA80001,0x840000CA,0x4BFC00C8,0x8EA80001,0x840000CA,0x840000CA,0x4BFC00C8, -0x8EA80001,0x840000CA,0x840000CA,0x840000CA,0xF2E0003D,0x71C00C8,0xFB040048,0xE0B00000,0xB6A80001,0x9EA80000,0x8EC00001,0x8E8C0001,0xF4C80032,0xDA9C0000,0x92C40000,0x840000CA,0x1DF800C8,0xC000C8,0xC000C8,0xC000C8,0xC000C8,0xC000C8,0xC000C8,0xC000C8,0xC000C8,0xC000C8,0xC000C8,0x92AC0000,0x92AC0000,0x92AC0000,0x92AC0000,0x92AC0000, -0x92AC0000,0x72AC0001,0x72AC0001,0x72AC0001,0x68AC0001,0x11C00C8,0x11C00C8,0x11C00C8,0x11C00C8,0x11C00C8,0x11C00C8,0x7A880001,0x7A880001,0x7A880001,0x68980001,0x13FC00C8,0x13FC00C8,0x13FC00C8,0x685C0001,0x5E0000CA,0xF2B40034,0xC000C8,0xC000C8,0xE0AC0000,0xB6AC0000,0xA0AC0000,0xA0AC0000,0x86AC0000,0xFC9C0012,0xD09C0001,0x7AA80001,0x7A880001, -0x19800C8,}; -static const uint32_t g_etc1_to_bc7_m6_table79[] = { -0xBC0000,0xBC0000,0xBC0000,0xBC0000,0xBC0000,0xBC0000,0xBC0000,0xBC0000,0xBC0000,0xBC0000,0xBC0000,0xBC0000,0xBC0000,0xBC0000,0xBC0000,0xBC0000,0xBC0000,0xBC0000,0xBC0000,0xBC0000,0x1180000,0x1180000,0x1180000,0x1180000,0x1180000,0x1180000,0x1180000,0x1180000,0x1180000,0x1180000,0x11F80000, -0x11F80000,0x11F80000,0x11F80000,0x5C000001,0xBC0000,0xBC0000,0xBC0000,0xBC0000,0xBC0000,0xBC0000,0xBC0000,0xBC0000,0xC80000,0xC80000,0xC80000,0x1180000,0x1900000,0xE40000,0xE40000,0xE40000,0xE40000,0xE40000,0xE40000,0xE40000,0xE40000,0xE40000,0xE40000,0x3500000,0x3500000,0x3500000,0x3500000,0x3500000, -0x3500000,0x2DFC0000,0x2DFC0000,0x2DFC0000,0x70000001,0x3500000,0x3500000,0x3500000,0x3500000,0x3500000,0x3500000,0x2DFC0000,0x2DFC0000,0x2DFC0000,0x70000001,0x2DFC0000,0x2DFC0000,0x2DFC0000,0x70000001,0x70000001,0xF40000,0xE40000,0xE40000,0x1080000,0x31C0000,0x3340000,0x3340000,0x1800000,0x1080000,0x31C0000,0x1E40000,0x2DFC0000, -0x1E40000,0x1080000,0x1080000,0x1080000,0x1080000,0x1880000,0x1880000,0x1880000,0x49F80000,0x49F80000,0x82000001,0x1880000,0x1880000,0x1880000,0x49F80000,0x49F80000,0x82000001,0x49F80000,0x49F80000,0x82000001,0x82000001,0x1880000,0x1880000,0x1880000,0x49F80000,0x49F80000,0x82000001,0x49F80000,0x49F80000,0x82000001,0x82000001,0x49F80000, -0x49F80000,0x82000001,0x82000001,0x82000001,0x1340000,0x5180000,0x1080000,0x1680000,0x1BC0000,0x19FC0000,0x31FC0000,0x59F40000,0x14C0000,0x1880000,0x19FC0000,0x82000001,0x19FC0000,0x1300000,0x1C40000,0x67F80000,0x96000001,0x1C40000,0x67F80000,0x96000001,0x67F80000,0x96000001,0x96000001,0x1C40000,0x67F80000,0x96000001,0x67F80000,0x96000001, -0x96000001,0x67F80000,0x96000001,0x96000001,0x96000001,0x1C40000,0x67F80000,0x96000001,0x67F80000,0x96000001,0x96000001,0x67F80000,0x96000001,0x96000001,0x96000001,0x67F80000,0x96000001,0x96000001,0x96000001,0x96000001,0x17C0000,0x1440000,0x1440000,0x3FC0000,0x53F80000,0x7FF00000,0x96000001,0x96000001,0x19C0000,0x25FC0000,0x91F40000,0x96000001, -0x3FF80000,0xF40738,0xE4E402D4,0xAAE402D4,0x96E402D5,0xDAD00190,0xB2D000D5,0x98D8013A,0xA0D00190,0x94D000D5,0x8CD00192,0xD4BC02D3,0xB4BC00A2,0x9CC800FF,0xA4BC00D1,0x96BC0002,0x8CC000D7,0x96BC02D4,0x92B400FD,0x8AB4013B,0x84BC02D3,0x16C0734,0xBC9802D3,0x96BC02D4,0xAE8C0192,0x98A400CF,0x8CAC0192,0xA87402D3,0x968400A3,0x8C8400D7,0x849402D4,0x3BFC0734, -0x964402D4,0x8C380192,0x841C02D3,0x7A000734,0xFED8019A,0xFEEC04DA,0xFEEC0585,0xECBC0000,0xBEBC0001,0xA4BC0002,0x98C00012,0x94BC0011,0xFEBC0167,0xE0AC0002,0x9AB000A9,0x8C8400D7,0x7FC0734,0x10802D4,0xD0F800A4,0xA4F800A4,0x96F400A5,0xC6E400C8,0xA8E40001,0x98E80015,0x9AE400C8,0x94E00026,0x8CE400CA,0x18C02D3,0xB2C000A2,0x96DC00A3,0xA6B400C9,0x96BC0002, -0x8EC800CA,0x4BF802D3,0x968400A3,0x8C7400CA,0x840002D3,0x18C02D3,0xB2C000A2,0x96DC00A3,0xA6B400C9,0x96BC0002,0x8EC800CA,0x4BF802D3,0x968400A3,0x8C7400CA,0x840002D3,0x4BF802D3,0x968400A3,0x8C7400CA,0x840002D3,0x840002D3,0xFEE400A6,0xF90001D4,0xFB0401C8,0xECBC0000,0xBEBC0001,0xA4BC0002,0x98C80002,0x96B00005,0xFACC00B5,0xE0AC0001,0x9CA800A2,0x8C7400CA, -0x1BFC02D3,0xE402D4,0xE402D4,0xE402D4,0xE402D4,0xBCD000C8,0xBCD000C8,0xBCD000C8,0x90D000C8,0x90D000C8,0x82D000C9,0xB4BC00A2,0xB4BC00A2,0xB4BC00A2,0x96BC0001,0x96BC0001,0x86C00026,0x88BC00A2,0x88BC00A2,0x82B80015,0x7ABC00A2,0x15002D3,0x15002D3,0x15002D3,0x9C9C00C9,0x9C9C00C9,0x84B400C9,0x968400A2,0x968400A2,0x82980002,0x7AA000A2,0x2DF802D3, -0x2DF802D3,0x826000C9,0x7A4400A2,0x700002D3,0xFECC0084,0xF6DC01B9,0xE402D4,0xECBC0000,0xBABC0001,0xA4BC0001,0x9EC00006,0x90BC0002,0xFEB40065,0xE0AC0001,0x98B400A2,0x82980002,0x1E002D3,0xF400A4,0xF400A4,0xF400A4,0xF400A4,0xA8E40000,0xA8E40000,0xA8E40000,0x8CE40000,0x8CE40000,0x82E40001,0x16C00A2,0x16C00A2,0x16C00A2,0x92C40001,0x92C40001, -0x82D40001,0x3BFC00A2,0x3BFC00A2,0x829C0001,0x7A0000A2,0x16C00A2,0x16C00A2,0x16C00A2,0x92C40001,0x92C40001,0x82D40001,0x3BFC00A2,0x3BFC00A2,0x829C0001,0x7A0000A2,0x3BFC00A2,0x3BFC00A2,0x829C0001,0x7A0000A2,0x7A0000A2,0xFED80012,0xFEEC0029,0xF400A4,0xECBC0000,0xB8C00000,0xA2C00000,0x98C80001,0x92B80000,0xFCC00020,0xE0AC0000,0x7FC00A2,0x829C0001, -0x7FC00A2,0x11C00C8,0xC1080000,0xA1080001,0x97080001,0x3A400C8,0xA8E40001,0x96F40001,0x57FC00C8,0x96B80001,0x8C0000CA,0x3A400C8,0xA8E40001,0x96F40001,0x57FC00C8,0x96B80001,0x8C0000CA,0x57FC00C8,0x96B80001,0x8C0000CA,0x8C0000CA,0x3A400C8,0xA8E40001,0x96F40001,0x57FC00C8,0x96B80001,0x8C0000CA,0x57FC00C8,0x96B80001,0x8C0000CA,0x8C0000CA,0x57FC00C8, -0x96B80001,0x8C0000CA,0x8C0000CA,0x8C0000CA,0xFAF0003D,0xF2C00C8,0xF3140055,0xE8C00000,0xBEB80001,0xA6B80000,0x96D00001,0x969C0001,0xFCD80032,0xE2AC0000,0x9AD40000,0x8C0000CA,0x2BFC00C8,0xD000C8,0xD000C8,0xD000C8,0xD000C8,0xD000C8,0xD000C8,0xD000C8,0xD000C8,0xD000C8,0xD000C8,0x9ABC0000,0x9ABC0000,0x9ABC0000,0x9ABC0000,0x9ABC0000, -0x9ABC0000,0x7ABC0001,0x7ABC0001,0x7ABC0001,0x70BC0001,0x13400C8,0x13400C8,0x13400C8,0x13400C8,0x13400C8,0x13400C8,0x82980001,0x82980001,0x82980001,0x70A80001,0x1FF800C8,0x1FF800C8,0x1FF800C8,0x706C0001,0x660000CA,0xFAC40034,0xD000C8,0xD000C8,0xE8BC0000,0xBEBC0000,0xA8BC0000,0xA8BC0000,0x8EBC0000,0xF8B00019,0xD8AC0001,0x82B80001,0x82980001, -0x1B800C8,}; -static const uint32_t g_etc1_to_bc7_m6_table80[] = { -0xCC0001,0xCC0001,0xCC0001,0xCC0001,0xCC0001,0xCC0001,0xCC0001,0xCC0001,0xCC0001,0xCC0001,0xCC0001,0xCC0001,0xCC0001,0xCC0001,0xCC0001,0xCC0001,0xCC0001,0xCC0001,0xCC0001,0xCC0001,0x3300000,0x3300000,0x3300000,0x3300000,0x3300000,0x3300000,0x3300000,0x3300000,0x3300000,0x3300000,0x1DFC0000, -0x1DFC0000,0x1DFC0000,0x1DFC0000,0x66000000,0xCC0001,0xCC0001,0xCC0001,0xCC0001,0xCC0001,0xCC0001,0xCC0001,0xCC0001,0xDC0000,0xDC0000,0xDC0000,0x3300000,0x1B40000,0xF40001,0xF40001,0xF40001,0xF40001,0xF40001,0xF40001,0xF40001,0xF40001,0xF40001,0xF40001,0x16C0000,0x16C0000,0x16C0000,0x16C0000,0x16C0000, -0x16C0000,0x3BFC0000,0x3BFC0000,0x3BFC0000,0x7A000000,0x16C0000,0x16C0000,0x16C0000,0x16C0000,0x16C0000,0x16C0000,0x3BFC0000,0x3BFC0000,0x3BFC0000,0x7A000000,0x3BFC0000,0x3BFC0000,0x3BFC0000,0x7A000000,0x7A000000,0xB040000,0xF40001,0xF40001,0x51C0000,0x1340000,0x34C0000,0x34C0000,0x19C0000,0x51C0000,0x1340000,0x7FC0000,0x3BFC0000, -0x7FC0000,0x1180001,0x1180001,0x1180001,0x1180001,0x1A40000,0x1A40000,0x1A40000,0x57F80000,0x57F80000,0x8C000000,0x1A40000,0x1A40000,0x1A40000,0x57F80000,0x57F80000,0x8C000000,0x57F80000,0x57F80000,0x8C000000,0x8C000000,0x1A40000,0x1A40000,0x1A40000,0x57F80000,0x57F80000,0x8C000000,0x57F80000,0x57F80000,0x8C000000,0x8C000000,0x57F80000, -0x57F80000,0x8C000000,0x8C000000,0x8C000000,0x1480000,0x12C0000,0x1180001,0x1800000,0x1D80000,0x29FC0000,0x3FFC0000,0x65F40000,0x3600000,0x1A40000,0x29FC0000,0x8C000000,0x29FC0000,0x1400001,0x3DC0000,0x73FC0000,0xA0000000,0x3DC0000,0x73FC0000,0xA0000000,0x73FC0000,0xA0000000,0xA0000000,0x3DC0000,0x73FC0000,0xA0000000,0x73FC0000,0xA0000000, -0xA0000000,0x73FC0000,0xA0000000,0xA0000000,0xA0000000,0x3DC0000,0x73FC0000,0xA0000000,0x73FC0000,0xA0000000,0xA0000000,0x73FC0000,0xA0000000,0xA0000000,0xA0000000,0x73FC0000,0xA0000000,0xA0000000,0xA0000000,0xA0000000,0x1940000,0x1580000,0x1580000,0x19FC0000,0x61FC0000,0x89FC0000,0xA0000000,0xA0000000,0x3B40000,0x37FC0000,0x9BE80000,0xA0000000, -0x4FFC0000,0x1080734,0xF0F402D3,0xB2F402D4,0xA0F402D3,0xE2E40192,0xBAE400D7,0xA4E8013B,0xA8E40192,0x9EE000D7,0x96E00192,0xDAD002D4,0xBCD000A3,0xA4D800FD,0xACCC00CF,0xA0D00002,0x96D400D5,0xA0CC02D4,0x9AC400FF,0x92CC013A,0x8CCC02D5,0x1880734,0xC4AC02D3,0xA0D002D4,0xB89C0192,0xA0B400D1,0x96BC0190,0xB28402D3,0xA09400A2,0x969800D5,0x8CA802D4,0x49F80734, -0xA05402D3,0x96440190,0x8C3002D4,0x82000738,0xFEEC01E2,0xF9000514,0xFB040594,0xF4D00002,0xC6CC0003,0xAED00002,0xA0D40011,0x9EC80012,0xFED4019A,0xECBC0000,0xA2C400A9,0x969800D5,0x19FC0734,0x11C02D3,0xDB0800A2,0xAF0800A2,0xA10800A2,0xCCF800C9,0xB0F80002,0xA2F80015,0xA4F400C9,0x9EF00026,0x96F400C9,0x3A402D3,0xBCD000A2,0xA0EC00A2,0xB0C400C9,0xA0D00001, -0x96DC00C8,0x57FC02D3,0xA09000A2,0x968400C8,0x8C0002D4,0x3A402D3,0xBCD000A2,0xA0EC00A2,0xB0C400C9,0xA0D00001,0x96DC00C8,0x57FC02D3,0xA09000A2,0x968400C8,0x8C0002D4,0x57FC02D3,0xA09000A2,0x968400C8,0x8C0002D4,0x8C0002D4,0xFEF800B6,0xFF0C01E3,0xF51801E6,0xF4D00001,0xC6CC0002,0xAED00001,0xA0DC0002,0x9EC00006,0xFEDC00C5,0xECBC0000,0xA4BC00A2,0x968400C8, -0x2BFC02D3,0xF402D3,0xF402D3,0xF402D3,0xF402D3,0xC2E400CA,0xC2E400CA,0xC2E400CA,0x9AE000CA,0x9AE000CA,0x8CE000CA,0xBCD000A3,0xBCD000A3,0xBCD000A3,0x9ED00002,0x9ED00002,0x8ED40026,0x90D000A3,0x90D000A3,0x8ACC0015,0x82CC00A5,0x36802D3,0x36802D3,0x36802D3,0xA4B000C9,0xA4B000C9,0x8CC800C8,0x9E9800A2,0x9E9800A2,0x8CA80001,0x82B400A4,0x39FC02D3, -0x39FC02D3,0x8C7000C8,0x825C00A4,0x7A0002D4,0xFAE000A6,0xFEEC01BE,0xF402D3,0xF8CC0001,0xC2D00002,0xACD00002,0xA6D00005,0x9ACC0002,0xFCCC0080,0xECBC0000,0xA0C800A3,0x8CA80001,0x5FC02D3,0x10800A2,0x10800A2,0x10800A2,0x10800A2,0xAEF80001,0xAEF80001,0xAEF80001,0x94F80001,0x94F80001,0x8CF40001,0x18800A2,0x18800A2,0x18800A2,0x9AD80001,0x9AD80001, -0x8CE40000,0x49F800A2,0x49F800A2,0x8CAC0000,0x820000A4,0x18800A2,0x18800A2,0x18800A2,0x9AD80001,0x9AD80001,0x8CE40000,0x49F800A2,0x49F800A2,0x8CAC0000,0x820000A4,0x49F800A2,0x49F800A2,0x8CAC0000,0x820000A4,0x820000A4,0xFAEC0019,0xF9000032,0x10800A2,0xF8CC0000,0xBED40000,0xAAD40000,0xA2D80000,0x9ACC0001,0xFED00028,0xECBC0000,0x19FC00A2,0x8CAC0000, -0x19FC00A2,0x12C00CA,0xC71C0001,0xAB180001,0xA1180001,0x1C000C8,0xB0F80001,0xA1040001,0x65F800C8,0xA0C80000,0x960000C8,0x1C000C8,0xB0F80001,0xA1040001,0x65F800C8,0xA0C80000,0x960000C8,0x65F800C8,0xA0C80000,0x960000C8,0x960000C8,0x1C000C8,0xB0F80001,0xA1040001,0x65F800C8,0xA0C80000,0x960000C8,0x65F800C8,0xA0C80000,0x960000C8,0x960000C8,0x65F800C8, -0xA0C80000,0x960000C8,0x960000C8,0x960000C8,0xFB040048,0x94000C8,0xFD280055,0xF4D00000,0xC6CC0001,0xB0C80000,0xA0E00000,0xA0A80000,0xFEF0003D,0xECBC0000,0xA2E80001,0x960000C8,0x3DF800C8,0xE000CA,0xE000CA,0xE000CA,0xE000CA,0xE000CA,0xE000CA,0xE000CA,0xE000CA,0xE000CA,0xE000CA,0xA0D00001,0xA0D00001,0xA0D00001,0xA0D00001,0xA0D00001, -0xA0D00001,0x84CC0001,0x84CC0001,0x84CC0001,0x7ACC0001,0x15000C8,0x15000C8,0x15000C8,0x15000C8,0x15000C8,0x15000C8,0x8AAC0001,0x8AAC0001,0x8AAC0001,0x7AB80001,0x2DF800C8,0x2DF800C8,0x2DF800C8,0x7A7C0000,0x700000C8,0xF4D8003D,0xE000CA,0xE000CA,0xECD00001,0xC4D00001,0xAED00001,0xAED00001,0x96D00001,0xF4C40020,0xEABC0000,0x8EC80000,0x8AAC0001, -0x1E000C8,}; -static const uint32_t g_etc1_to_bc7_m6_table81[] = { -0xDC0001,0xDC0001,0xDC0001,0xDC0001,0xDC0001,0xDC0001,0xDC0001,0xDC0001,0xDC0001,0xDC0001,0xDC0001,0xDC0001,0xDC0001,0xDC0001,0xDC0001,0xDC0001,0xDC0001,0xDC0001,0xDC0001,0xDC0001,0x1480000,0x1480000,0x1480000,0x1480000,0x1480000,0x1480000,0x1480000,0x1480000,0x1480000,0x1480000,0x29FC0000, -0x29FC0000,0x29FC0000,0x29FC0000,0x6E000000,0xDC0001,0xDC0001,0xDC0001,0xDC0001,0xDC0001,0xDC0001,0xDC0001,0xDC0001,0xEC0000,0xEC0000,0xEC0000,0x1480000,0x1D80000,0x1040001,0x1040001,0x1040001,0x1040001,0x1040001,0x1040001,0x1040001,0x1040001,0x1040001,0x1040001,0x1840000,0x1840000,0x1840000,0x1840000,0x1840000, -0x1840000,0x47FC0000,0x47FC0000,0x47FC0000,0x82000000,0x1840000,0x1840000,0x1840000,0x1840000,0x1840000,0x1840000,0x47FC0000,0x47FC0000,0x47FC0000,0x82000000,0x47FC0000,0x47FC0000,0x47FC0000,0x82000000,0x82000000,0x1180000,0x1040001,0x1040001,0x1300000,0x1480000,0x1640000,0x1640000,0x1B80000,0x1300000,0x1480000,0x17FC0000,0x47FC0000, -0x17FC0000,0x1280001,0x1280001,0x1280001,0x1280001,0x1BC0000,0x1BC0000,0x1BC0000,0x61FC0000,0x61FC0000,0x94000000,0x1BC0000,0x1BC0000,0x1BC0000,0x61FC0000,0x61FC0000,0x94000000,0x61FC0000,0x61FC0000,0x94000000,0x94000000,0x1BC0000,0x1BC0000,0x1BC0000,0x61FC0000,0x61FC0000,0x94000000,0x61FC0000,0x61FC0000,0x94000000,0x94000000,0x61FC0000, -0x61FC0000,0x94000000,0x94000000,0x94000000,0x5580000,0x73C0000,0x1280001,0x1940000,0x1F40000,0x39FC0000,0x4DFC0000,0x6FFC0000,0x3740000,0x1BC0000,0x39FC0000,0x94000000,0x39FC0000,0x1500001,0x3F40000,0x7FFC0000,0xA8000000,0x3F40000,0x7FFC0000,0xA8000000,0x7FFC0000,0xA8000000,0xA8000000,0x3F40000,0x7FFC0000,0xA8000000,0x7FFC0000,0xA8000000, -0xA8000000,0x7FFC0000,0xA8000000,0xA8000000,0xA8000000,0x3F40000,0x7FFC0000,0xA8000000,0x7FFC0000,0xA8000000,0xA8000000,0x7FFC0000,0xA8000000,0xA8000000,0xA8000000,0x7FFC0000,0xA8000000,0xA8000000,0xA8000000,0xA8000000,0x1A80000,0x1680000,0x1680000,0x2DFC0000,0x6FFC0000,0x93FC0000,0xA8000000,0xA8000000,0x1CC0000,0x49FC0000,0xA3F80000,0xA8000000, -0x5FF80000,0x1180734,0xF90402D3,0xBB0402D4,0xA90402D3,0xEAF40192,0xC2F400D7,0xACF8013B,0xB0F40192,0xA6F000D7,0x9EF00192,0xE2E002D4,0xC4E000A3,0xACE800FD,0xB4DC00CF,0xA8E00002,0x9EE400D5,0xA8DC02D4,0xA2D400FF,0x9ADC013A,0x94DC02D5,0x1A00734,0xCCBC02D3,0xA8E002D4,0xC0AC0192,0xA8C400D1,0x9ECC0190,0xBA9402D3,0xA8A400A2,0x9EA800D5,0x94B802D4,0x55F80734, -0xA86402D3,0x9E540190,0x944002D4,0x8A000738,0xFEF8021F,0xFF0C0524,0xF31405C3,0xFCE00002,0xCEDC0003,0xB6E00002,0xA8E40011,0xA6D80012,0xFCEC01F6,0xF4CC0000,0xAAD400A9,0x9EA800D5,0x27FC0734,0x12C02D3,0xE31800A2,0xB71800A2,0xA91800A2,0xD50800C9,0xB9080002,0xAB080015,0xAD0400C9,0xA7000026,0x9F0400C9,0x3BC02D3,0xC4E000A2,0xA8FC00A2,0xB8D400C9,0xA8E00001, -0x9EEC00C8,0x63FC02D3,0xA8A000A2,0x9E9400C8,0x940002D4,0x3BC02D3,0xC4E000A2,0xA8FC00A2,0xB8D400C9,0xA8E00001,0x9EEC00C8,0x63FC02D3,0xA8A000A2,0x9E9400C8,0x940002D4,0x63FC02D3,0xA8A000A2,0x9E9400C8,0x940002D4,0x940002D4,0xFB0C00DE,0xF92001F1,0xFD2801E6,0xFCE00001,0xCEDC0002,0xB6E00001,0xA8EC0002,0xA6D00006,0xFCF400E1,0xF4CC0000,0xACCC00A2,0x9E9400C8, -0x3BFC02D3,0x10402D3,0x10402D3,0x10402D3,0x10402D3,0xCAF400CA,0xCAF400CA,0xCAF400CA,0xA2F000CA,0xA2F000CA,0x94F000CA,0xC4E000A3,0xC4E000A3,0xC4E000A3,0xA6E00002,0xA6E00002,0x96E40026,0x98E000A3,0x98E000A3,0x92DC0015,0x8ADC00A5,0x38002D3,0x38002D3,0x38002D3,0xACC000C9,0xACC000C9,0x94D800C8,0xA6A800A2,0xA6A800A2,0x94B80001,0x8AC400A4,0x45FC02D3, -0x45FC02D3,0x948000C8,0x8A6C00A4,0x820002D4,0xFEF400BA,0xF90001D3,0x10402D3,0xF6E00002,0xCAE00002,0xB4E00002,0xAEE00005,0xA2DC0002,0xFED800A1,0xF4CC0000,0xA8D800A3,0x94B80001,0x15FC02D3,0x11800A2,0x11800A2,0x11800A2,0x11800A2,0xB7080001,0xB7080001,0xB7080001,0x9D080001,0x9D080001,0x95040001,0x1A000A2,0x1A000A2,0x1A000A2,0xA2E80001,0xA2E80001, -0x94F40000,0x55F800A2,0x55F800A2,0x94BC0000,0x8A0000A4,0x1A000A2,0x1A000A2,0x1A000A2,0xA2E80001,0xA2E80001,0x94F40000,0x55F800A2,0x55F800A2,0x94BC0000,0x8A0000A4,0x55F800A2,0x55F800A2,0x94BC0000,0x8A0000A4,0x8A0000A4,0xF7000020,0xFF0C003A,0x11800A2,0xF4E40001,0xC6E40000,0xB2E40000,0xAAE80000,0xA2DC0001,0xF8EC0029,0xF4CC0000,0x27FC00A2,0x94BC0000, -0x27FC00A2,0x13C00CA,0xCF2C0001,0xB3280001,0xA9280001,0x1D800C8,0xB9080001,0xA9140001,0x71F800C8,0xA8D80000,0x9E0000C8,0x1D800C8,0xB9080001,0xA9140001,0x71F800C8,0xA8D80000,0x9E0000C8,0x71F800C8,0xA8D80000,0x9E0000C8,0x9E0000C8,0x1D800C8,0xB9080001,0xA9140001,0x71F800C8,0xA8D80000,0x9E0000C8,0x71F800C8,0xA8D80000,0x9E0000C8,0x9E0000C8,0x71F800C8, -0xA8D80000,0x9E0000C8,0x9E0000C8,0x9E0000C8,0xFF14004A,0x15400C8,0xF5380062,0xFCE00000,0xCEDC0001,0xB8D80000,0xA8F00000,0xA8B80000,0xF7080048,0xF4CC0000,0xAAF80001,0x9E0000C8,0x4BFC00C8,0xF000CA,0xF000CA,0xF000CA,0xF000CA,0xF000CA,0xF000CA,0xF000CA,0xF000CA,0xF000CA,0xF000CA,0xA8E00001,0xA8E00001,0xA8E00001,0xA8E00001,0xA8E00001, -0xA8E00001,0x8CDC0001,0x8CDC0001,0x8CDC0001,0x82DC0001,0x16800C8,0x16800C8,0x16800C8,0x16800C8,0x16800C8,0x16800C8,0x92BC0001,0x92BC0001,0x92BC0001,0x82C80001,0x39F800C8,0x39F800C8,0x39F800C8,0x828C0000,0x780000C8,0xFCE8003D,0xF000CA,0xF000CA,0xF4E00001,0xCCE00001,0xB6E00001,0xB6E00001,0x9EE00001,0xFCD40020,0xF2CC0000,0x96D80000,0x92BC0001, -0x3FC00C8,}; -static const uint32_t g_etc1_to_bc7_m6_table82[] = { -0xEC0001,0xEC0001,0xEC0001,0xEC0001,0xEC0001,0xEC0001,0xEC0001,0xEC0001,0xEC0001,0xEC0001,0xEC0001,0xEC0001,0xEC0001,0xEC0001,0xEC0001,0xEC0001,0xEC0001,0xEC0001,0xEC0001,0xEC0001,0x1600000,0x1600000,0x1600000,0x1600000,0x1600000,0x1600000,0x1600000,0x1600000,0x1600000,0x1600000,0x35FC0000, -0x35FC0000,0x35FC0000,0x35FC0000,0x76000000,0xEC0001,0xEC0001,0xEC0001,0xEC0001,0xEC0001,0xEC0001,0xEC0001,0xEC0001,0x6FC0000,0x6FC0000,0x6FC0000,0x1600000,0x1F80000,0x1140001,0x1140001,0x1140001,0x1140001,0x1140001,0x1140001,0x1140001,0x1140001,0x1140001,0x1140001,0x19C0000,0x19C0000,0x19C0000,0x19C0000,0x19C0000, -0x19C0000,0x53FC0000,0x53FC0000,0x53FC0000,0x8A000000,0x19C0000,0x19C0000,0x19C0000,0x19C0000,0x19C0000,0x19C0000,0x53FC0000,0x53FC0000,0x53FC0000,0x8A000000,0x53FC0000,0x53FC0000,0x53FC0000,0x8A000000,0x8A000000,0x1280000,0x1140001,0x1140001,0x1440000,0x15C0000,0x3780000,0x3780000,0x1D40000,0x1440000,0x15C0000,0x25FC0000,0x53FC0000, -0x25FC0000,0x1380001,0x1380001,0x1380001,0x1380001,0x3D00000,0x3D00000,0x3D00000,0x6DFC0000,0x6DFC0000,0x9C000000,0x3D00000,0x3D00000,0x3D00000,0x6DFC0000,0x6DFC0000,0x9C000000,0x6DFC0000,0x6DFC0000,0x9C000000,0x9C000000,0x3D00000,0x3D00000,0x3D00000,0x6DFC0000,0x6DFC0000,0x9C000000,0x6DFC0000,0x6DFC0000,0x9C000000,0x9C000000,0x6DFC0000, -0x6DFC0000,0x9C000000,0x9C000000,0x9C000000,0x16C0000,0xF4C0000,0x1380001,0x1AC0000,0xFFC0000,0x47FC0000,0x5BFC0000,0x7BF40000,0x3880000,0x3D00000,0x47FC0000,0x9C000000,0x47FC0000,0x1600001,0x13FC0000,0x8BFC0000,0xB0000000,0x13FC0000,0x8BFC0000,0xB0000000,0x8BFC0000,0xB0000000,0xB0000000,0x13FC0000,0x8BFC0000,0xB0000000,0x8BFC0000,0xB0000000, -0xB0000000,0x8BFC0000,0xB0000000,0xB0000000,0xB0000000,0x13FC0000,0x8BFC0000,0xB0000000,0x8BFC0000,0xB0000000,0xB0000000,0x8BFC0000,0xB0000000,0xB0000000,0xB0000000,0x8BFC0000,0xB0000000,0xB0000000,0xB0000000,0xB0000000,0x1BC0000,0x5780000,0x5780000,0x41FC0000,0x7DF80000,0x9DFC0000,0xB0000000,0xB0000000,0x1E00000,0x59FC0000,0xADCC0000,0xB0000000, -0x6DFC0000,0x1280734,0xFD1402D4,0xC31402D4,0xB11402D3,0xF3040192,0xCB0400D7,0xB508013B,0xB9040192,0xAF0000D7,0xA7000192,0xEAF002D4,0xCCF000A3,0xB4F800FD,0xBCEC00CF,0xB0F00002,0xA6F400D5,0xB0EC02D4,0xAAE400FF,0xA2EC013A,0x9CEC02D5,0x1B80734,0xD4CC02D3,0xB0F002D4,0xC8BC0192,0xB0D400D1,0xA6DC0190,0xC2A402D3,0xB0B400A2,0xA6B800D5,0x9CC802D4,0x61F80734, -0xB07402D3,0xA6640190,0x9C5002D4,0x92000738,0xFF0C0252,0xF9200552,0xFB2405C3,0xFEF00006,0xD6EC0003,0xBEF00002,0xB0F40011,0xAEE80012,0xFEF8021A,0xFCDC0000,0xB2E400A9,0xA6B800D5,0x37FC0734,0x13C02D3,0xEB2800A2,0xBF2800A2,0xB12800A2,0xDD1800C9,0xC1180002,0xB3180015,0xB51400C9,0xAF100026,0xA71400C9,0x1D402D3,0xCCF000A2,0xB10C00A2,0xC0E400C9,0xB0F00001, -0xA6FC00C8,0x6FFC02D3,0xB0B000A2,0xA6A400C8,0x9C0002D4,0x1D402D3,0xCCF000A2,0xB10C00A2,0xC0E400C9,0xB0F00001,0xA6FC00C8,0x6FFC02D3,0xB0B000A2,0xA6A400C8,0x9C0002D4,0x6FFC02D3,0xB0B000A2,0xA6A400C8,0x9C0002D4,0x9C0002D4,0xFD1C00F5,0xFF2C0209,0xF5380203,0xFCF40005,0xD6EC0002,0xBEF00001,0xB0FC0002,0xAEE00006,0xFF0800F4,0xFCDC0000,0xB4DC00A2,0xA6A400C8, -0x49FC02D3,0x11402D3,0x11402D3,0x11402D3,0x11402D3,0xD30400CA,0xD30400CA,0xD30400CA,0xAB0000CA,0xAB0000CA,0x9D0000CA,0xCCF000A3,0xCCF000A3,0xCCF000A3,0xAEF00002,0xAEF00002,0x9EF40026,0xA0F000A3,0xA0F000A3,0x9AEC0015,0x92EC00A5,0x39802D3,0x39802D3,0x39802D3,0xB4D000C9,0xB4D000C9,0x9CE800C8,0xAEB800A2,0xAEB800A2,0x9CC80001,0x92D400A4,0x51FC02D3, -0x51FC02D3,0x9C9000C8,0x927C00A4,0x8A0002D4,0xFF0400CB,0xFF0C01DB,0x11402D3,0xFEF00002,0xD2F00002,0xBCF00002,0xB6F00005,0xAAEC0002,0xFCF000B5,0xFCDC0000,0xB0E800A3,0x9CC80001,0x23FC02D3,0x12800A2,0x12800A2,0x12800A2,0x12800A2,0xBF180001,0xBF180001,0xBF180001,0xA5180001,0xA5180001,0x9D140001,0x1B800A2,0x1B800A2,0x1B800A2,0xAAF80001,0xAAF80001, -0x9D040000,0x61F800A2,0x61F800A2,0x9CCC0000,0x920000A4,0x1B800A2,0x1B800A2,0x1B800A2,0xAAF80001,0xAAF80001,0x9D040000,0x61F800A2,0x61F800A2,0x9CCC0000,0x920000A4,0x61F800A2,0x61F800A2,0x9CCC0000,0x920000A4,0x920000A4,0xFF100020,0xF920003D,0x12800A2,0xFCF40001,0xCEF40000,0xBAF40000,0xB2F80000,0xAAEC0001,0xFEF8002D,0xFCDC0000,0x37FC00A2,0x9CCC0000, -0x37FC00A2,0x14C00CA,0xD73C0001,0xBB380001,0xB1380001,0x1F000C8,0xC1180001,0xB1240001,0x7DF800C8,0xB0E80000,0xA60000C8,0x1F000C8,0xC1180001,0xB1240001,0x7DF800C8,0xB0E80000,0xA60000C8,0x7DF800C8,0xB0E80000,0xA60000C8,0xA60000C8,0x1F000C8,0xC1180001,0xB1240001,0x7DF800C8,0xB0E80000,0xA60000C8,0x7DF800C8,0xB0E80000,0xA60000C8,0xA60000C8,0x7DF800C8, -0xB0E80000,0xA60000C8,0xA60000C8,0xA60000C8,0xFB2C0055,0x16400C8,0xFD480062,0xFEF40001,0xD6EC0001,0xC0E80000,0xB1000000,0xB0C80000,0xFF180048,0xFCDC0000,0xB3080001,0xA60000C8,0x5BFC00C8,0x10000CA,0x10000CA,0x10000CA,0x10000CA,0x10000CA,0x10000CA,0x10000CA,0x10000CA,0x10000CA,0x10000CA,0xB0F00001,0xB0F00001,0xB0F00001,0xB0F00001,0xB0F00001, -0xB0F00001,0x94EC0001,0x94EC0001,0x94EC0001,0x8AEC0001,0x18000C8,0x18000C8,0x18000C8,0x18000C8,0x18000C8,0x18000C8,0x9ACC0001,0x9ACC0001,0x9ACC0001,0x8AD80001,0x45F800C8,0x45F800C8,0x45F800C8,0x8A9C0000,0x800000C8,0xF4F8004A,0x10000CA,0x10000CA,0xFCF00001,0xD4F00001,0xBEF00001,0xBEF00001,0xA6F00001,0xF8E80029,0xFADC0000,0x9EE80000,0x9ACC0001, -0x13FC00C8,}; -static const uint32_t g_etc1_to_bc7_m6_table83[] = { -0xFC0001,0xFC0001,0xFC0001,0xFC0001,0xFC0001,0xFC0001,0xFC0001,0xFC0001,0xFC0001,0xFC0001,0xFC0001,0xFC0001,0xFC0001,0xFC0001,0xFC0001,0xFC0001,0xFC0001,0xFC0001,0xFC0001,0xFC0001,0x1780000,0x1780000,0x1780000,0x1780000,0x1780000,0x1780000,0x1780000,0x1780000,0x1780000,0x1780000,0x41FC0000, -0x41FC0000,0x41FC0000,0x41FC0000,0x7E000000,0xFC0001,0xFC0001,0xFC0001,0xFC0001,0xFC0001,0xFC0001,0xFC0001,0xFC0001,0xF0C0000,0xF0C0000,0xF0C0000,0x1780000,0xFFC0000,0x1240001,0x1240001,0x1240001,0x1240001,0x1240001,0x1240001,0x1240001,0x1240001,0x1240001,0x1240001,0x1B40000,0x1B40000,0x1B40000,0x1B40000,0x1B40000, -0x1B40000,0x5FF80000,0x5FF80000,0x5FF80000,0x92000000,0x1B40000,0x1B40000,0x1B40000,0x1B40000,0x1B40000,0x1B40000,0x5FF80000,0x5FF80000,0x5FF80000,0x92000000,0x5FF80000,0x5FF80000,0x5FF80000,0x92000000,0x92000000,0x5380000,0x1240001,0x1240001,0x3540000,0x1700000,0x1900000,0x1900000,0x3EC0000,0x3540000,0x1700000,0x35FC0000,0x5FF80000, -0x35FC0000,0x1480001,0x1480001,0x1480001,0x1480001,0x3E80000,0x3E80000,0x3E80000,0x79FC0000,0x79FC0000,0xA4000000,0x3E80000,0x3E80000,0x3E80000,0x79FC0000,0x79FC0000,0xA4000000,0x79FC0000,0x79FC0000,0xA4000000,0xA4000000,0x3E80000,0x3E80000,0x3E80000,0x79FC0000,0x79FC0000,0xA4000000,0x79FC0000,0x79FC0000,0xA4000000,0xA4000000,0x79FC0000, -0x79FC0000,0xA4000000,0xA4000000,0xA4000000,0x1800000,0x1600000,0x1480001,0x1C00000,0x23FC0000,0x57FC0000,0x69F80000,0x85F80000,0x39C0000,0x3E80000,0x57FC0000,0xA4000000,0x57FC0000,0x1700001,0x2BFC0000,0x97FC0000,0xB8000000,0x2BFC0000,0x97FC0000,0xB8000000,0x97FC0000,0xB8000000,0xB8000000,0x2BFC0000,0x97FC0000,0xB8000000,0x97FC0000,0xB8000000, -0xB8000000,0x97FC0000,0xB8000000,0xB8000000,0xB8000000,0x2BFC0000,0x97FC0000,0xB8000000,0x97FC0000,0xB8000000,0xB8000000,0x97FC0000,0xB8000000,0xB8000000,0xB8000000,0x97FC0000,0xB8000000,0xB8000000,0xB8000000,0xB8000000,0x1D00000,0xD880000,0xD880000,0x53FC0000,0x89FC0000,0xA7FC0000,0xB8000000,0xB8000000,0x1F80000,0x6BFC0000,0xB5DC0000,0xB8000000, -0x7DF80000,0x1380734,0xFF2402DC,0xCB2402D4,0xB92402D3,0xFB140192,0xD31400D7,0xBD18013B,0xC1140192,0xB71000D7,0xAF100192,0xF30002D4,0xD50000A3,0xBD0800FD,0xC4FC00CF,0xB9000002,0xAF0400D5,0xB8FC02D4,0xB2F400FF,0xAAFC013A,0xA4FC02D5,0x1D00734,0xDCDC02D3,0xB90002D4,0xD0CC0192,0xB8E400D1,0xAEEC0190,0xCAB402D3,0xB8C400A2,0xAEC800D5,0xA4D802D4,0x6DF80734, -0xB88402D3,0xAE740190,0xA46002D4,0x9A000738,0xFF20028E,0xFF2C056A,0xF33405F4,0xFF04001E,0xDEFC0003,0xC7000002,0xB9040011,0xB6F80012,0xFF10025E,0xFEF00006,0xBAF400A9,0xAEC800D5,0x45FC0734,0x14C02D3,0xF33800A2,0xC73800A2,0xB93800A2,0xE52800C9,0xC9280002,0xBB280015,0xBD2400C9,0xB7200026,0xAF2400C9,0x1EC02D3,0xD50000A2,0xB91C00A2,0xC8F400C9,0xB9000001, -0xAF0C00C8,0x7BFC02D3,0xB8C000A2,0xAEB400C8,0xA40002D4,0x1EC02D3,0xD50000A2,0xB91C00A2,0xC8F400C9,0xB9000001,0xAF0C00C8,0x7BFC02D3,0xB8C000A2,0xAEB400C8,0xA40002D4,0x7BFC02D3,0xB8C000A2,0xAEB400C8,0xA40002D4,0xA40002D4,0xFD30010A,0xFB44020B,0xFD480203,0xFF08000D,0xDEFC0002,0xC7000001,0xB90C0002,0xB6F00006,0xFF180119,0xFEF00005,0xBCEC00A2,0xAEB400C8, -0x59FC02D3,0x12402D3,0x12402D3,0x12402D3,0x12402D3,0xDB1400CA,0xDB1400CA,0xDB1400CA,0xB31000CA,0xB31000CA,0xA51000CA,0xD50000A3,0xD50000A3,0xD50000A3,0xB7000002,0xB7000002,0xA7040026,0xA90000A3,0xA90000A3,0xA2FC0015,0x9AFC00A5,0x3B002D3,0x3B002D3,0x3B002D3,0xBCE000C9,0xBCE000C9,0xA4F800C8,0xB6C800A2,0xB6C800A2,0xA4D80001,0x9AE400A4,0x5DFC02D3, -0x5DFC02D3,0xA4A000C8,0x9A8C00A4,0x920002D4,0xFF1000F1,0xF92001EE,0x12402D3,0xFF00000B,0xDB000002,0xC5000002,0xBF000005,0xB2FC0002,0xFF0000CB,0xFCF00002,0xB8F800A3,0xA4D80001,0x33FC02D3,0x13800A2,0x13800A2,0x13800A2,0x13800A2,0xC7280001,0xC7280001,0xC7280001,0xAD280001,0xAD280001,0xA5240001,0x1D000A2,0x1D000A2,0x1D000A2,0xB3080001,0xB3080001, -0xA5140000,0x6DF800A2,0x6DF800A2,0xA4DC0000,0x9A0000A4,0x1D000A2,0x1D000A2,0x1D000A2,0xB3080001,0xB3080001,0xA5140000,0x6DF800A2,0x6DF800A2,0xA4DC0000,0x9A0000A4,0x6DF800A2,0x6DF800A2,0xA4DC0000,0x9A0000A4,0x9A0000A4,0xFF200029,0xFF2C0049,0x13800A2,0xFD040004,0xD7040000,0xC3040000,0xBB080000,0xB2FC0001,0xFD100032,0xFCF00001,0x45FC00A2,0xA4DC0000, -0x45FC00A2,0x15C00CA,0xDF4C0001,0xC3480001,0xB9480001,0xDFC00C8,0xC9280001,0xB9340001,0x89F800C8,0xB8F80000,0xAE0000C8,0xDFC00C8,0xC9280001,0xB9340001,0x89F800C8,0xB8F80000,0xAE0000C8,0x89F800C8,0xB8F80000,0xAE0000C8,0xAE0000C8,0xDFC00C8,0xC9280001,0xB9340001,0x89F800C8,0xB8F80000,0xAE0000C8,0x89F800C8,0xB8F80000,0xAE0000C8,0xAE0000C8,0x89F800C8, -0xB8F80000,0xAE0000C8,0xAE0000C8,0xAE0000C8,0xF7400062,0x37400C8,0xF5580071,0xFD100005,0xDEFC0001,0xC8F80000,0xB9100000,0xB8D80000,0xFF2C0055,0xF8FC0002,0xBB180001,0xAE0000C8,0x69FC00C8,0x11000CA,0x11000CA,0x11000CA,0x11000CA,0x11000CA,0x11000CA,0x11000CA,0x11000CA,0x11000CA,0x11000CA,0xB9000001,0xB9000001,0xB9000001,0xB9000001,0xB9000001, -0xB9000001,0x9CFC0001,0x9CFC0001,0x9CFC0001,0x92FC0001,0x19800C8,0x19800C8,0x19800C8,0x19800C8,0x19800C8,0x19800C8,0xA2DC0001,0xA2DC0001,0xA2DC0001,0x92E80001,0x51F800C8,0x51F800C8,0x51F800C8,0x92AC0000,0x880000C8,0xFD08004A,0x11000CA,0x11000CA,0xFD000002,0xDD000001,0xC7000001,0xC7000001,0xAF000001,0xFEF4002D,0xFAF00001,0xA6F80000,0xA2DC0001, -0x21FC00C8,}; -static const uint32_t g_etc1_to_bc7_m6_table84[] = { -0x1100000,0x1100000,0x1100000,0x1100000,0x1100000,0x1100000,0x1100000,0x1100000,0x1100000,0x1100000,0x1100000,0x1100000,0x1100000,0x1100000,0x1100000,0x1100000,0x1100000,0x1100000,0x1100000,0x1100000,0x1940000,0x1940000,0x1940000,0x1940000,0x1940000,0x1940000,0x1940000,0x1940000,0x1940000,0x1940000,0x4FF80000, -0x4FF80000,0x4FF80000,0x4FF80000,0x86000001,0x1100000,0x1100000,0x1100000,0x1100000,0x1100000,0x1100000,0x1100000,0x1100000,0x9200000,0x9200000,0x9200000,0x1940000,0x1FFC0000,0x1380000,0x1380000,0x1380000,0x1380000,0x1380000,0x1380000,0x1380000,0x1380000,0x1380000,0x1380000,0x1D00000,0x1D00000,0x1D00000,0x1D00000,0x1D00000, -0x1D00000,0x6DF80000,0x6DF80000,0x6DF80000,0x9A000001,0x1D00000,0x1D00000,0x1D00000,0x1D00000,0x1D00000,0x1D00000,0x6DF80000,0x6DF80000,0x6DF80000,0x9A000001,0x6DF80000,0x6DF80000,0x6DF80000,0x9A000001,0x9A000001,0x14C0000,0x1380000,0x1380000,0x7680000,0x1880000,0x1A80000,0x1A80000,0xDFC0000,0x7680000,0x1880000,0x45FC0000,0x6DF80000, -0x45FC0000,0x15C0000,0x15C0000,0x15C0000,0x15C0000,0x9FC0000,0x9FC0000,0x9FC0000,0x87FC0000,0x87FC0000,0xAC000001,0x9FC0000,0x9FC0000,0x9FC0000,0x87FC0000,0x87FC0000,0xAC000001,0x87FC0000,0x87FC0000,0xAC000001,0xAC000001,0x9FC0000,0x9FC0000,0x9FC0000,0x87FC0000,0x87FC0000,0xAC000001,0x87FC0000,0x87FC0000,0xAC000001,0xAC000001,0x87FC0000, -0x87FC0000,0xAC000001,0xAC000001,0xAC000001,0x1940000,0x1740000,0x15C0000,0x1D80000,0x39FC0000,0x67FC0000,0x77FC0000,0x91FC0000,0x1B40000,0x9FC0000,0x67FC0000,0xAC000001,0x67FC0000,0x1840000,0x47FC0000,0xA5F80000,0xC0000001,0x47FC0000,0xA5F80000,0xC0000001,0xA5F80000,0xC0000001,0xC0000001,0x47FC0000,0xA5F80000,0xC0000001,0xA5F80000,0xC0000001, -0xC0000001,0xA5F80000,0xC0000001,0xC0000001,0xC0000001,0x47FC0000,0xA5F80000,0xC0000001,0xA5F80000,0xC0000001,0xC0000001,0xA5F80000,0xC0000001,0xC0000001,0xC0000001,0xA5F80000,0xC0000001,0xC0000001,0xC0000001,0xC0000001,0x5E40000,0x79C0000,0x79C0000,0x6BFC0000,0x99FC0000,0xB3F80000,0xC0000001,0xC0000001,0x1BFC0000,0x7DFC0000,0xBFD00000,0xC0000001, -0x8DFC0000,0x1480738,0xFD3802F8,0xD53802D4,0xC13802D5,0xFF240198,0xDD2400D5,0xC32C013A,0xCB240190,0xBF2400D5,0xB7240192,0xFF1002D3,0xDF1000A2,0xC71C00FF,0xCF1000D1,0xC1100002,0xB71400D7,0xC11002D4,0xBD0800FD,0xB508013B,0xAF1002D3,0x3E80734,0xE6EC02D3,0xC11002D4,0xD8E00192,0xC2F800CF,0xB7000192,0xD2C802D3,0xC0D800A3,0xB6D800D7,0xAEE802D4,0x79FC0734, -0xC09802D4,0xB68C0192,0xAE7002D3,0xA4000734,0xFF3402E1,0xFB440590,0xFD4805F4,0xFF18004A,0xE9100001,0xCF100002,0xC3140012,0xBF100011,0xFF2402C7,0xFF080025,0xC50400A9,0xB6D800D7,0x57FC0734,0x15C02D4,0xFB4C00A4,0xCF4C00A4,0xC14800A5,0xF13800C8,0xD3380001,0xC33C0015,0xC53800C8,0xBF340026,0xB73800CA,0xDFC02D3,0xDD1400A2,0xC13000A3,0xD10800C9,0xC1100002, -0xB91C00CA,0x89F802D3,0xC0D800A3,0xB6C800CA,0xAE0002D3,0xDFC02D3,0xDD1400A2,0xC13000A3,0xD10800C9,0xC1100002,0xB91C00CA,0x89F802D3,0xC0D800A3,0xB6C800CA,0xAE0002D3,0x89F802D3,0xC0D800A3,0xB6C800CA,0xAE0002D3,0xAE0002D3,0xFF44013A,0xF558022A,0xF5580225,0xFF20002A,0xE9100001,0xCF100002,0xC31C0002,0xC1040005,0xFF34013A,0xFF0C0012,0xC6FC00A2,0xB6C800CA, -0x69FC02D3,0x13802D4,0x13802D4,0x13802D4,0x13802D4,0xE72400C8,0xE72400C8,0xE72400C8,0xBB2400C8,0xBB2400C8,0xAD2400C9,0xDF1000A2,0xDF1000A2,0xDF1000A2,0xC1100001,0xC1100001,0xB1140026,0xB31000A2,0xB31000A2,0xAD0C0015,0xA51000A2,0x1CC02D3,0x1CC02D3,0x1CC02D3,0xC6F000C9,0xC6F000C9,0xAF0800C9,0xC0D800A2,0xC0D800A2,0xACEC0002,0xA4F400A2,0x6BF802D3, -0x6BF802D3,0xACB400C9,0xA49800A2,0x9A0002D3,0xFD28010A,0xFF2C0209,0x13802D4,0xFF180019,0xE5100001,0xCF100001,0xC9140006,0xBB100002,0xFF1400E5,0xFF04000E,0xC30800A2,0xACEC0002,0x43FC02D3,0x14800A4,0x14800A4,0x14800A4,0x14800A4,0xD3380000,0xD3380000,0xD3380000,0xB7380000,0xB7380000,0xAD380001,0x3E800A2,0x3E800A2,0x3E800A2,0xBD180001,0xBD180001, -0xAD280001,0x79FC00A2,0x79FC00A2,0xACF00001,0xA40000A2,0x3E800A2,0x3E800A2,0x3E800A2,0xBD180001,0xBD180001,0xAD280001,0x79FC00A2,0x79FC00A2,0xACF00001,0xA40000A2,0x79FC00A2,0x79FC00A2,0xACF00001,0xA40000A2,0xA40000A2,0xFB340034,0xFB440048,0x14800A4,0xFF1C0008,0xE3140000,0xCD140000,0xC31C0001,0xBD0C0000,0xF928003D,0xF90C0005,0x57FC00A2,0xACF00001, -0x57FC00A2,0x17000C8,0xEB5C0000,0xCB5C0001,0xC15C0001,0x29FC00C8,0xD3380001,0xC1480001,0x97F800C8,0xC10C0001,0xB60000CA,0x29FC00C8,0xD3380001,0xC1480001,0x97F800C8,0xC10C0001,0xB60000CA,0x97F800C8,0xC10C0001,0xB60000CA,0xB60000CA,0x29FC00C8,0xD3380001,0xC1480001,0x97F800C8,0xC10C0001,0xB60000CA,0x97F800C8,0xC10C0001,0xB60000CA,0xB60000CA,0x97F800C8, -0xC10C0001,0xB60000CA,0xB60000CA,0xB60000CA,0xFF500064,0x18800C8,0xFF6C0071,0xFD28000D,0xE90C0001,0xD10C0000,0xC1240001,0xC0F00001,0xF9480062,0xFF100005,0xC5280000,0xB60000CA,0x7BFC00C8,0x12400C8,0x12400C8,0x12400C8,0x12400C8,0x12400C8,0x12400C8,0x12400C8,0x12400C8,0x12400C8,0x12400C8,0xC5100000,0xC5100000,0xC5100000,0xC5100000,0xC5100000, -0xC5100000,0xA5100001,0xA5100001,0xA5100001,0x9B100001,0x3B000C8,0x3B000C8,0x3B000C8,0x3B000C8,0x3B000C8,0x3B000C8,0xACEC0001,0xACEC0001,0xACEC0001,0x9AFC0001,0x5DFC00C8,0x5DFC00C8,0x5DFC00C8,0x9AC00001,0x900000CA,0xF71C0055,0x12400C8,0x12400C8,0xF9140008,0xE9100000,0xD3100000,0xD3100000,0xB9100000,0xFD0C0032,0xFF000004,0xAD0C0001,0xACEC0001, -0x33FC00C8,}; -static const uint32_t g_etc1_to_bc7_m6_table85[] = { -0x1200000,0x1200000,0x1200000,0x1200000,0x1200000,0x1200000,0x1200000,0x1200000,0x1200000,0x1200000,0x1200000,0x1200000,0x1200000,0x1200000,0x1200000,0x1200000,0x1200000,0x1200000,0x1200000,0x1200000,0x1AC0000,0x1AC0000,0x1AC0000,0x1AC0000,0x1AC0000,0x1AC0000,0x1AC0000,0x1AC0000,0x1AC0000,0x1AC0000,0x5BF80000, -0x5BF80000,0x5BF80000,0x5BF80000,0x8E000001,0x1200000,0x1200000,0x1200000,0x1200000,0x1200000,0x1200000,0x1200000,0x1200000,0x1340000,0x1340000,0x1340000,0x1AC0000,0x2FFC0000,0x1480000,0x1480000,0x1480000,0x1480000,0x1480000,0x1480000,0x1480000,0x1480000,0x1480000,0x1480000,0x1E80000,0x1E80000,0x1E80000,0x1E80000,0x1E80000, -0x1E80000,0x79F80000,0x79F80000,0x79F80000,0xA2000001,0x1E80000,0x1E80000,0x1E80000,0x1E80000,0x1E80000,0x1E80000,0x79F80000,0x79F80000,0x79F80000,0xA2000001,0x79F80000,0x79F80000,0x79F80000,0xA2000001,0xA2000001,0x75C0000,0x1480000,0x1480000,0x37C0000,0x19C0000,0x3BC0000,0x3BC0000,0x21FC0000,0x37C0000,0x19C0000,0x55FC0000,0x79F80000, -0x55FC0000,0x16C0000,0x16C0000,0x16C0000,0x16C0000,0x23FC0000,0x23FC0000,0x23FC0000,0x93FC0000,0x93FC0000,0xB4000001,0x23FC0000,0x23FC0000,0x23FC0000,0x93FC0000,0x93FC0000,0xB4000001,0x93FC0000,0x93FC0000,0xB4000001,0xB4000001,0x23FC0000,0x23FC0000,0x23FC0000,0x93FC0000,0x93FC0000,0xB4000001,0x93FC0000,0x93FC0000,0xB4000001,0xB4000001,0x93FC0000, -0x93FC0000,0xB4000001,0xB4000001,0xB4000001,0x1A80000,0x1840000,0x16C0000,0x1F00000,0x4DFC0000,0x77FC0000,0x85FC0000,0x9DF40000,0x1C80000,0x23FC0000,0x77FC0000,0xB4000001,0x77FC0000,0x1940000,0x5FFC0000,0xB1F80000,0xC8000001,0x5FFC0000,0xB1F80000,0xC8000001,0xB1F80000,0xC8000001,0xC8000001,0x5FFC0000,0xB1F80000,0xC8000001,0xB1F80000,0xC8000001, -0xC8000001,0xB1F80000,0xC8000001,0xC8000001,0xC8000001,0x5FFC0000,0xB1F80000,0xC8000001,0xB1F80000,0xC8000001,0xC8000001,0xB1F80000,0xC8000001,0xC8000001,0xC8000001,0xB1F80000,0xC8000001,0xC8000001,0xC8000001,0xC8000001,0x5F80000,0xFAC0000,0xFAC0000,0x7DFC0000,0xA7F80000,0xBDF80000,0xC8000001,0xC8000001,0x39FC0000,0x8FFC0000,0xC7E00000,0xC8000001, -0x9DF80000,0x1580738,0xFF480314,0xDD4802D4,0xC94802D5,0xFD3801B8,0xE53400D5,0xCB3C013A,0xD3340190,0xC73400D5,0xBF340192,0xFF2402D8,0xE72000A2,0xCF2C00FF,0xD72000D1,0xC9200002,0xBF2400D7,0xC92002D4,0xC51800FD,0xBD18013B,0xB72002D3,0x7FC0734,0xEEFC02D3,0xC92002D4,0xE0F00192,0xCB0800CF,0xBF100192,0xDAD802D3,0xC8E800A3,0xBEE800D7,0xB6F802D4,0x85FC0734, -0xC8A802D4,0xBE9C0192,0xB68002D3,0xAC000734,0xFF44033E,0xFF4C05D0,0xF5580625,0xFF2C0086,0xF1200001,0xD7200002,0xCB240012,0xC7200011,0xFF3402FA,0xFF1C0054,0xCD1400A9,0xBEE800D7,0x65FC0734,0x16C02D4,0xFF5C00A5,0xD75C00A4,0xC95800A5,0xF94800C8,0xDB480001,0xCB4C0015,0xCD4800C8,0xC7440026,0xBF4800CA,0x25FC02D3,0xE52400A2,0xC94000A3,0xD91800C9,0xC9200002, -0xC12C00CA,0x95F802D3,0xC8E800A3,0xBED800CA,0xB60002D3,0x25FC02D3,0xE52400A2,0xC94000A3,0xD91800C9,0xC9200002,0xC12C00CA,0x95F802D3,0xC8E800A3,0xBED800CA,0xB60002D3,0x95F802D3,0xC8E800A3,0xBED800CA,0xB60002D3,0xB60002D3,0xFF500155,0xFD68022A,0xFD680225,0xFF340042,0xF1200001,0xD7200002,0xCB2C0002,0xC9140005,0xFF44015B,0xFF240029,0xCF0C00A2,0xBED800CA, -0x79FC02D3,0x14802D4,0x14802D4,0x14802D4,0x14802D4,0xEF3400C8,0xEF3400C8,0xEF3400C8,0xC33400C8,0xC33400C8,0xB53400C9,0xE72000A2,0xE72000A2,0xE72000A2,0xC9200001,0xC9200001,0xB9240026,0xBB2000A2,0xBB2000A2,0xB51C0015,0xAD2000A2,0x1E402D3,0x1E402D3,0x1E402D3,0xCF0000C9,0xCF0000C9,0xB71800C9,0xC8E800A2,0xC8E800A2,0xB4FC0002,0xAD0400A2,0x77F802D3, -0x77F802D3,0xB4C400C9,0xACA800A2,0xA20002D3,0xFD380124,0xFB44020C,0x14802D4,0xFD280035,0xED200001,0xD7200001,0xD1240006,0xC3200002,0xFB2C0109,0xFF18001A,0xCB1800A2,0xB4FC0002,0x53FC02D3,0x15800A4,0x15800A4,0x15800A4,0x15800A4,0xDB480000,0xDB480000,0xDB480000,0xBF480000,0xBF480000,0xB5480001,0x7FC00A2,0x7FC00A2,0x7FC00A2,0xC5280001,0xC5280001, -0xB5380001,0x85FC00A2,0x85FC00A2,0xB5000001,0xAC0000A2,0x7FC00A2,0x7FC00A2,0x7FC00A2,0xC5280001,0xC5280001,0xB5380001,0x85FC00A2,0x85FC00A2,0xB5000001,0xAC0000A2,0x85FC00A2,0x85FC00A2,0xB5000001,0xAC0000A2,0xAC0000A2,0xF748003D,0xF3540055,0x15800A4,0xFD30000D,0xEB240000,0xD5240000,0xCB2C0001,0xC51C0000,0xFF340041,0xFD200008,0x65FC00A2,0xB5000001, -0x65FC00A2,0x18000C8,0xF36C0000,0xD36C0001,0xC96C0001,0x41FC00C8,0xDB480001,0xC9580001,0xA1FC00C8,0xC91C0001,0xBE0000CA,0x41FC00C8,0xDB480001,0xC9580001,0xA1FC00C8,0xC91C0001,0xBE0000CA,0xA1FC00C8,0xC91C0001,0xBE0000CA,0xBE0000CA,0x41FC00C8,0xDB480001,0xC9580001,0xA1FC00C8,0xC91C0001,0xBE0000CA,0xA1FC00C8,0xC91C0001,0xBE0000CA,0xBE0000CA,0xA1FC00C8, -0xC91C0001,0xBE0000CA,0xBE0000CA,0xBE0000CA,0xF7680071,0x59800C8,0xF77C0080,0xFF400012,0xF11C0001,0xD91C0000,0xC9340001,0xC9000001,0xFD580064,0xFF2C000D,0xCD380000,0xBE0000CA,0x89FC00C8,0x13400C8,0x13400C8,0x13400C8,0x13400C8,0x13400C8,0x13400C8,0x13400C8,0x13400C8,0x13400C8,0x13400C8,0xCD200000,0xCD200000,0xCD200000,0xCD200000,0xCD200000, -0xCD200000,0xAD200001,0xAD200001,0xAD200001,0xA3200001,0x1C800C8,0x1C800C8,0x1C800C8,0x1C800C8,0x1C800C8,0x1C800C8,0xB4FC0001,0xB4FC0001,0xB4FC0001,0xA30C0001,0x69FC00C8,0x69FC00C8,0x69FC00C8,0xA2D00001,0x980000CA,0xFF2C0055,0x13400C8,0x13400C8,0xFB24000D,0xF1200000,0xDB200000,0xDB200000,0xC1200000,0xFD1C003D,0xFF140005,0xB51C0001,0xB4FC0001, -0x41FC00C8,}; -static const uint32_t g_etc1_to_bc7_m6_table86[] = { -0x1300000,0x1300000,0x1300000,0x1300000,0x1300000,0x1300000,0x1300000,0x1300000,0x1300000,0x1300000,0x1300000,0x1300000,0x1300000,0x1300000,0x1300000,0x1300000,0x1300000,0x1300000,0x1300000,0x1300000,0x1C40000,0x1C40000,0x1C40000,0x1C40000,0x1C40000,0x1C40000,0x1C40000,0x1C40000,0x1C40000,0x1C40000,0x67F80000, -0x67F80000,0x67F80000,0x67F80000,0x96000001,0x1300000,0x1300000,0x1300000,0x1300000,0x1300000,0x1300000,0x1300000,0x1300000,0x1440000,0x1440000,0x1440000,0x1C40000,0x3FF80000,0x1580000,0x1580000,0x1580000,0x1580000,0x1580000,0x1580000,0x1580000,0x1580000,0x1580000,0x1580000,0x3FC0000,0x3FC0000,0x3FC0000,0x3FC0000,0x3FC0000, -0x3FC0000,0x85F80000,0x85F80000,0x85F80000,0xAA000001,0x3FC0000,0x3FC0000,0x3FC0000,0x3FC0000,0x3FC0000,0x3FC0000,0x85F80000,0x85F80000,0x85F80000,0xAA000001,0x85F80000,0x85F80000,0x85F80000,0xAA000001,0xAA000001,0xF6C0000,0x1580000,0x1580000,0x1900000,0x1B00000,0x1D40000,0x1D40000,0x33FC0000,0x1900000,0x1B00000,0x63FC0000,0x85F80000, -0x63FC0000,0x17C0000,0x17C0000,0x17C0000,0x17C0000,0x3BFC0000,0x3BFC0000,0x3BFC0000,0x9FF80000,0x9FF80000,0xBC000001,0x3BFC0000,0x3BFC0000,0x3BFC0000,0x9FF80000,0x9FF80000,0xBC000001,0x9FF80000,0x9FF80000,0xBC000001,0xBC000001,0x3BFC0000,0x3BFC0000,0x3BFC0000,0x9FF80000,0x9FF80000,0xBC000001,0x9FF80000,0x9FF80000,0xBC000001,0xBC000001,0x9FF80000, -0x9FF80000,0xBC000001,0xBC000001,0xBC000001,0x5B80000,0x3940000,0x17C0000,0xDFC0000,0x61FC0000,0x85FC0000,0x93F80000,0xA7F80000,0x1DC0000,0x3BFC0000,0x85FC0000,0xBC000001,0x85FC0000,0x1A40000,0x77FC0000,0xBDF80000,0xD0000001,0x77FC0000,0xBDF80000,0xD0000001,0xBDF80000,0xD0000001,0xD0000001,0x77FC0000,0xBDF80000,0xD0000001,0xBDF80000,0xD0000001, -0xD0000001,0xBDF80000,0xD0000001,0xD0000001,0xD0000001,0x77FC0000,0xBDF80000,0xD0000001,0xBDF80000,0xD0000001,0xD0000001,0xBDF80000,0xD0000001,0xD0000001,0xD0000001,0xBDF80000,0xD0000001,0xD0000001,0xD0000001,0xD0000001,0x23FC0000,0x1C00000,0x1C00000,0x91FC0000,0xB5F80000,0xC7F80000,0xD0000001,0xD0000001,0x57FC0000,0xA1FC0000,0xCFF00000,0xD0000001, -0xABFC0000,0x1680738,0xFF5C0339,0xE55802D4,0xD15802D5,0xFF4801E0,0xED4400D5,0xD34C013A,0xDB440190,0xCF4400D5,0xC7440192,0xFD3802F8,0xEF3000A2,0xD73C00FF,0xDF3000D1,0xD1300002,0xC73400D7,0xD13002D4,0xCD2800FD,0xC528013B,0xBF3002D3,0x1FFC0734,0xF70C02D3,0xD13002D4,0xE9000192,0xD31800CF,0xC7200192,0xE2E802D3,0xD0F800A3,0xC6F800D7,0xBF0802D4,0x91FC0734, -0xD0B802D4,0xC6AC0192,0xBE9002D3,0xB4000734,0xFF580386,0xFB6405D2,0xFD680625,0xFF4000D3,0xF9300001,0xDF300002,0xD3340012,0xCF300011,0xFD4C036A,0xFF300099,0xD52400A9,0xC6F800D7,0x75FC0734,0x17C02D4,0xFF6C00B4,0xDF6C00A4,0xD16800A5,0xFD5800CA,0xE3580001,0xD35C0015,0xD55800C8,0xCF540026,0xC75800CA,0x3DFC02D3,0xED3400A2,0xD15000A3,0xE12800C9,0xD1300002, -0xC93C00CA,0xA1F802D3,0xD0F800A3,0xC6E800CA,0xBE0002D3,0x3DFC02D3,0xED3400A2,0xD15000A3,0xE12800C9,0xD1300002,0xC93C00CA,0xA1F802D3,0xD0F800A3,0xC6E800CA,0xBE0002D3,0xA1F802D3,0xD0F800A3,0xC6E800CA,0xBE0002D3,0xBE0002D3,0xFF64017A,0xF5780248,0xF77C0244,0xFF48006E,0xF9300001,0xDF300002,0xD33C0002,0xD1240005,0xFF5C016D,0xFD3C004B,0xD71C00A2,0xC6E800CA, -0x87FC02D3,0x15802D4,0x15802D4,0x15802D4,0x15802D4,0xF74400C8,0xF74400C8,0xF74400C8,0xCB4400C8,0xCB4400C8,0xBD4400C9,0xEF3000A2,0xEF3000A2,0xEF3000A2,0xD1300001,0xD1300001,0xC1340026,0xC33000A2,0xC33000A2,0xBD2C0015,0xB53000A2,0x1FC02D3,0x1FC02D3,0x1FC02D3,0xD71000C9,0xD71000C9,0xBF2800C9,0xD0F800A2,0xD0F800A2,0xBD0C0002,0xB51400A2,0x83F802D3, -0x83F802D3,0xBCD400C9,0xB4B800A2,0xAA0002D3,0xFD48013D,0xF3540229,0x15802D4,0xFF3C0048,0xF5300001,0xDF300001,0xD9340006,0xCB300002,0xFF3C0120,0xFD2C0035,0xD32800A2,0xBD0C0002,0x61FC02D3,0x16800A4,0x16800A4,0x16800A4,0x16800A4,0xE3580000,0xE3580000,0xE3580000,0xC7580000,0xC7580000,0xBD580001,0x1FFC00A2,0x1FFC00A2,0x1FFC00A2,0xCD380001,0xCD380001, -0xBD480001,0x91FC00A2,0x91FC00A2,0xBD100001,0xB40000A2,0x1FFC00A2,0x1FFC00A2,0x1FFC00A2,0xCD380001,0xCD380001,0xBD480001,0x91FC00A2,0x91FC00A2,0xBD100001,0xB40000A2,0x91FC00A2,0x91FC00A2,0xBD100001,0xB40000A2,0xB40000A2,0xFF58003D,0xFB640055,0x16800A4,0xFF440012,0xF3340000,0xDD340000,0xD33C0001,0xCD2C0000,0xFD4C0048,0xFF300011,0x75FC00A2,0xBD100001, -0x75FC00A2,0x19000C8,0xFB7C0000,0xDB7C0001,0xD17C0001,0x59FC00C8,0xE3580001,0xD1680001,0xADFC00C8,0xD12C0001,0xC60000CA,0x59FC00C8,0xE3580001,0xD1680001,0xADFC00C8,0xD12C0001,0xC60000CA,0xADFC00C8,0xD12C0001,0xC60000CA,0xC60000CA,0x59FC00C8,0xE3580001,0xD1680001,0xADFC00C8,0xD12C0001,0xC60000CA,0xADFC00C8,0xD12C0001,0xC60000CA,0xC60000CA,0xADFC00C8, -0xD12C0001,0xC60000CA,0xC60000CA,0xC60000CA,0xFF780071,0xDA800C8,0xFF8C0080,0xFF580020,0xF92C0001,0xE12C0000,0xD1440001,0xD1100001,0xFF700071,0xFD480019,0xD5480000,0xC60000CA,0x99FC00C8,0x14400C8,0x14400C8,0x14400C8,0x14400C8,0x14400C8,0x14400C8,0x14400C8,0x14400C8,0x14400C8,0x14400C8,0xD5300000,0xD5300000,0xD5300000,0xD5300000,0xD5300000, -0xD5300000,0xB5300001,0xB5300001,0xB5300001,0xAB300001,0x1E000C8,0x1E000C8,0x1E000C8,0x1E000C8,0x1E000C8,0x1E000C8,0xBD0C0001,0xBD0C0001,0xBD0C0001,0xAB1C0001,0x75FC00C8,0x75FC00C8,0x75FC00C8,0xAAE00001,0xA00000CA,0xF73C0064,0x14400C8,0x14400C8,0xFB340014,0xF9300000,0xE3300000,0xE3300000,0xC9300000,0xF9300048,0xF928000D,0xBD2C0001,0xBD0C0001, -0x51FC00C8,}; -static const uint32_t g_etc1_to_bc7_m6_table87[] = { -0x1400000,0x1400000,0x1400000,0x1400000,0x1400000,0x1400000,0x1400000,0x1400000,0x1400000,0x1400000,0x1400000,0x1400000,0x1400000,0x1400000,0x1400000,0x1400000,0x1400000,0x1400000,0x1400000,0x1400000,0x1DC0000,0x1DC0000,0x1DC0000,0x1DC0000,0x1DC0000,0x1DC0000,0x1DC0000,0x1DC0000,0x1DC0000,0x1DC0000,0x73F80000, -0x73F80000,0x73F80000,0x73F80000,0x9E000001,0x1400000,0x1400000,0x1400000,0x1400000,0x1400000,0x1400000,0x1400000,0x1400000,0x3540000,0x3540000,0x3540000,0x1DC0000,0x4DFC0000,0x1680000,0x1680000,0x1680000,0x1680000,0x1680000,0x1680000,0x1680000,0x1680000,0x1680000,0x1680000,0x1BFC0000,0x1BFC0000,0x1BFC0000,0x1BFC0000,0x1BFC0000, -0x1BFC0000,0x91F80000,0x91F80000,0x91F80000,0xB2000001,0x1BFC0000,0x1BFC0000,0x1BFC0000,0x1BFC0000,0x1BFC0000,0x1BFC0000,0x91F80000,0x91F80000,0x91F80000,0xB2000001,0x91F80000,0x91F80000,0x91F80000,0xB2000001,0xB2000001,0x1800000,0x1680000,0x1680000,0x7A00000,0x1C40000,0x3E80000,0x3E80000,0x47FC0000,0x7A00000,0x1C40000,0x73FC0000,0x91F80000, -0x73FC0000,0x18C0000,0x18C0000,0x18C0000,0x18C0000,0x53FC0000,0x53FC0000,0x53FC0000,0xABF80000,0xABF80000,0xC4000001,0x53FC0000,0x53FC0000,0x53FC0000,0xABF80000,0xABF80000,0xC4000001,0xABF80000,0xABF80000,0xC4000001,0xC4000001,0x53FC0000,0x53FC0000,0x53FC0000,0xABF80000,0xABF80000,0xC4000001,0xABF80000,0xABF80000,0xC4000001,0xC4000001,0xABF80000, -0xABF80000,0xC4000001,0xC4000001,0xC4000001,0x1CC0000,0xBA40000,0x18C0000,0x2BFC0000,0x73FC0000,0x95FC0000,0x9FFC0000,0xB3F40000,0x1F00000,0x53FC0000,0x95FC0000,0xC4000001,0x95FC0000,0x1B40000,0x8FFC0000,0xC9F80000,0xD8000001,0x8FFC0000,0xC9F80000,0xD8000001,0xC9F80000,0xD8000001,0xD8000001,0x8FFC0000,0xC9F80000,0xD8000001,0xC9F80000,0xD8000001, -0xD8000001,0xC9F80000,0xD8000001,0xD8000001,0xD8000001,0x8FFC0000,0xC9F80000,0xD8000001,0xC9F80000,0xD8000001,0xD8000001,0xC9F80000,0xD8000001,0xD8000001,0xD8000001,0xC9F80000,0xD8000001,0xD8000001,0xD8000001,0xD8000001,0x4BFC0000,0x1D00000,0x1D00000,0xA5FC0000,0xC1FC0000,0xD1F80000,0xD8000001,0xD8000001,0x75FC0000,0xB1FC0000,0xD9C40000,0xD8000001, -0xBBFC0000,0x1780738,0xFF6C0378,0xED6802D4,0xD96802D5,0xFF5C0212,0xF55400D5,0xDB5C013A,0xE3540190,0xD75400D5,0xCF540192,0xFF50031B,0xF74000A2,0xDF4C00FF,0xE74000D1,0xD9400002,0xCF4400D7,0xD94002D4,0xD53800FD,0xCD38013B,0xC74002D3,0x37FC0734,0xFF1C02D3,0xD94002D4,0xF1100192,0xDB2800CF,0xCF300192,0xEAF802D3,0xD90800A3,0xCF0800D7,0xC71802D4,0x9DFC0734, -0xD8C802D4,0xCEBC0192,0xC6A002D3,0xBC000734,0xFF6403DE,0xF3740618,0xF5780658,0xFF54012A,0xFF400006,0xE7400002,0xDB440012,0xD7400011,0xFF5C03A6,0xFF4400EA,0xDD3400A9,0xCF0800D7,0x83FC0734,0x18C02D4,0xFF8000CD,0xE77C00A4,0xD97800A5,0xFF6C00D4,0xEB680001,0xDB6C0015,0xDD6800C8,0xD7640026,0xCF6800CA,0x55FC02D3,0xF54400A2,0xD96000A3,0xE93800C9,0xD9400002, -0xD14C00CA,0xADF802D3,0xD90800A3,0xCEF800CA,0xC60002D3,0x55FC02D3,0xF54400A2,0xD96000A3,0xE93800C9,0xD9400002,0xD14C00CA,0xADF802D3,0xD90800A3,0xCEF800CA,0xC60002D3,0xADF802D3,0xD90800A3,0xCEF800CA,0xC60002D3,0xC60002D3,0xFF780191,0xFD880248,0xFF8C0244,0xFF5C0096,0xFD440005,0xE7400002,0xDB4C0002,0xD9340005,0xFF7001A5,0xFF540071,0xDF2C00A2,0xCEF800CA, -0x97FC02D3,0x16802D4,0x16802D4,0x16802D4,0x16802D4,0xFF5400C8,0xFF5400C8,0xFF5400C8,0xD35400C8,0xD35400C8,0xC55400C9,0xF74000A2,0xF74000A2,0xF74000A2,0xD9400001,0xD9400001,0xC9440026,0xCB4000A2,0xCB4000A2,0xC53C0015,0xBD4000A2,0x19FC02D3,0x19FC02D3,0x19FC02D3,0xDF2000C9,0xDF2000C9,0xC73800C9,0xD90800A2,0xD90800A2,0xC51C0002,0xBD2400A2,0x8FF802D3, -0x8FF802D3,0xC4E400C9,0xBCC800A2,0xB20002D3,0xFF58015D,0xFB640229,0x16802D4,0xFF4C0065,0xFD400001,0xE7400001,0xE1440006,0xD3400002,0xFF500139,0xFF3C0054,0xDB3800A2,0xC51C0002,0x71FC02D3,0x17800A4,0x17800A4,0x17800A4,0x17800A4,0xEB680000,0xEB680000,0xEB680000,0xCF680000,0xCF680000,0xC5680001,0x37FC00A2,0x37FC00A2,0x37FC00A2,0xD5480001,0xD5480001, -0xC5580001,0x9DFC00A2,0x9DFC00A2,0xC5200001,0xBC0000A2,0x37FC00A2,0x37FC00A2,0x37FC00A2,0xD5480001,0xD5480001,0xC5580001,0x9DFC00A2,0x9DFC00A2,0xC5200001,0xBC0000A2,0x9DFC00A2,0x9DFC00A2,0xC5200001,0xBC0000A2,0xBC0000A2,0xFB6C0048,0xF3740064,0x17800A4,0xFD580019,0xFB440000,0xE5440000,0xDB4C0001,0xD53C0000,0xF5640055,0xFF480014,0x83FC00A2,0xC5200001, -0x83FC00A2,0x1A000C8,0xFF8C0001,0xE38C0001,0xD98C0001,0x71FC00C8,0xEB680001,0xD9780001,0xB9FC00C8,0xD93C0001,0xCE0000CA,0x71FC00C8,0xEB680001,0xD9780001,0xB9FC00C8,0xD93C0001,0xCE0000CA,0xB9FC00C8,0xD93C0001,0xCE0000CA,0xCE0000CA,0x71FC00C8,0xEB680001,0xD9780001,0xB9FC00C8,0xD93C0001,0xCE0000CA,0xB9FC00C8,0xD93C0001,0xCE0000CA,0xCE0000CA,0xB9FC00C8, -0xD93C0001,0xCE0000CA,0xCE0000CA,0xCE0000CA,0xFF8C0080,0x1BC00C8,0xF79C0091,0xFF6C002D,0xFB480005,0xE93C0000,0xD9540001,0xD9200001,0xF7880080,0xFF600029,0xDD580000,0xCE0000CA,0xA7FC00C8,0x15400C8,0x15400C8,0x15400C8,0x15400C8,0x15400C8,0x15400C8,0x15400C8,0x15400C8,0x15400C8,0x15400C8,0xDD400000,0xDD400000,0xDD400000,0xDD400000,0xDD400000, -0xDD400000,0xBD400001,0xBD400001,0xBD400001,0xB3400001,0x1F800C8,0x1F800C8,0x1F800C8,0x1F800C8,0x1F800C8,0x1F800C8,0xC51C0001,0xC51C0001,0xC51C0001,0xB32C0001,0x81FC00C8,0x81FC00C8,0x81FC00C8,0xB2F00001,0xA80000CA,0xFF4C0064,0x15400C8,0x15400C8,0xFD480019,0xFD400001,0xEB400000,0xEB400000,0xD1400000,0xFF3C0050,0xFD380014,0xC53C0001,0xC51C0001, -0x5FFC00C8,}; -static const uint32_t g_etc1_to_bc7_m6_table88[] = { -0x1500001,0x1500001,0x1500001,0x1500001,0x1500001,0x1500001,0x1500001,0x1500001,0x1500001,0x1500001,0x1500001,0x1500001,0x1500001,0x1500001,0x1500001,0x1500001,0x1500001,0x1500001,0x1500001,0x1500001,0x3F40000,0x3F40000,0x3F40000,0x3F40000,0x3F40000,0x3F40000,0x3F40000,0x3F40000,0x3F40000,0x3F40000,0x7FFC0000, -0x7FFC0000,0x7FFC0000,0x7FFC0000,0xA8000000,0x1500001,0x1500001,0x1500001,0x1500001,0x1500001,0x1500001,0x1500001,0x1500001,0x1680000,0x1680000,0x1680000,0x3F40000,0x5FF80000,0x1780001,0x1780001,0x1780001,0x1780001,0x1780001,0x1780001,0x1780001,0x1780001,0x1780001,0x1780001,0x37FC0000,0x37FC0000,0x37FC0000,0x37FC0000,0x37FC0000, -0x37FC0000,0x9DFC0000,0x9DFC0000,0x9DFC0000,0xBC000000,0x37FC0000,0x37FC0000,0x37FC0000,0x37FC0000,0x37FC0000,0x37FC0000,0x9DFC0000,0x9DFC0000,0x9DFC0000,0xBC000000,0x9DFC0000,0x9DFC0000,0x9DFC0000,0xBC000000,0xBC000000,0x1940000,0x1780001,0x1780001,0x1B80000,0x3D80000,0x9FC0000,0x9FC0000,0x5DFC0000,0x1B80000,0x3D80000,0x83FC0000,0x9DFC0000, -0x83FC0000,0x19C0001,0x19C0001,0x19C0001,0x19C0001,0x6FFC0000,0x6FFC0000,0x6FFC0000,0xB9F80000,0xB9F80000,0xCE000000,0x6FFC0000,0x6FFC0000,0x6FFC0000,0xB9F80000,0xB9F80000,0xCE000000,0xB9F80000,0xB9F80000,0xCE000000,0xCE000000,0x6FFC0000,0x6FFC0000,0x6FFC0000,0xB9F80000,0xB9F80000,0xCE000000,0xB9F80000,0xB9F80000,0xCE000000,0xCE000000,0xB9F80000, -0xB9F80000,0xCE000000,0xCE000000,0xCE000000,0x3E00000,0x5B80000,0x19C0001,0x4DFC0000,0x8BFC0000,0xA5FC0000,0xAFFC0000,0xBFF40000,0x15FC0000,0x6FFC0000,0xA5FC0000,0xCE000000,0xA5FC0000,0x1C40001,0xABFC0000,0xD7F80000,0xE2000000,0xABFC0000,0xD7F80000,0xE2000000,0xD7F80000,0xE2000000,0xE2000000,0xABFC0000,0xD7F80000,0xE2000000,0xD7F80000,0xE2000000, -0xE2000000,0xD7F80000,0xE2000000,0xE2000000,0xE2000000,0xABFC0000,0xD7F80000,0xE2000000,0xD7F80000,0xE2000000,0xE2000000,0xD7F80000,0xE2000000,0xE2000000,0xE2000000,0xD7F80000,0xE2000000,0xE2000000,0xE2000000,0xE2000000,0x77FC0000,0x1E40000,0x1E40000,0xBBFC0000,0xD1FC0000,0xDDF40000,0xE2000000,0xE2000000,0x97FC0000,0xC5FC0000,0xE1F40000,0xE2000000, -0xCBFC0000,0x18C0734,0xFF8003BF,0xF57802D4,0xE37802D3,0xFF740272,0xFD6800D7,0xE76C013B,0xEB680192,0xE16400D7,0xD9640192,0xFF680361,0xFF5400A3,0xE75C00FD,0xEF5000CF,0xE3540002,0xD95800D5,0xE35002D4,0xDD4800FF,0xD550013A,0xCF5002D5,0x53FC0734,0xFF3802E3,0xE35402D4,0xFB200192,0xE33800D1,0xD9400190,0xF50802D3,0xE31800A2,0xD91C00D5,0xCF2C02D4,0xABF80734, -0xE2D802D3,0xD8C80190,0xCEB402D4,0xC4000738,0xFF780447,0xFD880614,0xFD88065C,0xFF6C01B7,0xFF58002E,0xF1540002,0xE3580011,0xE14C0012,0xFF700413,0xFF5C016A,0xE54800A9,0xD91C00D5,0x95FC0734,0x1A002D3,0xFF9000FB,0xF18C00A2,0xE38C00A2,0xFF8000F1,0xF37C0002,0xE57C0015,0xE77800C9,0xE1740026,0xD97800C9,0x71FC02D3,0xFF5400A2,0xE37000A2,0xF34800C9,0xE3540001, -0xD96000C8,0xB9FC02D3,0xE31400A2,0xD90800C8,0xCE0002D4,0x71FC02D3,0xFF5400A2,0xE37000A2,0xF34800C9,0xE3540001,0xD96000C8,0xB9FC02D3,0xE31400A2,0xD90800C8,0xCE0002D4,0xB9FC02D3,0xE31400A2,0xD90800C8,0xCE0002D4,0xCE0002D4,0xFD9001C4,0xF79C0269,0xF79C0266,0xFF7800D1,0xFF5C001A,0xF1540001,0xE3600002,0xE1440006,0xFF8801C3,0xFF7000B5,0xE74000A2,0xD90800C8, -0xA7FC02D3,0x17802D3,0x17802D3,0x17802D3,0x17802D3,0xFF6800CE,0xFF6800CE,0xFF6800CE,0xDD6400CA,0xDD6400CA,0xCF6400CA,0xFF5400A3,0xFF5400A3,0xFF5400A3,0xE1540002,0xE1540002,0xD1580026,0xD35400A3,0xD35400A3,0xCD500015,0xC55000A5,0x35FC02D3,0x35FC02D3,0x35FC02D3,0xE73400C9,0xE73400C9,0xCF4C00C8,0xE11C00A2,0xE11C00A2,0xCF2C0001,0xC53800A4,0x9DF402D3, -0x9DF402D3,0xCEF400C8,0xC4E000A4,0xBC0002D4,0xFF680189,0xF374024B,0x17802D3,0xFF600099,0xFF540009,0xEF540002,0xE9540005,0xDD500002,0xFF64016D,0xFF540079,0xE34C00A3,0xCF2C0001,0x81FC02D3,0x18C00A2,0x18C00A2,0x18C00A2,0x18C00A2,0xF17C0001,0xF17C0001,0xF17C0001,0xD77C0001,0xD77C0001,0xCF780001,0x53FC00A2,0x53FC00A2,0x53FC00A2,0xDD5C0001,0xDD5C0001, -0xCF680000,0xABF800A2,0xABF800A2,0xCF300000,0xC40000A4,0x53FC00A2,0x53FC00A2,0x53FC00A2,0xDD5C0001,0xDD5C0001,0xCF680000,0xABF800A2,0xABF800A2,0xCF300000,0xC40000A4,0xABF800A2,0xABF800A2,0xCF300000,0xC40000A4,0xC40000A4,0xF7800055,0xFD880062,0x18C00A2,0xFB700029,0xFF580001,0xED580000,0xE55C0000,0xDD500001,0xFD740055,0xFD640020,0x95FC00A2,0xCF300000, -0x95FC00A2,0x1B000CA,0xFFA4000D,0xED9C0001,0xE39C0001,0x8DFC00C8,0xF37C0001,0xE3880001,0xC7FC00C8,0xE34C0000,0xD80000C8,0x8DFC00C8,0xF37C0001,0xE3880001,0xC7FC00C8,0xE34C0000,0xD80000C8,0xC7FC00C8,0xE34C0000,0xD80000C8,0xD80000C8,0x8DFC00C8,0xF37C0001,0xE3880001,0xC7FC00C8,0xE34C0000,0xD80000C8,0xC7FC00C8,0xE34C0000,0xD80000C8,0xD80000C8,0xC7FC00C8, -0xE34C0000,0xD80000C8,0xD80000C8,0xD80000C8,0xF7A40091,0xFCC00C8,0xFFAC0095,0xFF8C0048,0xFF64000D,0xF34C0000,0xE3640000,0xE32C0000,0xFF980082,0xFD80003D,0xE56C0001,0xD80000C8,0xB9FC00C8,0x16400CA,0x16400CA,0x16400CA,0x16400CA,0x16400CA,0x16400CA,0x16400CA,0x16400CA,0x16400CA,0x16400CA,0xE3540001,0xE3540001,0xE3540001,0xE3540001,0xE3540001, -0xE3540001,0xC7500001,0xC7500001,0xC7500001,0xBD500001,0x19FC00C8,0x19FC00C8,0x19FC00C8,0x19FC00C8,0x19FC00C8,0x19FC00C8,0xCD300001,0xCD300001,0xCD300001,0xBD3C0001,0x8FF800C8,0x8FF800C8,0x8FF800C8,0xBD000000,0xB20000C8,0xF9600071,0x16400CA,0x16400CA,0xFF580022,0xFD540005,0xF1540001,0xF1540001,0xD9540001,0xFD540055,0xFF500019,0xD14C0000,0xCD300001, -0x71FC00C8,}; -static const uint32_t g_etc1_to_bc7_m6_table89[] = { -0x1600001,0x1600001,0x1600001,0x1600001,0x1600001,0x1600001,0x1600001,0x1600001,0x1600001,0x1600001,0x1600001,0x1600001,0x1600001,0x1600001,0x1600001,0x1600001,0x1600001,0x1600001,0x1600001,0x1600001,0x13FC0000,0x13FC0000,0x13FC0000,0x13FC0000,0x13FC0000,0x13FC0000,0x13FC0000,0x13FC0000,0x13FC0000,0x13FC0000,0x8BFC0000, -0x8BFC0000,0x8BFC0000,0x8BFC0000,0xB0000000,0x1600001,0x1600001,0x1600001,0x1600001,0x1600001,0x1600001,0x1600001,0x1600001,0x5780000,0x5780000,0x5780000,0x13FC0000,0x6DFC0000,0x1880001,0x1880001,0x1880001,0x1880001,0x1880001,0x1880001,0x1880001,0x1880001,0x1880001,0x1880001,0x4FFC0000,0x4FFC0000,0x4FFC0000,0x4FFC0000,0x4FFC0000, -0x4FFC0000,0xA9FC0000,0xA9FC0000,0xA9FC0000,0xC4000000,0x4FFC0000,0x4FFC0000,0x4FFC0000,0x4FFC0000,0x4FFC0000,0x4FFC0000,0xA9FC0000,0xA9FC0000,0xA9FC0000,0xC4000000,0xA9FC0000,0xA9FC0000,0xA9FC0000,0xC4000000,0xC4000000,0x1A40000,0x1880001,0x1880001,0x5C80000,0x3EC0000,0x27FC0000,0x27FC0000,0x71FC0000,0x5C80000,0x3EC0000,0x93FC0000,0xA9FC0000, -0x93FC0000,0x1AC0001,0x1AC0001,0x1AC0001,0x1AC0001,0x87FC0000,0x87FC0000,0x87FC0000,0xC5F80000,0xC5F80000,0xD6000000,0x87FC0000,0x87FC0000,0x87FC0000,0xC5F80000,0xC5F80000,0xD6000000,0xC5F80000,0xC5F80000,0xD6000000,0xD6000000,0x87FC0000,0x87FC0000,0x87FC0000,0xC5F80000,0xC5F80000,0xD6000000,0xC5F80000,0xC5F80000,0xD6000000,0xD6000000,0xC5F80000, -0xC5F80000,0xD6000000,0xD6000000,0xD6000000,0x1F40000,0xDC80000,0x1AC0001,0x6BFC0000,0x9DFC0000,0xB5FC0000,0xBDF80000,0xC9F80000,0x3DFC0000,0x87FC0000,0xB5FC0000,0xD6000000,0xB5FC0000,0x1D40001,0xC3FC0000,0xE1FC0000,0xEA000000,0xC3FC0000,0xE1FC0000,0xEA000000,0xE1FC0000,0xEA000000,0xEA000000,0xC3FC0000,0xE1FC0000,0xEA000000,0xE1FC0000,0xEA000000, -0xEA000000,0xE1FC0000,0xEA000000,0xEA000000,0xEA000000,0xC3FC0000,0xE1FC0000,0xEA000000,0xE1FC0000,0xEA000000,0xEA000000,0xE1FC0000,0xEA000000,0xEA000000,0xEA000000,0xE1FC0000,0xEA000000,0xEA000000,0xEA000000,0xEA000000,0x9FFC0000,0x3F40000,0x3F40000,0xCFFC0000,0xDFF80000,0xE7F40000,0xEA000000,0xEA000000,0xB5FC0000,0xD5FC0000,0xEBC80000,0xEA000000, -0xDBFC0000,0x19C0734,0xFF90041C,0xFD8802D4,0xEB8802D3,0xFF8002E2,0xFF7800E7,0xEF7C013B,0xF3780192,0xE97400D7,0xE1740192,0xFF7403A9,0xFF6800C6,0xEF6C00FD,0xF76000CF,0xEB640002,0xE16800D5,0xEB6002D4,0xE55800FF,0xDD60013A,0xD76002D5,0x6BFC0734,0xFF580319,0xEB6402D4,0xFF38019A,0xEB4800D1,0xE1500190,0xFD1802D3,0xEB2800A2,0xE12C00D5,0xD73C02D4,0xB7F80734, -0xEAE802D3,0xE0D80190,0xD6C402D4,0xCC000738,0xFF8C0494,0xF598065A,0xF79C068F,0xFF800236,0xFF6C0086,0xF9640002,0xEB680011,0xE95C0012,0xFF800481,0xFF7401F7,0xED5800A9,0xE12C00D5,0xA3FC0734,0x1B002D3,0xFFA40126,0xF99C00A2,0xEB9C00A2,0xFF980119,0xFB8C0002,0xED8C0015,0xEF8800C9,0xE9840026,0xE18800C9,0x89FC02D3,0xFF7000AD,0xEB8000A2,0xFB5800C9,0xEB640001, -0xE17000C8,0xC5FC02D3,0xEB2400A2,0xE11800C8,0xD60002D4,0x89FC02D3,0xFF7000AD,0xEB8000A2,0xFB5800C9,0xEB640001,0xE17000C8,0xC5FC02D3,0xEB2400A2,0xE11800C8,0xD60002D4,0xC5FC02D3,0xEB2400A2,0xE11800C8,0xD60002D4,0xD60002D4,0xFFA001E5,0xFFAC0269,0xFFAC0266,0xFF94010A,0xFF7C0049,0xF9640001,0xEB700002,0xE9540006,0xFF9801E6,0xFF8400E2,0xEF5000A2,0xE11800C8, -0xB7FC02D3,0x18802D3,0x18802D3,0x18802D3,0x18802D3,0xFF7800E3,0xFF7800E3,0xFF7800E3,0xE57400CA,0xE57400CA,0xD77400CA,0xFF6800AD,0xFF6800AD,0xFF6800AD,0xE9640002,0xE9640002,0xD9680026,0xDB6400A3,0xDB6400A3,0xD5600015,0xCD6000A5,0x4DFC02D3,0x4DFC02D3,0x4DFC02D3,0xEF4400C9,0xEF4400C9,0xD75C00C8,0xE92C00A2,0xE92C00A2,0xD73C0001,0xCD4800A4,0xA7FC02D3, -0xA7FC02D3,0xD70400C8,0xCCF000A4,0xC40002D4,0xFD8001A6,0xFB84024B,0x18802D3,0xFF7000CA,0xFF6C0022,0xF7640002,0xF1640005,0xE5600002,0xFF78018A,0xFF6800A8,0xEB5C00A3,0xD73C0001,0x91FC02D3,0x19C00A2,0x19C00A2,0x19C00A2,0x19C00A2,0xF98C0001,0xF98C0001,0xF98C0001,0xDF8C0001,0xDF8C0001,0xD7880001,0x6BFC00A2,0x6BFC00A2,0x6BFC00A2,0xE56C0001,0xE56C0001, -0xD7780000,0xB7F800A2,0xB7F800A2,0xD7400000,0xCC0000A4,0x6BFC00A2,0x6BFC00A2,0x6BFC00A2,0xE56C0001,0xE56C0001,0xD7780000,0xB7F800A2,0xB7F800A2,0xD7400000,0xCC0000A4,0xB7F800A2,0xB7F800A2,0xD7400000,0xCC0000A4,0xCC0000A4,0xFF900055,0xF5980071,0x19C00A2,0xFD840032,0xFF700005,0xF5680000,0xED6C0000,0xE5600001,0xFD880062,0xFF74002D,0xA3FC00A2,0xD7400000, -0xA3FC00A2,0x1C000CA,0xFFB40022,0xF5AC0001,0xEBAC0001,0xA5FC00C8,0xFB8C0001,0xEB980001,0xD3FC00C8,0xEB5C0000,0xE00000C8,0xA5FC00C8,0xFB8C0001,0xEB980001,0xD3FC00C8,0xEB5C0000,0xE00000C8,0xD3FC00C8,0xEB5C0000,0xE00000C8,0xE00000C8,0xA5FC00C8,0xFB8C0001,0xEB980001,0xD3FC00C8,0xEB5C0000,0xE00000C8,0xD3FC00C8,0xEB5C0000,0xE00000C8,0xE00000C8,0xD3FC00C8, -0xEB5C0000,0xE00000C8,0xE00000C8,0xE00000C8,0xFFB40091,0x1E000C8,0xF9C000A2,0xFFA00059,0xFF7C0025,0xFB5C0000,0xEB740000,0xEB3C0000,0xFFAC0095,0xFF940050,0xED7C0001,0xE00000C8,0xC7FC00C8,0x17400CA,0x17400CA,0x17400CA,0x17400CA,0x17400CA,0x17400CA,0x17400CA,0x17400CA,0x17400CA,0x17400CA,0xEB640001,0xEB640001,0xEB640001,0xEB640001,0xEB640001, -0xEB640001,0xCF600001,0xCF600001,0xCF600001,0xC5600001,0x31FC00C8,0x31FC00C8,0x31FC00C8,0x31FC00C8,0x31FC00C8,0x31FC00C8,0xD5400001,0xD5400001,0xD5400001,0xC54C0001,0x9BF800C8,0x9BF800C8,0x9BF800C8,0xC5100000,0xBA0000C8,0xFF6C007D,0x17400CA,0x17400CA,0xFF68002D,0xFF64000A,0xF9640001,0xF9640001,0xE1640001,0xF9680062,0xFD600029,0xD95C0000,0xD5400001, -0x7FFC00C8,}; -static const uint32_t g_etc1_to_bc7_m6_table90[] = { -0x1700001,0x1700001,0x1700001,0x1700001,0x1700001,0x1700001,0x1700001,0x1700001,0x1700001,0x1700001,0x1700001,0x1700001,0x1700001,0x1700001,0x1700001,0x1700001,0x1700001,0x1700001,0x1700001,0x1700001,0x2BFC0000,0x2BFC0000,0x2BFC0000,0x2BFC0000,0x2BFC0000,0x2BFC0000,0x2BFC0000,0x2BFC0000,0x2BFC0000,0x2BFC0000,0x97FC0000, -0x97FC0000,0x97FC0000,0x97FC0000,0xB8000000,0x1700001,0x1700001,0x1700001,0x1700001,0x1700001,0x1700001,0x1700001,0x1700001,0xD880000,0xD880000,0xD880000,0x2BFC0000,0x7DF80000,0x1980001,0x1980001,0x1980001,0x1980001,0x1980001,0x1980001,0x1980001,0x1980001,0x1980001,0x1980001,0x69FC0000,0x69FC0000,0x69FC0000,0x69FC0000,0x69FC0000, -0x69FC0000,0xB5FC0000,0xB5FC0000,0xB5FC0000,0xCC000000,0x69FC0000,0x69FC0000,0x69FC0000,0x69FC0000,0x69FC0000,0x69FC0000,0xB5FC0000,0xB5FC0000,0xB5FC0000,0xCC000000,0xB5FC0000,0xB5FC0000,0xB5FC0000,0xCC000000,0xCC000000,0x3B40000,0x1980001,0x1980001,0x1DC0000,0xBFC0000,0x45FC0000,0x45FC0000,0x85FC0000,0x1DC0000,0xBFC0000,0xA1FC0000,0xB5FC0000, -0xA1FC0000,0x1BC0001,0x1BC0001,0x1BC0001,0x1BC0001,0x9FFC0000,0x9FFC0000,0x9FFC0000,0xD1F80000,0xD1F80000,0xDE000000,0x9FFC0000,0x9FFC0000,0x9FFC0000,0xD1F80000,0xD1F80000,0xDE000000,0xD1F80000,0xD1F80000,0xDE000000,0xDE000000,0x9FFC0000,0x9FFC0000,0x9FFC0000,0xD1F80000,0xD1F80000,0xDE000000,0xD1F80000,0xD1F80000,0xDE000000,0xDE000000,0xD1F80000, -0xD1F80000,0xDE000000,0xDE000000,0xDE000000,0x1FFC0000,0x1DC0000,0x1BC0001,0x89FC0000,0xB1FC0000,0xC3FC0000,0xC9FC0000,0xD5F40000,0x63FC0000,0x9FFC0000,0xC3FC0000,0xDE000000,0xC3FC0000,0x1E40001,0xDBFC0000,0xEDFC0000,0xF2000000,0xDBFC0000,0xEDFC0000,0xF2000000,0xEDFC0000,0xF2000000,0xF2000000,0xDBFC0000,0xEDFC0000,0xF2000000,0xEDFC0000,0xF2000000, -0xF2000000,0xEDFC0000,0xF2000000,0xF2000000,0xF2000000,0xDBFC0000,0xEDFC0000,0xF2000000,0xEDFC0000,0xF2000000,0xF2000000,0xEDFC0000,0xF2000000,0xF2000000,0xF2000000,0xEDFC0000,0xF2000000,0xF2000000,0xF2000000,0xF2000000,0xC7FC0000,0x47FC0000,0x47FC0000,0xE3FC0000,0xEBFC0000,0xF1F40000,0xF2000000,0xF2000000,0xD3FC0000,0xE7FC0000,0xF3D80000,0xF2000000, -0xE9FC0000,0x1AC0734,0xFFA40477,0xFF9C02EB,0xF39802D3,0xFF980352,0xFF8C012F,0xF78C013B,0xFB880192,0xF18400D7,0xE9840192,0xFF8C0401,0xFF7C011E,0xF77C00FD,0xFF7000CF,0xF3740002,0xE97800D5,0xF37002D4,0xED6800FF,0xE570013A,0xDF7002D5,0x83FC0734,0xFF700361,0xF37402D4,0xFF5801E2,0xF35800D1,0xE9600190,0xFF3802DD,0xF33800A2,0xE93C00D5,0xDF4C02D4,0xC3F80734, -0xF2F802D3,0xE8E80190,0xDED402D4,0xD4000738,0xFFA004E6,0xFDA8065A,0xFFAC068F,0xFF9402CB,0xFF84010B,0xFF740006,0xF3780011,0xF16C0012,0xFF9804CA,0xFF84028B,0xF56800A9,0xE93C00D5,0xB3FC0734,0x1C002D3,0xFFB4016B,0xFFAC00A3,0xF3AC00A2,0xFFA8015B,0xFF9C0012,0xF59C0015,0xF79800C9,0xF1940026,0xE99800C9,0xA3FC02D3,0xFF8800D5,0xF39000A2,0xFF7000CE,0xF3740001, -0xE98000C8,0xD1FC02D3,0xF33400A2,0xE92800C8,0xDE0002D4,0xA3FC02D3,0xFF8800D5,0xF39000A2,0xFF7000CE,0xF3740001,0xE98000C8,0xD1FC02D3,0xF33400A2,0xE92800C8,0xDE0002D4,0xD1FC02D3,0xF33400A2,0xE92800C8,0xDE0002D4,0xDE0002D4,0xFFB40202,0xF7BC028B,0xF7BC028B,0xFFA4015B,0xFF900089,0xFF740005,0xF3800002,0xF1640006,0xFDB00222,0xFF980136,0xF76000A2,0xE92800C8, -0xC5FC02D3,0x19802D3,0x19802D3,0x19802D3,0x19802D3,0xFF8C00FE,0xFF8C00FE,0xFF8C00FE,0xED8400CA,0xED8400CA,0xDF8400CA,0xFF7800CB,0xFF7800CB,0xFF7800CB,0xF1740002,0xF1740002,0xE1780026,0xE37400A3,0xE37400A3,0xDD700015,0xD57000A5,0x65FC02D3,0x65FC02D3,0x65FC02D3,0xF75400C9,0xF75400C9,0xDF6C00C8,0xF13C00A2,0xF13C00A2,0xDF4C0001,0xD55800A4,0xB3FC02D3, -0xB3FC02D3,0xDF1400C8,0xD50000A4,0xCC0002D4,0xFF9001C6,0xF598026A,0x19802D3,0xFF8800F3,0xFF80004A,0xFF740002,0xF9740005,0xED700002,0xFD8801C3,0xFF8000DD,0xF36C00A3,0xDF4C0001,0x9FFC02D3,0x1AC00A2,0x1AC00A2,0x1AC00A2,0x1AC00A2,0xFF9C0002,0xFF9C0002,0xFF9C0002,0xE79C0001,0xE79C0001,0xDF980001,0x83FC00A2,0x83FC00A2,0x83FC00A2,0xED7C0001,0xED7C0001, -0xDF880000,0xC3F800A2,0xC3F800A2,0xDF500000,0xD40000A4,0x83FC00A2,0x83FC00A2,0x83FC00A2,0xED7C0001,0xED7C0001,0xDF880000,0xC3F800A2,0xC3F800A2,0xDF500000,0xD40000A4,0xC3F800A2,0xC3F800A2,0xDF500000,0xD40000A4,0xD40000A4,0xFFA00064,0xFDA80071,0x1AC00A2,0xFF98003D,0xFF840011,0xFD780000,0xF57C0000,0xED700001,0xF5A00071,0xFB90003D,0xB3FC00A2,0xDF500000, -0xB3FC00A2,0x1D000CA,0xFFC4003A,0xFDBC0001,0xF3BC0001,0xBDFC00C8,0xFFA00009,0xF3A80001,0xDFF800C8,0xF36C0000,0xE80000C8,0xBDFC00C8,0xFFA00009,0xF3A80001,0xDFF800C8,0xF36C0000,0xE80000C8,0xDFF800C8,0xF36C0000,0xE80000C8,0xE80000C8,0xBDFC00C8,0xFFA00009,0xF3A80001,0xDFF800C8,0xF36C0000,0xE80000C8,0xDFF800C8,0xF36C0000,0xE80000C8,0xE80000C8,0xDFF800C8, -0xF36C0000,0xE80000C8,0xE80000C8,0xE80000C8,0xFBC800A4,0x1F000C8,0xFFCC00AA,0xFDBC0071,0xFFA4003D,0xFF740004,0xF3840000,0xF34C0000,0xF9C800A2,0xFBB80071,0xF58C0001,0xE80000C8,0xD7FC00C8,0x18400CA,0x18400CA,0x18400CA,0x18400CA,0x18400CA,0x18400CA,0x18400CA,0x18400CA,0x18400CA,0x18400CA,0xF3740001,0xF3740001,0xF3740001,0xF3740001,0xF3740001, -0xF3740001,0xD7700001,0xD7700001,0xD7700001,0xCD700001,0x49FC00C8,0x49FC00C8,0x49FC00C8,0x49FC00C8,0x49FC00C8,0x49FC00C8,0xDD500001,0xDD500001,0xDD500001,0xCD5C0001,0xA7F800C8,0xA7F800C8,0xA7F800C8,0xCD200000,0xC20000C8,0xF9800082,0x18400CA,0x18400CA,0xFB7C003D,0xFF780012,0xFD740002,0xFD740002,0xE9740001,0xFF74006A,0xFD740032,0xE16C0000,0xDD500001, -0x8FFC00C8,}; -static const uint32_t g_etc1_to_bc7_m6_table91[] = { -0x1800001,0x1800001,0x1800001,0x1800001,0x1800001,0x1800001,0x1800001,0x1800001,0x1800001,0x1800001,0x1800001,0x1800001,0x1800001,0x1800001,0x1800001,0x1800001,0x1800001,0x1800001,0x1800001,0x1800001,0x43FC0000,0x43FC0000,0x43FC0000,0x43FC0000,0x43FC0000,0x43FC0000,0x43FC0000,0x43FC0000,0x43FC0000,0x43FC0000,0xA3FC0000, -0xA3FC0000,0xA3FC0000,0xA3FC0000,0xC0000000,0x1800001,0x1800001,0x1800001,0x1800001,0x1800001,0x1800001,0x1800001,0x1800001,0x19C0000,0x19C0000,0x19C0000,0x43FC0000,0x8BFC0000,0x1A80001,0x1A80001,0x1A80001,0x1A80001,0x1A80001,0x1A80001,0x1A80001,0x1A80001,0x1A80001,0x1A80001,0x81FC0000,0x81FC0000,0x81FC0000,0x81FC0000,0x81FC0000, -0x81FC0000,0xC1FC0000,0xC1FC0000,0xC1FC0000,0xD4000000,0x81FC0000,0x81FC0000,0x81FC0000,0x81FC0000,0x81FC0000,0x81FC0000,0xC1FC0000,0xC1FC0000,0xC1FC0000,0xD4000000,0xC1FC0000,0xC1FC0000,0xC1FC0000,0xD4000000,0xD4000000,0xBC40000,0x1A80001,0x1A80001,0x1F00000,0x33FC0000,0x63FC0000,0x63FC0000,0x99FC0000,0x1F00000,0x33FC0000,0xB1FC0000,0xC1FC0000, -0xB1FC0000,0x1CC0001,0x1CC0001,0x1CC0001,0x1CC0001,0xB7FC0000,0xB7FC0000,0xB7FC0000,0xDDF40000,0xDDF40000,0xE6000000,0xB7FC0000,0xB7FC0000,0xB7FC0000,0xDDF40000,0xDDF40000,0xE6000000,0xDDF40000,0xDDF40000,0xE6000000,0xE6000000,0xB7FC0000,0xB7FC0000,0xB7FC0000,0xDDF40000,0xDDF40000,0xE6000000,0xDDF40000,0xDDF40000,0xE6000000,0xE6000000,0xDDF40000, -0xDDF40000,0xE6000000,0xE6000000,0xE6000000,0x57FC0000,0x1EC0000,0x1CC0001,0xA7FC0000,0xC5FC0000,0xD3FC0000,0xD7FC0000,0xDFF80000,0x8BFC0000,0xB7FC0000,0xD3FC0000,0xE6000000,0xD3FC0000,0x1F40001,0xF5FC0000,0xF9FC0000,0xFA000000,0xF5FC0000,0xF9FC0000,0xFA000000,0xF9FC0000,0xFA000000,0xFA000000,0xF5FC0000,0xF9FC0000,0xFA000000,0xF9FC0000,0xFA000000, -0xFA000000,0xF9FC0000,0xFA000000,0xFA000000,0xFA000000,0xF5FC0000,0xF9FC0000,0xFA000000,0xF9FC0000,0xFA000000,0xFA000000,0xF9FC0000,0xFA000000,0xFA000000,0xFA000000,0xF9FC0000,0xFA000000,0xFA000000,0xFA000000,0xFA000000,0xEDFC0000,0xC7FC0000,0xC7FC0000,0xF7FC0000,0xF9FC0000,0xFBF40000,0xFA000000,0xFA000000,0xF1FC0000,0xF7FC0000,0xFBE80000,0xFA000000, -0xF9FC0000,0x1BC0734,0xFFB004DF,0xFFAC032C,0xFBA802D3,0xFFA403F2,0xFFA001B3,0xFF9C013B,0xFF9401A4,0xF99400D7,0xF1940192,0xFFA40479,0xFF9401AE,0xFF8C00FD,0xFF880107,0xFB840002,0xF18800D5,0xFB8002D4,0xF57800FF,0xED80013A,0xE78002D5,0x9BFC0734,0xFF8803C9,0xFB8402D4,0xFF700252,0xFB6800D1,0xF1700190,0xFF58031F,0xFB4800A2,0xF14C00D5,0xE75C02D4,0xCFF80734, -0xFB0802D3,0xF0F80190,0xE6E402D4,0xDC000738,0xFFB40553,0xF5B806A4,0xF7BC06C4,0xFFA4038C,0xFF9801BF,0xFF88005A,0xFB880011,0xF97C0012,0xFDB00553,0xFF98033A,0xFD7800A9,0xF14C00D5,0xC1FC0734,0x1D002D3,0xFFC401A3,0xFFC000CE,0xFBBC00A2,0xFFBC0199,0xFFB4005A,0xFDAC0015,0xFFA800C9,0xF9A40026,0xF1A800C9,0xBBFC02D3,0xFFA0011D,0xFBA000A2,0xFF8800FE,0xFB840001, -0xF19000C8,0xDDFC02D3,0xFB4400A2,0xF13800C8,0xE60002D4,0xBBFC02D3,0xFFA0011D,0xFBA000A2,0xFF8800FE,0xFB840001,0xF19000C8,0xDDFC02D3,0xFB4400A2,0xF13800C8,0xE60002D4,0xDDFC02D3,0xFB4400A2,0xF13800C8,0xE60002D4,0xE60002D4,0xFBC80244,0xFFCC028B,0xFFCC028B,0xFFC001A6,0xFFA800ED,0xFF900039,0xFB900002,0xF9740006,0xFFC40243,0xFFB0019E,0xFF7000A2,0xF13800C8, -0xD5FC02D3,0x1A802D3,0x1A802D3,0x1A802D3,0x1A802D3,0xFF9C012B,0xFF9C012B,0xFF9C012B,0xF59400CA,0xF59400CA,0xE79400CA,0xFF8C00ED,0xFF8C00ED,0xFF8C00ED,0xF9840002,0xF9840002,0xE9880026,0xEB8400A3,0xEB8400A3,0xE5800015,0xDD8000A5,0x7DFC02D3,0x7DFC02D3,0x7DFC02D3,0xFF6400C9,0xFF6400C9,0xE77C00C8,0xF94C00A2,0xF94C00A2,0xE75C0001,0xDD6800A4,0xBFFC02D3, -0xBFFC02D3,0xE72400C8,0xDD1000A4,0xD40002D4,0xFFA001E5,0xFDA8026A,0x1A802D3,0xFF980126,0xFF940082,0xFF88001A,0xFF88000A,0xF5800002,0xFD9C01E1,0xFF900111,0xFB7C00A3,0xE75C0001,0xAFFC02D3,0x1BC00A2,0x1BC00A2,0x1BC00A2,0x1BC00A2,0xFFB0000D,0xFFB0000D,0xFFB0000D,0xEFAC0001,0xEFAC0001,0xE7A80001,0x9BFC00A2,0x9BFC00A2,0x9BFC00A2,0xF58C0001,0xF58C0001, -0xE7980000,0xCFF800A2,0xCFF800A2,0xE7600000,0xDC0000A4,0x9BFC00A2,0x9BFC00A2,0x9BFC00A2,0xF58C0001,0xF58C0001,0xE7980000,0xCFF800A2,0xCFF800A2,0xE7600000,0xDC0000A4,0xCFF800A2,0xCFF800A2,0xE7600000,0xDC0000A4,0xDC0000A4,0xFBB40071,0xF5B80082,0x1BC00A2,0xFBAC0055,0xFF9C0022,0xFF900008,0xFD8C0000,0xF5800001,0xFDB00071,0xFFA40048,0xC1FC00A2,0xE7600000, -0xC1FC00A2,0x1E000CA,0xFFDC0062,0xFFCC0011,0xFBCC0001,0xD5FC00C8,0xFFC0002D,0xFBB80001,0xEBF800C8,0xFB7C0000,0xF00000C8,0xD5FC00C8,0xFFC0002D,0xFBB80001,0xEBF800C8,0xFB7C0000,0xF00000C8,0xEBF800C8,0xFB7C0000,0xF00000C8,0xF00000C8,0xD5FC00C8,0xFFC0002D,0xFBB80001,0xEBF800C8,0xFB7C0000,0xF00000C8,0xEBF800C8,0xFB7C0000,0xF00000C8,0xF00000C8,0xEBF800C8, -0xFB7C0000,0xF00000C8,0xF00000C8,0xF00000C8,0xF3E000B5,0x27FC00C8,0xF9E000B5,0xFDD40091,0xFFBC0061,0xFFA40022,0xFB940000,0xFB5C0000,0xFDD800A4,0xFFCC0082,0xFD9C0001,0xF00000C8,0xE5FC00C8,0x19400CA,0x19400CA,0x19400CA,0x19400CA,0x19400CA,0x19400CA,0x19400CA,0x19400CA,0x19400CA,0x19400CA,0xFB840001,0xFB840001,0xFB840001,0xFB840001,0xFB840001, -0xFB840001,0xDF800001,0xDF800001,0xDF800001,0xD5800001,0x63FC00C8,0x63FC00C8,0x63FC00C8,0x63FC00C8,0x63FC00C8,0x63FC00C8,0xE5600001,0xE5600001,0xE5600001,0xD56C0001,0xB3F800C8,0xB3F800C8,0xB3F800C8,0xD5300000,0xCA0000C8,0xF3940091,0x19400CA,0x19400CA,0xFD8C004A,0xFD880022,0xFD84000A,0xFD84000A,0xF1840001,0xFD8C0071,0xF9880048,0xE97C0000,0xE5600001, -0x9FF800C8,}; -static const uint32_t g_etc1_to_bc7_m6_table92[] = { -0x1940000,0x1940000,0x1940000,0x1940000,0x1940000,0x1940000,0x1940000,0x1940000,0x1940000,0x1940000,0x1940000,0x1940000,0x1940000,0x1940000,0x1940000,0x1940000,0x1940000,0x1940000,0x1940000,0x1940000,0x5FFC0000,0x5FFC0000,0x5FFC0000,0x5FFC0000,0x5FFC0000,0x5FFC0000,0x5FFC0000,0x5FFC0000,0x5FFC0000,0x5FFC0000,0xB1F80000, -0xB1F80000,0xB1F80000,0xB1F80000,0xC8000001,0x1940000,0x1940000,0x1940000,0x1940000,0x1940000,0x1940000,0x1940000,0x1940000,0xFAC0000,0xFAC0000,0xFAC0000,0x5FFC0000,0x9DF80000,0x1BC0000,0x1BC0000,0x1BC0000,0x1BC0000,0x1BC0000,0x1BC0000,0x1BC0000,0x1BC0000,0x1BC0000,0x1BC0000,0x9BFC0000,0x9BFC0000,0x9BFC0000,0x9BFC0000,0x9BFC0000, -0x9BFC0000,0xCFF80000,0xCFF80000,0xCFF80000,0xDC000001,0x9BFC0000,0x9BFC0000,0x9BFC0000,0x9BFC0000,0x9BFC0000,0x9BFC0000,0xCFF80000,0xCFF80000,0xCFF80000,0xDC000001,0xCFF80000,0xCFF80000,0xCFF80000,0xDC000001,0xDC000001,0x5D80000,0x1BC0000,0x1BC0000,0x17FC0000,0x5FFC0000,0x85FC0000,0x85FC0000,0xAFFC0000,0x17FC0000,0x5FFC0000,0xC1FC0000,0xCFF80000, -0xC1FC0000,0x1E00000,0x1E00000,0x1E00000,0x1E00000,0xD3FC0000,0xD3FC0000,0xD3FC0000,0xE9FC0000,0xE9FC0000,0xEE000001,0xD3FC0000,0xD3FC0000,0xD3FC0000,0xE9FC0000,0xE9FC0000,0xEE000001,0xE9FC0000,0xE9FC0000,0xEE000001,0xEE000001,0xD3FC0000,0xD3FC0000,0xD3FC0000,0xE9FC0000,0xE9FC0000,0xEE000001,0xE9FC0000,0xE9FC0000,0xEE000001,0xEE000001,0xE9FC0000, -0xE9FC0000,0xEE000001,0xEE000001,0xEE000001,0x97FC0000,0x17FC0000,0x1E00000,0xC9FC0000,0xDBFC0000,0xE3FC0000,0xE7F80000,0xEBF80000,0xB7FC0000,0xD3FC0000,0xE3FC0000,0xEE000001,0xE3FC0000,0x1FC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000, -0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xF7FC0001,0xF7FC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFFF00000,0xFE000000, -0xFFFC0000,0x1CC0625,0xFFC4047D,0xFFC0034C,0xFFBC02D4,0xFFBC03A5,0xFFB40204,0xFFB00161,0xFFAC017D,0xFFA800C9,0xF7A80139,0xFFB00412,0xFFAC01FB,0xFFA4012A,0xFFA00106,0xFF980009,0xF9980082,0xFF940225,0xFB9000C8,0xF59000C1,0xEF940222,0xB5FC0625,0xFFA003BC,0xFF9802D3,0xFF94024F,0xFF8400E9,0xF784013B,0xFF7C02BE,0xFF6400A5,0xF7640076,0xEF700222,0xDBF80625, -0xFF2C02D3,0xF7180139,0xEEFC0222,0xE4000627,0xFFC404D9,0xFDC8059D,0xFFCC05C5,0xFFB40375,0xFFA801FF,0xFFA400B5,0xFF9C0032,0xFF900004,0xFFBC04B6,0xFFB00336,0xFF9000B4,0xF7640076,0xD1FC0625,0x1DC0225,0xFFD40178,0xFFCC00E4,0xFFCC00A4,0xFFD00145,0xFFC8007E,0xFFC40020,0xFFC00081,0xFDB8000C,0xF7BC0071,0xCFFC0222,0xFFC00118,0xFFB800A2,0xFFAC00C6,0xFF9C0001, -0xF7A40071,0xE7FC0222,0xFF6C00A2,0xF7540071,0xEE000222,0xCFFC0222,0xFFC00118,0xFFB800A2,0xFFAC00C6,0xFF9C0001,0xF7A40071,0xE7FC0222,0xFF6C00A2,0xF7540071,0xEE000222,0xE7FC0222,0xFF6C00A2,0xF7540071,0xEE000222,0xEE000222,0xFFD801C3,0xF7DC0201,0xF7DC0204,0xFDD00171,0xFFC000F2,0xFFAC0059,0xFFA80005,0xFF900000,0xFDD801C5,0xFFC80146,0xFF9800AB,0xF7540071, -0xE1FC0222,0x1BC02D4,0x1BC02D4,0x1BC02D4,0x1BC02D4,0xFFB00161,0xFFB00161,0xFFB00161,0xFDA800C8,0xFDA800C8,0xEFA800C9,0xFFA4012A,0xFFA4012A,0xFFA4012A,0xFF980009,0xFF980009,0xF3980026,0xF59400A2,0xF59400A2,0xEF900015,0xE79400A2,0x99FC02D3,0x99FC02D3,0x99FC02D3,0xFF8400E9,0xFF8400E9,0xF18C00C9,0xFF6400A5,0xFF6400A5,0xEF700002,0xE77800A2,0xCDFC02D3, -0xCDFC02D3,0xEF3800C9,0xE71C00A2,0xDC0002D3,0xFBB40225,0xF5B8028C,0x1BC02D4,0xFFAC0175,0xFFA400D9,0xFF9C0059,0xFF9C0032,0xFD940002,0xFDB00201,0xFFA40163,0xFF9000AB,0xEF700002,0xBFFC02D3,0x1CC00A4,0x1CC00A4,0x1CC00A4,0x1CC00A4,0xFFC40020,0xFFC40020,0xFFC40020,0xF9BC0000,0xF9BC0000,0xEFBC0001,0xB7FC00A2,0xB7FC00A2,0xB7FC00A2,0xFF9C0001,0xFF9C0001, -0xEFAC0001,0xDDF400A2,0xDDF400A2,0xEF740001,0xE60000A2,0xB7FC00A2,0xB7FC00A2,0xB7FC00A2,0xFF9C0001,0xFF9C0001,0xEFAC0001,0xDDF400A2,0xDDF400A2,0xEF740001,0xE60000A2,0xDDF400A2,0xDDF400A2,0xEF740001,0xE60000A2,0xE60000A2,0xFDC80080,0xFFCC0080,0x1CC00A4,0xFDC00064,0xFDBC003D,0xFFAC0019,0xFFA80005,0xFF900000,0xFFC40080,0xFBC00062,0xD3FC00A2,0xEF740001, -0xD3FC00A2,0x1F00071,0xFFE80041,0xFFE40014,0xFFE00000,0xE9FC0071,0xFFD80028,0xFFD00000,0xF3FC0071,0xFFA00000,0xF6000071,0xE9FC0071,0xFFD80028,0xFFD00000,0xF3FC0071,0xFFA00000,0xF6000071,0xF3FC0071,0xFFA00000,0xF6000071,0xF6000071,0xE9FC0071,0xFFD80028,0xFFD00000,0xF3FC0071,0xFFA00000,0xF6000071,0xF3FC0071,0xFFA00000,0xF6000071,0xF6000071,0xF3FC0071, -0xFFA00000,0xF6000071,0xF6000071,0xF6000071,0xFFEC0062,0x87FC0071,0xFFEC0064,0xFDE80055,0xFDE40048,0xFFC8001D,0xFFB40000,0xFF8C0000,0xFDEC0062,0xFFE40055,0xFFBC0004,0xF6000071,0xF1FC0071,0x1A800C8,0x1A800C8,0x1A800C8,0x1A800C8,0x1A800C8,0x1A800C8,0x1A800C8,0x1A800C8,0x1A800C8,0x1A800C8,0xFF980005,0xFF980005,0xFF980005,0xFF980005,0xFF980005, -0xFF980005,0xE7940001,0xE7940001,0xE7940001,0xDD940001,0x7DFC00C8,0x7DFC00C8,0x7DFC00C8,0x7DFC00C8,0x7DFC00C8,0x7DFC00C8,0xEF700001,0xEF700001,0xEF700001,0xDD800001,0xBFFC00C8,0xBFFC00C8,0xBFFC00C8,0xDD440001,0xD20000CA,0xFBA40091,0x1A800C8,0x1A800C8,0xFFA00055,0xFD9C0034,0xFF980014,0xFF980014,0xFB940000,0xFD9C0082,0xFD9C0055,0xEF900001,0xEF700001, -0xAFFC00C8,}; -static const uint32_t g_etc1_to_bc7_m6_table93[] = { -0x1A40000,0x1A40000,0x1A40000,0x1A40000,0x1A40000,0x1A40000,0x1A40000,0x1A40000,0x1A40000,0x1A40000,0x1A40000,0x1A40000,0x1A40000,0x1A40000,0x1A40000,0x1A40000,0x1A40000,0x1A40000,0x1A40000,0x1A40000,0x77FC0000,0x77FC0000,0x77FC0000,0x77FC0000,0x77FC0000,0x77FC0000,0x77FC0000,0x77FC0000,0x77FC0000,0x77FC0000,0xBDF80000, -0xBDF80000,0xBDF80000,0xBDF80000,0xD0000001,0x1A40000,0x1A40000,0x1A40000,0x1A40000,0x1A40000,0x1A40000,0x1A40000,0x1A40000,0x1C00000,0x1C00000,0x1C00000,0x77FC0000,0xABFC0000,0x1CC0000,0x1CC0000,0x1CC0000,0x1CC0000,0x1CC0000,0x1CC0000,0x1CC0000,0x1CC0000,0x1CC0000,0x1CC0000,0xB5FC0000,0xB5FC0000,0xB5FC0000,0xB5FC0000,0xB5FC0000, -0xB5FC0000,0xDBF80000,0xDBF80000,0xDBF80000,0xE4000001,0xB5FC0000,0xB5FC0000,0xB5FC0000,0xB5FC0000,0xB5FC0000,0xB5FC0000,0xDBF80000,0xDBF80000,0xDBF80000,0xE4000001,0xDBF80000,0xDBF80000,0xDBF80000,0xE4000001,0xE4000001,0xDE80000,0x1CC0000,0x1CC0000,0x51FC0000,0x87FC0000,0xA3FC0000,0xA3FC0000,0xC3FC0000,0x51FC0000,0x87FC0000,0xD1FC0000,0xDBF80000, -0xD1FC0000,0x1F00000,0x1F00000,0x1F00000,0x1F00000,0xEBFC0000,0xEBFC0000,0xEBFC0000,0xF5FC0000,0xF5FC0000,0xF6000001,0xEBFC0000,0xEBFC0000,0xEBFC0000,0xF5FC0000,0xF5FC0000,0xF6000001,0xF5FC0000,0xF5FC0000,0xF6000001,0xF6000001,0xEBFC0000,0xEBFC0000,0xEBFC0000,0xF5FC0000,0xF5FC0000,0xF6000001,0xF5FC0000,0xF5FC0000,0xF6000001,0xF6000001,0xF5FC0000, -0xF5FC0000,0xF6000001,0xF6000001,0xF6000001,0xD1FC0000,0x97FC0000,0x1F00000,0xE7FC0000,0xEFFC0000,0xF3FC0000,0xF5F80000,0xF7F40000,0xDFFC0000,0xEBFC0000,0xF3FC0000,0xF6000001,0xF3FC0000,0x1FC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000, -0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xF7FC0001,0xF7FC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFFF00000,0xFE000000, -0xFFFC0000,0x1D804C1,0xFFD003C9,0xFFCC0314,0xFFCC02D4,0xFFC80305,0xFFC40204,0xFFC401A0,0xFFB80151,0xFFB800D8,0xFBB800E1,0xFFC4031D,0xFFBC01F3,0xFFBC017A,0xFFAC00E6,0xFFAC003D,0xFBA80036,0xFFAC016D,0xFFA400A4,0xF9A40049,0xF5A4014E,0xC7FC04C1,0xFFB80354,0xFFB002D3,0xFFAC01F7,0xFFA0011A,0xFB9800E3,0xFF940216,0xFF8800CD,0xFB78001A,0xF580014F,0xE3FC04C1, -0xFF6002D3,0xFB3800E1,0xF514014E,0xEA0004C3,0xFFD003DA,0xF5D80485,0xF5D8049C,0xFFC402E5,0xFFBC01E3,0xFFB800E7,0xFFB40084,0xFFA80015,0xFFD003C4,0xFFC402B9,0xFFA800E4,0xFB78001A,0xDDF804C1,0x1E8014D,0xFDE40105,0xFFE000BD,0xFFDC00A4,0xFFDC00C9,0xFFD8006C,0xFFD40041,0xFFCC0041,0xFFCC0001,0xFBCC0019,0xDFFC014D,0xFFD800D8,0xFFCC00A4,0xFFC0007D,0xFFB80011, -0xFBB80019,0xEFFC014D,0xFF9C00A2,0xFB740019,0xF400014E,0xDFFC014D,0xFFD800D8,0xFFCC00A4,0xFFC0007D,0xFFB80011,0xFBB80019,0xEFFC014D,0xFF9C00A2,0xFB740019,0xF400014E,0xEFFC014D,0xFF9C00A2,0xFB740019,0xF400014E,0xF400014E,0xFFE4011D,0xFDE80131,0xFDE80138,0xFFDC00E1,0xFFD400AA,0xFFC80056,0xFFBC0025,0xFFB0000D,0xFFE00122,0xFFDC00DA,0xFFB800A6,0xFB740019, -0xEBFC014D,0x1CC02D4,0x1CC02D4,0x1CC02D4,0x1CC02D4,0xFFC401A0,0xFFC401A0,0xFFC401A0,0xFFB800D8,0xFFB800D8,0xF7B800C9,0xFFBC017A,0xFFBC017A,0xFFBC017A,0xFFAC003D,0xFFAC003D,0xFBA80026,0xFDA400A2,0xFDA400A2,0xF7A00015,0xEFA400A2,0xB1FC02D3,0xB1FC02D3,0xB1FC02D3,0xFFA0011A,0xFFA0011A,0xF99C00C9,0xFF8800CD,0xFF8800CD,0xF7800002,0xEF8800A2,0xD9FC02D3, -0xD9FC02D3,0xF74800C9,0xEF2C00A2,0xE40002D3,0xFDC80244,0xFDC8028C,0x1CC02D4,0xFFBC01BA,0xFFB40131,0xFFB400A8,0xFFB40084,0xFFA80015,0xFFBC0236,0xFFBC01A6,0xFFA800DB,0xF7800002,0xCFFC02D3,0x1DC00A4,0x1DC00A4,0x1DC00A4,0x1DC00A4,0xFFD40041,0xFFD40041,0xFFD40041,0xFFCC0001,0xFFCC0001,0xF7CC0001,0xCFFC00A2,0xCFFC00A2,0xCFFC00A2,0xFFB80011,0xFFB80011, -0xF7BC0001,0xE7FC00A2,0xE7FC00A2,0xF7840001,0xEE0000A2,0xCFFC00A2,0xCFFC00A2,0xCFFC00A2,0xFFB80011,0xFFB80011,0xF7BC0001,0xE7FC00A2,0xE7FC00A2,0xF7840001,0xEE0000A2,0xE7FC00A2,0xE7FC00A2,0xF7840001,0xEE0000A2,0xEE0000A2,0xFFD80082,0xF7DC0091,0x1DC00A4,0xFDD80071,0xFDD00055,0xFFC8003D,0xFFBC0025,0xFFB0000D,0xF1DC0091,0xFBD40071,0xE1FC00A2,0xF7840001, -0xE1FC00A2,0x1F80019,0xFFF4000D,0xFFF00004,0xFFF00000,0xF5FC0019,0xFFF00008,0xFFE80000,0xF9FC0019,0xFFD40000,0xFA000019,0xF5FC0019,0xFFF00008,0xFFE80000,0xF9FC0019,0xFFD40000,0xFA000019,0xF9FC0019,0xFFD40000,0xFA000019,0xFA000019,0xF5FC0019,0xFFF00008,0xFFE80000,0xF9FC0019,0xFFD40000,0xFA000019,0xF9FC0019,0xFFD40000,0xFA000019,0xFA000019,0xF9FC0019, -0xFFD40000,0xFA000019,0xFA000019,0xFA000019,0xFDF40014,0xC7FC0019,0xF5F80019,0xFFF40012,0xFFE80010,0xFFE80008,0xFFDC0000,0xFFC80000,0xF1FC0019,0xFFF00014,0xFFE00001,0xFA000019,0xF9FC0019,0x1B800C8,0x1B800C8,0x1B800C8,0x1B800C8,0x1B800C8,0x1B800C8,0x1B800C8,0x1B800C8,0x1B800C8,0x1B800C8,0xFFA80014,0xFFA80014,0xFFA80014,0xFFA80014,0xFFA80014, -0xFFA80014,0xEFA40001,0xEFA40001,0xEFA40001,0xE5A40001,0x95FC00C8,0x95FC00C8,0x95FC00C8,0x95FC00C8,0x95FC00C8,0x95FC00C8,0xF7800001,0xF7800001,0xF7800001,0xE5900001,0xCBFC00C8,0xCBFC00C8,0xCBFC00C8,0xE5540001,0xDA0000CA,0xF3B400A4,0x1B800C8,0x1B800C8,0xFBB40071,0xFDB00048,0xFFAC0029,0xFFAC0029,0xFFA40004,0xF9B00091,0xFBAC0064,0xF7A00001,0xF7800001, -0xBFF800C8,}; -static const uint32_t g_etc1_to_bc7_m6_table94[] = { -0x1B40000,0x1B40000,0x1B40000,0x1B40000,0x1B40000,0x1B40000,0x1B40000,0x1B40000,0x1B40000,0x1B40000,0x1B40000,0x1B40000,0x1B40000,0x1B40000,0x1B40000,0x1B40000,0x1B40000,0x1B40000,0x1B40000,0x1B40000,0x8FFC0000,0x8FFC0000,0x8FFC0000,0x8FFC0000,0x8FFC0000,0x8FFC0000,0x8FFC0000,0x8FFC0000,0x8FFC0000,0x8FFC0000,0xC9F80000, -0xC9F80000,0xC9F80000,0xC9F80000,0xD8000001,0x1B40000,0x1B40000,0x1B40000,0x1B40000,0x1B40000,0x1B40000,0x1B40000,0x1B40000,0x1D00000,0x1D00000,0x1D00000,0x8FFC0000,0xBBFC0000,0x1DC0000,0x1DC0000,0x1DC0000,0x1DC0000,0x1DC0000,0x1DC0000,0x1DC0000,0x1DC0000,0x1DC0000,0x1DC0000,0xCDFC0000,0xCDFC0000,0xCDFC0000,0xCDFC0000,0xCDFC0000, -0xCDFC0000,0xE7F80000,0xE7F80000,0xE7F80000,0xEC000001,0xCDFC0000,0xCDFC0000,0xCDFC0000,0xCDFC0000,0xCDFC0000,0xCDFC0000,0xE7F80000,0xE7F80000,0xE7F80000,0xEC000001,0xE7F80000,0xE7F80000,0xE7F80000,0xEC000001,0xEC000001,0x1FC0000,0x1DC0000,0x1DC0000,0x89FC0000,0xADFC0000,0xC1FC0000,0xC1FC0000,0xD7FC0000,0x89FC0000,0xADFC0000,0xDFFC0000,0xE7F80000, -0xDFFC0000,0x1FC0001,0x1FC0001,0x1FC0001,0x1FC0001,0xFDFC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000, -0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFBFC0001,0xF7FC0001,0x1FC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFFFC0000,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0x1FC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000, -0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xF7FC0001,0xF7FC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFFF00000,0xFE000000, -0xFFFC0000,0x1E403A2,0xFFDC032A,0xFFD802D5,0xFFD802B1,0xFFDC0282,0xFFD40205,0xFFD001C9,0xFFCC0150,0xFFCC0110,0xFFC800C8,0xFFD0028A,0xFFD001E9,0xFFC801A9,0xFFC000FC,0xFFC00098,0xFFBC0029,0xFFB8011A,0xFFB800A1,0xFFB00014,0xF9B400C1,0xD5FC03A2,0xFFCC02F1,0xFFC802AE,0xFFB801CC,0xFFB80153,0xFFAC00CA,0xFFAC01B3,0xFFA000FE,0xFF900001,0xF99400C2,0xEBF803A2, -0xFF9002AE,0xFF5800C8,0xF93400C1,0xF00003A2,0xFDE00326,0xF9E00370,0xFBE40389,0xFFD40272,0xFFD001DA,0xFFC8012F,0xFFC400E0,0xFFB80065,0xFFD8030F,0xFFD00253,0xFFBC010D,0xFF900001,0xE5FC03A2,0x1F400C2,0xFDF000AE,0xFFF00099,0xFFEC0091,0xFFE80086,0xFFE80065,0xFFE80055,0xFFE40030,0xFFE0001D,0xFFDC0000,0xEFFC00C1,0xFFE400A1,0xFFE40091,0xFFD80058,0xFFD80034, -0xFFCC0000,0xF7F800C1,0xFFC80091,0xFF940000,0xF80000C1,0xEFFC00C1,0xFFE400A1,0xFFE40091,0xFFD80058,0xFFD80034,0xFFCC0000,0xF7F800C1,0xFFC80091,0xFF940000,0xF80000C1,0xF7F800C1,0xFFC80091,0xFF940000,0xF80000C1,0xF80000C1,0xFDF000AC,0xFFEC00C0,0xF3F400C2,0xFFEC009B,0xFFE80081,0xFFE0005E,0xFFE00048,0xFFD0002D,0xFBF000AC,0xFFE80095,0xFFD80092,0xFF940000, -0xF5FC00C1,0x1D802B1,0x1D802B1,0x1D802B1,0x1D802B1,0xFFD001C9,0xFFD001C9,0xFFD001C9,0xFFCC0110,0xFFCC0110,0xFFC800C8,0xFFC801A9,0xFFC801A9,0xFFC801A9,0xFFC00098,0xFFC00098,0xFFBC0029,0xFFB800A1,0xFFB800A1,0xFDB00011,0xF7B40091,0xC9FC02AE,0xC9FC02AE,0xC9FC02AE,0xFFB80153,0xFFB80153,0xFFAC00CA,0xFFA000FE,0xFFA000FE,0xFF900001,0xF7980091,0xE5F802AE, -0xE5F802AE,0xFF5800C8,0xF73C0091,0xEC0002AE,0xFFD80245,0xF5D8028C,0x1D802B1,0xFFD401E2,0xFFCC017A,0xFFC40114,0xFFC400E0,0xFFB80065,0xFFD0022E,0xFFD001C3,0xFFBC0109,0xFF900001,0xDFF802AE,0x1EC0091,0x1EC0091,0x1EC0091,0x1EC0091,0xFFE80055,0xFFE80055,0xFFE80055,0xFFE0001D,0xFFE0001D,0xFFDC0000,0xE5FC0091,0xE5FC0091,0xE5FC0091,0xFFD80034,0xFFD80034, -0xFFCC0000,0xF3F80091,0xF3F80091,0xFF940000,0xF6000091,0xE5FC0091,0xE5FC0091,0xE5FC0091,0xFFD80034,0xFFD80034,0xFFCC0000,0xF3F80091,0xF3F80091,0xFF940000,0xF6000091,0xF3F80091,0xF3F80091,0xFF940000,0xF6000091,0xF6000091,0xFBEC0080,0xFFEC0080,0x1EC0091,0xF9EC0080,0xFFE0006A,0xFFE00055,0xFFE00048,0xFFD0002D,0xF9EC0080,0xFFE80071,0xEFFC0091,0xFF940000, -0xEFFC0091,0x1FC0002,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000, -0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0002,0xF7FC0002,0xF7FC0002,0xFDFC0002,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFFFC0000,0xFDFC0002,0xFDFC0002,0xFFFC0000,0xFE000000,0xFFFC0000,0x1C800C8,0x1C800C8,0x1C800C8,0x1C800C8,0x1C800C8,0x1C800C8,0x1C800C8,0x1C800C8,0x1C800C8,0x1C800C8,0xFFBC0029,0xFFBC0029,0xFFBC0029,0xFFBC0029,0xFFBC0029, -0xFFBC0029,0xF7B40001,0xF7B40001,0xF7B40001,0xEDB40001,0xAFFC00C8,0xAFFC00C8,0xAFFC00C8,0xAFFC00C8,0xAFFC00C8,0xAFFC00C8,0xFF900001,0xFF900001,0xFF900001,0xEDA00001,0xD7FC00C8,0xD7FC00C8,0xD7FC00C8,0xED640001,0xE20000CA,0xFBC400A4,0x1C800C8,0x1C800C8,0xFBC40080,0xFFBC0061,0xFFBC0041,0xFFBC0041,0xFFB80014,0xFFBC009D,0xFFBC0075,0xFFB00001,0xFF900001, -0xCDFC00C8,}; -static const uint32_t g_etc1_to_bc7_m6_table95[] = { -0x1C40000,0x1C40000,0x1C40000,0x1C40000,0x1C40000,0x1C40000,0x1C40000,0x1C40000,0x1C40000,0x1C40000,0x1C40000,0x1C40000,0x1C40000,0x1C40000,0x1C40000,0x1C40000,0x1C40000,0x1C40000,0x1C40000,0x1C40000,0xA9FC0000,0xA9FC0000,0xA9FC0000,0xA9FC0000,0xA9FC0000,0xA9FC0000,0xA9FC0000,0xA9FC0000,0xA9FC0000,0xA9FC0000,0xD5F80000, -0xD5F80000,0xD5F80000,0xD5F80000,0xE0000001,0x1C40000,0x1C40000,0x1C40000,0x1C40000,0x1C40000,0x1C40000,0x1C40000,0x1C40000,0x9E00000,0x9E00000,0x9E00000,0xA9FC0000,0xC9FC0000,0x1EC0000,0x1EC0000,0x1EC0000,0x1EC0000,0x1EC0000,0x1EC0000,0x1EC0000,0x1EC0000,0x1EC0000,0x1EC0000,0xE5FC0000,0xE5FC0000,0xE5FC0000,0xE5FC0000,0xE5FC0000, -0xE5FC0000,0xF3F80000,0xF3F80000,0xF3F80000,0xF4000001,0xE5FC0000,0xE5FC0000,0xE5FC0000,0xE5FC0000,0xE5FC0000,0xE5FC0000,0xF3F80000,0xF3F80000,0xF3F80000,0xF4000001,0xF3F80000,0xF3F80000,0xF3F80000,0xF4000001,0xF4000001,0x77FC0000,0x1EC0000,0x1EC0000,0xC3FC0000,0xD5FC0000,0xDFFC0000,0xDFFC0000,0xEBFC0000,0xC3FC0000,0xD5FC0000,0xEFFC0000,0xF3F80000, -0xEFFC0000,0x1FC0001,0x1FC0001,0x1FC0001,0x1FC0001,0xFDFC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000, -0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFBFC0001,0xF7FC0001,0x1FC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFFFC0000,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0x1FC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000, -0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xF7FC0001,0xF7FC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFFF00000,0xFE000000, -0xFFFC0000,0x1EC0232,0xFFE801F2,0xFFE401C9,0xFFE401B9,0xFFE801AA,0xFFE00165,0xFFDC0149,0xFFD80110,0xFFD800EC,0xFFD800C8,0xFFDC0186,0xFFDC0131,0xFFDC010D,0xFFD400BB,0xFFD00088,0xFFD00048,0xFFCC0091,0xFFCC0051,0xFFC40001,0xFBC40039,0xE3FC0232,0xFFD801DD,0xFFD801B9,0xFFCC0150,0xFFCC0110,0xFFC400C8,0xFFC00109,0xFFB80096,0xFFAC0011,0xFBAC0039,0xF1F80232, -0xFFAC01B9,0xFF8800C8,0xFB5C0039,0xF4000232,0xFFE401E6,0xFDE80210,0xFFEC0221,0xFFE0019E,0xFFDC013E,0xFFD400D8,0xFFD000B5,0xFFD00061,0xFFE401ED,0xFFDC018C,0xFFD000AF,0xFFAC0011,0xEDFC0232,0x1F80036,0xFFF80031,0xFFF4002D,0xFFF40029,0xFFF40022,0xFFF4001D,0xFFF40019,0xFFF0000C,0xFFF00008,0xFFEC0000,0xF7FC0036,0xFFF0002D,0xFFF00029,0xFFF00018,0xFFE40010, -0xFFE40000,0xFBFC0036,0xFFE00029,0xFFC80000,0xFA000039,0xF7FC0036,0xFFF0002D,0xFFF00029,0xFFF00018,0xFFE40010,0xFFE40000,0xFBFC0036,0xFFE00029,0xFFC80000,0xFA000039,0xFBFC0036,0xFFE00029,0xFFC80000,0xFA000039,0xFA000039,0xFFF40030,0xF5F80036,0xF5F80036,0xFFF8002C,0xFFF00022,0xFFEC0018,0xFFE80011,0xFFE4000A,0xFFF8002C,0xFFF4002B,0xFFE8002A,0xFFC80000, -0xFBFC0036,0x1E401B9,0x1E401B9,0x1E401B9,0x1E401B9,0xFFDC0149,0xFFDC0149,0xFFDC0149,0xFFD800EC,0xFFD800EC,0xFFD800C8,0xFFDC010D,0xFFDC010D,0xFFDC010D,0xFFD00088,0xFFD00088,0xFFD00048,0xFFCC0051,0xFFCC0051,0xFFC40001,0xFBC40029,0xD9FC01B9,0xD9FC01B9,0xD9FC01B9,0xFFCC0110,0xFFCC0110,0xFFC400C8,0xFFB80096,0xFFB80096,0xFFAC0011,0xFBAC0029,0xEDF801B9, -0xEDF801B9,0xFF8800C8,0xFB5C0029,0xF20001BA,0xFDE40182,0xFBE401A0,0x1E401B9,0xFFDC0144,0xFFD80101,0xFFD400C8,0xFFD000B5,0xFFD00061,0xFDE00181,0xFFDC013B,0xFFD000AE,0xFFAC0011,0xE7FC01B9,0x1F40029,0x1F40029,0x1F40029,0x1F40029,0xFFF40019,0xFFF40019,0xFFF40019,0xFFF00008,0xFFF00008,0xFFEC0000,0xF1FC0029,0xF1FC0029,0xF1FC0029,0xFFE40010,0xFFE40010, -0xFFE40000,0xF9F80029,0xF9F80029,0xFFC80000,0xFA000029,0xF1FC0029,0xF1FC0029,0xF1FC0029,0xFFE40010,0xFFE40010,0xFFE40000,0xF9F80029,0xF9F80029,0xFFC80000,0xFA000029,0xF9F80029,0xF9F80029,0xFFC80000,0xFA000029,0xFA000029,0xFFF40020,0xF3F40029,0x1F40029,0xFDF40020,0xFFF00019,0xFFEC0014,0xFFE80011,0xFFE4000A,0xFDF40020,0xFDF00022,0xF7FC0029,0xFFC80000, -0xF7FC0029,0x1FC0002,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000, -0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0002,0xF7FC0002,0xF7FC0002,0xFDFC0002,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFFFC0000,0xFDFC0002,0xFDFC0002,0xFFFC0000,0xFE000000,0xFFFC0000,0x1D800C8,0x1D800C8,0x1D800C8,0x1D800C8,0x1D800C8,0x1D800C8,0x1D800C8,0x1D800C8,0x1D800C8,0x1D800C8,0xFFD00048,0xFFD00048,0xFFD00048,0xFFD00048,0xFFD00048, -0xFFD00048,0xFFC40001,0xFFC40001,0xFFC40001,0xF5C40001,0xC7FC00C8,0xC7FC00C8,0xC7FC00C8,0xC7FC00C8,0xC7FC00C8,0xC7FC00C8,0xFFAC0011,0xFFAC0011,0xFFAC0011,0xF5B00001,0xE3FC00C8,0xE3FC00C8,0xE3FC00C8,0xF5740001,0xEA0000CA,0xF5D800B5,0x1D800C8,0x1D800C8,0xFDD40091,0xFFD00075,0xFFCC0061,0xFFCC0061,0xFFCC0034,0xFDD400A2,0xFFD00082,0xFFC4001D,0xFFAC0011, -0xDDF800C8,}; -static const uint32_t g_etc1_to_bc7_m6_table96[] = { -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1, -0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, -0x0,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1, -0x1,0x180001,0x180001,0x180001,0x180001,0x2240000,0x2240000,0x2240000,0x4C0000,0x4C0000,0xC000000,0x2240000,0x2240000,0x2240000,0x4C0000,0x4C0000,0xC000000,0x4C0000,0x4C0000,0xC000000,0xC000000,0x2240000,0x2240000,0x2240000,0x4C0000,0x4C0000,0xC000000,0x4C0000,0x4C0000,0xC000000,0xC000000,0x4C0000, -0x4C0000,0xC000000,0xC000000,0xC000000,0x41C0000,0x1C0000,0x180001,0x240000,0x2C0000,0x340000,0x3C0000,0x5C0000,0x200000,0x2240000,0x340000,0xC000000,0x340000,0x540000,0x7C0000,0xFC0000,0x28000001,0x7C0000,0xFC0000,0x28000001,0xFC0000,0x28000001,0x28000001,0x7C0000,0xFC0000,0x28000001,0xFC0000,0x28000001, -0x28000001,0xFC0000,0x28000001,0x28000001,0x28000001,0x7C0000,0xFC0000,0x28000001,0xFC0000,0x28000001,0x28000001,0xFC0000,0x28000001,0x28000001,0x28000001,0xFC0000,0x28000001,0x28000001,0x28000001,0x28000001,0x680000,0x4580000,0x4580000,0x8C0000,0xCC0000,0x1940000,0x28000001,0x28000001,0x2700000,0x9C0000,0x1DCC0000,0x28000001, -0xB00000,0x1C0499,0x76080071,0x3C080071,0x28080072,0x500001A5,0x3A000028,0x28000001,0x280001A5,0x200000A2,0x1A0001A5,0x3600039D,0x2E000149,0x240000AA,0x22000236,0x2000011B,0x180001F1,0x1A00039D,0x1C000236,0x160002AE,0x1200039E,0x280499,0x28000216,0x22000127,0x220002AF,0x1E000181,0x18000231,0x180003E2,0x1600028E,0x140002EE,0x120003C2,0x500499, -0x1600032F,0x10000373,0x1000041B,0xC00049B,0xA4000108,0xFE0C0229,0xF21401F2,0x48000118,0x3600011B,0x2800011B,0x220000C2,0x20000173,0x64000209,0x3C00017A,0x1E0001B6,0x140002EE,0x380499,0x24039D,0x720C0055,0x3A0C0055,0x280C0056,0x500001A5,0x3A000028,0x28000001,0x280001A5,0x200000A2,0x1A0001A5,0x34039D,0x2E000149,0x240000AA,0x22000236,0x2000011B, -0x180001F1,0x68039D,0x1C000236,0x160002AE,0x1200039E,0x34039D,0x2E000149,0x240000AA,0x22000236,0x2000011B,0x180001F1,0x68039D,0x1C000236,0x160002AE,0x1200039E,0x68039D,0x1C000236,0x160002AE,0x1200039E,0x1200039E,0xA4000108,0xFE0C0205,0xF61C016E,0x48000118,0x3600011B,0x2800011B,0x220000C2,0x20000173,0x6C0001DB,0x3C00016A,0x1E0001B2,0x160002AE, -0x4C039D,0x80071,0x80071,0x80071,0x80071,0x26000000,0x26000000,0x26000000,0x12000000,0x12000000,0xC000000,0x10000055,0x10000055,0x10000055,0xC000020,0xC000020,0xC000010,0x8000055,0x8000055,0x8000034,0x6000055,0xC0071,0xC0071,0xC0071,0xC000030,0xC000030,0xC000020,0x600005D,0x600005D,0x800003D,0x6000059,0x140071, -0x140071,0x4000052,0x4000062,0x4000072,0x44000019,0xC8000000,0x80071,0x24000022,0x1A00001D,0x12000022,0x1200001D,0xC000022,0x24000036,0x1A00002D,0xA000056,0x800003D,0x100071,0xC0055,0xC0055,0xC0055,0xC0055,0x26000000,0x26000000,0x26000000,0x12000000,0x12000000,0xC000000,0x100055,0x100055,0x100055,0xC000020,0xC000020, -0xC000010,0x200055,0x200055,0x8000034,0x6000055,0x100055,0x100055,0x100055,0xC000020,0xC000020,0xC000010,0x200055,0x200055,0x8000034,0x6000055,0x200055,0x200055,0x8000034,0x6000055,0x6000055,0x44000019,0xC8000000,0xC0055,0x24000022,0x1A00001D,0x12000022,0x1200001D,0xC000022,0x24000032,0x1A000029,0x180055,0x8000034, -0x180055,0x3801A5,0x621C0001,0x361C0001,0x28180002,0x5001A5,0x3A000028,0x28000001,0xA001A5,0x200000A2,0x1A0001A5,0x5001A5,0x3A000028,0x28000001,0xA001A5,0x200000A2,0x1A0001A5,0xA001A5,0x200000A2,0x1A0001A5,0x1A0001A5,0x5001A5,0x3A000028,0x28000001,0xA001A5,0x200000A2,0x1A0001A5,0xA001A5,0x200000A2,0x1A0001A5,0x1A0001A5,0xA001A5, -0x200000A2,0x1A0001A5,0x1A0001A5,0x1A0001A5,0xA40000A4,0x3C01A5,0xFC280062,0x52000091,0x360000A2,0x2C00009D,0x2400006A,0x200000CA,0x720000DD,0x4C0000B4,0x26000059,0x1A0001A5,0x7001A5,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, -0x0,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x1,0x2,0x2,0x2,0x2,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1, -0x2,}; -static const uint32_t g_etc1_to_bc7_m6_table97[] = { -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1, -0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, -0x0,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1, -0x1,0x280001,0x280001,0x280001,0x280001,0x23C0000,0x23C0000,0x23C0000,0x7C0000,0x7C0000,0x14000000,0x23C0000,0x23C0000,0x23C0000,0x7C0000,0x7C0000,0x14000000,0x7C0000,0x7C0000,0x14000000,0x14000000,0x23C0000,0x23C0000,0x23C0000,0x7C0000,0x7C0000,0x14000000,0x7C0000,0x7C0000,0x14000000,0x14000000,0x7C0000, -0x7C0000,0x14000000,0x14000000,0x14000000,0x300000,0x2C0000,0x280001,0x380000,0x440000,0x580000,0x640000,0x980000,0x340000,0x23C0000,0x580000,0x14000000,0x580000,0x640000,0x940000,0x12C0000,0x30000001,0x940000,0x12C0000,0x30000001,0x12C0000,0x30000001,0x30000001,0x940000,0x12C0000,0x30000001,0x12C0000,0x30000001, -0x30000001,0x12C0000,0x30000001,0x30000001,0x30000001,0x940000,0x12C0000,0x30000001,0x12C0000,0x30000001,0x30000001,0x12C0000,0x30000001,0x30000001,0x30000001,0x12C0000,0x30000001,0x30000001,0x30000001,0x30000001,0x7C0000,0xC680000,0xC680000,0xA80000,0xF40000,0x1E00000,0x30000001,0x30000001,0x880000,0xBC0000,0x25DC0000,0x30000001, -0xD40000,0x240691,0x86100129,0x460C0129,0x300C012A,0x6A0001A5,0x46000008,0x32000011,0x340001A5,0x2C00006A,0x220001A5,0x480004ED,0x3A0001D1,0x2E00010E,0x2E00029E,0x2800012B,0x2200021E,0x220004ED,0x20000306,0x1C000362,0x160004EE,0x340691,0x34000316,0x280001E3,0x28000367,0x280001D4,0x1E000295,0x1E000566,0x2000037F,0x1C0003C6,0x1600052E,0x680691, -0x1C00048F,0x1600049F,0x140005C6,0x10000693,0xC2000118,0xF2140349,0xF61C0372,0x66000128,0x4000013B,0x34000135,0x2A0000C3,0x240001AE,0x82000289,0x500001CD,0x26000266,0x1C0003C6,0x4C0691,0x3004ED,0x821400DD,0x441400DD,0x301400DE,0x6A0001A5,0x46000008,0x3204000E,0x340001A5,0x2C00006A,0x220001A5,0x24404ED,0x3A0001D1,0x2E00010E,0x2E00029E,0x2800012B, -0x2200021E,0x8C04ED,0x20000306,0x1C000362,0x160004EE,0x24404ED,0x3A0001D1,0x2E00010E,0x2E00029E,0x2800012B,0x2200021E,0x8C04ED,0x20000306,0x1C000362,0x160004EE,0x8C04ED,0x20000306,0x1C000362,0x160004EE,0x160004EE,0xC2000118,0xF61C02BD,0xFA24026E,0x66000128,0x4000013B,0x34000135,0x2A0000C3,0x240001AE,0x82000249,0x500001B4,0x26000262,0x1C000362, -0x6404ED,0xC0129,0xC0129,0xC0129,0xC0129,0x3E000000,0x3E000000,0x3E000000,0x1E000000,0x1E000000,0x14000000,0x1C0000DD,0x1C0000DD,0x1C0000DD,0x18000050,0x18000050,0x12000028,0xE0000DD,0xE0000DD,0xE000088,0xA0000DD,0x140126,0x140126,0x140126,0x12000088,0x12000088,0x1200004C,0xC0000F1,0xC0000F1,0xC0000A1,0x80000EA,0x240126, -0x240126,0xA0000C6,0x8000105,0x6000126,0x76000041,0xFA040011,0xC0129,0x3A000059,0x28000050,0x22000055,0x1E000049,0x16000061,0x42000092,0x3200007D,0x120000DE,0xC0000A1,0x1C0126,0x1400DD,0x1400DD,0x1400DD,0x1400DD,0x3E000000,0x3E000000,0x3E000000,0x1E000000,0x1E000000,0x14000000,0x1C00DD,0x1C00DD,0x1C00DD,0x18000050,0x18000050, -0x12000028,0x3800DD,0x3800DD,0xE000088,0xA0000DD,0x1C00DD,0x1C00DD,0x1C00DD,0x18000050,0x18000050,0x12000028,0x3800DD,0x3800DD,0xE000088,0xA0000DD,0x3800DD,0x3800DD,0xE000088,0xA0000DD,0xA0000DD,0x76000041,0xFA04000D,0x1400DD,0x3A000059,0x28000050,0x22000055,0x1E000049,0x16000061,0x42000082,0x32000074,0x2800DD,0xE000088, -0x2800DD,0x4801A5,0x6A2C0001,0x3E2C0001,0x30280002,0x6801A5,0x46000008,0x30100001,0xD001A5,0x2C00006A,0x220001A5,0x6801A5,0x46000008,0x30100001,0xD001A5,0x2C00006A,0x220001A5,0xD001A5,0x2C00006A,0x220001A5,0x220001A5,0x6801A5,0x46000008,0x30100001,0xD001A5,0x2C00006A,0x220001A5,0xD001A5,0x2C00006A,0x220001A5,0x220001A5,0xD001A5, -0x2C00006A,0x220001A5,0x220001A5,0x220001A5,0xD6000075,0x4C01A5,0xF4380071,0x6E000059,0x4A00006A,0x36000064,0x2E00003A,0x280000A2,0x920400B5,0x5E00007D,0x32000028,0x220001A5,0x9401A5,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, -0x0,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x1,0x2,0x2,0x2,0x2,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1, -0x2,}; -static const uint32_t g_etc1_to_bc7_m6_table98[] = { -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1, -0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x40001,0x40001,0x40001,0x40001,0x40001,0x40001,0x40001,0x40001,0x40001,0x40001,0x80000,0x80000,0x80000,0x80000,0x80000, -0x80000,0xC0000,0xC0000,0xC0000,0x2000000,0x80000,0x80000,0x80000,0x80000,0x80000,0x80000,0xC0000,0xC0000,0xC0000,0x2000000,0xC0000,0xC0000,0xC0000,0x2000000,0x2000000,0xA040000,0x40001,0x40001,0x6040000,0x80000,0x80000,0x80000,0x80000,0x6040000,0x80000,0xC0000,0xC0000, -0xC0000,0x380001,0x380001,0x380001,0x380001,0x540000,0x540000,0x540000,0xAC0000,0xAC0000,0x1C000000,0x540000,0x540000,0x540000,0xAC0000,0xAC0000,0x1C000000,0xAC0000,0xAC0000,0x1C000000,0x1C000000,0x540000,0x540000,0x540000,0xAC0000,0xAC0000,0x1C000000,0xAC0000,0xAC0000,0x1C000000,0x1C000000,0xAC0000, -0xAC0000,0x1C000000,0x1C000000,0x1C000000,0x440000,0x63C0000,0x380001,0x24C0000,0x600000,0x780000,0x8C0000,0xD40000,0x480000,0x540000,0x780000,0x1C000000,0x780000,0x740000,0xAC0000,0x15C0000,0x38000001,0xAC0000,0x15C0000,0x38000001,0x15C0000,0x38000001,0x38000001,0xAC0000,0x15C0000,0x38000001,0x15C0000,0x38000001, -0x38000001,0x15C0000,0x38000001,0x38000001,0x38000001,0xAC0000,0x15C0000,0x38000001,0x15C0000,0x38000001,0x38000001,0x15C0000,0x38000001,0x38000001,0x38000001,0x15C0000,0x38000001,0x38000001,0x38000001,0x38000001,0x900000,0x7C0000,0x7C0000,0x2C00000,0x11C0000,0x9F00000,0x38000001,0x38000001,0x9C0000,0xD80000,0x2DEC0000,0x38000001, -0xF40000,0x2C088E,0x9A1401FE,0x501401FE,0x381401FF,0x7E0401AA,0x54040005,0x3C08003E,0x3E0401AA,0x3404004F,0x2A0401AA,0x5A0005EA,0x46000218,0x36000163,0x3A0002BD,0x3000010A,0x28000215,0x2C0005EA,0x26000383,0x240003DD,0x1C0005ED,0x40088E,0x40000401,0x3400028E,0x340003FA,0x2E0001F3,0x280002BE,0x2800069F,0x2600042C,0x20000463,0x1C000651,0x80088E, -0x200005EF,0x1C0005B2,0x1A000749,0x1600088E,0xF40000E9,0xF61C0486,0xFA24050F,0x74000111,0x5000011D,0x3C000103,0x34000096,0x2C00019A,0xA40002D1,0x5E0001D1,0x320002B1,0x20000463,0x5C088E,0x3C05EA,0x8E200152,0x4E200152,0x38200153,0x7A0801A6,0x54040001,0x3A10002A,0x3E0401A6,0x3404004B,0x2A0401A6,0x5805EA,0x46000218,0x36000163,0x3A0002BD,0x3000010A, -0x28000215,0xB005EA,0x26000383,0x240003DD,0x1C0005ED,0x5805EA,0x46000218,0x36000163,0x3A0002BD,0x3000010A,0x28000215,0xB005EA,0x26000383,0x240003DD,0x1C0005ED,0xB005EA,0x26000383,0x240003DD,0x1C0005ED,0x1C0005ED,0xF40000E9,0xFC280356,0xFE2C0353,0x74000111,0x5000011D,0x3C000103,0x34000096,0x2C00019A,0xA400026D,0x5E0001AD,0x320002A8,0x240003DD, -0x7C05EA,0x1401FE,0x1401FE,0x1401FE,0x1401FE,0x52040005,0x52040005,0x52040005,0x28040006,0x28040006,0x1C040005,0x30000152,0x30000152,0x30000152,0x22000059,0x22000059,0x1A000028,0x16000154,0x16000154,0x160000B4,0xE000154,0x2001FD,0x2001FD,0x2001FD,0x220000D2,0x220000D2,0x18000069,0x12000188,0x12000188,0x140000EA,0xE00016D,0x3C01FD, -0x3C01FD,0x10000149,0xA0001B5,0xA0001FD,0xB6000049,0xFE0C005E,0x1401FE,0x50000071,0x3C000061,0x2E000061,0x2A000049,0x2000007D,0x640000DD,0x440000AD,0x1E000156,0x140000EA,0x2C01FD,0x200152,0x200152,0x200152,0x200152,0x4E080001,0x4E080001,0x4E080001,0x28080001,0x28080001,0x1C040001,0x300152,0x300152,0x300152,0x22000059,0x22000059, -0x1A000028,0x5C0152,0x5C0152,0x160000B4,0xE000154,0x300152,0x300152,0x300152,0x22000059,0x22000059,0x1A000028,0x5C0152,0x5C0152,0x160000B4,0xE000154,0x5C0152,0x5C0152,0x160000B4,0xE000154,0xE000154,0xB6000049,0xFE0C003A,0x200152,0x50000071,0x3C000061,0x2E000061,0x2A000049,0x2000007D,0x640000B9,0x4400009D,0x400152,0x160000B4, -0x400152,0x5801A5,0x723C0001,0x463C0001,0x38380002,0x8001A5,0x54040000,0x38200001,0x10001A5,0x36000049,0x2A0001A5,0x8001A5,0x54040000,0x38200001,0x10001A5,0x36000049,0x2A0001A5,0x10001A5,0x36000049,0x2A0001A5,0x2A0001A5,0x8001A5,0x54040000,0x38200001,0x10001A5,0x36000049,0x2A0001A5,0x10001A5,0x36000049,0x2A0001A5,0x2A0001A5,0x10001A5, -0x36000049,0x2A0001A5,0x2A0001A5,0x2A0001A5,0xF6040055,0x5C01A5,0xFC480071,0x84000034,0x56000048,0x40000048,0x36000019,0x32000071,0xB4040091,0x6E000055,0x3C00000A,0x2A0001A5,0xB401A5,0x40005,0x40005,0x40005,0x40005,0x40005,0x40005,0x40005,0x40005,0x40005,0x40005,0x8000000,0x8000000,0x8000000,0x8000000,0x8000000, -0x8000000,0x4000000,0x4000000,0x4000000,0x2000000,0x40005,0x40005,0x40005,0x40005,0x40005,0x40005,0x2000002,0x2000002,0x2000002,0x2000001,0x5,0x5,0x5,0x2000004,0x5,0x28000000,0x40005,0x40005,0x12000000,0xC000000,0xA000000,0xA000000,0x6000000,0x12000001,0xC000001,0x4000000,0x2000002, -0x5,}; -static const uint32_t g_etc1_to_bc7_m6_table99[] = { -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1, -0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x140001,0x140001,0x140001,0x140001,0x140001,0x140001,0x140001,0x140001,0x140001,0x140001,0x200000,0x200000,0x200000,0x200000,0x200000, -0x200000,0x3C0000,0x3C0000,0x3C0000,0xA000000,0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,0x3C0000,0x3C0000,0x3C0000,0xA000000,0x3C0000,0x3C0000,0x3C0000,0xA000000,0xA000000,0x180000,0x140001,0x140001,0x2180000,0x1C0000,0x1C0000,0x1C0000,0x240000,0x2180000,0x1C0000,0x2C0000,0x3C0000, -0x2C0000,0x480001,0x480001,0x480001,0x480001,0x6C0000,0x6C0000,0x6C0000,0xDC0000,0xDC0000,0x24000000,0x6C0000,0x6C0000,0x6C0000,0xDC0000,0xDC0000,0x24000000,0xDC0000,0xDC0000,0x24000000,0x24000000,0x6C0000,0x6C0000,0x6C0000,0xDC0000,0xDC0000,0x24000000,0xDC0000,0xDC0000,0x24000000,0x24000000,0xDC0000, -0xDC0000,0x24000000,0x24000000,0x24000000,0x2540000,0xE4C0000,0x480001,0x640000,0x7C0000,0x9C0000,0xB40000,0x1100000,0x5C0000,0x6C0000,0x9C0000,0x24000000,0x9C0000,0x840000,0xC40000,0x18C0000,0x40000001,0xC40000,0x18C0000,0x40000001,0x18C0000,0x40000001,0x40000001,0xC40000,0x18C0000,0x40000001,0x18C0000,0x40000001, -0x40000001,0x18C0000,0x40000001,0x40000001,0x40000001,0xC40000,0x18C0000,0x40000001,0x18C0000,0x40000001,0x40000001,0x18C0000,0x40000001,0x40000001,0x40000001,0x18C0000,0x40000001,0x40000001,0x40000001,0x40000001,0xA40000,0x8C0000,0x8C0000,0xDC0000,0x1400000,0x13F00000,0x40000001,0x40000001,0xB40000,0xF80000,0x35FC0000,0x40000001, -0x1180000,0x380A26,0xA62002D2,0x5A2002D2,0x402002D3,0x8E0C01E2,0x600C003F,0x461000A2,0x480C01E2,0x3C080073,0x320C01E2,0x720005EA,0x580001A8,0x40040159,0x4600024D,0x3A00007A,0x320001C9,0x380005EA,0x320002FB,0x2C000362,0x240005ED,0x540A26,0x4C000489,0x3C00031B,0x40000432,0x3A0001E3,0x2E0002BE,0x34000717,0x30000415,0x2A00043D,0x2400067D,0xA40A26, -0x260006D7,0x26000662,0x20000819,0x1C000A26,0xFA0400DE,0xFC2805A6,0xFE2C0687,0x90000086,0x6200008B,0x4C00007A,0x40000029,0x380000FA,0xC200025D,0x76000142,0x3C000233,0x2A00043D,0x740A26,0x4C05EA,0x96300152,0x56300152,0x40300153,0x821801A6,0x5C140001,0x4220002A,0x461401A6,0x3C14004B,0x321401A6,0x7005EA,0x580001A8,0x40080153,0x4600024D,0x3A00007A, -0x320001C9,0xE405EA,0x320002FB,0x2C000362,0x240005ED,0x7005EA,0x580001A8,0x40080153,0x4600024D,0x3A00007A,0x320001C9,0xE405EA,0x320002FB,0x2C000362,0x240005ED,0xE405EA,0x320002FB,0x2C000362,0x240005ED,0x240005ED,0xFC0800CE,0xF438037A,0xFA44035E,0x90000086,0x6200008B,0x4C00007A,0x40000029,0x380000FA,0xD00001C1,0x7C000105,0x3C000223,0x2C000362, -0xA005EA,0x2002D2,0x2002D2,0x2002D2,0x2002D2,0x620C003D,0x620C003D,0x620C003D,0x320C003E,0x320C003E,0x240C003D,0x48000152,0x48000152,0x48000152,0x34000025,0x34000025,0x24000001,0x22000152,0x22000152,0x1C000080,0x16000154,0x3002D2,0x3002D2,0x3002D2,0x280000FE,0x280000FE,0x2200007D,0x1E0001C8,0x1E0001C8,0x1C0000E4,0x16000194,0x5C02D2, -0x5C02D2,0x160001B5,0x14000228,0xE0002D5,0xF6000014,0xF21400F5,0x2002D2,0x7A000034,0x54000028,0x40000028,0x38000019,0x2A00003D,0x820000D5,0x5A000086,0x2C00015B,0x1C0000E4,0x4002D2,0x300152,0x300152,0x300152,0x300152,0x56180001,0x56180001,0x56180001,0x30180001,0x30180001,0x24140001,0x2440152,0x2440152,0x2440152,0x34000025,0x34000025, -0x24000001,0x8C0152,0x8C0152,0x1C000080,0x16000154,0x2440152,0x2440152,0x2440152,0x34000025,0x34000025,0x24000001,0x8C0152,0x8C0152,0x1C000080,0x16000154,0x8C0152,0x8C0152,0x1C000080,0x16000154,0x16000154,0xF6000014,0xF820003D,0x300152,0x7A000034,0x54000028,0x40000028,0x38000019,0x2A00003D,0x96000088,0x5A000062,0x640152,0x1C000080, -0x640152,0x6801A5,0x7A4C0001,0x4E4C0001,0x40480002,0x9801A5,0x5C140000,0x40300001,0x13001A5,0x3E000022,0x320001A5,0x9801A5,0x5C140000,0x40300001,0x13001A5,0x3E000022,0x320001A5,0x13001A5,0x3E000022,0x320001A5,0x320001A5,0x9801A5,0x5C140000,0x40300001,0x13001A5,0x3E000022,0x320001A5,0x13001A5,0x3E000022,0x320001A5,0x320001A5,0x13001A5, -0x3E000022,0x320001A5,0x320001A5,0x320001A5,0xFE140055,0x6C01A5,0xF4580082,0x9A000019,0x6A000028,0x4E000022,0x40000005,0x3A000055,0xD2040071,0x8600003A,0x44000001,0x320001A5,0xD801A5,0xC003D,0xC003D,0xC003D,0xC003D,0xC003D,0xC003D,0xC003D,0xC003D,0xC003D,0xC003D,0x20000000,0x20000000,0x20000000,0x20000000,0x20000000, -0x20000000,0x10000000,0x10000000,0x10000000,0xA000000,0x10003D,0x10003D,0x10003D,0x10003D,0x10003D,0x10003D,0xC000014,0xC000014,0xC000014,0x800000D,0x18003D,0x18003D,0x18003D,0x8000028,0x400003D,0xA8000000,0xC003D,0xC003D,0x4A000000,0x34000000,0x28000000,0x28000000,0x1A000000,0x44000011,0x34000009,0x14000001,0xC000014, -0x14003D,}; -static const uint32_t g_etc1_to_bc7_m6_table100[] = { -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1, -0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x280000,0x280000,0x280000,0x280000,0x280000,0x280000,0x280000,0x280000,0x280000,0x280000,0x3C0000,0x3C0000,0x3C0000,0x3C0000,0x3C0000, -0x3C0000,0x740000,0x740000,0x740000,0x12000001,0x3C0000,0x3C0000,0x3C0000,0x3C0000,0x3C0000,0x3C0000,0x740000,0x740000,0x740000,0x12000001,0x740000,0x740000,0x740000,0x12000001,0x12000001,0xC280000,0x280000,0x280000,0x42C0000,0x2300000,0x2340000,0x2340000,0x2400000,0x42C0000,0x2300000,0x540000,0x740000, -0x540000,0x5C0000,0x5C0000,0x5C0000,0x5C0000,0x880000,0x880000,0x880000,0x1140000,0x1140000,0x2C000001,0x880000,0x880000,0x880000,0x1140000,0x1140000,0x2C000001,0x1140000,0x1140000,0x2C000001,0x2C000001,0x880000,0x880000,0x880000,0x1140000,0x1140000,0x2C000001,0x1140000,0x1140000,0x2C000001,0x2C000001,0x1140000, -0x1140000,0x2C000001,0x2C000001,0x2C000001,0x6680000,0x8600000,0x5C0000,0x7C0000,0x980000,0xC00000,0xE00000,0x1540000,0x740000,0x880000,0xC00000,0x2C000001,0xC00000,0x940001,0x2DC0000,0x1C40000,0x4A000000,0x2DC0000,0x1C40000,0x4A000000,0x1C40000,0x4A000000,0x4A000000,0x2DC0000,0x1C40000,0x4A000000,0x1C40000,0x4A000000, -0x4A000000,0x1C40000,0x4A000000,0x4A000000,0x4A000000,0x2DC0000,0x1C40000,0x4A000000,0x1C40000,0x4A000000,0x4A000000,0x1C40000,0x4A000000,0x4A000000,0x4A000000,0x1C40000,0x4A000000,0x4A000000,0x4A000000,0x4A000000,0xBC0000,0xA00000,0xA00000,0xFC0000,0x16C0000,0x1DFC0000,0x4A000000,0x4A000000,0xCC0000,0x1180000,0x3FF00000,0x4A000000, -0x13C0000,0x480C65,0xB62C0428,0x642C0428,0x4A2C0428,0xA014026D,0x6A1400D8,0x4C1C0165,0x5414026D,0x461000F0,0x3C14026D,0x8E0005EA,0x6A000163,0x4E080192,0x580001F6,0x4600001D,0x3C0001A5,0x440005ED,0x3E000284,0x38000301,0x2E0005EA,0x680C63,0x5E000594,0x48000438,0x4C0004BF,0x40000222,0x3A000313,0x400007BE,0x3A00041D,0x34000436,0x2E0006CB,0xD00C63, -0x32000818,0x2C00076D,0x2600094E,0x22000C63,0xFE140162,0xF43807A1,0xF840089D,0xB400001E,0x76000024,0x5A000018,0x4A000001,0x4200007A,0xF2000212,0x900000D7,0x460001D4,0x34000436,0x940C63,0x5C05ED,0x9E440154,0x5E440154,0x4A400154,0x8C2801A5,0x64280002,0x4A300029,0x4E2801A5,0x4424004C,0x3C2801A5,0x8C05EA,0x6A000163,0x4A180152,0x580001F6,0x4600001D, -0x3C0001A5,0x11805EA,0x3E000284,0x38000301,0x2E0005EA,0x8C05EA,0x6A000163,0x4A180152,0x580001F6,0x4600001D,0x3C0001A5,0x11805EA,0x3E000284,0x38000301,0x2E0005EA,0x11805EA,0x3E000284,0x38000301,0x2E0005EA,0x2E0005EA,0xFC1C00E5,0xFE4C0379,0xF2540384,0xB400001E,0x76000024,0x5A000018,0x4A000001,0x4200007A,0xF2000131,0x90000086,0x460001C4,0x38000301, -0xC805EA,0x2C0428,0x2C0428,0x2C0428,0x2C0428,0x761400C8,0x761400C8,0x761400C8,0x3E1400C8,0x3E1400C8,0x2C1400C9,0x64000152,0x64000152,0x64000152,0x40000005,0x40000005,0x2E04000E,0x30000152,0x30000152,0x26000055,0x20000152,0x400428,0x400428,0x400428,0x3400018E,0x3400018E,0x2A0000F1,0x2800022D,0x2800022D,0x240000FA,0x1E0001BE,0x800428, -0x800428,0x1C00028B,0x1C0002DB,0x1400042B,0xFC0C003E,0xF82001F1,0x2C0428,0xA400000D,0x6C000008,0x52000008,0x4C000000,0x38000019,0xB40000E3,0x76000072,0x3E000162,0x240000FA,0x5C0428,0x400154,0x400154,0x400154,0x400154,0x62280000,0x62280000,0x62280000,0x3A280000,0x3A280000,0x2C280001,0x600152,0x600152,0x600152,0x40000005,0x40000005, -0x2C100001,0xC40152,0xC40152,0x26000055,0x20000152,0x600152,0x600152,0x600152,0x40000005,0x40000005,0x2C100001,0xC40152,0xC40152,0x26000055,0x20000152,0xC40152,0xC40152,0x26000055,0x20000152,0x20000152,0xFE100012,0xF2340048,0x400154,0xA400000D,0x6C000008,0x52000008,0x4C000000,0x38000019,0xC2000055,0x7C000032,0x8C0152,0x26000055, -0x8C0152,0x7801A5,0x845C0000,0x585C0000,0x4A5C0000,0xB401A5,0x66240000,0x4A400000,0x16801A5,0x4800000D,0x3C0001A5,0xB401A5,0x66240000,0x4A400000,0x16801A5,0x4800000D,0x3C0001A5,0x16801A5,0x4800000D,0x3C0001A5,0x3C0001A5,0xB401A5,0x66240000,0x4A400000,0x16801A5,0x4800000D,0x3C0001A5,0x16801A5,0x4800000D,0x3C0001A5,0x3C0001A5,0x16801A5, -0x4800000D,0x3C0001A5,0x3C0001A5,0x3C0001A5,0xFE280062,0x8001A5,0xFE6C0080,0xB4000005,0x78000012,0x5A000008,0x4A080000,0x46000034,0xF6080055,0x98000019,0x4E100000,0x3C0001A5,0xFC01A5,0x1400C8,0x1400C8,0x1400C8,0x1400C8,0x1400C8,0x1400C8,0x1400C8,0x1400C8,0x1400C8,0x1400C8,0x3C000000,0x3C000000,0x3C000000,0x3C000000,0x3C000000, -0x3C000000,0x1C000001,0x1C000001,0x1C000001,0x12000001,0x1C00C8,0x1C00C8,0x1C00C8,0x1C00C8,0x1C00C8,0x1C00C8,0x18000049,0x18000049,0x18000049,0x12000025,0x3800C8,0x3800C8,0x3800C8,0xE00007D,0x80000CA,0xFA040008,0x1400C8,0x1400C8,0x8A000000,0x60000000,0x4A000000,0x4A000000,0x30000000,0x7600003A,0x5600001D,0x24000004,0x18000049, -0x2800C8,}; -static const uint32_t g_etc1_to_bc7_m6_table101[] = { -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1, -0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x380000,0x380000,0x380000,0x380000,0x380000,0x380000,0x380000,0x380000,0x380000,0x380000,0x2500000,0x2500000,0x2500000,0x2500000,0x2500000, -0x2500000,0xA40000,0xA40000,0xA40000,0x1A000001,0x2500000,0x2500000,0x2500000,0x2500000,0x2500000,0x2500000,0xA40000,0xA40000,0xA40000,0x1A000001,0xA40000,0xA40000,0xA40000,0x1A000001,0x1A000001,0x3C0000,0x380000,0x380000,0x400000,0x2440000,0x4C0000,0x4C0000,0x5C0000,0x400000,0x2440000,0x740000,0xA40000, -0x740000,0x6C0000,0x6C0000,0x6C0000,0x6C0000,0xA00000,0xA00000,0xA00000,0x1440000,0x1440000,0x34000001,0xA00000,0xA00000,0xA00000,0x1440000,0x1440000,0x34000001,0x1440000,0x1440000,0x34000001,0x34000001,0xA00000,0xA00000,0xA00000,0x1440000,0x1440000,0x34000001,0x1440000,0x1440000,0x34000001,0x34000001,0x1440000, -0x1440000,0x34000001,0x34000001,0x34000001,0x27C0000,0x740000,0x6C0000,0x2900000,0xB40000,0xE40000,0x1080000,0x1900000,0x880000,0xA00000,0xE40000,0x34000001,0xE40000,0xA40001,0x2F40000,0x1F40000,0x52000000,0x2F40000,0x1F40000,0x52000000,0x1F40000,0x52000000,0x52000000,0x2F40000,0x1F40000,0x52000000,0x1F40000,0x52000000, -0x52000000,0x1F40000,0x52000000,0x52000000,0x52000000,0x2F40000,0x1F40000,0x52000000,0x1F40000,0x52000000,0x52000000,0x1F40000,0x52000000,0x52000000,0x52000000,0x1F40000,0x52000000,0x52000000,0x52000000,0x52000000,0xD00000,0xB00000,0xB00000,0x3140000,0x1940000,0x27FC0000,0x52000000,0x52000000,0xE00000,0x1380000,0x49C40000,0x52000000, -0x1600000,0x540EC9,0xC23805B4,0x6C3805B5,0x523805B4,0xB21C032D,0x762001A4,0x56240261,0x5E1C032D,0x501801A4,0x441C032D,0xA60005EA,0x7C000153,0x581001FE,0x620001B9,0x50000005,0x440401B9,0x500005ED,0x4A000234,0x3E0002A5,0x360005EA,0x780EC7,0x680006C8,0x520005B3,0x5800057F,0x4C0002A2,0x400003A7,0x4C000876,0x46000455,0x3C00044E,0x34000717,0xF40EC7, -0x380009AC,0x320008B1,0x30000A97,0x28000EC7,0xFE20025D,0xFA440995,0xFE4C0AC9,0xCC000001,0x8A000004,0x66000003,0x5408001C,0x4E000030,0xFE000225,0xA60000A2,0x54000194,0x3C00044E,0xAC0EC7,0x6C05ED,0xA6540154,0x66540154,0x52500154,0x943801A5,0x6C380002,0x52400029,0x563801A5,0x4C34004C,0x443801A5,0xA405EA,0x78040153,0x52280152,0x620001B9,0x50000005, -0x441001A5,0x14C05EA,0x4A000234,0x3E0002A5,0x360005EA,0xA405EA,0x78040153,0x52280152,0x620001B9,0x50000005,0x441001A5,0x14C05EA,0x4A000234,0x3E0002A5,0x360005EA,0x14C05EA,0x4A000234,0x3E0002A5,0x360005EA,0x360005EA,0xFC3000F8,0xF65C039D,0xFA640384,0xCC000001,0x8A000004,0x66000003,0x52100001,0x4E000030,0xFE08010A,0xA8000035,0x5400017B,0x3E0002A5, -0xE805EA,0x3805B4,0x3805B4,0x3805B4,0x3805B4,0x861C0188,0x861C0188,0x861C0188,0x481C0188,0x481C0188,0x341C0189,0x7C000152,0x7C000152,0x7C000152,0x50000001,0x50000001,0x36080042,0x3C000152,0x3C000152,0x3200002D,0x28000152,0x5005B3,0x5005B3,0x5005B3,0x4000024E,0x4000024E,0x3400019B,0x340002A5,0x340002A5,0x2E000122,0x280001FB,0xA005B3, -0xA005B3,0x26000389,0x200003B6,0x1A0005B3,0xF81400D1,0xFE2C0329,0x3805B4,0xC6000001,0x84000001,0x64000001,0x5A040009,0x48000004,0xE4000105,0x9600006A,0x4C00016B,0x2E000122,0x7005B3,0x500154,0x500154,0x500154,0x500154,0x6A380000,0x6A380000,0x6A380000,0x42380000,0x42380000,0x34380001,0x780152,0x780152,0x780152,0x4C080001,0x4C080001, -0x34200001,0xF40152,0xF40152,0x3200002D,0x28000152,0x780152,0x780152,0x780152,0x4C080001,0x4C080001,0x34200001,0xF40152,0xF40152,0x3200002D,0x28000152,0xF40152,0xF40152,0x3200002D,0x28000152,0x28000152,0xFE200019,0xFA440048,0x500154,0xC4040001,0x80040000,0x62040000,0x54100000,0x48000004,0xF4000034,0x9A000012,0xAC0152,0x3200002D, -0xAC0152,0x8801A5,0x8C6C0000,0x606C0000,0x526C0000,0xC801A5,0x6E340000,0x52500000,0x19801A5,0x50000004,0x440001A5,0xC801A5,0x6E340000,0x52500000,0x19801A5,0x50000004,0x440001A5,0x19801A5,0x50000004,0x440001A5,0x440001A5,0xC801A5,0x6E340000,0x52500000,0x19801A5,0x50000004,0x440001A5,0x19801A5,0x50000004,0x440001A5,0x440001A5,0x19801A5, -0x50000004,0x440001A5,0x440001A5,0x440001A5,0xF6400071,0x9001A5,0xF67C0091,0xCC000000,0x8A000004,0x66000002,0x52180000,0x5000001D,0xFE180055,0xAE00000A,0x56200000,0x440001A5,0x12001A5,0x1C0188,0x1C0188,0x1C0188,0x1C0188,0x1C0188,0x1C0188,0x1C0188,0x1C0188,0x1C0188,0x1C0188,0x54000000,0x54000000,0x54000000,0x54000000,0x54000000, -0x54000000,0x28000000,0x28000000,0x28000000,0x1A000001,0x280188,0x280188,0x280188,0x280188,0x280188,0x280188,0x22000089,0x22000089,0x22000089,0x18000049,0x500188,0x500188,0x500188,0x100000F2,0xC00018A,0xFE0C0048,0x1C0188,0x1C0188,0xC4000000,0x88000000,0x68000000,0x68000000,0x44000000,0xA000007D,0x74000041,0x34000009,0x22000089, -0x380188,}; -static const uint32_t g_etc1_to_bc7_m6_table102[] = { -0xC0001,0xC0001,0xC0001,0xC0001,0xC0001,0xC0001,0xC0001,0xC0001,0xC0001,0xC0001,0xC0001,0xC0001,0xC0001,0xC0001,0xC0001,0xC0001,0xC0001,0xC0001,0xC0001,0xC0001,0x140000,0x140000,0x140000,0x140000,0x140000,0x140000,0x140000,0x140000,0x140000,0x140000,0x240000, -0x240000,0x240000,0x240000,0x6000000,0xC0001,0xC0001,0xC0001,0xC0001,0xC0001,0xC0001,0xC0001,0xC0001,0xE0C0000,0xE0C0000,0xE0C0000,0x140000,0x1C0000,0x480000,0x480000,0x480000,0x480000,0x480000,0x480000,0x480000,0x480000,0x480000,0x480000,0x2680000,0x2680000,0x2680000,0x2680000,0x2680000, -0x2680000,0xD80000,0xD80000,0xD80000,0x22000001,0x2680000,0x2680000,0x2680000,0x2680000,0x2680000,0x2680000,0xD80000,0xD80000,0xD80000,0x22000001,0xD80000,0xD80000,0xD80000,0x22000001,0x22000001,0x4C0000,0x480000,0x480000,0x540000,0x2580000,0x600000,0x600000,0x780000,0x540000,0x2580000,0x980000,0xD80000, -0x980000,0x7C0000,0x7C0000,0x7C0000,0x7C0000,0xB80000,0xB80000,0xB80000,0x1740000,0x1740000,0x3C000001,0xB80000,0xB80000,0xB80000,0x1740000,0x1740000,0x3C000001,0x1740000,0x1740000,0x3C000001,0x3C000001,0xB80000,0xB80000,0xB80000,0x1740000,0x1740000,0x3C000001,0x1740000,0x1740000,0x3C000001,0x3C000001,0x1740000, -0x1740000,0x3C000001,0x3C000001,0x3C000001,0x900000,0x840000,0x7C0000,0xA80000,0xD00000,0x1080000,0x12C0000,0x1CC0000,0x9C0000,0xB80000,0x1080000,0x3C000001,0x1080000,0xB40001,0x30C0000,0xBFC0000,0x5A000000,0x30C0000,0xBFC0000,0x5A000000,0xBFC0000,0x5A000000,0x5A000000,0x30C0000,0xBFC0000,0x5A000000,0xBFC0000,0x5A000000, -0x5A000000,0xBFC0000,0x5A000000,0x5A000000,0x5A000000,0x30C0000,0xBFC0000,0x5A000000,0xBFC0000,0x5A000000,0x5A000000,0xBFC0000,0x5A000000,0x5A000000,0x5A000000,0xBFC0000,0x5A000000,0x5A000000,0x5A000000,0x5A000000,0xE40000,0x8C00000,0x8C00000,0x1300000,0x1BC0000,0x31FC0000,0x5A000000,0x5A000000,0xF80000,0x1540000,0x51D40000,0x5A000000, -0x1800000,0x600F1E,0xCA4805ED,0x764405ED,0x5A4405ED,0xBA2C034A,0x7E3001C5,0x5E340286,0x662C034A,0x582801BD,0x4C2C034A,0xAE1005EB,0x84100154,0x6020020F,0x6C0801B6,0x58100006,0x4C1401BE,0x5A0C05EB,0x5204020D,0x4604028A,0x3E0C05EB,0x900F1A,0x7A000675,0x5A1005EA,0x680004BE,0x5800021D,0x4C000362,0x580007E9,0x4E00036B,0x46000371,0x3C00069F,0x1240F1A, -0x44000939,0x3E0007FE,0x38000A17,0x30000F1A,0xFE3402CD,0xFE4C0A1A,0xF65C0B55,0xD4100002,0x920C0004,0x6E100004,0x5C180025,0x560C0023,0xFE100262,0xBC000021,0x5E000159,0x46000371,0xD00F1A,0x7C05ED,0xAE640154,0x6E640154,0x5A600154,0x9C4801A5,0x74480002,0x5A500029,0x5E4801A5,0x5444004C,0x4C4801A5,0xBC05EA,0x80140153,0x5A380152,0x700001A6,0x58100005, -0x4C2001A5,0x17C05EA,0x500001E8,0x48000266,0x3E0005EA,0xBC05EA,0x80140153,0x5A380152,0x700001A6,0x58100005,0x4C2001A5,0x17C05EA,0x500001E8,0x48000266,0x3E0005EA,0x17C05EA,0x500001E8,0x48000266,0x3E0005EA,0x3E0005EA,0xFE3C0121,0xFE6C039D,0xF27403AD,0xD4100001,0x920C0003,0x6E100003,0x5A200001,0x5800000D,0xFE180129,0xBC000008,0x5E000158,0x48000266, -0x10C05EA,0x4405ED,0x4405ED,0x4405ED,0x4405ED,0x8E2C01A5,0x8E2C01A5,0x8E2C01A5,0x502C01A5,0x502C01A5,0x3C2C01A6,0x84100153,0x84100153,0x84100153,0x58100002,0x58100002,0x3E18004B,0x44100153,0x44100153,0x380C002A,0x300C0153,0x6805EA,0x6805EA,0x6805EA,0x52000205,0x52000205,0x3C0401A6,0x40000248,0x40000248,0x3A0000A9,0x2E00019A,0xD005EA, -0xD005EA,0x2C000356,0x2A00037E,0x220005EA,0xFE2000FA,0xF63C0379,0x4405ED,0xD80C0001,0x8C100002,0x6C100002,0x6410000B,0x500C0002,0xFE0000B5,0xB6000015,0x5A040153,0x3A0000A9,0x9405EA,0x600154,0x600154,0x600154,0x600154,0x72480000,0x72480000,0x72480000,0x4A480000,0x4A480000,0x3C480001,0x900152,0x900152,0x900152,0x54180001,0x54180001, -0x3C300001,0x1240152,0x1240152,0x3A000019,0x30000152,0x900152,0x900152,0x900152,0x54180001,0x54180001,0x3C300001,0x1240152,0x1240152,0x3A000019,0x30000152,0x1240152,0x1240152,0x3A000019,0x30000152,0x30000152,0xFA340020,0xF2540055,0x600154,0xD80C0000,0x88140000,0x6A140000,0x5C200000,0x52080000,0xFE0C0032,0xBC000004,0xD00152,0x3A000019, -0xD00152,0x9801A5,0x947C0000,0x687C0000,0x5A7C0000,0xE001A5,0x76440000,0x5A600000,0x1CC01A5,0x5A040000,0x4C0001A5,0xE001A5,0x76440000,0x5A600000,0x1CC01A5,0x5A040000,0x4C0001A5,0x1CC01A5,0x5A040000,0x4C0001A5,0x4C0001A5,0xE001A5,0x76440000,0x5A600000,0x1CC01A5,0x5A040000,0x4C0001A5,0x1CC01A5,0x5A040000,0x4C0001A5,0x4C0001A5,0x1CC01A5, -0x5A040000,0x4C0001A5,0x4C0001A5,0x4C0001A5,0xFE500071,0xA401A5,0xFE8C0091,0xD4100000,0x98000000,0x70080000,0x5A280000,0x5800000D,0xFE2C0062,0xBC040002,0x5E300000,0x4C0001A5,0x14001A5,0x2C01A5,0x2C01A5,0x2C01A5,0x2C01A5,0x2C01A5,0x2C01A5,0x2C01A5,0x2C01A5,0x2C01A5,0x2C01A5,0x5C100001,0x5C100001,0x5C100001,0x5C100001,0x5C100001, -0x5C100001,0x30100001,0x30100001,0x30100001,0x220C0002,0x4001A5,0x4001A5,0x4001A5,0x4001A5,0x4001A5,0x4001A5,0x2E000050,0x2E000050,0x2E000050,0x22000011,0x7C01A5,0x7C01A5,0x7C01A5,0x1C0000C1,0x140001A5,0xF61C0062,0x2C01A5,0x2C01A5,0xCC100001,0x90100001,0x70100001,0x70100001,0x4C100001,0xE0000041,0xA400000D,0x40080001,0x2E000050, -0x5801A5,}; -static const uint32_t g_etc1_to_bc7_m6_table103[] = { -0x1C0001,0x1C0001,0x1C0001,0x1C0001,0x1C0001,0x1C0001,0x1C0001,0x1C0001,0x1C0001,0x1C0001,0x1C0001,0x1C0001,0x1C0001,0x1C0001,0x1C0001,0x1C0001,0x1C0001,0x1C0001,0x1C0001,0x1C0001,0x2C0000,0x2C0000,0x2C0000,0x2C0000,0x2C0000,0x2C0000,0x2C0000,0x2C0000,0x2C0000,0x2C0000,0x580000, -0x580000,0x580000,0x580000,0xE000000,0x1C0001,0x1C0001,0x1C0001,0x1C0001,0x1C0001,0x1C0001,0x1C0001,0x1C0001,0x200000,0x200000,0x200000,0x2C0000,0x3C0000,0x580000,0x580000,0x580000,0x580000,0x580000,0x580000,0x580000,0x580000,0x580000,0x580000,0x2800000,0x2800000,0x2800000,0x2800000,0x2800000, -0x2800000,0x1080000,0x1080000,0x1080000,0x2A000001,0x2800000,0x2800000,0x2800000,0x2800000,0x2800000,0x2800000,0x1080000,0x1080000,0x1080000,0x2A000001,0x1080000,0x1080000,0x1080000,0x2A000001,0x2A000001,0x65C0000,0x580000,0x580000,0x4640000,0x26C0000,0x780000,0x780000,0x940000,0x4640000,0x26C0000,0xB80000,0x1080000, -0xB80000,0x8C0000,0x8C0000,0x8C0000,0x8C0000,0xD00000,0xD00000,0xD00000,0x1A40000,0x1A40000,0x44000001,0xD00000,0xD00000,0xD00000,0x1A40000,0x1A40000,0x44000001,0x1A40000,0x1A40000,0x44000001,0x44000001,0xD00000,0xD00000,0xD00000,0x1A40000,0x1A40000,0x44000001,0x1A40000,0x1A40000,0x44000001,0x44000001,0x1A40000, -0x1A40000,0x44000001,0x44000001,0x44000001,0x6A00000,0x2940000,0x8C0000,0x2BC0000,0xEC0000,0x1280000,0x1540000,0x3FC0000,0xB00000,0xD00000,0x1280000,0x44000001,0x1280000,0xC40001,0x3240000,0x17FC0000,0x62000000,0x3240000,0x17FC0000,0x62000000,0x17FC0000,0x62000000,0x62000000,0x3240000,0x17FC0000,0x62000000,0x17FC0000,0x62000000, -0x62000000,0x17FC0000,0x62000000,0x62000000,0x62000000,0x3240000,0x17FC0000,0x62000000,0x17FC0000,0x62000000,0x62000000,0x17FC0000,0x62000000,0x62000000,0x62000000,0x17FC0000,0x62000000,0x62000000,0x62000000,0x62000000,0xF80000,0xD40000,0xD40000,0x14C0000,0x1E40000,0x3BFC0000,0x62000000,0x62000000,0x10C0000,0x1740000,0x59E40000,0x62000000, -0x1A40000,0x700F1E,0xD25805ED,0x7E5405ED,0x625405ED,0xC23C034A,0x864001C5,0x66440286,0x6E3C034A,0x603801BD,0x543C034A,0xB62005EB,0x8C200154,0x6830020F,0x741801B6,0x60200006,0x542401BE,0x621C05EB,0x5A14020D,0x4E14028A,0x461C05EB,0xA80F1A,0x8C000615,0x622005EA,0x74000416,0x620001BA,0x5404034A,0x6200073B,0x5800028C,0x4E0002AB,0x4600062A,0x1580F1A, -0x50000899,0x4A000746,0x3E000983,0x38000F1A,0xFE440322,0xFA640A2E,0xFE6C0B55,0xDC200002,0x9A1C0004,0x76200004,0x64280025,0x5E1C0023,0xFE1C02BE,0xD0040000,0x66100159,0x4E0002AB,0xF00F1A,0x8C05ED,0xB6740154,0x76740154,0x62700154,0xA45801A5,0x7C580002,0x62600029,0x665801A5,0x5C54004C,0x545801A5,0x2D005EA,0x88240153,0x62480152,0x7A0C01A5,0x60200005, -0x543001A5,0x1AC05EA,0x5C0001A8,0x50000221,0x460005EA,0x2D005EA,0x88240153,0x62480152,0x7A0C01A5,0x60200005,0x543001A5,0x1AC05EA,0x5C0001A8,0x50000221,0x460005EA,0x1AC05EA,0x5C0001A8,0x50000221,0x460005EA,0x460005EA,0xFE500132,0xF67C03C5,0xFA8403AD,0xDC200001,0x9A1C0003,0x76200003,0x62300001,0x6008000C,0xFC300155,0xD0040000,0x68040152,0x50000221, -0x12C05EA,0x5405ED,0x5405ED,0x5405ED,0x5405ED,0x963C01A5,0x963C01A5,0x963C01A5,0x583C01A5,0x583C01A5,0x443C01A6,0x8C200153,0x8C200153,0x8C200153,0x60200002,0x60200002,0x4628004B,0x4C200153,0x4C200153,0x401C002A,0x381C0153,0x8005EA,0x8005EA,0x8005EA,0x620001BA,0x620001BA,0x441401A6,0x520001E4,0x520001E4,0x4200003B,0x38000162,0x10005EA, -0x10005EA,0x380002DE,0x32000303,0x2A0005EA,0xFC380111,0xFE4C0379,0x5405ED,0xE01C0001,0x94200002,0x74200002,0x6C20000B,0x581C0002,0xFE1400C8,0xD0040000,0x62140153,0x4200003B,0xB405EA,0x700154,0x700154,0x700154,0x700154,0x7A580000,0x7A580000,0x7A580000,0x52580000,0x52580000,0x44580001,0xA80152,0xA80152,0xA80152,0x5C280001,0x5C280001, -0x44400001,0x1580152,0x1580152,0x44000005,0x38000152,0xA80152,0xA80152,0xA80152,0x5C280001,0x5C280001,0x44400001,0x1580152,0x1580152,0x44000005,0x38000152,0x1580152,0x1580152,0x44000005,0x38000152,0x38000152,0xF6480029,0xFA640055,0x700154,0xE01C0000,0x90240000,0x72240000,0x64300000,0x5A180000,0xF624003D,0xD0040000,0xF00152,0x44000005, -0xF00152,0xA801A5,0x9C8C0000,0x708C0000,0x628C0000,0xF801A5,0x7E540000,0x62700000,0x1FC01A5,0x62140000,0x540001A5,0xF801A5,0x7E540000,0x62700000,0x1FC01A5,0x62140000,0x540001A5,0x1FC01A5,0x62140000,0x540001A5,0x540001A5,0xF801A5,0x7E540000,0x62700000,0x1FC01A5,0x62140000,0x540001A5,0x1FC01A5,0x62140000,0x540001A5,0x540001A5,0x1FC01A5, -0x62140000,0x540001A5,0x540001A5,0x540001A5,0xFA640080,0xB401A5,0xF69C00A4,0xDC200000,0xA0100000,0x78180000,0x62380000,0x60000005,0xF4480071,0xD0040000,0x66400000,0x540001A5,0x16401A5,0x3C01A5,0x3C01A5,0x3C01A5,0x3C01A5,0x3C01A5,0x3C01A5,0x3C01A5,0x3C01A5,0x3C01A5,0x3C01A5,0x64200001,0x64200001,0x64200001,0x64200001,0x64200001, -0x64200001,0x38200001,0x38200001,0x38200001,0x2A1C0002,0x5401A5,0x5401A5,0x5401A5,0x5401A5,0x5401A5,0x5401A5,0x3A000020,0x3A000020,0x3A000020,0x2A040001,0xAC01A5,0xAC01A5,0xAC01A5,0x26000092,0x1C0001A5,0xFE2C0062,0x3C01A5,0x3C01A5,0xD4200001,0x98200001,0x78200001,0x78200001,0x54200001,0xFA080029,0xCE040000,0x48180001,0x3A000020, -0x7801A5,}; -static const uint32_t g_etc1_to_bc7_m6_table104[] = { -0x300000,0x300000,0x300000,0x300000,0x300000,0x300000,0x300000,0x300000,0x300000,0x300000,0x300000,0x300000,0x300000,0x300000,0x300000,0x300000,0x300000,0x300000,0x300000,0x300000,0x2440000,0x2440000,0x2440000,0x2440000,0x2440000,0x2440000,0x2440000,0x2440000,0x2440000,0x2440000,0x8C0000, -0x8C0000,0x8C0000,0x8C0000,0x16000001,0x300000,0x300000,0x300000,0x300000,0x300000,0x300000,0x300000,0x300000,0x340000,0x340000,0x340000,0x2440000,0x640000,0x680001,0x680001,0x680001,0x680001,0x680001,0x680001,0x680001,0x680001,0x680001,0x680001,0x9C0000,0x9C0000,0x9C0000,0x9C0000,0x9C0000, -0x9C0000,0x13C0000,0x13C0000,0x13C0000,0x34000000,0x9C0000,0x9C0000,0x9C0000,0x9C0000,0x9C0000,0x9C0000,0x13C0000,0x13C0000,0x13C0000,0x34000000,0x13C0000,0x13C0000,0x13C0000,0x34000000,0x34000000,0x700000,0x680001,0x680001,0x7C0000,0x840000,0x900000,0x900000,0xB00000,0x7C0000,0x840000,0xE00000,0x13C0000, -0xE00000,0x9C0001,0x9C0001,0x9C0001,0x9C0001,0x2E80000,0x2E80000,0x2E80000,0x1DC0000,0x1DC0000,0x4E000000,0x2E80000,0x2E80000,0x2E80000,0x1DC0000,0x1DC0000,0x4E000000,0x1DC0000,0x1DC0000,0x4E000000,0x4E000000,0x2E80000,0x2E80000,0x2E80000,0x1DC0000,0x1DC0000,0x4E000000,0x1DC0000,0x1DC0000,0x4E000000,0x4E000000,0x1DC0000, -0x1DC0000,0x4E000000,0x4E000000,0x4E000000,0xB80000,0xA80000,0x9C0001,0x2D40000,0x1080000,0x1500000,0x1800000,0x11F40000,0x2C40000,0x2E80000,0x1500000,0x4E000000,0x1500000,0xD80000,0x1400000,0x25F80000,0x6A000001,0x1400000,0x25F80000,0x6A000001,0x25F80000,0x6A000001,0x6A000001,0x1400000,0x25F80000,0x6A000001,0x25F80000,0x6A000001, -0x6A000001,0x25F80000,0x6A000001,0x6A000001,0x6A000001,0x1400000,0x25F80000,0x6A000001,0x25F80000,0x6A000001,0x6A000001,0x25F80000,0x6A000001,0x6A000001,0x6A000001,0x25F80000,0x6A000001,0x6A000001,0x6A000001,0x6A000001,0x50C0000,0xAE40000,0xAE40000,0x16C0000,0x9F80000,0x47F80000,0x6A000001,0x6A000001,0x3240000,0x1940000,0x63D80000,0x6A000001, -0x1CC0000,0x840F1A,0xDE6805EA,0x866805EA,0x6A6805EB,0xCC4C034A,0x8E5001C3,0x6E54028A,0x784C034A,0x684C01BE,0x5C4C034A,0xC23005EA,0x96300153,0x7040020D,0x7E2C01B2,0x6A300006,0x5E3401BD,0x6A3005EA,0x6224020F,0x58280286,0x4E3005ED,0xC40F1A,0x9E0005EB,0x6C3005EB,0x86000392,0x6C0801B6,0x5C18034A,0x740006B1,0x640001DC,0x5A000215,0x4E0005F1,0x18C0F1A, -0x5C0007F7,0x50000662,0x4A0008D9,0x40000F1E,0xFE580372,0xF4780A82,0xF67C0B9A,0xE6300000,0xA2300003,0x80300002,0x6C380023,0x662C0025,0xFE3402F6,0xD6180002,0x7024015B,0x5A000215,0x1180F1A,0xA005EA,0xC0840152,0x80840152,0x6A840153,0xAC6C01A6,0x86680001,0x6C74002A,0x706801A6,0x6668004B,0x5C6801A6,0xEC05EA,0x90380153,0x6A5C0153,0x841C01A5,0x6A340002, -0x5C4401A5,0x1E405EA,0x6600017D,0x5A0001F1,0x4E0005ED,0xEC05EA,0x90380153,0x6A5C0153,0x841C01A5,0x6A340002,0x5C4401A5,0x1E405EA,0x6600017D,0x5A0001F1,0x4E0005ED,0x1E405EA,0x6600017D,0x5A0001F1,0x4E0005ED,0x4E0005ED,0xFE640164,0xFE8C03CE,0xF49803D3,0xE6300000,0xA2300003,0x80300002,0x6C440002,0x6A1C000B,0xFE440171,0xD6180001,0x72140152,0x5A0001F1, -0x15405EA,0x6805EA,0x6805EA,0x6805EA,0x6805EA,0xA24C01A5,0xA24C01A5,0xA24C01A5,0x624C01A5,0x624C01A5,0x4E4C01A5,0x96300152,0x96300152,0x96300152,0x68300005,0x68300005,0x503C004C,0x56300152,0x56300152,0x4A300029,0x40300154,0x29805EA,0x29805EA,0x29805EA,0x740001A5,0x740001A5,0x4E2401A5,0x5E00018B,0x5E00018B,0x4E000004,0x40080154,0x13805EA, -0x13805EA,0x44000279,0x3C0002A5,0x320005ED,0xFC480129,0xF860039D,0x6805EA,0xE6300000,0xA0300002,0x80300002,0x7634000C,0x62300001,0xFE2800F2,0xD6180001,0x6C240152,0x4E000004,0xDC05EA,0x840152,0x840152,0x840152,0x840152,0x806C0001,0x806C0001,0x806C0001,0x5A6C0001,0x5A6C0001,0x4E680001,0xC40152,0xC40152,0xC40152,0x643C0001,0x643C0001, -0x4E500000,0x18C0152,0x18C0152,0x4E000000,0x40000154,0xC40152,0xC40152,0xC40152,0x643C0001,0x643C0001,0x4E500000,0x18C0152,0x18C0152,0x4E000000,0x40000154,0x18C0152,0x18C0152,0x4E000000,0x40000154,0x40000154,0xFE580029,0xF4780062,0x840152,0xE6300000,0x98380000,0x7A380001,0x6E400000,0x622C0000,0xFE34003D,0xD6180000,0x1180152,0x4E000000, -0x1180152,0xBC01A5,0xA4A00001,0x78A00001,0x6A9C0002,0x11401A5,0x86680000,0x6A840001,0xFF801A5,0x6A2C0001,0x5C0001A5,0x11401A5,0x86680000,0x6A840001,0xFF801A5,0x6A2C0001,0x5C0001A5,0xFF801A5,0x6A2C0001,0x5C0001A5,0x5C0001A5,0x11401A5,0x86680000,0x6A840001,0xFF801A5,0x6A2C0001,0x5C0001A5,0xFF801A5,0x6A2C0001,0x5C0001A5,0x5C0001A5,0xFF801A5, -0x6A2C0001,0x5C0001A5,0x5C0001A5,0x5C0001A5,0xFE780080,0xC801A5,0xFEAC00AA,0xE2340000,0xA8240000,0x82280000,0x6A4C0001,0x6A000001,0xFC580071,0xD8180000,0x70500000,0x5C0001A5,0x18C01A5,0x4C01A5,0x4C01A5,0x4C01A5,0x4C01A5,0x4C01A5,0x4C01A5,0x4C01A5,0x4C01A5,0x4C01A5,0x4C01A5,0x6E300000,0x6E300000,0x6E300000,0x6E300000,0x6E300000, -0x6E300000,0x42300000,0x42300000,0x42300000,0x34300000,0x7001A5,0x7001A5,0x7001A5,0x7001A5,0x7001A5,0x7001A5,0x4C000002,0x4C000002,0x4C000002,0x34140000,0xE401A5,0xE401A5,0xE401A5,0x30000061,0x260001A5,0xF8400071,0x4C01A5,0x4C01A5,0xE2300000,0xA4300000,0x84300000,0x84300000,0x5E300000,0xFC1C0032,0xCE180001,0x52280000,0x4C000002, -0xA001A5,}; -static const uint32_t g_etc1_to_bc7_m6_table105[] = { -0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x25C0000,0x25C0000,0x25C0000,0x25C0000,0x25C0000,0x25C0000,0x25C0000,0x25C0000,0x25C0000,0x25C0000,0xBC0000, -0xBC0000,0xBC0000,0xBC0000,0x1E000001,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x440000,0x440000,0x440000,0x25C0000,0x880000,0x780001,0x780001,0x780001,0x780001,0x780001,0x780001,0x780001,0x780001,0x780001,0x780001,0xB40000,0xB40000,0xB40000,0xB40000,0xB40000, -0xB40000,0x1700000,0x1700000,0x1700000,0x3C000000,0xB40000,0xB40000,0xB40000,0xB40000,0xB40000,0xB40000,0x1700000,0x1700000,0x1700000,0x3C000000,0x1700000,0x1700000,0x1700000,0x3C000000,0x3C000000,0x8800000,0x780001,0x780001,0x28C0000,0x980000,0x2A40000,0x2A40000,0xCC0000,0x28C0000,0x980000,0x1000000,0x1700000, -0x1000000,0xAC0001,0xAC0001,0xAC0001,0xAC0001,0x3000000,0x3000000,0x3000000,0x5FC0000,0x5FC0000,0x56000000,0x3000000,0x3000000,0x3000000,0x5FC0000,0x5FC0000,0x56000000,0x5FC0000,0x5FC0000,0x56000000,0x56000000,0x3000000,0x3000000,0x3000000,0x5FC0000,0x5FC0000,0x56000000,0x5FC0000,0x5FC0000,0x56000000,0x56000000,0x5FC0000, -0x5FC0000,0x56000000,0x56000000,0x56000000,0x4C80000,0x4B80000,0xAC0001,0xEC0000,0x1240000,0x1700000,0x1A80000,0x1BF80000,0x2D80000,0x3000000,0x1700000,0x56000000,0x1700000,0xE80000,0x1580000,0x31F80000,0x72000001,0x1580000,0x31F80000,0x72000001,0x31F80000,0x72000001,0x72000001,0x1580000,0x31F80000,0x72000001,0x31F80000,0x72000001, -0x72000001,0x31F80000,0x72000001,0x72000001,0x72000001,0x1580000,0x31F80000,0x72000001,0x31F80000,0x72000001,0x72000001,0x31F80000,0x72000001,0x72000001,0x72000001,0x31F80000,0x72000001,0x72000001,0x72000001,0x72000001,0x5200000,0xF80000,0xF80000,0x1840000,0x15FC0000,0x51F80000,0x72000001,0x72000001,0x13C0000,0x1B40000,0x6BE80000,0x72000001, -0x1EC0000,0x940F1A,0xE67805EA,0x8E7805EA,0x727805EB,0xD45C034A,0x966001C3,0x7664028A,0x805C034A,0x705C01BE,0x645C034A,0xCA4005EA,0x9E400153,0x7850020D,0x863C01B2,0x72400006,0x664401BD,0x724005EA,0x6A34020F,0x60380286,0x564005ED,0xDC0F1A,0xA61005EB,0x744005EB,0x9200035A,0x741801B6,0x6428034A,0x80000651,0x7000017C,0x620001D5,0x580805ED,0x1BC0F1A, -0x66000786,0x5C0005BA,0x50000861,0x48000F1E,0xFE6403C8,0xFC880A82,0xFE8C0B9A,0xEE400000,0xAA400003,0x88400002,0x74480023,0x6E3C0025,0xFE440361,0xDE280002,0x7834015B,0x620001D5,0x1380F1A,0xB005EA,0xC8940152,0x88940152,0x72940153,0xB47C01A6,0x8E780001,0x7484002A,0x787801A6,0x6E78004B,0x647801A6,0x10405EA,0x98480153,0x726C0153,0x8C2C01A5,0x72440002, -0x645401A5,0x7FC05EA,0x70000163,0x620001D5,0x560005ED,0x10405EA,0x98480153,0x726C0153,0x8C2C01A5,0x72440002,0x645401A5,0x7FC05EA,0x70000163,0x620001D5,0x560005ED,0x7FC05EA,0x70000163,0x620001D5,0x560005ED,0x560005ED,0xFE780179,0xF8A003EA,0xFCA803D3,0xEE400000,0xAA400003,0x88400002,0x74540002,0x722C000B,0xFE5C0189,0xDE280001,0x7A240152,0x620001D5, -0x17405EA,0x7805EA,0x7805EA,0x7805EA,0x7805EA,0xAA5C01A5,0xAA5C01A5,0xAA5C01A5,0x6A5C01A5,0x6A5C01A5,0x565C01A5,0x9E400152,0x9E400152,0x9E400152,0x70400005,0x70400005,0x584C004C,0x5E400152,0x5E400152,0x52400029,0x48400154,0x2B005EA,0x2B005EA,0x2B005EA,0x7C1001A5,0x7C1001A5,0x563401A5,0x6A000163,0x6A000163,0x56080002,0x48180154,0x16805EA, -0x16805EA,0x4E000239,0x44000248,0x3A0005ED,0xFE580149,0xFE6C03A5,0x7805EA,0xEE400000,0xA8400002,0x88400002,0x7E44000C,0x6A400001,0xFE3C010A,0xDE280001,0x74340152,0x56080002,0xFC05EA,0x940152,0x940152,0x940152,0x940152,0x887C0001,0x887C0001,0x887C0001,0x627C0001,0x627C0001,0x56780001,0xDC0152,0xDC0152,0xDC0152,0x6C4C0001,0x6C4C0001, -0x56600000,0x1BC0152,0x1BC0152,0x56100000,0x48000154,0xDC0152,0xDC0152,0xDC0152,0x6C4C0001,0x6C4C0001,0x56600000,0x1BC0152,0x1BC0152,0x56100000,0x48000154,0x1BC0152,0x1BC0152,0x56100000,0x48000154,0x48000154,0xFA6C0032,0xFC880062,0x940152,0xEE400000,0xA0480000,0x82480001,0x76500000,0x6A3C0000,0xFA48004A,0xDE280000,0x1380152,0x56100000, -0x1380152,0xCC01A5,0xACB00001,0x80B00001,0x72AC0002,0x12C01A5,0x8E780000,0x72940001,0x1BF801A5,0x723C0001,0x640001A5,0x12C01A5,0x8E780000,0x72940001,0x1BF801A5,0x723C0001,0x640001A5,0x1BF801A5,0x723C0001,0x640001A5,0x640001A5,0x12C01A5,0x8E780000,0x72940001,0x1BF801A5,0x723C0001,0x640001A5,0x1BF801A5,0x723C0001,0x640001A5,0x640001A5,0x1BF801A5, -0x723C0001,0x640001A5,0x640001A5,0x640001A5,0xFA8C0091,0xD801A5,0xF8C000B5,0xEA440000,0xB0340000,0x8A380000,0x725C0001,0x72100001,0xFC6C0082,0xE0280000,0x78600000,0x640001A5,0x1AC01A5,0x5C01A5,0x5C01A5,0x5C01A5,0x5C01A5,0x5C01A5,0x5C01A5,0x5C01A5,0x5C01A5,0x5C01A5,0x5C01A5,0x76400000,0x76400000,0x76400000,0x76400000,0x76400000, -0x76400000,0x4A400000,0x4A400000,0x4A400000,0x3C400000,0x8801A5,0x8801A5,0x8801A5,0x8801A5,0x8801A5,0x8801A5,0x58080000,0x58080000,0x58080000,0x3C240000,0x11401A5,0x11401A5,0x11401A5,0x38000034,0x2E0001A5,0xFE4C0075,0x5C01A5,0x5C01A5,0xEA400000,0xAC400000,0x8C400000,0x8C400000,0x66400000,0xF830003D,0xD6280001,0x5A380000,0x58080000, -0xC001A5,}; -static const uint32_t g_etc1_to_bc7_m6_table106[] = { -0x500000,0x500000,0x500000,0x500000,0x500000,0x500000,0x500000,0x500000,0x500000,0x500000,0x500000,0x500000,0x500000,0x500000,0x500000,0x500000,0x500000,0x500000,0x500000,0x500000,0x2740000,0x2740000,0x2740000,0x2740000,0x2740000,0x2740000,0x2740000,0x2740000,0x2740000,0x2740000,0xF00000, -0xF00000,0xF00000,0xF00000,0x26000001,0x500000,0x500000,0x500000,0x500000,0x500000,0x500000,0x500000,0x500000,0x2540000,0x2540000,0x2540000,0x2740000,0xA80000,0x880001,0x880001,0x880001,0x880001,0x880001,0x880001,0x880001,0x880001,0x880001,0x880001,0xCC0000,0xCC0000,0xCC0000,0xCC0000,0xCC0000, -0xCC0000,0x1A00000,0x1A00000,0x1A00000,0x44000000,0xCC0000,0xCC0000,0xCC0000,0xCC0000,0xCC0000,0xCC0000,0x1A00000,0x1A00000,0x1A00000,0x44000000,0x1A00000,0x1A00000,0x1A00000,0x44000000,0x44000000,0x940000,0x880001,0x880001,0xA00000,0xAC0000,0xBC0000,0xBC0000,0xE80000,0xA00000,0xAC0000,0x1240000,0x1A00000, -0x1240000,0xBC0001,0xBC0001,0xBC0001,0xBC0001,0x3180000,0x3180000,0x3180000,0x11FC0000,0x11FC0000,0x5E000000,0x3180000,0x3180000,0x3180000,0x11FC0000,0x11FC0000,0x5E000000,0x11FC0000,0x11FC0000,0x5E000000,0x5E000000,0x3180000,0x3180000,0x3180000,0x11FC0000,0x11FC0000,0x5E000000,0x11FC0000,0x11FC0000,0x5E000000,0x5E000000,0x11FC0000, -0x11FC0000,0x5E000000,0x5E000000,0x5E000000,0xDC0000,0xCC80000,0xBC0001,0x3000000,0x1400000,0x1940000,0x1D00000,0x25FC0000,0x2EC0000,0x3180000,0x1940000,0x5E000000,0x1940000,0xF80000,0x1700000,0x3DF80000,0x7A000001,0x1700000,0x3DF80000,0x7A000001,0x3DF80000,0x7A000001,0x7A000001,0x1700000,0x3DF80000,0x7A000001,0x3DF80000,0x7A000001, -0x7A000001,0x3DF80000,0x7A000001,0x7A000001,0x7A000001,0x1700000,0x3DF80000,0x7A000001,0x3DF80000,0x7A000001,0x7A000001,0x3DF80000,0x7A000001,0x7A000001,0x7A000001,0x3DF80000,0x7A000001,0x7A000001,0x7A000001,0x7A000001,0x5340000,0x1080000,0x1080000,0x1A00000,0x23FC0000,0x5BF80000,0x7A000001,0x7A000001,0x1500000,0x1D00000,0x73F80000,0x7A000001, -0x9FC0000,0xA40F1A,0xEE8805EA,0x968805EA,0x7A8805EB,0xDC6C034A,0x9E7001C3,0x7E74028A,0x886C034A,0x786C01BE,0x6C6C034A,0xD25005EA,0xA6500153,0x8060020D,0x8E4C01B2,0x7A500006,0x6E5401BD,0x7A5005EA,0x7244020F,0x68480286,0x5E5005ED,0xF40F1A,0xAE2005EB,0x7C5005EB,0xA004034A,0x7C2801B6,0x6C38034A,0x8C000611,0x7A000155,0x6A0801C5,0x601805ED,0x1F00F1A, -0x6C000716,0x66000542,0x5C0007E9,0x50000F1E,0xFE780419,0xF4980ADA,0xF8A00BDB,0xF6500000,0xB2500003,0x90500002,0x7C580023,0x764C0025,0xFE5C03A2,0xE6380002,0x8044015B,0x6A0801C5,0x15C0F1A,0xC005EA,0xD0A40152,0x90A40152,0x7AA40153,0xBC8C01A6,0x96880001,0x7C94002A,0x808801A6,0x7688004B,0x6C8801A6,0x11C05EA,0xA0580153,0x7A7C0153,0x943C01A5,0x7A540002, -0x6C6401A5,0x13FC05EA,0x7A000155,0x6C0001B5,0x5E0005ED,0x11C05EA,0xA0580153,0x7A7C0153,0x943C01A5,0x7A540002,0x6C6401A5,0x13FC05EA,0x7A000155,0x6C0001B5,0x5E0005ED,0x13FC05EA,0x7A000155,0x6C0001B5,0x5E0005ED,0x5E0005ED,0xFC9001A9,0xFEAC03FE,0xF4B803FE,0xF6500000,0xB2500003,0x90500002,0x7C640002,0x7A3C000B,0xFE7001C3,0xE6380001,0x82340152,0x6C0001B5, -0x19805EA,0x8805EA,0x8805EA,0x8805EA,0x8805EA,0xB26C01A5,0xB26C01A5,0xB26C01A5,0x726C01A5,0x726C01A5,0x5E6C01A5,0xA6500152,0xA6500152,0xA6500152,0x78500005,0x78500005,0x605C004C,0x66500152,0x66500152,0x5A500029,0x50500154,0xC805EA,0xC805EA,0xC805EA,0x842001A5,0x842001A5,0x5E4401A5,0x78040153,0x78040153,0x5E180002,0x50280154,0x19805EA, -0x19805EA,0x560001FD,0x4E00020D,0x420005ED,0xFE680164,0xF88003C2,0x8805EA,0xF6500000,0xB0500002,0x90500002,0x8654000C,0x72500001,0xFC4C0123,0xE6380001,0x7C440152,0x5E180002,0x12005EA,0xA40152,0xA40152,0xA40152,0xA40152,0x908C0001,0x908C0001,0x908C0001,0x6A8C0001,0x6A8C0001,0x5E880001,0xF40152,0xF40152,0xF40152,0x745C0001,0x745C0001, -0x5E700000,0x1F00152,0x1F00152,0x5E200000,0x50000154,0xF40152,0xF40152,0xF40152,0x745C0001,0x745C0001,0x5E700000,0x1F00152,0x1F00152,0x5E200000,0x50000154,0x1F00152,0x1F00152,0x5E200000,0x50000154,0x50000154,0xF680003D,0xF4980071,0xA40152,0xF6500000,0xA8580000,0x8A580001,0x7E600000,0x724C0000,0xF2600055,0xE6380000,0x15C0152,0x5E200000, -0x15C0152,0xDC01A5,0xB4C00001,0x88C00001,0x7ABC0002,0x14401A5,0x96880000,0x7AA40001,0x27F801A5,0x7A4C0001,0x6C0001A5,0x14401A5,0x96880000,0x7AA40001,0x27F801A5,0x7A4C0001,0x6C0001A5,0x27F801A5,0x7A4C0001,0x6C0001A5,0x6C0001A5,0x14401A5,0x96880000,0x7AA40001,0x27F801A5,0x7A4C0001,0x6C0001A5,0x27F801A5,0x7A4C0001,0x6C0001A5,0x6C0001A5,0x27F801A5, -0x7A4C0001,0x6C0001A5,0x6C0001A5,0x6C0001A5,0xFAA000A2,0xE801A5,0xFECC00C1,0xF2540000,0xB8440000,0x92480000,0x7A6C0001,0x7A200001,0xF6880091,0xE8380000,0x80700000,0x6C0001A5,0x1D001A5,0x6C01A5,0x6C01A5,0x6C01A5,0x6C01A5,0x6C01A5,0x6C01A5,0x6C01A5,0x6C01A5,0x6C01A5,0x6C01A5,0x7E500000,0x7E500000,0x7E500000,0x7E500000,0x7E500000, -0x7E500000,0x52500000,0x52500000,0x52500000,0x44500000,0xA001A5,0xA001A5,0xA001A5,0xA001A5,0xA001A5,0xA001A5,0x60180000,0x60180000,0x60180000,0x44340000,0x14401A5,0x14401A5,0x14401A5,0x4200001D,0x360001A5,0xF8600080,0x6C01A5,0x6C01A5,0xF2500000,0xB4500000,0x94500000,0x94500000,0x6E500000,0xFE3C0041,0xDE380001,0x62480000,0x60180000, -0xE401A5,}; -static const uint32_t g_etc1_to_bc7_m6_table107[] = { -0x600000,0x600000,0x600000,0x600000,0x600000,0x600000,0x600000,0x600000,0x600000,0x600000,0x600000,0x600000,0x600000,0x600000,0x600000,0x600000,0x600000,0x600000,0x600000,0x600000,0x28C0000,0x28C0000,0x28C0000,0x28C0000,0x28C0000,0x28C0000,0x28C0000,0x28C0000,0x28C0000,0x28C0000,0x1200000, -0x1200000,0x1200000,0x1200000,0x2E000001,0x600000,0x600000,0x600000,0x600000,0x600000,0x600000,0x600000,0x600000,0xA640000,0xA640000,0xA640000,0x28C0000,0xCC0000,0x980001,0x980001,0x980001,0x980001,0x980001,0x980001,0x980001,0x980001,0x980001,0x980001,0xE40000,0xE40000,0xE40000,0xE40000,0xE40000, -0xE40000,0x1D00000,0x1D00000,0x1D00000,0x4C000000,0xE40000,0xE40000,0xE40000,0xE40000,0xE40000,0xE40000,0x1D00000,0x1D00000,0x1D00000,0x4C000000,0x1D00000,0x1D00000,0x1D00000,0x4C000000,0x4C000000,0xA40000,0x980001,0x980001,0xB40000,0xC00000,0xD00000,0xD00000,0x3000000,0xB40000,0xC00000,0x1480000,0x1D00000, -0x1480000,0xCC0001,0xCC0001,0xCC0001,0xCC0001,0x3300000,0x3300000,0x3300000,0x1DFC0000,0x1DFC0000,0x66000000,0x3300000,0x3300000,0x3300000,0x1DFC0000,0x1DFC0000,0x66000000,0x1DFC0000,0x1DFC0000,0x66000000,0x66000000,0x3300000,0x3300000,0x3300000,0x1DFC0000,0x1DFC0000,0x66000000,0x1DFC0000,0x1DFC0000,0x66000000,0x66000000,0x1DFC0000, -0x1DFC0000,0x66000000,0x66000000,0x66000000,0xF00000,0xDC0000,0xCC0001,0x1180000,0x1580000,0x1B40000,0x1F80000,0x31F80000,0x3000000,0x3300000,0x1B40000,0x66000000,0x1B40000,0x1080000,0x1880000,0x49F80000,0x82000001,0x1880000,0x49F80000,0x82000001,0x49F80000,0x82000001,0x82000001,0x1880000,0x49F80000,0x82000001,0x49F80000,0x82000001, -0x82000001,0x49F80000,0x82000001,0x82000001,0x82000001,0x1880000,0x49F80000,0x82000001,0x49F80000,0x82000001,0x82000001,0x49F80000,0x82000001,0x82000001,0x82000001,0x49F80000,0x82000001,0x82000001,0x82000001,0x82000001,0x14C0000,0x5180000,0x5180000,0x1BC0000,0x31FC0000,0x65F80000,0x82000001,0x82000001,0x1680000,0x1F00000,0x7DCC0000,0x82000001, -0x19FC0000,0xB40F1A,0xF69805EA,0x9E9805EA,0x829805EB,0xE47C034A,0xA68001C3,0x8684028A,0x907C034A,0x807C01BE,0x747C034A,0xDA6005EA,0xAE600153,0x8870020D,0x965C01B2,0x82600006,0x766401BD,0x826005EA,0x7A54020F,0x70580286,0x666005ED,0x10C0F1A,0xB63005EB,0x846005EB,0xA814034A,0x843801B6,0x7448034A,0x980005F1,0x820C0154,0x721801C5,0x682805ED,0xBF80F1A, -0x780006AE,0x6C0004B6,0x64000795,0x58000F1E,0xFE8C046E,0xFCA80ADA,0xFEAC0BDF,0xFE600000,0xBA600003,0x98600002,0x84680023,0x7E5C0025,0xFE700403,0xEE480002,0x8854015B,0x721801C5,0x17C0F1A,0xD005EA,0xD8B40152,0x98B40152,0x82B40153,0xC49C01A6,0x9E980001,0x84A4002A,0x889801A6,0x7E98004B,0x749801A6,0x13405EA,0xA8680153,0x828C0153,0x9C4C01A5,0x82640002, -0x747401A5,0x1FF805EA,0x820C0153,0x740001A9,0x660005ED,0x13405EA,0xA8680153,0x828C0153,0x9C4C01A5,0x82640002,0x747401A5,0x1FF805EA,0x820C0153,0x740001A9,0x660005ED,0x1FF805EA,0x820C0153,0x740001A9,0x660005ED,0x660005ED,0xFEA001C8,0xFAC40412,0xFCC803FE,0xFE600000,0xBA600003,0x98600002,0x84740002,0x824C000B,0xFC8401E2,0xEE480001,0x8A440152,0x740001A9, -0x1B805EA,0x9805EA,0x9805EA,0x9805EA,0x9805EA,0xBA7C01A5,0xBA7C01A5,0xBA7C01A5,0x7A7C01A5,0x7A7C01A5,0x667C01A5,0xAE600152,0xAE600152,0xAE600152,0x80600005,0x80600005,0x686C004C,0x6E600152,0x6E600152,0x62600029,0x58600154,0xE005EA,0xE005EA,0xE005EA,0x8C3001A5,0x8C3001A5,0x665401A5,0x80140153,0x80140153,0x66280002,0x58380154,0x1CC05EA, -0x1CC05EA,0x600001D5,0x560001C8,0x4A0005ED,0xFA7C0191,0xFE8C03CE,0x9805EA,0xFE600000,0xB8600002,0x98600002,0x8E64000C,0x7A600001,0xFC600152,0xEE480001,0x84540152,0x66280002,0x14005EA,0xB40152,0xB40152,0xB40152,0xB40152,0x989C0001,0x989C0001,0x989C0001,0x729C0001,0x729C0001,0x66980001,0x10C0152,0x10C0152,0x10C0152,0x7C6C0001,0x7C6C0001, -0x66800000,0xBF80152,0xBF80152,0x66300000,0x58000154,0x10C0152,0x10C0152,0x10C0152,0x7C6C0001,0x7C6C0001,0x66800000,0xBF80152,0xBF80152,0x66300000,0x58000154,0xBF80152,0xBF80152,0x66300000,0x58000154,0x58000154,0xFE90003D,0xFCA80071,0xB40152,0xFE600000,0xB0680000,0x92680001,0x86700000,0x7A5C0000,0xFA700055,0xEE480000,0x17C0152,0x66300000, -0x17C0152,0xEC01A5,0xBCD00001,0x90D00001,0x82CC0002,0x15C01A5,0x9E980000,0x82B40001,0x33F801A5,0x825C0001,0x740001A5,0x15C01A5,0x9E980000,0x82B40001,0x33F801A5,0x825C0001,0x740001A5,0x33F801A5,0x825C0001,0x740001A5,0x740001A5,0x15C01A5,0x9E980000,0x82B40001,0x33F801A5,0x825C0001,0x740001A5,0x33F801A5,0x825C0001,0x740001A5,0x740001A5,0x33F801A5, -0x825C0001,0x740001A5,0x740001A5,0x740001A5,0xFCB000A4,0xFC01A5,0xF8E000CA,0xFA640000,0xC0540000,0x9A580000,0x827C0001,0x82300001,0xFE980091,0xF0480000,0x88800000,0x740001A5,0x1F001A5,0x7C01A5,0x7C01A5,0x7C01A5,0x7C01A5,0x7C01A5,0x7C01A5,0x7C01A5,0x7C01A5,0x7C01A5,0x7C01A5,0x86600000,0x86600000,0x86600000,0x86600000,0x86600000, -0x86600000,0x5A600000,0x5A600000,0x5A600000,0x4C600000,0xB801A5,0xB801A5,0xB801A5,0xB801A5,0xB801A5,0xB801A5,0x68280000,0x68280000,0x68280000,0x4C440000,0x17401A5,0x17401A5,0x17401A5,0x4A000008,0x3E0001A5,0xFE6C0088,0x7C01A5,0x7C01A5,0xFA600000,0xBC600000,0x9C600000,0x9C600000,0x76600000,0xFA50004A,0xE6480001,0x6A580000,0x68280000, -0x10801A5,}; -static const uint32_t g_etc1_to_bc7_m6_table108[] = { -0x700001,0x700001,0x700001,0x700001,0x700001,0x700001,0x700001,0x700001,0x700001,0x700001,0x700001,0x700001,0x700001,0x700001,0x700001,0x700001,0x700001,0x700001,0x700001,0x700001,0xA80000,0xA80000,0xA80000,0xA80000,0xA80000,0xA80000,0xA80000,0xA80000,0xA80000,0xA80000,0x1580000, -0x1580000,0x1580000,0x1580000,0x38000000,0x700001,0x700001,0x700001,0x700001,0x700001,0x700001,0x700001,0x700001,0x4780000,0x4780000,0x4780000,0xA80000,0xF00000,0xAC0000,0xAC0000,0xAC0000,0xAC0000,0xAC0000,0xAC0000,0xAC0000,0xAC0000,0xAC0000,0xAC0000,0x1000000,0x1000000,0x1000000,0x1000000,0x1000000, -0x1000000,0x5F80000,0x5F80000,0x5F80000,0x54000001,0x1000000,0x1000000,0x1000000,0x1000000,0x1000000,0x1000000,0x5F80000,0x5F80000,0x5F80000,0x54000001,0x5F80000,0x5F80000,0x5F80000,0x54000001,0x54000001,0xB80000,0xAC0000,0xAC0000,0xC80000,0xD80000,0x2E80000,0x2E80000,0x1200000,0xC80000,0xD80000,0x16C0000,0x5F80000, -0x16C0000,0xE00000,0xE00000,0xE00000,0xE00000,0x14C0000,0x14C0000,0x14C0000,0x2BF80000,0x2BF80000,0x6E000001,0x14C0000,0x14C0000,0x14C0000,0x2BF80000,0x2BF80000,0x6E000001,0x2BF80000,0x2BF80000,0x6E000001,0x6E000001,0x14C0000,0x14C0000,0x14C0000,0x2BF80000,0x2BF80000,0x6E000001,0x2BF80000,0x2BF80000,0x6E000001,0x6E000001,0x2BF80000, -0x2BF80000,0x6E000001,0x6E000001,0x6E000001,0x1040000,0xEEC0000,0xE00000,0x1300000,0x1780000,0x1DC0000,0xFFC0000,0x3DF80000,0x1180000,0x14C0000,0x1DC0000,0x6E000001,0x1DC0000,0x1180001,0x1A40000,0x57F80000,0x8C000000,0x1A40000,0x57F80000,0x8C000000,0x57F80000,0x8C000000,0x8C000000,0x1A40000,0x57F80000,0x8C000000,0x57F80000,0x8C000000, -0x8C000000,0x57F80000,0x8C000000,0x8C000000,0x8C000000,0x1A40000,0x57F80000,0x8C000000,0x57F80000,0x8C000000,0x8C000000,0x57F80000,0x8C000000,0x8C000000,0x8C000000,0x57F80000,0x8C000000,0x8C000000,0x8C000000,0x8C000000,0x3600000,0x12C0000,0x12C0000,0x1D80000,0x3FFC0000,0x71F40000,0x8C000000,0x8C000000,0x1800000,0xDFC0000,0x85FC0000,0x8C000000, -0x29FC0000,0xC40F1E,0xFCAC05ED,0xA8A805ED,0x8CA805ED,0xEC90034A,0xB09401C5,0x90980286,0x9890034A,0x8A8C01BD,0x7E90034A,0xE07405EB,0xB6740154,0x9284020F,0x9E6C01B6,0x8A740006,0x7E7801BE,0x8C7005EB,0x8468020D,0x7868028A,0x707005EB,0x3240F1A,0xC04005EB,0x8C7405EA,0xB224034A,0x8E4C01B2,0x7E58034A,0xA40C05EB,0x8C1C0153,0x7C2C01C3,0x703C05EA,0x17FC0F1A, -0x8400065A,0x7800043A,0x6C00071A,0x62000F1A,0xFEA004CC,0xF6BC0B32,0xF8C00C1E,0xFE74000E,0xC4700004,0xA0740004,0x8E7C0025,0x88700023,0xFE800477,0xFA580000,0x90640159,0x7C2C01C3,0x1A40F1A,0xE005ED,0xE0C80154,0xA0C80154,0x8CC40154,0xCEAC01A5,0xA6AC0002,0x8CB40029,0x90AC01A5,0x86A8004C,0x7EAC01A5,0x15005EA,0xB2780153,0x8C9C0152,0xA46001A5,0x8A740005, -0x7E8401A5,0x2DF805EA,0x8C180152,0x7E0401A5,0x700005EA,0x15005EA,0xB2780153,0x8C9C0152,0xA46001A5,0x8A740005,0x7E8401A5,0x2DF805EA,0x8C180152,0x7E0401A5,0x700005EA,0x2DF805EA,0x8C180152,0x7E0401A5,0x700005EA,0x700005EA,0xFEB401E6,0xF2D4043D,0xF6DC0428,0xFE780005,0xC4700003,0xA0740003,0x8C840001,0x8A5C000C,0xFE980202,0xFA580000,0x92580152,0x7E0401A5, -0x1E005EA,0xA805ED,0xA805ED,0xA805ED,0xA805ED,0xC09001A5,0xC09001A5,0xC09001A5,0x829001A5,0x829001A5,0x6E9001A6,0xB6740153,0xB6740153,0xB6740153,0x8A740002,0x8A740002,0x707C004B,0x76740153,0x76740153,0x6A70002A,0x62700153,0xFC05EA,0xFC05EA,0xFC05EA,0x964001A5,0x964001A5,0x6E6801A6,0x88280153,0x88280153,0x703C0001,0x62480152,0x3F805EA, -0x3F805EA,0x6C0001B2,0x6000019A,0x540005EA,0xFE9001AE,0xFAA403EA,0xA805ED,0xFE740005,0xBE740002,0x9E740002,0x9674000B,0x82700002,0xFE74016D,0xFA580000,0x8C680153,0x703C0001,0x16805EA,0xC40154,0xC40154,0xC40154,0xC40154,0xA4AC0000,0xA4AC0000,0xA4AC0000,0x7CAC0000,0x7CAC0000,0x6EAC0001,0x3240152,0x3240152,0x3240152,0x867C0001,0x867C0001, -0x6E940001,0x17FC0152,0x17FC0152,0x6E440001,0x62000152,0x3240152,0x3240152,0x3240152,0x867C0001,0x867C0001,0x6E940001,0x17FC0152,0x17FC0152,0x6E440001,0x62000152,0x17FC0152,0x17FC0152,0x6E440001,0x62000152,0x62000152,0xFEA0004A,0xF6BC0080,0xC40154,0xFE780001,0xBA780000,0x9C780000,0x8E840000,0x846C0000,0xF8880062,0xFA580000,0x1A40152,0x6E440001, -0x1A40152,0xFC01A5,0xC6E00000,0x9AE00000,0x8CE00000,0x17801A5,0xA8A80000,0x8CC40000,0x3FFC01A5,0x8C680000,0x7E0001A5,0x17801A5,0xA8A80000,0x8CC40000,0x3FFC01A5,0x8C680000,0x7E0001A5,0x3FFC01A5,0x8C680000,0x7E0001A5,0x7E0001A5,0x17801A5,0xA8A80000,0x8CC40000,0x3FFC01A5,0x8C680000,0x7E0001A5,0x3FFC01A5,0x8C680000,0x7E0001A5,0x7E0001A5,0x3FFC01A5, -0x8C680000,0x7E0001A5,0x7E0001A5,0x7E0001A5,0xFAC800B5,0x10C01A5,0xF2F400DD,0xFC7C0002,0xCA640000,0xA26C0000,0x8C8C0000,0x8C3C0000,0xFEAC00A4,0xFA580000,0x90940000,0x7E0001A5,0xDFC01A5,0x9001A5,0x9001A5,0x9001A5,0x9001A5,0x9001A5,0x9001A5,0x9001A5,0x9001A5,0x9001A5,0x9001A5,0x8E740001,0x8E740001,0x8E740001,0x8E740001,0x8E740001, -0x8E740001,0x62740001,0x62740001,0x62740001,0x54700002,0xD401A5,0xD401A5,0xD401A5,0xD401A5,0xD401A5,0xD401A5,0x703C0000,0x703C0000,0x703C0000,0x54580001,0x1AC01A5,0x1AC01A5,0x1AC01A5,0x54000001,0x460001A5,0xFA840091,0x9001A5,0x9001A5,0xFE740001,0xC2740001,0xA2740001,0xA2740001,0x7E740001,0xF8680055,0xF8580000,0x726C0001,0x703C0000, -0x12C01A5,}; -static const uint32_t g_etc1_to_bc7_m6_table109[] = { -0x800001,0x800001,0x800001,0x800001,0x800001,0x800001,0x800001,0x800001,0x800001,0x800001,0x800001,0x800001,0x800001,0x800001,0x800001,0x800001,0x800001,0x800001,0x800001,0x800001,0xC00000,0xC00000,0xC00000,0xC00000,0xC00000,0xC00000,0xC00000,0xC00000,0xC00000,0xC00000,0x1880000, -0x1880000,0x1880000,0x1880000,0x40000000,0x800001,0x800001,0x800001,0x800001,0x800001,0x800001,0x800001,0x800001,0xC880000,0xC880000,0xC880000,0xC00000,0x1140000,0xBC0000,0xBC0000,0xBC0000,0xBC0000,0xBC0000,0xBC0000,0xBC0000,0xBC0000,0xBC0000,0xBC0000,0x1180000,0x1180000,0x1180000,0x1180000,0x1180000, -0x1180000,0x11F80000,0x11F80000,0x11F80000,0x5C000001,0x1180000,0x1180000,0x1180000,0x1180000,0x1180000,0x1180000,0x11F80000,0x11F80000,0x11F80000,0x5C000001,0x11F80000,0x11F80000,0x11F80000,0x5C000001,0x5C000001,0xC80000,0xBC0000,0xBC0000,0x4D80000,0xEC0000,0x1000000,0x1000000,0x13C0000,0x4D80000,0xEC0000,0x1900000,0x11F80000, -0x1900000,0xF00000,0xF00000,0xF00000,0xF00000,0x1640000,0x1640000,0x1640000,0x37F80000,0x37F80000,0x76000001,0x1640000,0x1640000,0x1640000,0x37F80000,0x37F80000,0x76000001,0x37F80000,0x37F80000,0x76000001,0x76000001,0x1640000,0x1640000,0x1640000,0x37F80000,0x37F80000,0x76000001,0x37F80000,0x37F80000,0x76000001,0x76000001,0x37F80000, -0x37F80000,0x76000001,0x76000001,0x76000001,0x1180000,0x1000000,0xF00000,0x3440000,0x1940000,0x1FC0000,0x1DF80000,0x47FC0000,0x12C0000,0x1640000,0x1FC0000,0x76000001,0x1FC0000,0x1280001,0x1BC0000,0x61FC0000,0x94000000,0x1BC0000,0x61FC0000,0x94000000,0x61FC0000,0x94000000,0x94000000,0x1BC0000,0x61FC0000,0x94000000,0x61FC0000,0x94000000, -0x94000000,0x61FC0000,0x94000000,0x94000000,0x94000000,0x1BC0000,0x61FC0000,0x94000000,0x61FC0000,0x94000000,0x94000000,0x61FC0000,0x94000000,0x94000000,0x94000000,0x61FC0000,0x94000000,0x94000000,0x94000000,0x94000000,0x3740000,0x73C0000,0x73C0000,0x1F40000,0x4DFC0000,0x7BF40000,0x94000000,0x94000000,0x1940000,0x1DFC0000,0x8FD00000,0x94000000, -0x39FC0000,0xD40F1E,0xFEBC05F1,0xB0B805ED,0x94B805ED,0xF4A0034A,0xB8A401C5,0x98A80286,0xA0A0034A,0x929C01BD,0x86A0034A,0xE88405EB,0xBE840154,0x9A94020F,0xA67C01B6,0x92840006,0x868801BE,0x948005EB,0x8C78020D,0x8078028A,0x788005EB,0x33C0F1A,0xC85005EB,0x948405EA,0xBA34034A,0x965C01B2,0x8668034A,0xAC1C05EB,0x942C0153,0x843C01C3,0x784C05EA,0x23FC0F1A, -0x8E000629,0x820003F2,0x760006D7,0x6A000F1A,0xFEB40537,0xFECC0B32,0xFECC0C36,0xFE880026,0xCC800004,0xA8840004,0x968C0025,0x90800023,0xFE9804C6,0xFC6C0006,0x98740159,0x843C01C3,0x1C80F1A,0xF005ED,0xE8D80154,0xA8D80154,0x94D40154,0xD6BC01A5,0xAEBC0002,0x94C40029,0x98BC01A5,0x8EB8004C,0x86BC01A5,0x16805EA,0xBA880153,0x94AC0152,0xAC7001A5,0x92840005, -0x869401A5,0x39F805EA,0x94280152,0x861401A5,0x780005EA,0x16805EA,0xBA880153,0x94AC0152,0xAC7001A5,0x92840005,0x869401A5,0x39F805EA,0x94280152,0x861401A5,0x780005EA,0x39F805EA,0x94280152,0x861401A5,0x780005EA,0x780005EA,0xFAC80226,0xFAE4043D,0xFEEC0428,0xFC900012,0xCC800003,0xA8840003,0x94940001,0x926C000C,0xFEAC0244,0xFE6C0002,0x9A680152,0x861401A5, -0x3FC05EA,0xB805ED,0xB805ED,0xB805ED,0xB805ED,0xC8A001A5,0xC8A001A5,0xC8A001A5,0x8AA001A5,0x8AA001A5,0x76A001A6,0xBE840153,0xBE840153,0xBE840153,0x92840002,0x92840002,0x788C004B,0x7E840153,0x7E840153,0x7280002A,0x6A800153,0x11405EA,0x11405EA,0x11405EA,0x9E5001A5,0x9E5001A5,0x767801A6,0x90380153,0x90380153,0x784C0001,0x6A580152,0xFF805EA, -0xFF805EA,0x760001A6,0x6800017E,0x5C0005EA,0xFEA001CB,0xFEAC040A,0xB805ED,0xFE88000D,0xC6840002,0xA6840002,0x9E84000B,0x8A800002,0xFE8001A3,0xFA6C0002,0x94780153,0x784C0001,0x18C05EA,0xD40154,0xD40154,0xD40154,0xD40154,0xACBC0000,0xACBC0000,0xACBC0000,0x84BC0000,0x84BC0000,0x76BC0001,0x33C0152,0x33C0152,0x33C0152,0x8E8C0001,0x8E8C0001, -0x76A40001,0x23FC0152,0x23FC0152,0x76540001,0x6A000152,0x33C0152,0x33C0152,0x33C0152,0x8E8C0001,0x8E8C0001,0x76A40001,0x23FC0152,0x23FC0152,0x76540001,0x6A000152,0x23FC0152,0x23FC0152,0x76540001,0x6A000152,0x6A000152,0xFAB40055,0xFECC0080,0xD40154,0xFE880004,0xC2880000,0xA4880000,0x96940000,0x8C7C0000,0xFE94006A,0xFA6C0001,0x1C80152,0x76540001, -0x1C80152,0x10C01A5,0xCEF00000,0xA2F00000,0x94F00000,0x19001A5,0xB0B80000,0x94D40000,0x4BFC01A5,0x94780000,0x860001A5,0x19001A5,0xB0B80000,0x94D40000,0x4BFC01A5,0x94780000,0x860001A5,0x4BFC01A5,0x94780000,0x860001A5,0x860001A5,0x19001A5,0xB0B80000,0x94D40000,0x4BFC01A5,0x94780000,0x860001A5,0x4BFC01A5,0x94780000,0x860001A5,0x860001A5,0x4BFC01A5, -0x94780000,0x860001A5,0x860001A5,0x860001A5,0xF2E000C8,0x12001A5,0xFB0400DD,0xFE940005,0xD2740000,0xAA7C0000,0x949C0000,0x944C0000,0xF4C800B5,0xFE6C0001,0x98A40000,0x860001A5,0x1DF801A5,0xA001A5,0xA001A5,0xA001A5,0xA001A5,0xA001A5,0xA001A5,0xA001A5,0xA001A5,0xA001A5,0xA001A5,0x96840001,0x96840001,0x96840001,0x96840001,0x96840001, -0x96840001,0x6A840001,0x6A840001,0x6A840001,0x5C800002,0xEC01A5,0xEC01A5,0xEC01A5,0xEC01A5,0xEC01A5,0xEC01A5,0x784C0000,0x784C0000,0x784C0000,0x5C680001,0x1DC01A5,0x1DC01A5,0x1DC01A5,0x5C100001,0x4E0001A5,0xF29400A2,0xA001A5,0xA001A5,0xFE840002,0xCA840001,0xAA840001,0xAA840001,0x86840001,0xFE740059,0xF86C0001,0x7A7C0001,0x784C0000, -0x15001A5,}; -static const uint32_t g_etc1_to_bc7_m6_table110[] = { -0x900001,0x900001,0x900001,0x900001,0x900001,0x900001,0x900001,0x900001,0x900001,0x900001,0x900001,0x900001,0x900001,0x900001,0x900001,0x900001,0x900001,0x900001,0x900001,0x900001,0xD80000,0xD80000,0xD80000,0xD80000,0xD80000,0xD80000,0xD80000,0xD80000,0xD80000,0xD80000,0x1B80000, -0x1B80000,0x1B80000,0x1B80000,0x48000000,0x900001,0x900001,0x900001,0x900001,0x900001,0x900001,0x900001,0x900001,0x9C0000,0x9C0000,0x9C0000,0xD80000,0x1340000,0xCC0000,0xCC0000,0xCC0000,0xCC0000,0xCC0000,0xCC0000,0xCC0000,0xCC0000,0xCC0000,0xCC0000,0x1300000,0x1300000,0x1300000,0x1300000,0x1300000, -0x1300000,0x1DF40000,0x1DF40000,0x1DF40000,0x64000001,0x1300000,0x1300000,0x1300000,0x1300000,0x1300000,0x1300000,0x1DF40000,0x1DF40000,0x1DF40000,0x64000001,0x1DF40000,0x1DF40000,0x1DF40000,0x64000001,0x64000001,0x4D80000,0xCC0000,0xCC0000,0xEC0000,0x1000000,0x1140000,0x1140000,0x3540000,0xEC0000,0x1000000,0x1B00000,0x1DF40000, -0x1B00000,0x1000000,0x1000000,0x1000000,0x1000000,0x17C0000,0x17C0000,0x17C0000,0x43F80000,0x43F80000,0x7E000001,0x17C0000,0x17C0000,0x17C0000,0x43F80000,0x43F80000,0x7E000001,0x43F80000,0x43F80000,0x7E000001,0x7E000001,0x17C0000,0x17C0000,0x17C0000,0x43F80000,0x43F80000,0x7E000001,0x43F80000,0x43F80000,0x7E000001,0x7E000001,0x43F80000, -0x43F80000,0x7E000001,0x7E000001,0x7E000001,0x3280000,0x1100000,0x1000000,0x15C0000,0x3AC0000,0x11FC0000,0x29FC0000,0x53F80000,0x1400000,0x17C0000,0x11FC0000,0x7E000001,0x11FC0000,0x1380001,0x3D00000,0x6DFC0000,0x9C000000,0x3D00000,0x6DFC0000,0x9C000000,0x6DFC0000,0x9C000000,0x9C000000,0x3D00000,0x6DFC0000,0x9C000000,0x6DFC0000,0x9C000000, -0x9C000000,0x6DFC0000,0x9C000000,0x9C000000,0x9C000000,0x3D00000,0x6DFC0000,0x9C000000,0x6DFC0000,0x9C000000,0x9C000000,0x6DFC0000,0x9C000000,0x9C000000,0x9C000000,0x6DFC0000,0x9C000000,0x9C000000,0x9C000000,0x9C000000,0x3880000,0xF4C0000,0xF4C0000,0xFFC0000,0x5BFC0000,0x85F40000,0x9C000000,0x9C000000,0x1AC0000,0x2FFC0000,0x97E00000,0x9C000000, -0x47FC0000,0xE40F1E,0xFCCC0606,0xB8C805ED,0x9CC805ED,0xFCB0034A,0xC0B401C5,0xA0B80286,0xA8B0034A,0x9AAC01BD,0x8EB0034A,0xF09405EB,0xC6940154,0xA2A4020F,0xAE8C01B6,0x9A940006,0x8E9801BE,0x9C9005EB,0x9488020D,0x8888028A,0x809005EB,0x1540F1A,0xD06005EB,0x9C9405EA,0xC244034A,0x9E6C01B2,0x8E78034A,0xB42C05EB,0x9C3C0153,0x8C4C01C3,0x805C05EA,0x2FFC0F1A, -0x98000606,0x8A00039E,0x7E000686,0x72000F1A,0xFEC405AE,0xF6DC0B8E,0xF8E00C65,0xFE9C0054,0xD4900004,0xB0940004,0x9E9C0025,0x98900023,0xFCB00557,0xFE800014,0xA0840159,0x8C4C01C3,0x1E80F1A,0x10005ED,0xF0E80154,0xB0E80154,0x9CE40154,0xDECC01A5,0xB6CC0002,0x9CD40029,0xA0CC01A5,0x96C8004C,0x8ECC01A5,0x18005EA,0xC2980153,0x9CBC0152,0xB48001A5,0x9A940005, -0x8EA401A5,0x45F805EA,0x9C380152,0x8E2401A5,0x800005EA,0x18005EA,0xC2980153,0x9CBC0152,0xB48001A5,0x9A940005,0x8EA401A5,0x45F805EA,0x9C380152,0x8E2401A5,0x800005EA,0x45F805EA,0x9C380152,0x8E2401A5,0x800005EA,0x800005EA,0xFED8024B,0xF4F80465,0xF6FC0455,0xFEA40029,0xD4900003,0xB0940003,0x9CA40001,0x9A7C000C,0xFCC00269,0xFE840008,0xA2780152,0x8E2401A5, -0x13FC05EA,0xC805ED,0xC805ED,0xC805ED,0xC805ED,0xD0B001A5,0xD0B001A5,0xD0B001A5,0x92B001A5,0x92B001A5,0x7EB001A6,0xC6940153,0xC6940153,0xC6940153,0x9A940002,0x9A940002,0x809C004B,0x86940153,0x86940153,0x7A90002A,0x72900153,0x12C05EA,0x12C05EA,0x12C05EA,0xA66001A5,0xA66001A5,0x7E8801A6,0x98480153,0x98480153,0x805C0001,0x72680152,0x1BF805EA, -0x1BF805EA,0x7E0801A6,0x72000162,0x640005EA,0xFAB40206,0xFAC40411,0xC805ED,0xFE98001A,0xCE940002,0xAE940002,0xA694000B,0x92900002,0xFE9401BA,0xFC7C000B,0x9C880153,0x805C0001,0x1AC05EA,0xE40154,0xE40154,0xE40154,0xE40154,0xB4CC0000,0xB4CC0000,0xB4CC0000,0x8CCC0000,0x8CCC0000,0x7ECC0001,0x1540152,0x1540152,0x1540152,0x969C0001,0x969C0001, -0x7EB40001,0x2FFC0152,0x2FFC0152,0x7E640001,0x72000152,0x1540152,0x1540152,0x1540152,0x969C0001,0x969C0001,0x7EB40001,0x2FFC0152,0x2FFC0152,0x7E640001,0x72000152,0x2FFC0152,0x2FFC0152,0x7E640001,0x72000152,0x72000152,0xF6C80062,0xF6DC0091,0xE40154,0xFCA00008,0xCA980000,0xAC980000,0x9EA40000,0x948C0000,0xFAAC0071,0xFE800002,0x1E80152,0x7E640001, -0x1E80152,0x11C01A5,0xD7000000,0xAB000000,0x9D000000,0x1A801A5,0xB8C80000,0x9CE40000,0x57FC01A5,0x9C880000,0x8E0001A5,0x1A801A5,0xB8C80000,0x9CE40000,0x57FC01A5,0x9C880000,0x8E0001A5,0x57FC01A5,0x9C880000,0x8E0001A5,0x8E0001A5,0x1A801A5,0xB8C80000,0x9CE40000,0x57FC01A5,0x9C880000,0x8E0001A5,0x57FC01A5,0x9C880000,0x8E0001A5,0x8E0001A5,0x57FC01A5, -0x9C880000,0x8E0001A5,0x8E0001A5,0x8E0001A5,0xFAF000C8,0x13001A5,0xF31400F4,0xFCAC000D,0xDA840000,0xB28C0000,0x9CAC0000,0x9C5C0000,0xFCD800B5,0xFE880002,0xA0B40000,0x8E0001A5,0x2BFC01A5,0xB001A5,0xB001A5,0xB001A5,0xB001A5,0xB001A5,0xB001A5,0xB001A5,0xB001A5,0xB001A5,0xB001A5,0x9E940001,0x9E940001,0x9E940001,0x9E940001,0x9E940001, -0x9E940001,0x72940001,0x72940001,0x72940001,0x64900002,0x10401A5,0x10401A5,0x10401A5,0x10401A5,0x10401A5,0x10401A5,0x805C0000,0x805C0000,0x805C0000,0x64780001,0x5FC01A5,0x5FC01A5,0x5FC01A5,0x64200001,0x560001A5,0xFAA400A2,0xB001A5,0xB001A5,0xF894000A,0xD2940001,0xB2940001,0xB2940001,0x8E940001,0xFA880064,0xFC7C0002,0x828C0001,0x805C0000, -0x17001A5,}; -static const uint32_t g_etc1_to_bc7_m6_table111[] = { -0xA00001,0xA00001,0xA00001,0xA00001,0xA00001,0xA00001,0xA00001,0xA00001,0xA00001,0xA00001,0xA00001,0xA00001,0xA00001,0xA00001,0xA00001,0xA00001,0xA00001,0xA00001,0xA00001,0xA00001,0xF00000,0xF00000,0xF00000,0xF00000,0xF00000,0xF00000,0xF00000,0xF00000,0xF00000,0xF00000,0x1E80000, -0x1E80000,0x1E80000,0x1E80000,0x50000000,0xA00001,0xA00001,0xA00001,0xA00001,0xA00001,0xA00001,0xA00001,0xA00001,0xAC0000,0xAC0000,0xAC0000,0xF00000,0x1580000,0xDC0000,0xDC0000,0xDC0000,0xDC0000,0xDC0000,0xDC0000,0xDC0000,0xDC0000,0xDC0000,0xDC0000,0x3440000,0x3440000,0x3440000,0x3440000,0x3440000, -0x3440000,0x27FC0000,0x27FC0000,0x27FC0000,0x6C000001,0x3440000,0x3440000,0x3440000,0x3440000,0x3440000,0x3440000,0x27FC0000,0x27FC0000,0x27FC0000,0x6C000001,0x27FC0000,0x27FC0000,0x27FC0000,0x6C000001,0x6C000001,0xCE80000,0xDC0000,0xDC0000,0x1000000,0x1140000,0x12C0000,0x12C0000,0x1700000,0x1000000,0x1140000,0x1D40000,0x27FC0000, -0x1D40000,0x1100000,0x1100000,0x1100000,0x1100000,0x1940000,0x1940000,0x1940000,0x4FF80000,0x4FF80000,0x86000001,0x1940000,0x1940000,0x1940000,0x4FF80000,0x4FF80000,0x86000001,0x4FF80000,0x4FF80000,0x86000001,0x86000001,0x1940000,0x1940000,0x1940000,0x4FF80000,0x4FF80000,0x86000001,0x4FF80000,0x4FF80000,0x86000001,0x86000001,0x4FF80000, -0x4FF80000,0x86000001,0x86000001,0x86000001,0x13C0000,0x9200000,0x1100000,0x3700000,0x1C80000,0x1FFC0000,0x37FC0000,0x5DFC0000,0x1540000,0x1940000,0x1FFC0000,0x86000001,0x1FFC0000,0x1480001,0x3E80000,0x79FC0000,0xA4000000,0x3E80000,0x79FC0000,0xA4000000,0x79FC0000,0xA4000000,0xA4000000,0x3E80000,0x79FC0000,0xA4000000,0x79FC0000,0xA4000000, -0xA4000000,0x79FC0000,0xA4000000,0xA4000000,0xA4000000,0x3E80000,0x79FC0000,0xA4000000,0x79FC0000,0xA4000000,0xA4000000,0x79FC0000,0xA4000000,0xA4000000,0xA4000000,0x79FC0000,0xA4000000,0xA4000000,0xA4000000,0xA4000000,0x39C0000,0x1600000,0x1600000,0x23FC0000,0x69F80000,0x8FF40000,0xA4000000,0xA4000000,0x1C00000,0x41FC0000,0x9FF00000,0xA4000000, -0x57FC0000,0xF40F1E,0xFEDC061E,0xC0D805ED,0xA4D805ED,0xFCC00356,0xC8C401C5,0xA8C80286,0xB0C0034A,0xA2BC01BD,0x96C0034A,0xF8A405EB,0xCEA40154,0xAAB4020F,0xB69C01B6,0xA2A40006,0x96A801BE,0xA4A005EB,0x9C98020D,0x9098028A,0x88A005EB,0x16C0F1A,0xD87005EB,0xA4A405EA,0xCA54034A,0xA67C01B2,0x9688034A,0xBC3C05EB,0xA44C0153,0x945C01C3,0x886C05EA,0x3BFC0F1A, -0xA20005F1,0x94000376,0x8400065A,0x7A000F1A,0xFED80614,0xFEEC0B8E,0xFEEC0C81,0xFEB00093,0xDCA00004,0xB8A40004,0xA6AC0025,0xA0A00023,0xFEBC05A3,0xFE94003E,0xA8940159,0x945C01C3,0x7FC0F1A,0x11005ED,0xF8F80154,0xB8F80154,0xA4F40154,0xE6DC01A5,0xBEDC0002,0xA4E40029,0xA8DC01A5,0x9ED8004C,0x96DC01A5,0x19805EA,0xCAA80153,0xA4CC0152,0xBC9001A5,0xA2A40005, -0x96B401A5,0x51F805EA,0xA4480152,0x963401A5,0x880005EA,0x19805EA,0xCAA80153,0xA4CC0152,0xBC9001A5,0xA2A40005,0x96B401A5,0x51F805EA,0xA4480152,0x963401A5,0x880005EA,0x51F805EA,0xA4480152,0x963401A5,0x880005EA,0x880005EA,0xFEEC028B,0xFD080465,0xFF0C0455,0xFCBC0048,0xDCA00003,0xB8A40003,0xA4B40001,0xA28C000C,0xFCD80289,0xFE98001E,0xAA880152,0x963401A5, -0x21FC05EA,0xD805ED,0xD805ED,0xD805ED,0xD805ED,0xD8C001A5,0xD8C001A5,0xD8C001A5,0x9AC001A5,0x9AC001A5,0x86C001A6,0xCEA40153,0xCEA40153,0xCEA40153,0xA2A40002,0xA2A40002,0x88AC004B,0x8EA40153,0x8EA40153,0x82A0002A,0x7AA00153,0x14405EA,0x14405EA,0x14405EA,0xAE7001A5,0xAE7001A5,0x869801A6,0xA0580153,0xA0580153,0x886C0001,0x7A780152,0x27F805EA, -0x27F805EA,0x861801A6,0x7A000156,0x6C0005EA,0xFAC40225,0xFECC0439,0xD805ED,0xFEAC0032,0xD6A40002,0xB6A40002,0xAEA4000B,0x9AA00002,0xFAAC01E2,0xFE900015,0xA4980153,0x886C0001,0x1D005EA,0xF40154,0xF40154,0xF40154,0xF40154,0xBCDC0000,0xBCDC0000,0xBCDC0000,0x94DC0000,0x94DC0000,0x86DC0001,0x16C0152,0x16C0152,0x16C0152,0x9EAC0001,0x9EAC0001, -0x86C40001,0x3BFC0152,0x3BFC0152,0x86740001,0x7A000152,0x16C0152,0x16C0152,0x16C0152,0x9EAC0001,0x9EAC0001,0x86C40001,0x3BFC0152,0x3BFC0152,0x86740001,0x7A000152,0x3BFC0152,0x3BFC0152,0x86740001,0x7A000152,0x7A000152,0xFED80062,0xFEEC0091,0xF40154,0xFEB4000D,0xD2A80000,0xB4A80000,0xA6B40000,0x9C9C0000,0xFCC00080,0xFE980005,0x7FC0152,0x86740001, -0x7FC0152,0x12C01A5,0xDF100000,0xB3100000,0xA5100000,0x1C001A5,0xC0D80000,0xA4F40000,0x63FC01A5,0xA4980000,0x960001A5,0x1C001A5,0xC0D80000,0xA4F40000,0x63FC01A5,0xA4980000,0x960001A5,0x63FC01A5,0xA4980000,0x960001A5,0x960001A5,0x1C001A5,0xC0D80000,0xA4F40000,0x63FC01A5,0xA4980000,0x960001A5,0x63FC01A5,0xA4980000,0x960001A5,0x960001A5,0x63FC01A5, -0xA4980000,0x960001A5,0x960001A5,0x960001A5,0xF70400DD,0x14001A5,0xFB2400F4,0xFEC00014,0xE2940000,0xBA9C0000,0xA4BC0000,0xA46C0000,0xFCEC00CA,0xFEA0000A,0xA8C40000,0x960001A5,0x3BFC01A5,0xC001A5,0xC001A5,0xC001A5,0xC001A5,0xC001A5,0xC001A5,0xC001A5,0xC001A5,0xC001A5,0xC001A5,0xA6A40001,0xA6A40001,0xA6A40001,0xA6A40001,0xA6A40001, -0xA6A40001,0x7AA40001,0x7AA40001,0x7AA40001,0x6CA00002,0x11C01A5,0x11C01A5,0x11C01A5,0x11C01A5,0x11C01A5,0x11C01A5,0x886C0000,0x886C0000,0x886C0000,0x6C880001,0x11FC01A5,0x11FC01A5,0x11FC01A5,0x6C300001,0x5E0001A5,0xF2B400B5,0xC001A5,0xC001A5,0xFCA8000D,0xDAA40001,0xBAA40001,0xBAA40001,0x96A40001,0xFC9C0071,0xFC900005,0x8A9C0001,0x886C0000, -0x19401A5,}; -static const uint32_t g_etc1_to_bc7_m6_table112[] = { -0xB40000,0xB40000,0xB40000,0xB40000,0xB40000,0xB40000,0xB40000,0xB40000,0xB40000,0xB40000,0xB40000,0xB40000,0xB40000,0xB40000,0xB40000,0xB40000,0xB40000,0xB40000,0xB40000,0xB40000,0x10C0000,0x10C0000,0x10C0000,0x10C0000,0x10C0000,0x10C0000,0x10C0000,0x10C0000,0x10C0000,0x10C0000,0xBF80000, -0xBF80000,0xBF80000,0xBF80000,0x58000001,0xB40000,0xB40000,0xB40000,0xB40000,0xB40000,0xB40000,0xB40000,0xB40000,0xC00000,0xC00000,0xC00000,0x10C0000,0x17C0000,0xEC0001,0xEC0001,0xEC0001,0xEC0001,0xEC0001,0xEC0001,0xEC0001,0xEC0001,0xEC0001,0xEC0001,0x1600000,0x1600000,0x1600000,0x1600000,0x1600000, -0x1600000,0x35FC0000,0x35FC0000,0x35FC0000,0x76000000,0x1600000,0x1600000,0x1600000,0x1600000,0x1600000,0x1600000,0x35FC0000,0x35FC0000,0x35FC0000,0x76000000,0x35FC0000,0x35FC0000,0x35FC0000,0x76000000,0x76000000,0x6FC0000,0xEC0001,0xEC0001,0x1140000,0x3280000,0x1440000,0x1440000,0x1900000,0x1140000,0x3280000,0x1F80000,0x35FC0000, -0x1F80000,0x1200001,0x1200001,0x1200001,0x1200001,0x1B00000,0x1B00000,0x1B00000,0x5DF40000,0x5DF40000,0x90000000,0x1B00000,0x1B00000,0x1B00000,0x5DF40000,0x5DF40000,0x90000000,0x5DF40000,0x5DF40000,0x90000000,0x90000000,0x1B00000,0x1B00000,0x1B00000,0x5DF40000,0x5DF40000,0x90000000,0x5DF40000,0x5DF40000,0x90000000,0x90000000,0x5DF40000, -0x5DF40000,0x90000000,0x90000000,0x90000000,0x1500000,0x3340000,0x1200001,0x3880000,0x1E80000,0x31FC0000,0x47F80000,0x69FC0000,0x16C0000,0x1B00000,0x31FC0000,0x90000000,0x31FC0000,0x15C0000,0x9FC0000,0x87FC0000,0xAC000001,0x9FC0000,0x87FC0000,0xAC000001,0x87FC0000,0xAC000001,0xAC000001,0x9FC0000,0x87FC0000,0xAC000001,0x87FC0000,0xAC000001, -0xAC000001,0x87FC0000,0xAC000001,0xAC000001,0xAC000001,0x9FC0000,0x87FC0000,0xAC000001,0x87FC0000,0xAC000001,0xAC000001,0x87FC0000,0xAC000001,0xAC000001,0xAC000001,0x87FC0000,0xAC000001,0xAC000001,0xAC000001,0xAC000001,0x1B40000,0x1740000,0x1740000,0x39FC0000,0x77FC0000,0x99FC0000,0xAC000001,0xAC000001,0x1D80000,0x53FC0000,0xA9E40000,0xAC000001, -0x67FC0000,0x1080F1A,0xFCF0065A,0xC8EC05EA,0xACEC05EB,0xFED40376,0xD0D401C3,0xB0D8028A,0xBAD0034A,0xAAD001BE,0x9ED0034A,0xFCB805F1,0xD8B40153,0xB2C4020D,0xC0B001B2,0xACB40006,0xA0B801BD,0xACB405EA,0xA4A8020F,0x9AAC0286,0x90B405ED,0x1880F1A,0xE08405EB,0xAEB405EB,0xD268034A,0xAE8C01B6,0x9E9C034A,0xC64805EB,0xAC600154,0x9C6C01C5,0x927C05ED,0x49F80F1A, -0xAC0805EB,0x9C000356,0x9000061E,0x82000F1E,0xFEE4068A,0xF9000BEA,0xFB040CAA,0xFEC400EA,0xE4B40003,0xC2B40002,0xAEBC0023,0xA8B00025,0xFED40612,0xFEB0008D,0xB2A8015B,0x9C6C01C5,0x19FC0F1A,0x12405EA,0xFD080156,0xC3080152,0xAD080153,0xEEF001A6,0xC8EC0001,0xAEF8002A,0xB2EC01A6,0xA8EC004B,0x9EEC01A6,0x3B005EA,0xD2BC0153,0xACE00153,0xC6A001A5,0xACB80002, -0x9EC801A5,0x5DFC05EA,0xAC600153,0x9E4801A5,0x900005ED,0x3B005EA,0xD2BC0153,0xACE00153,0xC6A001A5,0xACB80002,0x9EC801A5,0x5DFC05EA,0xAC600153,0x9E4801A5,0x900005ED,0x5DFC05EA,0xAC600153,0x9E4801A5,0x900005ED,0x900005ED,0xFF0002B2,0xF71C0492,0xF9200483,0xFED40072,0xE4B40003,0xC2B40002,0xAEC80002,0xACA0000B,0xFCEC02D4,0xFEB80048,0xB4980152,0x9E4801A5, -0x33FC05EA,0xEC05EA,0xEC05EA,0xEC05EA,0xEC05EA,0xE4D001A5,0xE4D001A5,0xE4D001A5,0xA4D001A5,0xA4D001A5,0x90D001A5,0xD8B40152,0xD8B40152,0xD8B40152,0xAAB40005,0xAAB40005,0x92C0004C,0x98B40152,0x98B40152,0x8CB40029,0x82B40154,0x35C05EA,0x35C05EA,0x35C05EA,0xB68401A5,0xB68401A5,0x90A801A5,0xAA680153,0xAA680153,0x907C0002,0x828C0154,0x33FC05EA, -0x33FC05EA,0x902801A5,0x820C0154,0x740005ED,0xFED80248,0xFAE4043D,0xEC05EA,0xFEBC0054,0xE2B40002,0xC2B40002,0xB8B8000C,0xA4B40001,0xFEBC020C,0xFEA40031,0xAEA80152,0x907C0002,0x1F405EA,0x1080152,0x1080152,0x1080152,0x1080152,0xC2F00001,0xC2F00001,0xC2F00001,0x9CF00001,0x9CF00001,0x90EC0001,0x1880152,0x1880152,0x1880152,0xA6C00001,0xA6C00001, -0x90D40000,0x49F80152,0x49F80152,0x90840000,0x82000154,0x1880152,0x1880152,0x1880152,0xA6C00001,0xA6C00001,0x90D40000,0x49F80152,0x49F80152,0x90840000,0x82000154,0x49F80152,0x49F80152,0x90840000,0x82000154,0x82000154,0xFAEC0071,0xF90000A2,0x1080152,0xF6CC0019,0xDABC0000,0xBCBC0001,0xB0C40000,0xA4B00000,0xFED00088,0xFEB0000D,0x19FC0152,0x90840000, -0x19FC0152,0x14001A5,0xE7240001,0xBB240001,0xAD200002,0x1D801A5,0xC8EC0000,0xAD080001,0x71F801A5,0xACB00001,0x9E0001A5,0x1D801A5,0xC8EC0000,0xAD080001,0x71F801A5,0xACB00001,0x9E0001A5,0x71F801A5,0xACB00001,0x9E0001A5,0x9E0001A5,0x1D801A5,0xC8EC0000,0xAD080001,0x71F801A5,0xACB00001,0x9E0001A5,0x71F801A5,0xACB00001,0x9E0001A5,0x9E0001A5,0x71F801A5, -0xACB00001,0x9E0001A5,0x9E0001A5,0x9E0001A5,0xFF1400E1,0x15401A5,0xF5380109,0xFED80028,0xEAA80000,0xC4AC0000,0xACD00001,0xAC840001,0xF70800DD,0xFEC00012,0xB2D40000,0x9E0001A5,0x4BFC01A5,0xD001A5,0xD001A5,0xD001A5,0xD001A5,0xD001A5,0xD001A5,0xD001A5,0xD001A5,0xD001A5,0xD001A5,0xB0B40000,0xB0B40000,0xB0B40000,0xB0B40000,0xB0B40000, -0xB0B40000,0x84B40000,0x84B40000,0x84B40000,0x76B40000,0x13401A5,0x13401A5,0x13401A5,0x13401A5,0x13401A5,0x13401A5,0x927C0000,0x927C0000,0x927C0000,0x76980000,0x1FF801A5,0x1FF801A5,0x1FF801A5,0x763C0000,0x680001A5,0xFCC800B5,0xD001A5,0xD001A5,0xFCB80014,0xE6B40000,0xC6B40000,0xC6B40000,0xA0B40000,0xF8B00080,0xFEA0000A,0x94AC0000,0x927C0000, -0x1B801A5,}; -static const uint32_t g_etc1_to_bc7_m6_table113[] = { -0xC40000,0xC40000,0xC40000,0xC40000,0xC40000,0xC40000,0xC40000,0xC40000,0xC40000,0xC40000,0xC40000,0xC40000,0xC40000,0xC40000,0xC40000,0xC40000,0xC40000,0xC40000,0xC40000,0xC40000,0x1240000,0x1240000,0x1240000,0x1240000,0x1240000,0x1240000,0x1240000,0x1240000,0x1240000,0x1240000,0x17F80000, -0x17F80000,0x17F80000,0x17F80000,0x60000001,0xC40000,0xC40000,0xC40000,0xC40000,0xC40000,0xC40000,0xC40000,0xC40000,0xD00000,0xD00000,0xD00000,0x1240000,0x1A00000,0xFC0001,0xFC0001,0xFC0001,0xFC0001,0xFC0001,0xFC0001,0xFC0001,0xFC0001,0xFC0001,0xFC0001,0x1780000,0x1780000,0x1780000,0x1780000,0x1780000, -0x1780000,0x41FC0000,0x41FC0000,0x41FC0000,0x7E000000,0x1780000,0x1780000,0x1780000,0x1780000,0x1780000,0x1780000,0x41FC0000,0x41FC0000,0x41FC0000,0x7E000000,0x41FC0000,0x41FC0000,0x41FC0000,0x7E000000,0x7E000000,0xF0C0000,0xFC0001,0xFC0001,0x1280000,0x33C0000,0x1580000,0x1580000,0x1AC0000,0x1280000,0x33C0000,0xFFC0000,0x41FC0000, -0xFFC0000,0x1300001,0x1300001,0x1300001,0x1300001,0x3C40000,0x3C40000,0x3C40000,0x67FC0000,0x67FC0000,0x98000000,0x3C40000,0x3C40000,0x3C40000,0x67FC0000,0x67FC0000,0x98000000,0x67FC0000,0x67FC0000,0x98000000,0x98000000,0x3C40000,0x3C40000,0x3C40000,0x67FC0000,0x67FC0000,0x98000000,0x67FC0000,0x67FC0000,0x98000000,0x98000000,0x67FC0000, -0x67FC0000,0x98000000,0x98000000,0x98000000,0x1640000,0xB440000,0x1300001,0x1A00000,0x5FC0000,0x3FFC0000,0x55F80000,0x75F80000,0x1800000,0x3C40000,0x3FFC0000,0x98000000,0x3FFC0000,0x16C0000,0x23FC0000,0x93FC0000,0xB4000001,0x23FC0000,0x93FC0000,0xB4000001,0x93FC0000,0xB4000001,0xB4000001,0x23FC0000,0x93FC0000,0xB4000001,0x93FC0000,0xB4000001, -0xB4000001,0x93FC0000,0xB4000001,0xB4000001,0xB4000001,0x23FC0000,0x93FC0000,0xB4000001,0x93FC0000,0xB4000001,0xB4000001,0x93FC0000,0xB4000001,0xB4000001,0xB4000001,0x93FC0000,0xB4000001,0xB4000001,0xB4000001,0xB4000001,0x1C80000,0x1840000,0x1840000,0x4DFC0000,0x85FC0000,0xA5F00000,0xB4000001,0xB4000001,0x1F00000,0x65FC0000,0xB1F40000,0xB4000001, -0x77FC0000,0x1180F1A,0xFF000686,0xD0FC05EA,0xB4FC05EB,0xFEE8039E,0xD8E401C3,0xB8E8028A,0xC2E0034A,0xB2E001BE,0xA6E0034A,0xFCCC0606,0xE0C40153,0xBAD4020D,0xC8C001B2,0xB4C40006,0xA8C801BD,0xB4C405EA,0xACB8020F,0xA2BC0286,0x98C405ED,0x1A00F1A,0xE89405EB,0xB6C405EB,0xDA78034A,0xB69C01B6,0xA6AC034A,0xCE5805EB,0xB4700154,0xA47C01C5,0x9A8C05ED,0x55F80F1A, -0xB41805EB,0xA600034A,0x98000606,0x8A000F1E,0xFEF806F7,0xFF0C0BFA,0xFF0C0CEA,0xFED80150,0xECC40003,0xCAC40002,0xB6CC0023,0xB0C00025,0xFEE006BA,0xFEC000D3,0xBAB8015B,0xA47C01C5,0x27FC0F1A,0x13405EA,0xFF180162,0xCB180152,0xB5180153,0xF70001A6,0xD0FC0001,0xB708002A,0xBAFC01A6,0xB0FC004B,0xA6FC01A6,0x1C805EA,0xDACC0153,0xB4F00153,0xCEB001A5,0xB4C80002, -0xA6D801A5,0x69FC05EA,0xB4700153,0xA65801A5,0x980005ED,0x1C805EA,0xDACC0153,0xB4F00153,0xCEB001A5,0xB4C80002,0xA6D801A5,0x69FC05EA,0xB4700153,0xA65801A5,0x980005ED,0x69FC05EA,0xB4700153,0xA65801A5,0x980005ED,0x980005ED,0xFF1402D5,0xFF2C0492,0xFF2C048B,0xFCE800A5,0xECC40003,0xCAC40002,0xB6D80002,0xB4B0000B,0xFEF802F6,0xFEC80065,0xBCA80152,0xA65801A5, -0x41FC05EA,0xFC05EA,0xFC05EA,0xFC05EA,0xFC05EA,0xECE001A5,0xECE001A5,0xECE001A5,0xACE001A5,0xACE001A5,0x98E001A5,0xE0C40152,0xE0C40152,0xE0C40152,0xB2C40005,0xB2C40005,0x9AD0004C,0xA0C40152,0xA0C40152,0x94C40029,0x8AC40154,0x37405EA,0x37405EA,0x37405EA,0xBE9401A5,0xBE9401A5,0x98B801A5,0xB2780153,0xB2780153,0x988C0002,0x8A9C0154,0x3FFC05EA, -0x3FFC05EA,0x983801A5,0x8A1C0154,0x7C0005ED,0xFEE80269,0xF4F80466,0xFC05EA,0xFED40071,0xEAC40002,0xCAC40002,0xC0C8000C,0xACC40001,0xFED00229,0xFEBC0048,0xB6B80152,0x988C0002,0xDFC05EA,0x1180152,0x1180152,0x1180152,0x1180152,0xCB000001,0xCB000001,0xCB000001,0xA5000001,0xA5000001,0x98FC0001,0x1A00152,0x1A00152,0x1A00152,0xAED00001,0xAED00001, -0x98E40000,0x55F80152,0x55F80152,0x98940000,0x8A000154,0x1A00152,0x1A00152,0x1A00152,0xAED00001,0xAED00001,0x98E40000,0x55F80152,0x55F80152,0x98940000,0x8A000154,0x55F80152,0x55F80152,0x98940000,0x8A000154,0x8A000154,0xF7000080,0xFF0C00AA,0x1180152,0xFEDC0019,0xE2CC0000,0xC4CC0001,0xB8D40000,0xACC00000,0xF8EC0091,0xFEC40012,0x27FC0152,0x98940000, -0x27FC0152,0x15001A5,0xEF340001,0xC3340001,0xB5300002,0x1F001A5,0xD0FC0000,0xB5180001,0x7DF801A5,0xB4C00001,0xA60001A5,0x1F001A5,0xD0FC0000,0xB5180001,0x7DF801A5,0xB4C00001,0xA60001A5,0x7DF801A5,0xB4C00001,0xA60001A5,0xA60001A5,0x1F001A5,0xD0FC0000,0xB5180001,0x7DF801A5,0xB4C00001,0xA60001A5,0x7DF801A5,0xB4C00001,0xA60001A5,0xA60001A5,0x7DF801A5, -0xB4C00001,0xA60001A5,0xA60001A5,0xA60001A5,0xFB2C00F2,0x16401A5,0xFD480109,0xFEF40034,0xF2B80000,0xCCBC0000,0xB4E00001,0xB4940001,0xFF1800DD,0xFED80022,0xBAE40000,0xA60001A5,0x5BFC01A5,0xE001A5,0xE001A5,0xE001A5,0xE001A5,0xE001A5,0xE001A5,0xE001A5,0xE001A5,0xE001A5,0xE001A5,0xB8C40000,0xB8C40000,0xB8C40000,0xB8C40000,0xB8C40000, -0xB8C40000,0x8CC40000,0x8CC40000,0x8CC40000,0x7EC40000,0x14C01A5,0x14C01A5,0x14C01A5,0x14C01A5,0x14C01A5,0x14C01A5,0x9A8C0000,0x9A8C0000,0x9A8C0000,0x7EA80000,0x2BF801A5,0x2BF801A5,0x2BF801A5,0x7E4C0000,0x700001A5,0xF4D800C8,0xE001A5,0xE001A5,0xFECC0019,0xEEC40000,0xCEC40000,0xCEC40000,0xA8C40000,0xFEBC0088,0xFEB4000D,0x9CBC0000,0x9A8C0000, -0x1DC01A5,}; -static const uint32_t g_etc1_to_bc7_m6_table114[] = { -0xD40000,0xD40000,0xD40000,0xD40000,0xD40000,0xD40000,0xD40000,0xD40000,0xD40000,0xD40000,0xD40000,0xD40000,0xD40000,0xD40000,0xD40000,0xD40000,0xD40000,0xD40000,0xD40000,0xD40000,0x13C0000,0x13C0000,0x13C0000,0x13C0000,0x13C0000,0x13C0000,0x13C0000,0x13C0000,0x13C0000,0x13C0000,0x21FC0000, -0x21FC0000,0x21FC0000,0x21FC0000,0x68000001,0xD40000,0xD40000,0xD40000,0xD40000,0xD40000,0xD40000,0xD40000,0xD40000,0x8E00000,0x8E00000,0x8E00000,0x13C0000,0x1C00000,0x10C0001,0x10C0001,0x10C0001,0x10C0001,0x10C0001,0x10C0001,0x10C0001,0x10C0001,0x10C0001,0x10C0001,0x1900000,0x1900000,0x1900000,0x1900000,0x1900000, -0x1900000,0x4DFC0000,0x4DFC0000,0x4DFC0000,0x86000000,0x1900000,0x1900000,0x1900000,0x1900000,0x1900000,0x1900000,0x4DFC0000,0x4DFC0000,0x4DFC0000,0x86000000,0x4DFC0000,0x4DFC0000,0x4DFC0000,0x86000000,0x86000000,0x1200000,0x10C0001,0x10C0001,0x5380000,0x5500000,0x1700000,0x1700000,0x1C40000,0x5380000,0x5500000,0x1FF80000,0x4DFC0000, -0x1FF80000,0x1400001,0x1400001,0x1400001,0x1400001,0x3DC0000,0x3DC0000,0x3DC0000,0x73FC0000,0x73FC0000,0xA0000000,0x3DC0000,0x3DC0000,0x3DC0000,0x73FC0000,0x73FC0000,0xA0000000,0x73FC0000,0x73FC0000,0xA0000000,0xA0000000,0x3DC0000,0x3DC0000,0x3DC0000,0x73FC0000,0x73FC0000,0xA0000000,0x73FC0000,0x73FC0000,0xA0000000,0xA0000000,0x73FC0000, -0x73FC0000,0xA0000000,0xA0000000,0xA0000000,0x5740000,0x1580000,0x1400001,0x3B40000,0x19FC0000,0x4FFC0000,0x61FC0000,0x7FFC0000,0x1940000,0x3DC0000,0x4FFC0000,0xA0000000,0x4FFC0000,0x17C0000,0x3BFC0000,0x9FF80000,0xBC000001,0x3BFC0000,0x9FF80000,0xBC000001,0x9FF80000,0xBC000001,0xBC000001,0x3BFC0000,0x9FF80000,0xBC000001,0x9FF80000,0xBC000001, -0xBC000001,0x9FF80000,0xBC000001,0xBC000001,0xBC000001,0x3BFC0000,0x9FF80000,0xBC000001,0x9FF80000,0xBC000001,0xBC000001,0x9FF80000,0xBC000001,0xBC000001,0xBC000001,0x9FF80000,0xBC000001,0xBC000001,0xBC000001,0xBC000001,0x1DC0000,0x3940000,0x3940000,0x61FC0000,0x93F80000,0xAFF00000,0xBC000001,0xBC000001,0xDFC0000,0x75FC0000,0xBBC80000,0xBC000001, -0x85FC0000,0x1280F1A,0xFF1006D7,0xD90C05EA,0xBD0C05EB,0xFEF803F2,0xE0F401C3,0xC0F8028A,0xCAF0034A,0xBAF001BE,0xAEF0034A,0xFEE00629,0xE8D40153,0xC2E4020D,0xD0D001B2,0xBCD40006,0xB0D801BD,0xBCD405EA,0xB4C8020F,0xAACC0286,0xA0D405ED,0x1B80F1A,0xF0A405EB,0xBED405EB,0xE288034A,0xBEAC01B6,0xAEBC034A,0xD66805EB,0xBC800154,0xAC8C01C5,0xA29C05ED,0x61F80F1A, -0xBC2805EB,0xAE0C034A,0xA00005F1,0x92000F1E,0xFF0C0766,0xF9200C4A,0xFB240CF3,0xFEEC01C5,0xF4D40003,0xD2D40002,0xBEDC0023,0xB8D00025,0xFEF806FA,0xFED4013A,0xC2C8015B,0xAC8C01C5,0x37FC0F1A,0x14405EA,0xFD2C017E,0xD3280152,0xBD280153,0xFF1001A6,0xD90C0001,0xBF18002A,0xC30C01A6,0xB90C004B,0xAF0C01A6,0x1E005EA,0xE2DC0153,0xBD000153,0xD6C001A5,0xBCD80002, -0xAEE801A5,0x75FC05EA,0xBC800153,0xAE6801A5,0xA00005ED,0x1E005EA,0xE2DC0153,0xBD000153,0xD6C001A5,0xBCD80002,0xAEE801A5,0x75FC05EA,0xBC800153,0xAE6801A5,0xA00005ED,0x75FC05EA,0xBC800153,0xAE6801A5,0xA00005ED,0xA00005ED,0xFF200312,0xF73C04BE,0xF94004B2,0xFEF800DE,0xF4D40003,0xD2D40002,0xBEE80002,0xBCC0000B,0xFD140322,0xFEE000A1,0xC4B80152,0xAE6801A5, -0x51FC05EA,0x10C05EA,0x10C05EA,0x10C05EA,0x10C05EA,0xF4F001A5,0xF4F001A5,0xF4F001A5,0xB4F001A5,0xB4F001A5,0xA0F001A5,0xE8D40152,0xE8D40152,0xE8D40152,0xBAD40005,0xBAD40005,0xA2E0004C,0xA8D40152,0xA8D40152,0x9CD40029,0x92D40154,0x38C05EA,0x38C05EA,0x38C05EA,0xC6A401A5,0xC6A401A5,0xA0C801A5,0xBA880153,0xBA880153,0xA09C0002,0x92AC0154,0x4BFC05EA, -0x4BFC05EA,0xA04801A5,0x922C0154,0x840005ED,0xFEF402A9,0xFD080466,0x10C05EA,0xFCE400A5,0xF2D40002,0xD2D40002,0xC8D8000C,0xB4D40001,0xFEE40266,0xFED00062,0xBEC80152,0xA09C0002,0x1DF805EA,0x1280152,0x1280152,0x1280152,0x1280152,0xD3100001,0xD3100001,0xD3100001,0xAD100001,0xAD100001,0xA10C0001,0x1B80152,0x1B80152,0x1B80152,0xB6E00001,0xB6E00001, -0xA0F40000,0x61F80152,0x61F80152,0xA0A40000,0x92000154,0x1B80152,0x1B80152,0x1B80152,0xB6E00001,0xB6E00001,0xA0F40000,0x61F80152,0x61F80152,0xA0A40000,0x92000154,0x61F80152,0x61F80152,0xA0A40000,0x92000154,0x92000154,0xFF100080,0xF92000B5,0x1280152,0xFCF40029,0xEADC0000,0xCCDC0001,0xC0E40000,0xB4D00000,0xFEF80095,0xFEDC0019,0x37FC0152,0xA0A40000, -0x37FC0152,0x16001A5,0xF7440001,0xCB440001,0xBD400002,0xDFC01A5,0xD90C0000,0xBD280001,0x89F801A5,0xBCD00001,0xAE0001A5,0xDFC01A5,0xD90C0000,0xBD280001,0x89F801A5,0xBCD00001,0xAE0001A5,0x89F801A5,0xBCD00001,0xAE0001A5,0xAE0001A5,0xDFC01A5,0xD90C0000,0xBD280001,0x89F801A5,0xBCD00001,0xAE0001A5,0x89F801A5,0xBCD00001,0xAE0001A5,0xAE0001A5,0x89F801A5, -0xBCD00001,0xAE0001A5,0xAE0001A5,0xAE0001A5,0xF7400109,0x17801A5,0xF5580122,0xFD100048,0xFAC80000,0xD4CC0000,0xBCF00001,0xBCA40001,0xFF2C00F4,0xFEF0003A,0xC2F40000,0xAE0001A5,0x69FC01A5,0xF001A5,0xF001A5,0xF001A5,0xF001A5,0xF001A5,0xF001A5,0xF001A5,0xF001A5,0xF001A5,0xF001A5,0xC0D40000,0xC0D40000,0xC0D40000,0xC0D40000,0xC0D40000, -0xC0D40000,0x94D40000,0x94D40000,0x94D40000,0x86D40000,0x16401A5,0x16401A5,0x16401A5,0x16401A5,0x16401A5,0x16401A5,0xA29C0000,0xA29C0000,0xA29C0000,0x86B80000,0x37F801A5,0x37F801A5,0x37F801A5,0x865C0000,0x780001A5,0xFCE800C8,0xF001A5,0xF001A5,0xFED80028,0xF6D40000,0xD6D40000,0xD6D40000,0xB0D40000,0xFCD40091,0xFAC80019,0xA4CC0000,0xA29C0000, -0x1FC01A5,}; -static const uint32_t g_etc1_to_bc7_m6_table115[] = { -0xE40000,0xE40000,0xE40000,0xE40000,0xE40000,0xE40000,0xE40000,0xE40000,0xE40000,0xE40000,0xE40000,0xE40000,0xE40000,0xE40000,0xE40000,0xE40000,0xE40000,0xE40000,0xE40000,0xE40000,0x3500000,0x3500000,0x3500000,0x3500000,0x3500000,0x3500000,0x3500000,0x3500000,0x3500000,0x3500000,0x2DFC0000, -0x2DFC0000,0x2DFC0000,0x2DFC0000,0x70000001,0xE40000,0xE40000,0xE40000,0xE40000,0xE40000,0xE40000,0xE40000,0xE40000,0xF40000,0xF40000,0xF40000,0x3500000,0x1E40000,0x11C0001,0x11C0001,0x11C0001,0x11C0001,0x11C0001,0x11C0001,0x11C0001,0x11C0001,0x11C0001,0x11C0001,0x1A80000,0x1A80000,0x1A80000,0x1A80000,0x1A80000, -0x1A80000,0x59FC0000,0x59FC0000,0x59FC0000,0x8E000000,0x1A80000,0x1A80000,0x1A80000,0x1A80000,0x1A80000,0x1A80000,0x59FC0000,0x59FC0000,0x59FC0000,0x8E000000,0x59FC0000,0x59FC0000,0x59FC0000,0x8E000000,0x8E000000,0x1300000,0x11C0001,0x11C0001,0x14C0000,0x5640000,0x1840000,0x1840000,0x1E00000,0x14C0000,0x5640000,0x2DFC0000,0x59FC0000, -0x2DFC0000,0x1500001,0x1500001,0x1500001,0x1500001,0x3F40000,0x3F40000,0x3F40000,0x7FFC0000,0x7FFC0000,0xA8000000,0x3F40000,0x3F40000,0x3F40000,0x7FFC0000,0x7FFC0000,0xA8000000,0x7FFC0000,0x7FFC0000,0xA8000000,0xA8000000,0x3F40000,0x3F40000,0x3F40000,0x7FFC0000,0x7FFC0000,0xA8000000,0x7FFC0000,0x7FFC0000,0xA8000000,0xA8000000,0x7FFC0000, -0x7FFC0000,0xA8000000,0xA8000000,0xA8000000,0x1880000,0x1680000,0x1500001,0x1CC0000,0x2DFC0000,0x5FF80000,0x6FFC0000,0x8BF80000,0x1A80000,0x3F40000,0x5FF80000,0xA8000000,0x5FF80000,0x18C0000,0x53FC0000,0xABF80000,0xC4000001,0x53FC0000,0xABF80000,0xC4000001,0xABF80000,0xC4000001,0xC4000001,0x53FC0000,0xABF80000,0xC4000001,0xABF80000,0xC4000001, -0xC4000001,0xABF80000,0xC4000001,0xC4000001,0xC4000001,0x53FC0000,0xABF80000,0xC4000001,0xABF80000,0xC4000001,0xC4000001,0xABF80000,0xC4000001,0xC4000001,0xC4000001,0xABF80000,0xC4000001,0xC4000001,0xC4000001,0xC4000001,0x1F00000,0xBA40000,0xBA40000,0x73FC0000,0x9FFC0000,0xB9F00000,0xC4000001,0xC4000001,0x2BFC0000,0x87FC0000,0xC3D80000,0xC4000001, -0x95FC0000,0x1380F1A,0xFF24071A,0xE11C05EA,0xC51C05EB,0xFF0C043A,0xE90401C3,0xC908028A,0xD300034A,0xC30001BE,0xB700034A,0xFEF4065A,0xF0E40153,0xCAF4020D,0xD8E001B2,0xC4E40006,0xB8E801BD,0xC4E405EA,0xBCD8020F,0xB2DC0286,0xA8E405ED,0x1D00F1A,0xF8B405EB,0xC6E405EB,0xEA98034A,0xC6BC01B6,0xB6CC034A,0xDE7805EB,0xC4900154,0xB49C01C5,0xAAAC05ED,0x6DF80F1A, -0xC43805EB,0xB61C034A,0xA80005ED,0x9A000F1E,0xFF2007D6,0xFF2C0C62,0xFF2C0D3B,0xFF000242,0xFCE40003,0xDAE40002,0xC6EC0023,0xC0E00025,0xFF100782,0xFEE801CC,0xCAD8015B,0xB49C01C5,0x45FC0F1A,0x15405EA,0xFF3C019A,0xDB380152,0xC5380153,0xFF2401B2,0xE11C0001,0xC728002A,0xCB1C01A6,0xC11C004B,0xB71C01A6,0x1F805EA,0xEAEC0153,0xC5100153,0xDED001A5,0xC4E80002, -0xB6F801A5,0x81FC05EA,0xC4900153,0xB67801A5,0xA80005ED,0x1F805EA,0xEAEC0153,0xC5100153,0xDED001A5,0xC4E80002,0xB6F801A5,0x81FC05EA,0xC4900153,0xB67801A5,0xA80005ED,0x81FC05EA,0xC4900153,0xB67801A5,0xA80005ED,0xA80005ED,0xFF340333,0xFF4C04BE,0xFF4C04BE,0xFF140109,0xFCE40003,0xDAE40002,0xC6F80002,0xC4D0000B,0xFF240356,0xFD0000DD,0xCCC80152,0xB67801A5, -0x5FFC05EA,0x11C05EA,0x11C05EA,0x11C05EA,0x11C05EA,0xFD0001A5,0xFD0001A5,0xFD0001A5,0xBD0001A5,0xBD0001A5,0xA90001A5,0xF0E40152,0xF0E40152,0xF0E40152,0xC2E40005,0xC2E40005,0xAAF0004C,0xB0E40152,0xB0E40152,0xA4E40029,0x9AE40154,0x3A405EA,0x3A405EA,0x3A405EA,0xCEB401A5,0xCEB401A5,0xA8D801A5,0xC2980153,0xC2980153,0xA8AC0002,0x9ABC0154,0x57FC05EA, -0x57FC05EA,0xA85801A5,0x9A3C0154,0x8C0005ED,0xFF0402D2,0xF5180491,0x11C05EA,0xFEF800C9,0xFAE40002,0xDAE40002,0xD0E8000C,0xBCE40001,0xFEF80289,0xFEE00099,0xC6D80152,0xA8AC0002,0x2BFC05EA,0x1380152,0x1380152,0x1380152,0x1380152,0xDB200001,0xDB200001,0xDB200001,0xB5200001,0xB5200001,0xA91C0001,0x1D00152,0x1D00152,0x1D00152,0xBEF00001,0xBEF00001, -0xA9040000,0x6DF80152,0x6DF80152,0xA8B40000,0x9A000154,0x1D00152,0x1D00152,0x1D00152,0xBEF00001,0xBEF00001,0xA9040000,0x6DF80152,0x6DF80152,0xA8B40000,0x9A000154,0x6DF80152,0x6DF80152,0xA8B40000,0x9A000154,0x9A000154,0xFF200091,0xFF2C00C1,0x1380152,0xFD040034,0xF2EC0000,0xD4EC0001,0xC8F40000,0xBCE00000,0xFD1000A2,0xFCF00029,0x45FC0152,0xA8B40000, -0x45FC0152,0x17001A5,0xFF540001,0xD3540001,0xC5500002,0x25FC01A5,0xE11C0000,0xC5380001,0x95F801A5,0xC4E00001,0xB60001A5,0x25FC01A5,0xE11C0000,0xC5380001,0x95F801A5,0xC4E00001,0xB60001A5,0x95F801A5,0xC4E00001,0xB60001A5,0xB60001A5,0x25FC01A5,0xE11C0000,0xC5380001,0x95F801A5,0xC4E00001,0xB60001A5,0x95F801A5,0xC4E00001,0xB60001A5,0xB60001A5,0x95F801A5, -0xC4E00001,0xB60001A5,0xB60001A5,0xB60001A5,0xFF500109,0x18801A5,0xFD680122,0xFF200061,0xFCE40002,0xDCDC0000,0xC5000001,0xC4B40001,0xF5480109,0xFF100048,0xCB040000,0xB60001A5,0x79FC01A5,0x10001A5,0x10001A5,0x10001A5,0x10001A5,0x10001A5,0x10001A5,0x10001A5,0x10001A5,0x10001A5,0x10001A5,0xC8E40000,0xC8E40000,0xC8E40000,0xC8E40000,0xC8E40000, -0xC8E40000,0x9CE40000,0x9CE40000,0x9CE40000,0x8EE40000,0x17C01A5,0x17C01A5,0x17C01A5,0x17C01A5,0x17C01A5,0x17C01A5,0xAAAC0000,0xAAAC0000,0xAAAC0000,0x8EC80000,0x43F801A5,0x43F801A5,0x43F801A5,0x8E6C0000,0x800001A5,0xF4F800DD,0x10001A5,0x10001A5,0xFAEC0034,0xFEE40000,0xDEE40000,0xDEE40000,0xB8E40000,0xFCE400A2,0xFED80022,0xACDC0000,0xAAAC0000, -0x11FC01A5,}; -static const uint32_t g_etc1_to_bc7_m6_table116[] = { -0xF40001,0xF40001,0xF40001,0xF40001,0xF40001,0xF40001,0xF40001,0xF40001,0xF40001,0xF40001,0xF40001,0xF40001,0xF40001,0xF40001,0xF40001,0xF40001,0xF40001,0xF40001,0xF40001,0xF40001,0x16C0000,0x16C0000,0x16C0000,0x16C0000,0x16C0000,0x16C0000,0x16C0000,0x16C0000,0x16C0000,0x16C0000,0x3BFC0000, -0x3BFC0000,0x3BFC0000,0x3BFC0000,0x7A000000,0xF40001,0xF40001,0xF40001,0xF40001,0xF40001,0xF40001,0xF40001,0xF40001,0xB040000,0xB040000,0xB040000,0x16C0000,0x7FC0000,0x1300000,0x1300000,0x1300000,0x1300000,0x1300000,0x1300000,0x1300000,0x1300000,0x1300000,0x1300000,0x1C40000,0x1C40000,0x1C40000,0x1C40000,0x1C40000, -0x1C40000,0x67F80000,0x67F80000,0x67F80000,0x96000001,0x1C40000,0x1C40000,0x1C40000,0x1C40000,0x1C40000,0x1C40000,0x67F80000,0x67F80000,0x67F80000,0x96000001,0x67F80000,0x67F80000,0x67F80000,0x96000001,0x96000001,0x1440000,0x1300000,0x1300000,0x3600000,0x17C0000,0x19C0000,0x19C0000,0x3FC0000,0x3600000,0x17C0000,0x3FF80000,0x67F80000, -0x3FF80000,0x1640000,0x1640000,0x1640000,0x1640000,0x15FC0000,0x15FC0000,0x15FC0000,0x8DFC0000,0x8DFC0000,0xB0000001,0x15FC0000,0x15FC0000,0x15FC0000,0x8DFC0000,0x8DFC0000,0xB0000001,0x8DFC0000,0x8DFC0000,0xB0000001,0xB0000001,0x15FC0000,0x15FC0000,0x15FC0000,0x8DFC0000,0x8DFC0000,0xB0000001,0x8DFC0000,0x8DFC0000,0xB0000001,0xB0000001,0x8DFC0000, -0x8DFC0000,0xB0000001,0xB0000001,0xB0000001,0x59C0000,0x17C0000,0x1640000,0x1E40000,0x43FC0000,0x6FFC0000,0x7FF80000,0x97F80000,0x3BC0000,0x15FC0000,0x6FFC0000,0xB0000001,0x6FFC0000,0x19C0001,0x6FFC0000,0xB9F80000,0xCE000000,0x6FFC0000,0xB9F80000,0xCE000000,0xB9F80000,0xCE000000,0xCE000000,0x6FFC0000,0xB9F80000,0xCE000000,0xB9F80000,0xCE000000, -0xCE000000,0xB9F80000,0xCE000000,0xCE000000,0xCE000000,0x6FFC0000,0xB9F80000,0xCE000000,0xB9F80000,0xCE000000,0xCE000000,0xB9F80000,0xCE000000,0xCE000000,0xCE000000,0xB9F80000,0xCE000000,0xCE000000,0xCE000000,0xCE000000,0x15FC0000,0x5B80000,0x5B80000,0x8BFC0000,0xAFFC0000,0xC3F80000,0xCE000000,0xCE000000,0x4DFC0000,0x99FC0000,0xCDCC0000,0xCE000000, -0xA5FC0000,0x1480F1E,0xFF340795,0xEB2C05ED,0xCF2C05ED,0xFF2404B6,0xF31801C5,0xD31C0286,0xDB14034A,0xCD1001BD,0xC114034A,0xFF0C06AE,0xF8F80154,0xD508020F,0xE0F001B6,0xCCF80006,0xC0FC01BE,0xCEF405EB,0xC6EC020D,0xBAEC028A,0xB2F405EB,0x3E80F1A,0xFECC05F1,0xCEF805EA,0xF4A8034A,0xD0D001B2,0xC0DC034A,0xE69005EB,0xCEA00153,0xBEB001C3,0xB2C005EA,0x79FC0F1A, -0xCE4805EA,0xC02C034A,0xB21005EA,0xA4000F1A,0xFF340865,0xFB440CAA,0xFD480D3E,0xFF1402EF,0xFEFC0019,0xE2F80004,0xD1000025,0xCAF40023,0xFF240839,0xFF000256,0xD2E80159,0xBEB001C3,0x57FC0F1A,0x16405ED,0xFF5001C8,0xE34C0154,0xCF480154,0xFF3C01D5,0xE9300002,0xCF380029,0xD33001A5,0xC92C004C,0xC13001A5,0x19FC05EA,0xF4FC0153,0xCF200152,0xE6E401A5,0xCCF80005, -0xC10801A5,0x8FF805EA,0xCE9C0152,0xC08801A5,0xB20005EA,0x19FC05EA,0xF4FC0153,0xCF200152,0xE6E401A5,0xCCF80005,0xC10801A5,0x8FF805EA,0xCE9C0152,0xC08801A5,0xB20005EA,0x8FF805EA,0xCE9C0152,0xC08801A5,0xB20005EA,0xB20005EA,0xFF500376,0xF96004ED,0xFB6404E4,0xFF2C016D,0xFEFC0010,0xE2F80003,0xCF080001,0xCCE0000C,0xFD40039E,0xFF180122,0xD4DC0152,0xC08801A5, -0x71FC05EA,0x12C05ED,0x12C05ED,0x12C05ED,0x12C05ED,0xFD1401A9,0xFD1401A9,0xFD1401A9,0xC51401A5,0xC51401A5,0xB11401A6,0xF8F80153,0xF8F80153,0xF8F80153,0xCCF80002,0xCCF80002,0xB300004B,0xB8F80153,0xB8F80153,0xACF4002A,0xA4F40153,0x1C005EA,0x1C005EA,0x1C005EA,0xD8C401A5,0xD8C401A5,0xB0EC01A6,0xCAAC0153,0xCAAC0153,0xB2C00001,0xA4CC0152,0x65F805EA, -0x65F805EA,0xB06C01A6,0xA4480152,0x960005EA,0xFF2002FE,0xFD280492,0x12C05ED,0xFF080103,0xFEF80003,0xE0F80002,0xD8F8000B,0xC4F40002,0xFF0C02D3,0xFEF400CA,0xCEEC0153,0xB2C00001,0x3DF805EA,0x1480154,0x1480154,0x1480154,0x1480154,0xE7300000,0xE7300000,0xE7300000,0xBF300000,0xBF300000,0xB1300001,0x3E80152,0x3E80152,0x3E80152,0xC9000001,0xC9000001, -0xB1180001,0x79FC0152,0x79FC0152,0xB0C80001,0xA4000152,0x3E80152,0x3E80152,0x3E80152,0xC9000001,0xC9000001,0xB1180001,0x79FC0152,0x79FC0152,0xB0C80001,0xA4000152,0x79FC0152,0x79FC0152,0xB0C80001,0xA4000152,0xA4000152,0xFB3400A4,0xFB4400C8,0x1480154,0xFF180041,0xFCFC0000,0xDEFC0000,0xD1080000,0xC6F00000,0xF92800B5,0xFF04003A,0x57FC0152,0xB0C80001, -0x57FC0152,0x18001A5,0xFF680008,0xDD640000,0xCF640000,0x41FC01A5,0xEB2C0000,0xCF480000,0xA1FC01A5,0xCEEC0000,0xC00001A5,0x41FC01A5,0xEB2C0000,0xCF480000,0xA1FC01A5,0xCEEC0000,0xC00001A5,0xA1FC01A5,0xCEEC0000,0xC00001A5,0xC00001A5,0x41FC01A5,0xEB2C0000,0xCF480000,0xA1FC01A5,0xCEEC0000,0xC00001A5,0xA1FC01A5,0xCEEC0000,0xC00001A5,0xC00001A5,0xA1FC01A5, -0xCEEC0000,0xC00001A5,0xC00001A5,0xC00001A5,0xFD680120,0x19C01A5,0xF77C0139,0xFF400071,0xFEFC0010,0xE4F00000,0xCF100000,0xCEC00000,0xFF5C0109,0xFF2C0064,0xD3180000,0xC00001A5,0x89FC01A5,0x11401A5,0x11401A5,0x11401A5,0x11401A5,0x11401A5,0x11401A5,0x11401A5,0x11401A5,0x11401A5,0x11401A5,0xD0F80001,0xD0F80001,0xD0F80001,0xD0F80001,0xD0F80001, -0xD0F80001,0xA4F80001,0xA4F80001,0xA4F80001,0x96F40002,0x19801A5,0x19801A5,0x19801A5,0x19801A5,0x19801A5,0x19801A5,0xB2C00000,0xB2C00000,0xB2C00000,0x96DC0001,0x51F801A5,0x51F801A5,0x51F801A5,0x96840001,0x880001A5,0xFF0C00DD,0x11401A5,0x11401A5,0xFD00003D,0xFEF80002,0xE4F80001,0xE4F80001,0xC0F80001,0xFEF400AA,0xFAF00032,0xB4F00001,0xB2C00000, -0x21FC01A5,}; -static const uint32_t g_etc1_to_bc7_m6_table117[] = { -0x1040001,0x1040001,0x1040001,0x1040001,0x1040001,0x1040001,0x1040001,0x1040001,0x1040001,0x1040001,0x1040001,0x1040001,0x1040001,0x1040001,0x1040001,0x1040001,0x1040001,0x1040001,0x1040001,0x1040001,0x1840000,0x1840000,0x1840000,0x1840000,0x1840000,0x1840000,0x1840000,0x1840000,0x1840000,0x1840000,0x47FC0000, -0x47FC0000,0x47FC0000,0x47FC0000,0x82000000,0x1040001,0x1040001,0x1040001,0x1040001,0x1040001,0x1040001,0x1040001,0x1040001,0x1180000,0x1180000,0x1180000,0x1840000,0x17FC0000,0x1400000,0x1400000,0x1400000,0x1400000,0x1400000,0x1400000,0x1400000,0x1400000,0x1400000,0x1400000,0x1DC0000,0x1DC0000,0x1DC0000,0x1DC0000,0x1DC0000, -0x1DC0000,0x73F80000,0x73F80000,0x73F80000,0x9E000001,0x1DC0000,0x1DC0000,0x1DC0000,0x1DC0000,0x1DC0000,0x1DC0000,0x73F80000,0x73F80000,0x73F80000,0x9E000001,0x73F80000,0x73F80000,0x73F80000,0x9E000001,0x9E000001,0x3540000,0x1400000,0x1400000,0x1740000,0x1900000,0x1B40000,0x1B40000,0x17FC0000,0x1740000,0x1900000,0x4DFC0000,0x73F80000, -0x4DFC0000,0x1740000,0x1740000,0x1740000,0x1740000,0x2FFC0000,0x2FFC0000,0x2FFC0000,0x99FC0000,0x99FC0000,0xB8000001,0x2FFC0000,0x2FFC0000,0x2FFC0000,0x99FC0000,0x99FC0000,0xB8000001,0x99FC0000,0x99FC0000,0xB8000001,0xB8000001,0x2FFC0000,0x2FFC0000,0x2FFC0000,0x99FC0000,0x99FC0000,0xB8000001,0x99FC0000,0x99FC0000,0xB8000001,0xB8000001,0x99FC0000, -0x99FC0000,0xB8000001,0xB8000001,0xB8000001,0x1B00000,0x18C0000,0x1740000,0x3F80000,0x57FC0000,0x7FF80000,0x8BFC0000,0xA1FC0000,0x5D00000,0x2FFC0000,0x7FF80000,0xB8000001,0x7FF80000,0x1AC0001,0x87FC0000,0xC5F80000,0xD6000000,0x87FC0000,0xC5F80000,0xD6000000,0xC5F80000,0xD6000000,0xD6000000,0x87FC0000,0xC5F80000,0xD6000000,0xC5F80000,0xD6000000, -0xD6000000,0xC5F80000,0xD6000000,0xD6000000,0xD6000000,0x87FC0000,0xC5F80000,0xD6000000,0xC5F80000,0xD6000000,0xD6000000,0xC5F80000,0xD6000000,0xD6000000,0xD6000000,0xC5F80000,0xD6000000,0xD6000000,0xD6000000,0xD6000000,0x3DFC0000,0xDC80000,0xDC80000,0x9DFC0000,0xBDF80000,0xCDF80000,0xD6000000,0xD6000000,0x6BFC0000,0xABFC0000,0xD5DC0000,0xD6000000, -0xB5FC0000,0x1580F1E,0xFF4407E9,0xF33C05ED,0xD73C05ED,0xFF300542,0xFB2801C5,0xDB2C0286,0xE324034A,0xD52001BD,0xC924034A,0xFF240716,0xFF080155,0xDD18020F,0xE90001B6,0xD5080006,0xC90C01BE,0xD70405EB,0xCEFC020D,0xC2FC028A,0xBB0405EB,0x7FC0F1A,0xFEE40611,0xD70805EA,0xFCB8034A,0xD8E001B2,0xC8EC034A,0xEEA005EB,0xD6B00153,0xC6C001C3,0xBAD005EA,0x85FC0F1A, -0xD65805EA,0xC83C034A,0xBA2005EA,0xAC000F1A,0xFF4408FE,0xFF4C0CEA,0xF5580D89,0xFF2C03A6,0xFF10005D,0xEB080004,0xD9100025,0xD3040023,0xFF340886,0xFF180302,0xDAF80159,0xC6C001C3,0x65FC0F1A,0x17405ED,0xFF60020D,0xEB5C0154,0xD7580154,0xFF5001FD,0xF1400002,0xD7480029,0xDB4001A5,0xD13C004C,0xC94001A5,0x31FC05EA,0xFD0C0153,0xD7300152,0xEEF401A5,0xD5080005, -0xC91801A5,0x9BF805EA,0xD6AC0152,0xC89801A5,0xBA0005EA,0x31FC05EA,0xFD0C0153,0xD7300152,0xEEF401A5,0xD5080005,0xC91801A5,0x9BF805EA,0xD6AC0152,0xC89801A5,0xBA0005EA,0x9BF805EA,0xD6AC0152,0xC89801A5,0xBA0005EA,0xBA0005EA,0xFF5803C9,0xFF6C04F5,0xFF6C0504,0xFF4001AA,0xFF18003B,0xEB080003,0xD7180001,0xD4F0000C,0xFF5403C9,0xFF2C017D,0xDCEC0152,0xC89801A5, -0x7FFC05EA,0x13C05ED,0x13C05ED,0x13C05ED,0x13C05ED,0xFF2401B5,0xFF2401B5,0xFF2401B5,0xCD2401A5,0xCD2401A5,0xB92401A6,0xFD080155,0xFD080155,0xFD080155,0xD5080002,0xD5080002,0xBB10004B,0xC1080153,0xC1080153,0xB504002A,0xAD040153,0x1D805EA,0x1D805EA,0x1D805EA,0xE0D401A5,0xE0D401A5,0xB8FC01A6,0xD2BC0153,0xD2BC0153,0xBAD00001,0xACDC0152,0x71F805EA, -0x71F805EA,0xB87C01A6,0xAC580152,0x9E0005EA,0xFF2C032B,0xF53804C1,0x13C05ED,0xFF1C0141,0xFF0C0013,0xE9080002,0xE108000B,0xCD040002,0xFF2002F9,0xFF100109,0xD6FC0153,0xBAD00001,0x4BFC05EA,0x1580154,0x1580154,0x1580154,0x1580154,0xEF400000,0xEF400000,0xEF400000,0xC7400000,0xC7400000,0xB9400001,0x7FC0152,0x7FC0152,0x7FC0152,0xD1100001,0xD1100001, -0xB9280001,0x85FC0152,0x85FC0152,0xB8D80001,0xAC000152,0x7FC0152,0x7FC0152,0x7FC0152,0xD1100001,0xD1100001,0xB9280001,0x85FC0152,0x85FC0152,0xB8D80001,0xAC000152,0x85FC0152,0x85FC0152,0xB8D80001,0xAC000152,0xAC000152,0xF74800B5,0xF35400DD,0x1580154,0xFD300055,0xFD140002,0xE70C0000,0xD9180000,0xCF000000,0xFF3400B9,0xFD200048,0x65FC0152,0xB8D80001, -0x65FC0152,0x19001A5,0xFF78001D,0xE5740000,0xD7740000,0x59FC01A5,0xF33C0000,0xD7580000,0xADFC01A5,0xD6FC0000,0xC80001A5,0x59FC01A5,0xF33C0000,0xD7580000,0xADFC01A5,0xD6FC0000,0xC80001A5,0xADFC01A5,0xD6FC0000,0xC80001A5,0xC80001A5,0x59FC01A5,0xF33C0000,0xD7580000,0xADFC01A5,0xD6FC0000,0xC80001A5,0xADFC01A5,0xD6FC0000,0xC80001A5,0xC80001A5,0xADFC01A5, -0xD6FC0000,0xC80001A5,0xC80001A5,0xC80001A5,0xFF780122,0x1AC01A5,0xFF8C0139,0xFF580091,0xFF240020,0xED000000,0xD7200000,0xD6D00000,0xFF700120,0xFF40007D,0xDB280000,0xC80001A5,0x99FC01A5,0x12401A5,0x12401A5,0x12401A5,0x12401A5,0x12401A5,0x12401A5,0x12401A5,0x12401A5,0x12401A5,0x12401A5,0xD9080001,0xD9080001,0xD9080001,0xD9080001,0xD9080001, -0xD9080001,0xAD080001,0xAD080001,0xAD080001,0x9F040002,0x1B001A5,0x1B001A5,0x1B001A5,0x1B001A5,0x1B001A5,0x1B001A5,0xBAD00000,0xBAD00000,0xBAD00000,0x9EEC0001,0x5DF401A5,0x5DF401A5,0x5DF401A5,0x9E940001,0x900001A5,0xF71C00F2,0x12401A5,0x12401A5,0xFF10004A,0xFD08000A,0xED080001,0xED080001,0xC9080001,0xFD0C00B5,0xFF00003D,0xBD000001,0xBAD00000, -0x31FC01A5,}; -static const uint32_t g_etc1_to_bc7_m6_table118[] = { -0x1140001,0x1140001,0x1140001,0x1140001,0x1140001,0x1140001,0x1140001,0x1140001,0x1140001,0x1140001,0x1140001,0x1140001,0x1140001,0x1140001,0x1140001,0x1140001,0x1140001,0x1140001,0x1140001,0x1140001,0x19C0000,0x19C0000,0x19C0000,0x19C0000,0x19C0000,0x19C0000,0x19C0000,0x19C0000,0x19C0000,0x19C0000,0x53FC0000, -0x53FC0000,0x53FC0000,0x53FC0000,0x8A000000,0x1140001,0x1140001,0x1140001,0x1140001,0x1140001,0x1140001,0x1140001,0x1140001,0x1280000,0x1280000,0x1280000,0x19C0000,0x25FC0000,0x1500000,0x1500000,0x1500000,0x1500000,0x1500000,0x1500000,0x1500000,0x1500000,0x1500000,0x1500000,0x1F40000,0x1F40000,0x1F40000,0x1F40000,0x1F40000, -0x1F40000,0x7FF80000,0x7FF80000,0x7FF80000,0xA6000001,0x1F40000,0x1F40000,0x1F40000,0x1F40000,0x1F40000,0x1F40000,0x7FF80000,0x7FF80000,0x7FF80000,0xA6000001,0x7FF80000,0x7FF80000,0x7FF80000,0xA6000001,0xA6000001,0xB640000,0x1500000,0x1500000,0x7840000,0x1A40000,0x1C80000,0x1C80000,0x2BFC0000,0x7840000,0x1A40000,0x5DF80000,0x7FF80000, -0x5DF80000,0x1840000,0x1840000,0x1840000,0x1840000,0x47FC0000,0x47FC0000,0x47FC0000,0xA5F80000,0xA5F80000,0xC0000001,0x47FC0000,0x47FC0000,0x47FC0000,0xA5F80000,0xA5F80000,0xC0000001,0xA5F80000,0xA5F80000,0xC0000001,0xC0000001,0x47FC0000,0x47FC0000,0x47FC0000,0xA5F80000,0xA5F80000,0xC0000001,0xA5F80000,0xA5F80000,0xC0000001,0xC0000001,0xA5F80000, -0xA5F80000,0xC0000001,0xC0000001,0xC0000001,0x1C40000,0x79C0000,0x1840000,0x1BFC0000,0x6BFC0000,0x8DFC0000,0x99FC0000,0xADF80000,0x5E40000,0x47FC0000,0x8DFC0000,0xC0000001,0x8DFC0000,0x1BC0001,0x9FFC0000,0xD1F80000,0xDE000000,0x9FFC0000,0xD1F80000,0xDE000000,0xD1F80000,0xDE000000,0xDE000000,0x9FFC0000,0xD1F80000,0xDE000000,0xD1F80000,0xDE000000, -0xDE000000,0xD1F80000,0xDE000000,0xDE000000,0xDE000000,0x9FFC0000,0xD1F80000,0xDE000000,0xD1F80000,0xDE000000,0xDE000000,0xD1F80000,0xDE000000,0xDE000000,0xDE000000,0xD1F80000,0xDE000000,0xDE000000,0xDE000000,0xDE000000,0x63FC0000,0x1DC0000,0x1DC0000,0xB1FC0000,0xC9FC0000,0xD7F80000,0xDE000000,0xDE000000,0x89FC0000,0xBBFC0000,0xDDEC0000,0xDE000000, -0xC3FC0000,0x1680F1E,0xFF5C0861,0xFB4C05ED,0xDF4C05ED,0xFF4405BA,0xFF3801D5,0xE33C0286,0xEB34034A,0xDD3001BD,0xD134034A,0xFF300786,0xFF1C017C,0xE528020F,0xF11001B6,0xDD180006,0xD11C01BE,0xDF1405EB,0xD70C020D,0xCB0C028A,0xC31405EB,0x1FFC0F1A,0xFEFC0651,0xDF1805EA,0xFED4035A,0xE0F001B2,0xD0FC034A,0xF6B005EB,0xDEC00153,0xCED001C3,0xC2E005EA,0x91FC0F1A, -0xDE6805EA,0xD04C034A,0xC23005EA,0xB4000F1A,0xFF58097A,0xFB640D0E,0xFD680D89,0xFF400463,0xFF2400D1,0xF3180004,0xE1200025,0xDB140023,0xFF440933,0xFF3003D3,0xE3080159,0xCED001C3,0x75FC0F1A,0x18405ED,0xFF740248,0xF36C0154,0xDF680154,0xFF5C0239,0xF9500002,0xDF580029,0xE35001A5,0xD94C004C,0xD15001A5,0x49FC05EA,0xFF280163,0xDF400152,0xF70401A5,0xDD180005, -0xD12801A5,0xA7F805EA,0xDEBC0152,0xD0A801A5,0xC20005EA,0x49FC05EA,0xFF280163,0xDF400152,0xF70401A5,0xDD180005,0xD12801A5,0xA7F805EA,0xDEBC0152,0xD0A801A5,0xC20005EA,0xA7F805EA,0xDEBC0152,0xD0A801A5,0xC20005EA,0xC20005EA,0xFD7403F6,0xF980051D,0xFB840515,0xFF540209,0xFF30007D,0xF3180003,0xDF280001,0xDD00000C,0xFF5C040A,0xFF4801C4,0xE4FC0152,0xD0A801A5, -0x8FFC05EA,0x14C05ED,0x14C05ED,0x14C05ED,0x14C05ED,0xFD3801D5,0xFD3801D5,0xFD3801D5,0xD53401A5,0xD53401A5,0xC13401A6,0xFF1C0163,0xFF1C0163,0xFF1C0163,0xDD180002,0xDD180002,0xC320004B,0xC9180153,0xC9180153,0xBD14002A,0xB5140153,0x1F005EA,0x1F005EA,0x1F005EA,0xE8E401A5,0xE8E401A5,0xC10C01A6,0xDACC0153,0xDACC0153,0xC2E00001,0xB4EC0152,0x7DF805EA, -0x7DF805EA,0xC08C01A6,0xB4680152,0xA60005EA,0xFF3C035D,0xFD4804C1,0x14C05ED,0xFF2C0182,0xFF200033,0xF1180002,0xE918000B,0xD5140002,0xFF340322,0xFF1C014E,0xDF0C0153,0xC2E00001,0x5BFC05EA,0x1680154,0x1680154,0x1680154,0x1680154,0xF7500000,0xF7500000,0xF7500000,0xCF500000,0xCF500000,0xC1500001,0x1FFC0152,0x1FFC0152,0x1FFC0152,0xD9200001,0xD9200001, -0xC1380001,0x91FC0152,0x91FC0152,0xC0E80001,0xB4000152,0x1FFC0152,0x1FFC0152,0x1FFC0152,0xD9200001,0xD9200001,0xC1380001,0x91FC0152,0x91FC0152,0xC0E80001,0xB4000152,0x91FC0152,0x91FC0152,0xC0E80001,0xB4000152,0xB4000152,0xFF5800B5,0xFB6400DD,0x1680154,0xFF440062,0xFD28000A,0xEF1C0000,0xE1280000,0xD7100000,0xFD4C00C8,0xFF300059,0x75FC0152,0xC0E80001, -0x75FC0152,0x1A001A5,0xFF8C0034,0xED840000,0xDF840000,0x71FC01A5,0xFB4C0000,0xDF680000,0xB9FC01A5,0xDF0C0000,0xD00001A5,0x71FC01A5,0xFB4C0000,0xDF680000,0xB9FC01A5,0xDF0C0000,0xD00001A5,0xB9FC01A5,0xDF0C0000,0xD00001A5,0xD00001A5,0x71FC01A5,0xFB4C0000,0xDF680000,0xB9FC01A5,0xDF0C0000,0xD00001A5,0xB9FC01A5,0xDF0C0000,0xD00001A5,0xD00001A5,0xB9FC01A5, -0xDF0C0000,0xD00001A5,0xD00001A5,0xD00001A5,0xFD900139,0x1BC01A5,0xF79C0154,0xFF6C00AA,0xFF3C003A,0xF5100000,0xDF300000,0xDEE00000,0xF7880139,0xFF6400A2,0xE3380000,0xD00001A5,0xA7FC01A5,0x13401A5,0x13401A5,0x13401A5,0x13401A5,0x13401A5,0x13401A5,0x13401A5,0x13401A5,0x13401A5,0x13401A5,0xE1180001,0xE1180001,0xE1180001,0xE1180001,0xE1180001, -0xE1180001,0xB5180001,0xB5180001,0xB5180001,0xA7140002,0x1C801A5,0x1C801A5,0x1C801A5,0x1C801A5,0x1C801A5,0x1C801A5,0xC2E00000,0xC2E00000,0xC2E00000,0xA6FC0001,0x67FC01A5,0x67FC01A5,0x67FC01A5,0xA6A40001,0x980001A5,0xFF2C00F2,0x13401A5,0x13401A5,0xFF200059,0xFD1C0012,0xF5180001,0xF5180001,0xD1180001,0xFD1C00C8,0xFF140048,0xC5100001,0xC2E00000, -0x3FFC01A5,}; -static const uint32_t g_etc1_to_bc7_m6_table119[] = { -0x1240001,0x1240001,0x1240001,0x1240001,0x1240001,0x1240001,0x1240001,0x1240001,0x1240001,0x1240001,0x1240001,0x1240001,0x1240001,0x1240001,0x1240001,0x1240001,0x1240001,0x1240001,0x1240001,0x1240001,0x1B40000,0x1B40000,0x1B40000,0x1B40000,0x1B40000,0x1B40000,0x1B40000,0x1B40000,0x1B40000,0x1B40000,0x5FF80000, -0x5FF80000,0x5FF80000,0x5FF80000,0x92000000,0x1240001,0x1240001,0x1240001,0x1240001,0x1240001,0x1240001,0x1240001,0x1240001,0x5380000,0x5380000,0x5380000,0x1B40000,0x35FC0000,0x1600000,0x1600000,0x1600000,0x1600000,0x1600000,0x1600000,0x1600000,0x1600000,0x1600000,0x1600000,0xFFC0000,0xFFC0000,0xFFC0000,0xFFC0000,0xFFC0000, -0xFFC0000,0x8BF80000,0x8BF80000,0x8BF80000,0xAE000001,0xFFC0000,0xFFC0000,0xFFC0000,0xFFC0000,0xFFC0000,0xFFC0000,0x8BF80000,0x8BF80000,0x8BF80000,0xAE000001,0x8BF80000,0x8BF80000,0x8BF80000,0xAE000001,0xAE000001,0x1780000,0x1600000,0x1600000,0x3980000,0x1B80000,0x3DC0000,0x3DC0000,0x3DFC0000,0x3980000,0x1B80000,0x6BFC0000,0x8BF80000, -0x6BFC0000,0x1940000,0x1940000,0x1940000,0x1940000,0x5FFC0000,0x5FFC0000,0x5FFC0000,0xB1F80000,0xB1F80000,0xC8000001,0x5FFC0000,0x5FFC0000,0x5FFC0000,0xB1F80000,0xB1F80000,0xC8000001,0xB1F80000,0xB1F80000,0xC8000001,0xC8000001,0x5FFC0000,0x5FFC0000,0x5FFC0000,0xB1F80000,0xB1F80000,0xC8000001,0xB1F80000,0xB1F80000,0xC8000001,0xC8000001,0xB1F80000, -0xB1F80000,0xC8000001,0xC8000001,0xC8000001,0x3D40000,0xFAC0000,0x1940000,0x39FC0000,0x7DFC0000,0x9DF80000,0xA7F80000,0xB7FC0000,0x5F80000,0x5FFC0000,0x9DF80000,0xC8000001,0x9DF80000,0x1CC0001,0xB7FC0000,0xDDF40000,0xE6000000,0xB7FC0000,0xDDF40000,0xE6000000,0xDDF40000,0xE6000000,0xE6000000,0xB7FC0000,0xDDF40000,0xE6000000,0xDDF40000,0xE6000000, -0xE6000000,0xDDF40000,0xE6000000,0xE6000000,0xE6000000,0xB7FC0000,0xDDF40000,0xE6000000,0xDDF40000,0xE6000000,0xE6000000,0xDDF40000,0xE6000000,0xE6000000,0xE6000000,0xDDF40000,0xE6000000,0xE6000000,0xE6000000,0xE6000000,0x8BFC0000,0x1EC0000,0x1EC0000,0xC5FC0000,0xD7FC0000,0xE1FC0000,0xE6000000,0xE6000000,0xA7FC0000,0xCDFC0000,0xE5FC0000,0xE6000000, -0xD3FC0000,0x1780F1E,0xFF6808D9,0xFF6005F1,0xE75C05ED,0xFF5C0662,0xFF480215,0xEB4C0286,0xF344034A,0xE54001BD,0xD944034A,0xFF4407F7,0xFF3401DC,0xED38020F,0xF92001B6,0xE5280006,0xD92C01BE,0xE72405EB,0xDF1C020D,0xD31C028A,0xCB2405EB,0x37FC0F1A,0xFF1406B1,0xE72805EA,0xFEF00392,0xE90001B2,0xD90C034A,0xFEC005EB,0xE6D00153,0xD6E001C3,0xCAF005EA,0x9DFC0F1A, -0xE67805EA,0xD85C034A,0xCA4005EA,0xBC000F1A,0xFF6409F4,0xFF6C0D5E,0xF5780DD6,0xFF54052A,0xFF380175,0xFB280004,0xE9300025,0xE3240023,0xFF5C09AA,0xFF40048F,0xEB180159,0xD6E001C3,0x83FC0F1A,0x19405ED,0xFF8402A5,0xFB7C0154,0xE7780154,0xFF740279,0xFF600004,0xE7680029,0xEB6001A5,0xE15C004C,0xD96001A5,0x63FC05EA,0xFF40018B,0xE7500152,0xFF1401A5,0xE5280005, -0xD93801A5,0xB3F805EA,0xE6CC0152,0xD8B801A5,0xCA0005EA,0x63FC05EA,0xFF40018B,0xE7500152,0xFF1401A5,0xE5280005,0xD93801A5,0xB3F805EA,0xE6CC0152,0xD8B801A5,0xCA0005EA,0xB3F805EA,0xE6CC0152,0xD8B801A5,0xCA0005EA,0xCA0005EA,0xFF800435,0xFF8C052D,0xFF8C053D,0xFF6C026A,0xFF4800CE,0xFB280003,0xE7380001,0xE510000C,0xFF78042A,0xFF5C022E,0xED0C0152,0xD8B801A5, -0x9FF805EA,0x15C05ED,0x15C05ED,0x15C05ED,0x15C05ED,0xFF4801F1,0xFF4801F1,0xFF4801F1,0xDD4401A5,0xDD4401A5,0xC94401A6,0xFF30017D,0xFF30017D,0xFF30017D,0xE5280002,0xE5280002,0xCB30004B,0xD1280153,0xD1280153,0xC524002A,0xBD240153,0xDFC05EA,0xDFC05EA,0xDFC05EA,0xF0F401A5,0xF0F401A5,0xC91C01A6,0xE2DC0153,0xE2DC0153,0xCAF00001,0xBCFC0152,0x89F805EA, -0x89F805EA,0xC89C01A6,0xBC780152,0xAE0005EA,0xFF4C038A,0xF75C04EE,0x15C05ED,0xFF4401C3,0xFF300062,0xF9280002,0xF128000B,0xDD240002,0xFF3C0371,0xFF300182,0xE71C0153,0xCAF00001,0x69FC05EA,0x1780154,0x1780154,0x1780154,0x1780154,0xFF600000,0xFF600000,0xFF600000,0xD7600000,0xD7600000,0xC9600001,0x37FC0152,0x37FC0152,0x37FC0152,0xE1300001,0xE1300001, -0xC9480001,0x9DFC0152,0x9DFC0152,0xC8F80001,0xBC000152,0x37FC0152,0x37FC0152,0x37FC0152,0xE1300001,0xE1300001,0xC9480001,0x9DFC0152,0x9DFC0152,0xC8F80001,0xBC000152,0x9DFC0152,0x9DFC0152,0xC8F80001,0xBC000152,0xBC000152,0xFB6C00C8,0xF37400F4,0x1780154,0xFD580071,0xFF400012,0xF72C0000,0xE9380000,0xDF200000,0xF56400DD,0xFF480064,0x83FC0152,0xC8F80001, -0x83FC0152,0x1B001A5,0xFF9C0061,0xF5940000,0xE7940000,0x89FC01A5,0xFF640002,0xE7780000,0xC5FC01A5,0xE71C0000,0xD80001A5,0x89FC01A5,0xFF640002,0xE7780000,0xC5FC01A5,0xE71C0000,0xD80001A5,0xC5FC01A5,0xE71C0000,0xD80001A5,0xD80001A5,0x89FC01A5,0xFF640002,0xE7780000,0xC5FC01A5,0xE71C0000,0xD80001A5,0xC5FC01A5,0xE71C0000,0xD80001A5,0xD80001A5,0xC5FC01A5, -0xE71C0000,0xD80001A5,0xD80001A5,0xD80001A5,0xF7A40152,0x1CC01A5,0xFFAC0154,0xFF8400D0,0xFF640062,0xFD200000,0xE7400000,0xE6F00000,0xFF980139,0xFD8000C8,0xEB480000,0xD80001A5,0xB7FC01A5,0x14401A5,0x14401A5,0x14401A5,0x14401A5,0x14401A5,0x14401A5,0x14401A5,0x14401A5,0x14401A5,0x14401A5,0xE9280001,0xE9280001,0xE9280001,0xE9280001,0xE9280001, -0xE9280001,0xBD280001,0xBD280001,0xBD280001,0xAF240002,0x1E001A5,0x1E001A5,0x1E001A5,0x1E001A5,0x1E001A5,0x1E001A5,0xCAF00000,0xCAF00000,0xCAF00000,0xAF0C0001,0x73FC01A5,0x73FC01A5,0x73FC01A5,0xAEB40001,0xA00001A5,0xF73C0109,0x14401A5,0x14401A5,0xFB340071,0xFB2C0022,0xFD280001,0xFD280001,0xD9280001,0xF93000DD,0xFF200061,0xCD200001,0xCAF00000, -0x4FFC01A5,}; -static const uint32_t g_etc1_to_bc7_m6_table120[] = { -0x1380000,0x1380000,0x1380000,0x1380000,0x1380000,0x1380000,0x1380000,0x1380000,0x1380000,0x1380000,0x1380000,0x1380000,0x1380000,0x1380000,0x1380000,0x1380000,0x1380000,0x1380000,0x1380000,0x1380000,0x1D00000,0x1D00000,0x1D00000,0x1D00000,0x1D00000,0x1D00000,0x1D00000,0x1D00000,0x1D00000,0x1D00000,0x6DF80000, -0x6DF80000,0x6DF80000,0x6DF80000,0x9A000001,0x1380000,0x1380000,0x1380000,0x1380000,0x1380000,0x1380000,0x1380000,0x1380000,0x14C0000,0x14C0000,0x14C0000,0x1D00000,0x45FC0000,0x1700001,0x1700001,0x1700001,0x1700001,0x1700001,0x1700001,0x1700001,0x1700001,0x1700001,0x1700001,0x2BFC0000,0x2BFC0000,0x2BFC0000,0x2BFC0000,0x2BFC0000, -0x2BFC0000,0x97FC0000,0x97FC0000,0x97FC0000,0xB8000000,0x2BFC0000,0x2BFC0000,0x2BFC0000,0x2BFC0000,0x2BFC0000,0x2BFC0000,0x97FC0000,0x97FC0000,0x97FC0000,0xB8000000,0x97FC0000,0x97FC0000,0x97FC0000,0xB8000000,0xB8000000,0xD880000,0x1700001,0x1700001,0x5AC0000,0x1D00000,0x1F80000,0x1F80000,0x53FC0000,0x5AC0000,0x1D00000,0x7DF80000,0x97FC0000, -0x7DF80000,0x1A40001,0x1A40001,0x1A40001,0x1A40001,0x7BFC0000,0x7BFC0000,0x7BFC0000,0xBFF80000,0xBFF80000,0xD2000000,0x7BFC0000,0x7BFC0000,0x7BFC0000,0xBFF80000,0xBFF80000,0xD2000000,0xBFF80000,0xBFF80000,0xD2000000,0xD2000000,0x7BFC0000,0x7BFC0000,0x7BFC0000,0xBFF80000,0xBFF80000,0xD2000000,0xBFF80000,0xBFF80000,0xD2000000,0xD2000000,0xBFF80000, -0xBFF80000,0xD2000000,0xD2000000,0xD2000000,0x7E80000,0x9C00000,0x1A40001,0x5BFC0000,0x93FC0000,0xADFC0000,0xB5FC0000,0xC3FC0000,0x29FC0000,0x7BFC0000,0xADFC0000,0xD2000000,0xADFC0000,0x1E00000,0xD3FC0000,0xE9FC0000,0xEE000001,0xD3FC0000,0xE9FC0000,0xEE000001,0xE9FC0000,0xEE000001,0xEE000001,0xD3FC0000,0xE9FC0000,0xEE000001,0xE9FC0000,0xEE000001, -0xEE000001,0xE9FC0000,0xEE000001,0xEE000001,0xEE000001,0xD3FC0000,0xE9FC0000,0xEE000001,0xE9FC0000,0xEE000001,0xEE000001,0xE9FC0000,0xEE000001,0xEE000001,0xEE000001,0xE9FC0000,0xEE000001,0xEE000001,0xEE000001,0xEE000001,0xB7FC0000,0x17FC0000,0x17FC0000,0xDBFC0000,0xE7F80000,0xEDF40000,0xEE000001,0xEE000001,0xC9FC0000,0xE1FC0000,0xEFF00000,0xEE000001, -0xE3FC0000,0x18C0F1A,0xFF800983,0xFF70062A,0xEF7005EB,0xFF680746,0xFF6002AB,0xF35C028A,0xFD54034A,0xED5401BE,0xE154034A,0xFF5C0899,0xFF4C028C,0xF548020D,0xFF3801BA,0xEF380006,0xE33C01BD,0xEF3805EA,0xE72C020F,0xDD300286,0xD33805ED,0x53FC0F1A,0xFF38073B,0xF13805EB,0xFF140416,0xF11001B6,0xE120034A,0xFEE40615,0xEEE40154,0xDEF001C5,0xD50005ED,0xABF80F1A, -0xEE8C05EB,0xE070034A,0xD25405ED,0xC4000F1E,0xFF780A99,0xFD880D72,0xFD880DDA,0xFF6C0649,0xFF500261,0xFF3C001F,0xF1400023,0xEB340025,0xFF700A53,0xFF54059A,0xF52C015B,0xDEF001C5,0x95FC0F1A,0x1A805EA,0xFF980303,0xFF8C0162,0xEF8C0153,0xFF8C02DE,0xFF78003B,0xF17C002A,0xF57001A6,0xEB70004B,0xE17001A6,0x7DFC05EA,0xFF5801E4,0xEF640153,0xFF3801BA,0xEF3C0002, -0xE14C01A5,0xBFFC05EA,0xEEE40153,0xE0CC01A5,0xD20005ED,0x7DFC05EA,0xFF5801E4,0xEF640153,0xFF3801BA,0xEF3C0002,0xE14C01A5,0xBFFC05EA,0xEEE40153,0xE0CC01A5,0xD20005ED,0xBFFC05EA,0xEEE40153,0xE0CC01A5,0xD20005ED,0xD20005ED,0xFF94046D,0xFBA4054E,0xFBA4054B,0xFF8002E8,0xFF680146,0xFF400011,0xF14C0002,0xEF24000B,0xFD940481,0xFF7402C9,0xF71C0152,0xE0CC01A5, -0xAFFC05EA,0x17005EA,0x17005EA,0x17005EA,0x17005EA,0xFF5C0221,0xFF5C0221,0xFF5C0221,0xE75401A5,0xE75401A5,0xD35401A5,0xFF4401A8,0xFF4401A8,0xFF4401A8,0xED380005,0xED380005,0xD544004C,0xDB380152,0xDB380152,0xCF380029,0xC5380154,0x29FC05EA,0x29FC05EA,0x29FC05EA,0xF90801A5,0xF90801A5,0xD32C01A5,0xECEC0153,0xECEC0153,0xD3000002,0xC5100154,0x97F805EA, -0x97F805EA,0xD2AC01A5,0xC4900154,0xB60005ED,0xFD6403CC,0xFF6C04ED,0x17005EA,0xFF540211,0xFF4400AD,0xFF3C0006,0xFB3C000C,0xE7380001,0xFF58039E,0xFD4C01E2,0xF12C0152,0xD3000002,0x7BFC05EA,0x18C0152,0x18C0152,0x18C0152,0x18C0152,0xFF740005,0xFF740005,0xFF740005,0xDF740001,0xDF740001,0xD3700001,0x53FC0152,0x53FC0152,0x53FC0152,0xE9440001,0xE9440001, -0xD3580000,0xABF80152,0xABF80152,0xD3080000,0xC4000154,0x53FC0152,0x53FC0152,0x53FC0152,0xE9440001,0xE9440001,0xD3580000,0xABF80152,0xABF80152,0xD3080000,0xC4000154,0xABF80152,0xABF80152,0xD3080000,0xC4000154,0xC4000154,0xF78000DD,0xFD8800F2,0x18C0152,0xFB700091,0xFF540028,0xFF400001,0xF3480000,0xE7340000,0xFD7400DD,0xFF5C007D,0x95FC0152,0xD3080000, -0x95FC0152,0x1C401A5,0xFFB00092,0xFDA80001,0xEFA40002,0xA5FC01A5,0xFF880020,0xEF8C0001,0xD3FC01A5,0xEF340001,0xE00001A5,0xA5FC01A5,0xFF880020,0xEF8C0001,0xD3FC01A5,0xEF340001,0xE00001A5,0xD3FC01A5,0xEF340001,0xE00001A5,0xE00001A5,0xA5FC01A5,0xFF880020,0xEF8C0001,0xD3FC01A5,0xEF340001,0xE00001A5,0xD3FC01A5,0xEF340001,0xE00001A5,0xE00001A5,0xD3FC01A5, -0xEF340001,0xE00001A5,0xE00001A5,0xE00001A5,0xFFB40154,0x1E001A5,0xF9C0016D,0xFFA000FA,0xFF7C0092,0xFF48000A,0xEF540001,0xEF080001,0xFFAC015A,0xFF9400E9,0xF5580000,0xE00001A5,0xC7FC01A5,0x15401A5,0x15401A5,0x15401A5,0x15401A5,0x15401A5,0x15401A5,0x15401A5,0x15401A5,0x15401A5,0x15401A5,0xF3380000,0xF3380000,0xF3380000,0xF3380000,0xF3380000, -0xF3380000,0xC7380000,0xC7380000,0xC7380000,0xB9380000,0x1F801A5,0x1F801A5,0x1F801A5,0x1F801A5,0x1F801A5,0x1F801A5,0xD5000000,0xD5000000,0xD5000000,0xB91C0000,0x81FC01A5,0x81FC01A5,0x81FC01A5,0xB8C00000,0xAA0001A5,0xFF4C010D,0x15401A5,0x15401A5,0xFD480080,0xFD400034,0xFF3C0005,0xFF3C0005,0xE3380000,0xFF3C00E9,0xFF3C0071,0xD7300000,0xD5000000, -0x5FFC01A5,}; -static const uint32_t g_etc1_to_bc7_m6_table121[] = { -0x1480000,0x1480000,0x1480000,0x1480000,0x1480000,0x1480000,0x1480000,0x1480000,0x1480000,0x1480000,0x1480000,0x1480000,0x1480000,0x1480000,0x1480000,0x1480000,0x1480000,0x1480000,0x1480000,0x1480000,0x1E80000,0x1E80000,0x1E80000,0x1E80000,0x1E80000,0x1E80000,0x1E80000,0x1E80000,0x1E80000,0x1E80000,0x79F80000, -0x79F80000,0x79F80000,0x79F80000,0xA2000001,0x1480000,0x1480000,0x1480000,0x1480000,0x1480000,0x1480000,0x1480000,0x1480000,0x75C0000,0x75C0000,0x75C0000,0x1E80000,0x55FC0000,0x1800001,0x1800001,0x1800001,0x1800001,0x1800001,0x1800001,0x1800001,0x1800001,0x1800001,0x1800001,0x43FC0000,0x43FC0000,0x43FC0000,0x43FC0000,0x43FC0000, -0x43FC0000,0xA3FC0000,0xA3FC0000,0xA3FC0000,0xC0000000,0x43FC0000,0x43FC0000,0x43FC0000,0x43FC0000,0x43FC0000,0x43FC0000,0xA3FC0000,0xA3FC0000,0xA3FC0000,0xC0000000,0xA3FC0000,0xA3FC0000,0xA3FC0000,0xC0000000,0xC0000000,0x19C0000,0x1800001,0x1800001,0x1C00000,0x1E40000,0x17FC0000,0x17FC0000,0x67FC0000,0x1C00000,0x1E40000,0x8BFC0000,0xA3FC0000, -0x8BFC0000,0x1B40001,0x1B40001,0x1B40001,0x1B40001,0x93FC0000,0x93FC0000,0x93FC0000,0xCBF80000,0xCBF80000,0xDA000000,0x93FC0000,0x93FC0000,0x93FC0000,0xCBF80000,0xCBF80000,0xDA000000,0xCBF80000,0xCBF80000,0xDA000000,0xDA000000,0x93FC0000,0x93FC0000,0x93FC0000,0xCBF80000,0xCBF80000,0xDA000000,0xCBF80000,0xCBF80000,0xDA000000,0xDA000000,0xCBF80000, -0xCBF80000,0xDA000000,0xDA000000,0xDA000000,0x3FC0000,0x1D40000,0x1B40001,0x79FC0000,0xA7FC0000,0xBDF80000,0xC3FC0000,0xCFF80000,0x51FC0000,0x93FC0000,0xBDF80000,0xDA000000,0xBDF80000,0x1F00000,0xEBFC0000,0xF5FC0000,0xF6000001,0xEBFC0000,0xF5FC0000,0xF6000001,0xF5FC0000,0xF6000001,0xF6000001,0xEBFC0000,0xF5FC0000,0xF6000001,0xF5FC0000,0xF6000001, -0xF6000001,0xF5FC0000,0xF6000001,0xF6000001,0xF6000001,0xEBFC0000,0xF5FC0000,0xF6000001,0xF5FC0000,0xF6000001,0xF6000001,0xF5FC0000,0xF6000001,0xF6000001,0xF6000001,0xF5FC0000,0xF6000001,0xF6000001,0xF6000001,0xF6000001,0xDFFC0000,0x97FC0000,0x97FC0000,0xEFFC0000,0xF5F80000,0xF7F40000,0xF6000001,0xF6000001,0xE7FC0000,0xF1FC0000,0xF9C40000,0xF6000001, -0xF3FC0000,0x19C0F1A,0xFF8C0A17,0xFF84069F,0xF78005EB,0xFF8007FE,0xFF700371,0xFB6C028A,0xFF640362,0xF56401BE,0xE964034A,0xFF740939,0xFF60036B,0xFD58020D,0xFF4C021D,0xF7480006,0xEB4C01BD,0xF74805EA,0xEF3C020F,0xE5400286,0xDB4805ED,0x6BFC0F1A,0xFF4C07E9,0xF94805EB,0xFF2C04BE,0xF92001B6,0xE930034A,0xFF080675,0xF6F40154,0xE70001C5,0xDD1005ED,0xB7F80F1A, -0xF69C05EB,0xE880034A,0xDA6405ED,0xCC000F1E,0xFF8C0B22,0xF5980DDA,0xF79C0E27,0xFF800738,0xFF680366,0xFF540098,0xF9500023,0xF3440025,0xFF800AF5,0xFF7006AA,0xFD3C015B,0xE70001C5,0xA3FC0F1A,0x1B805EA,0xFFA8037E,0xFFA0019A,0xF79C0153,0xFF980356,0xFF8800A9,0xF98C002A,0xFD8001A6,0xF380004B,0xE98001A6,0x95FC05EA,0xFF7C0248,0xF7740153,0xFF580205,0xF74C0002, -0xE95C01A5,0xCBFC05EA,0xF6F40153,0xE8DC01A5,0xDA0005ED,0x95FC05EA,0xFF7C0248,0xF7740153,0xFF580205,0xF74C0002,0xE95C01A5,0xCBFC05EA,0xF6F40153,0xE8DC01A5,0xDA0005ED,0xCBFC05EA,0xF6F40153,0xE8DC01A5,0xDA0005ED,0xDA0005ED,0xFBAC04B5,0xFFAC057E,0xF5B8057E,0xFF940349,0xFF7C01D6,0xFF5C005E,0xF95C0002,0xF734000B,0xFFA404B5,0xFF900329,0xFF2C0152,0xE8DC01A5, -0xBFF805EA,0x18005EA,0x18005EA,0x18005EA,0x18005EA,0xFF6C0266,0xFF6C0266,0xFF6C0266,0xEF6401A5,0xEF6401A5,0xDB6401A5,0xFF5C01E8,0xFF5C01E8,0xFF5C01E8,0xF5480005,0xF5480005,0xDD54004C,0xE3480152,0xE3480152,0xD7480029,0xCD480154,0x41FC05EA,0x41FC05EA,0x41FC05EA,0xFF1C01A6,0xFF1C01A6,0xDB3C01A5,0xF4FC0153,0xF4FC0153,0xDB100002,0xCD200154,0xA1FC05EA, -0xA1FC05EA,0xDABC01A5,0xCCA00154,0xBE0005ED,0xFF7403FE,0xF77C051E,0x18005EA,0xFF68026D,0xFF5800F9,0xFF50002D,0xFF4C000D,0xEF480001,0xFF6403EA,0xFF5C022E,0xF93C0152,0xDB100002,0x89FC05EA,0x19C0152,0x19C0152,0x19C0152,0x19C0152,0xFD880019,0xFD880019,0xFD880019,0xE7840001,0xE7840001,0xDB800001,0x6BFC0152,0x6BFC0152,0x6BFC0152,0xF1540001,0xF1540001, -0xDB680000,0xB7F80152,0xB7F80152,0xDB180000,0xCC000154,0x6BFC0152,0x6BFC0152,0x6BFC0152,0xF1540001,0xF1540001,0xDB680000,0xB7F80152,0xB7F80152,0xDB180000,0xCC000154,0xB7F80152,0xB7F80152,0xDB180000,0xCC000154,0xCC000154,0xFF9000DD,0xF5980109,0x19C0152,0xFD8400A2,0xFF70003D,0xFF58000A,0xFB580000,0xEF440000,0xFD8800F2,0xFF740095,0xA3FC0152,0xDB180000, -0xA3FC0152,0x1D401A5,0xFFC400C1,0xFFB80011,0xF7B40002,0xBDFC01A5,0xFFA00050,0xF79C0001,0xDFF801A5,0xF7440001,0xE80001A5,0xBDFC01A5,0xFFA00050,0xF79C0001,0xDFF801A5,0xF7440001,0xE80001A5,0xDFF801A5,0xF7440001,0xE80001A5,0xE80001A5,0xBDFC01A5,0xFFA00050,0xF79C0001,0xDFF801A5,0xF7440001,0xE80001A5,0xDFF801A5,0xF7440001,0xE80001A5,0xE80001A5,0xDFF801A5, -0xF7440001,0xE80001A5,0xE80001A5,0xE80001A5,0xFDCC016D,0x1F001A5,0xFFCC0179,0xFDBC0122,0xFFA800C8,0xFF70003A,0xF7640001,0xF7180001,0xF7CC016D,0xFFB80120,0xFD680000,0xE80001A5,0xD7FC01A5,0x16401A5,0x16401A5,0x16401A5,0x16401A5,0x16401A5,0x16401A5,0x16401A5,0x16401A5,0x16401A5,0x16401A5,0xFB480000,0xFB480000,0xFB480000,0xFB480000,0xFB480000, -0xFB480000,0xCF480000,0xCF480000,0xCF480000,0xC1480000,0x15FC01A5,0x15FC01A5,0x15FC01A5,0x15FC01A5,0x15FC01A5,0x15FC01A5,0xDD100000,0xDD100000,0xDD100000,0xC12C0000,0x8DFC01A5,0x8DFC01A5,0x8DFC01A5,0xC0D00000,0xB20001A5,0xF9600120,0x16401A5,0x16401A5,0xFF580091,0xFF500041,0xFF4C000D,0xFF4C000D,0xEB480000,0xFD5400F2,0xFD4C0082,0xDF400000,0xDD100000, -0x6FFC01A5,}; -static const uint32_t g_etc1_to_bc7_m6_table122[] = { -0x1580000,0x1580000,0x1580000,0x1580000,0x1580000,0x1580000,0x1580000,0x1580000,0x1580000,0x1580000,0x1580000,0x1580000,0x1580000,0x1580000,0x1580000,0x1580000,0x1580000,0x1580000,0x1580000,0x1580000,0x3FC0000,0x3FC0000,0x3FC0000,0x3FC0000,0x3FC0000,0x3FC0000,0x3FC0000,0x3FC0000,0x3FC0000,0x3FC0000,0x85F80000, -0x85F80000,0x85F80000,0x85F80000,0xAA000001,0x1580000,0x1580000,0x1580000,0x1580000,0x1580000,0x1580000,0x1580000,0x1580000,0xF6C0000,0xF6C0000,0xF6C0000,0x3FC0000,0x63FC0000,0x1900001,0x1900001,0x1900001,0x1900001,0x1900001,0x1900001,0x1900001,0x1900001,0x1900001,0x1900001,0x5BFC0000,0x5BFC0000,0x5BFC0000,0x5BFC0000,0x5BFC0000, -0x5BFC0000,0xAFFC0000,0xAFFC0000,0xAFFC0000,0xC8000000,0x5BFC0000,0x5BFC0000,0x5BFC0000,0x5BFC0000,0x5BFC0000,0x5BFC0000,0xAFFC0000,0xAFFC0000,0xAFFC0000,0xC8000000,0xAFFC0000,0xAFFC0000,0xAFFC0000,0xC8000000,0xC8000000,0x1AC0000,0x1900001,0x1900001,0x1D40000,0x1F80000,0x35FC0000,0x35FC0000,0x7BFC0000,0x1D40000,0x1F80000,0x9BFC0000,0xAFFC0000, -0x9BFC0000,0x1C40001,0x1C40001,0x1C40001,0x1C40001,0xABFC0000,0xABFC0000,0xABFC0000,0xD7F80000,0xD7F80000,0xE2000000,0xABFC0000,0xABFC0000,0xABFC0000,0xD7F80000,0xD7F80000,0xE2000000,0xD7F80000,0xD7F80000,0xE2000000,0xE2000000,0xABFC0000,0xABFC0000,0xABFC0000,0xD7F80000,0xD7F80000,0xE2000000,0xD7F80000,0xD7F80000,0xE2000000,0xE2000000,0xD7F80000, -0xD7F80000,0xE2000000,0xE2000000,0xE2000000,0x3BFC0000,0x1E40000,0x1C40001,0x97FC0000,0xBBFC0000,0xCBFC0000,0xD1FC0000,0xD9FC0000,0x77FC0000,0xABFC0000,0xCBFC0000,0xE2000000,0xCBFC0000,0x1FC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000, -0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xF7FC0001,0xF7FC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFFF00000,0xFE000000, -0xFFFC0000,0x1AC0EC7,0xFF9C0A97,0xFF940717,0xFF9005EA,0xFF9808B1,0xFF84044E,0xFF8002A5,0xFF7C03A7,0xFD7401B9,0xF174032D,0xFF8C09AC,0xFF700455,0xFF680234,0xFF6402A2,0xFF580005,0xF35C01A4,0xFF5805B3,0xF74C01FE,0xED500261,0xE35805B4,0x83FC0EC7,0xFF640876,0xFF5805ED,0xFF4C057F,0xFF3801B9,0xF140032D,0xFF2C06C8,0xFF040153,0xEF1001A4,0xE32005B5,0xC3F80EC7, -0xFEAC05EA,0xF090032D,0xE27405B4,0xD4000EC9,0xFFA00B5D,0xFDA80D89,0xFDA80DDA,0xFF8807F3,0xFF7C0465,0xFF680153,0xFF600030,0xFB54001C,0xFF980B2F,0xFF800755,0xFF50016C,0xEF1001A4,0xB3FC0EC7,0x1C805B3,0xFFBC03B6,0xFFAC01FB,0xFFAC0152,0xFFB00389,0xFFA00122,0xFF98002D,0xFF94019B,0xFB900042,0xF1900189,0xAFFC05B3,0xFF9402A5,0xFF840152,0xFF70024E,0xFF5C0001, -0xF16C0188,0xD7FC05B3,0xFF040152,0xF0EC0188,0xE20005B4,0xAFFC05B3,0xFF9402A5,0xFF840152,0xFF70024E,0xFF5C0001,0xF16C0188,0xD7FC05B3,0xFF040152,0xF0EC0188,0xE20005B4,0xD7FC05B3,0xFF040152,0xF0EC0188,0xE20005B4,0xE20005B4,0xFFBC04B5,0xFBC4054B,0xFBC4054B,0xFFB003A2,0xFF900261,0xFF7C00D1,0xFF6C0004,0xFD480009,0xFFB404BE,0xFFA40388,0xFF50016B,0xF0EC0188, -0xCDFC05B3,0x19005EA,0x19005EA,0x19005EA,0x19005EA,0xFF8002A5,0xFF8002A5,0xFF8002A5,0xF77401A5,0xF77401A5,0xE37401A5,0xFF680234,0xFF680234,0xFF680234,0xFD580005,0xFD580005,0xE564004C,0xEB580152,0xEB580152,0xDF580029,0xD5580154,0x59FC05EA,0x59FC05EA,0x59FC05EA,0xFF3801B9,0xFF3801B9,0xE34C01A5,0xFD0C0153,0xFD0C0153,0xE3200002,0xD5300154,0xADFC05EA, -0xADFC05EA,0xE2CC01A5,0xD4B00154,0xC60005ED,0xFF84042D,0xFF8C051E,0x19005EA,0xFF7802C9,0xFF6C0155,0xFF64006D,0xFF600030,0xF7580001,0xFF780411,0xFF740289,0xFF500153,0xE3200002,0x99FC05EA,0x1AC0152,0x1AC0152,0x1AC0152,0x1AC0152,0xFF98002D,0xFF98002D,0xFF98002D,0xEF940001,0xEF940001,0xE3900001,0x83FC0152,0x83FC0152,0x83FC0152,0xF9640001,0xF9640001, -0xE3780000,0xC3F80152,0xC3F80152,0xE3280000,0xD4000154,0x83FC0152,0x83FC0152,0x83FC0152,0xF9640001,0xF9640001,0xE3780000,0xC3F80152,0xC3F80152,0xE3280000,0xD4000154,0xC3F80152,0xC3F80152,0xE3280000,0xD4000154,0xD4000154,0xFFA000F4,0xFDA80109,0x1AC0152,0xFF9800B5,0xFF840059,0xFF740019,0xFF6C0004,0xF7540000,0xFF940104,0xFB9000B5,0xB3FC0152,0xE3280000, -0xB3FC0152,0x1E0018A,0xFFDC00F2,0xFFCC0049,0xFFC40001,0xD5FC0188,0xFFB80089,0xFFAC0000,0xEBF80188,0xFF540000,0xF0000188,0xD5FC0188,0xFFB80089,0xFFAC0000,0xEBF80188,0xFF540000,0xF0000188,0xEBF80188,0xFF540000,0xF0000188,0xF0000188,0xD5FC0188,0xFFB80089,0xFFAC0000,0xEBF80188,0xFF540000,0xF0000188,0xEBF80188,0xFF540000,0xF0000188,0xF0000188,0xEBF80188, -0xFF540000,0xF0000188,0xF0000188,0xF0000188,0xF3E0016D,0x27FC0188,0xF9E0016D,0xFDD40139,0xFFBC00E9,0xFF980074,0xFF740000,0xFF280000,0xFDD80154,0xFFCC0122,0xFF90000D,0xF0000188,0xE5FC0188,0x17401A5,0x17401A5,0x17401A5,0x17401A5,0x17401A5,0x17401A5,0x17401A5,0x17401A5,0x17401A5,0x17401A5,0xFD580004,0xFD580004,0xFD580004,0xFD580004,0xFD580004, -0xFD580004,0xD7580000,0xD7580000,0xD7580000,0xC9580000,0x2FFC01A5,0x2FFC01A5,0x2FFC01A5,0x2FFC01A5,0x2FFC01A5,0x2FFC01A5,0xE5200000,0xE5200000,0xE5200000,0xC93C0000,0x99FC01A5,0x99FC01A5,0x99FC01A5,0xC8E00000,0xBA0001A5,0xFF6C0128,0x17401A5,0x17401A5,0xFF6800A4,0xFF640055,0xFF5C001D,0xFF5C001D,0xF3580000,0xF9680109,0xFD6000A2,0xE7500000,0xE5200000, -0x7FF801A5,}; -static const uint32_t g_etc1_to_bc7_m6_table123[] = { -0x1680000,0x1680000,0x1680000,0x1680000,0x1680000,0x1680000,0x1680000,0x1680000,0x1680000,0x1680000,0x1680000,0x1680000,0x1680000,0x1680000,0x1680000,0x1680000,0x1680000,0x1680000,0x1680000,0x1680000,0x1BFC0000,0x1BFC0000,0x1BFC0000,0x1BFC0000,0x1BFC0000,0x1BFC0000,0x1BFC0000,0x1BFC0000,0x1BFC0000,0x1BFC0000,0x91F80000, -0x91F80000,0x91F80000,0x91F80000,0xB2000001,0x1680000,0x1680000,0x1680000,0x1680000,0x1680000,0x1680000,0x1680000,0x1680000,0x1800000,0x1800000,0x1800000,0x1BFC0000,0x73FC0000,0x1A00001,0x1A00001,0x1A00001,0x1A00001,0x1A00001,0x1A00001,0x1A00001,0x1A00001,0x1A00001,0x1A00001,0x75FC0000,0x75FC0000,0x75FC0000,0x75FC0000,0x75FC0000, -0x75FC0000,0xBBFC0000,0xBBFC0000,0xBBFC0000,0xD0000000,0x75FC0000,0x75FC0000,0x75FC0000,0x75FC0000,0x75FC0000,0x75FC0000,0xBBFC0000,0xBBFC0000,0xBBFC0000,0xD0000000,0xBBFC0000,0xBBFC0000,0xBBFC0000,0xD0000000,0xD0000000,0x7BC0000,0x1A00001,0x1A00001,0x5E40000,0x1FFC0000,0x53FC0000,0x53FC0000,0x8FFC0000,0x5E40000,0x1FFC0000,0xA9FC0000,0xBBFC0000, -0xA9FC0000,0x1D40001,0x1D40001,0x1D40001,0x1D40001,0xC3FC0000,0xC3FC0000,0xC3FC0000,0xE1FC0000,0xE1FC0000,0xEA000000,0xC3FC0000,0xC3FC0000,0xC3FC0000,0xE1FC0000,0xE1FC0000,0xEA000000,0xE1FC0000,0xE1FC0000,0xEA000000,0xEA000000,0xC3FC0000,0xC3FC0000,0xC3FC0000,0xE1FC0000,0xE1FC0000,0xEA000000,0xE1FC0000,0xE1FC0000,0xEA000000,0xEA000000,0xE1FC0000, -0xE1FC0000,0xEA000000,0xEA000000,0xEA000000,0x75FC0000,0x3F40000,0x1D40001,0xB5FC0000,0xCFFC0000,0xDBFC0000,0xDFF80000,0xE5F40000,0x9FFC0000,0xC3FC0000,0xDBFC0000,0xEA000000,0xDBFC0000,0x1FC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000, -0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xF7FC0001,0xF7FC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFFF00000,0xFE000000, -0xFFFC0000,0x1B80C63,0xFFB0094E,0xFFA006CB,0xFFA005EA,0xFFA4076D,0xFF940436,0xFF8C0301,0xFF880313,0xFF8401A5,0xF584026D,0xFF980818,0xFF88041D,0xFF800284,0xFF7C0222,0xFF6C001D,0xF56C00F0,0xFF6C0438,0xFB600192,0xF1640165,0xE9680428,0x95FC0C63,0xFF7C07BE,0xFF7005ED,0xFF6404BF,0xFF4C01F6,0xF554026D,0xFF380594,0xFF280163,0xF32400D8,0xE9340428,0xCBFC0C63, -0xFEE005EA,0xF4B4026D,0xE88C0428,0xDA000C65,0xFFA809C9,0xFFAC0B85,0xF5B80BDB,0xFF9806E9,0xFF8C041A,0xFF7C0175,0xFF78007A,0xFF680001,0xFFA409B3,0xFF90067F,0xFF640186,0xF32400D8,0xBFF80C63,0x1D0042B,0xFFC402DB,0xFFC001BE,0xFFBC0152,0xFFC4028B,0xFFB400FA,0xFFB00055,0xFFA800F1,0xFDA0000E,0xF5A000C9,0xBDFC0428,0xFFAC022D,0xFF9C0152,0xFF88018E,0xFF780005, -0xF58000C8,0xDFF80428,0xFF340152,0xF50C00C8,0xE8000428,0xBDFC0428,0xFFAC022D,0xFF9C0152,0xFF88018E,0xFF780005,0xF58000C8,0xDFF80428,0xFF340152,0xF50C00C8,0xE8000428,0xDFF80428,0xFF340152,0xF50C00C8,0xE8000428,0xE8000428,0xFDCC0378,0xFFCC03D3,0xFFCC03E3,0xFFC002B6,0xFFA801D5,0xFF9000C1,0xFF880019,0xFF640000,0xFFC4037B,0xFDBC02B6,0xFF700162,0xF50C00C8, -0xD7FC0428,0x1A005EA,0x1A005EA,0x1A005EA,0x1A005EA,0xFF8C0301,0xFF8C0301,0xFF8C0301,0xFF8401A5,0xFF8401A5,0xEB8401A5,0xFF800284,0xFF800284,0xFF800284,0xFF6C001D,0xFF6C001D,0xED74004C,0xF3680152,0xF3680152,0xE7680029,0xDD680154,0x71FC05EA,0x71FC05EA,0x71FC05EA,0xFF4C01F6,0xFF4C01F6,0xEB5C01A5,0xFF280163,0xFF280163,0xEB300002,0xDD400154,0xB9FC05EA, -0xB9FC05EA,0xEADC01A5,0xDCC00154,0xCE0005ED,0xFB980484,0xF79C0551,0x1A005EA,0xFF900321,0xFF8001C1,0xFF7800C2,0xFF78007A,0xFF680001,0xFF900452,0xFF8002F4,0xFF64016D,0xEB300002,0xA7FC05EA,0x1BC0152,0x1BC0152,0x1BC0152,0x1BC0152,0xFFB00055,0xFFB00055,0xFFB00055,0xF7A40001,0xF7A40001,0xEBA00001,0x9BFC0152,0x9BFC0152,0x9BFC0152,0xFF780005,0xFF780005, -0xEB880000,0xCFF80152,0xCFF80152,0xEB380000,0xDC000154,0x9BFC0152,0x9BFC0152,0x9BFC0152,0xFF780005,0xFF780005,0xEB880000,0xCFF80152,0xCFF80152,0xEB380000,0xDC000154,0xCFF80152,0xCFF80152,0xEB380000,0xDC000154,0xDC000154,0xFBB40109,0xF5B80122,0x1BC0152,0xFFA400DA,0xFF98007D,0xFF8C0041,0xFF880019,0xFF640000,0xFDB00109,0xFFA400C8,0xC1FC0152,0xEB380000, -0xC1FC0152,0x1E800CA,0xFFE0007D,0xFFD80025,0xFFD40001,0xE3FC00C8,0xFFCC0049,0xFFC00001,0xF1F800C8,0xFF840000,0xF40000C8,0xE3FC00C8,0xFFCC0049,0xFFC00001,0xF1F800C8,0xFF840000,0xF40000C8,0xF1F800C8,0xFF840000,0xF40000C8,0xF40000C8,0xE3FC00C8,0xFFCC0049,0xFFC00001,0xF1F800C8,0xFF840000,0xF40000C8,0xF1F800C8,0xFF840000,0xF40000C8,0xF40000C8,0xF1F800C8, -0xFF840000,0xF40000C8,0xF40000C8,0xF40000C8,0xF7E800B5,0x67FC00C8,0xFDE800B5,0xFFD8009D,0xFFD00075,0xFFC0003D,0xFF9C0000,0xFF640000,0xFFDC00B4,0xFFD80095,0xFFB00008,0xF40000C8,0xEDFC00C8,0x18401A5,0x18401A5,0x18401A5,0x18401A5,0x18401A5,0x18401A5,0x18401A5,0x18401A5,0x18401A5,0x18401A5,0xFF6C000D,0xFF6C000D,0xFF6C000D,0xFF6C000D,0xFF6C000D, -0xFF6C000D,0xDF680000,0xDF680000,0xDF680000,0xD1680000,0x47FC01A5,0x47FC01A5,0x47FC01A5,0x47FC01A5,0x47FC01A5,0x47FC01A5,0xED300000,0xED300000,0xED300000,0xD14C0000,0xA5F801A5,0xA5F801A5,0xA5F801A5,0xD0F00000,0xC20001A5,0xF9800139,0x18401A5,0x18401A5,0xFB7C00C8,0xFF780071,0xFF700034,0xFF700034,0xFB680000,0xFF74010D,0xFD7400B5,0xEF600000,0xED300000, -0x8DFC01A5,}; -static const uint32_t g_etc1_to_bc7_m6_table124[] = { -0x1780001,0x1780001,0x1780001,0x1780001,0x1780001,0x1780001,0x1780001,0x1780001,0x1780001,0x1780001,0x1780001,0x1780001,0x1780001,0x1780001,0x1780001,0x1780001,0x1780001,0x1780001,0x1780001,0x1780001,0x37FC0000,0x37FC0000,0x37FC0000,0x37FC0000,0x37FC0000,0x37FC0000,0x37FC0000,0x37FC0000,0x37FC0000,0x37FC0000,0x9DFC0000, -0x9DFC0000,0x9DFC0000,0x9DFC0000,0xBC000000,0x1780001,0x1780001,0x1780001,0x1780001,0x1780001,0x1780001,0x1780001,0x1780001,0x1940000,0x1940000,0x1940000,0x37FC0000,0x83FC0000,0x1B40000,0x1B40000,0x1B40000,0x1B40000,0x1B40000,0x1B40000,0x1B40000,0x1B40000,0x1B40000,0x1B40000,0x8FFC0000,0x8FFC0000,0x8FFC0000,0x8FFC0000,0x8FFC0000, -0x8FFC0000,0xC9F80000,0xC9F80000,0xC9F80000,0xD8000001,0x8FFC0000,0x8FFC0000,0x8FFC0000,0x8FFC0000,0x8FFC0000,0x8FFC0000,0xC9F80000,0xC9F80000,0xC9F80000,0xD8000001,0xC9F80000,0xC9F80000,0xC9F80000,0xD8000001,0xD8000001,0x1D00000,0x1B40000,0x1B40000,0x1FC0000,0x4BFC0000,0x75FC0000,0x75FC0000,0xA5FC0000,0x1FC0000,0x4BFC0000,0xBBFC0000,0xC9F80000, -0xBBFC0000,0x1E80000,0x1E80000,0x1E80000,0x1E80000,0xDFFC0000,0xDFFC0000,0xDFFC0000,0xEFFC0000,0xEFFC0000,0xF2000001,0xDFFC0000,0xDFFC0000,0xDFFC0000,0xEFFC0000,0xEFFC0000,0xF2000001,0xEFFC0000,0xEFFC0000,0xF2000001,0xF2000001,0xDFFC0000,0xDFFC0000,0xDFFC0000,0xEFFC0000,0xEFFC0000,0xF2000001,0xEFFC0000,0xEFFC0000,0xF2000001,0xF2000001,0xEFFC0000, -0xEFFC0000,0xF2000001,0xF2000001,0xF2000001,0xB5FC0000,0x57FC0000,0x1E80000,0xD7FC0000,0xE5FC0000,0xEBFC0000,0xEDFC0000,0xF1F80000,0xCBFC0000,0xDFFC0000,0xEBFC0000,0xF2000001,0xEBFC0000,0x1FC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000, -0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xF7FC0001,0xF7FC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFFF00000,0xFE000000, -0xFFFC0000,0x1C40A26,0xFFBC0819,0xFFB4067D,0xFFB005ED,0xFFB00662,0xFFA8043D,0xFFA40362,0xFFA002BE,0xFF9801C9,0xF99801E2,0xFFA406D7,0xFF9C0415,0xFF9802FB,0xFF8801E3,0xFF84007A,0xFB840073,0xFF84031B,0xFD780159,0xF77000A2,0xEF7802D3,0xA9FC0A26,0xFF940717,0xFF8C05EA,0xFF7C0432,0xFF70024D,0xF96801E2,0xFF640489,0xFF4C01A8,0xF93C003F,0xEF4802D2,0xD5F80A26, -0xFF1405EA,0xF8D801E2,0xEEAC02D2,0xE2000A26,0xFFBC082A,0xFBC40972,0xFBC409B6,0xFFAC061E,0xFFA003F3,0xFF9001DC,0xFF8C00FA,0xFF7C0029,0xFFB407F7,0xFFA405EA,0xFF7C01C3,0xF93C003F,0xC9FC0A26,0x1DC02D5,0xFFD40228,0xFFCC0194,0xFFCC0154,0xFFD001B5,0xFFC400E4,0xFFC40080,0xFFB8007D,0xFFB40001,0xF9B4003D,0xCFFC02D2,0xFFC001C8,0xFFB80152,0xFFAC00FE,0xFF940025, -0xF994003E,0xE7FC02D2,0xFF6C0152,0xF934003D,0xEE0002D2,0xCFFC02D2,0xFFC001C8,0xFFB80152,0xFFAC00FE,0xFF940025,0xF994003E,0xE7FC02D2,0xFF6C0152,0xF934003D,0xEE0002D2,0xE7FC02D2,0xFF6C0152,0xF934003D,0xEE0002D2,0xEE0002D2,0xFFD80263,0xF7DC02A9,0xF7DC02B4,0xFDD00209,0xFFC0016A,0xFFAC00B1,0xFFA8003D,0xFF8C0019,0xFDD8026D,0xFFC801D6,0xFF98015B,0xF934003D, -0xE1FC02D2,0x1B005ED,0x1B005ED,0x1B005ED,0x1B005ED,0xFFA40362,0xFFA40362,0xFFA40362,0xFF9801C9,0xFF9801C9,0xF39801A6,0xFF9802FB,0xFF9802FB,0xFF9802FB,0xFF84007A,0xFF84007A,0xF584004B,0xFB7C0153,0xFB7C0153,0xEF78002A,0xE7780153,0x8DFC05EA,0x8DFC05EA,0x8DFC05EA,0xFF70024D,0xFF70024D,0xF37001A6,0xFF4C01A8,0xFF4C01A8,0xF5440001,0xE7500152,0xC7FC05EA, -0xC7FC05EA,0xF2F001A6,0xE6CC0152,0xD80005EA,0xFFAC04B2,0xFFAC055A,0x1B005ED,0xFFA403A1,0xFF940252,0xFF900163,0xFF8C00FA,0xFF7C0029,0xFFA00491,0xFF980365,0xFF7C01B3,0xF5440001,0xB9FC05EA,0x1CC0154,0x1CC0154,0x1CC0154,0x1CC0154,0xFFC40080,0xFFC40080,0xFFC40080,0xFFB40001,0xFFB40001,0xF3B40001,0xB7FC0152,0xB7FC0152,0xB7FC0152,0xFF940025,0xFF940025, -0xF39C0001,0xDDF40152,0xDDF40152,0xF34C0001,0xE6000152,0xB7FC0152,0xB7FC0152,0xB7FC0152,0xFF940025,0xFF940025,0xF39C0001,0xDDF40152,0xDDF40152,0xF34C0001,0xE6000152,0xDDF40152,0xDDF40152,0xF34C0001,0xE6000152,0xE6000152,0xFDC80120,0xFFCC0120,0x1CC0154,0xFDC000F4,0xFFB000B4,0xFFA8006A,0xFFA8003D,0xFF8C0019,0xFFC40120,0xFBC000F2,0xD3FC0152,0xF34C0001, -0xD3FC0152,0x1F4003D,0xFFEC0028,0xFFEC000D,0xFFE80000,0xEFFC003D,0xFFE40014,0xFFDC0000,0xF7F8003D,0xFFB80000,0xF800003D,0xEFFC003D,0xFFE40014,0xFFDC0000,0xF7F8003D,0xFFB80000,0xF800003D,0xF7F8003D,0xFFB80000,0xF800003D,0xF800003D,0xEFFC003D,0xFFE40014,0xFFDC0000,0xF7F8003D,0xFFB80000,0xF800003D,0xF7F8003D,0xFFB80000,0xF800003D,0xF800003D,0xF7F8003D, -0xFFB80000,0xF800003D,0xF800003D,0xF800003D,0xFBF00034,0xA7FC003D,0xF3F4003D,0xFFEC0029,0xFFE80020,0xFFD40011,0xFFC80000,0xFFA80000,0xFFF00032,0xFFEC0032,0xFFD00001,0xF800003D,0xF5FC003D,0x19801A5,0x19801A5,0x19801A5,0x19801A5,0x19801A5,0x19801A5,0x19801A5,0x19801A5,0x19801A5,0x19801A5,0xFF800022,0xFF800022,0xFF800022,0xFF800022,0xFF800022, -0xFF800022,0xE77C0001,0xE77C0001,0xE77C0001,0xD9780002,0x63FC01A5,0x63FC01A5,0x63FC01A5,0x63FC01A5,0x63FC01A5,0x63FC01A5,0xF5440000,0xF5440000,0xF5440000,0xD9600001,0xB3F801A5,0xB3F801A5,0xB3F801A5,0xD9080001,0xCA0001A5,0xFF8C0151,0x19801A5,0x19801A5,0xFF9000DD,0xFF8C0091,0xFF880055,0xFF880055,0xFD7C0005,0xFD8C0120,0xFF8000DA,0xF7740001,0xF5440000, -0x9FF801A5,}; -static const uint32_t g_etc1_to_bc7_m6_table125[] = { -0x1880001,0x1880001,0x1880001,0x1880001,0x1880001,0x1880001,0x1880001,0x1880001,0x1880001,0x1880001,0x1880001,0x1880001,0x1880001,0x1880001,0x1880001,0x1880001,0x1880001,0x1880001,0x1880001,0x1880001,0x4FFC0000,0x4FFC0000,0x4FFC0000,0x4FFC0000,0x4FFC0000,0x4FFC0000,0x4FFC0000,0x4FFC0000,0x4FFC0000,0x4FFC0000,0xA9FC0000, -0xA9FC0000,0xA9FC0000,0xA9FC0000,0xC4000000,0x1880001,0x1880001,0x1880001,0x1880001,0x1880001,0x1880001,0x1880001,0x1880001,0x1A40000,0x1A40000,0x1A40000,0x4FFC0000,0x93FC0000,0x1C40000,0x1C40000,0x1C40000,0x1C40000,0x1C40000,0x1C40000,0x1C40000,0x1C40000,0x1C40000,0x1C40000,0xA9FC0000,0xA9FC0000,0xA9FC0000,0xA9FC0000,0xA9FC0000, -0xA9FC0000,0xD5F80000,0xD5F80000,0xD5F80000,0xE0000001,0xA9FC0000,0xA9FC0000,0xA9FC0000,0xA9FC0000,0xA9FC0000,0xA9FC0000,0xD5F80000,0xD5F80000,0xD5F80000,0xE0000001,0xD5F80000,0xD5F80000,0xD5F80000,0xE0000001,0xE0000001,0x9E00000,0x1C40000,0x1C40000,0x35FC0000,0x73FC0000,0x93FC0000,0x93FC0000,0xB9FC0000,0x35FC0000,0x73FC0000,0xC9FC0000,0xD5F80000, -0xC9FC0000,0x1F80000,0x1F80000,0x1F80000,0x1F80000,0xF7FC0000,0xF7FC0000,0xF7FC0000,0xFBFC0000,0xFBFC0000,0xFA000001,0xF7FC0000,0xF7FC0000,0xF7FC0000,0xFBFC0000,0xFBFC0000,0xFA000001,0xFBFC0000,0xFBFC0000,0xFA000001,0xFA000001,0xF7FC0000,0xF7FC0000,0xF7FC0000,0xFBFC0000,0xFBFC0000,0xFA000001,0xFBFC0000,0xFBFC0000,0xFA000001,0xFA000001,0xFBFC0000, -0xFBFC0000,0xFA000001,0xFA000001,0xFA000001,0xEDFC0000,0xD7FC0000,0x1F80000,0xF5FC0000,0xF9FC0000,0xFBFC0000,0xFBFC0000,0xFBFC0000,0xF3FC0000,0xF7FC0000,0xFBFC0000,0xFA000001,0xFBFC0000,0x1FC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000, -0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xF7FC0001,0xF7FC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFFF00000,0xFE000000, -0xFFFC0000,0x1D0088E,0xFFC80749,0xFFC00651,0xFFC005ED,0xFFC405B2,0xFFBC0463,0xFFB403DD,0xFFAC02BE,0xFFAC0215,0xFDA801AA,0xFFBC05EF,0xFFB0042C,0xFFA40383,0xFFA001F3,0xFF9C010A,0xFD94004F,0xFF94028E,0xFF900163,0xFB84003E,0xF58801FF,0xBBFC088E,0xFFAC069F,0xFFA405EA,0xFF9403FA,0xFF8802BD,0xFD7C01AA,0xFF7C0401,0xFF640218,0xFD540005,0xF55C01FE,0xDDFC088E, -0xFF4805EA,0xFCF801AA,0xF4C401FE,0xE800088E,0xFFCC0739,0xFFCC07F2,0xFFCC0846,0xFFC005B1,0xFFB003FD,0xFFA4024E,0xFFA4019A,0xFF940096,0xFFC4071A,0xFFB40585,0xFF94023D,0xFD540005,0xD5FC088E,0x1E801FD,0xFDE401B5,0xFFE0016D,0xFFDC0154,0xFFDC0149,0xFFD400EA,0xFFD000B4,0xFFCC0069,0xFFC80028,0xFDC40005,0xDFFC01FD,0xFFD80188,0xFFCC0154,0xFFB800D2,0xFFB80059, -0xFDA80006,0xEFFC01FD,0xFF9C0152,0xFD540005,0xF40001FE,0xDFFC01FD,0xFFD80188,0xFFCC0154,0xFFB800D2,0xFFB80059,0xFDA80006,0xEFFC01FD,0xFF9C0152,0xFD540005,0xF40001FE,0xEFFC01FD,0xFF9C0152,0xFD540005,0xF40001FE,0xF40001FE,0xFFE401C5,0xFDE801D9,0xFDE801E8,0xFFDC0179,0xFFD40132,0xFFC800CE,0xFFBC007D,0xFFA80049,0xFFE001CA,0xFFDC0172,0xFFB80156,0xFD540005, -0xEBFC01FD,0x1C005ED,0x1C005ED,0x1C005ED,0x1C005ED,0xFFB403DD,0xFFB403DD,0xFFB403DD,0xFFAC0215,0xFFAC0215,0xFBA801A6,0xFFA40383,0xFFA40383,0xFFA40383,0xFF9C010A,0xFF9C010A,0xFD94004B,0xFF900163,0xFF900163,0xF788002A,0xEF880153,0xA5FC05EA,0xA5FC05EA,0xA5FC05EA,0xFF8802BD,0xFF8802BD,0xFB8001A6,0xFF640218,0xFF640218,0xFD540001,0xEF600152,0xD3FC05EA, -0xD3FC05EA,0xFB0001A6,0xEEDC0152,0xE00005EA,0xFFBC04E6,0xF9C00581,0x1C005ED,0xFFB40402,0xFFAC02EA,0xFFA401FD,0xFFA4019A,0xFF940096,0xFFB404BE,0xFFB003CE,0xFF940234,0xFD540001,0xC7FC05EA,0x1DC0154,0x1DC0154,0x1DC0154,0x1DC0154,0xFFD000B4,0xFFD000B4,0xFFD000B4,0xFFC80028,0xFFC80028,0xFBC40001,0xCFFC0152,0xCFFC0152,0xCFFC0152,0xFFB80059,0xFFB80059, -0xFBAC0001,0xE7FC0152,0xE7FC0152,0xFB5C0001,0xEE000152,0xCFFC0152,0xCFFC0152,0xCFFC0152,0xFFB80059,0xFFB80059,0xFBAC0001,0xE7FC0152,0xE7FC0152,0xFB5C0001,0xEE000152,0xE7FC0152,0xE7FC0152,0xFB5C0001,0xEE000152,0xEE000152,0xFFD80122,0xF7DC0139,0x1DC0154,0xFDD80109,0xFFC800DA,0xFFBC00A9,0xFFBC007D,0xFFA80049,0xFFD00132,0xFBD40109,0xE1FC0152,0xFB5C0001, -0xE1FC0152,0x1FC0005,0xFFF80004,0xFFF80001,0xFFF80000,0xFBFC0005,0xFFF80002,0xFFF40000,0xFDF80005,0xFFEC0000,0xFC000005,0xFBFC0005,0xFFF80002,0xFFF40000,0xFDF80005,0xFFEC0000,0xFC000005,0xFDF80005,0xFFEC0000,0xFC000005,0xFC000005,0xFBFC0005,0xFFF80002,0xFFF40000,0xFDF80005,0xFFEC0000,0xFC000005,0xFDF80005,0xFFEC0000,0xFC000005,0xFC000005,0xFDF80005, -0xFFEC0000,0xFC000005,0xFC000005,0xFC000005,0xFFF80004,0xE7FC0005,0xF7FC0005,0xFBFC0005,0xFFF80002,0xFFF00001,0xFFF00000,0xFFE40000,0xF9FC0005,0xFBFC0005,0xFFF00000,0xFC000005,0xFDF80005,0x1A801A5,0x1A801A5,0x1A801A5,0x1A801A5,0x1A801A5,0x1A801A5,0x1A801A5,0x1A801A5,0x1A801A5,0x1A801A5,0xFF900049,0xFF900049,0xFF900049,0xFF900049,0xFF900049, -0xFF900049,0xEF8C0001,0xEF8C0001,0xEF8C0001,0xE1880002,0x7BFC01A5,0x7BFC01A5,0x7BFC01A5,0x7BFC01A5,0x7BFC01A5,0x7BFC01A5,0xFD540000,0xFD540000,0xFD540000,0xE1700001,0xBFF801A5,0xBFF801A5,0xBFF801A5,0xE1180001,0xD20001A5,0xFBA40152,0x1A801A5,0x1A801A5,0xFFA000F2,0xFD9C00B5,0xFF980071,0xFF980071,0xFD900019,0xFD9C0139,0xFF9400E9,0xFF840001,0xFD540000, -0xADFC01A5,}; -static const uint32_t g_etc1_to_bc7_m6_table126[] = { -0x1980001,0x1980001,0x1980001,0x1980001,0x1980001,0x1980001,0x1980001,0x1980001,0x1980001,0x1980001,0x1980001,0x1980001,0x1980001,0x1980001,0x1980001,0x1980001,0x1980001,0x1980001,0x1980001,0x1980001,0x69FC0000,0x69FC0000,0x69FC0000,0x69FC0000,0x69FC0000,0x69FC0000,0x69FC0000,0x69FC0000,0x69FC0000,0x69FC0000,0xB5FC0000, -0xB5FC0000,0xB5FC0000,0xB5FC0000,0xCC000000,0x1980001,0x1980001,0x1980001,0x1980001,0x1980001,0x1980001,0x1980001,0x1980001,0x3B40000,0x3B40000,0x3B40000,0x69FC0000,0xA1FC0000,0x1D40000,0x1D40000,0x1D40000,0x1D40000,0x1D40000,0x1D40000,0x1D40000,0x1D40000,0x1D40000,0x1D40000,0xC1FC0000,0xC1FC0000,0xC1FC0000,0xC1FC0000,0xC1FC0000, -0xC1FC0000,0xE1F80000,0xE1F80000,0xE1F80000,0xE8000001,0xC1FC0000,0xC1FC0000,0xC1FC0000,0xC1FC0000,0xC1FC0000,0xC1FC0000,0xE1F80000,0xE1F80000,0xE1F80000,0xE8000001,0xE1F80000,0xE1F80000,0xE1F80000,0xE8000001,0xE8000001,0x1F40000,0x1D40000,0x1D40000,0x6DFC0000,0x9BFC0000,0xB1FC0000,0xB1FC0000,0xCDFC0000,0x6DFC0000,0x9BFC0000,0xD9FC0000,0xE1F80000, -0xD9FC0000,0x1FC0001,0x1FC0001,0x1FC0001,0x1FC0001,0xFDFC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000, -0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFBFC0001,0xF7FC0001,0x1FC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFFFC0000,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0x1FC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000, -0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xF7FC0001,0xF7FC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFFF00000,0xFE000000, -0xFFFC0000,0x1DC0693,0xFFD405C6,0xFFD0052E,0xFFD004EE,0xFFD0049F,0xFFC403C6,0xFFC40362,0xFFC00295,0xFFB8021E,0xFFB801A5,0xFFC4048F,0xFFBC037F,0xFFBC0306,0xFFAC01D4,0xFFAC012B,0xFFA4006A,0xFFAC01E3,0xFFA0010E,0xFF980011,0xF798012A,0xC9FC0691,0xFFB80566,0xFFB804ED,0xFFAC0367,0xFFA0029E,0xFF9401A5,0xFF940316,0xFF8801D1,0xFF700008,0xF7700129,0xE5F80691, -0xFF6C04ED,0xFF2001A5,0xF6EC0129,0xEC000691,0xFFD805AB,0xF5D8064D,0xF5D80672,0xFFCC0496,0xFFC00366,0xFFB8022B,0xFFB401AE,0xFFA800C3,0xFFD00576,0xFFC4045F,0xFFB001FA,0xFF700008,0xDFF80691,0x1F00126,0xFFEC0105,0xFFEC00EA,0xFFE800DD,0xFFE800C6,0xFFE000A1,0xFFE00088,0xFFD8004C,0xFFD80028,0xFFD40000,0xEBFC0126,0xFFE400F1,0xFFDC00DD,0xFFD80088,0xFFCC0050, -0xFFC00000,0xF5FC0126,0xFFB800DD,0xFF7C0000,0xF6000129,0xEBFC0126,0xFFE400F1,0xFFDC00DD,0xFFD80088,0xFFCC0050,0xFFC00000,0xF5FC0126,0xFFB800DD,0xFF7C0000,0xF6000129,0xF5FC0126,0xFFB800DD,0xFF7C0000,0xF6000129,0xF6000129,0xFDF0010C,0xFFEC0110,0xFFEC0121,0xFFEC00F3,0xFFDC00C6,0xFFD80092,0xFFD00061,0xFFC00049,0xFFEC010B,0xFFE800E5,0xFFD000DE,0xFF7C0000, -0xF3FC0126,0x1D004EE,0x1D004EE,0x1D004EE,0x1D004EE,0xFFC40362,0xFFC40362,0xFFC40362,0xFFB8021E,0xFFB8021E,0xFFB801A5,0xFFBC0306,0xFFBC0306,0xFFBC0306,0xFFAC012B,0xFFAC012B,0xFFA4006A,0xFFA0010E,0xFFA0010E,0xFD98000E,0xF59800DE,0xB7FC04ED,0xB7FC04ED,0xB7FC04ED,0xFFA0029E,0xFFA0029E,0xFF9401A5,0xFF8801D1,0xFF8801D1,0xFF700008,0xF57400DD,0xDDF404ED, -0xDDF404ED,0xFF2001A5,0xF4F400DD,0xE60004ED,0xFFCC042E,0xFFCC0492,0x1D004EE,0xFFC40382,0xFFC002BD,0xFFB401EE,0xFFB401AE,0xFFA800C3,0xFBC8042D,0xFFBC0366,0xFFA801F5,0xFF700008,0xD3FC04ED,0x1E800DD,0x1E800DD,0x1E800DD,0x1E800DD,0xFFE00088,0xFFE00088,0xFFE00088,0xFFD80028,0xFFD80028,0xFFD40000,0xDFFC00DD,0xDFFC00DD,0xDFFC00DD,0xFFCC0050,0xFFCC0050, -0xFFC00000,0xEFFC00DD,0xEFFC00DD,0xFF7C0000,0xF40000DD,0xDFFC00DD,0xDFFC00DD,0xDFFC00DD,0xFFCC0050,0xFFCC0050,0xFFC00000,0xEFFC00DD,0xEFFC00DD,0xFF7C0000,0xF40000DD,0xEFFC00DD,0xEFFC00DD,0xFF7C0000,0xF40000DD,0xF40000DD,0xF9E800C8,0xFDE800C8,0x1E800DD,0xFFDC00B4,0xFFDC0095,0xFFD80082,0xFFD00061,0xFFC00049,0xF7E800C8,0xFFDC00AA,0xEBFC00DD,0xFF7C0000, -0xEBFC00DD,0x1FC0002,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000, -0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0002,0xF7FC0002,0xF7FC0002,0xFDFC0002,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFFFC0000,0xFDFC0002,0xFDFC0002,0xFFFC0000,0xFE000000,0xFFFC0000,0x1B801A5,0x1B801A5,0x1B801A5,0x1B801A5,0x1B801A5,0x1B801A5,0x1B801A5,0x1B801A5,0x1B801A5,0x1B801A5,0xFFA4006A,0xFFA4006A,0xFFA4006A,0xFFA4006A,0xFFA4006A, -0xFFA4006A,0xF79C0001,0xF79C0001,0xF79C0001,0xE9980002,0x93FC01A5,0x93FC01A5,0x93FC01A5,0x93FC01A5,0x93FC01A5,0x93FC01A5,0xFF700008,0xFF700008,0xFF700008,0xE9800001,0xCBF801A5,0xCBF801A5,0xCBF801A5,0xE9280001,0xDA0001A5,0xF3B4016D,0x1B801A5,0x1B801A5,0xFFAC0115,0xFFA800DA,0xFFAC00A2,0xFFAC00A2,0xFFA0003A,0xF9B00152,0xFBAC0109,0xFF98000D,0xFF700008, -0xBDF801A5,}; -static const uint32_t g_etc1_to_bc7_m6_table127[] = { -0x1A80001,0x1A80001,0x1A80001,0x1A80001,0x1A80001,0x1A80001,0x1A80001,0x1A80001,0x1A80001,0x1A80001,0x1A80001,0x1A80001,0x1A80001,0x1A80001,0x1A80001,0x1A80001,0x1A80001,0x1A80001,0x1A80001,0x1A80001,0x81FC0000,0x81FC0000,0x81FC0000,0x81FC0000,0x81FC0000,0x81FC0000,0x81FC0000,0x81FC0000,0x81FC0000,0x81FC0000,0xC1FC0000, -0xC1FC0000,0xC1FC0000,0xC1FC0000,0xD4000000,0x1A80001,0x1A80001,0x1A80001,0x1A80001,0x1A80001,0x1A80001,0x1A80001,0x1A80001,0xBC40000,0xBC40000,0xBC40000,0x81FC0000,0xB1FC0000,0x1E40000,0x1E40000,0x1E40000,0x1E40000,0x1E40000,0x1E40000,0x1E40000,0x1E40000,0x1E40000,0x1E40000,0xD9FC0000,0xD9FC0000,0xD9FC0000,0xD9FC0000,0xD9FC0000, -0xD9FC0000,0xEDF80000,0xEDF80000,0xEDF80000,0xF0000001,0xD9FC0000,0xD9FC0000,0xD9FC0000,0xD9FC0000,0xD9FC0000,0xD9FC0000,0xEDF80000,0xEDF80000,0xEDF80000,0xF0000001,0xEDF80000,0xEDF80000,0xEDF80000,0xF0000001,0xF0000001,0x37FC0000,0x1E40000,0x1E40000,0xA7FC0000,0xC1FC0000,0xCFFC0000,0xCFFC0000,0xE1FC0000,0xA7FC0000,0xC1FC0000,0xE7FC0000,0xEDF80000, -0xE7FC0000,0x1FC0001,0x1FC0001,0x1FC0001,0x1FC0001,0xFDFC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000, -0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFBFC0001,0xF7FC0001,0x1FC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFFFC0000,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0x1FC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000, -0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xF7FC0001,0xF7FC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFFF00000,0xFE000000, -0xFFFC0000,0x1E4049B,0xFFDC041B,0xFFD803C2,0xFFD8039E,0xFFDC0373,0xFFD002EE,0xFFD002AE,0xFFCC0231,0xFFCC01F1,0xFFC801A5,0xFFD0032F,0xFFD0028E,0xFFC40236,0xFFC00181,0xFFBC011B,0xFFBC00A2,0xFFB80127,0xFFAC00AA,0xFFAC0001,0xFBA80072,0xD5FC0499,0xFFCC03E2,0xFFC8039D,0xFFB802AF,0xFFB80236,0xFFAC01A5,0xFFAC0216,0xFFA00149,0xFF880028,0xFB840071,0xEBF80499, -0xFF90039D,0xFF5401A5,0xFB0C0071,0xF0000499,0xFFD8040B,0xF9E00465,0xF9E00482,0xFFD40343,0xFFCC0297,0xFFC401D1,0xFFBC0173,0xFFB800C2,0xFFD803EE,0xFFD0031A,0xFFB8015E,0xFF880028,0xE5FC0499,0x1F40072,0xFFF40062,0xFFF00059,0xFFF00055,0xFFF40052,0xFFEC003D,0xFFEC0034,0xFFE40020,0xFFE40010,0xFFE40000,0xF5FC0071,0xFFF0005D,0xFFE80055,0xFFE40030,0xFFE40020, -0xFFD80000,0xF9FC0071,0xFFD40055,0xFFAC0000,0xFA000071,0xF5FC0071,0xFFF0005D,0xFFE80055,0xFFE40030,0xFFE40020,0xFFD80000,0xF9FC0071,0xFFD40055,0xFFAC0000,0xFA000071,0xF9FC0071,0xFFD40055,0xFFAC0000,0xFA000071,0xFA000071,0xFFF40060,0xF3F40072,0xF3F40072,0xFFF0005A,0xFFF0004A,0xFFE40036,0xFFE40022,0xFFD8001D,0xFDF40060,0xFFF0005A,0xFFE00056,0xFFAC0000, -0xF9FC0071,0x1D8039E,0x1D8039E,0x1D8039E,0x1D8039E,0xFFD002AE,0xFFD002AE,0xFFD002AE,0xFFCC01F1,0xFFCC01F1,0xFFC801A5,0xFFC40236,0xFFC40236,0xFFC40236,0xFFBC011B,0xFFBC011B,0xFFBC00A2,0xFFAC00AA,0xFFAC00AA,0xFFAC0001,0xF9A80056,0xC9FC039D,0xC9FC039D,0xC9FC039D,0xFFB80236,0xFFB80236,0xFFAC01A5,0xFFA00149,0xFFA00149,0xFF880028,0xF9880055,0xE5F8039D, -0xE5F8039D,0xFF5401A5,0xF9140055,0xEC00039D,0xFFD8032A,0xF5D80379,0x1D8039E,0xFFCC02A5,0xFFC4022E,0xFFBC01AB,0xFFBC0173,0xFFB800C2,0xFFD00305,0xFFD0028A,0xFFB8015A,0xFF880028,0xDFF8039D,0x1F00055,0x1F00055,0x1F00055,0x1F00055,0xFFEC0034,0xFFEC0034,0xFFEC0034,0xFFE40010,0xFFE40010,0xFFE40000,0xEBFC0055,0xEBFC0055,0xEBFC0055,0xFFE40020,0xFFE40020, -0xFFD80000,0xF5FC0055,0xF5FC0055,0xFFAC0000,0xF8000055,0xEBFC0055,0xEBFC0055,0xEBFC0055,0xFFE40020,0xFFE40020,0xFFD80000,0xF5FC0055,0xF5FC0055,0xFFAC0000,0xF8000055,0xF5FC0055,0xF5FC0055,0xFFAC0000,0xF8000055,0xF8000055,0xFDF00048,0xFFEC0050,0x1F00055,0xFBF00048,0xFDEC003D,0xFFE4002D,0xFFE40022,0xFFD8001D,0xFBF00048,0xFFE80041,0xF3FC0055,0xFFAC0000, -0xF3FC0055,0x1FC0002,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000, -0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0002,0xF7FC0002,0xF7FC0002,0xFDFC0002,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFFFC0000,0xFDFC0002,0xFDFC0002,0xFFFC0000,0xFE000000,0xFFFC0000,0x1C801A5,0x1C801A5,0x1C801A5,0x1C801A5,0x1C801A5,0x1C801A5,0x1C801A5,0x1C801A5,0x1C801A5,0x1C801A5,0xFFBC00A2,0xFFBC00A2,0xFFBC00A2,0xFFBC00A2,0xFFBC00A2, -0xFFBC00A2,0xFFAC0001,0xFFAC0001,0xFFAC0001,0xF1A80002,0xABFC01A5,0xABFC01A5,0xABFC01A5,0xABFC01A5,0xABFC01A5,0xABFC01A5,0xFF880028,0xFF880028,0xFF880028,0xF1900001,0xD7F801A5,0xD7F801A5,0xD7F801A5,0xF1380001,0xE20001A5,0xFBC4016D,0x1C801A5,0x1C801A5,0xFFBC0132,0xFFBC00FA,0xFFBC00CA,0xFFBC00CA,0xFFB4006A,0xFFBC015A,0xFFBC0122,0xFFB00032,0xFF880028, -0xCBFC01A5,}; -static const uint32_t g_etc1_to_bc7_m6_table128[] = { -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1, -0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, -0x0,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1, -0x1,0x240000,0x240000,0x240000,0x240000,0x340000,0x340000,0x340000,0x680000,0x680000,0x10000001,0x340000,0x340000,0x340000,0x680000,0x680000,0x10000001,0x680000,0x680000,0x10000001,0x10000001,0x340000,0x340000,0x340000,0x680000,0x680000,0x10000001,0x680000,0x680000,0x10000001,0x10000001,0x680000, -0x680000,0x10000001,0x10000001,0x10000001,0x2280000,0xA240000,0x240000,0x300000,0x3C0000,0x4C0000,0x540000,0x800000,0x2C0000,0x340000,0x4C0000,0x10000001,0x4C0000,0x780000,0x2B00000,0x1680000,0x3A000001,0x2B00000,0x1680000,0x3A000001,0x1680000,0x3A000001,0x3A000001,0x2B00000,0x1680000,0x3A000001,0x1680000,0x3A000001, -0x3A000001,0x1680000,0x3A000001,0x3A000001,0x3A000001,0x2B00000,0x1680000,0x3A000001,0x1680000,0x3A000001,0x3A000001,0x1680000,0x3A000001,0x3A000001,0x3A000001,0x1680000,0x3A000001,0x3A000001,0x3A000001,0x3A000001,0x2940000,0x800000,0x800000,0xC80000,0x1240000,0xBF40000,0x3A000001,0x3A000001,0xA40000,0xE00000,0x2FF00000,0x3A000001, -0xFC0000,0x280964,0xAA0C00D8,0x560C00D8,0x3A0C00D9,0x76000372,0x52000061,0x3A000002,0x38000374,0x32000151,0x26000372,0x4E000768,0x460002BA,0x34000153,0x340004A5,0x2E00024E,0x2400040A,0x26000768,0x2600049D,0x2000059E,0x1800076B,0x380964,0x3A000463,0x2E000274,0x2E000596,0x2800031F,0x22000484,0x220007ED,0x24000543,0x1C000607,0x180007AB,0x700964, -0x1C000694,0x1C00070C,0x16000864,0x12000964,0xE4000231,0xF41805B2,0xF820054D,0x74000239,0x4A000252,0x3C00023D,0x3000019B,0x2A000306,0x90000413,0x5E000317,0x2E0003AB,0x1C000607,0x500964,0x340768,0xA01400A4,0x541000A4,0x3A1000A5,0x76000372,0x52000061,0x3A000002,0x38000374,0x32000151,0x26000372,0x4C0768,0x460002BA,0x34000153,0x340004A5,0x2E00024E, -0x2400040A,0x980768,0x2600049D,0x2000059E,0x1800076B,0x4C0768,0x460002BA,0x34000153,0x340004A5,0x2E00024E,0x2400040A,0x980768,0x2600049D,0x2000059E,0x1800076B,0x980768,0x2600049D,0x2000059E,0x1800076B,0x1800076B,0xE4000231,0xF82004F2,0xFC280405,0x74000239,0x4A000252,0x3C00023D,0x3000019B,0x2A000306,0x900003C2,0x5E0002F3,0x2E0003A2,0x2000059E, -0x6C0768,0xC00D8,0xC00D8,0xC00D8,0xC00D8,0x36000000,0x36000000,0x36000000,0x1A000000,0x1A000000,0x10000001,0x1A0000A2,0x1A0000A2,0x1A0000A2,0x1200003D,0x1200003D,0xE000022,0xC0000A2,0xC0000A2,0xA000062,0x80000A2,0x1000D8,0x1000D8,0x1000D8,0x12000061,0x12000061,0xC000039,0xC0000B2,0xC0000B2,0xA000072,0x80000AB,0x2000D8, -0x2000D8,0xA000093,0x60000C3,0x40000DB,0x76000032,0xF8000004,0xC00D8,0x32000041,0x1E00003D,0x1A000041,0x16000034,0x12000050,0x3400006B,0x2600005D,0x100000A3,0xA000072,0x1800D8,0x1000A4,0x1000A4,0x1000A4,0x1000A4,0x36000000,0x36000000,0x36000000,0x1A000000,0x1A000000,0x10000001,0x21800A2,0x21800A2,0x21800A2,0x1200003D,0x1200003D, -0xE000022,0x3000A2,0x3000A2,0xA000062,0x80000A2,0x21800A2,0x21800A2,0x21800A2,0x1200003D,0x1200003D,0xE000022,0x3000A2,0x3000A2,0xA000062,0x80000A2,0x3000A2,0x3000A2,0xA000062,0x80000A2,0x80000A2,0x76000032,0xF8000004,0x1000A4,0x32000041,0x1E00003D,0x1A000041,0x16000034,0x12000050,0x42000061,0x26000059,0x2400A2,0xA000062, -0x2400A2,0x4C0374,0x90240000,0x50240000,0x3A240001,0x740372,0x52000061,0x3A000002,0xE80372,0x32000151,0x26000372,0x740372,0x52000061,0x3A000002,0xE80372,0x32000151,0x26000372,0xE80372,0x32000151,0x26000372,0x26000372,0x740372,0x52000061,0x3A000002,0xE80372,0x32000151,0x26000372,0xE80372,0x32000151,0x26000372,0x26000372,0xE80372, -0x32000151,0x26000372,0x26000372,0x26000372,0xF4000164,0x540372,0xF8400188,0x7C000132,0x56000161,0x3C00013D,0x340000DA,0x320001BA,0xB20001D4,0x68000179,0x360000B9,0x26000372,0xA40372,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, -0x0,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x1,0x2,0x2,0x2,0x2,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1, -0x2,}; -static const uint32_t g_etc1_to_bc7_m6_table129[] = { -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1, -0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, -0x0,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1, -0x1,0x340000,0x340000,0x340000,0x340000,0x4C0000,0x4C0000,0x4C0000,0x980000,0x980000,0x18000001,0x4C0000,0x4C0000,0x4C0000,0x980000,0x980000,0x18000001,0x980000,0x980000,0x18000001,0x18000001,0x4C0000,0x4C0000,0x4C0000,0x980000,0x980000,0x18000001,0x980000,0x980000,0x18000001,0x18000001,0x980000, -0x980000,0x18000001,0x18000001,0x18000001,0x3C0000,0x380000,0x340000,0x2440000,0x2540000,0x6C0000,0x7C0000,0xBC0000,0x400000,0x4C0000,0x6C0000,0x18000001,0x6C0000,0x880000,0xC80000,0x1980000,0x42000001,0xC80000,0x1980000,0x42000001,0x1980000,0x42000001,0x42000001,0xC80000,0x1980000,0x42000001,0x1980000,0x42000001, -0x42000001,0x1980000,0x42000001,0x42000001,0x42000001,0xC80000,0x1980000,0x42000001,0x1980000,0x42000001,0x42000001,0x1980000,0x42000001,0x42000001,0x42000001,0x1980000,0x42000001,0x42000001,0x42000001,0x42000001,0x2A80000,0x900000,0x900000,0xE40000,0x14C0000,0x15F40000,0x42000001,0x42000001,0xB80000,0x1000000,0x39C40000,0x42000001, -0x1200000,0x300C14,0xBE1001C4,0x601001C4,0x421001C5,0x8E000372,0x62000025,0x4400000A,0x44000374,0x38000109,0x2E000372,0x5C000933,0x5200036A,0x400001DB,0x3A00053D,0x34000266,0x2E000453,0x2E000934,0x2C0005A5,0x26000696,0x1E000933,0x440C14,0x460005BB,0x3A000354,0x340006A6,0x34000387,0x2800050C,0x280009FD,0x2C000686,0x2400073B,0x1E000997,0x880C14, -0x26000891,0x200008C2,0x1C000AAC,0x16000C14,0xFE000264,0xF8200772,0xFC280785,0x8800025D,0x5A000281,0x44000266,0x3C000195,0x36000351,0xB20004DE,0x68000393,0x3600045B,0x2400073B,0x600C14,0x400934,0xB21C0154,0x5E180154,0x42180155,0x8E000372,0x62000025,0x44040009,0x44000374,0x38000109,0x2E000372,0x5C0933,0x5200036A,0x400001DB,0x3A00053D,0x34000266, -0x2E000453,0xB80933,0x2C0005A5,0x26000696,0x1E000933,0x5C0933,0x5200036A,0x400001DB,0x3A00053D,0x34000266,0x2E000453,0xB80933,0x2C0005A5,0x26000696,0x1E000933,0xB80933,0x2C0005A5,0x26000696,0x1E000933,0x1E000933,0xFE000264,0xFE2C061E,0xF23405B4,0x8800025D,0x5A000281,0x44000266,0x3C000195,0x36000351,0xB2000465,0x68000362,0x36000452,0x26000696, -0x800933,0x1001C4,0x1001C4,0x1001C4,0x1001C4,0x4E000000,0x4E000000,0x4E000000,0x26000000,0x26000000,0x18000001,0x26000152,0x26000152,0x26000152,0x1E00007D,0x1E00007D,0x18000041,0x12000152,0x12000152,0x100000CA,0xC000152,0x21801C3,0x21801C3,0x21801C3,0x180000D1,0x180000D1,0x12000079,0x12000176,0x12000176,0x100000EE,0xC000162,0x3001C3, -0x3001C3,0xE000141,0xA00018B,0x80001C3,0x9200006A,0xFC080044,0x1001C4,0x50000089,0x3200007D,0x2600007D,0x2200006A,0x1A00009D,0x560000E9,0x320000BE,0x16000155,0x100000EE,0x2401C3,0x180154,0x180154,0x180154,0x180154,0x4E000000,0x4E000000,0x4E000000,0x26000000,0x26000000,0x18000001,0x2240152,0x2240152,0x2240152,0x1E00007D,0x1E00007D, -0x18000041,0x4C0152,0x4C0152,0x100000CA,0xC000152,0x2240152,0x2240152,0x2240152,0x1E00007D,0x1E00007D,0x18000041,0x4C0152,0x4C0152,0x100000CA,0xC000152,0x4C0152,0x4C0152,0x100000CA,0xC000152,0xC000152,0x9200006A,0xFC080034,0x180154,0x50000089,0x3200007D,0x2600007D,0x2200006A,0x1A00009D,0x560000D0,0x3C0000B4,0x340152,0x100000CA, -0x340152,0x5C0374,0x98340000,0x58340000,0x42340001,0x8C0372,0x62000025,0x420C0001,0x1180372,0x38000109,0x2E000372,0x8C0372,0x62000025,0x420C0001,0x1180372,0x38000109,0x2E000372,0x1180372,0x38000109,0x2E000372,0x2E000372,0x8C0372,0x62000025,0x420C0001,0x1180372,0x38000109,0x2E000372,0x1180372,0x38000109,0x2E000372,0x2E000372,0x1180372, -0x38000109,0x2E000372,0x2E000372,0x2E000372,0xFC080152,0x640372,0xFE4C0190,0x920000E9,0x6000010D,0x4A000104,0x3E000092,0x3600016D,0xD0000190,0x7A000128,0x4200007D,0x2E000372,0xC80372,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, -0x0,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x1,0x2,0x2,0x2,0x2,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1, -0x2,}; -static const uint32_t g_etc1_to_bc7_m6_table130[] = { -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1, -0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, -0x0,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1, -0x1,0x440000,0x440000,0x440000,0x440000,0x640000,0x640000,0x640000,0xCC0000,0xCC0000,0x20000001,0x640000,0x640000,0x640000,0xCC0000,0xCC0000,0x20000001,0xCC0000,0xCC0000,0x20000001,0x20000001,0x640000,0x640000,0x640000,0xCC0000,0xCC0000,0x20000001,0xCC0000,0xCC0000,0x20000001,0x20000001,0xCC0000, -0xCC0000,0x20000001,0x20000001,0x20000001,0x64C0000,0x480000,0x440000,0x5C0000,0x700000,0x900000,0xA40000,0xF80000,0x540000,0x640000,0x900000,0x20000001,0x900000,0x980000,0xE00000,0x1CC0000,0x4A000001,0xE00000,0x1CC0000,0x4A000001,0x1CC0000,0x4A000001,0x4A000001,0xE00000,0x1CC0000,0x4A000001,0x1CC0000,0x4A000001, -0x4A000001,0x1CC0000,0x4A000001,0x4A000001,0x4A000001,0xE00000,0x1CC0000,0x4A000001,0x1CC0000,0x4A000001,0x4A000001,0x1CC0000,0x4A000001,0x4A000001,0x4A000001,0x1CC0000,0x4A000001,0x4A000001,0x4A000001,0x4A000001,0x2BC0000,0x8A00000,0x8A00000,0x1000000,0x1740000,0x1FF80000,0x4A000001,0x4A000001,0x2CC0000,0x11C0000,0x41D40000,0x4A000001, -0x1400000,0x380F44,0xCE180304,0x6A180304,0x4A180305,0xA6000372,0x6E000005,0x4C04003A,0x50000374,0x440000C1,0x36000372,0x70000B53,0x62000455,0x460002A3,0x460005E5,0x40000296,0x3400049B,0x36000B53,0x320006F5,0x2C0007BE,0x24000B53,0x500F44,0x4C000773,0x40000494,0x400007D6,0x3A000417,0x2E0005B4,0x2E000C75,0x32000816,0x2A00089F,0x22000BD4,0xA00F44, -0x2C000AD9,0x26000ABA,0x20000D5F,0x1A000F44,0xFE000344,0xFC2809B2,0xFE2C0A49,0x9E00029D,0x6C0002C1,0x4C0002A2,0x440001A6,0x3A0003B2,0xD00005C2,0x7C000403,0x3E000573,0x2A00089F,0x700F44,0x480B54,0xC2240244,0x68200244,0x4A200245,0xA6000372,0x6E000005,0x4E080032,0x50000374,0x440000C1,0x36000372,0x6C0B53,0x62000455,0x460002A3,0x460005E5,0x40000296, -0x3400049B,0xDC0B53,0x320006F5,0x2C0007BE,0x24000B53,0x6C0B53,0x62000455,0x460002A3,0x460005E5,0x40000296,0x3400049B,0xDC0B53,0x320006F5,0x2C0007BE,0x24000B53,0xDC0B53,0x320006F5,0x2C0007BE,0x24000B53,0x24000B53,0xFE000344,0xF43807D4,0xF8400788,0x9E00029D,0x6C0002C1,0x4C0002A2,0x440001A6,0x3A0003B2,0xD0000519,0x7C0003C3,0x3E000563,0x2C0007BE, -0x9C0B53,0x180304,0x180304,0x180304,0x180304,0x66000000,0x66000000,0x66000000,0x32000000,0x32000000,0x20000001,0x32000242,0x32000242,0x32000242,0x280000CD,0x280000CD,0x1E00006D,0x18000242,0x18000242,0x1600015A,0x10000242,0x200303,0x200303,0x200303,0x22000156,0x22000156,0x180000D1,0x18000282,0x18000282,0x1600019A,0xE000263,0x3C0303, -0x3C0303,0x10000213,0xE0002AE,0xA000303,0xC40000B4,0xFE0C00D8,0x180304,0x640000F5,0x460000DD,0x2E0000E1,0x2E0000B4,0x22000104,0x64000191,0x5000014A,0x1E000248,0x1600019A,0x2C0303,0x200244,0x200244,0x200244,0x200244,0x66000000,0x66000000,0x66000000,0x32000000,0x32000000,0x20000001,0x2300242,0x2300242,0x2300242,0x280000CD,0x280000CD, -0x1E00006D,0x640242,0x640242,0x1600015A,0x10000242,0x2300242,0x2300242,0x2300242,0x280000CD,0x280000CD,0x1E00006D,0x640242,0x640242,0x1600015A,0x10000242,0x640242,0x640242,0x1600015A,0x10000242,0x10000242,0xC40000B4,0xFE0C00B4,0x200244,0x640000F5,0x460000DD,0x2E0000E1,0x2E0000B4,0x22000104,0x74000164,0x50000131,0x480242,0x1600015A, -0x480242,0x6C0374,0xA0440000,0x60440000,0x4A440001,0xA40372,0x6E000005,0x4A1C0001,0x14C0372,0x440000C1,0x36000372,0xA40372,0x6E000005,0x4A1C0001,0x14C0372,0x440000C1,0x36000372,0x14C0372,0x440000C1,0x36000372,0x36000372,0xA40372,0x6E000005,0x4A1C0001,0x14C0372,0x440000C1,0x36000372,0x14C0372,0x440000C1,0x36000372,0x36000372,0x14C0372, -0x440000C1,0x36000372,0x36000372,0x36000372,0xFE140164,0x2740372,0xF86001A5,0xA60000A4,0x6C0000DD,0x540000B9,0x46000059,0x42000132,0xF200015A,0x8C0000F4,0x4C000041,0x36000372,0xE80372,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, -0x0,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x1,0x2,0x2,0x2,0x2,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1, -0x2,}; -static const uint32_t g_etc1_to_bc7_m6_table131[] = { -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1, -0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0xC0000,0xC0000,0xC0000,0xC0000,0xC0000,0xC0000,0xC0000,0xC0000,0xC0000,0xC0000,0x100000,0x100000,0x100000,0x100000,0x100000, -0x100000,0x200000,0x200000,0x200000,0x4000001,0x100000,0x100000,0x100000,0x100000,0x100000,0x100000,0x200000,0x200000,0x200000,0x4000001,0x200000,0x200000,0x200000,0x4000001,0x4000001,0xC0000,0xC0000,0xC0000,0x20C0000,0x40C0000,0x100000,0x100000,0x140000,0x20C0000,0x40C0000,0x180000,0x200000, -0x180000,0x540000,0x540000,0x540000,0x540000,0x7C0000,0x7C0000,0x7C0000,0xFC0000,0xFC0000,0x28000001,0x7C0000,0x7C0000,0x7C0000,0xFC0000,0xFC0000,0x28000001,0xFC0000,0xFC0000,0x28000001,0x28000001,0x7C0000,0x7C0000,0x7C0000,0xFC0000,0xFC0000,0x28000001,0xFC0000,0xFC0000,0x28000001,0x28000001,0xFC0000, -0xFC0000,0x28000001,0x28000001,0x28000001,0x2600000,0x4580000,0x540000,0x2700000,0x8C0000,0xB00000,0xCC0000,0x1340000,0x680000,0x7C0000,0xB00000,0x28000001,0xB00000,0xA80000,0xF80000,0x1FC0000,0x52000001,0xF80000,0x1FC0000,0x52000001,0x1FC0000,0x52000001,0x52000001,0xF80000,0x1FC0000,0x52000001,0x1FC0000,0x52000001, -0x52000001,0x1FC0000,0x52000001,0x52000001,0x52000001,0xF80000,0x1FC0000,0x52000001,0x1FC0000,0x52000001,0x52000001,0x1FC0000,0x52000001,0x52000001,0x52000001,0x1FC0000,0x52000001,0x52000001,0x52000001,0x52000001,0x4D00000,0xB40000,0xB40000,0x1180000,0x19C0000,0x29F80000,0x52000001,0x52000001,0xE40000,0x13C0000,0x49E40000,0x52000001, -0x1640000,0x401198,0xDE200408,0x74200408,0x52200409,0xB6080386,0x78080015,0x560C007E,0x5C040386,0x4C0400A9,0x3E040386,0x84000BE8,0x680003F9,0x5200029B,0x5200058D,0x460001EE,0x3A00043B,0x40000BE8,0x3E0006C9,0x320007A2,0x2A000BEB,0x601194,0x62000829,0x4C00052C,0x4C00083E,0x460003FF,0x3A0005A4,0x3A000D81,0x38000852,0x320008C3,0x28000CAC,0xC41194, -0x32000C15,0x2C000BBE,0x26000ED7,0x20001194,0xFE0C03FE,0xFE2C0B9E,0xF63C0C94,0xB40001F1,0x76000211,0x5A0001E1,0x4C000105,0x4200030B,0xF200058B,0x90000386,0x46000541,0x320008C3,0x8C1194,0x580BE8,0xCE300288,0x70300288,0x52300289,0xB20C0372,0x760C0005,0x54140042,0x5A0C0372,0x4C0400A5,0x3E0C0372,0x2800BE8,0x680003F9,0x5200029B,0x5200058D,0x460001EE, -0x3A00043B,0x1080BE8,0x3E0006C9,0x320007A2,0x2A000BEB,0x2800BE8,0x680003F9,0x5200029B,0x5200058D,0x460001EE,0x3A00043B,0x1080BE8,0x3E0006C9,0x320007A2,0x2A000BEB,0x1080BE8,0x3E0006C9,0x320007A2,0x2A000BEB,0x2A000BEB,0xFE1403AD,0xFA440844,0xFE4C0810,0xB40001F1,0x76000211,0x5A0001E1,0x4C000105,0x4200030B,0xF20004AA,0x90000335,0x46000531,0x320007A2, -0xB80BE8,0x200408,0x200408,0x200408,0x200408,0x76080014,0x76080014,0x76080014,0x3C040014,0x3C040014,0x28040015,0x48000288,0x48000288,0x48000288,0x3400009D,0x3400009D,0x28000032,0x22000288,0x22000288,0x20000151,0x1600028A,0x300408,0x300408,0x300408,0x2E000196,0x2E000196,0x220000C3,0x1E0002FE,0x1E0002FE,0x1C0001B6,0x160002CA,0x5C0408, -0x5C0408,0x1600029B,0x1400035E,0xE00040B,0xF6000082,0xF2140195,0x200408,0x820000C1,0x5A0000A9,0x440000A9,0x40000082,0x2E0000DA,0x960001AB,0x5A000144,0x2C000291,0x1C0001B6,0x400408,0x300288,0x300288,0x300288,0x300288,0x720C0000,0x720C0000,0x720C0000,0x3A0C0000,0x3A0C0000,0x280C0001,0x2440288,0x2440288,0x2440288,0x3400009D,0x3400009D, -0x28000032,0x8C0288,0x8C0288,0x20000151,0x1600028A,0x2440288,0x2440288,0x2440288,0x3400009D,0x3400009D,0x28000032,0x8C0288,0x8C0288,0x20000151,0x1600028A,0x8C0288,0x8C0288,0x20000151,0x1600028A,0x1600028A,0xF6000082,0xF82000DD,0x300288,0x820000C1,0x5A0000A9,0x440000A9,0x40000082,0x2E0000DA,0x9600015A,0x5A000120,0x640288,0x20000151, -0x640288,0x7C0374,0xA8540000,0x68540000,0x52540001,0xBC0372,0x78080001,0x522C0001,0x17C0372,0x4A000091,0x3E000372,0xBC0372,0x78080001,0x522C0001,0x17C0372,0x4A000091,0x3E000372,0x17C0372,0x4A000091,0x3E000372,0x3E000372,0xBC0372,0x78080001,0x522C0001,0x17C0372,0x4A000091,0x3E000372,0x17C0372,0x4A000091,0x3E000372,0x3E000372,0x17C0372, -0x4A000091,0x3E000372,0x3E000372,0x3E000372,0xFC30016D,0xA840372,0xFE6C01B1,0xBC000071,0x80000095,0x5E000080,0x5000002D,0x4A0000FA,0xF80C0152,0x9E0000B5,0x56000014,0x3E000372,0x10C0372,0x40014,0x40014,0x40014,0x40014,0x40014,0x40014,0x40014,0x40014,0x40014,0x40014,0x10000000,0x10000000,0x10000000,0x10000000,0x10000000, -0x10000000,0x8000000,0x8000000,0x8000000,0x4000001,0x80012,0x80012,0x80012,0x80012,0x80012,0x80012,0x6000005,0x6000005,0x6000005,0x4000005,0xC0012,0xC0012,0xC0012,0x400000A,0x2000012,0x58000000,0x40014,0x40014,0x28000000,0x1C000000,0x14000000,0x14000000,0xE000000,0x20000005,0x16000002,0xA000001,0x6000005, -0xC0012,}; -static const uint32_t g_etc1_to_bc7_m6_table132[] = { -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1, -0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1C0001,0x1C0001,0x1C0001,0x1C0001,0x1C0001,0x1C0001,0x1C0001,0x1C0001,0x1C0001,0x1C0001,0x2C0000,0x2C0000,0x2C0000,0x2C0000,0x2C0000, -0x2C0000,0x580000,0x580000,0x580000,0xE000000,0x2C0000,0x2C0000,0x2C0000,0x2C0000,0x2C0000,0x2C0000,0x580000,0x580000,0x580000,0xE000000,0x580000,0x580000,0x580000,0xE000000,0xE000000,0x200000,0x1C0001,0x1C0001,0x6200000,0x240000,0x280000,0x280000,0x300000,0x6200000,0x240000,0x3C0000,0x580000, -0x3C0000,0x640001,0x640001,0x640001,0x640001,0x980000,0x980000,0x980000,0x1300000,0x1300000,0x32000000,0x980000,0x980000,0x980000,0x1300000,0x1300000,0x32000000,0x1300000,0x1300000,0x32000000,0x32000000,0x980000,0x980000,0x980000,0x1300000,0x1300000,0x32000000,0x1300000,0x1300000,0x32000000,0x32000000,0x1300000, -0x1300000,0x32000000,0x32000000,0x32000000,0x4740000,0x6C0000,0x640001,0x2880000,0xAC0000,0xD80000,0xF80000,0x1780000,0x800000,0x980000,0xD80000,0x32000000,0xD80000,0xB80001,0x1140000,0xFF80000,0x5C000000,0x1140000,0xFF80000,0x5C000000,0xFF80000,0x5C000000,0x5C000000,0x1140000,0xFF80000,0x5C000000,0xFF80000,0x5C000000, -0x5C000000,0xFF80000,0x5C000000,0x5C000000,0x5C000000,0x1140000,0xFF80000,0x5C000000,0xFF80000,0x5C000000,0x5C000000,0xFF80000,0x5C000000,0x5C000000,0x5C000000,0xFF80000,0x5C000000,0x5C000000,0x5C000000,0x5C000000,0xE80000,0xAC40000,0xAC40000,0x1380000,0x1C80000,0x35F00000,0x5C000000,0x5C000000,0xFC0000,0x15C0000,0x53D80000,0x5C000000, -0x18C0000,0x501423,0xEC2C055E,0x7E2C055E,0x5C2C055E,0xCA1003E3,0x86100072,0x6014011D,0x661003E3,0x560C00EA,0x461003E5,0xA0000BE8,0x7A00034E,0x5C04028E,0x620004C5,0x5200010D,0x460003B4,0x4E000BE8,0x4A00060E,0x3E0006ED,0x34000BE8,0x2741423,0x6E0008EE,0x58000601,0x5800089F,0x4C0003D6,0x400005B1,0x46000E44,0x4400082B,0x3C000898,0x34000D09,0xF01423, -0x38000D6E,0x32000CD1,0x2C00102C,0x26001425,0xFE200511,0xF8400DDB,0xFC480EE3,0xD000011D,0x8A000126,0x6A00010D,0x5A00005E,0x50000214,0xFE00052B,0xA80002B6,0x5400046A,0x3C000898,0xA81423,0x680BEB,0xD444028A,0x7A40028A,0x5C40028A,0xBA200373,0x821C0002,0x5E280041,0x62200373,0x561800A6,0x461C0375,0x9C0BE8,0x7A00034E,0x5C080288,0x620004C5,0x5200010D, -0x460003B4,0x13C0BE8,0x4A00060E,0x3E0006ED,0x34000BE8,0x9C0BE8,0x7A00034E,0x5C080288,0x620004C5,0x5200010D,0x460003B4,0x13C0BE8,0x4A00060E,0x3E0006ED,0x34000BE8,0x13C0BE8,0x4A00060E,0x3E0006ED,0x34000BE8,0x34000BE8,0xFA2C0402,0xF458087D,0xF860084A,0xD000011D,0x8A000126,0x6A00010D,0x5A00005E,0x50000214,0xFC040428,0xA800023D,0x54000451,0x3E0006ED, -0xE00BE8,0x2C055E,0x2C055E,0x2C055E,0x2C055E,0x8A100071,0x8A100071,0x8A100071,0x46100072,0x46100072,0x32100071,0x64000288,0x64000288,0x64000288,0x46000049,0x46000049,0x32000004,0x30000288,0x30000288,0x2A000104,0x20000288,0x40055E,0x40055E,0x40055E,0x3A0001F2,0x3A0001F2,0x2E0000F1,0x28000363,0x28000363,0x260001B2,0x1E0002F4,0x80055E, -0x80055E,0x20000359,0x1C000411,0x14000561,0xFC0C00AC,0xF8200291,0x2C055E,0xAC00006A,0x72000050,0x56000059,0x4C000032,0x40000082,0xC2000199,0x84000101,0x3E000298,0x260001B2,0x5C055E,0x40028A,0x40028A,0x40028A,0x40028A,0x7A200001,0x7A200001,0x7A200001,0x441C0001,0x441C0001,0x321C0001,0x600288,0x600288,0x600288,0x46000049,0x46000049, -0x32000004,0xC40288,0xC40288,0x2A000104,0x20000288,0x600288,0x600288,0x600288,0x46000049,0x46000049,0x32000004,0xC40288,0xC40288,0x2A000104,0x20000288,0xC40288,0xC40288,0x2A000104,0x20000288,0x20000288,0xFE100080,0xF23400F2,0x40028A,0xAC00006A,0x72000050,0x56000059,0x4C000032,0x40000082,0xC2000109,0x840000C1,0x8C0288,0x2A000104, -0x8C0288,0x900372,0xB0680001,0x70680001,0x5C640001,0xD40372,0x82180001,0x5C3C0000,0x1B00372,0x56000055,0x46000374,0xD40372,0x82180001,0x5C3C0000,0x1B00372,0x56000055,0x46000374,0x1B00372,0x56000055,0x46000374,0x46000374,0xD40372,0x82180001,0x5C3C0000,0x1B00372,0x56000055,0x46000374,0x1B00372,0x56000055,0x46000374,0x46000374,0x1B00372, -0x56000055,0x46000374,0x46000374,0x46000374,0xFE440188,0x4980372,0xFA8401C2,0xDA000041,0x9600006D,0x6C000055,0x5A00000D,0x540000B9,0xFE180164,0xBA00007D,0x62000004,0x46000374,0x1300372,0x100071,0x100071,0x100071,0x100071,0x100071,0x100071,0x100071,0x100071,0x100071,0x100071,0x2C000000,0x2C000000,0x2C000000,0x2C000000,0x2C000000, -0x2C000000,0x16000000,0x16000000,0x16000000,0xE000000,0x140071,0x140071,0x140071,0x140071,0x140071,0x140071,0x12000028,0x12000028,0x12000028,0xC000014,0x240071,0x240071,0x240071,0xA000041,0x6000071,0xE8000000,0x100071,0x100071,0x68000000,0x48000000,0x36000000,0x36000000,0x24000000,0x52000022,0x42000011,0x1C000004,0x12000028, -0x1C0071,}; -static const uint32_t g_etc1_to_bc7_m6_table133[] = { -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1, -0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2C0001,0x2C0001,0x2C0001,0x2C0001,0x2C0001,0x2C0001,0x2C0001,0x2C0001,0x2C0001,0x2C0001,0x440000,0x440000,0x440000,0x440000,0x440000, -0x440000,0x880000,0x880000,0x880000,0x16000000,0x440000,0x440000,0x440000,0x440000,0x440000,0x440000,0x880000,0x880000,0x880000,0x16000000,0x880000,0x880000,0x880000,0x16000000,0x16000000,0x300000,0x2C0001,0x2C0001,0x2340000,0x380000,0x23C0000,0x23C0000,0x4C0000,0x2340000,0x380000,0x600000,0x880000, -0x600000,0x740001,0x740001,0x740001,0x740001,0xB00000,0xB00000,0xB00000,0x1640000,0x1640000,0x3A000000,0xB00000,0xB00000,0xB00000,0x1640000,0x1640000,0x3A000000,0x1640000,0x1640000,0x3A000000,0x3A000000,0xB00000,0xB00000,0xB00000,0x1640000,0x1640000,0x3A000000,0x1640000,0x1640000,0x3A000000,0x3A000000,0x1640000, -0x1640000,0x3A000000,0x3A000000,0x3A000000,0x880000,0x67C0000,0x740001,0xA00000,0xC40000,0xF80000,0x1200000,0x1B40000,0x940000,0xB00000,0xF80000,0x3A000000,0xF80000,0xC80001,0x12C0000,0x1BF80000,0x64000000,0x12C0000,0x1BF80000,0x64000000,0x1BF80000,0x64000000,0x64000000,0x12C0000,0x1BF80000,0x64000000,0x1BF80000,0x64000000, -0x64000000,0x1BF80000,0x64000000,0x64000000,0x64000000,0x12C0000,0x1BF80000,0x64000000,0x1BF80000,0x64000000,0x64000000,0x1BF80000,0x64000000,0x64000000,0x64000000,0x1BF80000,0x64000000,0x64000000,0x64000000,0x64000000,0xFC0000,0xD80000,0xD80000,0x1540000,0x1EC0000,0x3FF00000,0x64000000,0x64000000,0x3100000,0x17C0000,0x5BE80000,0x64000000, -0x1AC0000,0x5C16CF,0xF83806EA,0x883806EA,0x643806EA,0xDA18047B,0x90180112,0x662001F9,0x7018047B,0x6014016E,0x4E18047D,0xB8000BE8,0x8C0002DE,0x660C02C2,0x6E00044D,0x5E00007D,0x4E00037D,0x5A000BE8,0x5000056A,0x44000675,0x3C000BE8,0x8816CF,0x7A000A0E,0x6200072E,0x68000911,0x580003FE,0x4C0005F9,0x52000F0C,0x4C00082B,0x44000886,0x3A000D5D,0x11416CF, -0x44000EFE,0x3E000E01,0x32001198,0x2C0016D1,0xFE280685,0xFE4C1017,0xFE4C119F,0xE6000086,0x9A0000A1,0x78000083,0x6200000D,0x5800015D,0xFE00061B,0xBC00020A,0x5E0003DE,0x44000886,0xC016CF,0x780BEB,0xDC54028A,0x8250028A,0x6450028A,0xC2300373,0x8A2C0002,0x66380041,0x6A300373,0x5E2800A6,0x4E2C0375,0xB40BE8,0x8C0002DE,0x64180288,0x6E00044D,0x5E00007D, -0x4E00037D,0x1700BE8,0x5000056A,0x44000675,0x3C000BE8,0xB40BE8,0x8C0002DE,0x64180288,0x6E00044D,0x5E00007D,0x4E00037D,0x1700BE8,0x5000056A,0x44000675,0x3C000BE8,0x1700BE8,0x5000056A,0x44000675,0x3C000BE8,0x3C000BE8,0xFE340432,0xFC68087D,0xFE6C085E,0xE6000086,0x9A0000A1,0x78000083,0x6200000D,0x5800015D,0xFE180455,0xBC00017A,0x5E0003BA,0x44000675, -0x1000BE8,0x3806EA,0x3806EA,0x3806EA,0x3806EA,0x9A180109,0x9A180109,0x9A180109,0x5018010A,0x5018010A,0x3A180109,0x7C000288,0x7C000288,0x7C000288,0x52000019,0x52000019,0x3A040008,0x3C000288,0x3C000288,0x320000B9,0x28000288,0x5006E9,0x5006E9,0x5006E9,0x4600028A,0x4600028A,0x34000169,0x340003DB,0x340003DB,0x2E0001C2,0x28000331,0xA006E9, -0xA006E9,0x2600043D,0x200004EC,0x1A0006E9,0xFE100140,0xFE2C03C9,0x3806EA,0xD000002D,0x86000020,0x6A00001D,0x62000009,0x4A000041,0xE40001A5,0x960000E2,0x4C0002A1,0x2E0001C2,0x7006E9,0x50028A,0x50028A,0x50028A,0x50028A,0x82300001,0x82300001,0x82300001,0x4C2C0001,0x4C2C0001,0x3A2C0001,0x780288,0x780288,0x780288,0x52000019,0x52000019, -0x3A0C0000,0xF40288,0xF40288,0x320000B9,0x28000288,0x780288,0x780288,0x780288,0x52000019,0x52000019,0x3A0C0000,0xF40288,0xF40288,0x320000B9,0x28000288,0xF40288,0xF40288,0x320000B9,0x28000288,0x28000288,0xFE200091,0xFA4400F2,0x50028A,0xD000002D,0x86000020,0x6A00001D,0x62000009,0x4A000041,0xF40000CA,0x9A000080,0xAC0288,0x320000B9, -0xAC0288,0xA00372,0xB8780001,0x78780001,0x64740001,0xEC0372,0x8A280001,0x644C0000,0x1E40372,0x60000034,0x4E000374,0xEC0372,0x8A280001,0x644C0000,0x1E40372,0x60000034,0x4E000374,0x1E40372,0x60000034,0x4E000374,0x4E000374,0xEC0372,0x8A280001,0x644C0000,0x1E40372,0x60000034,0x4E000374,0x1E40372,0x60000034,0x4E000374,0x4E000374,0x1E40372, -0x60000034,0x4E000374,0x4E000374,0x4E000374,0xFE50019A,0xCA80372,0xF29401E1,0xEE000020,0xA000003D,0x7A00002D,0x64000001,0x5C000091,0xFE2C0185,0xCC000059,0x6A080000,0x4E000374,0x1540372,0x180109,0x180109,0x180109,0x180109,0x180109,0x180109,0x180109,0x180109,0x180109,0x180109,0x44000000,0x44000000,0x44000000,0x44000000,0x44000000, -0x44000000,0x20000001,0x20000001,0x20000001,0x16000000,0x200109,0x200109,0x200109,0x200109,0x200109,0x200109,0x18000064,0x18000064,0x18000064,0x12000034,0x3C0109,0x3C0109,0x3C0109,0x1000009D,0xA000109,0xFC080019,0x180109,0x180109,0xA0000000,0x6E000000,0x54000000,0x54000000,0x38000000,0x84000050,0x64000028,0x26000008,0x18000064, -0x2C0109,}; -static const uint32_t g_etc1_to_bc7_m6_table134[] = { -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1, -0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x3C0001,0x3C0001,0x3C0001,0x3C0001,0x3C0001,0x3C0001,0x3C0001,0x3C0001,0x3C0001,0x3C0001,0x5C0000,0x5C0000,0x5C0000,0x5C0000,0x5C0000, -0x5C0000,0xB80000,0xB80000,0xB80000,0x1E000000,0x5C0000,0x5C0000,0x5C0000,0x5C0000,0x5C0000,0x5C0000,0xB80000,0xB80000,0xB80000,0x1E000000,0xB80000,0xB80000,0xB80000,0x1E000000,0x1E000000,0x8400000,0x3C0001,0x3C0001,0x480000,0x24C0000,0x540000,0x540000,0x680000,0x480000,0x24C0000,0x800000,0xB80000, -0x800000,0x840001,0x840001,0x840001,0x840001,0x2C40000,0x2C40000,0x2C40000,0x1940000,0x1940000,0x42000000,0x2C40000,0x2C40000,0x2C40000,0x1940000,0x1940000,0x42000000,0x1940000,0x1940000,0x42000000,0x42000000,0x2C40000,0x2C40000,0x2C40000,0x1940000,0x1940000,0x42000000,0x1940000,0x1940000,0x42000000,0x42000000,0x1940000, -0x1940000,0x42000000,0x42000000,0x42000000,0x9C0000,0xE8C0000,0x840001,0x2B40000,0xE00000,0x11C0000,0x1480000,0x1F00000,0xA80000,0x2C40000,0x11C0000,0x42000000,0x11C0000,0xD80001,0x1440000,0x27F80000,0x6C000000,0x1440000,0x27F80000,0x6C000000,0x27F80000,0x6C000000,0x6C000000,0x1440000,0x27F80000,0x6C000000,0x27F80000,0x6C000000, -0x6C000000,0x27F80000,0x6C000000,0x6C000000,0x6C000000,0x1440000,0x27F80000,0x6C000000,0x27F80000,0x6C000000,0x6C000000,0x27F80000,0x6C000000,0x6C000000,0x6C000000,0x27F80000,0x6C000000,0x6C000000,0x6C000000,0x6C000000,0x1100000,0xE80000,0xE80000,0x36C0000,0x9FC0000,0x49F00000,0x6C000000,0x6C000000,0x1280000,0x1980000,0x63F80000,0x6C000000, -0x1D00000,0x6819DB,0xFE4408D2,0x924008CA,0x6C4008CA,0xEA200553,0x9A2001FA,0x70280319,0x7A200553,0x681C0235,0x56200555,0xD0000BE8,0x9E00029E,0x6E10032E,0x800003ED,0x68000029,0x56000378,0x66000BE8,0x5C0004DA,0x500005E5,0x44000BE8,0x29819DB,0x86000B8E,0x6A0008DD,0x740009E9,0x62000465,0x5200068D,0x5E000FF4,0x58000853,0x4C00088E,0x40000DD1,0x13819DB, -0x4A0010D2,0x44000F69,0x3E001338,0x320019DD,0xFE340856,0xF65C1329,0xF860148A,0xFE000033,0xAC00003D,0x84000029,0x6C040006,0x640000D5,0xFE1007BB,0xD4000193,0x66000384,0x4C00088E,0xDC19DB,0x880BEB,0xE464028A,0x8A60028A,0x6C60028A,0xCA400373,0x923C0002,0x6E480041,0x72400373,0x663800A6,0x563C0375,0xCC0BE8,0x9E00029E,0x6C280288,0x800003ED,0x68000029, -0x56080374,0x1A00BE8,0x5C0004DA,0x500005E5,0x44000BE8,0xCC0BE8,0x9E00029E,0x6C280288,0x800003ED,0x68000029,0x56080374,0x1A00BE8,0x5C0004DA,0x500005E5,0x44000BE8,0x1A00BE8,0x5C0004DA,0x500005E5,0x44000BE8,0x44000BE8,0xFE50045E,0xF47808BB,0xF880088B,0xFE000033,0xAC00003D,0x84000029,0x6C040002,0x640000D5,0xFE2404A1,0xDA0000E6,0x6A000359,0x500005E5, -0x1240BE8,0x4008CA,0x4008CA,0x4008CA,0x4008CA,0xAA2001E1,0xAA2001E1,0xAA2001E1,0x5A2001E2,0x5A2001E2,0x422001E1,0x94000288,0x94000288,0x94000288,0x62000001,0x62000001,0x42080034,0x48000288,0x48000288,0x3C000088,0x30000288,0x6008C9,0x6008C9,0x6008C9,0x52000362,0x52000362,0x40000221,0x40000473,0x40000473,0x360001F8,0x2E000371,0xC408C9, -0xC408C9,0x2C000569,0x260005F4,0x200008C9,0xFE200221,0xF438058A,0x4008CA,0xF200000D,0x9E000005,0x7C000005,0x70000001,0x56000019,0xFE0001FA,0xB60000CE,0x5C0002AC,0x360001F8,0x8C08C9,0x60028A,0x60028A,0x60028A,0x60028A,0x8A400001,0x8A400001,0x8A400001,0x543C0001,0x543C0001,0x423C0001,0x900288,0x900288,0x900288,0x62000001,0x62000001, -0x421C0000,0x1240288,0x1240288,0x3C000088,0x30000288,0x900288,0x900288,0x900288,0x62000001,0x62000001,0x421C0000,0x1240288,0x1240288,0x3C000088,0x30000288,0x1240288,0x1240288,0x3C000088,0x30000288,0x30000288,0xFA3400A2,0xF2540109,0x60028A,0xF200000D,0x9E000005,0x7C000005,0x6E040000,0x56000019,0xFE0C00C8,0xBC00004A,0xD00288,0x3C000088, -0xD00288,0xB00372,0xC0880001,0x80880001,0x6C840001,0x1040372,0x92380001,0x6C5C0000,0x7FC0372,0x6A00001D,0x56000374,0x1040372,0x92380001,0x6C5C0000,0x7FC0372,0x6A00001D,0x56000374,0x7FC0372,0x6A00001D,0x56000374,0x56000374,0x1040372,0x92380001,0x6C5C0000,0x7FC0372,0x6A00001D,0x56000374,0x7FC0372,0x6A00001D,0x56000374,0x56000374,0x7FC0372, -0x6A00001D,0x56000374,0x56000374,0x56000374,0xF86C01A5,0xBC0372,0xFAA401E1,0xFE040014,0xAC040029,0x84000019,0x6C0C0000,0x64000071,0xFA4C0188,0xDE000034,0x72180000,0x56000374,0x1740372,0x2001E1,0x2001E1,0x2001E1,0x2001E1,0x2001E1,0x2001E1,0x2001E1,0x2001E1,0x2001E1,0x2001E1,0x5C000000,0x5C000000,0x5C000000,0x5C000000,0x5C000000, -0x5C000000,0x2C000001,0x2C000001,0x2C000001,0x1E000000,0x2C01E1,0x2C01E1,0x2C01E1,0x2C01E1,0x2C01E1,0x2C01E1,0x220000AA,0x220000AA,0x220000AA,0x1A000061,0x5801E1,0x5801E1,0x5801E1,0x16000121,0xE0001E1,0xFE0C0075,0x2001E1,0x2001E1,0xD8000000,0x96000000,0x72000000,0x72000000,0x4C000000,0xB6000092,0x82000050,0x3600000D,0x220000AA, -0x3C01E1,}; -static const uint32_t g_etc1_to_bc7_m6_table135[] = { -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1, -0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x4C0001,0x4C0001,0x4C0001,0x4C0001,0x4C0001,0x4C0001,0x4C0001,0x4C0001,0x4C0001,0x4C0001,0x740000,0x740000,0x740000,0x740000,0x740000, -0x740000,0xE80000,0xE80000,0xE80000,0x26000000,0x740000,0x740000,0x740000,0x740000,0x740000,0x740000,0xE80000,0xE80000,0xE80000,0x26000000,0xE80000,0xE80000,0xE80000,0x26000000,0x26000000,0x540000,0x4C0001,0x4C0001,0x4580000,0x2600000,0x2680000,0x2680000,0x2800000,0x4580000,0x2600000,0xA40000,0xE80000, -0xA40000,0x940001,0x940001,0x940001,0x940001,0x2DC0000,0x2DC0000,0x2DC0000,0x1C40000,0x1C40000,0x4A000000,0x2DC0000,0x2DC0000,0x2DC0000,0x1C40000,0x1C40000,0x4A000000,0x1C40000,0x1C40000,0x4A000000,0x4A000000,0x2DC0000,0x2DC0000,0x2DC0000,0x1C40000,0x1C40000,0x4A000000,0x1C40000,0x1C40000,0x4A000000,0x4A000000,0x1C40000, -0x1C40000,0x4A000000,0x4A000000,0x4A000000,0x4AC0000,0xA00000,0x940001,0xCC0000,0xFC0000,0x13C0000,0x16C0000,0xBF80000,0xBC0000,0x2DC0000,0x13C0000,0x4A000000,0x13C0000,0xE80001,0x15C0000,0x33F80000,0x74000000,0x15C0000,0x33F80000,0x74000000,0x33F80000,0x74000000,0x74000000,0x15C0000,0x33F80000,0x74000000,0x33F80000,0x74000000, -0x74000000,0x33F80000,0x74000000,0x74000000,0x74000000,0x15C0000,0x33F80000,0x74000000,0x33F80000,0x74000000,0x74000000,0x33F80000,0x74000000,0x74000000,0x74000000,0x33F80000,0x74000000,0x74000000,0x74000000,0x74000000,0x1240000,0x4F80000,0x4F80000,0x1880000,0x17FC0000,0x53F00000,0x74000000,0x74000000,0x33C0000,0x1B80000,0x6DCC0000,0x74000000, -0x1F00000,0x741D47,0xFE500B2E,0x9A4C0AFE,0x744C0AFE,0xFA28066B,0xA62C0322,0x7A340492,0x8428066B,0x6E24033A,0x5E28066D,0xEA000BE8,0xAC000289,0x781803CA,0x8C0003A5,0x72000009,0x60080394,0x72000BE8,0x6600046C,0x5600057D,0x4C000BE8,0xAC1D47,0x92000D6E,0x74000AFE,0x80000B01,0x6800053D,0x5E000775,0x680010D8,0x5E00088F,0x540008B8,0x48000E58,0x15C1D47, -0x5000130E,0x4A001121,0x440014EC,0x38001D49,0xFE3C0AD7,0xFC68162D,0xFE6C17C2,0xFE0C0095,0xC000000D,0x90000005,0x7608002D,0x6C000072,0xFE180A0E,0xE6000156,0x7600031A,0x540008B8,0xF41D47,0x980BEB,0xEC74028A,0x9270028A,0x7470028A,0xD2500373,0x9A4C0002,0x76580041,0x7A500373,0x6E4800A6,0x5E4C0375,0xE40BE8,0xAA040289,0x74380288,0x8C0003A5,0x72000009, -0x5E180374,0x1D00BE8,0x6600046C,0x5600057D,0x4C000BE8,0xE40BE8,0xAA040289,0x74380288,0x8C0003A5,0x72000009,0x5E180374,0x1D00BE8,0x6600046C,0x5600057D,0x4C000BE8,0x1D00BE8,0x6600046C,0x5600057D,0x4C000BE8,0x4C000BE8,0xFC6004C1,0xFC8808BB,0xFE8C08A3,0xFE14004A,0xC000000D,0x90000005,0x74140002,0x6C000072,0xFC4004E8,0xEC00007E,0x760002E9,0x5600057D, -0x1480BE8,0x4C0AFE,0x4C0AFE,0x4C0AFE,0x4C0AFE,0xBA2802F9,0xBA2802F9,0xBA2802F9,0x642802FA,0x642802FA,0x4A2802F9,0xAC000288,0xAC000288,0xAC000288,0x6E040005,0x6E040005,0x4C100084,0x54000288,0x54000288,0x44000055,0x38000288,0x700AFE,0x700AFE,0x700AFE,0x62000471,0x62000471,0x46000321,0x4C00052B,0x4C00052B,0x40000236,0x340003C9,0xE40AFE, -0xE40AFE,0x320006DD,0x2C00072C,0x24000B01,0xFE2C0378,0xFA440776,0x4C0AFE,0xFE080020,0xB8000001,0x8E000002,0x80040011,0x62000005,0xFE00031A,0xD40000D2,0x660002B4,0x40000236,0xA00AFE,0x70028A,0x70028A,0x70028A,0x70028A,0x92500001,0x92500001,0x92500001,0x5C4C0001,0x5C4C0001,0x4A4C0001,0xA80288,0xA80288,0xA80288,0x6A0C0001,0x6A0C0001, -0x4A2C0000,0x1580288,0x1580288,0x44000055,0x38000288,0xA80288,0xA80288,0xA80288,0x6A0C0001,0x6A0C0001,0x4A2C0000,0x1580288,0x1580288,0x44000055,0x38000288,0x1580288,0x1580288,0x44000055,0x38000288,0x38000288,0xF64800B5,0xFA640109,0x70028A,0xFA10000D,0xAE0C0001,0x88080000,0x76140000,0x62000005,0xF62400DD,0xDA000022,0xF00288,0x44000055, -0xF00288,0xC00372,0xC8980001,0x88980001,0x74940001,0x11C0372,0x9A480001,0x746C0000,0x13FC0372,0x72000008,0x5E000374,0x11C0372,0x9A480001,0x746C0000,0x13FC0372,0x72000008,0x5E000374,0x13FC0372,0x72000008,0x5E000374,0x5E000374,0x11C0372,0x9A480001,0x746C0000,0x13FC0372,0x72000008,0x5E000374,0x13FC0372,0x72000008,0x5E000374,0x5E000374,0x13FC0372, -0x72000008,0x5E000374,0x5E000374,0x5E000374,0xFE7801B1,0xCC0372,0xF2B40202,0xFE200020,0xC000000D,0x90000005,0x741C0000,0x70000050,0xFE5C018A,0xF400001D,0x7A280000,0x5E000374,0x1980372,0x2802F9,0x2802F9,0x2802F9,0x2802F9,0x2802F9,0x2802F9,0x2802F9,0x2802F9,0x2802F9,0x2802F9,0x76000000,0x76000000,0x76000000,0x76000000,0x76000000, -0x76000000,0x38000001,0x38000001,0x38000001,0x26000000,0x3802F9,0x3802F9,0x3802F9,0x3802F9,0x3802F9,0x3802F9,0x2E000112,0x2E000112,0x2E000112,0x22000089,0x7002F9,0x7002F9,0x7002F9,0x1C0001CD,0x120002F9,0xF4180120,0x2802F9,0x2802F9,0xFE040005,0xBE000000,0x90000000,0x90000000,0x5E000000,0xF60000F1,0xA400007D,0x46000011,0x2E000112, -0x5002F9,}; -static const uint32_t g_etc1_to_bc7_m6_table136[] = { -0xC0000,0xC0000,0xC0000,0xC0000,0xC0000,0xC0000,0xC0000,0xC0000,0xC0000,0xC0000,0xC0000,0xC0000,0xC0000,0xC0000,0xC0000,0xC0000,0xC0000,0xC0000,0xC0000,0xC0000,0x100000,0x100000,0x100000,0x100000,0x100000,0x100000,0x100000,0x100000,0x100000,0x100000,0x200000, -0x200000,0x200000,0x200000,0x4000001,0xC0000,0xC0000,0xC0000,0xC0000,0xC0000,0xC0000,0xC0000,0xC0000,0xC0000,0xC0000,0xC0000,0x100000,0x180000,0x600000,0x600000,0x600000,0x600000,0x600000,0x600000,0x600000,0x600000,0x600000,0x600000,0x28C0000,0x28C0000,0x28C0000,0x28C0000,0x28C0000, -0x28C0000,0x1200000,0x1200000,0x1200000,0x2E000001,0x28C0000,0x28C0000,0x28C0000,0x28C0000,0x28C0000,0x28C0000,0x1200000,0x1200000,0x1200000,0x2E000001,0x1200000,0x1200000,0x1200000,0x2E000001,0x2E000001,0xA640000,0x600000,0x600000,0x700000,0x780000,0x2800000,0x2800000,0xA00000,0x700000,0x780000,0xCC0000,0x1200000, -0xCC0000,0xA80000,0xA80000,0xA80000,0xA80000,0xF80000,0xF80000,0xF80000,0x1FC0000,0x1FC0000,0x52000001,0xF80000,0xF80000,0xF80000,0x1FC0000,0x1FC0000,0x52000001,0x1FC0000,0x1FC0000,0x52000001,0x52000001,0xF80000,0xF80000,0xF80000,0x1FC0000,0x1FC0000,0x52000001,0x1FC0000,0x1FC0000,0x52000001,0x52000001,0x1FC0000, -0x1FC0000,0x52000001,0x52000001,0x52000001,0xC40000,0xB40000,0xA80000,0xE40000,0x1180000,0x1640000,0x19C0000,0x17F80000,0x4D00000,0xF80000,0x1640000,0x52000001,0x1640000,0xFC0000,0x3740000,0x3FFC0000,0x7C000001,0x3740000,0x3FFC0000,0x7C000001,0x3FFC0000,0x7C000001,0x7C000001,0x3740000,0x3FFC0000,0x7C000001,0x3FFC0000,0x7C000001, -0x7C000001,0x3FFC0000,0x7C000001,0x7C000001,0x7C000001,0x3740000,0x3FFC0000,0x7C000001,0x3FFC0000,0x7C000001,0x7C000001,0x3FFC0000,0x7C000001,0x7C000001,0x7C000001,0x3FFC0000,0x7C000001,0x7C000001,0x7C000001,0x7C000001,0x13C0000,0x10C0000,0x10C0000,0x1A80000,0x27F80000,0x5DFC0000,0x7C000001,0x7C000001,0x3540000,0x1D80000,0x75FC0000,0x7C000001, -0xDFC0000,0x841EA8,0xFE600C58,0xA45C0BE8,0x7C5C0BE9,0xFC3806F8,0xB23803A1,0x82440531,0x8E3406E6,0x7A3403AE,0x683406E6,0xF80C0BE8,0xB80C028A,0x84240411,0x9608038E,0x7C0C000E,0x6A1403AE,0x7C0C0BE8,0x72000417,0x62040533,0x540C0BEB,0xC41EA8,0xA8000D6B,0x7C100BE9,0x8C000A7E,0x740004CE,0x68000746,0x7400107B,0x6A000782,0x5E0007AB,0x52000DBC,0x18C1EA8, -0x5C001329,0x560010EE,0x4A0014E3,0x40001EAC,0xFE500C45,0xFE6C17DE,0xF67C1978,0xFE1C0128,0xCA0C0011,0x9A0C0006,0x80140046,0x78040046,0xFE340B52,0xFE000098,0x820002B5,0x5E0007AB,0x1181EA8,0xAC0BE8,0xF8840288,0x9A840288,0x7C840289,0xDC600372,0xA0600005,0x7E680042,0x84600372,0x765800A5,0x68600372,0x1000BE8,0xB4140289,0x7E480289,0x9A00037D,0x7C14000A, -0x68280372,0x5F80BE8,0x720003F3,0x60000513,0x54000BEB,0x1000BE8,0xB4140289,0x7E480289,0x9A00037D,0x7C14000A,0x68280372,0x5F80BE8,0x720003F3,0x60000513,0x54000BEB,0x5F80BE8,0x720003F3,0x60000513,0x54000BEB,0x54000BEB,0xFE7804ED,0xF69C08F6,0xFAA408C9,0xFE300081,0xCA10000D,0x98100006,0x7E280001,0x7A000031,0xFC580519,0xFE040033,0x820002B1,0x60000513, -0x16C0BE8,0x5C0BE8,0x5C0BE8,0x5C0BE8,0x5C0BE8,0xC6380374,0xC6380374,0xC6380374,0x6E380374,0x6E380374,0x52340375,0xBC0C0288,0xBC0C0288,0xBC0C0288,0x7A100009,0x7A100009,0x561800A6,0x5E0C0288,0x5E0C0288,0x4E080041,0x400C028A,0x880BE8,0x880BE8,0x880BE8,0x6E000465,0x6E000465,0x52000373,0x580004E1,0x580004E1,0x4C0001AA,0x4000036B,0x1140BE8, -0x1140BE8,0x3E0006ED,0x3800072A,0x2C000BEB,0xFE3C0434,0xFE4C0864,0x5C0BE8,0xFE180059,0xC80C0005,0x9A0C0005,0x88140021,0x6E0C0002,0xFE1403B9,0xF600005E,0x7C00028C,0x4C0001AA,0xC00BE8,0x840288,0x840288,0x840288,0x840288,0x9C600000,0x9C600000,0x9C600000,0x64600000,0x64600000,0x52600001,0xC40288,0xC40288,0xC40288,0x72200001,0x72200001, -0x543C0001,0x18C0288,0x18C0288,0x5000002D,0x4000028A,0xC40288,0xC40288,0xC40288,0x72200001,0x72200001,0x543C0001,0x18C0288,0x18C0288,0x5000002D,0x4000028A,0x18C0288,0x18C0288,0x5000002D,0x4000028A,0x4000028A,0xFE5800B5,0xF4780120,0x840288,0xFE240012,0xBC180000,0x92180000,0x7E280000,0x70080000,0xFE3400DD,0xFC00000A,0x1180288,0x5000002D, -0x1180288,0xD00374,0xD2A80000,0x92A80000,0x7CA80001,0x1380372,0xA25C0001,0x7C800001,0x21F80372,0x7C000001,0x68000372,0x1380372,0xA25C0001,0x7C800001,0x21F80372,0x7C000001,0x68000372,0x21F80372,0x7C000001,0x68000372,0x68000372,0x1380372,0xA25C0001,0x7C800001,0x21F80372,0x7C000001,0x68000372,0x21F80372,0x7C000001,0x68000372,0x68000372,0x21F80372, -0x7C000001,0x68000372,0x68000372,0x68000372,0xFE9401C2,0xE00372,0xFCC80200,0xFC3C0032,0xCE040005,0x9C040000,0x7C300001,0x7A00002D,0xFE7001B1,0xFE080014,0x84380000,0x68000372,0x1BC0372,0x340374,0x340374,0x340374,0x340374,0x340374,0x340374,0x340374,0x340374,0x340374,0x340374,0x840C0000,0x840C0000,0x840C0000,0x840C0000,0x840C0000, -0x840C0000,0x440C0000,0x440C0000,0x440C0000,0x2E0C0001,0x500372,0x500372,0x500372,0x500372,0x500372,0x500372,0x3A0000E9,0x3A0000E9,0x3A0000E9,0x2E000052,0xA00372,0xA00372,0xA00372,0x200001E1,0x1A000372,0xFC28016D,0x340374,0x340374,0xFE10001D,0xD20C0000,0xA20C0000,0xA20C0000,0x6C0C0000,0xF80400F2,0xD6000041,0x5A000000,0x3A0000E9, -0x700372,}; -static const uint32_t g_etc1_to_bc7_m6_table137[] = { -0x1C0000,0x1C0000,0x1C0000,0x1C0000,0x1C0000,0x1C0000,0x1C0000,0x1C0000,0x1C0000,0x1C0000,0x1C0000,0x1C0000,0x1C0000,0x1C0000,0x1C0000,0x1C0000,0x1C0000,0x1C0000,0x1C0000,0x1C0000,0x280000,0x280000,0x280000,0x280000,0x280000,0x280000,0x280000,0x280000,0x280000,0x280000,0x500000, -0x500000,0x500000,0x500000,0xC000001,0x1C0000,0x1C0000,0x1C0000,0x1C0000,0x1C0000,0x1C0000,0x1C0000,0x1C0000,0x61C0000,0x61C0000,0x61C0000,0x280000,0x380000,0x700000,0x700000,0x700000,0x700000,0x700000,0x700000,0x700000,0x700000,0x700000,0x700000,0x2A40000,0x2A40000,0x2A40000,0x2A40000,0x2A40000, -0x2A40000,0x1500000,0x1500000,0x1500000,0x36000001,0x2A40000,0x2A40000,0x2A40000,0x2A40000,0x2A40000,0x2A40000,0x1500000,0x1500000,0x1500000,0x36000001,0x1500000,0x1500000,0x1500000,0x36000001,0x36000001,0x780000,0x700000,0x700000,0x4800000,0x8C0000,0x980000,0x980000,0xBC0000,0x4800000,0x8C0000,0xEC0000,0x1500000, -0xEC0000,0xB80000,0xB80000,0xB80000,0xB80000,0x1100000,0x1100000,0x1100000,0xDFC0000,0xDFC0000,0x5A000001,0x1100000,0x1100000,0x1100000,0xDFC0000,0xDFC0000,0x5A000001,0xDFC0000,0xDFC0000,0x5A000001,0x5A000001,0x1100000,0x1100000,0x1100000,0xDFC0000,0xDFC0000,0x5A000001,0xDFC0000,0xDFC0000,0x5A000001,0x5A000001,0xDFC0000, -0xDFC0000,0x5A000001,0x5A000001,0x5A000001,0x2D40000,0xC40000,0xB80000,0x2F80000,0x1340000,0x1880000,0x1C00000,0x21FC0000,0x4E40000,0x1100000,0x1880000,0x5A000001,0x1880000,0x10C0000,0x38C0000,0x4BFC0000,0x84000001,0x38C0000,0x4BFC0000,0x84000001,0x4BFC0000,0x84000001,0x84000001,0x38C0000,0x4BFC0000,0x84000001,0x4BFC0000,0x84000001, -0x84000001,0x4BFC0000,0x84000001,0x84000001,0x84000001,0x38C0000,0x4BFC0000,0x84000001,0x4BFC0000,0x84000001,0x84000001,0x4BFC0000,0x84000001,0x84000001,0x84000001,0x4BFC0000,0x84000001,0x84000001,0x84000001,0x84000001,0x1500000,0x71C0000,0x71C0000,0x3C00000,0x35F80000,0x67FC0000,0x84000001,0x84000001,0x16C0000,0x1F80000,0x7FD00000,0x84000001, -0x1DF80000,0x941EA8,0xFE740C91,0xAC6C0BE8,0x846C0BE9,0xFC4C0716,0xBA4803A1,0x8A540531,0x964406E6,0x824403AE,0x704406E6,0xFE1C0BEB,0xC01C028A,0x8C340411,0x9E18038E,0x841C000E,0x722403AE,0x841C0BE8,0x780C0413,0x6A140533,0x5C1C0BEB,0xDC1EA8,0xBA000CBB,0x84200BE9,0x9800096E,0x80000406,0x700006EC,0x86000F87,0x7400061B,0x68000663,0x5A000D03,0x1BC1EA8, -0x6600124C,0x5C000FB6,0x5600140B,0x48001EAC,0xFE640CCE,0xFC8817E8,0xFE8C1978,0xFE34018E,0xD21C0011,0xA21C0006,0x88240046,0x80140046,0xFE440C0F,0xFE1000C2,0x8A08029D,0x68000663,0x1381EA8,0xBC0BE8,0xFC940289,0xA2940288,0x84940289,0xE4700372,0xA8700005,0x86780042,0x8C700372,0x7E6800A5,0x70700372,0x1180BE8,0xBC240289,0x86580289,0xA6040372,0x8424000A, -0x70380372,0x11F80BE8,0x78000393,0x6C0004B3,0x5C000BEB,0x1180BE8,0xBC240289,0x86580289,0xA6040372,0x8424000A,0x70380372,0x11F80BE8,0x78000393,0x6C0004B3,0x5C000BEB,0x11F80BE8,0x78000393,0x6C0004B3,0x5C000BEB,0x5C000BEB,0xFE800552,0xFEAC08F6,0xFEAC0901,0xFE4000AB,0xD220000D,0xA0200006,0x86380001,0x82000022,0xFE5C0579,0xFE180059,0x8C00028E,0x6C0004B3, -0x1900BE8,0x6C0BE8,0x6C0BE8,0x6C0BE8,0x6C0BE8,0xCE480374,0xCE480374,0xCE480374,0x76480374,0x76480374,0x5A440375,0xC41C0288,0xC41C0288,0xC41C0288,0x82200009,0x82200009,0x5E2800A6,0x661C0288,0x661C0288,0x56180041,0x481C028A,0xA00BE8,0xA00BE8,0xA00BE8,0x800003ED,0x800003ED,0x5A100373,0x6800042A,0x6800042A,0x540000F6,0x460002EB,0x1440BE8, -0x1440BE8,0x4A000655,0x3E00068A,0x34000BEB,0xFE4C0461,0xFA64087D,0x6C0BE8,0xFE2C0081,0xD01C0005,0xA21C0005,0x90240021,0x761C0002,0xFA2C03F9,0xFC080049,0x840C028A,0x540000F6,0xE40BE8,0x940288,0x940288,0x940288,0x940288,0xA4700000,0xA4700000,0xA4700000,0x6C700000,0x6C700000,0x5A700001,0xDC0288,0xDC0288,0xDC0288,0x7A300001,0x7A300001, -0x5C4C0001,0x1BC0288,0x1BC0288,0x58000019,0x4800028A,0xDC0288,0xDC0288,0xDC0288,0x7A300001,0x7A300001,0x5C4C0001,0x1BC0288,0x1BC0288,0x58000019,0x4800028A,0x1BC0288,0x1BC0288,0x58000019,0x4800028A,0x4800028A,0xFA6C00C8,0xFC880120,0x940288,0xFE34001D,0xC4280000,0x9A280000,0x86380000,0x78180000,0xFA4800F4,0xFC14000D,0x1380288,0x58000019, -0x1380288,0xE00374,0xDAB80000,0x9AB80000,0x84B80001,0x1500372,0xAA6C0001,0x84900001,0x2DF80372,0x84100001,0x70000372,0x1500372,0xAA6C0001,0x84900001,0x2DF80372,0x84100001,0x70000372,0x2DF80372,0x84100001,0x70000372,0x70000372,0x1500372,0xAA6C0001,0x84900001,0x2DF80372,0x84100001,0x70000372,0x2DF80372,0x84100001,0x70000372,0x70000372,0x2DF80372, -0x84100001,0x70000372,0x70000372,0x70000372,0xF8A801E1,0xF00372,0xF4D80221,0xFC540048,0xDC080001,0xA4140000,0x84400001,0x82000019,0xFC8C01C2,0xFE200028,0x8C480000,0x70000372,0x1E00372,0x440374,0x440374,0x440374,0x440374,0x440374,0x440374,0x440374,0x440374,0x440374,0x440374,0x8C1C0000,0x8C1C0000,0x8C1C0000,0x8C1C0000,0x8C1C0000, -0x8C1C0000,0x4C1C0000,0x4C1C0000,0x4C1C0000,0x361C0001,0x680372,0x680372,0x680372,0x680372,0x680372,0x680372,0x4C000089,0x4C000089,0x4C000089,0x36000011,0xD00372,0xD00372,0xD00372,0x2C000179,0x22000372,0xF4380188,0x440374,0x440374,0xFE200028,0xDA1C0000,0xAA1C0000,0xAA1C0000,0x741C0000,0xFE1000FA,0xFE000014,0x62100000,0x4C000089, -0x940372,}; -static const uint32_t g_etc1_to_bc7_m6_table138[] = { -0x2C0000,0x2C0000,0x2C0000,0x2C0000,0x2C0000,0x2C0000,0x2C0000,0x2C0000,0x2C0000,0x2C0000,0x2C0000,0x2C0000,0x2C0000,0x2C0000,0x2C0000,0x2C0000,0x2C0000,0x2C0000,0x2C0000,0x2C0000,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x800000, -0x800000,0x800000,0x800000,0x14000001,0x2C0000,0x2C0000,0x2C0000,0x2C0000,0x2C0000,0x2C0000,0x2C0000,0x2C0000,0xE2C0000,0xE2C0000,0xE2C0000,0x400000,0x5C0000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x2BC0000,0x2BC0000,0x2BC0000,0x2BC0000,0x2BC0000, -0x2BC0000,0x1800000,0x1800000,0x1800000,0x3E000001,0x2BC0000,0x2BC0000,0x2BC0000,0x2BC0000,0x2BC0000,0x2BC0000,0x1800000,0x1800000,0x1800000,0x3E000001,0x1800000,0x1800000,0x1800000,0x3E000001,0x3E000001,0x880000,0x800000,0x800000,0x940000,0xA00000,0x2AC0000,0x2AC0000,0x2D40000,0x940000,0xA00000,0x1100000,0x1800000, -0x1100000,0xC80000,0xC80000,0xC80000,0xC80000,0x1280000,0x1280000,0x1280000,0x19FC0000,0x19FC0000,0x62000001,0x1280000,0x1280000,0x1280000,0x19FC0000,0x19FC0000,0x62000001,0x19FC0000,0x19FC0000,0x62000001,0x62000001,0x1280000,0x1280000,0x1280000,0x19FC0000,0x19FC0000,0x62000001,0x19FC0000,0x19FC0000,0x62000001,0x62000001,0x19FC0000, -0x19FC0000,0x62000001,0x62000001,0x62000001,0xE80000,0x2D40000,0xC80000,0x1100000,0x1500000,0x1A80000,0x1E80000,0x2DF80000,0x4F80000,0x1280000,0x1A80000,0x62000001,0x1A80000,0x11C0000,0x3A40000,0x57FC0000,0x8C000001,0x3A40000,0x57FC0000,0x8C000001,0x57FC0000,0x8C000001,0x8C000001,0x3A40000,0x57FC0000,0x8C000001,0x57FC0000,0x8C000001, -0x8C000001,0x57FC0000,0x8C000001,0x8C000001,0x8C000001,0x3A40000,0x57FC0000,0x8C000001,0x57FC0000,0x8C000001,0x8C000001,0x57FC0000,0x8C000001,0x8C000001,0x8C000001,0x57FC0000,0x8C000001,0x8C000001,0x8C000001,0x8C000001,0x1640000,0xF2C0000,0xF2C0000,0x1DC0000,0x41FC0000,0x71FC0000,0x8C000001,0x8C000001,0x3800000,0xFFC0000,0x87E00000,0x8C000001, -0x2BFC0000,0xA41EA8,0xFE800CD5,0xB47C0BE8,0x8C7C0BE9,0xFE5C073E,0xC25803A1,0x92640531,0x9E5406E6,0x8A5403AE,0x785406E6,0xFE300BF8,0xC82C028A,0x94440411,0xA628038E,0x8C2C000E,0x7A3403AE,0x8C2C0BE8,0x801C0413,0x72240533,0x642C0BEB,0xF41EA8,0xC6000C43,0x8C300BE9,0xA8000866,0x8C00039E,0x780806E6,0x92000EA7,0x800004F3,0x70000563,0x64000C64,0x1F01EA8, -0x72001164,0x66000EB4,0x5C00131B,0x50001EAC,0xFE780D71,0xF498186E,0xF8A019DD,0xFE440206,0xDA2C0011,0xAA2C0006,0x90340046,0x88240046,0xFE540C9B,0xFE240136,0x9218029D,0x70000563,0x15C1EA8,0xCC0BE8,0xFEA40291,0xAAA40288,0x8CA40289,0xEC800372,0xB0800005,0x8E880042,0x94800372,0x867800A5,0x78800372,0x1300BE8,0xC4340289,0x8E680289,0xAE140372,0x8C34000A, -0x78480372,0x1DF40BE8,0x8400033B,0x72000463,0x64000BEB,0x1300BE8,0xC4340289,0x8E680289,0xAE140372,0x8C34000A,0x78480372,0x1DF40BE8,0x8400033B,0x72000463,0x64000BEB,0x1DF40BE8,0x8400033B,0x72000463,0x64000BEB,0x64000BEB,0xFE94057B,0xF8C00934,0xFAC4090C,0xFE5400EA,0xDA30000D,0xA8300006,0x8E480001,0x8A100022,0xFE780595,0xFE300095,0x96080288,0x72000463, -0x1B00BE8,0x7C0BE8,0x7C0BE8,0x7C0BE8,0x7C0BE8,0xD6580374,0xD6580374,0xD6580374,0x7E580374,0x7E580374,0x62540375,0xCC2C0288,0xCC2C0288,0xCC2C0288,0x8A300009,0x8A300009,0x663800A6,0x6E2C0288,0x6E2C0288,0x5E280041,0x502C028A,0xB80BE8,0xB80BE8,0xB80BE8,0x8C00039D,0x8C00039D,0x62200373,0x7400039A,0x7400039A,0x5E00006A,0x500002A3,0x1740BE8, -0x1740BE8,0x500005CD,0x4A0005FA,0x3C000BEB,0xFE5804B9,0xFE6C08A5,0x7C0BE8,0xFE3C00A8,0xD82C0005,0xAA2C0005,0x98340021,0x7E2C0002,0xFE3C0428,0xFE180062,0x8C1C028A,0x5E00006A,0x1080BE8,0xA40288,0xA40288,0xA40288,0xA40288,0xAC800000,0xAC800000,0xAC800000,0x74800000,0x74800000,0x62800001,0xF40288,0xF40288,0xF40288,0x82400001,0x82400001, -0x645C0001,0x1F00288,0x1F00288,0x6000000A,0x5000028A,0xF40288,0xF40288,0xF40288,0x82400001,0x82400001,0x645C0001,0x1F00288,0x1F00288,0x6000000A,0x5000028A,0x1F00288,0x1F00288,0x6000000A,0x5000028A,0x5000028A,0xF68000DD,0xF4980139,0xA40288,0xF8500029,0xCC380000,0xA2380000,0x8E480000,0x80280000,0xF2600109,0xFE240014,0x15C0288,0x6000000A, -0x15C0288,0xF00374,0xE2C80000,0xA2C80000,0x8CC80001,0x1680372,0xB27C0001,0x8CA00001,0x39F80372,0x8C200001,0x78000372,0x1680372,0xB27C0001,0x8CA00001,0x39F80372,0x8C200001,0x78000372,0x39F80372,0x8C200001,0x78000372,0x78000372,0x1680372,0xB27C0001,0x8CA00001,0x39F80372,0x8C200001,0x78000372,0x39F80372,0x8C200001,0x78000372,0x78000372,0x39F80372, -0x8C200001,0x78000372,0x78000372,0x78000372,0xFEB401ED,0x9000372,0xFCE80221,0xFE6C0055,0xE4180001,0xAC240000,0x8C500001,0x8A00000D,0xFE9801D4,0xFE400032,0x94580000,0x78000372,0x3FC0372,0x540374,0x540374,0x540374,0x540374,0x540374,0x540374,0x540374,0x540374,0x540374,0x540374,0x942C0000,0x942C0000,0x942C0000,0x942C0000,0x942C0000, -0x942C0000,0x542C0000,0x542C0000,0x542C0000,0x3E2C0001,0x800372,0x800372,0x800372,0x800372,0x800372,0x800372,0x58000041,0x58000041,0x58000041,0x3E040001,0x1000372,0x1000372,0x1000372,0x38000131,0x2A000372,0xFC480188,0x540374,0x540374,0xFA340034,0xE22C0000,0xB22C0000,0xB22C0000,0x7C2C0000,0xFE200115,0xFE140019,0x6A200000,0x58000041, -0xB40372,}; -static const uint32_t g_etc1_to_bc7_m6_table139[] = { -0x3C0000,0x3C0000,0x3C0000,0x3C0000,0x3C0000,0x3C0000,0x3C0000,0x3C0000,0x3C0000,0x3C0000,0x3C0000,0x3C0000,0x3C0000,0x3C0000,0x3C0000,0x3C0000,0x3C0000,0x3C0000,0x3C0000,0x3C0000,0x580000,0x580000,0x580000,0x580000,0x580000,0x580000,0x580000,0x580000,0x580000,0x580000,0xB00000, -0xB00000,0xB00000,0xB00000,0x1C000001,0x3C0000,0x3C0000,0x3C0000,0x3C0000,0x3C0000,0x3C0000,0x3C0000,0x3C0000,0x400000,0x400000,0x400000,0x580000,0x7C0000,0x900000,0x900000,0x900000,0x900000,0x900000,0x900000,0x900000,0x900000,0x900000,0x900000,0xD40000,0xD40000,0xD40000,0xD40000,0xD40000, -0xD40000,0x1B00000,0x1B00000,0x1B00000,0x46000001,0xD40000,0xD40000,0xD40000,0xD40000,0xD40000,0xD40000,0x1B00000,0x1B00000,0x1B00000,0x46000001,0x1B00000,0x1B00000,0x1B00000,0x46000001,0x46000001,0x4980000,0x900000,0x900000,0xA80000,0xB40000,0xC40000,0xC40000,0xF00000,0xA80000,0xB40000,0x1300000,0x1B00000, -0x1300000,0xD80000,0xD80000,0xD80000,0xD80000,0x1400000,0x1400000,0x1400000,0x25F80000,0x25F80000,0x6A000001,0x1400000,0x1400000,0x1400000,0x25F80000,0x25F80000,0x6A000001,0x25F80000,0x25F80000,0x6A000001,0x6A000001,0x1400000,0x1400000,0x1400000,0x25F80000,0x25F80000,0x6A000001,0x25F80000,0x25F80000,0x6A000001,0x6A000001,0x25F80000, -0x25F80000,0x6A000001,0x6A000001,0x6A000001,0xFC0000,0xAE40000,0xD80000,0x3240000,0x16C0000,0x1CC0000,0x9F80000,0x37FC0000,0x50C0000,0x1400000,0x1CC0000,0x6A000001,0x1CC0000,0x12C0000,0x3BC0000,0x63FC0000,0x94000001,0x3BC0000,0x63FC0000,0x94000001,0x63FC0000,0x94000001,0x94000001,0x3BC0000,0x63FC0000,0x94000001,0x63FC0000,0x94000001, -0x94000001,0x63FC0000,0x94000001,0x94000001,0x94000001,0x3BC0000,0x63FC0000,0x94000001,0x63FC0000,0x94000001,0x94000001,0x63FC0000,0x94000001,0x94000001,0x94000001,0x63FC0000,0x94000001,0x94000001,0x94000001,0x94000001,0x1780000,0x1400000,0x1400000,0x1F80000,0x4FFC0000,0x7BFC0000,0x94000001,0x94000001,0x1980000,0x21FC0000,0x8FF00000,0x94000001, -0x3BFC0000,0xB41EA8,0xFE980D35,0xBC8C0BE8,0x948C0BE9,0xFE74078E,0xCA6803A1,0x9A740531,0xA66406E6,0x926403AE,0x806406E6,0xFE440C13,0xD03C028A,0x9C540411,0xAE38038E,0x943C000E,0x824403AE,0x943C0BE8,0x882C0413,0x7A340533,0x6C3C0BEB,0x10C1EA8,0xD8000BFB,0x94400BE9,0xBA0007BE,0x9608038E,0x801806E6,0x9E000DE7,0x8C00040B,0x7A000497,0x6C000C0F,0xBF81EA8, -0x7800109C,0x72000DB4,0x6600126C,0x58001EAC,0xFE8C0E18,0xFCA8186E,0xFEAC19E1,0xFE5C0296,0xE23C0011,0xB23C0006,0x98440046,0x90340046,0xFE700D55,0xFE3401B7,0x9A28029D,0x7A000497,0x17C1EA8,0xDC0BE8,0xFCB802A9,0xB2B40288,0x94B40289,0xF4900372,0xB8900005,0x96980042,0x9C900372,0x8E8800A5,0x80900372,0x3440BE8,0xCC440289,0x96780289,0xB6240372,0x9444000A, -0x80580372,0x27FC0BE8,0x8E000301,0x7C000422,0x6C000BEB,0x3440BE8,0xCC440289,0x96780289,0xB6240372,0x9444000A,0x80580372,0x27FC0BE8,0x8E000301,0x7C000422,0x6C000BEB,0x27FC0BE8,0x8E000301,0x7C000422,0x6C000BEB,0x6C000BEB,0xFCB005BD,0xFECC0938,0xFECC094C,0xFE6C0129,0xE240000D,0xB0400006,0x96580001,0x92200022,0xFE8805E8,0xFE4800B9,0x9E180288,0x7C000422, -0x1D40BE8,0x8C0BE8,0x8C0BE8,0x8C0BE8,0x8C0BE8,0xDE680374,0xDE680374,0xDE680374,0x86680374,0x86680374,0x6A640375,0xD43C0288,0xD43C0288,0xD43C0288,0x92400009,0x92400009,0x6E4800A6,0x763C0288,0x763C0288,0x66380041,0x583C028A,0xD00BE8,0xD00BE8,0xD00BE8,0x9E000375,0x9E000375,0x6A300373,0x8000032A,0x8000032A,0x6800001A,0x5A00028A,0x1A40BE8, -0x1A40BE8,0x5C000545,0x5000056A,0x44000BEB,0xFE6804EE,0xFA8408B8,0x8C0BE8,0xFE4C00D9,0xE03C0005,0xB23C0005,0xA0440021,0x863C0002,0xFE500455,0xFE300081,0x942C028A,0x6800001A,0x1280BE8,0xB40288,0xB40288,0xB40288,0xB40288,0xB4900000,0xB4900000,0xB4900000,0x7C900000,0x7C900000,0x6A900001,0x10C0288,0x10C0288,0x10C0288,0x8A500001,0x8A500001, -0x6C6C0001,0xBF80288,0xBF80288,0x6A000001,0x5800028A,0x10C0288,0x10C0288,0x10C0288,0x8A500001,0x8A500001,0x6C6C0001,0xBF80288,0xBF80288,0x6A000001,0x5800028A,0xBF80288,0xBF80288,0x6A000001,0x5800028A,0x5800028A,0xFE9000DD,0xFCA80139,0xB40288,0xFE5C002D,0xD4480000,0xAA480000,0x96580000,0x88380000,0xFA700109,0xFA400020,0x17C0288,0x6A000001, -0x17C0288,0x1000374,0xEAD80000,0xAAD80000,0x94D80001,0x1800372,0xBA8C0001,0x94B00001,0x45F80372,0x94300001,0x80000372,0x1800372,0xBA8C0001,0x94B00001,0x45F80372,0x94300001,0x80000372,0x45F80372,0x94300001,0x80000372,0x80000372,0x1800372,0xBA8C0001,0x94B00001,0x45F80372,0x94300001,0x80000372,0x45F80372,0x94300001,0x80000372,0x80000372,0x45F80372, -0x94300001,0x80000372,0x80000372,0x80000372,0xFCCC0202,0x1140372,0xF4F80244,0xFE800071,0xEC280001,0xB4340000,0x94600001,0x94000002,0xFEAC01F9,0xFE58004A,0x9C680000,0x80000372,0x13FC0372,0x640374,0x640374,0x640374,0x640374,0x640374,0x640374,0x640374,0x640374,0x640374,0x640374,0x9C3C0000,0x9C3C0000,0x9C3C0000,0x9C3C0000,0x9C3C0000, -0x9C3C0000,0x5C3C0000,0x5C3C0000,0x5C3C0000,0x463C0001,0x980372,0x980372,0x980372,0x980372,0x980372,0x980372,0x68000011,0x68000011,0x68000011,0x46140001,0x1300372,0x1300372,0x1300372,0x3E0000E1,0x32000372,0xF45801A5,0x640374,0x640374,0xFC48003D,0xEA3C0000,0xBA3C0000,0xBA3C0000,0x843C0000,0xFC380120,0xF8280029,0x72300000,0x68000011, -0xD80372,}; -static const uint32_t g_etc1_to_bc7_m6_table140[] = { -0x4C0001,0x4C0001,0x4C0001,0x4C0001,0x4C0001,0x4C0001,0x4C0001,0x4C0001,0x4C0001,0x4C0001,0x4C0001,0x4C0001,0x4C0001,0x4C0001,0x4C0001,0x4C0001,0x4C0001,0x4C0001,0x4C0001,0x4C0001,0x740000,0x740000,0x740000,0x740000,0x740000,0x740000,0x740000,0x740000,0x740000,0x740000,0xE80000, -0xE80000,0xE80000,0xE80000,0x26000000,0x4C0001,0x4C0001,0x4C0001,0x4C0001,0x4C0001,0x4C0001,0x4C0001,0x4C0001,0x540000,0x540000,0x540000,0x740000,0xA40000,0xA00001,0xA00001,0xA00001,0xA00001,0xA00001,0xA00001,0xA00001,0xA00001,0xA00001,0xA00001,0xF00000,0xF00000,0xF00000,0xF00000,0xF00000, -0xF00000,0x1E80000,0x1E80000,0x1E80000,0x50000000,0xF00000,0xF00000,0xF00000,0xF00000,0xF00000,0xF00000,0x1E80000,0x1E80000,0x1E80000,0x50000000,0x1E80000,0x1E80000,0x1E80000,0x50000000,0x50000000,0xAC0000,0xA00001,0xA00001,0xBC0000,0xCC0000,0xDC0000,0xDC0000,0x1100000,0xBC0000,0xCC0000,0x1580000,0x1E80000, -0x1580000,0xE80001,0xE80001,0xE80001,0xE80001,0x15C0000,0x15C0000,0x15C0000,0x33F80000,0x33F80000,0x74000000,0x15C0000,0x15C0000,0x15C0000,0x33F80000,0x33F80000,0x74000000,0x33F80000,0x33F80000,0x74000000,0x74000000,0x15C0000,0x15C0000,0x15C0000,0x33F80000,0x33F80000,0x74000000,0x33F80000,0x33F80000,0x74000000,0x74000000,0x33F80000, -0x33F80000,0x74000000,0x74000000,0x74000000,0x1100000,0x4F80000,0xE80001,0x33C0000,0x1880000,0x1F00000,0x17FC0000,0x43FC0000,0x1240000,0x15C0000,0x1F00000,0x74000000,0x1F00000,0x13C0001,0x1D80000,0x71F80000,0x9E000000,0x1D80000,0x71F80000,0x9E000000,0x71F80000,0x9E000000,0x9E000000,0x1D80000,0x71F80000,0x9E000000,0x71F80000,0x9E000000, -0x9E000000,0x71F80000,0x9E000000,0x9E000000,0x9E000000,0x1D80000,0x71F80000,0x9E000000,0x71F80000,0x9E000000,0x9E000000,0x71F80000,0x9E000000,0x9E000000,0x9E000000,0x71F80000,0x9E000000,0x9E000000,0x9E000000,0x9E000000,0x58C0000,0x1540000,0x1540000,0x13FC0000,0x5FF80000,0x87F80000,0x9E000000,0x9E000000,0x1B00000,0x33FC0000,0x99E40000,0x9E000000, -0x4BFC0000,0xC41EAC,0xFEA40D93,0xC4A00BEB,0x9E9C0BEB,0xFE8407F4,0xD47C03A3,0xA2840533,0xAE7806E6,0x9A7403AE,0x887806E6,0xFE5C0C49,0xDA50028A,0xA6680413,0xB84C038E,0x9E4C000E,0x8A5403AE,0x9C500BE9,0x92400411,0x82440531,0x764C0BE9,0x3241EA8,0xE8080BE9,0x9E500BE8,0xC6000736,0xA01C038E,0x882C06E6,0xAE000D2F,0x98000345,0x840003FD,0x76000BE8,0x17FC1EA8, -0x84000FB8,0x78000C98,0x6C001198,0x62001EA8,0xFEA00EBE,0xF6BC18F4,0xF8C01A44,0xFE70034E,0xF04C000E,0xBC500006,0xA2580046,0x9A480046,0xFE800E11,0xFE500235,0xA438029D,0x840003FD,0x1A41EA8,0xEC0BEB,0xFEC802CA,0xBCC4028A,0x9EC4028A,0xFCA40373,0xC4A00002,0xA0AC0041,0xA4A40373,0x989C00A6,0x88A00375,0x1600BE8,0xD4580289,0x9E8C0288,0xBE380372,0x9C540009, -0x886C0374,0x35FC0BE8,0x9A0002CA,0x840003E4,0x76000BE8,0x1600BE8,0xD4580289,0x9E8C0288,0xBE380372,0x9C540009,0x886C0374,0x35FC0BE8,0x9A0002CA,0x840003E4,0x76000BE8,0x35FC0BE8,0x9A0002CA,0x840003E4,0x76000BE8,0x76000BE8,0xFEBC0611,0xF8E00975,0xFCE8094E,0xFE800189,0xEA54000D,0xBA540005,0x9E680002,0x9A380021,0xFEA40632,0xFE5C0116,0xA62C0289,0x840003E4, -0x1F80BE8,0x9C0BEB,0x9C0BEB,0x9C0BEB,0x9C0BEB,0xE8780372,0xE8780372,0xE8780372,0x90780372,0x90780372,0x74780372,0xDA500289,0xDA500289,0xDA500289,0x9A50000A,0x9A50000A,0x785C00A5,0x804C0289,0x804C0289,0x704C0042,0x624C0289,0x2E80BE8,0x2E80BE8,0x2E80BE8,0xAA0C0372,0xAA0C0372,0x74400372,0x8C0002D9,0x8C0002D9,0x74000005,0x62140288,0x1DC0BE8, -0x1DC0BE8,0x660004D8,0x5C0004E1,0x4E000BE8,0xFE840522,0xF49808F6,0x9C0BEB,0xFE680122,0xE6500006,0xB8500005,0xA8540022,0x904C0001,0xFE6404B5,0xFE4400B9,0x9E3C0289,0x74000005,0x1500BE8,0xC4028A,0xC4028A,0xC4028A,0xC4028A,0xBCA40001,0xBCA40001,0xBCA40001,0x86A00001,0x86A00001,0x74A00001,0x3240288,0x3240288,0x3240288,0x94600001,0x94600001, -0x74800000,0x17FC0288,0x17FC0288,0x740C0000,0x62000288,0x3240288,0x3240288,0x3240288,0x94600001,0x94600001,0x74800000,0x17FC0288,0x17FC0288,0x740C0000,0x62000288,0x17FC0288,0x17FC0288,0x740C0000,0x62000288,0x62000288,0xFEA000F4,0xF6BC0152,0xC4028A,0xFE78003D,0xD8600001,0xB25C0000,0xA0680000,0x904C0000,0xF8880120,0xFC580029,0x1A40288,0x740C0000, -0x1A40288,0x1140372,0xF2EC0001,0xB2EC0001,0x9EE80001,0x3980372,0xC49C0001,0x9EC00000,0x51FC0372,0x9E3C0000,0x88000374,0x3980372,0xC49C0001,0x9EC00000,0x51FC0372,0x9E3C0000,0x88000374,0x51FC0372,0x9E3C0000,0x88000374,0x88000374,0x3980372,0xC49C0001,0x9EC00000,0x51FC0372,0x9E3C0000,0x88000374,0x51FC0372,0x9E3C0000,0x88000374,0x88000374,0x51FC0372, -0x9E3C0000,0x88000374,0x88000374,0x88000374,0xF6E80221,0xB240372,0xFF0C0242,0xFE9C0091,0xF43C0001,0xBE440000,0x9E700000,0x9E000000,0xF8D00200,0xFA7C0071,0xA47C0000,0x88000374,0x23FC0372,0x780372,0x780372,0x780372,0x780372,0x780372,0x780372,0x780372,0x780372,0x780372,0x780372,0xA4500001,0xA4500001,0xA4500001,0xA4500001,0xA4500001, -0xA4500001,0x64500001,0x64500001,0x64500001,0x504C0001,0x2B00372,0x2B00372,0x2B00372,0x2B00372,0x2B00372,0x2B00372,0x76000001,0x76000001,0x76000001,0x50240000,0x1680372,0x1680372,0x1680372,0x4A00009D,0x3A000374,0xFE6C01A5,0x780372,0x780372,0xFE58004A,0xF0500001,0xC0500001,0xC0500001,0x8C500001,0xF84C0139,0xFE3C0032,0x78440001,0x76000001, -0xFC0372,}; -static const uint32_t g_etc1_to_bc7_m6_table141[] = { -0x5C0001,0x5C0001,0x5C0001,0x5C0001,0x5C0001,0x5C0001,0x5C0001,0x5C0001,0x5C0001,0x5C0001,0x5C0001,0x5C0001,0x5C0001,0x5C0001,0x5C0001,0x5C0001,0x5C0001,0x5C0001,0x5C0001,0x5C0001,0x8C0000,0x8C0000,0x8C0000,0x8C0000,0x8C0000,0x8C0000,0x8C0000,0x8C0000,0x8C0000,0x8C0000,0x1180000, -0x1180000,0x1180000,0x1180000,0x2E000000,0x5C0001,0x5C0001,0x5C0001,0x5C0001,0x5C0001,0x5C0001,0x5C0001,0x5C0001,0x640000,0x640000,0x640000,0x8C0000,0xC80000,0xB00001,0xB00001,0xB00001,0xB00001,0xB00001,0xB00001,0xB00001,0xB00001,0xB00001,0xB00001,0x1080000,0x1080000,0x1080000,0x1080000,0x1080000, -0x1080000,0x9F80000,0x9F80000,0x9F80000,0x58000000,0x1080000,0x1080000,0x1080000,0x1080000,0x1080000,0x1080000,0x9F80000,0x9F80000,0x9F80000,0x58000000,0x9F80000,0x9F80000,0x9F80000,0x58000000,0x58000000,0x6BC0000,0xB00001,0xB00001,0x6CC0000,0xE00000,0x2F00000,0x2F00000,0x12C0000,0x6CC0000,0xE00000,0x1780000,0x9F80000, -0x1780000,0xF80001,0xF80001,0xF80001,0xF80001,0x1740000,0x1740000,0x1740000,0x3FF80000,0x3FF80000,0x7C000000,0x1740000,0x1740000,0x1740000,0x3FF80000,0x3FF80000,0x7C000000,0x3FF80000,0x3FF80000,0x7C000000,0x7C000000,0x1740000,0x1740000,0x1740000,0x3FF80000,0x3FF80000,0x7C000000,0x3FF80000,0x3FF80000,0x7C000000,0x7C000000,0x3FF80000, -0x3FF80000,0x7C000000,0x7C000000,0x7C000000,0x7200000,0xD080000,0xF80001,0x1540000,0x1A40000,0xBFC0000,0x25FC0000,0x4FF80000,0x1380000,0x1740000,0xBFC0000,0x7C000000,0xBFC0000,0x14C0001,0x1F00000,0x7DF80000,0xA6000000,0x1F00000,0x7DF80000,0xA6000000,0x7DF80000,0xA6000000,0xA6000000,0x1F00000,0x7DF80000,0xA6000000,0x7DF80000,0xA6000000, -0xA6000000,0x7DF80000,0xA6000000,0xA6000000,0xA6000000,0x1F00000,0x7DF80000,0xA6000000,0x7DF80000,0xA6000000,0xA6000000,0x7DF80000,0xA6000000,0xA6000000,0xA6000000,0x7DF80000,0xA6000000,0xA6000000,0xA6000000,0xA6000000,0x5A00000,0x1640000,0x1640000,0x27FC0000,0x6BFC0000,0x91F80000,0xA6000000,0xA6000000,0x3C40000,0x45FC0000,0xA1F40000,0xA6000000, -0x5BFC0000,0xD41EAC,0xFEBC0E0B,0xCCB00BEB,0xA6AC0BEB,0xFE980856,0xDC8C03A3,0xAA940533,0xB68806E6,0xA28403AE,0x908806E6,0xFE740C91,0xE260028A,0xAE780413,0xC05C038E,0xA65C000E,0x926403AE,0xA4600BE9,0x9A500411,0x8A540531,0x7E5C0BE9,0x33C1EA8,0xF0180BE9,0xA6600BE8,0xD80006F6,0xA82C038E,0x903C06E6,0xBA000CAF,0xA20002CE,0x8E0003B5,0x7E100BE8,0x23FC1EA8, -0x90000EF8,0x84000BA8,0x780010D8,0x6A001EA8,0xFEB40F7B,0xFECC18F4,0xFECC1A5C,0xFE8003FA,0xF85C000E,0xC4600006,0xAA680046,0xA2580046,0xFE900EA5,0xFE6002FA,0xAC48029D,0x8E0003B5,0x1C81EA8,0xFC0BEB,0xFEDC02EB,0xC4D4028A,0xA6D4028A,0xFEB4037B,0xCCB00002,0xA8BC0041,0xACB40373,0xA0AC00A6,0x90B00375,0x1780BE8,0xDC680289,0xA69C0288,0xC6480372,0xA4640009, -0x907C0374,0x41FC0BE8,0xA20002AA,0x900003B4,0x7E000BE8,0x1780BE8,0xDC680289,0xA69C0288,0xC6480372,0xA4640009,0x907C0374,0x41FC0BE8,0xA20002AA,0x900003B4,0x7E000BE8,0x41FC0BE8,0xA20002AA,0x900003B4,0x7E000BE8,0x7E000BE8,0xFED00640,0xFEEC098D,0xF4F80993,0xFE9801D5,0xF264000D,0xC2640005,0xA6780002,0xA2480021,0xFEB40682,0xFC80016E,0xAE3C0289,0x900003B4, -0xFFC0BE8,0xAC0BEB,0xAC0BEB,0xAC0BEB,0xAC0BEB,0xF0880372,0xF0880372,0xF0880372,0x98880372,0x98880372,0x7C880372,0xE2600289,0xE2600289,0xE2600289,0xA260000A,0xA260000A,0x806C00A5,0x885C0289,0x885C0289,0x785C0042,0x6A5C0289,0x3000BE8,0x3000BE8,0x3000BE8,0xB21C0372,0xB21C0372,0x7C500372,0x9E0002A1,0x9E0002A1,0x7C100005,0x6A240288,0x5FC0BE8, -0x5FC0BE8,0x72000478,0x64000489,0x56000BE8,0xFE90056E,0xFCA808F6,0xAC0BEB,0xFE780156,0xEE600006,0xC0600005,0xB0640022,0x985C0001,0xFE7804E6,0xFE5C00F5,0xA64C0289,0x7C100005,0x1700BE8,0xD4028A,0xD4028A,0xD4028A,0xD4028A,0xC4B40001,0xC4B40001,0xC4B40001,0x8EB00001,0x8EB00001,0x7CB00001,0x33C0288,0x33C0288,0x33C0288,0x9C700001,0x9C700001, -0x7C900000,0x23FC0288,0x23FC0288,0x7C1C0000,0x6A000288,0x33C0288,0x33C0288,0x33C0288,0x9C700001,0x9C700001,0x7C900000,0x23FC0288,0x23FC0288,0x7C1C0000,0x6A000288,0x23FC0288,0x23FC0288,0x7C1C0000,0x6A000288,0x6A000288,0xFAB40109,0xFECC0152,0xD4028A,0xFE88004A,0xE0700001,0xBA6C0000,0xA8780000,0x985C0000,0xFE940128,0xFE680034,0x1C80288,0x7C1C0000, -0x1C80288,0x1240372,0xFAFC0001,0xBAFC0001,0xA6F80001,0x3B00372,0xCCAC0001,0xA6D00000,0x5DFC0372,0xA64C0000,0x90000374,0x3B00372,0xCCAC0001,0xA6D00000,0x5DFC0372,0xA64C0000,0x90000374,0x5DFC0372,0xA64C0000,0x90000374,0x90000374,0x3B00372,0xCCAC0001,0xA6D00000,0x5DFC0372,0xA64C0000,0x90000374,0x5DFC0372,0xA64C0000,0x90000374,0x90000374,0x5DFC0372, -0xA64C0000,0x90000374,0x90000374,0x90000374,0xFEF80221,0x1380372,0xF71C0265,0xFEB000AA,0xFC4C0001,0xC6540000,0xA6800000,0xA6100000,0xFEDC0208,0xFE940080,0xAC8C0000,0x90000374,0x33FC0372,0x880372,0x880372,0x880372,0x880372,0x880372,0x880372,0x880372,0x880372,0x880372,0x880372,0xAC600001,0xAC600001,0xAC600001,0xAC600001,0xAC600001, -0xAC600001,0x6C600001,0x6C600001,0x6C600001,0x585C0001,0xC80372,0xC80372,0xC80372,0xC80372,0xC80372,0xC80372,0x7E100001,0x7E100001,0x7E100001,0x58340000,0x1980372,0x1980372,0x1980372,0x50000071,0x42000374,0xF67C01C2,0x880372,0x880372,0xFE680059,0xF8600001,0xC8600001,0xC8600001,0x94600001,0xFE580145,0xFE50003D,0x80540001,0x7E100001, -0x1200372,}; -static const uint32_t g_etc1_to_bc7_m6_table142[] = { -0x6C0001,0x6C0001,0x6C0001,0x6C0001,0x6C0001,0x6C0001,0x6C0001,0x6C0001,0x6C0001,0x6C0001,0x6C0001,0x6C0001,0x6C0001,0x6C0001,0x6C0001,0x6C0001,0x6C0001,0x6C0001,0x6C0001,0x6C0001,0xA40000,0xA40000,0xA40000,0xA40000,0xA40000,0xA40000,0xA40000,0xA40000,0xA40000,0xA40000,0x14C0000, -0x14C0000,0x14C0000,0x14C0000,0x36000000,0x6C0001,0x6C0001,0x6C0001,0x6C0001,0x6C0001,0x6C0001,0x6C0001,0x6C0001,0x2740000,0x2740000,0x2740000,0xA40000,0xE80000,0xC00001,0xC00001,0xC00001,0xC00001,0xC00001,0xC00001,0xC00001,0xC00001,0xC00001,0xC00001,0x1200000,0x1200000,0x1200000,0x1200000,0x1200000, -0x1200000,0x15F80000,0x15F80000,0x15F80000,0x60000000,0x1200000,0x1200000,0x1200000,0x1200000,0x1200000,0x1200000,0x15F80000,0x15F80000,0x15F80000,0x60000000,0x15F80000,0x15F80000,0x15F80000,0x60000000,0x60000000,0xECC0000,0xC00001,0xC00001,0x2E00000,0xF40000,0x1080000,0x1080000,0x1440000,0x2E00000,0xF40000,0x19C0000,0x15F80000, -0x19C0000,0x1080001,0x1080001,0x1080001,0x1080001,0x18C0000,0x18C0000,0x18C0000,0x4BF80000,0x4BF80000,0x84000000,0x18C0000,0x18C0000,0x18C0000,0x4BF80000,0x4BF80000,0x84000000,0x4BF80000,0x4BF80000,0x84000000,0x84000000,0x18C0000,0x18C0000,0x18C0000,0x4BF80000,0x4BF80000,0x84000000,0x4BF80000,0x4BF80000,0x84000000,0x84000000,0x4BF80000, -0x4BF80000,0x84000000,0x84000000,0x84000000,0x3340000,0x11C0000,0x1080001,0x3680000,0x1C00000,0x1BFC0000,0x33F80000,0x59FC0000,0x34C0000,0x18C0000,0x1BFC0000,0x84000000,0x1BFC0000,0x15C0001,0xDFC0000,0x89F80000,0xAE000000,0xDFC0000,0x89F80000,0xAE000000,0x89F80000,0xAE000000,0xAE000000,0xDFC0000,0x89F80000,0xAE000000,0x89F80000,0xAE000000, -0xAE000000,0x89F80000,0xAE000000,0xAE000000,0xAE000000,0xDFC0000,0x89F80000,0xAE000000,0x89F80000,0xAE000000,0xAE000000,0x89F80000,0xAE000000,0xAE000000,0xAE000000,0x89F80000,0xAE000000,0xAE000000,0xAE000000,0xAE000000,0x5B40000,0x3740000,0x3740000,0x3BFC0000,0x79FC0000,0x9BF80000,0xAE000000,0xAE000000,0x1DC0000,0x55FC0000,0xABC80000,0xAE000000, -0x69FC0000,0xE41EAC,0xFEC80E73,0xD4C00BEB,0xAEBC0BEB,0xFEA808EC,0xE49C03A3,0xB2A40533,0xBE9806E6,0xAA9403AE,0x989806E6,0xFE840CF4,0xEA70028A,0xB6880413,0xC86C038E,0xAE6C000E,0x9A7403AE,0xAC700BE9,0xA2600411,0x92640531,0x866C0BE9,0x1541EA8,0xF8280BE9,0xAE700BE8,0xE20406E6,0xB03C038E,0x984C06E6,0xC6000C4F,0xAC000292,0x980403A1,0x86200BE8,0x2FFC1EA8, -0x9C000E58,0x8A000AE8,0x7E00102C,0x72001EA8,0xFEBC1022,0xF6DC197E,0xF8E01AAF,0xFE9804BE,0xFA70000F,0xCC700006,0xB2780046,0xAA680046,0xFEA40F96,0xFE7403B7,0xB458029D,0x980403A1,0x1E81EA8,0x10C0BEB,0xFEEC032A,0xCCE4028A,0xAEE4028A,0xFEC8038D,0xD4C00002,0xB0CC0041,0xB4C40373,0xA8BC00A6,0x98C00375,0x1900BE8,0xE4780289,0xAEAC0288,0xCE580372,0xAC740009, -0x988C0374,0x4DFC0BE8,0xAC00028E,0x96000394,0x86000BE8,0x1900BE8,0xE4780289,0xAEAC0288,0xCE580372,0xAC740009,0x988C0374,0x4DFC0BE8,0xAC00028E,0x96000394,0x86000BE8,0x4DFC0BE8,0xAC00028E,0x96000394,0x86000BE8,0x86000BE8,0xFEE406A5,0xFB0409B3,0xFD080993,0xFEB0022E,0xFA74000D,0xCA740005,0xAE880002,0xAA580021,0xFAD406D1,0xFE9001B2,0xB64C0289,0x96000394, -0x1FF80BE8,0xBC0BEB,0xBC0BEB,0xBC0BEB,0xBC0BEB,0xF8980372,0xF8980372,0xF8980372,0xA0980372,0xA0980372,0x84980372,0xEA700289,0xEA700289,0xEA700289,0xAA70000A,0xAA70000A,0x887C00A5,0x906C0289,0x906C0289,0x806C0042,0x726C0289,0x3180BE8,0x3180BE8,0x3180BE8,0xBA2C0372,0xBA2C0372,0x84600372,0xAA000289,0xAA000289,0x84200005,0x72340288,0x11FC0BE8, -0x11FC0BE8,0x7C000432,0x6C000414,0x5E000BE8,0xFEA005A5,0xF4B80933,0xBC0BEB,0xFE880193,0xF6700006,0xC8700005,0xB8740022,0xA06C0001,0xFC8C0549,0xFE680138,0xAE5C0289,0x84200005,0x1940BE8,0xE4028A,0xE4028A,0xE4028A,0xE4028A,0xCCC40001,0xCCC40001,0xCCC40001,0x96C00001,0x96C00001,0x84C00001,0x1540288,0x1540288,0x1540288,0xA4800001,0xA4800001, -0x84A00000,0x2FFC0288,0x2FFC0288,0x842C0000,0x72000288,0x1540288,0x1540288,0x1540288,0xA4800001,0xA4800001,0x84A00000,0x2FFC0288,0x2FFC0288,0x842C0000,0x72000288,0x2FFC0288,0x2FFC0288,0x842C0000,0x72000288,0x72000288,0xF6C80120,0xF6DC016D,0xE4028A,0xFE980061,0xE8800001,0xC27C0000,0xB0880000,0xA06C0000,0xFAAC0139,0xFE800048,0x1E80288,0x842C0000, -0x1E80288,0x1340372,0xFF0C0002,0xC30C0001,0xAF080001,0x1C80372,0xD4BC0001,0xAEE00000,0x69FC0372,0xAE5C0000,0x98000374,0x1C80372,0xD4BC0001,0xAEE00000,0x69FC0372,0xAE5C0000,0x98000374,0x69FC0372,0xAE5C0000,0x98000374,0x98000374,0x1C80372,0xD4BC0001,0xAEE00000,0x69FC0372,0xAE5C0000,0x98000374,0x69FC0372,0xAE5C0000,0x98000374,0x98000374,0x69FC0372, -0xAE5C0000,0x98000374,0x98000374,0x98000374,0xFB0C0242,0x1480372,0xFF2C0265,0xFEC800D0,0xFE680005,0xCE640000,0xAE900000,0xAE200000,0xFEF0022D,0xFEAC00A4,0xB49C0000,0x98000374,0x41FC0372,0x980372,0x980372,0x980372,0x980372,0x980372,0x980372,0x980372,0x980372,0x980372,0x980372,0xB4700001,0xB4700001,0xB4700001,0xB4700001,0xB4700001, -0xB4700001,0x74700001,0x74700001,0x74700001,0x606C0001,0xE00372,0xE00372,0xE00372,0xE00372,0xE00372,0xE00372,0x86200001,0x86200001,0x86200001,0x60440000,0x1CC0372,0x1CC0372,0x1CC0372,0x5C000041,0x4A000374,0xFE8C01C2,0x980372,0x980372,0xFA7C0071,0xFA700002,0xD0700001,0xD0700001,0x9C700001,0xFC700152,0xFC600055,0x88640001,0x86200001, -0x1400372,}; -static const uint32_t g_etc1_to_bc7_m6_table143[] = { -0x7C0001,0x7C0001,0x7C0001,0x7C0001,0x7C0001,0x7C0001,0x7C0001,0x7C0001,0x7C0001,0x7C0001,0x7C0001,0x7C0001,0x7C0001,0x7C0001,0x7C0001,0x7C0001,0x7C0001,0x7C0001,0x7C0001,0x7C0001,0xBC0000,0xBC0000,0xBC0000,0xBC0000,0xBC0000,0xBC0000,0xBC0000,0xBC0000,0xBC0000,0xBC0000,0x17C0000, -0x17C0000,0x17C0000,0x17C0000,0x3E000000,0x7C0001,0x7C0001,0x7C0001,0x7C0001,0x7C0001,0x7C0001,0x7C0001,0x7C0001,0xA840000,0xA840000,0xA840000,0xBC0000,0x10C0000,0xD00001,0xD00001,0xD00001,0xD00001,0xD00001,0xD00001,0xD00001,0xD00001,0xD00001,0xD00001,0x1380000,0x1380000,0x1380000,0x1380000,0x1380000, -0x1380000,0x21F80000,0x21F80000,0x21F80000,0x68000000,0x1380000,0x1380000,0x1380000,0x1380000,0x1380000,0x1380000,0x21F80000,0x21F80000,0x21F80000,0x68000000,0x21F80000,0x21F80000,0x21F80000,0x68000000,0x68000000,0xE00000,0xD00001,0xD00001,0xF40000,0x1080000,0x11C0000,0x11C0000,0x1600000,0xF40000,0x1080000,0x1BC0000,0x21F80000, -0x1BC0000,0x1180001,0x1180001,0x1180001,0x1180001,0x1A40000,0x1A40000,0x1A40000,0x57F80000,0x57F80000,0x8C000000,0x1A40000,0x1A40000,0x1A40000,0x57F80000,0x57F80000,0x8C000000,0x57F80000,0x57F80000,0x8C000000,0x8C000000,0x1A40000,0x1A40000,0x1A40000,0x57F80000,0x57F80000,0x8C000000,0x57F80000,0x57F80000,0x8C000000,0x8C000000,0x57F80000, -0x57F80000,0x8C000000,0x8C000000,0x8C000000,0x1480000,0x12C0000,0x1180001,0x1800000,0x1D80000,0x29FC0000,0x3FFC0000,0x65F40000,0x3600000,0x1A40000,0x29FC0000,0x8C000000,0x29FC0000,0x16C0001,0x25FC0000,0x95F80000,0xB6000000,0x25FC0000,0x95F80000,0xB6000000,0x95F80000,0xB6000000,0xB6000000,0x25FC0000,0x95F80000,0xB6000000,0x95F80000,0xB6000000, -0xB6000000,0x95F80000,0xB6000000,0xB6000000,0xB6000000,0x25FC0000,0x95F80000,0xB6000000,0x95F80000,0xB6000000,0xB6000000,0x95F80000,0xB6000000,0xB6000000,0xB6000000,0x95F80000,0xB6000000,0xB6000000,0xB6000000,0xB6000000,0x1CC0000,0xB840000,0xB840000,0x4FFC0000,0x87F80000,0xA5F80000,0xB6000000,0xB6000000,0x3F00000,0x67FC0000,0xB3D80000,0xB6000000, -0x79FC0000,0xF41EAC,0xFEDC0EEC,0xDCD00BEB,0xB6CC0BEB,0xFEBC096E,0xECAC03A3,0xBAB40533,0xC6A806E6,0xB2A403AE,0xA0A806E6,0xFE980D51,0xF280028A,0xBE980413,0xD07C038E,0xB67C000E,0xA28403AE,0xB4800BE9,0xAA700411,0x9A740531,0x8E7C0BE9,0x16C1EA8,0xFE380BEF,0xB6800BE8,0xEA1406E6,0xB84C038E,0xA05C06E6,0xD2000C0F,0xB608028A,0xA01403A1,0x8E300BE8,0x3BFC1EA8, -0xA6000DDB,0x96000A18,0x8A000F9C,0x7A001EA8,0xFED010D1,0xFEEC197E,0xFEEC1ACB,0xFEAC059E,0xFE840027,0xD4800006,0xBA880046,0xB2780046,0xFEB4101B,0xFE900462,0xBC68029D,0xA01403A1,0x7FC1EA8,0x11C0BEB,0xFF000363,0xD4F4028A,0xB6F4028A,0xFEDC03AB,0xDCD00002,0xB8DC0041,0xBCD40373,0xB0CC00A6,0xA0D00375,0x1A80BE8,0xEC880289,0xB6BC0288,0xD6680372,0xB4840009, -0xA09C0374,0x59FC0BE8,0xB6000288,0xA000037D,0x8E000BE8,0x1A80BE8,0xEC880289,0xB6BC0288,0xD6680372,0xB4840009,0xA09C0374,0x59FC0BE8,0xB6000288,0xA000037D,0x8E000BE8,0x59FC0BE8,0xB6000288,0xA000037D,0x8E000BE8,0x8E000BE8,0xFEF806DA,0xFF0C09DB,0xF51809DA,0xFEC00296,0xFE88001A,0xD2840005,0xB6980002,0xB2680021,0xFEDC06F9,0xFEA40224,0xBE5C0289,0xA000037D, -0x2DFC0BE8,0xCC0BEB,0xCC0BEB,0xCC0BEB,0xCC0BEB,0xFEA80373,0xFEA80373,0xFEA80373,0xA8A80372,0xA8A80372,0x8CA80372,0xF2800289,0xF2800289,0xF2800289,0xB280000A,0xB280000A,0x908C00A5,0x987C0289,0x987C0289,0x887C0042,0x7A7C0289,0x3300BE8,0x3300BE8,0x3300BE8,0xC23C0372,0xC23C0372,0x8C700372,0xB2100289,0xB2100289,0x8C300005,0x7A440288,0x1DFC0BE8, -0x1DFC0BE8,0x840003E4,0x760003C9,0x66000BE8,0xFCB805F6,0xFCC80933,0xCC0BEB,0xFE9801DA,0xFE800006,0xD0800005,0xC0840022,0xA87C0001,0xFC9C0581,0xFE800171,0xB66C0289,0x8C300005,0x1B40BE8,0xF4028A,0xF4028A,0xF4028A,0xF4028A,0xD4D40001,0xD4D40001,0xD4D40001,0x9ED00001,0x9ED00001,0x8CD00001,0x16C0288,0x16C0288,0x16C0288,0xAC900001,0xAC900001, -0x8CB00000,0x3BFC0288,0x3BFC0288,0x8C3C0000,0x7A000288,0x16C0288,0x16C0288,0x16C0288,0xAC900001,0xAC900001,0x8CB00000,0x3BFC0288,0x3BFC0288,0x8C3C0000,0x7A000288,0x3BFC0288,0x3BFC0288,0x8C3C0000,0x7A000288,0x7A000288,0xFED80120,0xFEEC016D,0xF4028A,0xFEB40071,0xF0900001,0xCA8C0000,0xB8980000,0xA87C0000,0xFCC00152,0xFE980055,0x7FC0288,0x8C3C0000, -0x7FC0288,0x1440372,0xFF1C0011,0xCB1C0001,0xB7180001,0x1E00372,0xDCCC0001,0xB6F00000,0x75FC0372,0xB66C0000,0xA0000374,0x1E00372,0xDCCC0001,0xB6F00000,0x75FC0372,0xB66C0000,0xA0000374,0x75FC0372,0xB66C0000,0xA0000374,0xA0000374,0x1E00372,0xDCCC0001,0xB6F00000,0x75FC0372,0xB66C0000,0xA0000374,0x75FC0372,0xB66C0000,0xA0000374,0xA0000374,0x75FC0372, -0xB66C0000,0xA0000374,0xA0000374,0xA0000374,0xFF140262,0x5580372,0xF73C028A,0xFCE800F2,0xFC8C0019,0xD6740000,0xB6A00000,0xB6300000,0xFD0C0242,0xFEC000C1,0xBCAC0000,0xA0000374,0x51FC0372,0xA80372,0xA80372,0xA80372,0xA80372,0xA80372,0xA80372,0xA80372,0xA80372,0xA80372,0xA80372,0xBC800001,0xBC800001,0xBC800001,0xBC800001,0xBC800001, -0xBC800001,0x7C800001,0x7C800001,0x7C800001,0x687C0001,0xF80372,0xF80372,0xF80372,0xF80372,0xF80372,0xF80372,0x8E300001,0x8E300001,0x8E300001,0x68540000,0x1FC0372,0x1FC0372,0x1FC0372,0x66000028,0x52000374,0xF69C01E1,0xA80372,0xA80372,0xFC8C0082,0xFE800005,0xD8800001,0xD8800001,0xA4800001,0xF884016D,0xFC740062,0x90740001,0x8E300001, -0x1640372,}; -static const uint32_t g_etc1_to_bc7_m6_table144[] = { -0x900000,0x900000,0x900000,0x900000,0x900000,0x900000,0x900000,0x900000,0x900000,0x900000,0x900000,0x900000,0x900000,0x900000,0x900000,0x900000,0x900000,0x900000,0x900000,0x900000,0xD40000,0xD40000,0xD40000,0xD40000,0xD40000,0xD40000,0xD40000,0xD40000,0xD40000,0xD40000,0x1B00000, -0x1B00000,0x1B00000,0x1B00000,0x46000001,0x900000,0x900000,0x900000,0x900000,0x900000,0x900000,0x900000,0x900000,0x4980000,0x4980000,0x4980000,0xD40000,0x1300000,0xE40000,0xE40000,0xE40000,0xE40000,0xE40000,0xE40000,0xE40000,0xE40000,0xE40000,0xE40000,0x3500000,0x3500000,0x3500000,0x3500000,0x3500000, -0x3500000,0x2DFC0000,0x2DFC0000,0x2DFC0000,0x70000001,0x3500000,0x3500000,0x3500000,0x3500000,0x3500000,0x3500000,0x2DFC0000,0x2DFC0000,0x2DFC0000,0x70000001,0x2DFC0000,0x2DFC0000,0x2DFC0000,0x70000001,0x70000001,0xF40000,0xE40000,0xE40000,0x1080000,0x31C0000,0x3340000,0x3340000,0x1800000,0x1080000,0x31C0000,0x1E40000,0x2DFC0000, -0x1E40000,0x12C0000,0x12C0000,0x12C0000,0x12C0000,0x3BC0000,0x3BC0000,0x3BC0000,0x63FC0000,0x63FC0000,0x94000001,0x3BC0000,0x3BC0000,0x3BC0000,0x63FC0000,0x63FC0000,0x94000001,0x63FC0000,0x63FC0000,0x94000001,0x94000001,0x3BC0000,0x3BC0000,0x3BC0000,0x63FC0000,0x63FC0000,0x94000001,0x63FC0000,0x63FC0000,0x94000001,0x94000001,0x63FC0000, -0x63FC0000,0x94000001,0x94000001,0x94000001,0x15C0000,0x1400000,0x12C0000,0x1980000,0x1F80000,0x3BFC0000,0x4FFC0000,0x71F80000,0x1780000,0x3BC0000,0x3BFC0000,0x94000001,0x3BFC0000,0x1800000,0x41FC0000,0xA1FC0000,0xBE000001,0x41FC0000,0xA1FC0000,0xBE000001,0xA1FC0000,0xBE000001,0xBE000001,0x41FC0000,0xA1FC0000,0xBE000001,0xA1FC0000,0xBE000001, -0xBE000001,0xA1FC0000,0xBE000001,0xBE000001,0xBE000001,0x41FC0000,0xA1FC0000,0xBE000001,0xA1FC0000,0xBE000001,0xBE000001,0xA1FC0000,0xBE000001,0xBE000001,0xBE000001,0xA1FC0000,0xBE000001,0xBE000001,0xBE000001,0xBE000001,0x3E00000,0x5980000,0x5980000,0x65FC0000,0x95FC0000,0xB1F40000,0xBE000001,0xBE000001,0x13FC0000,0x79FC0000,0xBDCC0000,0xBE000001, -0x89FC0000,0x1081EA8,0xFEE80F9C,0xE6E00BE8,0xBEE00BE9,0xFED00A18,0xF4BC03A1,0xC4C80531,0xD0B806E6,0xBCB803AE,0xAAB806E6,0xFEB00DDB,0xFA90028A,0xC6A80411,0xD88C038E,0xBE90000E,0xAC9803AE,0xBE900BE8,0xB2800413,0xA4880533,0x96900BEB,0x1881EA8,0xFE580C0F,0xBE940BE9,0xF22806E6,0xC05C038E,0xAA6C06E6,0xE0000BEF,0xBE18028A,0xA82403A3,0x96440BEB,0x49F81EA8, -0xB2000D51,0xA000096E,0x90000EEC,0x82001EAC,0xFEE41196,0xF9001A08,0xFB041B18,0xFEC006A1,0xFE9C0075,0xDC900006,0xC2980046,0xBA880046,0xFED410EA,0xFEA40584,0xC47C029D,0xA82403A3,0x19FC1EA8,0x1300BE8,0xFF1003C9,0xDD080288,0xBF080289,0xFEF403E4,0xE2E40005,0xC0EC0042,0xC6E40372,0xB8DC00A5,0xAAE40372,0x1C40BE8,0xF6980289,0xC0CC0289,0xE0780372,0xBE98000A, -0xAAAC0372,0x67F80BE8,0xBE140289,0xAA000373,0x96000BEB,0x1C40BE8,0xF6980289,0xC0CC0289,0xE0780372,0xBE98000A,0xAAAC0372,0x67F80BE8,0xBE140289,0xAA000373,0x96000BEB,0x67F80BE8,0xBE140289,0xAA000373,0x96000BEB,0x96000BEB,0xFD10074D,0xFD2809F6,0xFF2C09D9,0xFEDC0312,0xFEA4003E,0xDA940006,0xC0AC0001,0xBC740022,0xFEF80752,0xFEC00281,0xC86C0288,0xAA000373, -0x3FF80BE8,0xE00BE8,0xE00BE8,0xE00BE8,0xE00BE8,0xFEBC037D,0xFEBC037D,0xFEBC037D,0xB0BC0374,0xB0BC0374,0x94B80375,0xFE900288,0xFE900288,0xFE900288,0xBC940009,0xBC940009,0x989C00A6,0xA0900288,0xA0900288,0x908C0041,0x8290028A,0x14C0BE8,0x14C0BE8,0x14C0BE8,0xCA500372,0xCA500372,0x94840373,0xBA240289,0xBA240289,0x96440002,0x8454028A,0x2BF80BE8, -0x2BF80BE8,0x900003AB,0x7E000363,0x6E000BEB,0xFECC062C,0xF4D80975,0xE00BE8,0xFEAC023D,0xFE940011,0xDC900005,0xCA980021,0xB0900002,0xFEB405B5,0xFE9801C6,0xBE80028A,0x96440002,0x1DC0BE8,0x1080288,0x1080288,0x1080288,0x1080288,0xDEE40000,0xDEE40000,0xDEE40000,0xA6E40000,0xA6E40000,0x94E40001,0x1880288,0x1880288,0x1880288,0xB4A40001,0xB4A40001, -0x96C00001,0x49F80288,0x49F80288,0x94540001,0x8200028A,0x1880288,0x1880288,0x1880288,0xB4A40001,0xB4A40001,0x96C00001,0x49F80288,0x49F80288,0x94540001,0x8200028A,0x49F80288,0x49F80288,0x94540001,0x8200028A,0x8200028A,0xFAEC0139,0xF9000188,0x1080288,0xFEC40088,0xFE9C0000,0xD49C0000,0xC0AC0000,0xB28C0000,0xFED0015A,0xFEB00071,0x19FC0288,0x94540001, -0x19FC0288,0x1540374,0xFF300028,0xD52C0000,0xBF2C0001,0x1FC0372,0xE4E00001,0xBF040001,0x83F80372,0xBE840001,0xAA000372,0x1FC0372,0xE4E00001,0xBF040001,0x83F80372,0xBE840001,0xAA000372,0x83F80372,0xBE840001,0xAA000372,0xAA000372,0x1FC0372,0xE4E00001,0xBF040001,0x83F80372,0xBE840001,0xAA000372,0x83F80372,0xBE840001,0xAA000372,0xAA000372,0x83F80372, -0xBE840001,0xAA000372,0xAA000372,0xAA000372,0xFF340265,0x16C0372,0xFF4C0290,0xFF000120,0xFEA8002D,0xDE880000,0xBEB40001,0xBE480001,0xFF180262,0xFEE400F4,0xC6BC0000,0xAA000372,0x61FC0372,0xB80374,0xB80374,0xB80374,0xB80374,0xB80374,0xB80374,0xB80374,0xB80374,0xB80374,0xB80374,0xC6900000,0xC6900000,0xC6900000,0xC6900000,0xC6900000, -0xC6900000,0x86900000,0x86900000,0x86900000,0x70900001,0x1140372,0x1140372,0x1140372,0x1140372,0x1140372,0x1140372,0x96440001,0x96440001,0x96440001,0x70680001,0xFF80372,0xFF80372,0xFF80372,0x70000011,0x5C000372,0xFEAC01E5,0xB80374,0xB80374,0xFEA00091,0xFE94000D,0xE4900000,0xE4900000,0xAE900000,0xFE900179,0xFC880080,0x9C840000,0x96440001, -0x18C0372,}; -static const uint32_t g_etc1_to_bc7_m6_table145[] = { -0xA00000,0xA00000,0xA00000,0xA00000,0xA00000,0xA00000,0xA00000,0xA00000,0xA00000,0xA00000,0xA00000,0xA00000,0xA00000,0xA00000,0xA00000,0xA00000,0xA00000,0xA00000,0xA00000,0xA00000,0xEC0000,0xEC0000,0xEC0000,0xEC0000,0xEC0000,0xEC0000,0xEC0000,0xEC0000,0xEC0000,0xEC0000,0x1E40000, -0x1E40000,0x1E40000,0x1E40000,0x4E000001,0xA00000,0xA00000,0xA00000,0xA00000,0xA00000,0xA00000,0xA00000,0xA00000,0xCA80000,0xCA80000,0xCA80000,0xEC0000,0x1540000,0xF40000,0xF40000,0xF40000,0xF40000,0xF40000,0xF40000,0xF40000,0xF40000,0xF40000,0xF40000,0x3680000,0x3680000,0x3680000,0x3680000,0x3680000, -0x3680000,0x39FC0000,0x39FC0000,0x39FC0000,0x78000001,0x3680000,0x3680000,0x3680000,0x3680000,0x3680000,0x3680000,0x39FC0000,0x39FC0000,0x39FC0000,0x78000001,0x39FC0000,0x39FC0000,0x39FC0000,0x78000001,0x78000001,0x1040000,0xF40000,0xF40000,0x11C0000,0x3300000,0x14C0000,0x14C0000,0x1980000,0x11C0000,0x3300000,0x5FC0000,0x39FC0000, -0x5FC0000,0x13C0000,0x13C0000,0x13C0000,0x13C0000,0x1D40000,0x1D40000,0x1D40000,0x6FFC0000,0x6FFC0000,0x9C000001,0x1D40000,0x1D40000,0x1D40000,0x6FFC0000,0x6FFC0000,0x9C000001,0x6FFC0000,0x6FFC0000,0x9C000001,0x9C000001,0x1D40000,0x1D40000,0x1D40000,0x6FFC0000,0x6FFC0000,0x9C000001,0x6FFC0000,0x6FFC0000,0x9C000001,0x9C000001,0x6FFC0000, -0x6FFC0000,0x9C000001,0x9C000001,0x9C000001,0x1700000,0x1500000,0x13C0000,0x3AC0000,0x11FC0000,0x49FC0000,0x5DF80000,0x7BFC0000,0x18C0000,0x1D40000,0x49FC0000,0x9C000001,0x49FC0000,0x1900000,0x59FC0000,0xADFC0000,0xC6000001,0x59FC0000,0xADFC0000,0xC6000001,0xADFC0000,0xC6000001,0xC6000001,0x59FC0000,0xADFC0000,0xC6000001,0xADFC0000,0xC6000001, -0xC6000001,0xADFC0000,0xC6000001,0xC6000001,0xC6000001,0x59FC0000,0xADFC0000,0xC6000001,0xADFC0000,0xC6000001,0xC6000001,0xADFC0000,0xC6000001,0xC6000001,0xC6000001,0xADFC0000,0xC6000001,0xC6000001,0xC6000001,0xC6000001,0x3F40000,0xDA80000,0xDA80000,0x79FC0000,0xA3FC0000,0xBBF40000,0xC6000001,0xC6000001,0x31FC0000,0x8BFC0000,0xC5DC0000,0xC6000001, -0x99FC0000,0x1181EA8,0xFF00102C,0xEEF00BE8,0xC6F00BE9,0xFEE80AE8,0xFCCC03A1,0xCCD80531,0xD8C806E6,0xC4C803AE,0xB2C806E6,0xFEC40E58,0xFEA40292,0xCEB80411,0xE09C038E,0xC6A0000E,0xB4A803AE,0xC6A00BE8,0xBA900413,0xAC980533,0x9EA00BEB,0x1A01EA8,0xFE700C4F,0xC6A40BE9,0xFA3806E6,0xC86C038E,0xB27C06E6,0xEA0C0BE9,0xC628028A,0xB03403A3,0x9E540BEB,0x55F81EA8, -0xBC000CF4,0xAA0008EC,0x9A000E73,0x8A001EAC,0xFEF81255,0xFF0C1A18,0xFF0C1B58,0xFED4078E,0xFEB000ED,0xE4A00006,0xCAA80046,0xC2980046,0xFEDC11C3,0xFEC00675,0xCC8C029D,0xB03403A3,0x27FC1EA8,0x1400BE8,0xFF240414,0xE5180288,0xC7180289,0xFF040432,0xEAF40005,0xC8FC0042,0xCEF40372,0xC0EC00A5,0xB2F40372,0x1DC0BE8,0xFEA80289,0xC8DC0289,0xE8880372,0xC6A8000A, -0xB2BC0372,0x73F80BE8,0xC6240289,0xB2080372,0x9E000BEB,0x1DC0BE8,0xFEA80289,0xC8DC0289,0xE8880372,0xC6A8000A,0xB2BC0372,0x73F80BE8,0xC6240289,0xB2080372,0x9E000BEB,0x73F80BE8,0xC6240289,0xB2080372,0x9E000BEB,0x9E000BEB,0xFF20078E,0xF5380A38,0xF73C0A20,0xFEEC0395,0xFEBC007E,0xE2A40006,0xC8BC0001,0xC4840022,0xFF0807A3,0xFEDC0305,0xD07C0288,0xB2080372, -0x4DFC0BE8,0xF00BE8,0xF00BE8,0xF00BE8,0xF00BE8,0xFED00394,0xFED00394,0xFED00394,0xB8CC0374,0xB8CC0374,0x9CC80375,0xFEA4028E,0xFEA4028E,0xFEA4028E,0xC4A40009,0xC4A40009,0xA0AC00A6,0xA8A00288,0xA8A00288,0x989C0041,0x8AA0028A,0x1640BE8,0x1640BE8,0x1640BE8,0xD2600372,0xD2600372,0x9C940373,0xC2340289,0xC2340289,0x9E540002,0x8C64028A,0x37F80BE8, -0x37F80BE8,0x9A00038D,0x8800032A,0x76000BEB,0xFED80672,0xFCE80975,0xF00BE8,0xFEC4028C,0xFEAC0031,0xE4A00005,0xD2A80021,0xB8A00002,0xFEBC061A,0xFCAC0225,0xC690028A,0x9E540002,0x1FC0BE8,0x1180288,0x1180288,0x1180288,0x1180288,0xE6F40000,0xE6F40000,0xE6F40000,0xAEF40000,0xAEF40000,0x9CF40001,0x1A00288,0x1A00288,0x1A00288,0xBCB40001,0xBCB40001, -0x9ED00001,0x55F80288,0x55F80288,0x9C640001,0x8A00028A,0x1A00288,0x1A00288,0x1A00288,0xBCB40001,0xBCB40001,0x9ED00001,0x55F80288,0x55F80288,0x9C640001,0x8A00028A,0x55F80288,0x55F80288,0x9C640001,0x8A00028A,0x8A00028A,0xF7000152,0xFF0C0190,0x1180288,0xFEDC0091,0xFEB00004,0xDCAC0000,0xC8BC0000,0xBA9C0000,0xF8EC016D,0xFEC40080,0x27FC0288,0x9C640001, -0x27FC0288,0x1640374,0xFF440041,0xDD3C0000,0xC73C0001,0x19FC0372,0xECF00001,0xC7140001,0x8FF80372,0xC6940001,0xB2000372,0x19FC0372,0xECF00001,0xC7140001,0x8FF80372,0xC6940001,0xB2000372,0x8FF80372,0xC6940001,0xB2000372,0xB2000372,0x19FC0372,0xECF00001,0xC7140001,0x8FF80372,0xC6940001,0xB2000372,0x8FF80372,0xC6940001,0xB2000372,0xB2000372,0x8FF80372, -0xC6940001,0xB2000372,0xB2000372,0xB2000372,0xFB480288,0x77C0372,0xF96002AD,0xFF14013D,0xFECC0055,0xE6980000,0xC6C40001,0xC6580001,0xF1400288,0xFD040120,0xCECC0000,0xB2000372,0x71FC0372,0xC80374,0xC80374,0xC80374,0xC80374,0xC80374,0xC80374,0xC80374,0xC80374,0xC80374,0xC80374,0xCEA00000,0xCEA00000,0xCEA00000,0xCEA00000,0xCEA00000, -0xCEA00000,0x8EA00000,0x8EA00000,0x8EA00000,0x78A00001,0x12C0372,0x12C0372,0x12C0372,0x12C0372,0x12C0372,0x12C0372,0x9E540001,0x9E540001,0x9E540001,0x78780001,0x1BF80372,0x1BF80372,0x1BF80372,0x78000002,0x64000372,0xF8C00200,0xC80374,0xC80374,0xFEAC00B4,0xFEA80019,0xECA00000,0xECA00000,0xB6A00000,0xFEA0019A,0xFC9C0091,0xA4940000,0x9E540001, -0x1AC0372,}; -static const uint32_t g_etc1_to_bc7_m6_table146[] = { -0xB00000,0xB00000,0xB00000,0xB00000,0xB00000,0xB00000,0xB00000,0xB00000,0xB00000,0xB00000,0xB00000,0xB00000,0xB00000,0xB00000,0xB00000,0xB00000,0xB00000,0xB00000,0xB00000,0xB00000,0x1040000,0x1040000,0x1040000,0x1040000,0x1040000,0x1040000,0x1040000,0x1040000,0x1040000,0x1040000,0x7FC0000, -0x7FC0000,0x7FC0000,0x7FC0000,0x56000001,0xB00000,0xB00000,0xB00000,0xB00000,0xB00000,0xB00000,0xB00000,0xB00000,0xBC0000,0xBC0000,0xBC0000,0x1040000,0x1740000,0x1040000,0x1040000,0x1040000,0x1040000,0x1040000,0x1040000,0x1040000,0x1040000,0x1040000,0x1040000,0x3800000,0x3800000,0x3800000,0x3800000,0x3800000, -0x3800000,0x45FC0000,0x45FC0000,0x45FC0000,0x80000001,0x3800000,0x3800000,0x3800000,0x3800000,0x3800000,0x3800000,0x45FC0000,0x45FC0000,0x45FC0000,0x80000001,0x45FC0000,0x45FC0000,0x45FC0000,0x80000001,0x80000001,0x3140000,0x1040000,0x1040000,0x52C0000,0x3440000,0x1600000,0x1600000,0x1B40000,0x52C0000,0x3440000,0x15FC0000,0x45FC0000, -0x15FC0000,0x14C0000,0x14C0000,0x14C0000,0x14C0000,0x1EC0000,0x1EC0000,0x1EC0000,0x7BFC0000,0x7BFC0000,0xA4000001,0x1EC0000,0x1EC0000,0x1EC0000,0x7BFC0000,0x7BFC0000,0xA4000001,0x7BFC0000,0x7BFC0000,0xA4000001,0xA4000001,0x1EC0000,0x1EC0000,0x1EC0000,0x7BFC0000,0x7BFC0000,0xA4000001,0x7BFC0000,0x7BFC0000,0xA4000001,0xA4000001,0x7BFC0000, -0x7BFC0000,0xA4000001,0xA4000001,0xA4000001,0x5800000,0x9600000,0x14C0000,0x1C40000,0x25FC0000,0x59FC0000,0x69FC0000,0x87F40000,0x1A00000,0x1EC0000,0x59FC0000,0xA4000001,0x59FC0000,0x1A00000,0x71FC0000,0xB9FC0000,0xCE000001,0x71FC0000,0xB9FC0000,0xCE000001,0xB9FC0000,0xCE000001,0xCE000001,0x71FC0000,0xB9FC0000,0xCE000001,0xB9FC0000,0xCE000001, -0xCE000001,0xB9FC0000,0xCE000001,0xCE000001,0xCE000001,0x71FC0000,0xB9FC0000,0xCE000001,0xB9FC0000,0xCE000001,0xCE000001,0xB9FC0000,0xCE000001,0xCE000001,0xCE000001,0xB9FC0000,0xCE000001,0xCE000001,0xCE000001,0xCE000001,0x1BFC0000,0x1BC0000,0x1BC0000,0x8DFC0000,0xB1FC0000,0xC5F40000,0xCE000001,0xCE000001,0x4FFC0000,0x9BFC0000,0xCDEC0000,0xCE000001, -0xA7FC0000,0x1281EA8,0xFF0C10D8,0xF7000BE8,0xCF000BE9,0xFEF40BA8,0xFEDC03B5,0xD4E80531,0xE0D806E6,0xCCD803AE,0xBAD806E6,0xFEDC0EF8,0xFEB802CE,0xD6C80411,0xE8AC038E,0xCEB0000E,0xBCB803AE,0xCEB00BE8,0xC2A00413,0xB4A80533,0xA6B00BEB,0x1B81EA8,0xFE880CAF,0xCEB40BE9,0xFE4C06F6,0xD07C038E,0xBA8C06E6,0xF21C0BE9,0xCE38028A,0xB84403A3,0xA6640BEB,0x61F81EA8, -0xC4000C91,0xB2000856,0xA0000E0B,0x92001EAC,0xFF0C1316,0xF9201A96,0xFB241B85,0xFEEC08C9,0xFEC40195,0xECB00006,0xD2B80046,0xCAA80046,0xFEF81262,0xFED0075B,0xD49C029D,0xB84403A3,0x37FC1EA8,0x1500BE8,0xFF340489,0xED280288,0xCF280289,0xFF180478,0xF3040005,0xD10C0042,0xD7040372,0xC8FC00A5,0xBB040372,0x1F40BE8,0xFEC002A1,0xD0EC0289,0xF0980372,0xCEB8000A, -0xBACC0372,0x7FF80BE8,0xCE340289,0xBA180372,0xA6000BEB,0x1F40BE8,0xFEC002A1,0xD0EC0289,0xF0980372,0xCEB8000A,0xBACC0372,0x7FF80BE8,0xCE340289,0xBA180372,0xA6000BEB,0x7FF80BE8,0xCE340289,0xBA180372,0xA6000BEB,0xA6000BEB,0xFF3407C9,0xFD480A38,0xFF4C0A20,0xFF08040E,0xFED000DE,0xEAB40006,0xD0CC0001,0xCC940022,0xFF180806,0xFEF00396,0xD88C0288,0xBA180372, -0x5DF80BE8,0x1000BE8,0x1000BE8,0x1000BE8,0x1000BE8,0xFEDC03B4,0xFEDC03B4,0xFEDC03B4,0xC0DC0374,0xC0DC0374,0xA4D80375,0xFCB802AA,0xFCB802AA,0xFCB802AA,0xCCB40009,0xCCB40009,0xA8BC00A6,0xB0B00288,0xB0B00288,0xA0AC0041,0x92B0028A,0x17C0BE8,0x17C0BE8,0x17C0BE8,0xDA700372,0xDA700372,0xA4A40373,0xCA440289,0xCA440289,0xA6640002,0x9474028A,0x43F80BE8, -0x43F80BE8,0xA400037B,0x900002EB,0x7E000BEB,0xFEE806AD,0xF6FC09B4,0x1000BE8,0xFED402DD,0xFEC0005D,0xECB00005,0xDAB80021,0xC0B00002,0xFED0064B,0xFEBC0272,0xCEA0028A,0xA6640002,0x11FC0BE8,0x1280288,0x1280288,0x1280288,0x1280288,0xEF040000,0xEF040000,0xEF040000,0xB7040000,0xB7040000,0xA5040001,0x1B80288,0x1B80288,0x1B80288,0xC4C40001,0xC4C40001, -0xA6E00001,0x61F80288,0x61F80288,0xA4740001,0x9200028A,0x1B80288,0x1B80288,0x1B80288,0xC4C40001,0xC4C40001,0xA6E00001,0x61F80288,0x61F80288,0xA4740001,0x9200028A,0x61F80288,0x61F80288,0xA4740001,0x9200028A,0x9200028A,0xFF100152,0xF92001A5,0x1280288,0xFCF400B5,0xFEC8000A,0xE4BC0000,0xD0CC0000,0xC2AC0000,0xFEF80171,0xFEDC0091,0x37FC0288,0xA4740001, -0x37FC0288,0x1740374,0xFF5C0071,0xE54C0000,0xCF4C0001,0x31FC0372,0xF5000001,0xCF240001,0x9BF80372,0xCEA40001,0xBA000372,0x31FC0372,0xF5000001,0xCF240001,0x9BF80372,0xCEA40001,0xBA000372,0x9BF80372,0xCEA40001,0xBA000372,0xBA000372,0x31FC0372,0xF5000001,0xCF240001,0x9BF80372,0xCEA40001,0xBA000372,0x9BF80372,0xCEA40001,0xBA000372,0xBA000372,0x9BF80372, -0xCEA40001,0xBA000372,0xBA000372,0xBA000372,0xFF5002A8,0xF8C0372,0xFF6C02B9,0xFF30016D,0xFEE80075,0xEEA80000,0xCED40001,0xCE680001,0xF9500288,0xFF140145,0xD6DC0000,0xBA000372,0x7FFC0372,0xD80374,0xD80374,0xD80374,0xD80374,0xD80374,0xD80374,0xD80374,0xD80374,0xD80374,0xD80374,0xD6B00000,0xD6B00000,0xD6B00000,0xD6B00000,0xD6B00000, -0xD6B00000,0x96B00000,0x96B00000,0x96B00000,0x80B00001,0x1440372,0x1440372,0x1440372,0x1440372,0x1440372,0x1440372,0xA6640001,0xA6640001,0xA6640001,0x80880001,0x27F80372,0x27F80372,0x27F80372,0x80080001,0x6C000372,0xFECC0208,0xD80374,0xD80374,0xFAC400C8,0xFEB40028,0xF4B00000,0xF4B00000,0xBEB00000,0xFCB801A5,0xFAAC00A4,0xACA40000,0xA6640001, -0x1D00372,}; -static const uint32_t g_etc1_to_bc7_m6_table147[] = { -0xC00000,0xC00000,0xC00000,0xC00000,0xC00000,0xC00000,0xC00000,0xC00000,0xC00000,0xC00000,0xC00000,0xC00000,0xC00000,0xC00000,0xC00000,0xC00000,0xC00000,0xC00000,0xC00000,0xC00000,0x11C0000,0x11C0000,0x11C0000,0x11C0000,0x11C0000,0x11C0000,0x11C0000,0x11C0000,0x11C0000,0x11C0000,0x13FC0000, -0x13FC0000,0x13FC0000,0x13FC0000,0x5E000001,0xC00000,0xC00000,0xC00000,0xC00000,0xC00000,0xC00000,0xC00000,0xC00000,0xCC0000,0xCC0000,0xCC0000,0x11C0000,0x1980000,0x1140000,0x1140000,0x1140000,0x1140000,0x1140000,0x1140000,0x1140000,0x1140000,0x1140000,0x1140000,0x3980000,0x3980000,0x3980000,0x3980000,0x3980000, -0x3980000,0x51FC0000,0x51FC0000,0x51FC0000,0x88000001,0x3980000,0x3980000,0x3980000,0x3980000,0x3980000,0x3980000,0x51FC0000,0x51FC0000,0x51FC0000,0x88000001,0x51FC0000,0x51FC0000,0x51FC0000,0x88000001,0x88000001,0xB240000,0x1140000,0x1140000,0x1400000,0x3580000,0x1780000,0x1780000,0x1D00000,0x1400000,0x3580000,0x23FC0000,0x51FC0000, -0x23FC0000,0x15C0000,0x15C0000,0x15C0000,0x15C0000,0x9FC0000,0x9FC0000,0x9FC0000,0x87FC0000,0x87FC0000,0xAC000001,0x9FC0000,0x9FC0000,0x9FC0000,0x87FC0000,0x87FC0000,0xAC000001,0x87FC0000,0x87FC0000,0xAC000001,0xAC000001,0x9FC0000,0x9FC0000,0x9FC0000,0x87FC0000,0x87FC0000,0xAC000001,0x87FC0000,0x87FC0000,0xAC000001,0xAC000001,0x87FC0000, -0x87FC0000,0xAC000001,0xAC000001,0xAC000001,0x1940000,0x1740000,0x15C0000,0x1D80000,0x39FC0000,0x67FC0000,0x77FC0000,0x91FC0000,0x1B40000,0x9FC0000,0x67FC0000,0xAC000001,0x67FC0000,0x1B00000,0x89FC0000,0xC5FC0000,0xD6000001,0x89FC0000,0xC5FC0000,0xD6000001,0xC5FC0000,0xD6000001,0xD6000001,0x89FC0000,0xC5FC0000,0xD6000001,0xC5FC0000,0xD6000001, -0xD6000001,0xC5FC0000,0xD6000001,0xD6000001,0xD6000001,0x89FC0000,0xC5FC0000,0xD6000001,0xC5FC0000,0xD6000001,0xD6000001,0xC5FC0000,0xD6000001,0xD6000001,0xD6000001,0xC5FC0000,0xD6000001,0xD6000001,0xD6000001,0xD6000001,0x41FC0000,0x1CC0000,0x1CC0000,0xA1FC0000,0xBFF80000,0xCFF40000,0xD6000001,0xD6000001,0x6FFC0000,0xADFC0000,0xD5FC0000,0xD6000001, -0xB7FC0000,0x1381EA8,0xFF241198,0xFF100BE8,0xD7100BE9,0xFF0C0C98,0xFEF403FD,0xDCF80531,0xE8E806E6,0xD4E803AE,0xC2E806E6,0xFEF40FB8,0xFECC0345,0xDED80411,0xF0BC038E,0xD6C0000E,0xC4C803AE,0xD6C00BE8,0xCAB00413,0xBCB80533,0xAEC00BEB,0x1D01EA8,0xFEA00D2F,0xD6C40BE9,0xFE700736,0xD88C038E,0xC29C06E6,0xFA2C0BE9,0xD648028A,0xC05403A3,0xAE740BEB,0x6DF81EA8, -0xD0000C49,0xBC0007F4,0xAC000D93,0x9A001EAC,0xFF2013CE,0xFF2C1AAE,0xFF2C1BCD,0xFF0009E0,0xFED8026D,0xF4C00006,0xDAC80046,0xD2B80046,0xFF101346,0xFEE008B4,0xDCAC029D,0xC05403A3,0x45FC1EA8,0x1600BE8,0xFF4404E1,0xF5380288,0xD7380289,0xFF3004D8,0xFB140005,0xD91C0042,0xDF140372,0xD10C00A5,0xC3140372,0xFFC0BE8,0xFED802D9,0xD8FC0289,0xF8A80372,0xD6C8000A, -0xC2DC0372,0x8BF80BE8,0xD6440289,0xC2280372,0xAE000BEB,0xFFC0BE8,0xFED802D9,0xD8FC0289,0xF8A80372,0xD6C8000A,0xC2DC0372,0x8BF80BE8,0xD6440289,0xC2280372,0xAE000BEB,0x8BF80BE8,0xD6440289,0xC2280372,0xAE000BEB,0xAE000BEB,0xFB480849,0xF5580A7E,0xF75C0A69,0xFF180496,0xFEE80149,0xF2C40006,0xD8DC0001,0xD4A40022,0xFF34084E,0xFF040403,0xE09C0288,0xC2280372, -0x6BFC0BE8,0x1100BE8,0x1100BE8,0x1100BE8,0x1100BE8,0xFEF403E4,0xFEF403E4,0xFEF403E4,0xC8EC0374,0xC8EC0374,0xACE80375,0xFEC802CA,0xFEC802CA,0xFEC802CA,0xD4C40009,0xD4C40009,0xB0CC00A6,0xB8C00288,0xB8C00288,0xA8BC0041,0x9AC0028A,0x1940BE8,0x1940BE8,0x1940BE8,0xE2800372,0xE2800372,0xACB40373,0xD2540289,0xD2540289,0xAE740002,0x9C84028A,0x4FF80BE8, -0x4FF80BE8,0xAC040373,0x9A0002CA,0x86000BEB,0xFD000714,0xFF0C09B4,0x1100BE8,0xFEE8034D,0xFED40099,0xF4C00005,0xE2C80021,0xC8C00002,0xFEE406AA,0xFED002BA,0xD6B0028A,0xAE740002,0x1FFC0BE8,0x1380288,0x1380288,0x1380288,0x1380288,0xF7140000,0xF7140000,0xF7140000,0xBF140000,0xBF140000,0xAD140001,0x1D00288,0x1D00288,0x1D00288,0xCCD40001,0xCCD40001, -0xAEF00001,0x6DF80288,0x6DF80288,0xAC840001,0x9A00028A,0x1D00288,0x1D00288,0x1D00288,0xCCD40001,0xCCD40001,0xAEF00001,0x6DF80288,0x6DF80288,0xAC840001,0x9A00028A,0x6DF80288,0x6DF80288,0xAC840001,0x9A00028A,0x9A00028A,0xFF20016D,0xFF2C01B1,0x1380288,0xFD0400CA,0xFEE00019,0xECCC0000,0xD8DC0000,0xCABC0000,0xFD100188,0xFEE800B4,0x45FC0288,0xAC840001, -0x45FC0288,0x1840374,0xFF68009D,0xED5C0000,0xD75C0001,0x49FC0372,0xFD100001,0xD7340001,0xA7F80372,0xD6B40001,0xC2000372,0x49FC0372,0xFD100001,0xD7340001,0xA7F80372,0xD6B40001,0xC2000372,0xA7F80372,0xD6B40001,0xC2000372,0xC2000372,0x49FC0372,0xFD100001,0xD7340001,0xA7F80372,0xD6B40001,0xC2000372,0xA7F80372,0xD6B40001,0xC2000372,0xC2000372,0xA7F80372, -0xD6B40001,0xC2000372,0xC2000372,0xC2000372,0xFB7002AD,0x1A00372,0xF98002D4,0xFF40019A,0xFF0C00B5,0xF6B80000,0xD6E40001,0xD6780001,0xFF5C0290,0xFF2C0185,0xDEEC0000,0xC2000372,0x8FFC0372,0xE80374,0xE80374,0xE80374,0xE80374,0xE80374,0xE80374,0xE80374,0xE80374,0xE80374,0xE80374,0xDEC00000,0xDEC00000,0xDEC00000,0xDEC00000,0xDEC00000, -0xDEC00000,0x9EC00000,0x9EC00000,0x9EC00000,0x88C00001,0x15C0372,0x15C0372,0x15C0372,0x15C0372,0x15C0372,0x15C0372,0xAE740001,0xAE740001,0xAE740001,0x88980001,0x33F80372,0x33F80372,0x33F80372,0x88180001,0x74000372,0xF8E00221,0xE80374,0xE80374,0xFCD400DD,0xFCCC003D,0xFCC00000,0xFCC00000,0xC6C00000,0xF8CC01C2,0xFEBC00B9,0xB4B40000,0xAE740001, -0x1F00372,}; -static const uint32_t g_etc1_to_bc7_m6_table148[] = { -0xD00001,0xD00001,0xD00001,0xD00001,0xD00001,0xD00001,0xD00001,0xD00001,0xD00001,0xD00001,0xD00001,0xD00001,0xD00001,0xD00001,0xD00001,0xD00001,0xD00001,0xD00001,0xD00001,0xD00001,0x1380000,0x1380000,0x1380000,0x1380000,0x1380000,0x1380000,0x1380000,0x1380000,0x1380000,0x1380000,0x21F80000, -0x21F80000,0x21F80000,0x21F80000,0x68000000,0xD00001,0xD00001,0xD00001,0xD00001,0xD00001,0xD00001,0xD00001,0xD00001,0xE00000,0xE00000,0xE00000,0x1380000,0x1BC0000,0x1240001,0x1240001,0x1240001,0x1240001,0x1240001,0x1240001,0x1240001,0x1240001,0x1240001,0x1240001,0x1B40000,0x1B40000,0x1B40000,0x1B40000,0x1B40000, -0x1B40000,0x5FF80000,0x5FF80000,0x5FF80000,0x92000000,0x1B40000,0x1B40000,0x1B40000,0x1B40000,0x1B40000,0x1B40000,0x5FF80000,0x5FF80000,0x5FF80000,0x92000000,0x5FF80000,0x5FF80000,0x5FF80000,0x92000000,0x92000000,0x5380000,0x1240001,0x1240001,0x3540000,0x1700000,0x1900000,0x1900000,0x3EC0000,0x3540000,0x1700000,0x35FC0000,0x5FF80000, -0x35FC0000,0x16C0001,0x16C0001,0x16C0001,0x16C0001,0x25FC0000,0x25FC0000,0x25FC0000,0x95F80000,0x95F80000,0xB6000000,0x25FC0000,0x25FC0000,0x25FC0000,0x95F80000,0x95F80000,0xB6000000,0x95F80000,0x95F80000,0xB6000000,0xB6000000,0x25FC0000,0x25FC0000,0x25FC0000,0x95F80000,0x95F80000,0xB6000000,0x95F80000,0x95F80000,0xB6000000,0xB6000000,0x95F80000, -0x95F80000,0xB6000000,0xB6000000,0xB6000000,0x3A80000,0xB840000,0x16C0001,0x3F00000,0x4FFC0000,0x79FC0000,0x87F80000,0x9DFC0000,0x1CC0000,0x25FC0000,0x79FC0000,0xB6000000,0x79FC0000,0x1C00001,0xA5FC0000,0xD3FC0000,0xE0000000,0xA5FC0000,0xD3FC0000,0xE0000000,0xD3FC0000,0xE0000000,0xE0000000,0xA5FC0000,0xD3FC0000,0xE0000000,0xD3FC0000,0xE0000000, -0xE0000000,0xD3FC0000,0xE0000000,0xE0000000,0xE0000000,0xA5FC0000,0xD3FC0000,0xE0000000,0xD3FC0000,0xE0000000,0xE0000000,0xD3FC0000,0xE0000000,0xE0000000,0xE0000000,0xD3FC0000,0xE0000000,0xE0000000,0xE0000000,0xE0000000,0x6DFC0000,0x1E00000,0x1E00000,0xB7FC0000,0xCDFC0000,0xD9FC0000,0xE0000000,0xE0000000,0x8FFC0000,0xC1FC0000,0xDFF00000,0xE0000000, -0xC7FC0000,0x1481EAC,0xFF30126C,0xFF200C0F,0xE1200BEB,0xFF180DB4,0xFF080497,0xE5080533,0xF0FC06E6,0xDCF803AE,0xCAFC06E6,0xFF00109C,0xFEE4040B,0xE8EC0413,0xFAD0038E,0xE0D0000E,0xCCD803AE,0xDED40BE9,0xD4C40411,0xC4C80531,0xB8D00BE9,0x3E81EA8,0xFEC00DE7,0xE0D40BE8,0xFE8807BE,0xE2A0038E,0xCAB006E6,0xFE4C0BFB,0xE05C028A,0xCA6803A1,0xB8840BE8,0x79FC1EA8, -0xDC000C13,0xC400078E,0xB2000D35,0xA4001EA8,0xFF3414AF,0xFB441B24,0xFD481BF4,0xFF140B27,0xFEF00392,0xFED40006,0xE4DC0046,0xDCCC0046,0xFF181429,0xFF0009F4,0xE6BC029D,0xCA6803A1,0x57FC1EA8,0x1700BEB,0xFF5C056A,0xFF48028A,0xE148028A,0xFF440545,0xFF28001A,0xE3300041,0xE7280373,0xDB2000A6,0xCB240375,0x2BFC0BE8,0xFEFC032A,0xE1100288,0xFEC00375,0xDED80009, -0xCAF00374,0x97FC0BE8,0xE0540288,0xCA400374,0xB8000BE8,0x2BFC0BE8,0xFEFC032A,0xE1100288,0xFEC00375,0xDED80009,0xCAF00374,0x97FC0BE8,0xE0540288,0xCA400374,0xB8000BE8,0x97FC0BE8,0xE0540288,0xCA400374,0xB8000BE8,0xB8000BE8,0xFF580895,0xFF6C0A7D,0xFF6C0A6E,0xFF30053A,0xFF1001EE,0xFCD80005,0xE0EC0002,0xDCBC0021,0xFF4408B8,0xFF2404CA,0xE8B00289,0xCA400374, -0x7DF80BE8,0x1200BEB,0x1200BEB,0x1200BEB,0x1200BEB,0xFF040422,0xFF040422,0xFF040422,0xD2FC0372,0xD2FC0372,0xB6FC0372,0xFEE00301,0xFEE00301,0xFEE00301,0xDCD4000A,0xDCD4000A,0xBAE000A5,0xC2D00289,0xC2D00289,0xB2D00042,0xA4D00289,0x1B00BE8,0x1B00BE8,0x1B00BE8,0xEC900372,0xEC900372,0xB6C40372,0xDC640289,0xDC640289,0xB6840005,0xA4980288,0x5DF40BE8, -0x5DF40BE8,0xB6100372,0xA20002A9,0x90000BE8,0xFF100755,0xF71C09F6,0x1200BEB,0xFEF803C2,0xFEE400F1,0xFAD40005,0xEAD80022,0xD2D00001,0xFEF806F2,0xFEE80352,0xE0C00289,0xB6840005,0x31FC0BE8,0x148028A,0x148028A,0x148028A,0x148028A,0xFF280001,0xFF280001,0xFF280001,0xC9240001,0xC9240001,0xB7240001,0x3E80288,0x3E80288,0x3E80288,0xD6E40001,0xD6E40001, -0xB7040000,0x79FC0288,0x79FC0288,0xB6900000,0xA4000288,0x3E80288,0x3E80288,0x3E80288,0xD6E40001,0xD6E40001,0xB7040000,0x79FC0288,0x79FC0288,0xB6900000,0xA4000288,0x79FC0288,0x79FC0288,0xB6900000,0xA4000288,0xA4000288,0xFB34018A,0xFB4401C2,0x148028A,0xFF1800E1,0xFCFC0032,0xF4E00000,0xE2EC0000,0xD2D00000,0xF92801A5,0xFF0400D0,0x57FC0288,0xB6900000, -0x57FC0288,0x1980372,0xFF8000E1,0xF5700001,0xE16C0001,0x65FC0372,0xFF2C0011,0xE1440000,0xB3FC0372,0xE0C00000,0xCA000374,0x65FC0372,0xFF2C0011,0xE1440000,0xB3FC0372,0xE0C00000,0xCA000374,0xB3FC0372,0xE0C00000,0xCA000374,0xCA000374,0x65FC0372,0xFF2C0011,0xE1440000,0xB3FC0372,0xE0C00000,0xCA000374,0xB3FC0372,0xE0C00000,0xCA000374,0xCA000374,0xB3FC0372, -0xE0C00000,0xCA000374,0xCA000374,0xCA000374,0xFB8402D2,0x1B40372,0xFF8C02F2,0xFD6801E1,0xFF2800E9,0xFECC0001,0xE0F40000,0xE0840000,0xFF7002C5,0xFF4C01B1,0xE7000000,0xCA000374,0x9FFC0372,0xFC0372,0xFC0372,0xFC0372,0xFC0372,0xFC0372,0xFC0372,0xFC0372,0xFC0372,0xFC0372,0xFC0372,0xE6D40001,0xE6D40001,0xE6D40001,0xE6D40001,0xE6D40001, -0xE6D40001,0xA6D40001,0xA6D40001,0xA6D40001,0x92D00001,0x3740372,0x3740372,0x3740372,0x3740372,0x3740372,0x3740372,0xB8840001,0xB8840001,0xB8840001,0x92A80000,0x3FFC0372,0x3FFC0372,0x3FFC0372,0x92240000,0x7C000374,0xFEEC0239,0xFC0372,0xFC0372,0xFEE800F2,0xFCE00055,0xFED40002,0xFED40002,0xCED40001,0xFED801D4,0xFED000D0,0xBAC80001,0xB8840001, -0xDFC0372,}; -static const uint32_t g_etc1_to_bc7_m6_table149[] = { -0xE00001,0xE00001,0xE00001,0xE00001,0xE00001,0xE00001,0xE00001,0xE00001,0xE00001,0xE00001,0xE00001,0xE00001,0xE00001,0xE00001,0xE00001,0xE00001,0xE00001,0xE00001,0xE00001,0xE00001,0x1500000,0x1500000,0x1500000,0x1500000,0x1500000,0x1500000,0x1500000,0x1500000,0x1500000,0x1500000,0x2DF80000, -0x2DF80000,0x2DF80000,0x2DF80000,0x70000000,0xE00001,0xE00001,0xE00001,0xE00001,0xE00001,0xE00001,0xE00001,0xE00001,0xF00000,0xF00000,0xF00000,0x1500000,0x1E00000,0x1340001,0x1340001,0x1340001,0x1340001,0x1340001,0x1340001,0x1340001,0x1340001,0x1340001,0x1340001,0x1CC0000,0x1CC0000,0x1CC0000,0x1CC0000,0x1CC0000, -0x1CC0000,0x6BF80000,0x6BF80000,0x6BF80000,0x9A000000,0x1CC0000,0x1CC0000,0x1CC0000,0x1CC0000,0x1CC0000,0x1CC0000,0x6BF80000,0x6BF80000,0x6BF80000,0x9A000000,0x6BF80000,0x6BF80000,0x6BF80000,0x9A000000,0x9A000000,0xD480000,0x1340001,0x1340001,0x1680000,0x1840000,0x3A40000,0x3A40000,0xBFC0000,0x1680000,0x1840000,0x43FC0000,0x6BF80000, -0x43FC0000,0x17C0001,0x17C0001,0x17C0001,0x17C0001,0x3DFC0000,0x3DFC0000,0x3DFC0000,0xA1F80000,0xA1F80000,0xBE000000,0x3DFC0000,0x3DFC0000,0x3DFC0000,0xA1F80000,0xA1F80000,0xBE000000,0xA1F80000,0xA1F80000,0xBE000000,0xBE000000,0x3DFC0000,0x3DFC0000,0x3DFC0000,0xA1F80000,0xA1F80000,0xBE000000,0xA1F80000,0xA1F80000,0xBE000000,0xBE000000,0xA1F80000, -0xA1F80000,0xBE000000,0xBE000000,0xBE000000,0x1BC0000,0x1980000,0x17C0001,0xFFC0000,0x63FC0000,0x87FC0000,0x95F80000,0xA9F40000,0x1E00000,0x3DFC0000,0x87FC0000,0xBE000000,0x87FC0000,0x1D00001,0xBDFC0000,0xDFF80000,0xE8000000,0xBDFC0000,0xDFF80000,0xE8000000,0xDFF80000,0xE8000000,0xE8000000,0xBDFC0000,0xDFF80000,0xE8000000,0xDFF80000,0xE8000000, -0xE8000000,0xDFF80000,0xE8000000,0xE8000000,0xE8000000,0xBDFC0000,0xDFF80000,0xE8000000,0xDFF80000,0xE8000000,0xE8000000,0xDFF80000,0xE8000000,0xE8000000,0xE8000000,0xDFF80000,0xE8000000,0xE8000000,0xE8000000,0xE8000000,0x95FC0000,0x1F00000,0x1F00000,0xCBFC0000,0xDBFC0000,0xE5F00000,0xE8000000,0xE8000000,0xAFFC0000,0xD1FC0000,0xE9C40000,0xE8000000, -0xD7FC0000,0x1581EAC,0xFF44131B,0xFF340C64,0xE9300BEB,0xFF300EB4,0xFF180563,0xED180533,0xF90C06E6,0xE50803AE,0xD30C06E6,0xFF181164,0xFEFC04F3,0xF0FC0413,0xFEE4039E,0xE8E0000E,0xD4E803AE,0xE6E40BE9,0xDCD40411,0xCCD80531,0xC0E00BE9,0x7FC1EA8,0xFED80EA7,0xE8E40BE8,0xFEAC0866,0xEAB0038E,0xD2C006E6,0xFE640C43,0xE86C028A,0xD27803A1,0xC0940BE8,0x85FC1EA8, -0xE6000BF8,0xD000073E,0xBE000CD5,0xAC001EA8,0xFF3C1574,0xFF4C1B64,0xF5581C63,0xFF240C9E,0xFF0404CE,0xFEE80032,0xECEC0046,0xE4DC0046,0xFF3414DA,0xFF100B2E,0xEECC029D,0xD27803A1,0x65FC1EA8,0x1800BEB,0xFF6805FA,0xFF5802A3,0xE958028A,0xFF5C05CD,0xFF40006A,0xEB400041,0xEF380373,0xE33000A6,0xD3340375,0x43FC0BE8,0xFF14039A,0xE9200288,0xFEE4039D,0xE6E80009, -0xD3000374,0xA3FC0BE8,0xE8640288,0xD2500374,0xC0000BE8,0x43FC0BE8,0xFF14039A,0xE9200288,0xFEE4039D,0xE6E80009,0xD3000374,0xA3FC0BE8,0xE8640288,0xD2500374,0xC0000BE8,0xA3FC0BE8,0xE8640288,0xD2500374,0xC0000BE8,0xC0000BE8,0xFF640905,0xF77C0AC3,0xF9800AB3,0xFF4405E1,0xFF24028E,0xFEF0001B,0xE8FC0002,0xE4CC0021,0xFF5C08DE,0xFF400550,0xF0C00289,0xD2500374, -0x8BFC0BE8,0x1300BEB,0x1300BEB,0x1300BEB,0x1300BEB,0xFF180463,0xFF180463,0xFF180463,0xDB0C0372,0xDB0C0372,0xBF0C0372,0xFEF4033B,0xFEF4033B,0xFEF4033B,0xE4E4000A,0xE4E4000A,0xC2F000A5,0xCAE00289,0xCAE00289,0xBAE00042,0xACE00289,0x3C40BE8,0x3C40BE8,0x3C40BE8,0xF4A00372,0xF4A00372,0xBED40372,0xE4740289,0xE4740289,0xBE940005,0xACA80288,0x67FC0BE8, -0x67FC0BE8,0xBE200372,0xAC000291,0x98000BE8,0xFF200792,0xFF2C09F6,0x1300BEB,0xFF100426,0xFEF8014D,0xFEE8000E,0xF2E80022,0xDAE00001,0xFF100749,0xFEF403B6,0xE8D00289,0xBE940005,0x3FFC0BE8,0x158028A,0x158028A,0x158028A,0x158028A,0xFD38000A,0xFD38000A,0xFD38000A,0xD1340001,0xD1340001,0xBF340001,0x7FC0288,0x7FC0288,0x7FC0288,0xDEF40001,0xDEF40001, -0xBF140000,0x85FC0288,0x85FC0288,0xBEA00000,0xAC000288,0x7FC0288,0x7FC0288,0x7FC0288,0xDEF40001,0xDEF40001,0xBF140000,0x85FC0288,0x85FC0288,0xBEA00000,0xAC000288,0x85FC0288,0x85FC0288,0xBEA00000,0xAC000288,0xAC000288,0xF74801A5,0xF35401E1,0x158028A,0xFD300109,0xFD140048,0xFCF00000,0xEAFC0000,0xDAE00000,0xFF3401A9,0xFF1800E9,0x65FC0288,0xBEA00000, -0x65FC0288,0x1A80372,0xFF8C0131,0xFD800001,0xE97C0001,0x7DFC0372,0xFF4C0041,0xE9540000,0xBFFC0372,0xE8D00000,0xD2000374,0x7DFC0372,0xFF4C0041,0xE9540000,0xBFFC0372,0xE8D00000,0xD2000374,0xBFFC0372,0xE8D00000,0xD2000374,0xD2000374,0x7DFC0372,0xFF4C0041,0xE9540000,0xBFFC0372,0xE8D00000,0xD2000374,0xBFFC0372,0xE8D00000,0xD2000374,0xD2000374,0xBFFC0372, -0xE8D00000,0xD2000374,0xD2000374,0xD2000374,0xFF9402D4,0x1C40372,0xFBA402F9,0xFF740212,0xFF500139,0xFEF0001A,0xE9040000,0xE8940000,0xFB9002D2,0xFF6401F9,0xEF100000,0xD2000374,0xAFFC0372,0x10C0372,0x10C0372,0x10C0372,0x10C0372,0x10C0372,0x10C0372,0x10C0372,0x10C0372,0x10C0372,0x10C0372,0xEEE40001,0xEEE40001,0xEEE40001,0xEEE40001,0xEEE40001, -0xEEE40001,0xAEE40001,0xAEE40001,0xAEE40001,0x9AE00001,0x38C0372,0x38C0372,0x38C0372,0x38C0372,0x38C0372,0x38C0372,0xC0940001,0xC0940001,0xC0940001,0x9AB80000,0x4BFC0372,0x4BFC0372,0x4BFC0372,0x9A340000,0x84000374,0xFB040242,0x10C0372,0x10C0372,0xFEF40115,0xFEEC006A,0xFEE8000D,0xFEE8000D,0xD6E40001,0xFCF001E1,0xFEE400F4,0xC2D80001,0xC0940001, -0x1DF80372,}; -static const uint32_t g_etc1_to_bc7_m6_table150[] = { -0xF00001,0xF00001,0xF00001,0xF00001,0xF00001,0xF00001,0xF00001,0xF00001,0xF00001,0xF00001,0xF00001,0xF00001,0xF00001,0xF00001,0xF00001,0xF00001,0xF00001,0xF00001,0xF00001,0xF00001,0x1680000,0x1680000,0x1680000,0x1680000,0x1680000,0x1680000,0x1680000,0x1680000,0x1680000,0x1680000,0x39F80000, -0x39F80000,0x39F80000,0x39F80000,0x78000000,0xF00001,0xF00001,0xF00001,0xF00001,0xF00001,0xF00001,0xF00001,0xF00001,0x9000000,0x9000000,0x9000000,0x1680000,0x3FC0000,0x1440001,0x1440001,0x1440001,0x1440001,0x1440001,0x1440001,0x1440001,0x1440001,0x1440001,0x1440001,0x1E40000,0x1E40000,0x1E40000,0x1E40000,0x1E40000, -0x1E40000,0x77F80000,0x77F80000,0x77F80000,0xA2000000,0x1E40000,0x1E40000,0x1E40000,0x1E40000,0x1E40000,0x1E40000,0x77F80000,0x77F80000,0x77F80000,0xA2000000,0x77F80000,0x77F80000,0x77F80000,0xA2000000,0xA2000000,0x15C0000,0x1440001,0x1440001,0x17C0000,0x1980000,0x1BC0000,0x1BC0000,0x1DFC0000,0x17C0000,0x1980000,0x53FC0000,0x77F80000, -0x53FC0000,0x18C0001,0x18C0001,0x18C0001,0x18C0001,0x55FC0000,0x55FC0000,0x55FC0000,0xADF80000,0xADF80000,0xC6000000,0x55FC0000,0x55FC0000,0x55FC0000,0xADF80000,0xADF80000,0xC6000000,0xADF80000,0xADF80000,0xC6000000,0xC6000000,0x55FC0000,0x55FC0000,0x55FC0000,0xADF80000,0xADF80000,0xC6000000,0xADF80000,0xADF80000,0xC6000000,0xC6000000,0xADF80000, -0xADF80000,0xC6000000,0xC6000000,0xC6000000,0x7CC0000,0x1A80000,0x18C0001,0x2FFC0000,0x77FC0000,0x97FC0000,0xA1FC0000,0xB3FC0000,0x1F40000,0x55FC0000,0x97FC0000,0xC6000000,0x97FC0000,0x1E00001,0xD5FC0000,0xEBF80000,0xF0000000,0xD5FC0000,0xEBF80000,0xF0000000,0xEBF80000,0xF0000000,0xF0000000,0xD5FC0000,0xEBF80000,0xF0000000,0xEBF80000,0xF0000000, -0xF0000000,0xEBF80000,0xF0000000,0xF0000000,0xF0000000,0xD5FC0000,0xEBF80000,0xF0000000,0xEBF80000,0xF0000000,0xF0000000,0xEBF80000,0xF0000000,0xF0000000,0xF0000000,0xEBF80000,0xF0000000,0xF0000000,0xF0000000,0xF0000000,0xBDFC0000,0x27FC0000,0x27FC0000,0xDDFC0000,0xE9F80000,0xEFF00000,0xF0000000,0xF0000000,0xCDFC0000,0xE3FC0000,0xF1D40000,0xF0000000, -0xE5FC0000,0x1681EAC,0xFF50140B,0xFF480D03,0xF1400BEB,0xFF440FB6,0xFF2C0663,0xF5280533,0xFF1C06EC,0xED1803AE,0xDB1C06E6,0xFF30124C,0xFF14061B,0xF90C0413,0xFEFC0406,0xF0F0000E,0xDCF803AE,0xEEF40BE9,0xE4E40411,0xD4E80531,0xC8F00BE9,0x1FFC1EA8,0xFEF00F87,0xF0F40BE8,0xFEC0096E,0xF2C0038E,0xDAD006E6,0xFE880CBB,0xF07C028A,0xDA8803A1,0xC8A40BE8,0x91FC1EA8, -0xF0000BEB,0xD8000716,0xC4000C91,0xB4001EA8,0xFF50163F,0xFB641BB6,0xFD681C63,0xFF340DE2,0xFF1C0636,0xFEFC00C2,0xF4FC0046,0xECEC0046,0xFF4415D9,0xFF240CCA,0xF6DC029D,0xDA8803A1,0x75FC1EA8,0x1900BEB,0xFF80068A,0xFF7002EB,0xF168028A,0xFF680655,0xFF5400F6,0xF3500041,0xF7480373,0xEB4000A6,0xDB440375,0x5BFC0BE8,0xFF2C042A,0xF1300288,0xFEFC03ED,0xEEF80009, -0xDB100374,0xAFFC0BE8,0xF0740288,0xDA600374,0xC8000BE8,0x5BFC0BE8,0xFF2C042A,0xF1300288,0xFEFC03ED,0xEEF80009,0xDB100374,0xAFFC0BE8,0xF0740288,0xDA600374,0xC8000BE8,0xAFFC0BE8,0xF0740288,0xDA600374,0xC8000BE8,0xC8000BE8,0xFF78093E,0xFF8C0AC3,0xFF8C0ABB,0xFF5C0671,0xFF380356,0xFF10007D,0xF10C0002,0xECDC0021,0xFF780956,0xFF540602,0xF8D00289,0xDA600374, -0x9BFC0BE8,0x1400BEB,0x1400BEB,0x1400BEB,0x1400BEB,0xFF2404B3,0xFF2404B3,0xFF2404B3,0xE31C0372,0xE31C0372,0xC71C0372,0xFF0C0393,0xFF0C0393,0xFF0C0393,0xECF4000A,0xECF4000A,0xCB0000A5,0xD2F00289,0xD2F00289,0xC2F00042,0xB4F00289,0x3DC0BE8,0x3DC0BE8,0x3DC0BE8,0xFCB00372,0xFCB00372,0xC6E40372,0xEC840289,0xEC840289,0xC6A40005,0xB4B80288,0x73FC0BE8, -0x73FC0BE8,0xC6300372,0xB4000289,0xA0000BE8,0xFF2C07F1,0xF73C0A3B,0x1400BEB,0xFF1804AA,0xFF0C01B9,0xFEF80032,0xFAF80022,0xE2F00001,0xFF20078D,0xFF10042D,0xF0E00289,0xC6A40005,0x4FFC0BE8,0x168028A,0x168028A,0x168028A,0x168028A,0xFD4C0019,0xFD4C0019,0xFD4C0019,0xD9440001,0xD9440001,0xC7440001,0x1FFC0288,0x1FFC0288,0x1FFC0288,0xE7040001,0xE7040001, -0xC7240000,0x91FC0288,0x91FC0288,0xC6B00000,0xB4000288,0x1FFC0288,0x1FFC0288,0x1FFC0288,0xE7040001,0xE7040001,0xC7240000,0x91FC0288,0x91FC0288,0xC6B00000,0xB4000288,0x91FC0288,0x91FC0288,0xC6B00000,0xB4000288,0xB4000288,0xFF5801A5,0xFB6401E1,0x168028A,0xFF440120,0xFD280064,0xFF080008,0xF30C0000,0xE2F00000,0xFD4C01C2,0xFF30010D,0x75FC0288,0xC6B00000, -0x75FC0288,0x1B80372,0xFFA40179,0xFF900011,0xF18C0001,0x95FC0372,0xFF640089,0xF1640000,0xCBFC0372,0xF0E00000,0xDA000374,0x95FC0372,0xFF640089,0xF1640000,0xCBFC0372,0xF0E00000,0xDA000374,0xCBFC0372,0xF0E00000,0xDA000374,0xDA000374,0x95FC0372,0xFF640089,0xF1640000,0xCBFC0372,0xF0E00000,0xDA000374,0xCBFC0372,0xF0E00000,0xDA000374,0xDA000374,0xCBFC0372, -0xF0E00000,0xDA000374,0xDA000374,0xDA000374,0xFBAC02F9,0x3D40372,0xFFAC0321,0xFF940242,0xFF680179,0xFF180055,0xF1140000,0xF0A40000,0xFF9802F2,0xFF880221,0xF7200000,0xDA000374,0xBFF80372,0x11C0372,0x11C0372,0x11C0372,0x11C0372,0x11C0372,0x11C0372,0x11C0372,0x11C0372,0x11C0372,0x11C0372,0xF6F40001,0xF6F40001,0xF6F40001,0xF6F40001,0xF6F40001, -0xF6F40001,0xB6F40001,0xB6F40001,0xB6F40001,0xA2F00001,0x3A40372,0x3A40372,0x3A40372,0x3A40372,0x3A40372,0x3A40372,0xC8A40001,0xC8A40001,0xC8A40001,0xA2C80000,0x57FC0372,0x57FC0372,0x57FC0372,0xA2440000,0x8C000374,0xFF0C0262,0x11C0372,0x11C0372,0xFF040132,0xFF000082,0xFEF80019,0xFEF80019,0xDEF40001,0xF9040200,0xFEF80109,0xCAE80001,0xC8A40001, -0x2BFC0372,}; -static const uint32_t g_etc1_to_bc7_m6_table151[] = { -0x1000001,0x1000001,0x1000001,0x1000001,0x1000001,0x1000001,0x1000001,0x1000001,0x1000001,0x1000001,0x1000001,0x1000001,0x1000001,0x1000001,0x1000001,0x1000001,0x1000001,0x1000001,0x1000001,0x1000001,0x1800000,0x1800000,0x1800000,0x1800000,0x1800000,0x1800000,0x1800000,0x1800000,0x1800000,0x1800000,0x45F80000, -0x45F80000,0x45F80000,0x45F80000,0x80000000,0x1000001,0x1000001,0x1000001,0x1000001,0x1000001,0x1000001,0x1000001,0x1000001,0x1140000,0x1140000,0x1140000,0x1800000,0x13FC0000,0x1540001,0x1540001,0x1540001,0x1540001,0x1540001,0x1540001,0x1540001,0x1540001,0x1540001,0x1540001,0x1FC0000,0x1FC0000,0x1FC0000,0x1FC0000,0x1FC0000, -0x1FC0000,0x83F80000,0x83F80000,0x83F80000,0xAA000000,0x1FC0000,0x1FC0000,0x1FC0000,0x1FC0000,0x1FC0000,0x1FC0000,0x83F80000,0x83F80000,0x83F80000,0xAA000000,0x83F80000,0x83F80000,0x83F80000,0xAA000000,0xAA000000,0x16C0000,0x1540001,0x1540001,0x38C0000,0x1AC0000,0x1D00000,0x1D00000,0x31FC0000,0x38C0000,0x1AC0000,0x61FC0000,0x83F80000, -0x61FC0000,0x19C0001,0x19C0001,0x19C0001,0x19C0001,0x6FFC0000,0x6FFC0000,0x6FFC0000,0xB9F80000,0xB9F80000,0xCE000000,0x6FFC0000,0x6FFC0000,0x6FFC0000,0xB9F80000,0xB9F80000,0xCE000000,0xB9F80000,0xB9F80000,0xCE000000,0xCE000000,0x6FFC0000,0x6FFC0000,0x6FFC0000,0xB9F80000,0xB9F80000,0xCE000000,0xB9F80000,0xB9F80000,0xCE000000,0xCE000000,0xB9F80000, -0xB9F80000,0xCE000000,0xCE000000,0xCE000000,0x3E00000,0x5B80000,0x19C0001,0x4DFC0000,0x8BFC0000,0xA5FC0000,0xAFFC0000,0xBFF40000,0x15FC0000,0x6FFC0000,0xA5FC0000,0xCE000000,0xA5FC0000,0x1F00001,0xEFFC0000,0xF7F80000,0xF8000000,0xEFFC0000,0xF7F80000,0xF8000000,0xF7F80000,0xF8000000,0xF8000000,0xEFFC0000,0xF7F80000,0xF8000000,0xF7F80000,0xF8000000, -0xF8000000,0xF7F80000,0xF8000000,0xF8000000,0xF8000000,0xEFFC0000,0xF7F80000,0xF8000000,0xF7F80000,0xF8000000,0xF8000000,0xF7F80000,0xF8000000,0xF8000000,0xF8000000,0xF7F80000,0xF8000000,0xF8000000,0xF8000000,0xF8000000,0xE3FC0000,0xA7FC0000,0xA7FC0000,0xF1FC0000,0xF5FC0000,0xF9F00000,0xF8000000,0xF8000000,0xEBFC0000,0xF3FC0000,0xF9E40000,0xF8000000, -0xF5FC0000,0x1781EAC,0xFF6814E3,0xFF580DBC,0xF9500BEB,0xFF5010EE,0xFF4007AB,0xFD380533,0xFF2C0746,0xF52803AE,0xE32C06E6,0xFF441329,0xFF280782,0xFF180417,0xFF0804CE,0xF900000E,0xE50803AE,0xF7040BE9,0xECF40411,0xDCF80531,0xD1000BE9,0x37FC1EA8,0xFF14107B,0xF9040BE8,0xFEE40A7E,0xFAD0038E,0xE2E006E6,0xFEAC0D6B,0xF88C028A,0xE29803A1,0xD0B40BE8,0x9DFC1EA8, -0xF8080BE8,0xE00006F8,0xCE000C58,0xBC001EA8,0xFF641706,0xFF6C1C06,0xF5781CD4,0xFF440F42,0xFF2807C3,0xFF1001BE,0xFD0C0046,0xF4FC0046,0xFF54168D,0xFF400E29,0xFEEC029D,0xE29803A1,0x83FC1EA8,0x1A00BEB,0xFF8C072A,0xFF7C036B,0xF978028A,0xFF8006ED,0xFF6401AA,0xFB600041,0xFF580373,0xF35000A6,0xE3540375,0x75FC0BE8,0xFF4C04E1,0xF9400288,0xFF200465,0xF7080009, -0xE3200374,0xBBFC0BE8,0xF8840288,0xE2700374,0xD0000BE8,0x75FC0BE8,0xFF4C04E1,0xF9400288,0xFF200465,0xF7080009,0xE3200374,0xBBFC0BE8,0xF8840288,0xE2700374,0xD0000BE8,0xBBFC0BE8,0xF8840288,0xE2700374,0xD0000BE8,0xD0000BE8,0xFF940998,0xF79C0B0D,0xF9A00AFE,0xFF780729,0xFF50043A,0xFF2C0113,0xF91C0002,0xF4EC0021,0xFF88099B,0xFF6806C8,0xFEE40291,0xE2700374, -0xA9FC0BE8,0x1500BEB,0x1500BEB,0x1500BEB,0x1500BEB,0xFF3C0513,0xFF3C0513,0xFF3C0513,0xEB2C0372,0xEB2C0372,0xCF2C0372,0xFF1803F3,0xFF1803F3,0xFF1803F3,0xF504000A,0xF504000A,0xD31000A5,0xDB000289,0xDB000289,0xCB000042,0xBD000289,0x3F40BE8,0x3F40BE8,0x3F40BE8,0xFEC8037D,0xFEC8037D,0xCEF40372,0xF4940289,0xF4940289,0xCEB40005,0xBCC80288,0x7FFC0BE8, -0x7FFC0BE8,0xCE400372,0xBC0C0288,0xA8000BE8,0xFF3C0843,0xFF4C0A3B,0x1500BEB,0xFF34051E,0xFF200235,0xFF10007A,0xFF080031,0xEB000001,0xFF3407CA,0xFF2404BA,0xF8F00289,0xCEB40005,0x5FF80BE8,0x178028A,0x178028A,0x178028A,0x178028A,0xFF5C002D,0xFF5C002D,0xFF5C002D,0xE1540001,0xE1540001,0xCF540001,0x37FC0288,0x37FC0288,0x37FC0288,0xEF140001,0xEF140001, -0xCF340000,0x9DFC0288,0x9DFC0288,0xCEC00000,0xBC000288,0x37FC0288,0x37FC0288,0x37FC0288,0xEF140001,0xEF140001,0xCF340000,0x9DFC0288,0x9DFC0288,0xCEC00000,0xBC000288,0x9DFC0288,0x9DFC0288,0xCEC00000,0xBC000288,0xBC000288,0xFB6C01C2,0xF3740202,0x178028A,0xFD580139,0xFF400080,0xFF200014,0xFB1C0000,0xEB000000,0xF56401E1,0xFF480122,0x83FC0288,0xCEC00000, -0x83FC0288,0x1C80372,0xFFB001E1,0xFFA00052,0xF99C0001,0xAFFC0372,0xFF8800E9,0xF9740000,0xD7FC0372,0xF8F00000,0xE2000374,0xAFFC0372,0xFF8800E9,0xF9740000,0xD7FC0372,0xF8F00000,0xE2000374,0xD7FC0372,0xF8F00000,0xE2000374,0xE2000374,0xAFFC0372,0xFF8800E9,0xF9740000,0xD7FC0372,0xF8F00000,0xE2000374,0xD7FC0372,0xF8F00000,0xE2000374,0xE2000374,0xD7FC0372, -0xF8F00000,0xE2000374,0xE2000374,0xE2000374,0xFFB40311,0xBE40372,0xFBC40322,0xFFAC0288,0xFF7C01E1,0xFF4800A9,0xF9240000,0xF8B40000,0xF1C00320,0xFFA00269,0xFF300000,0xE2000374,0xCDFC0372,0x12C0372,0x12C0372,0x12C0372,0x12C0372,0x12C0372,0x12C0372,0x12C0372,0x12C0372,0x12C0372,0x12C0372,0xFF040001,0xFF040001,0xFF040001,0xFF040001,0xFF040001, -0xFF040001,0xBF040001,0xBF040001,0xBF040001,0xAB000001,0x3BC0372,0x3BC0372,0x3BC0372,0x3BC0372,0x3BC0372,0x3BC0372,0xD0B40001,0xD0B40001,0xD0B40001,0xAAD80000,0x63FC0372,0x63FC0372,0x63FC0372,0xAA540000,0x94000374,0xFB240265,0x12C0372,0x12C0372,0xFD1C0152,0xFF1400A2,0xFF08002D,0xFF08002D,0xE7040001,0xFF100208,0xFB0C0139,0xD2F80001,0xD0B40001, -0x3BFC0372,}; -static const uint32_t g_etc1_to_bc7_m6_table152[] = { -0x1140000,0x1140000,0x1140000,0x1140000,0x1140000,0x1140000,0x1140000,0x1140000,0x1140000,0x1140000,0x1140000,0x1140000,0x1140000,0x1140000,0x1140000,0x1140000,0x1140000,0x1140000,0x1140000,0x1140000,0x3980000,0x3980000,0x3980000,0x3980000,0x3980000,0x3980000,0x3980000,0x3980000,0x3980000,0x3980000,0x51FC0000, -0x51FC0000,0x51FC0000,0x51FC0000,0x88000001,0x1140000,0x1140000,0x1140000,0x1140000,0x1140000,0x1140000,0x1140000,0x1140000,0xB240000,0xB240000,0xB240000,0x3980000,0x23FC0000,0x1680000,0x1680000,0x1680000,0x1680000,0x1680000,0x1680000,0x1680000,0x1680000,0x1680000,0x1680000,0x1BFC0000,0x1BFC0000,0x1BFC0000,0x1BFC0000,0x1BFC0000, -0x1BFC0000,0x91F80000,0x91F80000,0x91F80000,0xB2000001,0x1BFC0000,0x1BFC0000,0x1BFC0000,0x1BFC0000,0x1BFC0000,0x1BFC0000,0x91F80000,0x91F80000,0x91F80000,0xB2000001,0x91F80000,0x91F80000,0x91F80000,0xB2000001,0xB2000001,0x1800000,0x1680000,0x1680000,0x7A00000,0x1C40000,0x3E80000,0x3E80000,0x47FC0000,0x7A00000,0x1C40000,0x73FC0000,0x91F80000, -0x73FC0000,0x1B00000,0x1B00000,0x1B00000,0x1B00000,0x89FC0000,0x89FC0000,0x89FC0000,0xC5FC0000,0xC5FC0000,0xD6000001,0x89FC0000,0x89FC0000,0x89FC0000,0xC5FC0000,0xC5FC0000,0xD6000001,0xC5FC0000,0xC5FC0000,0xD6000001,0xD6000001,0x89FC0000,0x89FC0000,0x89FC0000,0xC5FC0000,0xC5FC0000,0xD6000001,0xC5FC0000,0xC5FC0000,0xD6000001,0xD6000001,0xC5FC0000, -0xC5FC0000,0xD6000001,0xD6000001,0xD6000001,0x5F40000,0x1CC0000,0x1B00000,0x6FFC0000,0xA1FC0000,0xB7FC0000,0xBFF80000,0xCBF80000,0x41FC0000,0x89FC0000,0xB7FC0000,0xD6000001,0xB7FC0000,0x1FC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000, -0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xF7FC0001,0xF7FC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFFF00000,0xFE000000, -0xFFFC0000,0x18C1D49,0xFF7414EC,0xFF6C0E58,0xFF640BE8,0xFF681121,0xFF5408B8,0xFF50057D,0xFF400775,0xFB3C0394,0xEB3C066D,0xFF5C130E,0xFF40088F,0xFF30046C,0xFF20053D,0xFF180009,0xEB1C033A,0xFF140AFE,0xF30C03CA,0xE5080492,0xD9140AFE,0x4FFC1D47,0xFF2C10D8,0xFF180BE8,0xFEFC0B01,0xFEE403A5,0xEAF4066B,0xFED80D6E,0xFEA00289,0xE8B00322,0xD8C80AFE,0xA9FC1D47, -0xFE280BE8,0xEA04066B,0xD6000B2E,0xC4001D47,0xFF7816B6,0xFD881AF5,0xFD881B85,0xFF5C0FB9,0xFF4808E2,0xFF2C02B1,0xFF240072,0xFB10002D,0xFF70165C,0xFF500E9A,0xFF0802CE,0xE8B00322,0x93FC1D47,0x1B00B01,0xFFA4072C,0xFF9403C9,0xFF8C0288,0xFF9806DD,0xFF7C0236,0xFF740055,0xFF700321,0xF7640084,0xEB6802F9,0x8DFC0AFE,0xFF64052B,0xFF540288,0xFF380471,0xFD200005, -0xEB3002FA,0xC7FC0AFE,0xFEA00288,0xEA8402F9,0xD8000AFE,0x8DFC0AFE,0xFF64052B,0xFF540288,0xFF380471,0xFD200005,0xEB3002FA,0xC7FC0AFE,0xFEA00288,0xEA8402F9,0xD8000AFE,0xC7FC0AFE,0xFEA00288,0xEA8402F9,0xD8000AFE,0xD8000AFE,0xFFA0091B,0xFFAC0A29,0xFFAC0A2C,0xFF94070A,0xFF680489,0xFF480194,0xFF340005,0xFCFC0011,0xFF98091E,0xFF8406A8,0xFF1002BB,0xEA8402F9, -0xB9FC0AFE,0x1640BE8,0x1640BE8,0x1640BE8,0x1640BE8,0xFF50057D,0xFF50057D,0xFF50057D,0xF3400374,0xF3400374,0xD73C0375,0xFF30046C,0xFF30046C,0xFF30046C,0xFF180009,0xFF180009,0xDB2000A6,0xE3140288,0xE3140288,0xD3100041,0xC514028A,0x15FC0BE8,0x15FC0BE8,0x15FC0BE8,0xFEE403A5,0xFEE403A5,0xD7080373,0xFCA80289,0xFCA80289,0xD8C80002,0xC6D8028A,0x8DFC0BE8, -0x8DFC0BE8,0xD6580373,0xC420028A,0xB0000BEB,0xFF58088D,0xF9600A7D,0x1640BE8,0xFF4405A2,0xFF3402D2,0xFF2400E9,0xFF240072,0xF3140002,0xFD4C0845,0xFF300545,0xFF08028E,0xD8C80002,0x6FFC0BE8,0x18C0288,0x18C0288,0x18C0288,0x18C0288,0xFF740055,0xFF740055,0xFF740055,0xE9680000,0xE9680000,0xD7680001,0x53FC0288,0x53FC0288,0x53FC0288,0xF7280001,0xF7280001, -0xD9440001,0xABF80288,0xABF80288,0xD6D80001,0xC400028A,0x53FC0288,0x53FC0288,0x53FC0288,0xF7280001,0xF7280001,0xD9440001,0xABF80288,0xABF80288,0xD6D80001,0xC400028A,0xABF80288,0xABF80288,0xD6D80001,0xC400028A,0xC400028A,0xF78001E1,0xFD880200,0x18C0288,0xFB70016D,0xFF5400AA,0xFF3C0034,0xFF340005,0xF5100000,0xFD7401E1,0xFF5C0145,0x95FC0288,0xD6D80001, -0x95FC0288,0x1D802F9,0xFFC401CD,0xFFB80089,0xFFB00000,0xC3FC02F9,0xFFA00112,0xFF880001,0xE1FC02F9,0xFF100000,0xEA0002F9,0xC3FC02F9,0xFFA00112,0xFF880001,0xE1FC02F9,0xFF100000,0xEA0002F9,0xE1FC02F9,0xFF100000,0xEA0002F9,0xEA0002F9,0xC3FC02F9,0xFFA00112,0xFF880001,0xE1FC02F9,0xFF100000,0xEA0002F9,0xE1FC02F9,0xFF100000,0xEA0002F9,0xEA0002F9,0xE1FC02F9, -0xFF100000,0xEA0002F9,0xEA0002F9,0xEA0002F9,0xFFD002AD,0x1F802F9,0xF3D402D4,0xFFC00244,0xFFA801CA,0xFF7000E8,0xFF3C0000,0xFED80000,0xF9D002AD,0xFDBC0244,0xFF580019,0xEA0002F9,0xDBFC02F9,0x13C0374,0x13C0374,0x13C0374,0x13C0374,0x13C0374,0x13C0374,0x13C0374,0x13C0374,0x13C0374,0x13C0374,0xFF180008,0xFF180008,0xFF180008,0xFF180008,0xFF180008, -0xFF180008,0xC9140000,0xC9140000,0xC9140000,0xB3140001,0x1D80372,0x1D80372,0x1D80372,0x1D80372,0x1D80372,0x1D80372,0xD8C80001,0xD8C80001,0xD8C80001,0xB2EC0001,0x71F80372,0x71F80372,0x71F80372,0xB26C0001,0x9E000372,0xF5380288,0x13C0374,0x13C0374,0xFF2C0171,0xFF2800C8,0xFF1C0050,0xFF1C0050,0xF1140000,0xFF200239,0xFF200152,0xDF080000,0xD8C80001, -0x4BFC0372,}; -static const uint32_t g_etc1_to_bc7_m6_table153[] = { -0x1240000,0x1240000,0x1240000,0x1240000,0x1240000,0x1240000,0x1240000,0x1240000,0x1240000,0x1240000,0x1240000,0x1240000,0x1240000,0x1240000,0x1240000,0x1240000,0x1240000,0x1240000,0x1240000,0x1240000,0x3B00000,0x3B00000,0x3B00000,0x3B00000,0x3B00000,0x3B00000,0x3B00000,0x3B00000,0x3B00000,0x3B00000,0x5DFC0000, -0x5DFC0000,0x5DFC0000,0x5DFC0000,0x90000001,0x1240000,0x1240000,0x1240000,0x1240000,0x1240000,0x1240000,0x1240000,0x1240000,0x1380000,0x1380000,0x1380000,0x3B00000,0x33FC0000,0x1780000,0x1780000,0x1780000,0x1780000,0x1780000,0x1780000,0x1780000,0x1780000,0x1780000,0x1780000,0x35FC0000,0x35FC0000,0x35FC0000,0x35FC0000,0x35FC0000, -0x35FC0000,0x9DF40000,0x9DF40000,0x9DF40000,0xBA000001,0x35FC0000,0x35FC0000,0x35FC0000,0x35FC0000,0x35FC0000,0x35FC0000,0x9DF40000,0x9DF40000,0x9DF40000,0xBA000001,0x9DF40000,0x9DF40000,0x9DF40000,0xBA000001,0xBA000001,0x1900000,0x1780000,0x1780000,0x3B40000,0x1D80000,0x5FC0000,0x5FC0000,0x5BFC0000,0x3B40000,0x1D80000,0x81FC0000,0x9DF40000, -0x81FC0000,0x1C00000,0x1C00000,0x1C00000,0x1C00000,0xA3FC0000,0xA3FC0000,0xA3FC0000,0xD1FC0000,0xD1FC0000,0xDE000001,0xA3FC0000,0xA3FC0000,0xA3FC0000,0xD1FC0000,0xD1FC0000,0xDE000001,0xD1FC0000,0xD1FC0000,0xDE000001,0xDE000001,0xA3FC0000,0xA3FC0000,0xA3FC0000,0xD1FC0000,0xD1FC0000,0xDE000001,0xD1FC0000,0xD1FC0000,0xDE000001,0xDE000001,0xD1FC0000, -0xD1FC0000,0xDE000001,0xDE000001,0xDE000001,0x27FC0000,0x7DC0000,0x1C00000,0x8DFC0000,0xB3FC0000,0xC5FC0000,0xCBFC0000,0xD5FC0000,0x69FC0000,0xA3FC0000,0xC5FC0000,0xDE000001,0xC5FC0000,0x1FC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000, -0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xF7FC0001,0xF7FC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFFF00000,0xFE000000, -0xFFFC0000,0x19819DD,0xFF801338,0xFF7C0DD1,0xFF740BE8,0xFF740F69,0xFF64088E,0xFF5C05E5,0xFF58068D,0xFD4C0378,0xEF4C0555,0xFF6810D2,0xFF4C0853,0xFF4404DA,0xFF380465,0xFF2C0029,0xF12C0235,0xFF2808DD,0xF51C032E,0xEB1C0319,0xDF2408CA,0x63FC19DB,0xFF380FF4,0xFF300BE8,0xFF1409E9,0xFEFC03ED,0xEF080553,0xFEF00B8E,0xFEC0029E,0xECC401FA,0xDED808CA,0xB3F819DB, -0xFE580BE8,0xEE280553,0xDC0008D2,0xCA0019DB,0xFF801459,0xFF8C17D1,0xFF8C1891,0xFF700E65,0xFF50086A,0xFF3C02F4,0xFF3400D5,0xFD240006,0xFF7813DA,0xFF5C0D8F,0xFF1C02E2,0xECC401FA,0x9FF819DB,0x1BC08C9,0xFFB005F4,0xFFA00371,0xFF9C0288,0xFFA40569,0xFF9001F8,0xFF840088,0xFF7C0221,0xFB780034,0xEF7801E1,0x9BFC08C9,0xFF7C0473,0xFF6C0288,0xFF580362,0xFF380001, -0xEF4401E2,0xCFF808C9,0xFED40288,0xEEA801E1,0xDE0008CA,0x9BFC08C9,0xFF7C0473,0xFF6C0288,0xFF580362,0xFF380001,0xEF4401E2,0xCFF808C9,0xFED40288,0xEEA801E1,0xDE0008CA,0xCFF808C9,0xFED40288,0xEEA801E1,0xDE0008CA,0xDE0008CA,0xFFB4074A,0xF5B80845,0xF7BC0849,0xFF9805B9,0xFF7C03C5,0xFF5C0171,0xFF500019,0xFF180001,0xFFA4076A,0xFF90057E,0xFF3002AE,0xEEA801E1, -0xC1FC08C9,0x1740BE8,0x1740BE8,0x1740BE8,0x1740BE8,0xFF5C05E5,0xFF5C05E5,0xFF5C05E5,0xFB500374,0xFB500374,0xDF4C0375,0xFF4404DA,0xFF4404DA,0xFF4404DA,0xFF2C0029,0xFF2C0029,0xE33000A6,0xEB240288,0xEB240288,0xDB200041,0xCD24028A,0x2FFC0BE8,0x2FFC0BE8,0x2FFC0BE8,0xFEFC03ED,0xFEFC03ED,0xDF180373,0xFEC0029E,0xFEC0029E,0xE0D80002,0xCEE8028A,0x99FC0BE8, -0x99FC0BE8,0xDE680373,0xCC30028A,0xB8000BEB,0xFF6808CE,0xFF6C0A8D,0x1740BE8,0xFF540625,0xFF440371,0xFF3C0164,0xFF3400D5,0xFB240002,0xFF58089A,0xFF5005B6,0xFF1C02B1,0xE0D80002,0x7FF80BE8,0x19C0288,0x19C0288,0x19C0288,0x19C0288,0xFF840088,0xFF840088,0xFF840088,0xF1780000,0xF1780000,0xDF780001,0x6BFC0288,0x6BFC0288,0x6BFC0288,0xFF380001,0xFF380001, -0xE1540001,0xB7F80288,0xB7F80288,0xDEE80001,0xCC00028A,0x6BFC0288,0x6BFC0288,0x6BFC0288,0xFF380001,0xFF380001,0xE1540001,0xB7F80288,0xB7F80288,0xDEE80001,0xCC00028A,0xB7F80288,0xB7F80288,0xDEE80001,0xCC00028A,0xCC00028A,0xFF9001E1,0xF5980221,0x19C0288,0xFD840188,0xFF7000DD,0xFF580064,0xFF500019,0xFD200000,0xFD880200,0xFF740171,0xA3FC0288,0xDEE80001, -0xA3FC0288,0x1E001E1,0xFFD00121,0xFFC80061,0xFFC00000,0xCFFC01E1,0xFFB800AA,0xFFA00001,0xE7FC01E1,0xFF400000,0xEE0001E1,0xCFFC01E1,0xFFB800AA,0xFFA00001,0xE7FC01E1,0xFF400000,0xEE0001E1,0xE7FC01E1,0xFF400000,0xEE0001E1,0xEE0001E1,0xCFFC01E1,0xFFB800AA,0xFFA00001,0xE7FC01E1,0xFF400000,0xEE0001E1,0xE7FC01E1,0xFF400000,0xEE0001E1,0xEE0001E1,0xE7FC01E1, -0xFF400000,0xEE0001E1,0xEE0001E1,0xEE0001E1,0xFFD001BD,0x7FC01E1,0xF7DC01C4,0xFFC80179,0xFFBC0122,0xFF900092,0xFF640000,0xFF140000,0xFDD801A5,0xFFC00164,0xFF780010,0xEE0001E1,0xE1FC01E1,0x14C0374,0x14C0374,0x14C0374,0x14C0374,0x14C0374,0x14C0374,0x14C0374,0x14C0374,0x14C0374,0x14C0374,0xFF28001D,0xFF28001D,0xFF28001D,0xFF28001D,0xFF28001D, -0xFF28001D,0xD1240000,0xD1240000,0xD1240000,0xBB240001,0x1F00372,0x1F00372,0x1F00372,0x1F00372,0x1F00372,0x1F00372,0xE0D80001,0xE0D80001,0xE0D80001,0xBAFC0001,0x7DF80372,0x7DF80372,0x7DF80372,0xBA7C0001,0xA6000372,0xFD480288,0x14C0374,0x14C0374,0xFF3C0190,0xFF3400E9,0xFF340071,0xFF340071,0xF9240000,0xFD380244,0xFF34016D,0xE7180000,0xE0D80001, -0x5BFC0372,}; -static const uint32_t g_etc1_to_bc7_m6_table154[] = { -0x1340000,0x1340000,0x1340000,0x1340000,0x1340000,0x1340000,0x1340000,0x1340000,0x1340000,0x1340000,0x1340000,0x1340000,0x1340000,0x1340000,0x1340000,0x1340000,0x1340000,0x1340000,0x1340000,0x1340000,0x1C80000,0x1C80000,0x1C80000,0x1C80000,0x1C80000,0x1C80000,0x1C80000,0x1C80000,0x1C80000,0x1C80000,0x69FC0000, -0x69FC0000,0x69FC0000,0x69FC0000,0x98000001,0x1340000,0x1340000,0x1340000,0x1340000,0x1340000,0x1340000,0x1340000,0x1340000,0x1480000,0x1480000,0x1480000,0x1C80000,0x41FC0000,0x1880000,0x1880000,0x1880000,0x1880000,0x1880000,0x1880000,0x1880000,0x1880000,0x1880000,0x1880000,0x4DFC0000,0x4DFC0000,0x4DFC0000,0x4DFC0000,0x4DFC0000, -0x4DFC0000,0xA7FC0000,0xA7FC0000,0xA7FC0000,0xC2000001,0x4DFC0000,0x4DFC0000,0x4DFC0000,0x4DFC0000,0x4DFC0000,0x4DFC0000,0xA7FC0000,0xA7FC0000,0xA7FC0000,0xC2000001,0xA7FC0000,0xA7FC0000,0xA7FC0000,0xC2000001,0xC2000001,0x9A00000,0x1880000,0x1880000,0x1C80000,0x1EC0000,0x23FC0000,0x23FC0000,0x6FFC0000,0x1C80000,0x1EC0000,0x91FC0000,0xA7FC0000, -0x91FC0000,0x1D00000,0x1D00000,0x1D00000,0x1D00000,0xBBFC0000,0xBBFC0000,0xBBFC0000,0xDDFC0000,0xDDFC0000,0xE6000001,0xBBFC0000,0xBBFC0000,0xBBFC0000,0xDDFC0000,0xDDFC0000,0xE6000001,0xDDFC0000,0xDDFC0000,0xE6000001,0xE6000001,0xBBFC0000,0xBBFC0000,0xBBFC0000,0xDDFC0000,0xDDFC0000,0xE6000001,0xDDFC0000,0xDDFC0000,0xE6000001,0xE6000001,0xDDFC0000, -0xDDFC0000,0xE6000001,0xE6000001,0xE6000001,0x5FFC0000,0xFEC0000,0x1D00000,0xABFC0000,0xC7FC0000,0xD5FC0000,0xD9FC0000,0xE1F40000,0x91FC0000,0xBBFC0000,0xD5FC0000,0xE6000001,0xD5FC0000,0x1FC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000, -0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xF7FC0001,0xF7FC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFFF00000,0xFE000000, -0xFFFC0000,0x1A416D1,0xFF981198,0xFF880D5D,0xFF840BE8,0xFF800E01,0xFF740886,0xFF740675,0xFF6405F9,0xFF60037D,0xF35C047D,0xFF740EFE,0xFF64082B,0xFF5C056A,0xFF4C03FE,0xFF40007D,0xF53C016E,0xFF38072E,0xF93002C2,0xEF3001F9,0xE33406EA,0x75FC16CF,0xFF580F0C,0xFF480BE8,0xFF2C0911,0xFF20044D,0xF31C047B,0xFF080A0E,0xFEE402DE,0xF2DC0112,0xE2EC06EA,0xBBFC16CF, -0xFE880BE8,0xF248047B,0xE20806EA,0xD00016CF,0xFF8C1241,0xF9A0153D,0xF9A015C4,0xFF800D27,0xFF68080D,0xFF54034B,0xFF4C015D,0xFF38000D,0xFF9011EA,0xFF740C8A,0xFF340318,0xF2DC0112,0xA9FC16CF,0x1C806E9,0xFFBC04EC,0xFFAC0331,0xFFAC0288,0xFFB0043D,0xFFA001C2,0xFF9800B9,0xFF940169,0xFD880008,0xF3880109,0xAFFC06E9,0xFF9403DB,0xFF840288,0xFF70028A,0xFF580019, -0xF358010A,0xD7FC06E9,0xFF040288,0xF2C80109,0xE20006EA,0xAFFC06E9,0xFF9403DB,0xFF840288,0xFF70028A,0xFF580019,0xF358010A,0xD7FC06E9,0xFF040288,0xF2C80109,0xE20006EA,0xD7FC06E9,0xFF040288,0xF2C80109,0xE20006EA,0xE20006EA,0xFFBC05CD,0xFBC4066D,0xFBC40681,0xFFB004A6,0xFF900329,0xFF7C0153,0xFF680041,0xFF380009,0xFFB405D6,0xFFA40482,0xFF5002A1,0xF2C80109, -0xCDFC06E9,0x1840BE8,0x1840BE8,0x1840BE8,0x1840BE8,0xFF740675,0xFF740675,0xFF740675,0xFF60037D,0xFF60037D,0xE75C0375,0xFF5C056A,0xFF5C056A,0xFF5C056A,0xFF40007D,0xFF40007D,0xEB4000A6,0xF3340288,0xF3340288,0xE3300041,0xD534028A,0x47FC0BE8,0x47FC0BE8,0x47FC0BE8,0xFF20044D,0xFF20044D,0xE7280373,0xFEE402DE,0xFEE402DE,0xE8E80002,0xD6F8028A,0xA5F80BE8, -0xA5F80BE8,0xE6780373,0xD440028A,0xC0000BEB,0xFF740934,0xF9800AC4,0x1840BE8,0xFF6806BD,0xFF580419,0xFF4C021D,0xFF4C015D,0xFF38000D,0xFD70090C,0xFF5C0656,0xFF3402F4,0xE8E80002,0x8DFC0BE8,0x1AC0288,0x1AC0288,0x1AC0288,0x1AC0288,0xFF9800B9,0xFF9800B9,0xFF9800B9,0xF9880000,0xF9880000,0xE7880001,0x83FC0288,0x83FC0288,0x83FC0288,0xFF580019,0xFF580019, -0xE9640001,0xC3F80288,0xC3F80288,0xE6F80001,0xD400028A,0x83FC0288,0x83FC0288,0x83FC0288,0xFF580019,0xFF580019,0xE9640001,0xC3F80288,0xC3F80288,0xE6F80001,0xD400028A,0xC3F80288,0xC3F80288,0xE6F80001,0xD400028A,0xD400028A,0xFFA00202,0xFDA80221,0x1AC0288,0xFF9801A5,0xFF84010D,0xFF740091,0xFF680041,0xFF380009,0xFF940212,0xFB9001A5,0xB3FC0288,0xE6F80001, -0xB3FC0288,0x1E80109,0xFFDC009D,0xFFD80034,0xFFD00000,0xDBFC0109,0xFFCC0064,0xFFB80001,0xEDFC0109,0xFF700000,0xF2000109,0xDBFC0109,0xFFCC0064,0xFFB80001,0xEDFC0109,0xFF700000,0xF2000109,0xEDFC0109,0xFF700000,0xF2000109,0xF2000109,0xDBFC0109,0xFFCC0064,0xFFB80001,0xEDFC0109,0xFF700000,0xF2000109,0xEDFC0109,0xFF700000,0xF2000109,0xF2000109,0xEDFC0109, -0xFF700000,0xF2000109,0xF2000109,0xF2000109,0xFBE400F2,0x47FC0109,0xFBE400F4,0xFFD800CA,0xFFD000A2,0xFFAC0050,0xFF8C0000,0xFF500000,0xFFDC00E1,0xFFD800C8,0xFF9C0009,0xF2000109,0xE9FC0109,0x15C0374,0x15C0374,0x15C0374,0x15C0374,0x15C0374,0x15C0374,0x15C0374,0x15C0374,0x15C0374,0x15C0374,0xFF3C0034,0xFF3C0034,0xFF3C0034,0xFF3C0034,0xFF3C0034, -0xFF3C0034,0xD9340000,0xD9340000,0xD9340000,0xC3340001,0xDFC0372,0xDFC0372,0xDFC0372,0xDFC0372,0xDFC0372,0xDFC0372,0xE8E80001,0xE8E80001,0xE8E80001,0xC30C0001,0x89F80372,0x89F80372,0x89F80372,0xC28C0001,0xAE000372,0xF55802AD,0x15C0374,0x15C0374,0xFF4C01B1,0xFD4C0120,0xFF440091,0xFF440091,0xFF340001,0xF94C0265,0xFB4801A5,0xEF280000,0xE8E80001, -0x69FC0372,}; -static const uint32_t g_etc1_to_bc7_m6_table155[] = { -0x1440000,0x1440000,0x1440000,0x1440000,0x1440000,0x1440000,0x1440000,0x1440000,0x1440000,0x1440000,0x1440000,0x1440000,0x1440000,0x1440000,0x1440000,0x1440000,0x1440000,0x1440000,0x1440000,0x1440000,0x1E00000,0x1E00000,0x1E00000,0x1E00000,0x1E00000,0x1E00000,0x1E00000,0x1E00000,0x1E00000,0x1E00000,0x75FC0000, -0x75FC0000,0x75FC0000,0x75FC0000,0xA0000001,0x1440000,0x1440000,0x1440000,0x1440000,0x1440000,0x1440000,0x1440000,0x1440000,0x5580000,0x5580000,0x5580000,0x1E00000,0x51FC0000,0x1980000,0x1980000,0x1980000,0x1980000,0x1980000,0x1980000,0x1980000,0x1980000,0x1980000,0x1980000,0x65FC0000,0x65FC0000,0x65FC0000,0x65FC0000,0x65FC0000, -0x65FC0000,0xB3FC0000,0xB3FC0000,0xB3FC0000,0xCA000001,0x65FC0000,0x65FC0000,0x65FC0000,0x65FC0000,0x65FC0000,0x65FC0000,0xB3FC0000,0xB3FC0000,0xB3FC0000,0xCA000001,0xB3FC0000,0xB3FC0000,0xB3FC0000,0xCA000001,0xCA000001,0x1B40000,0x1980000,0x1980000,0x5D80000,0x7FC0000,0x41FC0000,0x41FC0000,0x83FC0000,0x5D80000,0x7FC0000,0x9FFC0000,0xB3FC0000, -0x9FFC0000,0x1E00000,0x1E00000,0x1E00000,0x1E00000,0xD3FC0000,0xD3FC0000,0xD3FC0000,0xE9FC0000,0xE9FC0000,0xEE000001,0xD3FC0000,0xD3FC0000,0xD3FC0000,0xE9FC0000,0xE9FC0000,0xEE000001,0xE9FC0000,0xE9FC0000,0xEE000001,0xEE000001,0xD3FC0000,0xD3FC0000,0xD3FC0000,0xE9FC0000,0xE9FC0000,0xEE000001,0xE9FC0000,0xE9FC0000,0xEE000001,0xEE000001,0xE9FC0000, -0xE9FC0000,0xEE000001,0xEE000001,0xEE000001,0x97FC0000,0x17FC0000,0x1E00000,0xC9FC0000,0xDBFC0000,0xE3FC0000,0xE7F80000,0xEBF80000,0xB7FC0000,0xD3FC0000,0xE3FC0000,0xEE000001,0xE3FC0000,0x1FC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000, -0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xF7FC0001,0xF7FC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFFF00000,0xFE000000, -0xFFFC0000,0x1B01425,0xFFA4102C,0xFF940D09,0xFF940BE8,0xFF980CD1,0xFF840898,0xFF8006ED,0xFF7C05B1,0xFF7003B4,0xF76C03E5,0xFF8C0D6E,0xFF74082B,0xFF68060E,0xFF6403D6,0xFF54010D,0xF95000EA,0xFF4C0601,0xFD44028E,0xF53C011D,0xE944055E,0x87FC1423,0xFF700E44,0xFF600BE8,0xFF4C089F,0xFF3804C5,0xF73003E3,0xFF2008EE,0xFEFC034E,0xF6F00072,0xE900055E,0xC5F81423, -0xFEB80BE8,0xF66803E3,0xE820055E,0xD6001423,0xFFA0103F,0xFFAC12A9,0xFFAC133C,0xFF940C5A,0xFF7807F2,0xFF6803C5,0xFF5C0214,0xFF48005E,0xFF981017,0xFF800B9F,0xFF50039A,0xF6F00072,0xB5FC1423,0x1D00561,0xFFC40411,0xFFC002F4,0xFFBC0288,0xFFBC0359,0xFFB001B2,0xFFA80104,0xFFA000F1,0xFF980004,0xF7980071,0xBDFC055E,0xFFAC0363,0xFF9C0288,0xFF8801F2,0xFF700049, -0xF76C0072,0xDFF8055E,0xFF340288,0xF6E80071,0xE800055E,0xBDFC055E,0xFFAC0363,0xFF9C0288,0xFF8801F2,0xFF700049,0xF76C0072,0xDFF8055E,0xFF340288,0xF6E80071,0xE800055E,0xDFF8055E,0xFF340288,0xF6E80071,0xE800055E,0xE800055E,0xFDCC049A,0xFFCC04F5,0xFFCC0519,0xFFC003C4,0xFFA402B5,0xFF90016B,0xFF7C0082,0xFF640032,0xFFC4049D,0xFFB003C2,0xFF700298,0xF6E80071, -0xD7FC055E,0x1940BE8,0x1940BE8,0x1940BE8,0x1940BE8,0xFF8006ED,0xFF8006ED,0xFF8006ED,0xFF7003B4,0xFF7003B4,0xEF6C0375,0xFF68060E,0xFF68060E,0xFF68060E,0xFF54010D,0xFF54010D,0xF35000A6,0xFB440288,0xFB440288,0xEB400041,0xDD44028A,0x5FFC0BE8,0x5FFC0BE8,0x5FFC0BE8,0xFF3804C5,0xFF3804C5,0xEF380373,0xFEFC034E,0xFEFC034E,0xF0F80002,0xDF08028A,0xB1F80BE8, -0xB1F80BE8,0xEE880373,0xDC50028A,0xC8000BEB,0xFF84097D,0xFF8C0AD8,0x1940BE8,0xFF80074E,0xFF6C04D1,0xFF6002D9,0xFF5C0214,0xFF48005E,0xFF800956,0xFF7406E1,0xFF500381,0xF0F80002,0x9DF80BE8,0x1BC0288,0x1BC0288,0x1BC0288,0x1BC0288,0xFFA80104,0xFFA80104,0xFFA80104,0xFF980004,0xFF980004,0xEF980001,0x9BFC0288,0x9BFC0288,0x9BFC0288,0xFF700049,0xFF700049, -0xF1740001,0xCFF80288,0xCFF80288,0xEF080001,0xDC00028A,0x9BFC0288,0x9BFC0288,0x9BFC0288,0xFF700049,0xFF700049,0xF1740001,0xCFF80288,0xCFF80288,0xEF080001,0xDC00028A,0xCFF80288,0xCFF80288,0xEF080001,0xDC00028A,0xDC00028A,0xFBB40221,0xF5B80244,0x1BC0288,0xFFA401D4,0xFF980145,0xFF8C00E1,0xFF7C0082,0xFF640032,0xFDB00221,0xFFA401C2,0xC1FC0288,0xEF080001, -0xC1FC0288,0x1F00071,0xFFE80041,0xFFE40014,0xFFE00000,0xE9FC0071,0xFFD80028,0xFFD00000,0xF3FC0071,0xFFA00000,0xF6000071,0xE9FC0071,0xFFD80028,0xFFD00000,0xF3FC0071,0xFFA00000,0xF6000071,0xF3FC0071,0xFFA00000,0xF6000071,0xF6000071,0xE9FC0071,0xFFD80028,0xFFD00000,0xF3FC0071,0xFFA00000,0xF6000071,0xF3FC0071,0xFFA00000,0xF6000071,0xF6000071,0xF3FC0071, -0xFFA00000,0xF6000071,0xF6000071,0xF6000071,0xFFEC0062,0x87FC0071,0xFFEC0064,0xFDE80055,0xFDE40048,0xFFC8001D,0xFFB40000,0xFF8C0000,0xFDEC0062,0xFFE40055,0xFFBC0004,0xF6000071,0xF1FC0071,0x16C0374,0x16C0374,0x16C0374,0x16C0374,0x16C0374,0x16C0374,0x16C0374,0x16C0374,0x16C0374,0x16C0374,0xFF500055,0xFF500055,0xFF500055,0xFF500055,0xFF500055, -0xFF500055,0xE1440000,0xE1440000,0xE1440000,0xCB440001,0x25FC0372,0x25FC0372,0x25FC0372,0x25FC0372,0x25FC0372,0x25FC0372,0xF0F80001,0xF0F80001,0xF0F80001,0xCB1C0001,0x95F80372,0x95F80372,0x95F80372,0xCA9C0001,0xB6000372,0xFD6802AD,0x16C0374,0x16C0374,0xFD6401E1,0xFF580145,0xFF5400B9,0xFF5400B9,0xFF48000D,0xFF580271,0xFF5001BD,0xF7380000,0xF0F80001, -0x79FC0372,}; -static const uint32_t g_etc1_to_bc7_m6_table156[] = { -0x1540001,0x1540001,0x1540001,0x1540001,0x1540001,0x1540001,0x1540001,0x1540001,0x1540001,0x1540001,0x1540001,0x1540001,0x1540001,0x1540001,0x1540001,0x1540001,0x1540001,0x1540001,0x1540001,0x1540001,0x1FC0000,0x1FC0000,0x1FC0000,0x1FC0000,0x1FC0000,0x1FC0000,0x1FC0000,0x1FC0000,0x1FC0000,0x1FC0000,0x83F80000, -0x83F80000,0x83F80000,0x83F80000,0xAA000000,0x1540001,0x1540001,0x1540001,0x1540001,0x1540001,0x1540001,0x1540001,0x1540001,0x16C0000,0x16C0000,0x16C0000,0x1FC0000,0x61FC0000,0x1A80001,0x1A80001,0x1A80001,0x1A80001,0x1A80001,0x1A80001,0x1A80001,0x1A80001,0x1A80001,0x1A80001,0x81FC0000,0x81FC0000,0x81FC0000,0x81FC0000,0x81FC0000, -0x81FC0000,0xC1FC0000,0xC1FC0000,0xC1FC0000,0xD4000000,0x81FC0000,0x81FC0000,0x81FC0000,0x81FC0000,0x81FC0000,0x81FC0000,0xC1FC0000,0xC1FC0000,0xC1FC0000,0xD4000000,0xC1FC0000,0xC1FC0000,0xC1FC0000,0xD4000000,0xD4000000,0xBC40000,0x1A80001,0x1A80001,0x1F00000,0x33FC0000,0x63FC0000,0x63FC0000,0x99FC0000,0x1F00000,0x33FC0000,0xB1FC0000,0xC1FC0000, -0xB1FC0000,0x1F00001,0x1F00001,0x1F00001,0x1F00001,0xEFFC0000,0xEFFC0000,0xEFFC0000,0xF7F80000,0xF7F80000,0xF8000000,0xEFFC0000,0xEFFC0000,0xEFFC0000,0xF7F80000,0xF7F80000,0xF8000000,0xF7F80000,0xF7F80000,0xF8000000,0xF8000000,0xEFFC0000,0xEFFC0000,0xEFFC0000,0xF7F80000,0xF7F80000,0xF8000000,0xF7F80000,0xF7F80000,0xF8000000,0xF8000000,0xF7F80000, -0xF7F80000,0xF8000000,0xF8000000,0xF8000000,0xD7FC0000,0xA7FC0000,0x1F00001,0xEBFC0000,0xF1FC0000,0xF5FC0000,0xF5FC0000,0xF7FC0000,0xE3FC0000,0xEFFC0000,0xF5FC0000,0xF8000000,0xF5FC0000,0x1FC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000, -0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xF7FC0001,0xF7FC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFFF00000,0xFE000000, -0xFFFC0000,0x1BC1194,0xFFB00ED7,0xFFAC0CAC,0xFFA40BEB,0xFFA40BBE,0xFF9808C3,0xFF9807A2,0xFF8805A4,0xFF88043B,0xFB800386,0xFF980C15,0xFF8C0852,0xFF8006C9,0xFF7003FF,0xFF6C01EE,0xFD6400A9,0xFF64052C,0xFF58029B,0xF950007E,0xEF540409,0x9BFC1194,0xFF880D81,0xFF7C0BE8,0xFF64083E,0xFF58058D,0xFD440386,0xFF380829,0xFF2003F9,0xFB080015,0xEF140408,0xCFF81194, -0xFEF00BE8,0xFA8C0386,0xEE400408,0xDC001198,0xFFB40EBF,0xF5B810AC,0xF7BC1114,0xFF980B8A,0xFF8C0803,0xFF7C0476,0xFF78030B,0xFF640105,0xFDB00E9B,0xFF980AFA,0xFF640451,0xFB080015,0xC1FC1194,0x1DC040B,0xFFD4035E,0xFFCC02CA,0xFFCC028A,0xFFD0029B,0xFFC401B6,0xFFBC0151,0xFFB800C3,0xFFAC0032,0xFBA80015,0xCFFC0408,0xFFC002FE,0xFFB80288,0xFFA00196,0xFF94009D, -0xFB840014,0xE7FC0408,0xFF6C0288,0xFB0C0014,0xEE000408,0xCFFC0408,0xFFC002FE,0xFFB80288,0xFFA00196,0xFF94009D,0xFB840014,0xE7FC0408,0xFF6C0288,0xFB0C0014,0xEE000408,0xE7FC0408,0xFF6C0288,0xFB0C0014,0xEE000408,0xEE000408,0xFFD80385,0xF7DC03D5,0xF7DC03EA,0xFDD00321,0xFFC0025A,0xFFA80179,0xFFA000DA,0xFF7C0082,0xFFD00395,0xFFC802E4,0xFF980291,0xFB0C0014, -0xE1FC0408,0x1A40BEB,0x1A40BEB,0x1A40BEB,0x1A40BEB,0xFF9807A2,0xFF9807A2,0xFF9807A2,0xFF88043B,0xFF88043B,0xF9800372,0xFF8006C9,0xFF8006C9,0xFF8006C9,0xFF6C01EE,0xFF6C01EE,0xFD6400A5,0xFF58029B,0xFF58029B,0xF5540042,0xE7540289,0x7BFC0BE8,0x7BFC0BE8,0x7BFC0BE8,0xFF58058D,0xFF58058D,0xF9480372,0xFF2003F9,0xFF2003F9,0xF9080005,0xE71C0288,0xBFF80BE8, -0xBFF80BE8,0xF8940372,0xE6600288,0xD2000BE8,0xFFA009E1,0xFBA40B0A,0x1A40BEB,0xFF9007E6,0xFF8005BA,0xFF7803C3,0xFF78030B,0xFF640105,0xFF9409A4,0xFF8007C1,0xFF640438,0xF9080005,0xADFC0BE8,0x1CC028A,0x1CC028A,0x1CC028A,0x1CC028A,0xFFBC0151,0xFFBC0151,0xFFBC0151,0xFFAC0032,0xFFAC0032,0xF9A80001,0xB7FC0288,0xB7FC0288,0xB7FC0288,0xFF94009D,0xFF94009D, -0xF9880000,0xDDF40288,0xDDF40288,0xF9140000,0xE6000288,0xB7FC0288,0xB7FC0288,0xB7FC0288,0xFF94009D,0xFF94009D,0xF9880000,0xDDF40288,0xDDF40288,0xF9140000,0xE6000288,0xDDF40288,0xDDF40288,0xF9140000,0xE6000288,0xE6000288,0xFDC80242,0xFFCC0242,0x1CC028A,0xFDC00202,0xFFAC0195,0xFFA80128,0xFFA000DA,0xFF7C0082,0xFFC40242,0xFBC00200,0xD3FC0288,0xF9140000, -0xD3FC0288,0x1F80012,0xFFF4000A,0xFFF00005,0xFFF00001,0xF7FC0012,0xFFF00005,0xFFEC0000,0xFBFC0012,0xFFD80000,0xFA000014,0xF7FC0012,0xFFF00005,0xFFEC0000,0xFBFC0012,0xFFD80000,0xFA000014,0xFBFC0012,0xFFD80000,0xFA000014,0xFA000014,0xF7FC0012,0xFFF00005,0xFFEC0000,0xFBFC0012,0xFFD80000,0xFA000014,0xFBFC0012,0xFFD80000,0xFA000014,0xFA000014,0xFBFC0012, -0xFFD80000,0xFA000014,0xFA000014,0xFA000014,0xFFF8000D,0xD7FC0012,0xF5F80012,0xFFF4000D,0xFDF4000D,0xFFE80005,0xFFE00000,0xFFD00000,0xF5FC0012,0xFFF00011,0xFFE40001,0xFA000014,0xFBFC0012,0x1800372,0x1800372,0x1800372,0x1800372,0x1800372,0x1800372,0x1800372,0x1800372,0x1800372,0x1800372,0xFF680091,0xFF680091,0xFF680091,0xFF680091,0xFF680091, -0xFF680091,0xE9580001,0xE9580001,0xE9580001,0xD5540001,0x41FC0372,0x41FC0372,0x41FC0372,0x41FC0372,0x41FC0372,0x41FC0372,0xFB080001,0xFB080001,0xFB080001,0xD52C0000,0xA1FC0372,0xA1FC0372,0xA1FC0372,0xD4A80000,0xBE000374,0xF77C02D2,0x1800372,0x1800372,0xFF740202,0xFF6C0179,0xFF6800FA,0xFF6800FA,0xFF5C002D,0xFD70028A,0xFF6401F9,0xFD4C0001,0xFB080001, -0x89FC0372,}; -static const uint32_t g_etc1_to_bc7_m6_table157[] = { -0x1640001,0x1640001,0x1640001,0x1640001,0x1640001,0x1640001,0x1640001,0x1640001,0x1640001,0x1640001,0x1640001,0x1640001,0x1640001,0x1640001,0x1640001,0x1640001,0x1640001,0x1640001,0x1640001,0x1640001,0x19FC0000,0x19FC0000,0x19FC0000,0x19FC0000,0x19FC0000,0x19FC0000,0x19FC0000,0x19FC0000,0x19FC0000,0x19FC0000,0x8FF80000, -0x8FF80000,0x8FF80000,0x8FF80000,0xB2000000,0x1640001,0x1640001,0x1640001,0x1640001,0x1640001,0x1640001,0x1640001,0x1640001,0x77C0000,0x77C0000,0x77C0000,0x19FC0000,0x71FC0000,0x1B80001,0x1B80001,0x1B80001,0x1B80001,0x1B80001,0x1B80001,0x1B80001,0x1B80001,0x1B80001,0x1B80001,0x99FC0000,0x99FC0000,0x99FC0000,0x99FC0000,0x99FC0000, -0x99FC0000,0xCDFC0000,0xCDFC0000,0xCDFC0000,0xDC000000,0x99FC0000,0x99FC0000,0x99FC0000,0x99FC0000,0x99FC0000,0x99FC0000,0xCDFC0000,0xCDFC0000,0xCDFC0000,0xDC000000,0xCDFC0000,0xCDFC0000,0xCDFC0000,0xDC000000,0xDC000000,0x1D80000,0x1B80001,0x1B80001,0x11FC0000,0x5BFC0000,0x81FC0000,0x81FC0000,0xADFC0000,0x11FC0000,0x5BFC0000,0xBFFC0000,0xCDFC0000, -0xBFFC0000,0x1FC0001,0x1FC0001,0x1FC0001,0x1FC0001,0xFDFC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000, -0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFBFC0001,0xF7FC0001,0x1FC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFFFC0000,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0x1FC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000, -0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xF7FC0001,0xF7FC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFFF00000,0xFE000000, -0xFFFC0000,0x1C80F44,0xFFBC0D5F,0xFFB80BD4,0xFFB40B53,0xFFB00ABA,0xFFA4089F,0xFFA407BE,0xFFA005B4,0xFF94049B,0xFF900372,0xFFA40AD9,0xFF980816,0xFF9806F5,0xFF880417,0xFF7C0296,0xFF7400C1,0xFF7C0494,0xFF7002A3,0xFD64003A,0xF3640305,0xABFC0F44,0xFF940C75,0xFF900B53,0xFF7C07D6,0xFF7005E5,0xFF580374,0xFF580773,0xFF380455,0xFF200005,0xF3280304,0xD7F80F44, -0xFF1C0B53,0xFEAC0372,0xF2600304,0xE2000F44,0xFFBC0CF6,0xFBC40E6C,0xFBC40EDC,0xFFAC0A8E,0xFF9C07CB,0xFF9004FA,0xFF8803B2,0xFF7401A6,0xFFB40CB7,0xFFA40A4C,0xFF780483,0xFF200005,0xCBFC0F44,0x1E80303,0xFFE002AE,0xFFE00263,0xFFDC0242,0xFFDC0213,0xFFD0019A,0xFFD0015A,0xFFC000D1,0xFFC0006D,0xFFB80001,0xDFFC0303,0xFFCC0282,0xFFCC0242,0xFFB80156,0xFFAC00CD, -0xFF980000,0xEFFC0303,0xFF940242,0xFF2C0000,0xF2000304,0xDFFC0303,0xFFCC0282,0xFFCC0242,0xFFB80156,0xFFAC00CD,0xFF980000,0xEFFC0303,0xFF940242,0xFF2C0000,0xF2000304,0xEFFC0303,0xFF940242,0xFF2C0000,0xF2000304,0xF2000304,0xFFE402C1,0xFBE402D9,0xFDE802EE,0xFFDC025D,0xFFD40202,0xFFB80171,0xFFB80104,0xFFA000B4,0xFFDC02BD,0xFFDC025A,0xFFB40246,0xFF2C0000, -0xEBFC0303,0x1B40B53,0x1B40B53,0x1B40B53,0x1B40B53,0xFFA407BE,0xFFA407BE,0xFFA407BE,0xFF94049B,0xFF94049B,0xFF900372,0xFF9806F5,0xFF9806F5,0xFF9806F5,0xFF7C0296,0xFF7C0296,0xFF7400C1,0xFF7002A3,0xFF7002A3,0xFB600032,0xED640245,0x8FFC0B53,0x8FFC0B53,0x8FFC0B53,0xFF7005E5,0xFF7005E5,0xFF580374,0xFF380455,0xFF380455,0xFF200005,0xED2C0244,0xC9F80B53, -0xC9F80B53,0xFEAC0372,0xEC780244,0xDA000B54,0xFFAC09A2,0xFFAC0A9E,0x1B40B53,0xFFA4081B,0xFF940612,0xFF900481,0xFF8803B2,0xFF7401A6,0xFFA0097D,0xFF9807C5,0xFF780473,0xFF200005,0xBBFC0B53,0x1DC0242,0x1DC0242,0x1DC0242,0x1DC0242,0xFFD0015A,0xFFD0015A,0xFFD0015A,0xFFC0006D,0xFFC0006D,0xFFB80001,0xCDFC0242,0xCDFC0242,0xCDFC0242,0xFFAC00CD,0xFFAC00CD, -0xFF980000,0xE7F80242,0xE7F80242,0xFF2C0000,0xEC000244,0xCDFC0242,0xCDFC0242,0xCDFC0242,0xFFAC00CD,0xFFAC00CD,0xFF980000,0xE7F80242,0xE7F80242,0xFF2C0000,0xEC000244,0xE7F80242,0xE7F80242,0xFF2C0000,0xEC000244,0xEC000244,0xFFD80200,0xF7DC0221,0x1DC0242,0xFBD401E1,0xFFC80190,0xFFB80140,0xFFB80104,0xFFA000B4,0xFFD00208,0xFFC801D4,0xDFFC0242,0xFF2C0000, -0xDFFC0242,0x1FC0002,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000, -0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0002,0xF7FC0002,0xF7FC0002,0xFDFC0002,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFFFC0000,0xFDFC0002,0xFDFC0002,0xFFFC0000,0xFE000000,0xFFFC0000,0x1900372,0x1900372,0x1900372,0x1900372,0x1900372,0x1900372,0x1900372,0x1900372,0x1900372,0x1900372,0xFF7400C1,0xFF7400C1,0xFF7400C1,0xFF7400C1,0xFF7400C1, -0xFF7400C1,0xF1680001,0xF1680001,0xF1680001,0xDD640001,0x59FC0372,0x59FC0372,0x59FC0372,0x59FC0372,0x59FC0372,0x59FC0372,0xFF200005,0xFF200005,0xFF200005,0xDD3C0000,0xADFC0372,0xADFC0372,0xADFC0372,0xDCB80000,0xC6000374,0xFF8C02D2,0x1900372,0x1900372,0xFF840225,0xFF8001A9,0xFF780132,0xFF780132,0xFF700059,0xF98402AD,0xFF780212,0xFF60000D,0xFF200005, -0x99FC0372,}; -static const uint32_t g_etc1_to_bc7_m6_table158[] = { -0x1740001,0x1740001,0x1740001,0x1740001,0x1740001,0x1740001,0x1740001,0x1740001,0x1740001,0x1740001,0x1740001,0x1740001,0x1740001,0x1740001,0x1740001,0x1740001,0x1740001,0x1740001,0x1740001,0x1740001,0x31FC0000,0x31FC0000,0x31FC0000,0x31FC0000,0x31FC0000,0x31FC0000,0x31FC0000,0x31FC0000,0x31FC0000,0x31FC0000,0x9BF80000, -0x9BF80000,0x9BF80000,0x9BF80000,0xBA000000,0x1740001,0x1740001,0x1740001,0x1740001,0x1740001,0x1740001,0x1740001,0x1740001,0xF8C0000,0xF8C0000,0xF8C0000,0x31FC0000,0x7FFC0000,0x1C80001,0x1C80001,0x1C80001,0x1C80001,0x1C80001,0x1C80001,0x1C80001,0x1C80001,0x1C80001,0x1C80001,0xB1FC0000,0xB1FC0000,0xB1FC0000,0xB1FC0000,0xB1FC0000, -0xB1FC0000,0xD9FC0000,0xD9FC0000,0xD9FC0000,0xE4000000,0xB1FC0000,0xB1FC0000,0xB1FC0000,0xB1FC0000,0xB1FC0000,0xB1FC0000,0xD9FC0000,0xD9FC0000,0xD9FC0000,0xE4000000,0xD9FC0000,0xD9FC0000,0xD9FC0000,0xE4000000,0xE4000000,0x1E80000,0x1C80001,0x1C80001,0x49FC0000,0x81FC0000,0x9FFC0000,0x9FFC0000,0xC1FC0000,0x49FC0000,0x81FC0000,0xCFFC0000,0xD9FC0000, -0xCFFC0000,0x1FC0001,0x1FC0001,0x1FC0001,0x1FC0001,0xFDFC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000, -0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFBFC0001,0xF7FC0001,0x1FC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFFFC0000,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0x1FC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000, -0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xF7FC0001,0xF7FC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFFF00000,0xFE000000, -0xFFFC0000,0x1D00C14,0xFFC40AAC,0xFFC00997,0xFFC00933,0xFFBC08C2,0xFFB4073B,0xFFB00696,0xFFAC050C,0xFFA00453,0xFFA00372,0xFFB00891,0xFFA40686,0xFFA405A5,0xFF940387,0xFF900266,0xFF8C0109,0xFF880354,0xFF7C01DB,0xFF74000A,0xF77401C5,0xB7FC0C14,0xFFAC09FD,0xFFA00934,0xFF8806A6,0xFF7C053D,0xFF700374,0xFF7005BB,0xFF58036A,0xFF380025,0xF73C01C4,0xDDF40C14, -0xFF400933,0xFEE00372,0xF68001C4,0xE6000C14,0xFFC40A74,0xFFCC0B5C,0xFFCC0BBC,0xFFBC089D,0xFFAC066B,0xFF98043E,0xFF900351,0xFF840195,0xFFBC0A41,0xFFB00837,0xFF9003AD,0xFF380025,0xD3FC0C14,0x1EC01C3,0xFFE8018B,0xFFE40162,0xFFE40152,0xFFE00141,0xFFDC00EE,0xFFDC00CA,0xFFD80079,0xFFCC0041,0xFFC80001,0xE5FC01C3,0xFFD80176,0xFFD80152,0xFFCC00D1,0xFFB8007D, -0xFFB00000,0xF3F801C3,0xFFAC0152,0xFF600000,0xF60001C4,0xE5FC01C3,0xFFD80176,0xFFD80152,0xFFCC00D1,0xFFB8007D,0xFFB00000,0xF3F801C3,0xFFAC0152,0xFF600000,0xF60001C4,0xF3F801C3,0xFFAC0152,0xFF600000,0xF60001C4,0xF60001C4,0xFBEC01A1,0xFFEC01A1,0xFFEC01B2,0xFFDC016D,0xFFDC0125,0xFFD000E3,0xFFC8009D,0xFFB8006A,0xF9EC01A1,0xFFDC015A,0xFFC80156,0xFF600000, -0xEFFC01C3,0x1C00933,0x1C00933,0x1C00933,0x1C00933,0xFFB00696,0xFFB00696,0xFFB00696,0xFFA00453,0xFFA00453,0xFFA00372,0xFFA405A5,0xFFA405A5,0xFFA405A5,0xFF900266,0xFF900266,0xFF8C0109,0xFF7C01DB,0xFF7C01DB,0xFD740009,0xF1740155,0xA3FC0933,0xA3FC0933,0xA3FC0933,0xFF7C053D,0xFF7C053D,0xFF700374,0xFF58036A,0xFF58036A,0xFF380025,0xF1400154,0xD1FC0933, -0xD1FC0933,0xFEE00372,0xF0980154,0xDE000934,0xFFBC07F2,0xF7BC08BB,0x1C00933,0xFFAC06AE,0xFFA00542,0xFF9803DA,0xFF900351,0xFF840195,0xFFB407AE,0xFFB0067E,0xFF9003A4,0xFF380025,0xC5FC0933,0x1E40152,0x1E40152,0x1E40152,0x1E40152,0xFFDC00CA,0xFFDC00CA,0xFFDC00CA,0xFFCC0041,0xFFCC0041,0xFFC80001,0xD9FC0152,0xD9FC0152,0xD9FC0152,0xFFB8007D,0xFFB8007D, -0xFFB00000,0xEDF80152,0xEDF80152,0xFF600000,0xF0000154,0xD9FC0152,0xD9FC0152,0xD9FC0152,0xFFB8007D,0xFFB8007D,0xFFB00000,0xEDF80152,0xEDF80152,0xFF600000,0xF0000154,0xEDF80152,0xEDF80152,0xFF600000,0xF0000154,0xF0000154,0xF7E40139,0xFBE40139,0x1E40152,0xFFDC0109,0xFFD400E1,0xFFD000CA,0xFFC8009D,0xFFB8006A,0xF5E40139,0xFFDC0109,0xE7FC0152,0xFF600000, -0xE7FC0152,0x1FC0002,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000, -0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0002,0xF7FC0002,0xF7FC0002,0xFDFC0002,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFFFC0000,0xFDFC0002,0xFDFC0002,0xFFFC0000,0xFE000000,0xFFFC0000,0x1A00372,0x1A00372,0x1A00372,0x1A00372,0x1A00372,0x1A00372,0x1A00372,0x1A00372,0x1A00372,0x1A00372,0xFF8C0109,0xFF8C0109,0xFF8C0109,0xFF8C0109,0xFF8C0109, -0xFF8C0109,0xF9780001,0xF9780001,0xF9780001,0xE5740001,0x71FC0372,0x71FC0372,0x71FC0372,0x71FC0372,0x71FC0372,0x71FC0372,0xFF380025,0xFF380025,0xFF380025,0xE54C0000,0xB9FC0372,0xB9FC0372,0xB9FC0372,0xE4C80000,0xCE000374,0xF79C02F9,0x1A00372,0x1A00372,0xFF900262,0xFF9401E1,0xFF90016D,0xFF90016D,0xFF800092,0xFF9002B9,0xFD900244,0xFF74002D,0xFF380025, -0xA7FC0372,}; -static const uint32_t g_etc1_to_bc7_m6_table159[] = { -0x1840001,0x1840001,0x1840001,0x1840001,0x1840001,0x1840001,0x1840001,0x1840001,0x1840001,0x1840001,0x1840001,0x1840001,0x1840001,0x1840001,0x1840001,0x1840001,0x1840001,0x1840001,0x1840001,0x1840001,0x49FC0000,0x49FC0000,0x49FC0000,0x49FC0000,0x49FC0000,0x49FC0000,0x49FC0000,0x49FC0000,0x49FC0000,0x49FC0000,0xA7F80000, -0xA7F80000,0xA7F80000,0xA7F80000,0xC2000000,0x1840001,0x1840001,0x1840001,0x1840001,0x1840001,0x1840001,0x1840001,0x1840001,0x1A00000,0x1A00000,0x1A00000,0x49FC0000,0x8FFC0000,0x1D80001,0x1D80001,0x1D80001,0x1D80001,0x1D80001,0x1D80001,0x1D80001,0x1D80001,0x1D80001,0x1D80001,0xC9FC0000,0xC9FC0000,0xC9FC0000,0xC9FC0000,0xC9FC0000, -0xC9FC0000,0xE5F80000,0xE5F80000,0xE5F80000,0xEC000000,0xC9FC0000,0xC9FC0000,0xC9FC0000,0xC9FC0000,0xC9FC0000,0xC9FC0000,0xE5F80000,0xE5F80000,0xE5F80000,0xEC000000,0xE5F80000,0xE5F80000,0xE5F80000,0xEC000000,0xEC000000,0x5F80000,0x1D80001,0x1D80001,0x83FC0000,0xA9FC0000,0xBDFC0000,0xBDFC0000,0xD3FC0000,0x83FC0000,0xA9FC0000,0xDFF80000,0xE5F80000, -0xDFF80000,0x1FC0001,0x1FC0001,0x1FC0001,0x1FC0001,0xFDFC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000, -0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFBFC0001,0xF7FC0001,0x1FC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFFFC0000,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0x1FC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000, -0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xF7FC0001,0xF7FC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFFF00000,0xFE000000, -0xFFFC0000,0x1D80964,0xFFD00864,0xFFCC07AB,0xFFC8076B,0xFFC4070C,0xFFC40607,0xFFBC059E,0xFFB80484,0xFFB4040A,0xFFB00372,0xFFC40694,0xFFB40543,0xFFB0049D,0xFFAC031F,0xFFA0024E,0xFF980151,0xFF940274,0xFF940153,0xFF880002,0xF98400D9,0xC3FC0964,0xFFB807ED,0xFFB00768,0xFFA00596,0xFF9404A5,0xFF880374,0xFF880463,0xFF7002BA,0xFF580061,0xF95000D8,0xE1FC0964, -0xFF600768,0xFF100372,0xF8A800D8,0xEA000964,0xFFCC082B,0xF3D4091A,0xF5D8093F,0xFFC406CC,0xFFB4054F,0xFFAC03A2,0xFFA40306,0xFF9C019B,0xFFD0080D,0xFFC406A4,0xFF9C02F7,0xFF580061,0xDBFC0964,0x1F000DB,0xFDF000C3,0xFFEC00AB,0xFFEC00A2,0xFFE80093,0xFFE80072,0xFFE80062,0xFFE40039,0xFFE00022,0xFFD80001,0xEFFC00D8,0xFFE400B2,0xFFE400A2,0xFFD80061,0xFFD8003D, -0xFFC80000,0xF7F800D8,0xFFC800A2,0xFF900000,0xF80000D8,0xEFFC00D8,0xFFE400B2,0xFFE400A2,0xFFD80061,0xFFD8003D,0xFFC80000,0xF7F800D8,0xFFC800A2,0xFF900000,0xF80000D8,0xF7F800D8,0xFFC800A2,0xFF900000,0xF80000D8,0xF80000D8,0xFDF000C1,0xFFEC00D1,0xF1F000DB,0xFFEC00AE,0xFFE80092,0xFFE0006B,0xFFD80050,0xFFD00034,0xFBF000C1,0xFFE800A6,0xFFD800A3,0xFF900000, -0xF5FC00D8,0x1C8076B,0x1C8076B,0x1C8076B,0x1C8076B,0xFFBC059E,0xFFBC059E,0xFFBC059E,0xFFB4040A,0xFFB4040A,0xFFB00372,0xFFB0049D,0xFFB0049D,0xFFB0049D,0xFFA0024E,0xFFA0024E,0xFF980151,0xFF940153,0xFF940153,0xFF880002,0xF58400A5,0xB1FC0768,0xB1FC0768,0xB1FC0768,0xFF9404A5,0xFF9404A5,0xFF880374,0xFF7002BA,0xFF7002BA,0xFF580061,0xF55400A4,0xD9FC0768, -0xD9FC0768,0xFF100372,0xF4B800A4,0xE4000768,0xFBC40683,0xFDC80703,0x1C8076B,0xFFBC057D,0xFFB4046E,0xFFAC0362,0xFFA40306,0xFF9C019B,0xFFBC0651,0xFFB4055B,0xFF9C02EE,0xFF580061,0xCFFC0768,0x1EC00A2,0x1EC00A2,0x1EC00A2,0x1EC00A2,0xFFE80062,0xFFE80062,0xFFE80062,0xFFE00022,0xFFE00022,0xFFD80001,0xE5FC00A2,0xE5FC00A2,0xE5FC00A2,0xFFD8003D,0xFFD8003D, -0xFFC80000,0xF3F800A2,0xF3F800A2,0xFF900000,0xF40000A4,0xE5FC00A2,0xE5FC00A2,0xE5FC00A2,0xFFD8003D,0xFFD8003D,0xFFC80000,0xF3F800A2,0xF3F800A2,0xFF900000,0xF40000A4,0xF3F800A2,0xF3F800A2,0xFF900000,0xF40000A4,0xF40000A4,0xFBEC0091,0xFFEC0091,0x1EC00A2,0xF9EC0091,0xFFDC0074,0xFFD80061,0xFFD80050,0xFFD00034,0xF9EC0091,0xFDE40082,0xEFFC00A2,0xFF900000, -0xEFFC00A2,0x1FC0002,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000, -0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0002,0xF7FC0002,0xF7FC0002,0xFDFC0002,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFFFC0000,0xFDFC0002,0xFDFC0002,0xFFFC0000,0xFE000000,0xFFFC0000,0x1B00372,0x1B00372,0x1B00372,0x1B00372,0x1B00372,0x1B00372,0x1B00372,0x1B00372,0x1B00372,0x1B00372,0xFF980151,0xFF980151,0xFF980151,0xFF980151,0xFF980151, -0xFF980151,0xFF880002,0xFF880002,0xFF880002,0xED840001,0x89FC0372,0x89FC0372,0x89FC0372,0x89FC0372,0x89FC0372,0x89FC0372,0xFF580061,0xFF580061,0xFF580061,0xED5C0000,0xC5FC0372,0xC5FC0372,0xC5FC0372,0xECD80000,0xD6000374,0xFFAC02F9,0x1B00372,0x1B00372,0xFDA8028A,0xFFA00212,0xFF9801BA,0xFF9801BA,0xFF9400DA,0xFFA002E4,0xFFA00269,0xFF88007D,0xFF580061, -0xB7FC0372,}; -static const uint32_t g_etc1_to_bc7_m6_table160[] = { -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1, -0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, -0x0,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1, -0x1,0x300000,0x300000,0x300000,0x300000,0x2440000,0x2440000,0x2440000,0x8C0000,0x8C0000,0x16000001,0x2440000,0x2440000,0x2440000,0x8C0000,0x8C0000,0x16000001,0x8C0000,0x8C0000,0x16000001,0x16000001,0x2440000,0x2440000,0x2440000,0x8C0000,0x8C0000,0x16000001,0x8C0000,0x8C0000,0x16000001,0x16000001,0x8C0000, -0x8C0000,0x16000001,0x16000001,0x16000001,0x380000,0x340000,0x300000,0x400000,0x500000,0x640000,0x740000,0xAC0000,0x3C0000,0x2440000,0x640000,0x16000001,0x640000,0xA00000,0xEC0000,0x1E40000,0x4E000001,0xEC0000,0x1E40000,0x4E000001,0x1E40000,0x4E000001,0x4E000001,0xEC0000,0x1E40000,0x4E000001,0x1E40000,0x4E000001, -0x4E000001,0x1E40000,0x4E000001,0x4E000001,0x4E000001,0xEC0000,0x1E40000,0x4E000001,0x1E40000,0x4E000001,0x4E000001,0x1E40000,0x4E000001,0x4E000001,0x4E000001,0x1E40000,0x4E000001,0x4E000001,0x4E000001,0x4E000001,0xC80000,0xCA80000,0xCA80000,0x10C0000,0x1880000,0x25F00000,0x4E000001,0x4E000001,0xD80000,0x12C0000,0x45DC0000,0x4E000001, -0x1540000,0x3410B0,0xE2100180,0x72100180,0x4E100181,0x9C000620,0x6E0000A9,0x4E000005,0x4C000620,0x4400025D,0x32000622,0x6A000D2B,0x620004E9,0x46000263,0x46000851,0x3C00041A,0x30000732,0x32000D2C,0x32000831,0x2C000A06,0x22000D2B,0x4C10B0,0x4C0007F3,0x4000045C,0x3A000A12,0x3A00058B,0x2E000814,0x2E000E21,0x2C000952,0x26000ABF,0x22000DA4,0x9810B0, -0x26000BDD,0x20000CBA,0x1C000EF4,0x180010B4,0xFE0004A0,0xFA240B7A,0xFE2C0B05,0x9E000409,0x62000449,0x4C00041A,0x440002DE,0x36000555,0xD0000776,0x7C00058B,0x3E00065B,0x26000ABF,0x6C10B0,0x440D2C,0xDA180120,0x70180120,0x4E180121,0x9C000620,0x6E0000A9,0x4E000005,0x4C000620,0x4400025D,0x32000622,0x680D2B,0x620004E9,0x46000263,0x46000851,0x3C00041A, -0x30000732,0xD00D2B,0x32000831,0x2C000A06,0x22000D2B,0x680D2B,0x620004E9,0x46000263,0x46000851,0x3C00041A,0x30000732,0xD00D2B,0x32000831,0x2C000A06,0x22000D2B,0xD00D2B,0x32000831,0x2C000A06,0x22000D2B,0x22000D2B,0xFE0004A0,0xFE2C09C6,0xF63C08B8,0x9E000409,0x62000449,0x4C00041A,0x440002DE,0x36000555,0xD00006CD,0x7C00054B,0x3E00064B,0x2C000A06, -0x940D2B,0x100180,0x100180,0x100180,0x100180,0x48000000,0x48000000,0x48000000,0x22000000,0x22000000,0x16000001,0x24000120,0x24000120,0x24000120,0x1E00006D,0x1E00006D,0x1400003A,0x10000122,0x10000122,0x100000AA,0xA000122,0x180180,0x180180,0x180180,0x180000B1,0x180000B1,0x12000061,0xE000141,0xE000141,0xE0000CE,0xA000132,0x2C0180, -0x2C0180,0xA00010B,0xA000153,0x6000183,0x84000059,0xFA04002C,0x100180,0x42000075,0x3200006D,0x2200006A,0x2200005A,0x16000082,0x420000C5,0x3200009E,0x16000121,0xE0000CE,0x200180,0x180120,0x180120,0x180120,0x180120,0x48000000,0x48000000,0x48000000,0x22000000,0x22000000,0x16000001,0x240120,0x240120,0x240120,0x1E00006D,0x1E00006D, -0x1400003A,0x440120,0x440120,0x100000AA,0xA000122,0x240120,0x240120,0x240120,0x1E00006D,0x1E00006D,0x1400003A,0x440120,0x440120,0x100000AA,0xA000122,0x440120,0x440120,0x100000AA,0xA000122,0xA000122,0x84000059,0xFC080020,0x180120,0x42000075,0x3200006D,0x2200006A,0x2200005A,0x16000082,0x560000B4,0x32000095,0x300120,0x100000AA, -0x300120,0x680620,0xC2300000,0x6A300000,0x4E300001,0x2980620,0x6E0000A9,0x4E000005,0x1380620,0x4400025D,0x32000622,0x2980620,0x6E0000A9,0x4E000005,0x1380620,0x4400025D,0x32000622,0x1380620,0x4400025D,0x32000622,0x32000622,0x2980620,0x6E0000A9,0x4E000005,0x1380620,0x4400025D,0x32000622,0x1380620,0x4400025D,0x32000622,0x32000622,0x1380620, -0x4400025D,0x32000622,0x32000622,0x32000622,0xFE140320,0xE6C0620,0xF65C039D,0xA6000220,0x6A000269,0x54000249,0x46000195,0x3E000305,0xF2000352,0x8C0002A8,0x4C000161,0x32000622,0xDC0620,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, -0x0,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x1,0x2,0x2,0x2,0x2,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1, -0x2,}; -static const uint32_t g_etc1_to_bc7_m6_table161[] = { -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1, -0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, -0x0,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1, -0x1,0x400000,0x400000,0x400000,0x400000,0x25C0000,0x25C0000,0x25C0000,0xBC0000,0xBC0000,0x1E000001,0x25C0000,0x25C0000,0x25C0000,0xBC0000,0xBC0000,0x1E000001,0xBC0000,0xBC0000,0x1E000001,0x1E000001,0x25C0000,0x25C0000,0x25C0000,0xBC0000,0xBC0000,0x1E000001,0xBC0000,0xBC0000,0x1E000001,0x1E000001,0xBC0000, -0xBC0000,0x1E000001,0x1E000001,0x1E000001,0x4480000,0x440000,0x400000,0x2540000,0x6C0000,0x880000,0x9C0000,0xE80000,0x500000,0x25C0000,0x880000,0x1E000001,0x880000,0xB00000,0x1040000,0x7FC0000,0x56000001,0x1040000,0x7FC0000,0x56000001,0x7FC0000,0x56000001,0x56000001,0x1040000,0x7FC0000,0x56000001,0x7FC0000,0x56000001, -0x56000001,0x7FC0000,0x56000001,0x56000001,0x56000001,0x1040000,0x7FC0000,0x56000001,0x7FC0000,0x56000001,0x56000001,0x7FC0000,0x56000001,0x56000001,0x56000001,0x7FC0000,0x56000001,0x56000001,0x56000001,0x56000001,0xDC0000,0xBC0000,0xBC0000,0x1280000,0x1AC0000,0x2FF00000,0x56000001,0x56000001,0xF00000,0x1480000,0x4DEC0000,0x56000001, -0x1740000,0x3C1430,0xF61402AC,0x7C1402AD,0x561402AD,0xB6000620,0x7A000059,0x5600000A,0x58000620,0x4A0001ED,0x3A000622,0x78000F80,0x680005A9,0x5200030B,0x4C000911,0x46000432,0x3A00078B,0x3A000F80,0x38000989,0x32000B46,0x26000F83,0x581430,0x580009AB,0x4C00058C,0x46000B62,0x40000613,0x340008C4,0x340010D1,0x38000AF2,0x2C000C47,0x2400102B,0xB01430, -0x2C000E45,0x26000EDA,0x200011F7,0x1C001434,0xFC080612,0xFE2C0E0A,0xFE2C0E55,0xA6000431,0x76000461,0x5A000421,0x480002C3,0x420005B3,0xD0000856,0x8600061A,0x46000791,0x2C000C47,0x7C1430,0x500F80,0xEA200200,0x7A200200,0x56200201,0xB6000620,0x7A000059,0x58040006,0x58000620,0x4A0001ED,0x3A000622,0x2740F80,0x680005A9,0x5200030B,0x4C000911,0x46000432, -0x3A00078B,0xF00F80,0x38000989,0x32000B46,0x26000F83,0x2740F80,0x680005A9,0x5200030B,0x4C000911,0x46000432,0x3A00078B,0xF00F80,0x38000989,0x32000B46,0x26000F83,0xF00F80,0x38000989,0x32000B46,0x26000F83,0x26000F83,0xFE0C05F6,0xF63C0BA4,0xFC480AC4,0xA6000431,0x76000461,0x5A000421,0x480002C3,0x420005B3,0xD00007AD,0x900005D9,0x46000781,0x32000B46, -0xA80F80,0x1402AC,0x1402AC,0x1402AC,0x1402AC,0x60000000,0x60000000,0x60000000,0x2E000000,0x2E000000,0x1E000001,0x30000200,0x30000200,0x30000200,0x220000B9,0x220000B9,0x1E000065,0x16000202,0x16000202,0x16000132,0xE000202,0x2002AB,0x2002AB,0x2002AB,0x22000132,0x22000132,0x180000B1,0x12000236,0x12000236,0x1400016E,0xE00021B,0x3C02AB, -0x3C02AB,0x100001D3,0xA000263,0xA0002AB,0xB600009D,0xFE0C00AC,0x1402AC,0x5C0000DA,0x3C0000C1,0x2E0000C1,0x2A00009D,0x220000E8,0x64000161,0x44000125,0x1E000204,0x1400016E,0x2C02AB,0x200200,0x200200,0x200200,0x200200,0x60000000,0x60000000,0x60000000,0x2E000000,0x2E000000,0x1E000001,0x300200,0x300200,0x300200,0x220000B9,0x220000B9, -0x1E000065,0x5C0200,0x5C0200,0x16000132,0xE000202,0x300200,0x300200,0x300200,0x220000B9,0x220000B9,0x1E000065,0x5C0200,0x5C0200,0x16000132,0xE000202,0x5C0200,0x5C0200,0x16000132,0xE000202,0xE000202,0xB600009D,0xFE0C0088,0x200200,0x5C0000DA,0x3C0000C1,0x2E0000C1,0x2A00009D,0x220000E8,0x6400013D,0x4A000112,0x400200,0x16000132, -0x400200,0x780620,0xCA400000,0x72400000,0x56400001,0x2B00620,0x7A000059,0x58080001,0x1680620,0x4A0001ED,0x3A000622,0x2B00620,0x7A000059,0x58080001,0x1680620,0x4A0001ED,0x3A000622,0x1680620,0x4A0001ED,0x3A000622,0x3A000622,0x2B00620,0x7A000059,0x58080001,0x1680620,0x4A0001ED,0x3A000622,0x1680620,0x4A0001ED,0x3A000622,0x3A000622,0x1680620, -0x4A0001ED,0x3A000622,0x3A000622,0x3A000622,0xF8280349,0x800620,0xFE6C039D,0xBC0001BD,0x80000209,0x5E0001D4,0x50000131,0x460002B1,0xF8040320,0x9E000239,0x560000E8,0x3A000622,0xFC0620,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, -0x0,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x1,0x2,0x2,0x2,0x2,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1, -0x2,}; -static const uint32_t g_etc1_to_bc7_m6_table162[] = { -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1, -0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, -0x0,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1, -0x1,0x500000,0x500000,0x500000,0x500000,0x2740000,0x2740000,0x2740000,0xF00000,0xF00000,0x26000001,0x2740000,0x2740000,0x2740000,0xF00000,0xF00000,0x26000001,0xF00000,0xF00000,0x26000001,0x26000001,0x2740000,0x2740000,0x2740000,0xF00000,0xF00000,0x26000001,0xF00000,0xF00000,0x26000001,0x26000001,0xF00000, -0xF00000,0x26000001,0x26000001,0x26000001,0x5C0000,0x2540000,0x500000,0x6C0000,0x840000,0xA80000,0xC00000,0x1240000,0x640000,0x2740000,0xA80000,0x26000001,0xA80000,0xC00000,0x11C0000,0x13FC0000,0x5E000001,0x11C0000,0x13FC0000,0x5E000001,0x13FC0000,0x5E000001,0x5E000001,0x11C0000,0x13FC0000,0x5E000001,0x13FC0000,0x5E000001, -0x5E000001,0x13FC0000,0x5E000001,0x5E000001,0x5E000001,0x11C0000,0x13FC0000,0x5E000001,0x13FC0000,0x5E000001,0x5E000001,0x13FC0000,0x5E000001,0x5E000001,0x5E000001,0x13FC0000,0x5E000001,0x5E000001,0x5E000001,0x5E000001,0xF00000,0xCC0000,0xCC0000,0x3400000,0x1D40000,0x39F00000,0x5E000001,0x5E000001,0x1040000,0x1680000,0x55FC0000,0x5E000001, -0x1980000,0x441830,0xFE1C0435,0x861C042D,0x5E1C042D,0xCE000620,0x8C000025,0x62040035,0x64000620,0x56000195,0x42000622,0x8800122B,0x740006C9,0x580003F3,0x580009E9,0x4C00046A,0x400007EB,0x4200122B,0x3E000B29,0x38000CB6,0x2C00122B,0x641830,0x62000B89,0x52000704,0x52000CF2,0x460006D3,0x3A000994,0x3A0013E9,0x3E000CE2,0x32000E07,0x2A0012FF,0xCC1830, -0x32001115,0x2C00114A,0x26001547,0x20001834,0xFE1407F5,0xFE2C116A,0xF63C11FC,0xC800047D,0x8000049D,0x5E000465,0x520002DE,0x4A00061E,0xF2000977,0x9E0006AD,0x4E0008E5,0x32000E07,0x901830,0x5C122C,0xFA280320,0x84280320,0x5E280321,0xCE000620,0x8C000025,0x6008002A,0x64000620,0x56000195,0x42000622,0x84122B,0x740006C9,0x580003F3,0x580009E9,0x4C00046A, -0x400007EB,0x10C122B,0x3E000B29,0x38000CB6,0x2C00122B,0x84122B,0x740006C9,0x580003F3,0x580009E9,0x4C00046A,0x400007EB,0x10C122B,0x3E000B29,0x38000CB6,0x2C00122B,0x10C122B,0x3E000B29,0x38000CB6,0x2C00122B,0x2C00122B,0xFE140791,0xFC480DB8,0xFE4C0D38,0xC800047D,0x8000049D,0x5E000465,0x520002DE,0x4A00061E,0xFA00088B,0x9E000649,0x4E0008CC,0x38000CB6, -0xBC122B,0x1C042C,0x1C042C,0x1C042C,0x1C042C,0x78000000,0x78000000,0x78000000,0x3A000000,0x3A000000,0x26000001,0x3C000320,0x3C000320,0x3C000320,0x2E000121,0x2E000121,0x22000092,0x1C000322,0x1C000322,0x1C0001E2,0x12000322,0x224042B,0x224042B,0x224042B,0x280001E2,0x280001E2,0x2200010B,0x18000372,0x18000372,0x1A00023E,0x12000346,0x4C042B, -0x4C042B,0x160002E3,0x100003AB,0xC00042B,0xF60000FA,0xFE0C018C,0x1C042C,0x72000151,0x50000131,0x4000013A,0x38000105,0x2A000161,0x8200022D,0x500001C2,0x24000324,0x1A00023E,0x34042B,0x280320,0x280320,0x280320,0x280320,0x78000000,0x78000000,0x78000000,0x3A000000,0x3A000000,0x26000001,0x3C0320,0x3C0320,0x3C0320,0x2E000121,0x2E000121, -0x22000092,0x740320,0x740320,0x1C0001E2,0x12000322,0x3C0320,0x3C0320,0x3C0320,0x2E000121,0x2E000121,0x22000092,0x740320,0x740320,0x1C0001E2,0x12000322,0x740320,0x740320,0x1C0001E2,0x12000322,0x12000322,0xF60000FA,0xF4180139,0x280320,0x72000151,0x50000131,0x4000013A,0x38000105,0x2A000161,0x820001ED,0x5A0001A8,0x540320,0x1C0001E2, -0x540320,0x880620,0xD2500000,0x7A500000,0x5E500001,0xC80620,0x8C000025,0x60180001,0x1980620,0x56000195,0x42000622,0xC80620,0x8C000025,0x60180001,0x1980620,0x56000195,0x42000622,0x1980620,0x56000195,0x42000622,0x42000622,0xC80620,0x8C000025,0x60180001,0x1980620,0x56000195,0x42000622,0x1980620,0x56000195,0x42000622,0x42000622,0x1980620, -0x56000195,0x42000622,0x42000622,0x42000622,0xFE340355,0x900620,0xF67C03C8,0xD2000164,0x8A0001A9,0x68000190,0x580000DA,0x5000024A,0xFC140322,0xB40001E2,0x5E000095,0x42000622,0x1200620,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, -0x0,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x1,0x2,0x2,0x2,0x2,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1, -0x2,}; -static const uint32_t g_etc1_to_bc7_m6_table163[] = { -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1, -0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, -0x0,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1, -0x1,0x600000,0x600000,0x600000,0x600000,0x28C0000,0x28C0000,0x28C0000,0x1200000,0x1200000,0x2E000001,0x28C0000,0x28C0000,0x28C0000,0x1200000,0x1200000,0x2E000001,0x1200000,0x1200000,0x2E000001,0x2E000001,0x28C0000,0x28C0000,0x28C0000,0x1200000,0x1200000,0x2E000001,0x1200000,0x1200000,0x2E000001,0x2E000001,0x1200000, -0x1200000,0x2E000001,0x2E000001,0x2E000001,0x700000,0xA640000,0x600000,0x2800000,0xA00000,0xCC0000,0xE80000,0x1640000,0x780000,0x28C0000,0xCC0000,0x2E000001,0xCC0000,0xD00000,0x1340000,0x1FF80000,0x66000001,0x1340000,0x1FF80000,0x66000001,0x1FF80000,0x66000001,0x66000001,0x1340000,0x1FF80000,0x66000001,0x1FF80000,0x66000001, -0x66000001,0x1FF80000,0x66000001,0x66000001,0x66000001,0x1340000,0x1FF80000,0x66000001,0x1FF80000,0x66000001,0x66000001,0x1FF80000,0x66000001,0x66000001,0x66000001,0x1FF80000,0x66000001,0x66000001,0x66000001,0x66000001,0x1040000,0x6DC0000,0x6DC0000,0x15C0000,0x1FC0000,0x43F00000,0x66000001,0x66000001,0x3180000,0x1840000,0x5FD00000,0x66000001, -0x1B80000,0x4C1CB0,0xFE24064C,0x92200600,0x66200601,0xE6000620,0x98000005,0x6A08008D,0x70000620,0x5C00013D,0x4A000622,0x9A00152B,0x80000829,0x62000519,0x62000AC2,0x580004BA,0x46000863,0x4A00152C,0x44000D11,0x3E000E56,0x3200152B,0x701CB0,0x6E000DF9,0x580008DC,0x58000EB2,0x520007AB,0x46000A74,0x46001751,0x44000F22,0x38000FFF,0x30001633,0xE41CB0, -0x3800144D,0x3200140A,0x2C00190F,0x24001CB4,0xFE140A75,0xF63C1528,0xFA44160C,0xDE0004E3,0x90000506,0x6E0004C2,0x5E000302,0x500006CB,0xFA000B2B,0xB2000792,0x56000A45,0x38000FFF,0xA01CB0,0x64152C,0xFE300490,0x8E300480,0x66300481,0xE6000620,0x98000005,0x6A08007D,0x70000620,0x5C00013D,0x4A000622,0x98152B,0x80000829,0x62000519,0x62000AC2,0x580004BA, -0x46000863,0x130152B,0x44000D11,0x3E000E56,0x3200152B,0x98152B,0x80000829,0x62000519,0x62000AC2,0x580004BA,0x46000863,0x130152B,0x44000D11,0x3E000E56,0x3200152B,0x130152B,0x44000D11,0x3E000E56,0x3200152B,0x3200152B,0xFE2009B6,0xFE4C1044,0xF65C1031,0xDE0004E3,0x90000506,0x6E0004C2,0x5E000302,0x500006CB,0xFA000A2B,0xB2000719,0x56000A2C,0x3E000E56, -0xD8152B,0x200600,0x200600,0x200600,0x200600,0x90000000,0x90000000,0x90000000,0x46000000,0x46000000,0x2E000001,0x48000480,0x48000480,0x48000480,0x3A0001A9,0x3A0001A9,0x280000DA,0x22000480,0x22000480,0x200002C5,0x16000482,0x300600,0x300600,0x300600,0x2E0002C2,0x2E0002C2,0x28000183,0x1E0004F6,0x1E0004F6,0x1C000336,0x160004C2,0x5C0600, -0x5C0600,0x16000433,0x14000556,0xE000603,0xF600018A,0xF21402D9,0x200600,0x900001E1,0x5E0001BA,0x480001BA,0x40000172,0x2E000212,0x9600032B,0x660002A1,0x2C000489,0x1C000336,0x400600,0x300480,0x300480,0x300480,0x300480,0x90000000,0x90000000,0x90000000,0x46000000,0x46000000,0x2E000001,0x2440480,0x2440480,0x2440480,0x3A0001A9,0x3A0001A9, -0x280000DA,0x8C0480,0x8C0480,0x200002C5,0x16000482,0x2440480,0x2440480,0x2440480,0x3A0001A9,0x3A0001A9,0x280000DA,0x8C0480,0x8C0480,0x200002C5,0x16000482,0x8C0480,0x8C0480,0x200002C5,0x16000482,0x16000482,0xF600018A,0xF8200221,0x300480,0x900001E1,0x5E0001BA,0x480001BA,0x40000172,0x2E000212,0xA40002D5,0x6C000274,0x640480,0x200002C5, -0x640480,0x980620,0xDA600000,0x82600000,0x66600001,0xE00620,0x98000005,0x68280001,0x1CC0620,0x5C00013D,0x4A000622,0xE00620,0x98000005,0x68280001,0x1CC0620,0x5C00013D,0x4A000622,0x1CC0620,0x5C00013D,0x4A000622,0x4A000622,0xE00620,0x98000005,0x68280001,0x1CC0620,0x5C00013D,0x4A000622,0x1CC0620,0x5C00013D,0x4A000622,0x4A000622,0x1CC0620, -0x5C00013D,0x4A000622,0x4A000622,0x4A000622,0xFC4C0374,0x8A00620,0xFE8C03C8,0xE600010D,0xA0000161,0x76000132,0x5E000091,0x58000202,0xFE2C0349,0xC600019A,0x6A000061,0x4A000622,0x1400620,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, -0x0,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x1,0x2,0x2,0x2,0x2,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1, -0x2,}; -static const uint32_t g_etc1_to_bc7_m6_table164[] = { -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1, -0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x100001,0x100001,0x100001,0x100001,0x100001,0x100001,0x100001,0x100001,0x100001,0x100001,0x2180000,0x2180000,0x2180000,0x2180000,0x2180000, -0x2180000,0x300000,0x300000,0x300000,0x8000000,0x2180000,0x2180000,0x2180000,0x2180000,0x2180000,0x2180000,0x300000,0x300000,0x300000,0x8000000,0x300000,0x300000,0x300000,0x8000000,0x8000000,0x140000,0x100001,0x100001,0x140000,0x2140000,0x180000,0x180000,0x1C0000,0x140000,0x2140000,0x240000,0x300000, -0x240000,0x700001,0x700001,0x700001,0x700001,0xA80000,0xA80000,0xA80000,0x1580000,0x1580000,0x38000000,0xA80000,0xA80000,0xA80000,0x1580000,0x1580000,0x38000000,0x1580000,0x1580000,0x38000000,0x38000000,0xA80000,0xA80000,0xA80000,0x1580000,0x1580000,0x38000000,0x1580000,0x1580000,0x38000000,0x38000000,0x1580000, -0x1580000,0x38000000,0x38000000,0x38000000,0x840000,0x4780000,0x700001,0x2980000,0xC00000,0xF00000,0x1140000,0x1A40000,0x48C0000,0xA80000,0xF00000,0x38000000,0xF00000,0xE00001,0x1500000,0x2DF80000,0x70000000,0x1500000,0x2DF80000,0x70000000,0x2DF80000,0x70000000,0x70000000,0x1500000,0x2DF80000,0x70000000,0x2DF80000,0x70000000, -0x70000000,0x2DF80000,0x70000000,0x70000000,0x70000000,0x1500000,0x2DF80000,0x70000000,0x2DF80000,0x70000000,0x70000000,0x2DF80000,0x70000000,0x70000000,0x70000000,0x2DF80000,0x70000000,0x70000000,0x70000000,0x70000000,0x11C0000,0xF00000,0xF00000,0x17C0000,0x11FC0000,0x4DF80000,0x70000000,0x70000000,0x1340000,0x1A80000,0x69C40000,0x70000000, -0x1E00000,0x581F9B,0xFE30080B,0x9C2C0756,0x702C0756,0xFA080649,0xA408002A,0x741000FA,0x7C080649,0x68040139,0x54080649,0xB600152B,0x92000706,0x6E000496,0x740009B1,0x62000339,0x5200076C,0x5800152B,0x50000BF2,0x44000D79,0x3A00152C,0x841F99,0x7A000EA6,0x62000946,0x68000E9D,0x5E00071A,0x4C000A11,0x5200182C,0x4E000EC8,0x44000F8A,0x3A001695,0x10C1F99, -0x440015A6,0x3E00150D,0x32001A90,0x2C001F99,0xFE200C15,0xFE4C178F,0xFE4C18DF,0xF400035A,0xA2000391,0x7C00033A,0x660001B8,0x60000548,0xFE000BDB,0xC6000621,0x5E000926,0x44000F8A,0xBC1F99,0x78152B,0xFE4404A6,0x96440482,0x70400482,0xEE140621,0xA0100006,0x741C007A,0x78140621,0x660C0131,0x54100621,0x2B0152B,0x92000706,0x6E000496,0x740009B1,0x62000339, -0x5200076C,0x168152B,0x50000BF2,0x44000D79,0x3A00152C,0x2B0152B,0x92000706,0x6E000496,0x740009B1,0x62000339,0x5200076C,0x168152B,0x50000BF2,0x44000D79,0x3A00152C,0x168152B,0x50000BF2,0x44000D79,0x3A00152C,0x3A00152C,0xFE340A02,0xFA641079,0xFE6C1036,0xF400035A,0xA2000391,0x7C00033A,0x660001B8,0x60000548,0xFE080A6C,0xC6000591,0x5E000902,0x44000D79, -0xFC152B,0x2C0756,0x2C0756,0x2C0756,0x2C0756,0xA4080029,0xA4080029,0xA4080029,0x52080029,0x52080029,0x38080029,0x64000480,0x64000480,0x64000480,0x46000115,0x46000115,0x34000050,0x30000480,0x30000480,0x2C000249,0x20000480,0x400756,0x400756,0x400756,0x3A0002EE,0x3A0002EE,0x2E000169,0x2800055B,0x2800055B,0x2600030E,0x1E0004EC,0x800756, -0x800756,0x200004CD,0x1C000609,0x14000759,0xFC0C01B4,0xF82003D5,0x2C0756,0xB2000151,0x7C000124,0x5E000131,0x560000DD,0x40000172,0xC20002F5,0x8400022D,0x3E000490,0x2600030E,0x5C0756,0x400482,0x400482,0x400482,0x400482,0x98140001,0x98140001,0x98140001,0x50100001,0x50100001,0x38100001,0x600480,0x600480,0x600480,0x46000115,0x46000115, -0x34000050,0xC40480,0xC40480,0x2C000249,0x20000480,0x600480,0x600480,0x600480,0x46000115,0x46000115,0x34000050,0xC40480,0xC40480,0x2C000249,0x20000480,0xC40480,0xC40480,0x2C000249,0x20000480,0x20000480,0xFE100188,0xFE2C0239,0x400482,0xB2000151,0x7C000124,0x5E000131,0x560000DD,0x40000172,0xD6000262,0x900001E1,0x8C0480,0x2C000249, -0x8C0480,0xA80622,0xE0740001,0x8C700001,0x70700001,0xFC0620,0xA4080001,0x703C0000,0x3F80620,0x660000F4,0x54000620,0xFC0620,0xA4080001,0x703C0000,0x3F80620,0x660000F4,0x54000620,0x3F80620,0x660000F4,0x54000620,0x54000620,0xFC0620,0xA4080001,0x703C0000,0x3F80620,0x660000F4,0x54000620,0x3F80620,0x660000F4,0x54000620,0x54000620,0x3F80620, -0x660000F4,0x54000620,0x54000620,0x54000620,0xF668039D,0x2B40620,0xF8A003F5,0xFC0000C8,0xAA000109,0x7E0400F2,0x6C000050,0x640001B1,0xF4480372,0xD800013D,0x74000022,0x54000620,0x1680620,0x80029,0x80029,0x80029,0x80029,0x80029,0x80029,0x80029,0x80029,0x80029,0x80029,0x1A000000,0x1A000000,0x1A000000,0x1A000000,0x1A000000, -0x1A000000,0xC000000,0xC000000,0xC000000,0x8000000,0xC0029,0xC0029,0xC0029,0xC0029,0xC0029,0xC0029,0xC000010,0xC000010,0xC000010,0x6000008,0x140029,0x140029,0x140029,0x4000019,0x4000029,0x88000000,0x80029,0x80029,0x3C000000,0x2A000000,0x20000000,0x20000000,0x14000000,0x3600000A,0x24000005,0x10000001,0xC000010, -0x100029,}; -static const uint32_t g_etc1_to_bc7_m6_table165[] = { -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1, -0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x200001,0x200001,0x200001,0x200001,0x200001,0x200001,0x200001,0x200001,0x200001,0x200001,0x2300000,0x2300000,0x2300000,0x2300000,0x2300000, -0x2300000,0x640000,0x640000,0x640000,0x10000000,0x2300000,0x2300000,0x2300000,0x2300000,0x2300000,0x2300000,0x640000,0x640000,0x640000,0x10000000,0x640000,0x640000,0x640000,0x10000000,0x10000000,0x240000,0x200001,0x200001,0x280000,0x2280000,0x22C0000,0x22C0000,0x380000,0x280000,0x2280000,0x480000,0x640000, -0x480000,0x800001,0x800001,0x800001,0x800001,0xC00000,0xC00000,0xC00000,0x1880000,0x1880000,0x40000000,0xC00000,0xC00000,0xC00000,0x1880000,0x1880000,0x40000000,0x1880000,0x1880000,0x40000000,0x40000000,0xC00000,0xC00000,0xC00000,0x1880000,0x1880000,0x40000000,0x1880000,0x1880000,0x40000000,0x40000000,0x1880000, -0x1880000,0x40000000,0x40000000,0x40000000,0x980000,0xC880000,0x800001,0xB00000,0xD80000,0x1140000,0x13C0000,0x1E40000,0x4A00000,0xC00000,0x1140000,0x40000000,0x1140000,0xF00001,0x1680000,0x39F80000,0x78000000,0x1680000,0x39F80000,0x78000000,0x39F80000,0x78000000,0x78000000,0x1680000,0x39F80000,0x78000000,0x39F80000,0x78000000, -0x78000000,0x39F80000,0x78000000,0x78000000,0x78000000,0x1680000,0x39F80000,0x78000000,0x39F80000,0x78000000,0x78000000,0x39F80000,0x78000000,0x78000000,0x78000000,0x39F80000,0x78000000,0x78000000,0x78000000,0x78000000,0x1300000,0x9000000,0x9000000,0x3940000,0x1FF80000,0x57F80000,0x78000000,0x78000000,0x1480000,0x1C40000,0x71D40000,0x78000000, -0x3FC0000,0x642297,0xFE3C0A17,0xA63808E2,0x783808E2,0xFC1406C7,0xAE100096,0x7E1801AE,0x861006B1,0x6E100185,0x5C1006B1,0xCE00152B,0xA2000619,0x78000482,0x800008D9,0x6E000231,0x580006D0,0x6400152B,0x5C000B02,0x50000C99,0x4200152C,0x982295,0x8C000F9A,0x6E000A26,0x74000F05,0x620006C9,0x58000A19,0x5E001914,0x56000E8F,0x4A000F5A,0x400016F9,0x1302295, -0x4A00172A,0x4400162D,0x38001C24,0x32002295,0xFE340DE6,0xFE4C1A9F,0xF8601BF2,0xFE000293,0xB6000271,0x88000239,0x740000E4,0x64000421,0xFE100D87,0xDA000512,0x6E00085A,0x4A000F5A,0xD82295,0x88152B,0xFC5804D2,0x9E540482,0x78500482,0xF6240621,0xA8200006,0x7C2C007A,0x80240621,0x6E1C0131,0x5C200621,0xC8152B,0xA2000619,0x78040480,0x800008D9,0x6E000231, -0x580006D0,0x198152B,0x5C000B02,0x50000C99,0x4200152C,0xC8152B,0xA2000619,0x78040480,0x800008D9,0x6E000231,0x580006D0,0x198152B,0x5C000B02,0x50000C99,0x4200152C,0x198152B,0x5C000B02,0x50000C99,0x4200152C,0x4200152C,0xFC4C0A7E,0xFE6C10C1,0xF880108B,0xFE000293,0xB6000271,0x88000239,0x740000E4,0x64000421,0xFE240AC5,0xDA00044E,0x6E000829,0x50000C99, -0x120152B,0x3808E2,0x3808E2,0x3808E2,0x3808E2,0xB4100091,0xB4100091,0xB4100091,0x5C100091,0x5C100091,0x40100091,0x7C000480,0x7C000480,0x7C000480,0x580000A9,0x580000A9,0x40000010,0x3C000480,0x3C000480,0x320001E5,0x28000480,0x5008E1,0x5008E1,0x5008E1,0x46000356,0x46000356,0x3A000191,0x340005D3,0x340005D3,0x30000300,0x28000529,0xA008E1, -0xA008E1,0x26000599,0x200006E4,0x1A0008E1,0xFE100248,0xFE2C050D,0x3808E2,0xD00000E1,0x900000B4,0x6E0000B4,0x66000074,0x4C000104,0xF40002E3,0xA60001E9,0x4C000499,0x30000300,0x7008E1,0x500482,0x500482,0x500482,0x500482,0xA0240001,0xA0240001,0xA0240001,0x58200001,0x58200001,0x40200001,0x780480,0x780480,0x780480,0x580000A9,0x580000A9, -0x40000010,0xF40480,0xF40480,0x320001E5,0x28000480,0x780480,0x780480,0x780480,0x580000A9,0x580000A9,0x40000010,0xF40480,0xF40480,0x320001E5,0x28000480,0xF40480,0xF40480,0x320001E5,0x28000480,0x28000480,0xFE2001A5,0xFA440242,0x500482,0xD00000E1,0x900000B4,0x6E0000B4,0x66000074,0x4C000104,0xF4000202,0xAC000184,0xAC0480,0x320001E5, -0xAC0480,0xB80622,0xE8840001,0x94800001,0x78800001,0x1140620,0xAC180001,0x784C0000,0xFF80620,0x720000B4,0x5C000620,0x1140620,0xAC180001,0x784C0000,0xFF80620,0x720000B4,0x5C000620,0xFF80620,0x720000B4,0x5C000620,0x5C000620,0x1140620,0xAC180001,0x784C0000,0xFF80620,0x720000B4,0x5C000620,0xFF80620,0x720000B4,0x5C000620,0x5C000620,0xFF80620, -0x720000B4,0x5C000620,0x5C000620,0x5C000620,0xFE78039D,0xAC40620,0xFEAC03F9,0xFE1400DD,0xC00000CD,0x900000A9,0x74000020,0x6C000171,0xFC580372,0xEE0000FA,0x7E000008,0x5C000620,0x18C0620,0x100091,0x100091,0x100091,0x100091,0x100091,0x100091,0x100091,0x100091,0x100091,0x100091,0x32000000,0x32000000,0x32000000,0x32000000,0x32000000, -0x32000000,0x18000000,0x18000000,0x18000000,0x10000000,0x180091,0x180091,0x180091,0x180091,0x180091,0x180091,0x12000034,0x12000034,0x12000034,0xE00001D,0x2C0091,0x2C0091,0x2C0091,0xA000055,0x8000091,0xF8000001,0x100091,0x100091,0x76000000,0x52000000,0x3E000000,0x3E000000,0x28000000,0x6000002D,0x42000019,0x1E000005,0x12000034, -0x200091,}; -static const uint32_t g_etc1_to_bc7_m6_table166[] = { -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1, -0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x300001,0x300001,0x300001,0x300001,0x300001,0x300001,0x300001,0x300001,0x300001,0x300001,0x480000,0x480000,0x480000,0x480000,0x480000, -0x480000,0x940000,0x940000,0x940000,0x18000000,0x480000,0x480000,0x480000,0x480000,0x480000,0x480000,0x940000,0x940000,0x940000,0x18000000,0x940000,0x940000,0x940000,0x18000000,0x18000000,0x2340000,0x300001,0x300001,0x4380000,0x23C0000,0x440000,0x440000,0x540000,0x4380000,0x23C0000,0x680000,0x940000, -0x680000,0x900001,0x900001,0x900001,0x900001,0xD80000,0xD80000,0xD80000,0x1B80000,0x1B80000,0x48000000,0xD80000,0xD80000,0xD80000,0x1B80000,0x1B80000,0x48000000,0x1B80000,0x1B80000,0x48000000,0x48000000,0xD80000,0xD80000,0xD80000,0x1B80000,0x1B80000,0x48000000,0x1B80000,0x1B80000,0x48000000,0x48000000,0x1B80000, -0x1B80000,0x48000000,0x48000000,0x48000000,0x2A80000,0x9C0000,0x900001,0x2C40000,0xF40000,0x1340000,0x1640000,0x7FC0000,0x4B40000,0xD80000,0x1340000,0x48000000,0x1340000,0x1000001,0x1800000,0x45F80000,0x80000000,0x1800000,0x45F80000,0x80000000,0x45F80000,0x80000000,0x80000000,0x1800000,0x45F80000,0x80000000,0x45F80000,0x80000000, -0x80000000,0x45F80000,0x80000000,0x80000000,0x80000000,0x1800000,0x45F80000,0x80000000,0x45F80000,0x80000000,0x80000000,0x45F80000,0x80000000,0x80000000,0x80000000,0x45F80000,0x80000000,0x80000000,0x80000000,0x80000000,0x1440000,0x1140000,0x1140000,0x1B00000,0x2BFC0000,0x61FC0000,0x80000000,0x80000000,0x35C0000,0x1E40000,0x79E40000,0x80000000, -0x13FC0000,0x7025F3,0xFE480C9B,0xB0400AC2,0x80400AC2,0xFE2407C7,0xBA1C0142,0x842402A6,0x90180759,0x78180209,0x64180759,0xE600152B,0xAE000579,0x820804A6,0x8C000821,0x76000159,0x62000659,0x7000152B,0x66000A44,0x56000BE9,0x4A00152C,0xA825F1,0x980010EA,0x7A000B86,0x80000FAD,0x6E0006D1,0x5E000A4D,0x680019F0,0x60000E80,0x54000F30,0x4600177D,0x15825F1, -0x50001916,0x4A00179D,0x3E001DF0,0x380025F1,0xFE3C105F,0xFA641D9D,0xFE6C1F1A,0xFE0802E9,0xCA000191,0x96000163,0x7C000051,0x7000031D,0xFE180FB2,0xF2000433,0x7600075A,0x54000F30,0xF025F1,0x98152B,0xFE6804F6,0xA6640482,0x80600482,0xFE340621,0xB0300006,0x843C007A,0x88340621,0x762C0131,0x64300621,0xE0152B,0xAE000579,0x80140480,0x8C000821,0x76000159, -0x62000659,0x1CC152B,0x66000A44,0x56000BE9,0x4A00152C,0xE0152B,0xAE000579,0x80140480,0x8C000821,0x76000159,0x62000659,0x1CC152B,0x66000A44,0x56000BE9,0x4A00152C,0x1CC152B,0x66000A44,0x56000BE9,0x4A00152C,0x4A00152C,0xFE580AE5,0xFC8810CB,0xFE8C1093,0xFE1402D6,0xCA000191,0x96000163,0x7C000051,0x7000031D,0xFE340B25,0xF2000352,0x76000729,0x56000BE9, -0x140152B,0x400AC2,0x400AC2,0x400AC2,0x400AC2,0xC4180139,0xC4180139,0xC4180139,0x66180139,0x66180139,0x48180139,0x94000480,0x94000480,0x94000480,0x62000055,0x62000055,0x48000001,0x48000480,0x48000480,0x3E000185,0x30000480,0x600AC1,0x600AC1,0x600AC1,0x520003FE,0x520003FE,0x40000209,0x4000066B,0x4000066B,0x3A00030E,0x2E000569,0xC40AC1, -0xC40AC1,0x2C0006AD,0x260007EC,0x20000AC1,0xFE200335,0xF43806DA,0x400AC2,0xFA000088,0xA8000061,0x80000061,0x78000032,0x5A0000B4,0xFE000332,0xC40001B1,0x5C0004A4,0x3A00030E,0x8C0AC1,0x600482,0x600482,0x600482,0x600482,0xA8340001,0xA8340001,0xA8340001,0x60300001,0x60300001,0x48300001,0x900480,0x900480,0x900480,0x62000055,0x62000055, -0x48040000,0x1240480,0x1240480,0x3E000185,0x30000480,0x900480,0x900480,0x900480,0x62000055,0x62000055,0x48040000,0x1240480,0x1240480,0x3E000185,0x30000480,0x1240480,0x1240480,0x3E000185,0x30000480,0x30000480,0xFA3401C2,0xFE4C0262,0x600482,0xFA000088,0xA8000061,0x80000061,0x78000032,0x5A0000B4,0xFE0C0200,0xC4000121,0xD00480,0x3E000185, -0xD00480,0xC80622,0xF0940001,0x9C900001,0x80900001,0x12C0620,0xB4280001,0x805C0000,0x1BF80620,0x78000080,0x64000620,0x12C0620,0xB4280001,0x805C0000,0x1BF80620,0x78000080,0x64000620,0x1BF80620,0x78000080,0x64000620,0x64000620,0x12C0620,0xB4280001,0x805C0000,0x1BF80620,0x78000080,0x64000620,0x1BF80620,0x78000080,0x64000620,0x64000620,0x1BF80620, -0x78000080,0x64000620,0x64000620,0x64000620,0xFA8C03C8,0xD80620,0xF8C00422,0xFE2C0109,0xCA000091,0x9A00006A,0x7E000008,0x76000128,0xFC6C039D,0xFC0000C8,0x88000001,0x64000620,0x1AC0620,0x180139,0x180139,0x180139,0x180139,0x180139,0x180139,0x180139,0x180139,0x180139,0x180139,0x4A000000,0x4A000000,0x4A000000,0x4A000000,0x4A000000, -0x4A000000,0x24000000,0x24000000,0x24000000,0x18000000,0x240139,0x240139,0x240139,0x240139,0x240139,0x240139,0x1E000074,0x1E000074,0x1E000074,0x18000040,0x440139,0x440139,0x440139,0x100000B9,0xC000139,0xFC080029,0x180139,0x180139,0xAE000000,0x78000000,0x5C000000,0x5C000000,0x3C000000,0x92000061,0x74000032,0x2E000009,0x1E000074, -0x300139,}; -static const uint32_t g_etc1_to_bc7_m6_table167[] = { -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1, -0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x400001,0x400001,0x400001,0x400001,0x400001,0x400001,0x400001,0x400001,0x400001,0x400001,0x600000,0x600000,0x600000,0x600000,0x600000, -0x600000,0xC40000,0xC40000,0xC40000,0x20000000,0x600000,0x600000,0x600000,0x600000,0x600000,0x600000,0xC40000,0xC40000,0xC40000,0x20000000,0xC40000,0xC40000,0xC40000,0x20000000,0x20000000,0xA440000,0x400001,0x400001,0x4C0000,0x4500000,0x580000,0x580000,0x26C0000,0x4C0000,0x4500000,0x8C0000,0xC40000, -0x8C0000,0xA00001,0xA00001,0xA00001,0xA00001,0xF00000,0xF00000,0xF00000,0x1E80000,0x1E80000,0x50000000,0xF00000,0xF00000,0xF00000,0x1E80000,0x1E80000,0x50000000,0x1E80000,0x1E80000,0x50000000,0x50000000,0xF00000,0xF00000,0xF00000,0x1E80000,0x1E80000,0x50000000,0x1E80000,0x1E80000,0x50000000,0x50000000,0x1E80000, -0x1E80000,0x50000000,0x50000000,0x50000000,0xBC0000,0xAC0000,0xA00001,0xDC0000,0x1100000,0x1580000,0x18C0000,0x13F80000,0xCC0000,0xF00000,0x1580000,0x50000000,0x1580000,0x1100001,0x1980000,0x51F80000,0x88000000,0x1980000,0x51F80000,0x88000000,0x51F80000,0x88000000,0x88000000,0x1980000,0x51F80000,0x88000000,0x51F80000,0x88000000, -0x88000000,0x51F80000,0x88000000,0x88000000,0x88000000,0x1980000,0x51F80000,0x88000000,0x51F80000,0x88000000,0x88000000,0x51F80000,0x88000000,0x88000000,0x88000000,0x51F80000,0x88000000,0x88000000,0x88000000,0x88000000,0x1580000,0x1240000,0x1240000,0x1CC0000,0x39FC0000,0x6BFC0000,0x88000000,0x88000000,0x1740000,0x5FC0000,0x81F40000,0x88000000, -0x21FC0000,0x7C29AF,0xFE540F97,0xB84C0CF6,0x884C0CF6,0xFE300953,0xC4240236,0x8E2C03EA,0x9A200841,0x801C02D1,0x6C200841,0xFE00152B,0xC00004F9,0x8C100502,0x98000789,0x800000B5,0x6C000629,0x7C00152B,0x72000984,0x60000B40,0x5200152C,0xBC29AD,0xA800126A,0x82000D65,0x8C001095,0x7A000739,0x68000AC5,0x74001B10,0x68000E8C,0x5C000F2A,0x52001805,0x17C29AD, -0x5C001B46,0x5000195D,0x4A001FD0,0x3E0029AD,0xFE501342,0xFE6C2105,0xFE6C231A,0xFE1403DA,0xD80000EA,0xA20000B9,0x88000009,0x7A000236,0xFE2412A6,0xFC00038C,0x7E0006CC,0x5C000F2A,0x10C29AD,0xA8152B,0xFE78053B,0xAE740482,0x88700482,0xFE440629,0xB8400006,0x8C4C007A,0x90440621,0x7E3C0131,0x6C400621,0xF8152B,0xC00004F9,0x88240480,0x98000789,0x800000B5, -0x6C000629,0x1FC152B,0x72000984,0x60000B40,0x5200152C,0xF8152B,0xC00004F9,0x88240480,0x98000789,0x800000B5,0x6C000629,0x1FC152B,0x72000984,0x60000B40,0x5200152C,0x1FC152B,0x72000984,0x60000B40,0x5200152C,0x5200152C,0xFC740B5A,0xF4981121,0xF8A010E6,0xFE240355,0xD80000EA,0xA20000B9,0x88000009,0x7A000236,0xFE440B94,0xFC00028C,0x7E00068C,0x60000B40, -0x164152B,0x4C0CF6,0x4C0CF6,0x4C0CF6,0x4C0CF6,0xD4200221,0xD4200221,0xD4200221,0x70200221,0x70200221,0x50200221,0xAC000480,0xAC000480,0xAC000480,0x7400001D,0x7400001D,0x52040018,0x54000480,0x54000480,0x44000139,0x38000480,0x700CF6,0x700CF6,0x700CF6,0x620004C5,0x620004C5,0x4C0002C1,0x4C000723,0x4C000723,0x40000332,0x340005C1,0xE40CF6, -0xE40CF6,0x380007FD,0x2C000924,0x24000CF9,0xFE2C0498,0xFA4408C6,0x4C0CF6,0xFE080098,0xBC000029,0x9200002D,0x84000008,0x6A000068,0xFE000452,0xD4000186,0x660004AC,0x40000332,0xA00CF6,0x700482,0x700482,0x700482,0x700482,0xB0440001,0xB0440001,0xB0440001,0x68400001,0x68400001,0x50400001,0xA80480,0xA80480,0xA80480,0x7400001D,0x7400001D, -0x50140000,0x1580480,0x1580480,0x44000139,0x38000480,0xA80480,0xA80480,0xA80480,0x7400001D,0x7400001D,0x50140000,0x1580480,0x1580480,0x44000139,0x38000480,0x1580480,0x1580480,0x44000139,0x38000480,0x38000480,0xF64801E1,0xFA640265,0x700482,0xFE080088,0xBC000029,0x9200002D,0x84000008,0x6A000068,0xF6240221,0xDA0000CA,0xF00480,0x44000139, -0xF00480,0xD80622,0xF8A40001,0xA4A00001,0x88A00001,0x1440620,0xBC380001,0x886C0000,0x27F80620,0x84000050,0x6C000620,0x1440620,0xBC380001,0x886C0000,0x27F80620,0x84000050,0x6C000620,0x27F80620,0x84000050,0x6C000620,0x6C000620,0x1440620,0xBC380001,0x886C0000,0x27F80620,0x84000050,0x6C000620,0x27F80620,0x84000050,0x6C000620,0x6C000620,0x27F80620, -0x84000050,0x6C000620,0x6C000620,0x6C000620,0xFE9403E8,0xE80620,0xFECC042A,0xFE400128,0xE000006D,0xA6000050,0x88000000,0x7E0000F4,0xF88403C8,0xFE1400E1,0x90100001,0x6C000620,0x1D00620,0x200221,0x200221,0x200221,0x200221,0x200221,0x200221,0x200221,0x200221,0x200221,0x200221,0x64000000,0x64000000,0x64000000,0x64000000,0x64000000, -0x64000000,0x30000000,0x30000000,0x30000000,0x20000000,0x300221,0x300221,0x300221,0x300221,0x300221,0x300221,0x280000C2,0x280000C2,0x280000C2,0x1E000068,0x5C0221,0x5C0221,0x5C0221,0x16000145,0x10000221,0xFE0C009D,0x200221,0x200221,0xE8000000,0xA0000000,0x7A000000,0x7A000000,0x50000000,0xC40000A9,0x96000055,0x3E000010,0x280000C2, -0x400221,}; -static const uint32_t g_etc1_to_bc7_m6_table168[] = { -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1, -0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x540000,0x540000,0x540000,0x540000,0x540000,0x540000,0x540000,0x540000,0x540000,0x540000,0x7C0000,0x7C0000,0x7C0000,0x7C0000,0x7C0000, -0x7C0000,0xFC0000,0xFC0000,0xFC0000,0x28000001,0x7C0000,0x7C0000,0x7C0000,0x7C0000,0x7C0000,0x7C0000,0xFC0000,0xFC0000,0xFC0000,0x28000001,0xFC0000,0xFC0000,0xFC0000,0x28000001,0x28000001,0x4580000,0x540000,0x540000,0x2600000,0x680000,0x2700000,0x2700000,0x8C0000,0x2600000,0x680000,0xB00000,0xFC0000, -0xB00000,0xB40000,0xB40000,0xB40000,0xB40000,0x10C0000,0x10C0000,0x10C0000,0xBF80000,0xBF80000,0x58000001,0x10C0000,0x10C0000,0x10C0000,0xBF80000,0xBF80000,0x58000001,0xBF80000,0xBF80000,0x58000001,0x58000001,0x10C0000,0x10C0000,0x10C0000,0xBF80000,0xBF80000,0x58000001,0xBF80000,0xBF80000,0x58000001,0x58000001,0xBF80000, -0xBF80000,0x58000001,0x58000001,0x58000001,0xD00000,0xC00000,0xB40000,0xF40000,0x32C0000,0x17C0000,0x1B80000,0x1FF80000,0x2E00000,0x10C0000,0x17C0000,0x58000001,0x17C0000,0x1240000,0x3B00000,0x5DFC0000,0x90000001,0x3B00000,0x5DFC0000,0x90000001,0x5DFC0000,0x90000001,0x90000001,0x3B00000,0x5DFC0000,0x90000001,0x5DFC0000,0x90000001, -0x90000001,0x5DFC0000,0x90000001,0x90000001,0x90000001,0x3B00000,0x5DFC0000,0x90000001,0x5DFC0000,0x90000001,0x90000001,0x5DFC0000,0x90000001,0x90000001,0x90000001,0x5DFC0000,0x90000001,0x90000001,0x90000001,0x90000001,0x36C0000,0x1380000,0x1380000,0x1EC0000,0x49F80000,0x77F40000,0x90000001,0x90000001,0x18C0000,0x17FC0000,0x8BE80000,0x90000001, -0x33FC0000,0x8C2E54,0xFE681371,0xC2580FD9,0x90580FD9,0xFE3C0BBC,0xD42C039D,0x9A3805B5,0xA42C0994,0x8A240406,0x74280996,0xFE0C1590,0xD20004A2,0x961805A9,0xA80006E9,0x8C000042,0x7404062A,0x8A00152B,0x780008B3,0x6C000A83,0x5C00152B,0xCC2E54,0xB40014BB,0x8E000FFC,0x980011E6,0x8000080E,0x6E000BB6,0x80001C6F,0x74000EBF,0x66000F3F,0x5800189C,0x1A02E54, -0x60001E64,0x5C001B96,0x50002227,0x44002E54,0xFE58170A,0xF88025CC,0xFA842794,0xFE2405E6,0xEA000061,0xB0000042,0x9204000A,0x86000173,0xFE3415FA,0xFE00042C,0x90000627,0x66000F3F,0x1242E54,0xB8152C,0xFE8C0581,0xB8840480,0x90840481,0xFE5C0642,0xC2540005,0x945C007D,0x9A540620,0x864C0132,0x74540622,0x114152B,0xD20004A2,0x90380481,0xA80006E9,0x8C000042, -0x740C0622,0xFF8152B,0x780008B3,0x6C000A83,0x5C00152B,0x114152B,0xD20004A2,0x90380481,0xA80006E9,0x8C000042,0x740C0622,0xFF8152B,0x780008B3,0x6C000A83,0x5C00152B,0xFF8152B,0x780008B3,0x6C000A83,0x5C00152B,0x5C00152B,0xFE800BBE,0xFEAC1122,0xFEAC1101,0xFE4003CB,0xEA000061,0xB0000042,0x92080002,0x86000173,0xFE5C0BD5,0xFE1002E5,0x900005D6,0x6C000A83, -0x18C152B,0x580FD8,0x580FD8,0x580FD8,0x580FD8,0xE42C0374,0xE42C0374,0xE42C0374,0x7A2C0374,0x7A2C0374,0x58280375,0xC8000480,0xC8000480,0xC8000480,0x82000005,0x82000005,0x5C0C005E,0x60000482,0x60000482,0x500000E1,0x40000482,0x2800FD8,0x2800FD8,0x2800FD8,0x6E000615,0x6E000615,0x520003EB,0x58000811,0x58000811,0x4C00037E,0x4000063B,0x1080FD8, -0x1080FD8,0x3E0009BD,0x32000AC6,0x2A000FDB,0xFC380694,0xFE4C0B58,0x580FD8,0xFE100141,0xDA000005,0xA6000005,0x98000002,0x7600002D,0xFE1405F9,0xF6000172,0x7C0004C0,0x4C00037E,0xB80FD8,0x840480,0x840480,0x840480,0x840480,0xBA540000,0xBA540000,0xBA540000,0x70540000,0x70540000,0x58540001,0xC40480,0xC40480,0xC40480,0x82000005,0x82000005, -0x5A240001,0x18C0480,0x18C0480,0x500000E1,0x40000482,0xC40480,0xC40480,0xC40480,0x82000005,0x82000005,0x5A240001,0x18C0480,0x18C0480,0x500000E1,0x40000482,0x18C0480,0x18C0480,0x500000E1,0x40000482,0x40000482,0xFE5801E1,0xF4780288,0x840480,0xFE2400A2,0xDA000005,0xA6000005,0x96040000,0x7600002D,0xFE340221,0xFC000082,0x1180480,0x500000E1, -0x1180480,0xEC0620,0xFEB40004,0xACB40000,0x90B40001,0x35C0620,0xC44C0001,0x927C0001,0x33FC0620,0x8E00002D,0x74000622,0x35C0620,0xC44C0001,0x927C0001,0x33FC0620,0x8E00002D,0x74000622,0x33FC0620,0x8E00002D,0x74000622,0x74000622,0x35C0620,0xC44C0001,0x927C0001,0x33FC0620,0x8E00002D,0x74000622,0x33FC0620,0x8E00002D,0x74000622,0x74000622,0x33FC0620, -0x8E00002D,0x74000622,0x74000622,0x74000622,0xFEB403F5,0xFC0620,0xFAE40451,0xFE580164,0xEA00003D,0xB2000022,0x90140001,0x8A0000C1,0xFE9803C8,0xFE380120,0x9A200000,0x74000622,0x1F40620,0x280374,0x280374,0x280374,0x280374,0x280374,0x280374,0x280374,0x280374,0x280374,0x280374,0x7E000000,0x7E000000,0x7E000000,0x7E000000,0x7E000000, -0x7E000000,0x3E000000,0x3E000000,0x3E000000,0x28000001,0x23C0372,0x23C0372,0x23C0372,0x23C0372,0x23C0372,0x23C0372,0x2E000145,0x2E000145,0x2E000145,0x240000A9,0x7C0372,0x7C0372,0x7C0372,0x1C000212,0x14000372,0xF61C016D,0x280374,0x280374,0xFE040014,0xCC000000,0x9C000000,0x9C000000,0x66000000,0xF6000112,0xB4000092,0x4E000019,0x2E000145, -0x580372,}; -static const uint32_t g_etc1_to_bc7_m6_table169[] = { -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1, -0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x640000,0x640000,0x640000,0x640000,0x640000,0x640000,0x640000,0x640000,0x640000,0x640000,0x940000,0x940000,0x940000,0x940000,0x940000, -0x940000,0x12C0000,0x12C0000,0x12C0000,0x30000001,0x940000,0x940000,0x940000,0x940000,0x940000,0x940000,0x12C0000,0x12C0000,0x12C0000,0x30000001,0x12C0000,0x12C0000,0x12C0000,0x30000001,0x30000001,0xC680000,0x640000,0x640000,0x740000,0x7C0000,0x880000,0x880000,0xA80000,0x740000,0x7C0000,0xD40000,0x12C0000, -0xD40000,0xC40000,0xC40000,0xC40000,0xC40000,0x1240000,0x1240000,0x1240000,0x17F80000,0x17F80000,0x60000001,0x1240000,0x1240000,0x1240000,0x17F80000,0x17F80000,0x60000001,0x17F80000,0x17F80000,0x60000001,0x60000001,0x1240000,0x1240000,0x1240000,0x17F80000,0x17F80000,0x60000001,0x17F80000,0x17F80000,0x60000001,0x60000001,0x17F80000, -0x17F80000,0x60000001,0x60000001,0x60000001,0xE40000,0xD00000,0xC40000,0x3080000,0x1480000,0x1A00000,0x1E00000,0x29FC0000,0x2F40000,0x1240000,0x1A00000,0x60000001,0x1A00000,0x1340000,0x1C80000,0x69FC0000,0x98000001,0x1C80000,0x69FC0000,0x98000001,0x69FC0000,0x98000001,0x98000001,0x1C80000,0x69FC0000,0x98000001,0x69FC0000,0x98000001, -0x98000001,0x69FC0000,0x98000001,0x98000001,0x98000001,0x1C80000,0x69FC0000,0x98000001,0x69FC0000,0x98000001,0x98000001,0x69FC0000,0x98000001,0x98000001,0x98000001,0x69FC0000,0x98000001,0x98000001,0x98000001,0x98000001,0x3800000,0x1480000,0x1480000,0x7FC0000,0x55FC0000,0x81F40000,0x98000001,0x98000001,0x1A40000,0x29FC0000,0x93F80000,0x98000001, -0x41FC0000,0x9832DC,0xFE741765,0xCC6412C4,0x986412C5,0xFE440E76,0xDE340525,0xA0440799,0xAE340B04,0x942C055E,0x7C300B06,0xFE18169C,0xE2000481,0xA0200679,0xB4000691,0x96000012,0x7C080656,0x9600152B,0x840007FB,0x720009EB,0x6400152B,0xE032DC,0xC0001733,0x980012C5,0xA2001322,0x8C000906,0x7A000CD6,0x8C001DCF,0x7C000F22,0x6E000F63,0x62001933,0x1C432DC, -0x6C00213C,0x60001E14,0x5600247F,0x4A0032DC,0xFE641ADA,0xFE8C29F4,0xFE8C2C04,0xFE2C081A,0xFA00002A,0xBC00000D,0x9C08003B,0x900000E2,0xFE4419D3,0xFE100626,0x960005A9,0x6E000F63,0x13C32DC,0xC8152C,0xFEA405E1,0xC0940480,0x98940481,0xFE740672,0xCA640005,0x9C6C007D,0xA2640620,0x8E5C0132,0x7C640622,0x12C152B,0xE2000481,0x98480481,0xB4000691,0x96000012, -0x7C1C0622,0x1BF8152B,0x840007FB,0x720009EB,0x6400152B,0x12C152B,0xE2000481,0x98480481,0xB4000691,0x96000012,0x7C1C0622,0x1BF8152B,0x840007FB,0x720009EB,0x6400152B,0x1BF8152B,0x840007FB,0x720009EB,0x6400152B,0x6400152B,0xFE940C03,0xF6BC1178,0xFAC41144,0xFE540456,0xFA00002A,0xBC00000D,0x9A180002,0x900000E2,0xFE780C41,0xFE240375,0x9A000551,0x720009EB, -0x1AC152B,0x6412C4,0x6412C4,0x6412C4,0x6412C4,0xF43404E4,0xF43404E4,0xF43404E4,0x843404E4,0x843404E4,0x603004E5,0xE0000480,0xE0000480,0xE0000480,0x90000005,0x90000005,0x641000C2,0x6C000482,0x6C000482,0x5C0000A9,0x48000482,0x9012C3,0x9012C3,0x9012C3,0x7A000785,0x7A000785,0x5E000533,0x620008E2,0x620008E2,0x520003DE,0x460006A3,0x12412C3, -0x12412C3,0x44000B9D,0x3E000C56,0x300012C3,0xFE3C08B8,0xF4580E45,0x6412C4,0xFE1C0258,0xF0000001,0xB8000001,0xA6040018,0x8000000D,0xFE200802,0xFE0001C8,0x860004C8,0x520003DE,0xD012C3,0x940480,0x940480,0x940480,0x940480,0xC2640000,0xC2640000,0xC2640000,0x78640000,0x78640000,0x60640001,0xDC0480,0xDC0480,0xDC0480,0x8C0C0001,0x8C0C0001, -0x62340001,0x1BC0480,0x1BC0480,0x5C0000A9,0x48000482,0xDC0480,0xDC0480,0xDC0480,0x8C0C0001,0x8C0C0001,0x62340001,0x1BC0480,0x1BC0480,0x5C0000A9,0x48000482,0x1BC0480,0x1BC0480,0x5C0000A9,0x48000482,0x48000482,0xFA6C0200,0xFC880288,0x940480,0xFE3400B9,0xEE040000,0xB6040000,0x9E140000,0x8000000D,0xFA480244,0xFC140091,0x1380480,0x5C0000A9, -0x1380480,0xFC0620,0xFEC8000D,0xB4C40000,0x98C40001,0x3740620,0xCC5C0001,0x9A8C0001,0x3FFC0620,0x96000012,0x7C000622,0x3740620,0xCC5C0001,0x9A8C0001,0x3FFC0620,0x96000012,0x7C000622,0x3FFC0620,0x96000012,0x7C000622,0x7C000622,0x3740620,0xCC5C0001,0x9A8C0001,0x3FFC0620,0x96000012,0x7C000622,0x3FFC0620,0x96000012,0x7C000622,0x7C000622,0x3FFC0620, -0x96000012,0x7C000622,0x7C000622,0x7C000622,0xFAC80422,0x10C0620,0xFEEC0469,0xFE740190,0xF8040029,0xBC00000D,0x98240001,0x90000091,0xFEAC03F5,0xFE4C013D,0xA2300000,0x7C000622,0xDFC0620,0x3004E4,0x3004E4,0x3004E4,0x3004E4,0x3004E4,0x3004E4,0x3004E4,0x3004E4,0x3004E4,0x3004E4,0x96000000,0x96000000,0x96000000,0x96000000,0x96000000, -0x96000000,0x4A000000,0x4A000000,0x4A000000,0x30000001,0x4804E2,0x4804E2,0x4804E2,0x4804E2,0x4804E2,0x4804E2,0x3A0001CD,0x3A0001CD,0x3A0001CD,0x2E0000EA,0x9404E2,0x9404E2,0x9404E2,0x20000305,0x180004E2,0xFA240265,0x3004E4,0x3004E4,0xFE100071,0xF4000000,0xBA000000,0xBA000000,0x7A000000,0xF60001C2,0xD60000CD,0x5E000024,0x3A0001CD, -0x6804E2,}; -static const uint32_t g_etc1_to_bc7_m6_table170[] = { -0x40000,0x40000,0x40000,0x40000,0x40000,0x40000,0x40000,0x40000,0x40000,0x40000,0x40000,0x40000,0x40000,0x40000,0x40000,0x40000,0x40000,0x40000,0x40000,0x40000,0x40000,0x40000,0x40000,0x40000,0x40000,0x40000,0x40000,0x40000,0x40000,0x40000,0x80000, -0x80000,0x80000,0x80000,0x1,0x40000,0x40000,0x40000,0x40000,0x40000,0x40000,0x40000,0x40000,0x40000,0x40000,0x40000,0x40000,0x80000,0x740000,0x740000,0x740000,0x740000,0x740000,0x740000,0x740000,0x740000,0x740000,0x740000,0xAC0000,0xAC0000,0xAC0000,0xAC0000,0xAC0000, -0xAC0000,0x15C0000,0x15C0000,0x15C0000,0x38000001,0xAC0000,0xAC0000,0xAC0000,0xAC0000,0xAC0000,0xAC0000,0x15C0000,0x15C0000,0x15C0000,0x38000001,0x15C0000,0x15C0000,0x15C0000,0x38000001,0x38000001,0x7C0000,0x740000,0x740000,0x6840000,0x900000,0x9C0000,0x9C0000,0x2C00000,0x6840000,0x900000,0xF40000,0x15C0000, -0xF40000,0xD40000,0xD40000,0xD40000,0xD40000,0x13C0000,0x13C0000,0x13C0000,0x21FC0000,0x21FC0000,0x68000001,0x13C0000,0x13C0000,0x13C0000,0x21FC0000,0x21FC0000,0x68000001,0x21FC0000,0x21FC0000,0x68000001,0x68000001,0x13C0000,0x13C0000,0x13C0000,0x21FC0000,0x21FC0000,0x68000001,0x21FC0000,0x21FC0000,0x68000001,0x68000001,0x21FC0000, -0x21FC0000,0x68000001,0x68000001,0x68000001,0x4F40000,0x8E00000,0xD40000,0x1200000,0x1640000,0x1C00000,0x5FC0000,0x35F80000,0x3080000,0x13C0000,0x1C00000,0x68000001,0x1C00000,0x1440000,0x1E00000,0x75FC0000,0xA0000001,0x1E00000,0x75FC0000,0xA0000001,0x75FC0000,0xA0000001,0xA0000001,0x1E00000,0x75FC0000,0xA0000001,0x75FC0000,0xA0000001, -0xA0000001,0x75FC0000,0xA0000001,0xA0000001,0xA0000001,0x1E00000,0x75FC0000,0xA0000001,0x75FC0000,0xA0000001,0xA0000001,0x75FC0000,0xA0000001,0xA0000001,0xA0000001,0x75FC0000,0xA0000001,0xA0000001,0xA0000001,0xA0000001,0x3940000,0x5580000,0x5580000,0x1BFC0000,0x63FC0000,0x8BF40000,0xA0000001,0xA0000001,0x1B80000,0x39FC0000,0x9DCC0000,0xA0000001, -0x51FC0000,0xA43680,0xFE801AD5,0xD470152D,0xA070152D,0xFE5C1112,0xE440067D,0xAA4C0931,0xB83C0C40,0x9A38068A,0x843C0C42,0xFE3017F0,0xF0080485,0xAA280735,0xC6000655,0xA0080012,0x86100686,0xA004152B,0x90000767,0x7E00095F,0x6C04152B,0xF43680,0xD20018EB,0xA204152C,0xAE0013F2,0x9800099A,0x80000D92,0x92001E87,0x86000EDF,0x76000F1F,0x68001953,0x1F03680, -0x7200234C,0x6C001F94,0x5C00261B,0x50003684,0xFE781E55,0xFE8C2DE0,0xF8A02FFD,0xFE400A6F,0xFE0C0052,0xC804000E,0xA4100086,0x98000089,0xFE541CF7,0xFE18084E,0xA4000539,0x76000F1F,0x15C3680,0xD8152C,0xFEB00631,0xC8A40480,0xA0A40481,0xFE8006A6,0xD2740005,0xA47C007D,0xAA740620,0x966C0132,0x84740622,0x144152B,0xEA100481,0xA0580481,0xC6000651,0xA008000E, -0x842C0622,0x27F8152B,0x90000763,0x7E00095B,0x6C00152B,0x144152B,0xEA100481,0xA0580481,0xC6000651,0xA008000E,0x842C0622,0x27F8152B,0x90000763,0x7E00095B,0x6C00152B,0x27F8152B,0x90000763,0x7E00095B,0x6C00152B,0x6C00152B,0xFEA00C86,0xFECC1178,0xFECC1164,0xFE6C04E5,0xFE100035,0xC410000D,0xA2280002,0x98000085,0xFE880CA0,0xFE4003DB,0xA40004F9,0x7E00095B, -0x1D0152B,0x70152C,0x70152C,0x70152C,0x70152C,0xFE3C0624,0xFE3C0624,0xFE3C0624,0x8E3C0620,0x8E3C0620,0x683C0621,0xF4040480,0xF4040480,0xF4040480,0x9E040011,0x9E040011,0x6C180131,0x78040480,0x78040480,0x64000081,0x50040482,0xA4152B,0xA4152B,0xA4152B,0x86000889,0x86000889,0x68000641,0x6E000966,0x6E000966,0x5E0003E6,0x4C0006C3,0x14C152B, -0x14C152B,0x4A000D01,0x44000D62,0x3600152B,0xFE4C0A8D,0xFA641079,0x70152C,0xFE2C037D,0xFE08000D,0xC608000C,0xB6080038,0x8E040001,0xFC3009DD,0xFE0002CC,0x960004B9,0x5E0003E6,0xE8152B,0xA40480,0xA40480,0xA40480,0xA40480,0xCA740000,0xCA740000,0xCA740000,0x80740000,0x80740000,0x68740001,0xF40480,0xF40480,0xF40480,0x941C0001,0x941C0001, -0x6A440001,0x1F00480,0x1F00480,0x6400007D,0x50000482,0xF40480,0xF40480,0xF40480,0x941C0001,0x941C0001,0x6A440001,0x1F00480,0x1F00480,0x6400007D,0x50000482,0x1F00480,0x1F00480,0x6400007D,0x50000482,0x50000482,0xFE740220,0xF49802AD,0xA40480,0xFE4400DA,0xF6140000,0xBE140000,0xA6240000,0x8E000001,0xF2600265,0xFE2400A4,0x15C0480,0x6400007D, -0x15C0480,0x10C0620,0xFEDC0020,0xBCD40000,0xA0D40001,0x38C0620,0xD46C0001,0xA29C0001,0x4BFC0620,0xA0000005,0x84000622,0x38C0620,0xD46C0001,0xA29C0001,0x4BFC0620,0xA0000005,0x84000622,0x4BFC0620,0xA0000005,0x84000622,0x84000622,0x38C0620,0xD46C0001,0xA29C0001,0x4BFC0620,0xA0000005,0x84000622,0x4BFC0620,0xA0000005,0x84000622,0x84000622,0x4BFC0620, -0xA0000005,0x84000622,0x84000622,0x84000622,0xFED00442,0x71C0620,0xFB040480,0xFC9001C4,0xFE100035,0xCA000004,0xA0340001,0x9C00006A,0xF4C80422,0xFE640179,0xAA400000,0x84000622,0x1DF80620,0x3C0620,0x3C0620,0x3C0620,0x3C0620,0x3C0620,0x3C0620,0x3C0620,0x3C0620,0x3C0620,0x3C0620,0xAC040000,0xAC040000,0xAC040000,0xAC040000,0xAC040000, -0xAC040000,0x54040000,0x54040000,0x54040000,0x38040001,0x580620,0x580620,0x580620,0x580620,0x580620,0x580620,0x4600021D,0x4600021D,0x4600021D,0x340000FA,0xB00620,0xB00620,0xB00620,0x260003A9,0x1C000622,0xFE2C0349,0x3C0620,0x3C0620,0xFA1800F4,0xFC08000D,0xD2040000,0xD2040000,0x8A040000,0xFA08028A,0xFE0000E8,0x66000019,0x4600021D, -0x7C0620,}; -static const uint32_t g_etc1_to_bc7_m6_table171[] = { -0x140000,0x140000,0x140000,0x140000,0x140000,0x140000,0x140000,0x140000,0x140000,0x140000,0x140000,0x140000,0x140000,0x140000,0x140000,0x140000,0x140000,0x140000,0x140000,0x140000,0x1C0000,0x1C0000,0x1C0000,0x1C0000,0x1C0000,0x1C0000,0x1C0000,0x1C0000,0x1C0000,0x1C0000,0x380000, -0x380000,0x380000,0x380000,0x8000001,0x140000,0x140000,0x140000,0x140000,0x140000,0x140000,0x140000,0x140000,0x2140000,0x2140000,0x2140000,0x1C0000,0x280000,0x840000,0x840000,0x840000,0x840000,0x840000,0x840000,0x840000,0x840000,0x840000,0x840000,0xC40000,0xC40000,0xC40000,0xC40000,0xC40000, -0xC40000,0x18C0000,0x18C0000,0x18C0000,0x40000001,0xC40000,0xC40000,0xC40000,0xC40000,0xC40000,0xC40000,0x18C0000,0x18C0000,0x18C0000,0x40000001,0x18C0000,0x18C0000,0x18C0000,0x40000001,0x40000001,0x8C0000,0x840000,0x840000,0x2980000,0xA40000,0xB40000,0xB40000,0xDC0000,0x2980000,0xA40000,0x1180000,0x18C0000, -0x1180000,0xE40000,0xE40000,0xE40000,0xE40000,0x3500000,0x3500000,0x3500000,0x2DFC0000,0x2DFC0000,0x70000001,0x3500000,0x3500000,0x3500000,0x2DFC0000,0x2DFC0000,0x70000001,0x2DFC0000,0x2DFC0000,0x70000001,0x70000001,0x3500000,0x3500000,0x3500000,0x2DFC0000,0x2DFC0000,0x70000001,0x2DFC0000,0x2DFC0000,0x70000001,0x70000001,0x2DFC0000, -0x2DFC0000,0x70000001,0x70000001,0x70000001,0x1080000,0xF40000,0xE40000,0x3340000,0x1800000,0x1E40000,0x13F80000,0x3FFC0000,0x31C0000,0x3500000,0x1E40000,0x70000001,0x1E40000,0x1540000,0x1F80000,0x81FC0000,0xA8000001,0x1F80000,0x81FC0000,0xA8000001,0x81FC0000,0xA8000001,0xA8000001,0x1F80000,0x81FC0000,0xA8000001,0x81FC0000,0xA8000001, -0xA8000001,0x81FC0000,0xA8000001,0xA8000001,0xA8000001,0x1F80000,0x81FC0000,0xA8000001,0x81FC0000,0xA8000001,0xA8000001,0x81FC0000,0xA8000001,0xA8000001,0xA8000001,0x81FC0000,0xA8000001,0xA8000001,0xA8000001,0xA8000001,0x3A80000,0xD680000,0xD680000,0x2FFC0000,0x71FC0000,0x95F40000,0xA8000001,0xA8000001,0x3CC0000,0x4BFC0000,0xA5DC0000,0xA8000001, -0x5FFC0000,0xB43680,0xFE8C1BA1,0xDC80152D,0xA880152D,0xFE6811EA,0xEC50067D,0xB25C0931,0xC04C0C40,0xA248068A,0x8C4C0C42,0xFE441883,0xF8180485,0xB2380735,0xCC0C0651,0xA8180012,0x8E200686,0xA814152B,0x98040733,0x86040933,0x7414152B,0x10C3680,0xE20017A1,0xAA14152C,0xC0001242,0xA2000823,0x8C000CC2,0xA2001CE9,0x92000CD7,0x80000D2B,0x7000182C,0xBF83680, -0x7E0021E4,0x72001DD4,0x660024F4,0x58003684,0xFE8C1F58,0xFCA82E0A,0xFEAC3001,0xFE540B96,0xFE2000B6,0xD014000E,0xAC200086,0xA20C0082,0xFE701E35,0xFE300991,0xB00004B1,0x80000D2B,0x17C3680,0xE8152C,0xFEC40690,0xD0B40480,0xA8B40481,0xFE9806E6,0xDA840005,0xAC8C007D,0xB2840620,0x9E7C0132,0x8C840622,0x15C152B,0xF2200481,0xA8680481,0xD2000629,0xA818000E, -0x8C3C0622,0x33F8152B,0x960006DB,0x840008D3,0x7400152B,0x15C152B,0xF2200481,0xA8680481,0xD2000629,0xA818000E,0x8C3C0622,0x33F8152B,0x960006DB,0x840008D3,0x7400152B,0x33F8152B,0x960006DB,0x840008D3,0x7400152B,0x7400152B,0xFEB40CC9,0xF6DC11D2,0xFAE411A1,0xFE78057E,0xFE280069,0xCC20000D,0xAA380002,0xA400004B,0xFE980D11,0xFE54047D,0xB00004B0,0x840008D3, -0x1F0152B,0x80152C,0x80152C,0x80152C,0x80152C,0xFE500631,0xFE500631,0xFE500631,0x964C0620,0x964C0620,0x704C0621,0xFC140480,0xFC140480,0xFC140480,0xA6140011,0xA6140011,0x74280131,0x80140480,0x80140480,0x6C0C007A,0x58140482,0xBC152B,0xBC152B,0xBC152B,0x980007B9,0x980007B9,0x70040621,0x7A000866,0x7A000866,0x680002AA,0x580005EB,0x17C152B, -0x17C152B,0x56000C19,0x4A000C82,0x3E00152B,0xFC640B12,0xFE6C10C1,0x80152C,0xFE3C03E0,0xFE1C001D,0xCE18000C,0xBE180038,0x96140001,0xFE3C0A38,0xFE18031E,0xA8000481,0x680002AA,0x10C152B,0xB40480,0xB40480,0xB40480,0xB40480,0xD2840000,0xD2840000,0xD2840000,0x88840000,0x88840000,0x70840001,0x10C0480,0x10C0480,0x10C0480,0x9C2C0001,0x9C2C0001, -0x72540001,0xBF80480,0xBF80480,0x6C00004A,0x58000482,0x10C0480,0x10C0480,0x10C0480,0x9C2C0001,0x9C2C0001,0x72540001,0xBF80480,0xBF80480,0x6C00004A,0x58000482,0xBF80480,0xBF80480,0x6C00004A,0x58000482,0x58000482,0xFE900221,0xFCA802AD,0xB40480,0xFE5C00E1,0xFE240000,0xC6240000,0xAE340000,0x980C0000,0xFA700265,0xFA4000C8,0x17C0480,0x6C00004A, -0x17C0480,0x11C0620,0xFEEC0041,0xC4E40000,0xA8E40001,0x3A40620,0xDC7C0001,0xAAAC0001,0x57FC0620,0xA8000001,0x8C000622,0x3A40620,0xDC7C0001,0xAAAC0001,0x57FC0620,0xA8000001,0x8C000622,0x57FC0620,0xA8000001,0x8C000622,0x8C000622,0x3A40620,0xDC7C0001,0xAAAC0001,0x57FC0620,0xA8000001,0x8C000622,0x57FC0620,0xA8000001,0x8C000622,0x8C000622,0x57FC0620, -0xA8000001,0x8C000622,0x8C000622,0x8C000622,0xFAF00451,0xF2C0620,0xFF0C04A0,0xFEA001F9,0xFE380055,0xD4040000,0xA8440001,0xA400004A,0xFCD80422,0xFE8401A5,0xB2500000,0x8C000622,0x2BFC0620,0x4C0620,0x4C0620,0x4C0620,0x4C0620,0x4C0620,0x4C0620,0x4C0620,0x4C0620,0x4C0620,0x4C0620,0xB4140000,0xB4140000,0xB4140000,0xB4140000,0xB4140000, -0xB4140000,0x5C140000,0x5C140000,0x5C140000,0x40140001,0x700620,0x700620,0x700620,0x700620,0x700620,0x700620,0x52000185,0x52000185,0x52000185,0x4000007A,0xE40620,0xE40620,0xE40620,0x32000321,0x24000622,0xF63C0374,0x4C0620,0x4C0620,0xFE2C0109,0xFC1C0019,0xDA140000,0xDA140000,0x92140000,0xFC1C02AD,0xFA0C00DD,0x7A040000,0x52000185, -0xA00620,}; -static const uint32_t g_etc1_to_bc7_m6_table172[] = { -0x240001,0x240001,0x240001,0x240001,0x240001,0x240001,0x240001,0x240001,0x240001,0x240001,0x240001,0x240001,0x240001,0x240001,0x240001,0x240001,0x240001,0x240001,0x240001,0x240001,0x380000,0x380000,0x380000,0x380000,0x380000,0x380000,0x380000,0x380000,0x380000,0x380000,0x700000, -0x700000,0x700000,0x700000,0x12000000,0x240001,0x240001,0x240001,0x240001,0x240001,0x240001,0x240001,0x240001,0x280000,0x280000,0x280000,0x380000,0x500000,0x940001,0x940001,0x940001,0x940001,0x940001,0x940001,0x940001,0x940001,0x940001,0x940001,0x2DC0000,0x2DC0000,0x2DC0000,0x2DC0000,0x2DC0000, -0x2DC0000,0x1C40000,0x1C40000,0x1C40000,0x4A000000,0x2DC0000,0x2DC0000,0x2DC0000,0x2DC0000,0x2DC0000,0x2DC0000,0x1C40000,0x1C40000,0x1C40000,0x4A000000,0x1C40000,0x1C40000,0x1C40000,0x4A000000,0x4A000000,0xA00000,0x940001,0x940001,0x4AC0000,0xBC0000,0xCC0000,0xCC0000,0xFC0000,0x4AC0000,0xBC0000,0x13C0000,0x1C40000, -0x13C0000,0xF40001,0xF40001,0xF40001,0xF40001,0x16C0000,0x16C0000,0x16C0000,0x3BFC0000,0x3BFC0000,0x7A000000,0x16C0000,0x16C0000,0x16C0000,0x3BFC0000,0x3BFC0000,0x7A000000,0x3BFC0000,0x3BFC0000,0x7A000000,0x7A000000,0x16C0000,0x16C0000,0x16C0000,0x3BFC0000,0x3BFC0000,0x7A000000,0x3BFC0000,0x3BFC0000,0x7A000000,0x7A000000,0x3BFC0000, -0x3BFC0000,0x7A000000,0x7A000000,0x7A000000,0x51C0000,0xB040000,0xF40001,0x34C0000,0x19C0000,0x7FC0000,0x21FC0000,0x4BFC0000,0x1340000,0x16C0000,0x7FC0000,0x7A000000,0x7FC0000,0x1640001,0x19FC0000,0x8FF80000,0xB2000000,0x19FC0000,0x8FF80000,0xB2000000,0x8FF80000,0xB2000000,0xB2000000,0x19FC0000,0x8FF80000,0xB2000000,0x8FF80000,0xB2000000, -0xB2000000,0x8FF80000,0xB2000000,0xB2000000,0xB2000000,0x19FC0000,0x8FF80000,0xB2000000,0x8FF80000,0xB2000000,0xB2000000,0x8FF80000,0xB2000000,0xB2000000,0xB2000000,0x8FF80000,0xB2000000,0xB2000000,0xB2000000,0xB2000000,0x1C00000,0x77C0000,0x77C0000,0x45FC0000,0x7FFC0000,0xA1F00000,0xB2000000,0xB2000000,0x1E80000,0x5DFC0000,0xAFD00000,0xB2000000, -0x71FC0000,0xC43684,0xFEA41C83,0xE690152B,0xB290152B,0xFE801302,0xF664067B,0xBA6C0933,0xC8600C42,0xAC5C0686,0x965C0C42,0xFE5C1959,0xFE28048A,0xBA480733,0xD620064F,0xB0280012,0x9630068A,0xB224152C,0xA0140735,0x8E140931,0x7C24152D,0x3243680,0xF400169F,0xB228152B,0xD20010AA,0xAE000711,0x94000C50,0xAE001B7F,0x9E000AD1,0x8C000B51,0x7A0016F9,0x17FC3680, -0x8A00206C,0x7E001C08,0x720023A4,0x62003680,0xFEA0204E,0xF6BC2EC4,0xF8C0308C,0xFE6C0D33,0xFE38015B,0xDA28000E,0xB6340082,0xAA1C0086,0xFE781F23,0xFE440AEA,0xBA0C049F,0x8C000B51,0x1A43680,0xFC152B,0xFED40722,0xD8C80482,0xB2C40482,0xFEB00749,0xE2940006,0xB6A0007A,0xBA980621,0xA8900131,0x96940621,0x374152B,0xFC300481,0xB2780480,0xDE080621,0xB0280011, -0x964C0620,0x3FFC152B,0xA6000662,0x9000084C,0x7C00152C,0x374152B,0xFC300481,0xB2780480,0xDE080621,0xB0280011,0x964C0620,0x3FFC152B,0xA6000662,0x9000084C,0x7C00152C,0x3FFC152B,0xA6000662,0x9000084C,0x7C00152C,0x7C00152C,0xFED00D38,0xFEEC11D9,0xFEEC11E2,0xFE940602,0xFE4800C6,0xD630000D,0xB24C0001,0xAE04003D,0xFEB40D8E,0xFE700541,0xBC000486,0x9000084C, -0xDFC152B,0x90152B,0x90152B,0x90152B,0x90152B,0xFE600653,0xFE600653,0xFE600653,0x9E600622,0x9E600622,0x7A5C0622,0xFE280489,0xFE280489,0xFE280489,0xB028000E,0xB028000E,0x7E3C0132,0x88280481,0x88280481,0x741C007D,0x62240481,0xD4152B,0xD4152B,0xD4152B,0xA80006F1,0xA80006F1,0x7A140620,0x86000771,0x86000771,0x7400019D,0x62000529,0x1B0152B, -0x1B0152B,0x60000B4C,0x56000B91,0x4800152C,0xFE740B63,0xFC8810CB,0x90152B,0xFE54045A,0xFE300042,0xD628000B,0xC628003B,0x9E240002,0xFE500A8E,0xFE30038A,0xB2100480,0x7400019D,0x130152B,0xC40482,0xC40482,0xC40482,0xC40482,0xDA980001,0xDA980001,0xDA980001,0x92940001,0x92940001,0x7A940001,0x3240480,0x3240480,0x3240480,0xA63C0001,0xA63C0001, -0x7A680000,0x17FC0480,0x17FC0480,0x78000028,0x62000480,0x3240480,0x3240480,0x3240480,0xA63C0001,0xA63C0001,0x7A680000,0x17FC0480,0x17FC0480,0x78000028,0x62000480,0x17FC0480,0x17FC0480,0x78000028,0x62000480,0x62000480,0xFEA00244,0xF6BC02D2,0xC40482,0xFE780109,0xFC3C0004,0xD0340000,0xB6480000,0xA21C0000,0xF8880288,0xFC5800DD,0x1A40480,0x78000028, -0x1A40480,0x12C0622,0xFF00006A,0xCEF40001,0xB2F40001,0x1C00620,0xE68C0001,0xB2C00000,0x65F80620,0xB2100000,0x96000620,0x1C00620,0xE68C0001,0xB2C00000,0x65F80620,0xB2100000,0x96000620,0x65F80620,0xB2100000,0x96000620,0x96000620,0x1C00620,0xE68C0001,0xB2C00000,0x65F80620,0xB2100000,0x96000620,0x65F80620,0xB2100000,0x96000620,0x96000620,0x65F80620, -0xB2100000,0x96000620,0x96000620,0x96000620,0xFEF80479,0x9400620,0xFD2804B1,0xFEC00225,0xFE500089,0xDC180000,0xB2500000,0xAC000034,0xFEF00451,0xFEA001E5,0xBA640001,0x96000620,0x3DF80620,0x5C0622,0x5C0622,0x5C0622,0x5C0622,0x5C0622,0x5C0622,0x5C0622,0x5C0622,0x5C0622,0x5C0622,0xBA280001,0xBA280001,0xBA280001,0xBA280001,0xBA280001, -0xBA280001,0x66240001,0x66240001,0x66240001,0x4A240001,0x8C0620,0x8C0620,0x8C0620,0x8C0620,0x8C0620,0x8C0620,0x620000E9,0x620000E9,0x620000E9,0x4800001D,0x1180620,0x1180620,0x1180620,0x3E0002A1,0x2E000620,0xFE4C037A,0x5C0622,0x5C0622,0xFE3C0122,0xFC300029,0xE2280001,0xE2280001,0x9A280001,0xF83002D2,0xFC1C00F4,0x82180000,0x620000E9, -0xC80620,}; -static const uint32_t g_etc1_to_bc7_m6_table173[] = { -0x340001,0x340001,0x340001,0x340001,0x340001,0x340001,0x340001,0x340001,0x340001,0x340001,0x340001,0x340001,0x340001,0x340001,0x340001,0x340001,0x340001,0x340001,0x340001,0x340001,0x500000,0x500000,0x500000,0x500000,0x500000,0x500000,0x500000,0x500000,0x500000,0x500000,0xA00000, -0xA00000,0xA00000,0xA00000,0x1A000000,0x340001,0x340001,0x340001,0x340001,0x340001,0x340001,0x340001,0x340001,0x4380000,0x4380000,0x4380000,0x500000,0x700000,0xA40001,0xA40001,0xA40001,0xA40001,0xA40001,0xA40001,0xA40001,0xA40001,0xA40001,0xA40001,0x2F40000,0x2F40000,0x2F40000,0x2F40000,0x2F40000, -0x2F40000,0x1F40000,0x1F40000,0x1F40000,0x52000000,0x2F40000,0x2F40000,0x2F40000,0x2F40000,0x2F40000,0x2F40000,0x1F40000,0x1F40000,0x1F40000,0x52000000,0x1F40000,0x1F40000,0x1F40000,0x52000000,0x52000000,0xB00000,0xA40001,0xA40001,0xC00000,0xD00000,0xE00000,0xE00000,0x3140000,0xC00000,0xD00000,0x1600000,0x1F40000, -0x1600000,0x1040001,0x1040001,0x1040001,0x1040001,0x1840000,0x1840000,0x1840000,0x47FC0000,0x47FC0000,0x82000000,0x1840000,0x1840000,0x1840000,0x47FC0000,0x47FC0000,0x82000000,0x47FC0000,0x47FC0000,0x82000000,0x82000000,0x1840000,0x1840000,0x1840000,0x47FC0000,0x47FC0000,0x82000000,0x47FC0000,0x47FC0000,0x82000000,0x82000000,0x47FC0000, -0x47FC0000,0x82000000,0x82000000,0x82000000,0x1300000,0x1180000,0x1040001,0x1640000,0x1B80000,0x17FC0000,0x2FFC0000,0x57F80000,0x1480000,0x1840000,0x17FC0000,0x82000000,0x17FC0000,0x1740001,0x31FC0000,0x9BF80000,0xBA000000,0x31FC0000,0x9BF80000,0xBA000000,0x9BF80000,0xBA000000,0xBA000000,0x31FC0000,0x9BF80000,0xBA000000,0x9BF80000,0xBA000000, -0xBA000000,0x9BF80000,0xBA000000,0xBA000000,0xBA000000,0x31FC0000,0x9BF80000,0xBA000000,0x9BF80000,0xBA000000,0xBA000000,0x9BF80000,0xBA000000,0xBA000000,0xBA000000,0x9BF80000,0xBA000000,0xBA000000,0xBA000000,0xBA000000,0x1D40000,0xF8C0000,0xF8C0000,0x59FC0000,0x8DFC0000,0xABF00000,0xBA000000,0xBA000000,0x1FC0000,0x6FFC0000,0xB7E00000,0xBA000000, -0x7FFC0000,0xD43684,0xFEB01D6B,0xEEA0152B,0xBAA0152B,0xFE8C1422,0xFE74067B,0xC27C0933,0xD0700C42,0xB46C0686,0x9E6C0C42,0xFE681A21,0xFE4004BA,0xC2580733,0xDE30064F,0xB8380012,0x9E40068A,0xBA34152C,0xA8240735,0x96240931,0x8434152D,0x33C3680,0xFE04164D,0xBA38152B,0xE2000F5A,0xBA000681,0x9E080C40,0xBA001A5F,0xA8000936,0x940009ED,0x82001640,0x23FC3680, -0x96001F3C,0x84001A90,0x78002270,0x6A003680,0xFEA82162,0xFECC2EC4,0xFECC30A4,0xFE800E82,0xFE4C0223,0xE238000E,0xBE440082,0xB22C0086,0xFE902009,0xFE5C0C52,0xC21C049F,0x940009ED,0x1C83680,0x10C152B,0xFEE80793,0xE0D80482,0xBAD40482,0xFEC407A3,0xEAA40006,0xBEB0007A,0xC2A80621,0xB0A00131,0x9EA40621,0x38C152B,0xFE4C0491,0xBA880480,0xE6180621,0xB8380011, -0x9E5C0620,0x4BFC152B,0xAC0005E6,0x960007E4,0x8400152C,0x38C152B,0xFE4C0491,0xBA880480,0xE6180621,0xB8380011,0x9E5C0620,0x4BFC152B,0xAC0005E6,0x960007E4,0x8400152C,0x4BFC152B,0xAC0005E6,0x960007E4,0x8400152C,0x8400152C,0xFEE40DD9,0xF900122B,0xFB041203,0xFEB006D2,0xFE680131,0xDE40000D,0xBA5C0001,0xB80C0038,0xFEC40DFB,0xFE8405C2,0xC6040480,0x960007E4, -0x1DF8152B,0xA0152B,0xA0152B,0xA0152B,0xA0152B,0xFE740672,0xFE740672,0xFE740672,0xA6700622,0xA6700622,0x826C0622,0xFE3C049B,0xFE3C049B,0xFE3C049B,0xB838000E,0xB838000E,0x864C0132,0x90380481,0x90380481,0x7C2C007D,0x6A340481,0xEC152B,0xEC152B,0xEC152B,0xBA000681,0xBA000681,0x82240620,0x980006B1,0x980006B1,0x7A0000E9,0x680004B9,0x1E4152B, -0x1E4152B,0x6C000A8C,0x5C000AD1,0x5000152C,0xFE840BAE,0xF4981122,0xA0152B,0xFE6804E6,0xFE440072,0xDE38000B,0xCE38003B,0xA6340002,0xFE640B11,0xFE440409,0xBA200480,0x7A0000E9,0x154152B,0xD40482,0xD40482,0xD40482,0xD40482,0xE2A80001,0xE2A80001,0xE2A80001,0x9AA40001,0x9AA40001,0x82A40001,0x33C0480,0x33C0480,0x33C0480,0xAE4C0001,0xAE4C0001, -0x82780000,0x23FC0480,0x23FC0480,0x7E000014,0x6A000480,0x33C0480,0x33C0480,0x33C0480,0xAE4C0001,0xAE4C0001,0x82780000,0x23FC0480,0x23FC0480,0x7E000014,0x6A000480,0x23FC0480,0x23FC0480,0x7E000014,0x6A000480,0x6A000480,0xFAB40265,0xFECC02D2,0xD40482,0xFE880122,0xFE540008,0xD8440000,0xBE580000,0xAA2C0000,0xFE940290,0xFE6800F4,0x1C80480,0x7E000014, -0x1C80480,0x13C0622,0xFF1800A2,0xD7040001,0xBB040001,0x1D80620,0xEE9C0001,0xBAD00000,0x71F80620,0xBA200000,0x9E000620,0x1D80620,0xEE9C0001,0xBAD00000,0x71F80620,0xBA200000,0x9E000620,0x71F80620,0xBA200000,0x9E000620,0x9E000620,0x1D80620,0xEE9C0001,0xBAD00000,0x71F80620,0xBA200000,0x9E000620,0x71F80620,0xBA200000,0x9E000620,0x9E000620,0x71F80620, -0xBA200000,0x9E000620,0x9E000620,0x9E000620,0xFF140482,0x1540620,0xF53804E2,0xFED80269,0xFE7C00B5,0xE4280000,0xBA600000,0xB6000019,0xF7080480,0xFEC00221,0xC2740001,0x9E000620,0x4BFC0620,0x6C0622,0x6C0622,0x6C0622,0x6C0622,0x6C0622,0x6C0622,0x6C0622,0x6C0622,0x6C0622,0x6C0622,0xC2380001,0xC2380001,0xC2380001,0xC2380001,0xC2380001, -0xC2380001,0x6E340001,0x6E340001,0x6E340001,0x52340001,0xA40620,0xA40620,0xA40620,0xA40620,0xA40620,0xA40620,0x74000089,0x74000089,0x74000089,0x52000000,0x14C0620,0x14C0620,0x14C0620,0x4400022D,0x36000620,0xF860039D,0x6C0622,0x6C0622,0xFE4C013D,0xFE3C003A,0xEA380001,0xEA380001,0xA2380001,0xFE3C02DA,0xFC300109,0x8A280000,0x74000089, -0xE80620,}; -static const uint32_t g_etc1_to_bc7_m6_table174[] = { -0x440001,0x440001,0x440001,0x440001,0x440001,0x440001,0x440001,0x440001,0x440001,0x440001,0x440001,0x440001,0x440001,0x440001,0x440001,0x440001,0x440001,0x440001,0x440001,0x440001,0x680000,0x680000,0x680000,0x680000,0x680000,0x680000,0x680000,0x680000,0x680000,0x680000,0xD00000, -0xD00000,0xD00000,0xD00000,0x22000000,0x440001,0x440001,0x440001,0x440001,0x440001,0x440001,0x440001,0x440001,0xC480000,0xC480000,0xC480000,0x680000,0x940000,0xB40001,0xB40001,0xB40001,0xB40001,0xB40001,0xB40001,0xB40001,0xB40001,0xB40001,0xB40001,0x30C0000,0x30C0000,0x30C0000,0x30C0000,0x30C0000, -0x30C0000,0xBFC0000,0xBFC0000,0xBFC0000,0x5A000000,0x30C0000,0x30C0000,0x30C0000,0x30C0000,0x30C0000,0x30C0000,0xBFC0000,0xBFC0000,0xBFC0000,0x5A000000,0xBFC0000,0xBFC0000,0xBFC0000,0x5A000000,0x5A000000,0x8C00000,0xB40001,0xB40001,0xD40000,0xE40000,0xF80000,0xF80000,0x1300000,0xD40000,0xE40000,0x1800000,0xBFC0000, -0x1800000,0x1140001,0x1140001,0x1140001,0x1140001,0x19C0000,0x19C0000,0x19C0000,0x53FC0000,0x53FC0000,0x8A000000,0x19C0000,0x19C0000,0x19C0000,0x53FC0000,0x53FC0000,0x8A000000,0x53FC0000,0x53FC0000,0x8A000000,0x8A000000,0x19C0000,0x19C0000,0x19C0000,0x53FC0000,0x53FC0000,0x8A000000,0x53FC0000,0x53FC0000,0x8A000000,0x8A000000,0x53FC0000, -0x53FC0000,0x8A000000,0x8A000000,0x8A000000,0x1440000,0x1280000,0x1140001,0x3780000,0x1D40000,0x25FC0000,0x3DF80000,0x61FC0000,0x15C0000,0x19C0000,0x25FC0000,0x8A000000,0x25FC0000,0x1840001,0x49FC0000,0xA7F80000,0xC2000000,0x49FC0000,0xA7F80000,0xC2000000,0xA7F80000,0xC2000000,0xC2000000,0x49FC0000,0xA7F80000,0xC2000000,0xA7F80000,0xC2000000, -0xC2000000,0xA7F80000,0xC2000000,0xC2000000,0xC2000000,0x49FC0000,0xA7F80000,0xC2000000,0xA7F80000,0xC2000000,0xC2000000,0xA7F80000,0xC2000000,0xC2000000,0xC2000000,0xA7F80000,0xC2000000,0xC2000000,0xC2000000,0xC2000000,0x1E80000,0x1A00000,0x1A00000,0x6DFC0000,0x9BFC0000,0xB5F00000,0xC2000000,0xC2000000,0x1FFC0000,0x81FC0000,0xBFF00000,0xC2000000, -0x8FFC0000,0xE43684,0xFEC41E2C,0xF6B0152B,0xC2B0152B,0xFEA41532,0xFE8406AF,0xCA8C0933,0xD8800C42,0xBC7C0686,0xA67C0C42,0xFE801AF9,0xFE540527,0xCA680733,0xE640064F,0xC0480012,0xA650068A,0xC244152C,0xB0340735,0x9E340931,0x8C44152D,0x1543680,0xFE1416C3,0xC248152B,0xEE000E4A,0xC6000651,0xA6180C40,0xCC001953,0xB40007E6,0x9E0008C1,0x8C0015A5,0x2FFC3680, -0x9C001E10,0x90001910,0x84002170,0x72003680,0xFEBC2236,0xF6DC2F82,0xF8E0311F,0xFE940FF3,0xFE640317,0xEA48000E,0xC6540082,0xBA3C0086,0xFEA42172,0xFE700DE2,0xCA2C049F,0x9E0008C1,0x1E83680,0x11C152B,0xFEF4082B,0xE8E80482,0xC2E40482,0xFED0081B,0xF2B40006,0xC6C0007A,0xCAB80621,0xB8B00131,0xA6B40621,0x3A4152B,0xFE6404B9,0xC2980480,0xEE280621,0xC0480011, -0xA66C0620,0x57FC152B,0xB8000586,0xA0000789,0x8C00152C,0x3A4152B,0xFE6404B9,0xC2980480,0xEE280621,0xC0480011,0xA66C0620,0x57FC152B,0xB8000586,0xA0000789,0x8C00152C,0x57FC152B,0xB8000586,0xA0000789,0x8C00152C,0x8C00152C,0xFEF80E2A,0xFF0C123B,0xFF0C124B,0xFEC0075E,0xFE7C01A9,0xE650000D,0xC26C0001,0xC01C0038,0xFEDC0E35,0xFE980692,0xCE140480,0xA0000789, -0x2BFC152B,0xB0152B,0xB0152B,0xB0152B,0xB0152B,0xFE8406AB,0xFE8406AB,0xFE8406AB,0xAE800622,0xAE800622,0x8A7C0622,0xFE5004B9,0xFE5004B9,0xFE5004B9,0xC048000E,0xC048000E,0x8E5C0132,0x98480481,0x98480481,0x843C007D,0x72440481,0x104152B,0x104152B,0x104152B,0xC6000641,0xC6000641,0x8A340620,0xA20005F6,0xA20005F6,0x86000061,0x72000489,0x7FC152B, -0x7FC152B,0x720009E8,0x66000A24,0x5800152C,0xFE900C2A,0xFCA81122,0xB0152B,0xFE78055A,0xFE5800B2,0xE648000B,0xD648003B,0xAE440002,0xFE780B5A,0xFE500485,0xC2300480,0x86000061,0x174152B,0xE40482,0xE40482,0xE40482,0xE40482,0xEAB80001,0xEAB80001,0xEAB80001,0xA2B40001,0xA2B40001,0x8AB40001,0x1540480,0x1540480,0x1540480,0xB65C0001,0xB65C0001, -0x8A880000,0x2FFC0480,0x2FFC0480,0x8A000004,0x72000480,0x1540480,0x1540480,0x1540480,0xB65C0001,0xB65C0001,0x8A880000,0x2FFC0480,0x2FFC0480,0x8A000004,0x72000480,0x2FFC0480,0x2FFC0480,0x8A000004,0x72000480,0x72000480,0xF6C80288,0xF6DC02F9,0xE40482,0xFE980145,0xFC6C0019,0xE0540000,0xC6680000,0xB23C0000,0xFAAC02AD,0xFE800120,0x1E80480,0x8A000004, -0x1E80480,0x14C0622,0xFF2400DA,0xDF140001,0xC3140001,0x1F00620,0xF6AC0001,0xC2E00000,0x7DF80620,0xC2300000,0xA6000620,0x1F00620,0xF6AC0001,0xC2E00000,0x7DF80620,0xC2300000,0xA6000620,0x7DF80620,0xC2300000,0xA6000620,0xA6000620,0x1F00620,0xF6AC0001,0xC2E00000,0x7DF80620,0xC2300000,0xA6000620,0x7DF80620,0xC2300000,0xA6000620,0xA6000620,0x7DF80620, -0xC2300000,0xA6000620,0xA6000620,0xA6000620,0xFB2C04B1,0x1640620,0xFD4804E2,0xFEEC029A,0xFE9000F5,0xEC380000,0xC2700000,0xC000000D,0xFF180480,0xFECC0262,0xCA840001,0xA6000620,0x5BFC0620,0x7C0622,0x7C0622,0x7C0622,0x7C0622,0x7C0622,0x7C0622,0x7C0622,0x7C0622,0x7C0622,0x7C0622,0xCA480001,0xCA480001,0xCA480001,0xCA480001,0xCA480001, -0xCA480001,0x76440001,0x76440001,0x76440001,0x5A440001,0xBC0620,0xBC0620,0xBC0620,0xBC0620,0xBC0620,0xBC0620,0x80000041,0x80000041,0x80000041,0x5A100000,0x17C0620,0x17C0620,0x17C0620,0x500001CD,0x3E000620,0xFE6C03A9,0x7C0622,0x7C0622,0xFA60016D,0xFE50004A,0xF2480001,0xF2480001,0xAA480001,0xFC5402F9,0xFE3C0132,0x92380000,0x80000041, -0x10C0620,}; -static const uint32_t g_etc1_to_bc7_m6_table175[] = { -0x540001,0x540001,0x540001,0x540001,0x540001,0x540001,0x540001,0x540001,0x540001,0x540001,0x540001,0x540001,0x540001,0x540001,0x540001,0x540001,0x540001,0x540001,0x540001,0x540001,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x1000000, -0x1000000,0x1000000,0x1000000,0x2A000000,0x540001,0x540001,0x540001,0x540001,0x540001,0x540001,0x540001,0x540001,0x5C0000,0x5C0000,0x5C0000,0x800000,0xB40000,0xC40001,0xC40001,0xC40001,0xC40001,0xC40001,0xC40001,0xC40001,0xC40001,0xC40001,0xC40001,0x3240000,0x3240000,0x3240000,0x3240000,0x3240000, -0x3240000,0x17FC0000,0x17FC0000,0x17FC0000,0x62000000,0x3240000,0x3240000,0x3240000,0x3240000,0x3240000,0x3240000,0x17FC0000,0x17FC0000,0x17FC0000,0x62000000,0x17FC0000,0x17FC0000,0x17FC0000,0x62000000,0x62000000,0xD40000,0xC40001,0xC40001,0x4E40000,0xF80000,0x10C0000,0x10C0000,0x14C0000,0x4E40000,0xF80000,0x1A40000,0x17FC0000, -0x1A40000,0x1240001,0x1240001,0x1240001,0x1240001,0x1B40000,0x1B40000,0x1B40000,0x5FF80000,0x5FF80000,0x92000000,0x1B40000,0x1B40000,0x1B40000,0x5FF80000,0x5FF80000,0x92000000,0x5FF80000,0x5FF80000,0x92000000,0x92000000,0x1B40000,0x1B40000,0x1B40000,0x5FF80000,0x5FF80000,0x92000000,0x5FF80000,0x5FF80000,0x92000000,0x92000000,0x5FF80000, -0x5FF80000,0x92000000,0x92000000,0x92000000,0x3540000,0x5380000,0x1240001,0x1900000,0x3EC0000,0x35FC0000,0x49FC0000,0x6DF80000,0x1700000,0x1B40000,0x35FC0000,0x92000000,0x35FC0000,0x1940001,0x63FC0000,0xB3F80000,0xCA000000,0x63FC0000,0xB3F80000,0xCA000000,0xB3F80000,0xCA000000,0xCA000000,0x63FC0000,0xB3F80000,0xCA000000,0xB3F80000,0xCA000000, -0xCA000000,0xB3F80000,0xCA000000,0xCA000000,0xCA000000,0x63FC0000,0xB3F80000,0xCA000000,0xB3F80000,0xCA000000,0xCA000000,0xB3F80000,0xCA000000,0xCA000000,0xCA000000,0xB3F80000,0xCA000000,0xCA000000,0xCA000000,0xCA000000,0x1FC0000,0x1B00000,0x1B00000,0x81FC0000,0xA9F80000,0xBFF00000,0xCA000000,0xCA000000,0x3DFC0000,0x91FC0000,0xC9C40000,0xCA000000, -0x9FF80000,0xF43684,0xFED01F3C,0xFEC0152B,0xCAC0152B,0xFEB01682,0xFE980713,0xD29C0933,0xE0900C42,0xC48C0686,0xAE8C0C42,0xFE981BF1,0xFE6C05CF,0xD2780733,0xEE50064F,0xC8580012,0xAE60068A,0xCA54152C,0xB8440735,0xA6440931,0x9454152D,0x16C3680,0xFE38176F,0xCA58152B,0xFA000D7A,0xCE100651,0xAE280C40,0xD8001863,0xBC0006CD,0xA60007D9,0x94001550,0x3BFC3680, -0xA6001D1B,0x960017C8,0x8A002044,0x7A003680,0xFED02341,0xFEEC2F82,0xFEEC313B,0xFEAC11B2,0xFE78043B,0xF258000E,0xCE640082,0xC24C0086,0xFEB4221F,0xFE800F42,0xD23C049F,0xA60007D9,0x7FC3680,0x12C152B,0xFF0C08BB,0xF0F80482,0xCAF40482,0xFEE80893,0xFAC40006,0xCED0007A,0xD2C80621,0xC0C00131,0xAEC40621,0x3BC152B,0xFE7C0501,0xCAA80480,0xF6380621,0xC8580011, -0xAE7C0620,0x63FC152B,0xC2000540,0xAA000740,0x9400152C,0x3BC152B,0xFE7C0501,0xCAA80480,0xF6380621,0xC8580011,0xAE7C0620,0x63FC152B,0xC2000540,0xAA000740,0x9400152C,0x63FC152B,0xC2000540,0xAA000740,0x9400152C,0x9400152C,0xFF000EBB,0xF9201289,0xFD281262,0xFED40821,0xFE900249,0xEE60000D,0xCA7C0001,0xC82C0038,0xFCF40ED9,0xFEC0074A,0xD6240480,0xAA000740, -0x3BFC152B,0xC0152B,0xC0152B,0xC0152B,0xC0152B,0xFE9806E2,0xFE9806E2,0xFE9806E2,0xB6900622,0xB6900622,0x928C0622,0xFE6804F1,0xFE6804F1,0xFE6804F1,0xC858000E,0xC858000E,0x966C0132,0xA0580481,0xA0580481,0x8C4C007D,0x7A540481,0x11C152B,0x11C152B,0x11C152B,0xD8000621,0xD8000621,0x92440620,0xAE000576,0xAE000576,0x92000019,0x7A080480,0x13FC152B, -0x13FC152B,0x7E000938,0x72000984,0x6000152C,0xFEA00C7D,0xF4B8117B,0xC0152B,0xFE8805D3,0xFE6C0102,0xEE58000B,0xDE58003B,0xB6540002,0xFE900BE5,0xFE680518,0xCA400480,0x92000019,0x198152B,0xF40482,0xF40482,0xF40482,0xF40482,0xF2C80001,0xF2C80001,0xF2C80001,0xAAC40001,0xAAC40001,0x92C40001,0x16C0480,0x16C0480,0x16C0480,0xBE6C0001,0xBE6C0001, -0x92980000,0x3BFC0480,0x3BFC0480,0x92000000,0x7A000480,0x16C0480,0x16C0480,0x16C0480,0xBE6C0001,0xBE6C0001,0x92980000,0x3BFC0480,0x3BFC0480,0x92000000,0x7A000480,0x3BFC0480,0x3BFC0480,0x92000000,0x7A000480,0x7A000480,0xFED80288,0xFEEC02F9,0xF40482,0xFEB4016D,0xFE800029,0xE8640000,0xCE780000,0xBA4C0000,0xFCC002D2,0xFE980139,0x7FC0480,0x92000000, -0x7FC0480,0x15C0622,0xFF3C0122,0xE7240001,0xCB240001,0xDFC0620,0xFEBC0001,0xCAF00000,0x89F80620,0xCA400000,0xAE000620,0xDFC0620,0xFEBC0001,0xCAF00000,0x89F80620,0xCA400000,0xAE000620,0x89F80620,0xCA400000,0xAE000620,0xAE000620,0xDFC0620,0xFEBC0001,0xCAF00000,0x89F80620,0xCA400000,0xAE000620,0x89F80620,0xCA400000,0xAE000620,0xAE000620,0x89F80620, -0xCA400000,0xAE000620,0xAE000620,0xAE000620,0xFF3404C9,0x3740620,0xF5580515,0xFF0402E4,0xFEBC0139,0xF4480000,0xCA800000,0xCA000004,0xFF2C04B1,0xFEF002B1,0xD2940001,0xAE000620,0x69FC0620,0x8C0622,0x8C0622,0x8C0622,0x8C0622,0x8C0622,0x8C0622,0x8C0622,0x8C0622,0x8C0622,0x8C0622,0xD2580001,0xD2580001,0xD2580001,0xD2580001,0xD2580001, -0xD2580001,0x7E540001,0x7E540001,0x7E540001,0x62540001,0x2D00620,0x2D00620,0x2D00620,0x2D00620,0x2D00620,0x2D00620,0x8C000019,0x8C000019,0x8C000019,0x62200000,0x1AC0620,0x1AC0620,0x1AC0620,0x56000171,0x46000620,0xF88003CA,0x8C0622,0x8C0622,0xFC70018A,0xFE640062,0xFA580001,0xFA580001,0xB2580001,0xFC640320,0xFE500145,0x9A480000,0x8C000019, -0x12C0620,}; -static const uint32_t g_etc1_to_bc7_m6_table176[] = { -0x680000,0x680000,0x680000,0x680000,0x680000,0x680000,0x680000,0x680000,0x680000,0x680000,0x680000,0x680000,0x680000,0x680000,0x680000,0x680000,0x680000,0x680000,0x680000,0x680000,0x2980000,0x2980000,0x2980000,0x2980000,0x2980000,0x2980000,0x2980000,0x2980000,0x2980000,0x2980000,0x1380000, -0x1380000,0x1380000,0x1380000,0x32000001,0x680000,0x680000,0x680000,0x680000,0x680000,0x680000,0x680000,0x680000,0xE6C0000,0xE6C0000,0xE6C0000,0x2980000,0xDC0000,0xD80000,0xD80000,0xD80000,0xD80000,0xD80000,0xD80000,0xD80000,0xD80000,0xD80000,0xD80000,0x1400000,0x1400000,0x1400000,0x1400000,0x1400000, -0x1400000,0x25F80000,0x25F80000,0x25F80000,0x6A000001,0x1400000,0x1400000,0x1400000,0x1400000,0x1400000,0x1400000,0x25F80000,0x25F80000,0x25F80000,0x6A000001,0x25F80000,0x25F80000,0x25F80000,0x6A000001,0x6A000001,0xAE40000,0xD80000,0xD80000,0xFC0000,0x50C0000,0x3240000,0x3240000,0x16C0000,0xFC0000,0x50C0000,0x1CC0000,0x25F80000, -0x1CC0000,0x1380000,0x1380000,0x1380000,0x1380000,0x1D00000,0x1D00000,0x1D00000,0x6DF80000,0x6DF80000,0x9A000001,0x1D00000,0x1D00000,0x1D00000,0x6DF80000,0x6DF80000,0x9A000001,0x6DF80000,0x6DF80000,0x9A000001,0x9A000001,0x1D00000,0x1D00000,0x1D00000,0x6DF80000,0x6DF80000,0x9A000001,0x6DF80000,0x6DF80000,0x9A000001,0x9A000001,0x6DF80000, -0x6DF80000,0x9A000001,0x9A000001,0x9A000001,0x7680000,0x14C0000,0x1380000,0x1A80000,0xDFC0000,0x45FC0000,0x59FC0000,0x79F80000,0x1880000,0x1D00000,0x45FC0000,0x9A000001,0x45FC0000,0x1A80000,0x7DFC0000,0xBFFC0000,0xD2000001,0x7DFC0000,0xBFFC0000,0xD2000001,0xBFFC0000,0xD2000001,0xD2000001,0x7DFC0000,0xBFFC0000,0xD2000001,0xBFFC0000,0xD2000001, -0xD2000001,0xBFFC0000,0xD2000001,0xD2000001,0xD2000001,0x7DFC0000,0xBFFC0000,0xD2000001,0xBFFC0000,0xD2000001,0xD2000001,0xBFFC0000,0xD2000001,0xD2000001,0xD2000001,0xBFFC0000,0xD2000001,0xD2000001,0xD2000001,0xD2000001,0x2DFC0000,0x1C40000,0x1C40000,0x97FC0000,0xB7FC0000,0xC9FC0000,0xD2000001,0xD2000001,0x5FFC0000,0xA5FC0000,0xD1F40000,0xD2000001, -0xAFFC0000,0x1083680,0xFEE82044,0xFED41550,0xD2D4152D,0xFED017C8,0xFEAC07D9,0xDCB00931,0xEAA00C40,0xCC9C068A,0xB6A00C42,0xFEB01D1B,0xFE8406CD,0xDC8C0735,0xF6600651,0xD26C0012,0xB8740686,0xD268152B,0xC2580733,0xB0580933,0x9E68152B,0x1883680,0xFE4C1863,0xD468152C,0xFE080D7A,0xD620064F,0xB63C0C42,0xE200176F,0xC80005CF,0xB2000713,0x9E00152B,0x49F83680, -0xB2001BF1,0xA0001682,0x96001F3C,0x82003684,0xFEE42462,0xF9003040,0xFB0431B0,0xFEC01361,0xFE9005B6,0xFA68000E,0xD6740086,0xCC600082,0xFED02373,0xFE981122,0xDC4C049F,0xB2000713,0x19FC3680,0x13C152C,0xFF180984,0xFB080480,0xD3080481,0xFF000938,0xFED80019,0xD6E0007D,0xDCD80620,0xC8D00132,0xB6D80622,0x1D8152B,0xFEA00576,0xD2BC0481,0xFE4C0621,0xD26C000E, -0xB6900622,0x71F8152B,0xCA0004F1,0xB20006E2,0x9E00152B,0x1D8152B,0xFEA00576,0xD2BC0481,0xFE4C0621,0xD26C000E,0xB6900622,0x71F8152B,0xCA0004F1,0xB20006E2,0x9E00152B,0x71F8152B,0xCA0004F1,0xB20006E2,0x9E00152B,0x9E00152B,0xFF140F21,0xFF2C12B6,0xF53812C4,0xFEEC08F1,0xFEA80326,0xF674000D,0xD48C0002,0xD03C003B,0xFF080F33,0xFEC8081B,0xDE380481,0xB20006E2, -0x4BFC152B,0xD4152C,0xD4152C,0xD4152C,0xD4152C,0xFEA80740,0xFEA80740,0xFEA80740,0xC0A00620,0xC0A00620,0x9AA00621,0xFE780540,0xFE780540,0xFE780540,0xD0680011,0xD0680011,0x9E7C0131,0xAA680480,0xAA680480,0x9660007A,0x82680482,0x138152B,0x138152B,0x138152B,0xE2100621,0xE2100621,0x9A580621,0xC0000501,0xC0000501,0x9C040006,0x821C0482,0x21F8152B, -0x21F8152B,0x8A000893,0x780008BB,0x6800152B,0xFEBC0CE5,0xFECC1178,0xD4152C,0xFE980671,0xFE80016D,0xF86C000C,0xE86C0038,0xC0680001,0xFEA00C3A,0xFE8005A2,0xD2540481,0x9C040006,0x1BC152B,0x1080480,0x1080480,0x1080480,0x1080480,0xFCD80000,0xFCD80000,0xFCD80000,0xB2D80000,0xB2D80000,0x9AD80001,0x1880480,0x1880480,0x1880480,0xC6800001,0xC6800001, -0x9CA80001,0x49F80480,0x49F80480,0x9A180001,0x82000482,0x1880480,0x1880480,0x1880480,0xC6800001,0xC6800001,0x9CA80001,0x49F80480,0x49F80480,0x9A180001,0x82000482,0x49F80480,0x49F80480,0x9A180001,0x82000482,0x82000482,0xFAEC02AD,0xF9000320,0x1080480,0xFEC40190,0xFE980041,0xF0780000,0xD8880000,0xC2600000,0xFED002DA,0xFEB0016D,0x19FC0480,0x9A180001, -0x19FC0480,0x1700620,0xFF500171,0xEF380000,0xD3380001,0x29FC0620,0xFED80019,0xD5000001,0x97F80620,0xD2540001,0xB6000622,0x29FC0620,0xFED80019,0xD5000001,0x97F80620,0xD2540001,0xB6000622,0x97F80620,0xD2540001,0xB6000622,0xB6000622,0x29FC0620,0xFED80019,0xD5000001,0x97F80620,0xD2540001,0xB6000622,0x97F80620,0xD2540001,0xB6000622,0xB6000622,0x97F80620, -0xD2540001,0xB6000622,0xB6000622,0xB6000622,0xFF5004E4,0x1880620,0xFF6C0515,0xFF200332,0xFED00195,0xFE580000,0xD2980001,0xD2080001,0xF94804E2,0xFF0802E4,0xDCA40000,0xB6000622,0x7BFC0620,0xA00620,0xA00620,0xA00620,0xA00620,0xA00620,0xA00620,0xA00620,0xA00620,0xA00620,0xA00620,0xDE680000,0xDE680000,0xDE680000,0xDE680000,0xDE680000, -0xDE680000,0x86680000,0x86680000,0x86680000,0x6A680001,0xEC0620,0xEC0620,0xEC0620,0xEC0620,0xEC0620,0xEC0620,0x9E000001,0x9E000001,0x9E000001,0x6C300001,0x1E40620,0x1E40620,0x1E40620,0x60000122,0x4E000622,0xFE8C03E8,0xA00620,0xA00620,0xFE8401A5,0xFE780080,0xFE680004,0xFE680004,0xBC680000,0xFE740328,0xFE640179,0xA4580000,0x9E000001, -0x1540620,}; -static const uint32_t g_etc1_to_bc7_m6_table177[] = { -0x780000,0x780000,0x780000,0x780000,0x780000,0x780000,0x780000,0x780000,0x780000,0x780000,0x780000,0x780000,0x780000,0x780000,0x780000,0x780000,0x780000,0x780000,0x780000,0x780000,0x2B00000,0x2B00000,0x2B00000,0x2B00000,0x2B00000,0x2B00000,0x2B00000,0x2B00000,0x2B00000,0x2B00000,0x1680000, -0x1680000,0x1680000,0x1680000,0x3A000001,0x780000,0x780000,0x780000,0x780000,0x780000,0x780000,0x780000,0x780000,0x800000,0x800000,0x800000,0x2B00000,0xFC0000,0xE80000,0xE80000,0xE80000,0xE80000,0xE80000,0xE80000,0xE80000,0xE80000,0xE80000,0xE80000,0x1580000,0x1580000,0x1580000,0x1580000,0x1580000, -0x1580000,0x31F80000,0x31F80000,0x31F80000,0x72000001,0x1580000,0x1580000,0x1580000,0x1580000,0x1580000,0x1580000,0x31F80000,0x31F80000,0x31F80000,0x72000001,0x31F80000,0x31F80000,0x31F80000,0x72000001,0x72000001,0xF80000,0xE80000,0xE80000,0x30C0000,0x5200000,0x13C0000,0x13C0000,0x1840000,0x30C0000,0x5200000,0x1EC0000,0x31F80000, -0x1EC0000,0x1480000,0x1480000,0x1480000,0x1480000,0x1E80000,0x1E80000,0x1E80000,0x79F80000,0x79F80000,0xA2000001,0x1E80000,0x1E80000,0x1E80000,0x79F80000,0x79F80000,0xA2000001,0x79F80000,0x79F80000,0xA2000001,0xA2000001,0x1E80000,0x1E80000,0x1E80000,0x79F80000,0x79F80000,0xA2000001,0x79F80000,0x79F80000,0xA2000001,0xA2000001,0x79F80000, -0x79F80000,0xA2000001,0xA2000001,0xA2000001,0x37C0000,0x75C0000,0x1480000,0x3BC0000,0x21FC0000,0x55FC0000,0x67F80000,0x83FC0000,0x19C0000,0x1E80000,0x55FC0000,0xA2000001,0x55FC0000,0x1B80000,0x95FC0000,0xCBFC0000,0xDA000001,0x95FC0000,0xCBFC0000,0xDA000001,0xCBFC0000,0xDA000001,0xDA000001,0x95FC0000,0xCBFC0000,0xDA000001,0xCBFC0000,0xDA000001, -0xDA000001,0xCBFC0000,0xDA000001,0xDA000001,0xDA000001,0x95FC0000,0xCBFC0000,0xDA000001,0xCBFC0000,0xDA000001,0xDA000001,0xCBFC0000,0xDA000001,0xDA000001,0xDA000001,0xCBFC0000,0xDA000001,0xDA000001,0xDA000001,0xDA000001,0x55FC0000,0x3D40000,0x3D40000,0xABFC0000,0xC5FC0000,0xD3FC0000,0xDA000001,0xDA000001,0x7DFC0000,0xB5FC0000,0xDBC80000,0xDA000001, -0xBFF80000,0x1183680,0xFEF42170,0xFEE415A5,0xDAE4152D,0xFEDC1910,0xFEC008C1,0xE4C00931,0xF2B00C40,0xD4AC068A,0xBEB00C42,0xFEC41E10,0xFE9407E6,0xE49C0735,0xFE700651,0xDA7C0012,0xC0840686,0xDA78152B,0xCA680733,0xB8680933,0xA678152B,0x1A03680,0xFE641953,0xDC78152C,0xFE200E4A,0xDE30064F,0xBE4C0C42,0xF40016C3,0xD4000527,0xBC0006AF,0xA610152B,0x55F83680, -0xBE001AF9,0xAC001532,0x9C001E2C,0x8A003684,0xFEF8257D,0xFF0C3050,0xFF0C31F0,0xFED414FA,0xFEA4073E,0xFE7C001E,0xDE840086,0xD4700082,0xFEDC247F,0xFEB012E5,0xE45C049F,0xBC0006AF,0x27FC3680,0x14C152C,0xFF300A24,0xFF180489,0xDB180481,0xFF1809E8,0xFEF00061,0xDEF0007D,0xE4E80620,0xD0E00132,0xBEE80622,0x1F0152B,0xFEB805F6,0xDACC0481,0xFE640641,0xDA7C000E, -0xBEA00622,0x7DF8152B,0xD60004B9,0xBC0006AB,0xA600152B,0x1F0152B,0xFEB805F6,0xDACC0481,0xFE640641,0xDA7C000E,0xBEA00622,0x7DF8152B,0xD60004B9,0xBC0006AB,0xA600152B,0x7DF8152B,0xD60004B9,0xBC0006AB,0xA600152B,0xA600152B,0xFD300F89,0xFB4412E4,0xFD4812C4,0xFF0009C8,0xFEC803F2,0xFE84000D,0xDC9C0002,0xD84C003B,0xFF180FA2,0xFEE80905,0xE6480481,0xBC0006AB, -0x5BFC152B,0xE4152C,0xE4152C,0xE4152C,0xE4152C,0xFEBC0789,0xFEBC0789,0xFEBC0789,0xC8B00620,0xC8B00620,0xA2B00621,0xFE8C0586,0xFE8C0586,0xFE8C0586,0xD8780011,0xD8780011,0xA68C0131,0xB2780480,0xB2780480,0x9E70007A,0x8A780482,0x150152B,0x150152B,0x150152B,0xEA200621,0xEA200621,0xA2680621,0xCC0004B9,0xCC0004B9,0xA4140006,0x8A2C0482,0x2DF8152B, -0x2DF8152B,0x9600081B,0x8400082B,0x7000152B,0xFECC0D34,0xF6DC11D1,0xE4152C,0xFEAC0709,0xFE9401DD,0xFC7C000E,0xF07C0038,0xC8780001,0xFEB40C89,0xFE980632,0xDA640481,0xA4140006,0x1E0152B,0x1180480,0x1180480,0x1180480,0x1180480,0xFEE80004,0xFEE80004,0xFEE80004,0xBAE80000,0xBAE80000,0xA2E80001,0x1A00480,0x1A00480,0x1A00480,0xCE900001,0xCE900001, -0xA4B80001,0x55F80480,0x55F80480,0xA2280001,0x8A000482,0x1A00480,0x1A00480,0x1A00480,0xCE900001,0xCE900001,0xA4B80001,0x55F80480,0x55F80480,0xA2280001,0x8A000482,0x55F80480,0x55F80480,0xA2280001,0x8A000482,0x8A000482,0xF70002D2,0xFF0C0328,0x1180480,0xFEDC01A5,0xFEAC0061,0xF8880000,0xE0980000,0xCA700000,0xF8EC02F9,0xFEC40188,0x27FC0480,0xA2280001, -0x27FC0480,0x1800620,0xFF5C01CD,0xF7480000,0xDB480001,0x41FC0620,0xFEFC0041,0xDD100001,0xA1FC0620,0xDA640001,0xBE000622,0x41FC0620,0xFEFC0041,0xDD100001,0xA1FC0620,0xDA640001,0xBE000622,0xA1FC0620,0xDA640001,0xBE000622,0xBE000622,0x41FC0620,0xFEFC0041,0xDD100001,0xA1FC0620,0xDA640001,0xBE000622,0xA1FC0620,0xDA640001,0xBE000622,0xBE000622,0xA1FC0620, -0xDA640001,0xBE000622,0xBE000622,0xBE000622,0xF7680515,0x5980620,0xF77C0548,0xFF400372,0xFEFC01E5,0xFE84000D,0xDAA80001,0xDA180001,0xFD5804E4,0xFF200340,0xE4B40000,0xBE000622,0x89FC0620,0xB00620,0xB00620,0xB00620,0xB00620,0xB00620,0xB00620,0xB00620,0xB00620,0xB00620,0xB00620,0xE6780000,0xE6780000,0xE6780000,0xE6780000,0xE6780000, -0xE6780000,0x8E780000,0x8E780000,0x8E780000,0x72780001,0x1040620,0x1040620,0x1040620,0x1040620,0x1040620,0x1040620,0xA6100001,0xA6100001,0xA6100001,0x74400001,0x7FC0620,0x7FC0620,0x7FC0620,0x6C0000DA,0x56000622,0xFAA403F5,0xB00620,0xB00620,0xFE9001D4,0xFC8800A4,0xFC7C000D,0xFC7C000D,0xC4780000,0xFC8C0349,0xFE780190,0xAC680000,0xA6100001, -0x1740620,}; -static const uint32_t g_etc1_to_bc7_m6_table178[] = { -0x880000,0x880000,0x880000,0x880000,0x880000,0x880000,0x880000,0x880000,0x880000,0x880000,0x880000,0x880000,0x880000,0x880000,0x880000,0x880000,0x880000,0x880000,0x880000,0x880000,0xC80000,0xC80000,0xC80000,0xC80000,0xC80000,0xC80000,0xC80000,0xC80000,0xC80000,0xC80000,0x1980000, -0x1980000,0x1980000,0x1980000,0x42000001,0x880000,0x880000,0x880000,0x880000,0x880000,0x880000,0x880000,0x880000,0x900000,0x900000,0x900000,0xC80000,0x1200000,0xF80000,0xF80000,0xF80000,0xF80000,0xF80000,0xF80000,0xF80000,0xF80000,0xF80000,0xF80000,0x1700000,0x1700000,0x1700000,0x1700000,0x1700000, -0x1700000,0x3DF80000,0x3DF80000,0x3DF80000,0x7A000001,0x1700000,0x1700000,0x1700000,0x1700000,0x1700000,0x1700000,0x3DF80000,0x3DF80000,0x3DF80000,0x7A000001,0x3DF80000,0x3DF80000,0x3DF80000,0x7A000001,0x7A000001,0x1080000,0xF80000,0xF80000,0x1200000,0x5340000,0x1500000,0x1500000,0x1A00000,0x1200000,0x5340000,0x9FC0000,0x3DF80000, -0x9FC0000,0x1580000,0x1580000,0x1580000,0x1580000,0x3FC0000,0x3FC0000,0x3FC0000,0x85F80000,0x85F80000,0xAA000001,0x3FC0000,0x3FC0000,0x3FC0000,0x85F80000,0x85F80000,0xAA000001,0x85F80000,0x85F80000,0xAA000001,0xAA000001,0x3FC0000,0x3FC0000,0x3FC0000,0x85F80000,0x85F80000,0xAA000001,0x85F80000,0x85F80000,0xAA000001,0xAA000001,0x85F80000, -0x85F80000,0xAA000001,0xAA000001,0xAA000001,0x1900000,0xF6C0000,0x1580000,0x1D40000,0x33FC0000,0x63FC0000,0x75F80000,0x8FF80000,0x1B00000,0x3FC0000,0x63FC0000,0xAA000001,0x63FC0000,0x1C80000,0xAFFC0000,0xD7FC0000,0xE2000001,0xAFFC0000,0xD7FC0000,0xE2000001,0xD7FC0000,0xE2000001,0xE2000001,0xAFFC0000,0xD7FC0000,0xE2000001,0xD7FC0000,0xE2000001, -0xE2000001,0xD7FC0000,0xE2000001,0xE2000001,0xE2000001,0xAFFC0000,0xD7FC0000,0xE2000001,0xD7FC0000,0xE2000001,0xE2000001,0xD7FC0000,0xE2000001,0xE2000001,0xE2000001,0xD7FC0000,0xE2000001,0xE2000001,0xE2000001,0xE2000001,0x7DFC0000,0xBE40000,0xBE40000,0xBDFC0000,0xD3F80000,0xDDFC0000,0xE2000001,0xE2000001,0x9BFC0000,0xC7FC0000,0xE3D80000,0xE2000001, -0xCDFC0000,0x1283680,0xFF0C2270,0xFEF81640,0xE2F4152D,0xFEF41A90,0xFED409ED,0xECD00931,0xFAC00C40,0xDCBC068A,0xC6C00C42,0xFED01F3C,0xFEAC0936,0xECAC0735,0xFE880681,0xE28C0012,0xC8940686,0xE288152B,0xD2780733,0xC0780933,0xAE88152B,0x1B83680,0xFE881A5F,0xE488152C,0xFE380F5A,0xE640064F,0xC65C0C42,0xFC00164D,0xDE0004BA,0xC400067B,0xAE20152B,0x61F83680, -0xCA001A21,0xB8001422,0xA6001D6B,0x92003684,0xFF0C269A,0xF9203102,0xFB243245,0xFEDC16B2,0xFEB808F6,0xFE900086,0xE6940086,0xDC800082,0xFEF82596,0xFEC41488,0xEC6C049F,0xC400067B,0x37FC3680,0x15C152C,0xFF440AD1,0xFF2C04B9,0xE3280481,0xFF240A8C,0xFF0400E9,0xE700007D,0xECF80620,0xD8F00132,0xC6F80622,0xDFC152B,0xFECC06B1,0xE2DC0481,0xFE880681,0xE28C000E, -0xC6B00622,0x89F8152B,0xE000049B,0xC4000672,0xAE00152B,0xDFC152B,0xFECC06B1,0xE2DC0481,0xFE880681,0xE28C000E,0xC6B00622,0x89F8152B,0xE000049B,0xC4000672,0xAE00152B,0x89F8152B,0xE000049B,0xC4000672,0xAE00152B,0xAE00152B,0xFF3C1004,0xFF4C1324,0xF5581329,0xFF140A71,0xFEE804D9,0xFE980052,0xE4AC0002,0xE05C003B,0xFF34103A,0xFF0409B3,0xEE580481,0xC4000672, -0x69FC152B,0xF4152C,0xF4152C,0xF4152C,0xF4152C,0xFED007E4,0xFED007E4,0xFED007E4,0xD0C00620,0xD0C00620,0xAAC00621,0xFEA405E6,0xFEA405E6,0xFEA405E6,0xE0880011,0xE0880011,0xAE9C0131,0xBA880480,0xBA880480,0xA680007A,0x92880482,0x168152B,0x168152B,0x168152B,0xF2300621,0xF2300621,0xAA780621,0xD8000491,0xD8000491,0xAC240006,0x923C0482,0x39F8152B, -0x39F8152B,0x9C0007A3,0x8A000793,0x7800152B,0xFED80DAA,0xFEEC11D1,0xF4152C,0xFEC40794,0xFEAC0275,0xFE900022,0xF88C0038,0xD0880001,0xFEBC0D2A,0xFEB006D1,0xE2740481,0xAC240006,0x3FC152B,0x1280480,0x1280480,0x1280480,0x1280480,0xFCFC0014,0xFCFC0014,0xFCFC0014,0xC2F80000,0xC2F80000,0xAAF80001,0x1B80480,0x1B80480,0x1B80480,0xD6A00001,0xD6A00001, -0xACC80001,0x61F80480,0x61F80480,0xAA380001,0x92000482,0x1B80480,0x1B80480,0x1B80480,0xD6A00001,0xD6A00001,0xACC80001,0x61F80480,0x61F80480,0xAA380001,0x92000482,0x61F80480,0x61F80480,0xAA380001,0x92000482,0x92000482,0xFF1002D2,0xF9200349,0x1280480,0xFCF401E1,0xFEC80082,0xFC9C0001,0xE8A80000,0xD2800000,0xFEF802FD,0xFEDC01A5,0x37FC0480,0xAA380001, -0x37FC0480,0x1900620,0xFF74022D,0xFF580000,0xE3580001,0x59FC0620,0xFF140089,0xE5200001,0xADFC0620,0xE2740001,0xC6000622,0x59FC0620,0xFF140089,0xE5200001,0xADFC0620,0xE2740001,0xC6000622,0xADFC0620,0xE2740001,0xC6000622,0xC6000622,0x59FC0620,0xFF140089,0xE5200001,0xADFC0620,0xE2740001,0xC6000622,0xADFC0620,0xE2740001,0xC6000622,0xC6000622,0xADFC0620, -0xE2740001,0xC6000622,0xC6000622,0xC6000622,0xFF780515,0xDA80620,0xFF8C0548,0xFF5803C8,0xFF100249,0xFEAC0041,0xE2B80001,0xE2280001,0xFF700515,0xFF40037A,0xECC40000,0xC6000622,0x99FC0620,0xC00620,0xC00620,0xC00620,0xC00620,0xC00620,0xC00620,0xC00620,0xC00620,0xC00620,0xC00620,0xEE880000,0xEE880000,0xEE880000,0xEE880000,0xEE880000, -0xEE880000,0x96880000,0x96880000,0x96880000,0x7A880001,0x11C0620,0x11C0620,0x11C0620,0x11C0620,0x11C0620,0x11C0620,0xAE200001,0xAE200001,0xAE200001,0x7C500001,0x13FC0620,0x13FC0620,0x13FC0620,0x720000A2,0x5E000622,0xFEAC041D,0xC00620,0xC00620,0xFEA001F9,0xFC9C00C8,0xFE900019,0xFE900019,0xCC880000,0xFC9C0372,0xFC9001C2,0xB4780000,0xAE200001, -0x1980620,}; -static const uint32_t g_etc1_to_bc7_m6_table179[] = { -0x980000,0x980000,0x980000,0x980000,0x980000,0x980000,0x980000,0x980000,0x980000,0x980000,0x980000,0x980000,0x980000,0x980000,0x980000,0x980000,0x980000,0x980000,0x980000,0x980000,0xE00000,0xE00000,0xE00000,0xE00000,0xE00000,0xE00000,0xE00000,0xE00000,0xE00000,0xE00000,0x1CC0000, -0x1CC0000,0x1CC0000,0x1CC0000,0x4A000001,0x980000,0x980000,0x980000,0x980000,0x980000,0x980000,0x980000,0x980000,0x8A00000,0x8A00000,0x8A00000,0xE00000,0x1400000,0x1080000,0x1080000,0x1080000,0x1080000,0x1080000,0x1080000,0x1080000,0x1080000,0x1080000,0x1080000,0x1880000,0x1880000,0x1880000,0x1880000,0x1880000, -0x1880000,0x49F80000,0x49F80000,0x49F80000,0x82000001,0x1880000,0x1880000,0x1880000,0x1880000,0x1880000,0x1880000,0x49F80000,0x49F80000,0x49F80000,0x82000001,0x49F80000,0x49F80000,0x49F80000,0x82000001,0x82000001,0x5180000,0x1080000,0x1080000,0x1340000,0x14C0000,0x1680000,0x1680000,0x1BC0000,0x1340000,0x14C0000,0x19FC0000,0x49F80000, -0x19FC0000,0x1680000,0x1680000,0x1680000,0x1680000,0x1BFC0000,0x1BFC0000,0x1BFC0000,0x91F80000,0x91F80000,0xB2000001,0x1BFC0000,0x1BFC0000,0x1BFC0000,0x91F80000,0x91F80000,0xB2000001,0x91F80000,0x91F80000,0xB2000001,0xB2000001,0x1BFC0000,0x1BFC0000,0x1BFC0000,0x91F80000,0x91F80000,0xB2000001,0x91F80000,0x91F80000,0xB2000001,0xB2000001,0x91F80000, -0x91F80000,0xB2000001,0xB2000001,0xB2000001,0x7A00000,0x1800000,0x1680000,0x3E80000,0x47FC0000,0x73FC0000,0x81FC0000,0x99FC0000,0x1C40000,0x1BFC0000,0x73FC0000,0xB2000001,0x73FC0000,0x1D80000,0xC7FC0000,0xE3FC0000,0xEA000001,0xC7FC0000,0xE3FC0000,0xEA000001,0xE3FC0000,0xEA000001,0xEA000001,0xC7FC0000,0xE3FC0000,0xEA000001,0xE3FC0000,0xEA000001, -0xEA000001,0xE3FC0000,0xEA000001,0xEA000001,0xEA000001,0xC7FC0000,0xE3FC0000,0xEA000001,0xE3FC0000,0xEA000001,0xEA000001,0xE3FC0000,0xEA000001,0xEA000001,0xEA000001,0xE3FC0000,0xEA000001,0xEA000001,0xEA000001,0xEA000001,0xA3FC0000,0x1F80000,0x1F80000,0xD1FC0000,0xDFFC0000,0xE7FC0000,0xEA000001,0xEA000001,0xB9FC0000,0xD7FC0000,0xEBE80000,0xEA000001, -0xDDF80000,0x1383680,0xFF1823A4,0xFF0816F9,0xEB04152D,0xFF001C08,0xFEE40B51,0xF4E00931,0xFED40C50,0xE4CC068A,0xCED00C42,0xFEE8206C,0xFEC00AD1,0xF4BC0735,0xFEA00711,0xEA9C0012,0xD0A40686,0xEA98152B,0xDA880733,0xC8880933,0xB698152B,0x1D03680,0xFEA01B7F,0xEC98152C,0xFE5810AA,0xEE50064F,0xCE6C0C42,0xFE14169F,0xEA00048A,0xCC10067B,0xB630152B,0x6DF83680, -0xD0001959,0xBE001302,0xAC001C83,0x9A003684,0xFF2027A2,0xFF2C311A,0xFF2C328D,0xFEF0188A,0xFECC0ADE,0xFEAC0156,0xEEA40086,0xE4900082,0xFF0026DC,0xFEDC1672,0xF47C049F,0xCC10067B,0x45FC3680,0x16C152C,0xFF500B91,0xFF380529,0xEB380481,0xFF3C0B4C,0xFF14019D,0xEF10007D,0xF5080620,0xE1000132,0xCF080622,0x25FC152B,0xFEF00771,0xEAEC0481,0xFEAC06F1,0xEA9C000E, -0xCEC00622,0x95F8152B,0xEA000489,0xCE000653,0xB600152B,0x25FC152B,0xFEF00771,0xEAEC0481,0xFEAC06F1,0xEA9C000E,0xCEC00622,0x95F8152B,0xEA000489,0xCE000653,0xB600152B,0x95F8152B,0xEA000489,0xCE000653,0xB600152B,0xB600152B,0xFF501055,0xFD681342,0xFD681329,0xFF300B69,0xFEFC05D5,0xFEC000CD,0xECBC0002,0xE86C003B,0xFF44109B,0xFF180AA9,0xF6680481,0xCE000653, -0x79FC152B,0x104152C,0x104152C,0x104152C,0x104152C,0xFEDC084C,0xFEDC084C,0xFEDC084C,0xD8D00620,0xD8D00620,0xB2D00621,0xFEB00662,0xFEB00662,0xFEB00662,0xE8980011,0xE8980011,0xB6AC0131,0xC2980480,0xC2980480,0xAE90007A,0x9A980482,0x180152B,0x180152B,0x180152B,0xFA400621,0xFA400621,0xB2880621,0xE6040481,0xE6040481,0xB4340006,0x9A4C0482,0x45F8152B, -0x45F8152B,0xA6000749,0x94000722,0x8000152B,0xFEE80E01,0xF6FC122C,0x104152C,0xFED40821,0xFEC00309,0xFEA40058,0xFCA0003D,0xD8980001,0xFED00D73,0xFEBC076A,0xEA840481,0xB4340006,0x13FC152B,0x1380480,0x1380480,0x1380480,0x1380480,0xFF0C0028,0xFF0C0028,0xFF0C0028,0xCB080000,0xCB080000,0xB3080001,0x1D00480,0x1D00480,0x1D00480,0xDEB00001,0xDEB00001, -0xB4D80001,0x6DF80480,0x6DF80480,0xB2480001,0x9A000482,0x1D00480,0x1D00480,0x1D00480,0xDEB00001,0xDEB00001,0xB4D80001,0x6DF80480,0x6DF80480,0xB2480001,0x9A000482,0x6DF80480,0x6DF80480,0xB2480001,0x9A000482,0x9A000482,0xFF2002F9,0xFF2C0355,0x1380480,0xFD040202,0xFEDC00AA,0xFEB40008,0xF0B80000,0xDA900000,0xFD100320,0xFEE801D4,0x45FC0480,0xB2480001, -0x45FC0480,0x1A00620,0xFF8002A1,0xFF6C001D,0xEB680001,0x71FC0620,0xFF3800E9,0xED300001,0xB9FC0620,0xEA840001,0xCE000622,0x71FC0620,0xFF3800E9,0xED300001,0xB9FC0620,0xEA840001,0xCE000622,0xB9FC0620,0xEA840001,0xCE000622,0xCE000622,0x71FC0620,0xFF3800E9,0xED300001,0xB9FC0620,0xEA840001,0xCE000622,0xB9FC0620,0xEA840001,0xCE000622,0xCE000622,0xB9FC0620, -0xEA840001,0xCE000622,0xCE000622,0xCE000622,0xFF8C0548,0x1BC0620,0xF79C057D,0xFF6C03F9,0xFF3C02B1,0xFED40092,0xEAC80001,0xEA380001,0xF7880548,0xFF5803DA,0xF4D40000,0xCE000622,0xA7FC0620,0xD00620,0xD00620,0xD00620,0xD00620,0xD00620,0xD00620,0xD00620,0xD00620,0xD00620,0xD00620,0xF6980000,0xF6980000,0xF6980000,0xF6980000,0xF6980000, -0xF6980000,0x9E980000,0x9E980000,0x9E980000,0x82980001,0x1340620,0x1340620,0x1340620,0x1340620,0x1340620,0x1340620,0xB6300001,0xB6300001,0xB6300001,0x84600001,0x1FF80620,0x1FF80620,0x1FF80620,0x7E00006A,0x66000622,0xFAC40424,0xD00620,0xD00620,0xFCB80221,0xFEA800E9,0xFCA00034,0xFCA00034,0xD4980000,0xF8B0039D,0xFEA001E1,0xBC880000,0xB6300001, -0x1B80620,}; -static const uint32_t g_etc1_to_bc7_m6_table180[] = { -0xA80001,0xA80001,0xA80001,0xA80001,0xA80001,0xA80001,0xA80001,0xA80001,0xA80001,0xA80001,0xA80001,0xA80001,0xA80001,0xA80001,0xA80001,0xA80001,0xA80001,0xA80001,0xA80001,0xA80001,0xFC0000,0xFC0000,0xFC0000,0xFC0000,0xFC0000,0xFC0000,0xFC0000,0xFC0000,0xFC0000,0xFC0000,0x3F80000, -0x3F80000,0x3F80000,0x3F80000,0x54000000,0xA80001,0xA80001,0xA80001,0xA80001,0xA80001,0xA80001,0xA80001,0xA80001,0x2B40000,0x2B40000,0x2B40000,0xFC0000,0x1680000,0x1180001,0x1180001,0x1180001,0x1180001,0x1180001,0x1180001,0x1180001,0x1180001,0x1180001,0x1180001,0x1A40000,0x1A40000,0x1A40000,0x1A40000,0x1A40000, -0x1A40000,0x57F80000,0x57F80000,0x57F80000,0x8C000000,0x1A40000,0x1A40000,0x1A40000,0x1A40000,0x1A40000,0x1A40000,0x57F80000,0x57F80000,0x57F80000,0x8C000000,0x57F80000,0x57F80000,0x57F80000,0x8C000000,0x8C000000,0x12C0000,0x1180001,0x1180001,0x1480000,0x3600000,0x1800000,0x1800000,0x1D80000,0x1480000,0x3600000,0x29FC0000,0x57F80000, -0x29FC0000,0x1780001,0x1780001,0x1780001,0x1780001,0x37FC0000,0x37FC0000,0x37FC0000,0x9DFC0000,0x9DFC0000,0xBC000000,0x37FC0000,0x37FC0000,0x37FC0000,0x9DFC0000,0x9DFC0000,0xBC000000,0x9DFC0000,0x9DFC0000,0xBC000000,0xBC000000,0x37FC0000,0x37FC0000,0x37FC0000,0x9DFC0000,0x9DFC0000,0xBC000000,0x9DFC0000,0x9DFC0000,0xBC000000,0xBC000000,0x9DFC0000, -0x9DFC0000,0xBC000000,0xBC000000,0xBC000000,0x1B80000,0x1940000,0x1780001,0x9FC0000,0x5DFC0000,0x83FC0000,0x91FC0000,0xA5FC0000,0x3D80000,0x37FC0000,0x83FC0000,0xBC000000,0x83FC0000,0x1E80001,0xE3FC0000,0xF1F80000,0xF4000000,0xE3FC0000,0xF1F80000,0xF4000000,0xF1F80000,0xF4000000,0xF4000000,0xE3FC0000,0xF1F80000,0xF4000000,0xF1F80000,0xF4000000, -0xF4000000,0xF1F80000,0xF4000000,0xF4000000,0xF4000000,0xE3FC0000,0xF1F80000,0xF4000000,0xF1F80000,0xF4000000,0xF4000000,0xF1F80000,0xF4000000,0xF4000000,0xF4000000,0xF1F80000,0xF4000000,0xF4000000,0xF4000000,0xF4000000,0xD1FC0000,0x67FC0000,0x67FC0000,0xE7FC0000,0xEFFC0000,0xF3F80000,0xF4000000,0xF4000000,0xDBFC0000,0xEBFC0000,0xF5DC0000,0xF4000000, -0xEDFC0000,0x1483684,0xFF3024F4,0xFF1C182C,0xF514152B,0xFF181DD4,0xFEFC0D2B,0xFCF00933,0xFEE40CC2,0xEEE00686,0xD8E00C42,0xFF0021E4,0xFED80CD7,0xFCCC0733,0xFEB80823,0xF2AC0012,0xD8B4068A,0xF4A8152C,0xE2980735,0xD0980931,0xBEA8152D,0x3E83680,0xFEB81CE9,0xF4AC152B,0xFE7C1242,0xF8640651,0xD87C0C40,0xFE3817A1,0xF20C0485,0xD618067D,0xBE40152D,0x79FC3680, -0xDC001883,0xCA0011EA,0xB8001BA1,0xA4003680,0xFF3428DF,0xFB4431C4,0xFD4832DC,0xFF081AA2,0xFEE80D2F,0xFEC002B7,0xF8B80082,0xECA00086,0xFF1827ED,0xFEF418C3,0xFC90049F,0xD618067D,0x57FC3680,0x180152B,0xFF680C82,0xFF4C05EB,0xF5480482,0xFF500C19,0xFF2C02AA,0xF924007A,0xFD1C0621,0xEB140131,0xD9180621,0x41FC152B,0xFF080866,0xF4FC0480,0xFECC07B9,0xF2AC0011, -0xD8D00620,0xA1FC152B,0xF4000480,0xD6000631,0xBE00152C,0x41FC152B,0xFF080866,0xF4FC0480,0xFECC07B9,0xF2AC0011,0xD8D00620,0xA1FC152B,0xF4000480,0xD6000631,0xBE00152C,0xA1FC152B,0xF4000480,0xD6000631,0xBE00152C,0xBE00152C,0xFF64110D,0xF57813A3,0xF77C138B,0xFF400C54,0xFF100726,0xFEDC01AD,0xF4D00001,0xF2800038,0xFF5C10F2,0xFF2C0BE1,0xFE7C0484,0xD6000631, -0x89FC152B,0x114152B,0x114152B,0x114152B,0x114152B,0xFEF408D3,0xFEF408D3,0xFEF408D3,0xE0E40622,0xE0E40622,0xBCE00622,0xFED006DB,0xFED006DB,0xFED006DB,0xF2AC000E,0xF2AC000E,0xC0C00132,0xCAAC0481,0xCAAC0481,0xB6A0007D,0xA4A80481,0x398152B,0x398152B,0x398152B,0xFE580629,0xFE580629,0xBC980620,0xEE180481,0xEE180481,0xBC480005,0xA45C0480,0x51FC152B, -0x51FC152B,0xB20006E6,0x9C000690,0x8A00152C,0xFF040E83,0xFF0C1233,0x114152B,0xFEE808EA,0xFED403B6,0xFEBC00B2,0xFEB4004B,0xE0A80002,0xFEE40E19,0xFED007FD,0xF4940480,0xBC480005,0x23FC152B,0x1480482,0x1480482,0x1480482,0x1480482,0xFF24004A,0xFF24004A,0xFF24004A,0xD5180001,0xD5180001,0xBD180001,0x3E80480,0x3E80480,0x3E80480,0xE8C00001,0xE8C00001, -0xBCEC0000,0x79FC0480,0x79FC0480,0xBC540000,0xA4000480,0x3E80480,0x3E80480,0x3E80480,0xE8C00001,0xE8C00001,0xBCEC0000,0x79FC0480,0x79FC0480,0xBC540000,0xA4000480,0x79FC0480,0x79FC0480,0xBC540000,0xA4000480,0xA4000480,0xFB340322,0xFB440372,0x1480482,0xFF180225,0xFEF000E8,0xFED00022,0xF8CC0000,0xE4A00000,0xF9280349,0xFF040208,0x57FC0480,0xBC540000, -0x57FC0480,0x1B00622,0xFF980321,0xFF7C007A,0xF5780001,0x8DFC0620,0xFF580185,0xF5440000,0xC7FC0620,0xF4940000,0xD8000620,0x8DFC0620,0xFF580185,0xF5440000,0xC7FC0620,0xF4940000,0xD8000620,0xC7FC0620,0xF4940000,0xD8000620,0xD8000620,0x8DFC0620,0xFF580185,0xF5440000,0xC7FC0620,0xF4940000,0xD8000620,0xC7FC0620,0xF4940000,0xD8000620,0xD8000620,0xC7FC0620, -0xF4940000,0xD8000620,0xD8000620,0xD8000620,0xF7A4057D,0xFCC0620,0xFFAC0581,0xFF84045D,0xFF500335,0xFF040112,0xF4D40000,0xF4440000,0xFF98054A,0xFD800451,0xFCE80001,0xD8000620,0xB9FC0620,0xE00622,0xE00622,0xE00622,0xE00622,0xE00622,0xE00622,0xE00622,0xE00622,0xE00622,0xE00622,0xFCAC0001,0xFCAC0001,0xFCAC0001,0xFCAC0001,0xFCAC0001, -0xFCAC0001,0xA8A80001,0xA8A80001,0xA8A80001,0x8CA80001,0x1500620,0x1500620,0x1500620,0x1500620,0x1500620,0x1500620,0xC0400001,0xC0400001,0xC0400001,0x8C740000,0x2DF80620,0x2DF80620,0x2DF80620,0x88000041,0x70000620,0xF4D80451,0xE00622,0xE00622,0xFECC0242,0xFEBC0115,0xFEB4004A,0xFEB4004A,0xDCAC0001,0xFEBC03A9,0xFEB40202,0xC49C0000,0xC0400001, -0x1E00620,}; -static const uint32_t g_etc1_to_bc7_m6_table181[] = { -0xB80001,0xB80001,0xB80001,0xB80001,0xB80001,0xB80001,0xB80001,0xB80001,0xB80001,0xB80001,0xB80001,0xB80001,0xB80001,0xB80001,0xB80001,0xB80001,0xB80001,0xB80001,0xB80001,0xB80001,0x1140000,0x1140000,0x1140000,0x1140000,0x1140000,0x1140000,0x1140000,0x1140000,0x1140000,0x1140000,0xFF80000, -0xFF80000,0xFF80000,0xFF80000,0x5C000000,0xB80001,0xB80001,0xB80001,0xB80001,0xB80001,0xB80001,0xB80001,0xB80001,0xAC40000,0xAC40000,0xAC40000,0x1140000,0x18C0000,0x1280001,0x1280001,0x1280001,0x1280001,0x1280001,0x1280001,0x1280001,0x1280001,0x1280001,0x1280001,0x1BC0000,0x1BC0000,0x1BC0000,0x1BC0000,0x1BC0000, -0x1BC0000,0x61FC0000,0x61FC0000,0x61FC0000,0x94000000,0x1BC0000,0x1BC0000,0x1BC0000,0x1BC0000,0x1BC0000,0x1BC0000,0x61FC0000,0x61FC0000,0x61FC0000,0x94000000,0x61FC0000,0x61FC0000,0x61FC0000,0x94000000,0x94000000,0x73C0000,0x1280001,0x1280001,0x5580000,0x3740000,0x1940000,0x1940000,0x1F40000,0x5580000,0x3740000,0x39FC0000,0x61FC0000, -0x39FC0000,0x1880001,0x1880001,0x1880001,0x1880001,0x4FFC0000,0x4FFC0000,0x4FFC0000,0xA9FC0000,0xA9FC0000,0xC4000000,0x4FFC0000,0x4FFC0000,0x4FFC0000,0xA9FC0000,0xA9FC0000,0xC4000000,0xA9FC0000,0xA9FC0000,0xC4000000,0xC4000000,0x4FFC0000,0x4FFC0000,0x4FFC0000,0xA9FC0000,0xA9FC0000,0xC4000000,0xA9FC0000,0xA9FC0000,0xC4000000,0xC4000000,0xA9FC0000, -0xA9FC0000,0xC4000000,0xC4000000,0xC4000000,0x5C80000,0x1A40000,0x1880001,0x27FC0000,0x71FC0000,0x93FC0000,0x9FF80000,0xB1F80000,0x3EC0000,0x4FFC0000,0x93FC0000,0xC4000000,0x93FC0000,0x1F80001,0xFBFC0000,0xFDF80000,0xFC000000,0xFBFC0000,0xFDF80000,0xFC000000,0xFDF80000,0xFC000000,0xFC000000,0xFBFC0000,0xFDF80000,0xFC000000,0xFDF80000,0xFC000000, -0xFC000000,0xFDF80000,0xFC000000,0xFC000000,0xFC000000,0xFBFC0000,0xFDF80000,0xFC000000,0xFDF80000,0xFC000000,0xFC000000,0xFDF80000,0xFC000000,0xFC000000,0xFC000000,0xFDF80000,0xFC000000,0xFC000000,0xFC000000,0xFC000000,0xF7FC0000,0xE7FC0000,0xE7FC0000,0xFBFC0000,0xFDF80000,0xFDF80000,0xFC000000,0xFC000000,0xF9FC0000,0xFBFC0000,0xFDEC0000,0xFC000000, -0xFDF80000,0x1583684,0xFF44261B,0xFF2C1953,0xFD24152B,0xFF241F94,0xFF100F1F,0xFF00095F,0xFEFC0D92,0xF6F00686,0xE0F00C42,0xFF18234C,0xFEF00EDF,0xFEDC0767,0xFECC099A,0xFABC0012,0xE0C4068A,0xFCB8152C,0xEAA80735,0xD8A80931,0xC6B8152D,0x7FC3680,0xFED81E87,0xFCBC152B,0xFE9413F2,0xFE700655,0xE08C0C40,0xFE5818EB,0xFA1C0485,0xDE28067D,0xC650152D,0x85FC3680, -0xE60017F0,0xD0001112,0xBE001AD5,0xAC003680,0xFF3C29CC,0xFF4C3204,0xFF4C3354,0xFF181C7A,0xFEFC0F77,0xFED40452,0xFECC0089,0xF4B00086,0xFF342916,0xFF101AAA,0xFEA404D3,0xDE28067D,0x65FC3680,0x190152B,0xFF740D62,0xFF6406C3,0xFD580482,0xFF680D01,0xFF4003E6,0xFF340081,0xFF2C0641,0xF3240131,0xE1280621,0x59FC152B,0xFF200966,0xFD0C0480,0xFEF00889,0xFABC0011, -0xE0E00620,0xADFC152B,0xFC100480,0xE0000624,0xC600152C,0x59FC152B,0xFF200966,0xFD0C0480,0xFEF00889,0xFABC0011,0xE0E00620,0xADFC152B,0xFC100480,0xE0000624,0xC600152C,0xADFC152B,0xFC100480,0xE0000624,0xC600152C,0xC600152C,0xFF781162,0xFD8813A3,0xFF8C138B,0xFF540D51,0xFF28086E,0xFEF002BB,0xFCE00001,0xFA900038,0xFD7411AE,0xFF480C8E,0xFEA004D1,0xE0000624, -0x99FC152B,0x124152B,0x124152B,0x124152B,0x124152B,0xFF00095B,0xFF00095B,0xFF00095B,0xE8F40622,0xE8F40622,0xC4F00622,0xFEDC0763,0xFEDC0763,0xFEDC0763,0xFABC000E,0xFABC000E,0xC8D00132,0xD2BC0481,0xD2BC0481,0xBEB0007D,0xACB80481,0x3B0152B,0x3B0152B,0x3B0152B,0xFE700651,0xFE700651,0xC4A80620,0xF6280481,0xF6280481,0xC4580005,0xAC6C0480,0x5DFC152B, -0x5DFC152B,0xBE0006A6,0xA6000631,0x9200152C,0xFF100EED,0xF9201286,0x124152B,0xFEF80996,0xFEE40481,0xFECC0139,0xFECC0085,0xE8B80002,0xFEF80E66,0xFEE808E2,0xFCA40480,0xC4580005,0x33FC152B,0x1580482,0x1580482,0x1580482,0x1580482,0xFF34007D,0xFF34007D,0xFF34007D,0xDD280001,0xDD280001,0xC5280001,0x7FC0480,0x7FC0480,0x7FC0480,0xF0D00001,0xF0D00001, -0xC4FC0000,0x85FC0480,0x85FC0480,0xC4640000,0xAC000480,0x7FC0480,0x7FC0480,0x7FC0480,0xF0D00001,0xF0D00001,0xC4FC0000,0x85FC0480,0x85FC0480,0xC4640000,0xAC000480,0x85FC0480,0x85FC0480,0xC4640000,0xAC000480,0xAC000480,0xF7480349,0xFF4C0392,0x1580482,0xFD300265,0xFD140120,0xFEEC003D,0xFCE00001,0xECB00000,0xFF34034D,0xFF18022D,0x65FC0480,0xC4640000, -0x65FC0480,0x1C00622,0xFFB003A9,0xFF9400FA,0xFD880001,0xA5FC0620,0xFF70021D,0xFD540000,0xD3FC0620,0xFCA40000,0xE0000620,0xA5FC0620,0xFF70021D,0xFD540000,0xD3FC0620,0xFCA40000,0xE0000620,0xD3FC0620,0xFCA40000,0xE0000620,0xE0000620,0xA5FC0620,0xFF70021D,0xFD540000,0xD3FC0620,0xFCA40000,0xE0000620,0xD3FC0620,0xFCA40000,0xE0000620,0xE0000620,0xD3FC0620, -0xFCA40000,0xE0000620,0xE0000620,0xE0000620,0xFFB4057D,0x1E00620,0xF9C005B2,0xFF9404B2,0xFF7C03A9,0xFF2C01BA,0xFCE40000,0xFC540000,0xFFAC0581,0xFF940488,0xFF10001D,0xE0000620,0xC7FC0620,0xF00622,0xF00622,0xF00622,0xF00622,0xF00622,0xF00622,0xF00622,0xF00622,0xF00622,0xF00622,0xFEBC0005,0xFEBC0005,0xFEBC0005,0xFEBC0005,0xFEBC0005, -0xFEBC0005,0xB0B80001,0xB0B80001,0xB0B80001,0x94B80001,0x1680620,0x1680620,0x1680620,0x1680620,0x1680620,0x1680620,0xC8500001,0xC8500001,0xC8500001,0x94840000,0x39F80620,0x39F80620,0x39F80620,0x90000020,0x78000620,0xFCE80451,0xF00622,0xF00622,0xFED80271,0xFED0013D,0xFEC4006A,0xFEC4006A,0xE4BC0001,0xFCD403C8,0xFAC80244,0xCCAC0000,0xC8500001, -0x3FC0620,}; -static const uint32_t g_etc1_to_bc7_m6_table182[] = { -0xC80001,0xC80001,0xC80001,0xC80001,0xC80001,0xC80001,0xC80001,0xC80001,0xC80001,0xC80001,0xC80001,0xC80001,0xC80001,0xC80001,0xC80001,0xC80001,0xC80001,0xC80001,0xC80001,0xC80001,0x12C0000,0x12C0000,0x12C0000,0x12C0000,0x12C0000,0x12C0000,0x12C0000,0x12C0000,0x12C0000,0x12C0000,0x1BF80000, -0x1BF80000,0x1BF80000,0x1BF80000,0x64000000,0xC80001,0xC80001,0xC80001,0xC80001,0xC80001,0xC80001,0xC80001,0xC80001,0xD80000,0xD80000,0xD80000,0x12C0000,0x1AC0000,0x1380001,0x1380001,0x1380001,0x1380001,0x1380001,0x1380001,0x1380001,0x1380001,0x1380001,0x1380001,0x3D00000,0x3D00000,0x3D00000,0x3D00000,0x3D00000, -0x3D00000,0x6DFC0000,0x6DFC0000,0x6DFC0000,0x9C000000,0x3D00000,0x3D00000,0x3D00000,0x3D00000,0x3D00000,0x3D00000,0x6DFC0000,0x6DFC0000,0x6DFC0000,0x9C000000,0x6DFC0000,0x6DFC0000,0x6DFC0000,0x9C000000,0x9C000000,0xF4C0000,0x1380001,0x1380001,0x16C0000,0x3880000,0x1AC0000,0x1AC0000,0xFFC0000,0x16C0000,0x3880000,0x47FC0000,0x6DFC0000, -0x47FC0000,0x1980001,0x1980001,0x1980001,0x1980001,0x69FC0000,0x69FC0000,0x69FC0000,0xB5FC0000,0xB5FC0000,0xCC000000,0x69FC0000,0x69FC0000,0x69FC0000,0xB5FC0000,0xB5FC0000,0xCC000000,0xB5FC0000,0xB5FC0000,0xCC000000,0xCC000000,0x69FC0000,0x69FC0000,0x69FC0000,0xB5FC0000,0xB5FC0000,0xCC000000,0xB5FC0000,0xB5FC0000,0xCC000000,0xCC000000,0xB5FC0000, -0xB5FC0000,0xCC000000,0xCC000000,0xCC000000,0x1DC0000,0x3B40000,0x1980001,0x45FC0000,0x85FC0000,0xA1FC0000,0xABFC0000,0xBBFC0000,0xBFC0000,0x69FC0000,0xA1FC0000,0xCC000000,0xA1FC0000,0x1FC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000, -0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xF7FC0001,0xF7FC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFFF00000,0xFE000000, -0xFFFC0000,0x16832DC,0xFF50247F,0xFF381933,0xFF34152B,0xFF3C1E14,0xFF200F63,0xFF1809EB,0xFF080CD6,0xF9000656,0xE5000B06,0xFF24213C,0xFF040F22,0xFEF407FB,0xFEE40906,0xFED00012,0xE8D4055E,0xFECC12C5,0xEEBC0679,0xDCBC0799,0xCCC812C5,0x19FC32DC,0xFEE41DCF,0xFED0152B,0xFEB81322,0xFE940691,0xE4A00B04,0xFE701733,0xFE380481,0xE4400525,0xCC6412C4,0x8FF832DC, -0xF200169C,0xDC000E76,0xC4001765,0xB20032DC,0xFF502793,0xF9602F06,0xFB642FFB,0xFF2C1B7E,0xFF0C0F8A,0xFEE804E2,0xFEDC00E2,0xFAC4003B,0xFF3C26EC,0xFF1819CA,0xFEB804ED,0xE4400525,0x71FC32DC,0x19C12C3,0xFF800C56,0xFF7006A3,0xFF680482,0xFF740B9D,0xFF5803DE,0xFF4400A9,0xFF400533,0xF73400C2,0xE53804E5,0x6BFC12C3,0xFF3808E2,0xFF200482,0xFF080785,0xFCD80005, -0xE4F404E4,0xB7F812C3,0xFE380480,0xE41404E4,0xCC0012C4,0x6BFC12C3,0xFF3808E2,0xFF200482,0xFF080785,0xFCD80005,0xE4F404E4,0xB7F812C3,0xFE380480,0xE41404E4,0xCC0012C4,0xB7F812C3,0xFE380480,0xE41404E4,0xCC0012C4,0xCC0012C4,0xFF800FC5,0xFF8C1193,0xF59811A2,0xFF6C0C12,0xFF4807DA,0xFF1002DD,0xFEF8000D,0xFCB00018,0xFF780FAA,0xFF5C0B8A,0xFED004E3,0xE41404E4, -0xA3FC12C3,0x134152B,0x134152B,0x134152B,0x134152B,0xFF1809EB,0xFF1809EB,0xFF1809EB,0xF1040622,0xF1040622,0xCD000622,0xFEF407FB,0xFEF407FB,0xFEF407FB,0xFED00012,0xFED00012,0xD0E00132,0xDACC0481,0xDACC0481,0xC6C0007D,0xB4C80481,0x1C8152B,0x1C8152B,0x1C8152B,0xFE940691,0xFE940691,0xCCB80620,0xFE380481,0xFE380481,0xCC680005,0xB47C0480,0x69FC152B, -0x69FC152B,0xC4000672,0xAC0005E1,0x9A00152C,0xFF200F46,0xFF2C1292,0x134152B,0xFF100A32,0xFEF40542,0xFEE001CB,0xFEDC00E2,0xF0C80002,0xFF140ED2,0xFEF4097A,0xFEB80489,0xCC680005,0x41FC152B,0x1680482,0x1680482,0x1680482,0x1680482,0xFF4400A9,0xFF4400A9,0xFF4400A9,0xE5380001,0xE5380001,0xCD380001,0x1FFC0480,0x1FFC0480,0x1FFC0480,0xF8E00001,0xF8E00001, -0xCD0C0000,0x91FC0480,0x91FC0480,0xCC740000,0xB4000480,0x1FFC0480,0x1FFC0480,0x1FFC0480,0xF8E00001,0xF8E00001,0xCD0C0000,0x91FC0480,0x91FC0480,0xCC740000,0xB4000480,0x91FC0480,0x91FC0480,0xCC740000,0xB4000480,0xB4000480,0xFF580349,0xFB64039D,0x1680482,0xFF440288,0xFD280154,0xFEFC006D,0xFEF8000D,0xF4C00000,0xFD4C0372,0xFF300269,0x75FC0480,0xCC740000, -0x75FC0480,0x1CC04E2,0xFFBC0305,0xFFA000EA,0xFF980001,0xB5FC04E2,0xFF8801CD,0xFF680000,0xDBF804E2,0xFECC0000,0xE40004E4,0xB5FC04E2,0xFF8801CD,0xFF680000,0xDBF804E2,0xFECC0000,0xE40004E4,0xDBF804E2,0xFECC0000,0xE40004E4,0xE40004E4,0xB5FC04E2,0xFF8801CD,0xFF680000,0xDBF804E2,0xFECC0000,0xE40004E4,0xDBF804E2,0xFECC0000,0xE40004E4,0xE40004E4,0xDBF804E2, -0xFECC0000,0xE40004E4,0xE40004E4,0xE40004E4,0xF9C40480,0xDE804E2,0xFDC80482,0xFFB003CA,0xFF900305,0xFF480175,0xFF080000,0xFE840000,0xF3C40480,0xFFA003B5,0xFF300028,0xE40004E4,0xD1FC04E2,0x1000622,0x1000622,0x1000622,0x1000622,0x1000622,0x1000622,0x1000622,0x1000622,0x1000622,0x1000622,0xFED00012,0xFED00012,0xFED00012,0xFED00012,0xFED00012, -0xFED00012,0xB8C80001,0xB8C80001,0xB8C80001,0x9CC80001,0x1800620,0x1800620,0x1800620,0x1800620,0x1800620,0x1800620,0xD0600001,0xD0600001,0xD0600001,0x9C940000,0x45F80620,0x45F80620,0x45F80620,0x9A00000D,0x80000620,0xF4F80482,0x1000622,0x1000622,0xFEE8029A,0xFEE4016D,0xFEDC0091,0xFEDC0091,0xECCC0001,0xF8E803F5,0xFED80269,0xD4BC0000,0xD0600001, -0x13FC0620,}; -static const uint32_t g_etc1_to_bc7_m6_table183[] = { -0xD80001,0xD80001,0xD80001,0xD80001,0xD80001,0xD80001,0xD80001,0xD80001,0xD80001,0xD80001,0xD80001,0xD80001,0xD80001,0xD80001,0xD80001,0xD80001,0xD80001,0xD80001,0xD80001,0xD80001,0x1440000,0x1440000,0x1440000,0x1440000,0x1440000,0x1440000,0x1440000,0x1440000,0x1440000,0x1440000,0x27F80000, -0x27F80000,0x27F80000,0x27F80000,0x6C000000,0xD80001,0xD80001,0xD80001,0xD80001,0xD80001,0xD80001,0xD80001,0xD80001,0xE80000,0xE80000,0xE80000,0x1440000,0x1D00000,0x1480001,0x1480001,0x1480001,0x1480001,0x1480001,0x1480001,0x1480001,0x1480001,0x1480001,0x1480001,0x3E80000,0x3E80000,0x3E80000,0x3E80000,0x3E80000, -0x3E80000,0x79FC0000,0x79FC0000,0x79FC0000,0xA4000000,0x3E80000,0x3E80000,0x3E80000,0x3E80000,0x3E80000,0x3E80000,0x79FC0000,0x79FC0000,0x79FC0000,0xA4000000,0x79FC0000,0x79FC0000,0x79FC0000,0xA4000000,0xA4000000,0x1600000,0x1480001,0x1480001,0x1800000,0x39C0000,0x1C00000,0x1C00000,0x23FC0000,0x1800000,0x39C0000,0x57FC0000,0x79FC0000, -0x57FC0000,0x1A80001,0x1A80001,0x1A80001,0x1A80001,0x81FC0000,0x81FC0000,0x81FC0000,0xC1FC0000,0xC1FC0000,0xD4000000,0x81FC0000,0x81FC0000,0x81FC0000,0xC1FC0000,0xC1FC0000,0xD4000000,0xC1FC0000,0xC1FC0000,0xD4000000,0xD4000000,0x81FC0000,0x81FC0000,0x81FC0000,0xC1FC0000,0xC1FC0000,0xD4000000,0xC1FC0000,0xC1FC0000,0xD4000000,0xD4000000,0xC1FC0000, -0xC1FC0000,0xD4000000,0xD4000000,0xD4000000,0x1F00000,0xBC40000,0x1A80001,0x63FC0000,0x99FC0000,0xB1FC0000,0xB9FC0000,0xC7F40000,0x33FC0000,0x81FC0000,0xB1FC0000,0xD4000000,0xB1FC0000,0x1FC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000, -0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xF7FC0001,0xF7FC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFFF00000,0xFE000000, -0xFFFC0000,0x1742E54,0xFF5C2227,0xFF4C189C,0xFF44152B,0xFF441B96,0xFF2C0F3F,0xFF240A83,0xFF200BB6,0xFD10062A,0xE9100996,0xFF301E64,0xFF140EBF,0xFF0C08B3,0xFEF0080E,0xFEE40042,0xEAE40406,0xFEE00FFC,0xF2D005A9,0xE2C805B5,0xD2D80FD9,0x2BFC2E54,0xFEFC1C6F,0xFEE8152B,0xFECC11E6,0xFEAC06E9,0xE8B40994,0xFE9414BB,0xFE5804A2,0xE854039D,0xD2740FD9,0x97FC2E54, -0xF8001590,0xE0000BBC,0xCA001371,0xB8002E54,0xFF58245E,0xFF6C2AA6,0xFF6C2BC3,0xFF4019B9,0xFF1C0EF6,0xFEFC0522,0xFEF00173,0xFCD8000A,0xFF5023BA,0xFF30184B,0xFED00513,0xE854039D,0x7DF82E54,0x1A40FDB,0xFF8C0AC6,0xFF7C063B,0xFF780482,0xFF8009BD,0xFF64037E,0xFF5C00E1,0xFF5803EB,0xF944005E,0xE9480375,0x7BFC0FD8,0xFF4C0811,0xFF380482,0xFF200615,0xFEF00005, -0xE9080374,0xBFF80FD8,0xFE6C0480,0xE8340374,0xD2000FD8,0x7BFC0FD8,0xFF4C0811,0xFF380482,0xFF200615,0xFEF00005,0xE9080374,0xBFF80FD8,0xFE6C0480,0xE8340374,0xD2000FD8,0xBFF80FD8,0xFE6C0480,0xE8340374,0xD2000FD8,0xD2000FD8,0xFF940D34,0xF9A00ECD,0xFBA40ED6,0xFF780A71,0xFF5C06D6,0xFF2C0293,0xFF10002D,0xFECC0002,0xFF880D43,0xFF680A04,0xFEE404D1,0xE8340374, -0xADFC0FD8,0x144152B,0x144152B,0x144152B,0x144152B,0xFF240A83,0xFF240A83,0xFF240A83,0xF9140622,0xF9140622,0xD5100622,0xFF0C08B3,0xFF0C08B3,0xFF0C08B3,0xFEE40042,0xFEE40042,0xD8F00132,0xE2DC0481,0xE2DC0481,0xCED0007D,0xBCD80481,0x1E0152B,0x1E0152B,0x1E0152B,0xFEAC06E9,0xFEAC06E9,0xD4C80620,0xFE5804A2,0xFE5804A2,0xD4780005,0xBC8C0480,0x75FC152B, -0x75FC152B,0xD0000642,0xB8000581,0xA200152C,0xFF2C0FD1,0xF94012E3,0x144152B,0xFF180AF6,0xFF080612,0xFEF8026E,0xFEF00173,0xF8D80002,0xFF200F41,0xFF100A41,0xFED004C2,0xD4780005,0x51FC152B,0x1780482,0x1780482,0x1780482,0x1780482,0xFF5C00E1,0xFF5C00E1,0xFF5C00E1,0xED480001,0xED480001,0xD5480001,0x37FC0480,0x37FC0480,0x37FC0480,0xFCF80005,0xFCF80005, -0xD51C0000,0x9DFC0480,0x9DFC0480,0xD4840000,0xBC000480,0x37FC0480,0x37FC0480,0x37FC0480,0xFCF80005,0xFCF80005,0xD51C0000,0x9DFC0480,0x9DFC0480,0xD4840000,0xBC000480,0x9DFC0480,0x9DFC0480,0xD4840000,0xBC000480,0xBC000480,0xFB6C0372,0xFF6C03C5,0x1780482,0xFD5802AD,0xFF400188,0xFF2000A4,0xFF10002D,0xFCD00000,0xF564039D,0xFF48028A,0x83FC0480,0xD4840000, -0x83FC0480,0x1D40372,0xFFC40212,0xFFB400A9,0xFFA80001,0xC1FC0372,0xFF940145,0xFF800000,0xE1F80372,0xFEFC0000,0xE8000374,0xC1FC0372,0xFF940145,0xFF800000,0xE1F80372,0xFEFC0000,0xE8000374,0xE1F80372,0xFEFC0000,0xE8000374,0xE8000374,0xC1FC0372,0xFF940145,0xFF800000,0xE1F80372,0xFEFC0000,0xE8000374,0xE1F80372,0xFEFC0000,0xE8000374,0xE8000374,0xE1F80372, -0xFEFC0000,0xE8000374,0xE8000374,0xE8000374,0xFDCC0320,0x1F40372,0xFFCC0332,0xFFC002AD,0xFFA80221,0xFF5C0110,0xFF300000,0xFEC00000,0xF7CC0320,0xFFAC02A8,0xFF50001A,0xE8000374,0xD9FC0372,0x1100622,0x1100622,0x1100622,0x1100622,0x1100622,0x1100622,0x1100622,0x1100622,0x1100622,0x1100622,0xFEE0002D,0xFEE0002D,0xFEE0002D,0xFEE0002D,0xFEE0002D, -0xFEE0002D,0xC0D80001,0xC0D80001,0xC0D80001,0xA4D80001,0x1980620,0x1980620,0x1980620,0x1980620,0x1980620,0x1980620,0xD8700001,0xD8700001,0xD8700001,0xA4A40000,0x51F80620,0x51F80620,0x51F80620,0xA4000004,0x88000620,0xFD080482,0x1100622,0x1100622,0xFD0002D2,0xFEF801A5,0xFEE800C1,0xFEE800C1,0xF4DC0001,0xFEF403F9,0xFEE402A8,0xDCCC0000,0xD8700001, -0x21FC0620,}; -static const uint32_t g_etc1_to_bc7_m6_table184[] = { -0xEC0000,0xEC0000,0xEC0000,0xEC0000,0xEC0000,0xEC0000,0xEC0000,0xEC0000,0xEC0000,0xEC0000,0xEC0000,0xEC0000,0xEC0000,0xEC0000,0xEC0000,0xEC0000,0xEC0000,0xEC0000,0xEC0000,0xEC0000,0x35C0000,0x35C0000,0x35C0000,0x35C0000,0x35C0000,0x35C0000,0x35C0000,0x35C0000,0x35C0000,0x35C0000,0x33FC0000, -0x33FC0000,0x33FC0000,0x33FC0000,0x74000001,0xEC0000,0xEC0000,0xEC0000,0xEC0000,0xEC0000,0xEC0000,0xEC0000,0xEC0000,0xFC0000,0xFC0000,0xFC0000,0x35C0000,0x1F40000,0x15C0000,0x15C0000,0x15C0000,0x15C0000,0x15C0000,0x15C0000,0x15C0000,0x15C0000,0x15C0000,0x15C0000,0x9FC0000,0x9FC0000,0x9FC0000,0x9FC0000,0x9FC0000, -0x9FC0000,0x87FC0000,0x87FC0000,0x87FC0000,0xAC000001,0x9FC0000,0x9FC0000,0x9FC0000,0x9FC0000,0x9FC0000,0x9FC0000,0x87FC0000,0x87FC0000,0x87FC0000,0xAC000001,0x87FC0000,0x87FC0000,0x87FC0000,0xAC000001,0xAC000001,0x1740000,0x15C0000,0x15C0000,0x1940000,0x1B40000,0x1D80000,0x1D80000,0x39FC0000,0x1940000,0x1B40000,0x67FC0000,0x87FC0000, -0x67FC0000,0x1BC0000,0x1BC0000,0x1BC0000,0x1BC0000,0x9BFC0000,0x9BFC0000,0x9BFC0000,0xCFF80000,0xCFF80000,0xDC000001,0x9BFC0000,0x9BFC0000,0x9BFC0000,0xCFF80000,0xCFF80000,0xDC000001,0xCFF80000,0xCFF80000,0xDC000001,0xDC000001,0x9BFC0000,0x9BFC0000,0x9BFC0000,0xCFF80000,0xCFF80000,0xDC000001,0xCFF80000,0xCFF80000,0xDC000001,0xDC000001,0xCFF80000, -0xCFF80000,0xDC000001,0xDC000001,0xDC000001,0x17FC0000,0x5D80000,0x1BC0000,0x85FC0000,0xAFFC0000,0xC1FC0000,0xC9F80000,0xD3F80000,0x5FFC0000,0x9BFC0000,0xC1FC0000,0xDC000001,0xC1FC0000,0x1FC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000, -0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xF7FC0001,0xF7FC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFFF00000,0xFE000000, -0xFFFC0000,0x18029AD,0xFF681FD0,0xFF581805,0xFF58152C,0xFF5C195D,0xFF400F2A,0xFF3C0B40,0xFF2C0AC5,0xFF240629,0xEF240841,0xFF441B46,0xFF2C0E8C,0xFF180984,0xFF080739,0xFEFC00B5,0xF0FC02D1,0xFEF80D65,0xF6E40502,0xE8E003EA,0xD8EC0CF6,0x41FC29AD,0xFF141B10,0xFF04152B,0xFEE41095,0xFECC0789,0xEEC80841,0xFEAC126A,0xFE7C04F9,0xEC740236,0xD88C0CF6,0xA1FC29AD, -0xFE00152B,0xE6000953,0xD4000F97,0xC00029AF,0xFF64212B,0xF77C26D9,0xF98027C5,0xFF5417DD,0xFF300E79,0xFF1805B7,0xFF080236,0xFEEC0009,0xFF5C209B,0xFF40169E,0xFEF0056C,0xEC740236,0x89FC29AD,0x1B00CF9,0xFFA40924,0xFF9405C1,0xFF8C0480,0xFF8C07FD,0xFF7C0332,0xFF740139,0xFF6402C1,0xFD580018,0xEF5C0221,0x8DFC0CF6,0xFF640723,0xFF540480,0xFF3804C5,0xFF14001D, -0xEF1C0221,0xC7FC0CF6,0xFEA00480,0xEE500221,0xD8000CF6,0x8DFC0CF6,0xFF640723,0xFF540480,0xFF3804C5,0xFF14001D,0xEF1C0221,0xC7FC0CF6,0xFEA00480,0xEE500221,0xD8000CF6,0xC7FC0CF6,0xFEA00480,0xEE500221,0xD8000CF6,0xD8000CF6,0xFFA00AE3,0xFFAC0BFD,0xFFAC0C24,0xFF9408AE,0xFF6805CD,0xFF48026C,0xFF280068,0xFEF40008,0xFF980AF2,0xFF840840,0xFF1004B3,0xEE500221, -0xB9FC0CF6,0x158152C,0x158152C,0x158152C,0x158152C,0xFF3C0B40,0xFF3C0B40,0xFF3C0B40,0xFF240629,0xFF240629,0xDD240621,0xFF180984,0xFF180984,0xFF180984,0xFEFC00B5,0xFEFC00B5,0xE1000131,0xECEC0480,0xECEC0480,0xD8E4007A,0xC4EC0482,0x1FC152B,0x1FC152B,0x1FC152B,0xFECC0789,0xFECC0789,0xDCDC0621,0xFE7C04F9,0xFE7C04F9,0xDE880006,0xC4A00482,0x83F8152B, -0x83F8152B,0xDC000629,0xC200053B,0xAA00152B,0xFD48103D,0xFF4C1304,0x158152C,0xFF340BC5,0xFF1C0715,0xFF100379,0xFF080236,0xFEEC0009,0xFF340FA9,0xFF240B2D,0xFEF0052C,0xDE880006,0x61FC152B,0x18C0480,0x18C0480,0x18C0480,0x18C0480,0xFF740139,0xFF740139,0xFF740139,0xF55C0000,0xF55C0000,0xDD5C0001,0x53FC0480,0x53FC0480,0x53FC0480,0xFF14001D,0xFF14001D, -0xDF2C0001,0xABF80480,0xABF80480,0xDC9C0001,0xC4000482,0x53FC0480,0x53FC0480,0x53FC0480,0xFF14001D,0xFF14001D,0xDF2C0001,0xABF80480,0xABF80480,0xDC9C0001,0xC4000482,0xABF80480,0xABF80480,0xDC9C0001,0xC4000482,0xC4000482,0xF780039D,0xFD8803C8,0x18C0480,0xFB7002F9,0xFF5401CA,0xFF3800E9,0xFF280068,0xFEF40008,0xFD74039D,0xFF5C02B9,0x95FC0480,0xDC9C0001, -0x95FC0480,0x1DC0221,0xFFD00145,0xFFC00068,0xFFBC0000,0xCDFC0221,0xFFAC00C2,0xFF9C0000,0xE7F80221,0xFF340000,0xEE000221,0xCDFC0221,0xFFAC00C2,0xFF9C0000,0xE7F80221,0xFF340000,0xEE000221,0xE7F80221,0xFF340000,0xEE000221,0xEE000221,0xCDFC0221,0xFFAC00C2,0xFF9C0000,0xE7F80221,0xFF340000,0xEE000221,0xE7F80221,0xFF340000,0xEE000221,0xEE000221,0xE7F80221, -0xFF340000,0xEE000221,0xEE000221,0xEE000221,0xFFD001ED,0x1FC0221,0xF7DC0200,0xFFC001A8,0xFFA80152,0xFF8400A0,0xFF5C0000,0xFF040000,0xFBD401E1,0xFFC00190,0xFF700010,0xEE000221,0xDFFC0221,0x1240620,0x1240620,0x1240620,0x1240620,0x1240620,0x1240620,0x1240620,0x1240620,0x1240620,0x1240620,0xFEF40050,0xFEF40050,0xFEF40050,0xFEF40050,0xFEF40050, -0xFEF40050,0xC8EC0000,0xC8EC0000,0xC8EC0000,0xACEC0001,0x3B00620,0x3B00620,0x3B00620,0x3B00620,0x3B00620,0x3B00620,0xE0840001,0xE0840001,0xE0840001,0xAEB40001,0x5DFC0620,0x5DFC0620,0x5DFC0620,0xAC080001,0x90000622,0xF71C04B1,0x1240620,0x1240620,0xFF1002FD,0xFF0C01E1,0xFF0000F4,0xFF0000F4,0xFEEC0000,0xFD0C0422,0xFF0002D4,0xE6DC0000,0xE0840001, -0x33FC0620,}; -static const uint32_t g_etc1_to_bc7_m6_table185[] = { -0xFC0000,0xFC0000,0xFC0000,0xFC0000,0xFC0000,0xFC0000,0xFC0000,0xFC0000,0xFC0000,0xFC0000,0xFC0000,0xFC0000,0xFC0000,0xFC0000,0xFC0000,0xFC0000,0xFC0000,0xFC0000,0xFC0000,0xFC0000,0x3740000,0x3740000,0x3740000,0x3740000,0x3740000,0x3740000,0x3740000,0x3740000,0x3740000,0x3740000,0x3FFC0000, -0x3FFC0000,0x3FFC0000,0x3FFC0000,0x7C000001,0xFC0000,0xFC0000,0xFC0000,0xFC0000,0xFC0000,0xFC0000,0xFC0000,0xFC0000,0x10C0000,0x10C0000,0x10C0000,0x3740000,0xDFC0000,0x16C0000,0x16C0000,0x16C0000,0x16C0000,0x16C0000,0x16C0000,0x16C0000,0x16C0000,0x16C0000,0x16C0000,0x23FC0000,0x23FC0000,0x23FC0000,0x23FC0000,0x23FC0000, -0x23FC0000,0x93FC0000,0x93FC0000,0x93FC0000,0xB4000001,0x23FC0000,0x23FC0000,0x23FC0000,0x23FC0000,0x23FC0000,0x23FC0000,0x93FC0000,0x93FC0000,0x93FC0000,0xB4000001,0x93FC0000,0x93FC0000,0x93FC0000,0xB4000001,0xB4000001,0x1840000,0x16C0000,0x16C0000,0x1A80000,0x1C80000,0x1F00000,0x1F00000,0x4DFC0000,0x1A80000,0x1C80000,0x77FC0000,0x93FC0000, -0x77FC0000,0x1CC0000,0x1CC0000,0x1CC0000,0x1CC0000,0xB5FC0000,0xB5FC0000,0xB5FC0000,0xDBF80000,0xDBF80000,0xE4000001,0xB5FC0000,0xB5FC0000,0xB5FC0000,0xDBF80000,0xDBF80000,0xE4000001,0xDBF80000,0xDBF80000,0xE4000001,0xE4000001,0xB5FC0000,0xB5FC0000,0xB5FC0000,0xDBF80000,0xDBF80000,0xE4000001,0xDBF80000,0xDBF80000,0xE4000001,0xE4000001,0xDBF80000, -0xDBF80000,0xE4000001,0xE4000001,0xE4000001,0x51FC0000,0xDE80000,0x1CC0000,0xA3FC0000,0xC3FC0000,0xD1FC0000,0xD5FC0000,0xDDFC0000,0x87FC0000,0xB5FC0000,0xD1FC0000,0xE4000001,0xD1FC0000,0x1FC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000, -0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xF7FC0001,0xF7FC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFFF00000,0xFE000000, -0xFFFC0000,0x18C25F1,0xFF801DF0,0xFF70177D,0xFF68152C,0xFF68179D,0xFF540F30,0xFF500BE9,0xFF400A4D,0xFF380659,0xF3340759,0xFF5C1916,0xFF3C0E80,0xFF300A44,0xFF2006D1,0xFF100159,0xF30C0209,0xFF080B86,0xFAF804A6,0xECF402A6,0xDEFC0AC2,0x53FC25F1,0xFF2C19F0,0xFF1C152B,0xFEFC0FAD,0xFEE40821,0xF2DC0759,0xFECC10EA,0xFE940579,0xF0880142,0xDE9C0AC2,0xABF825F1, -0xFE2C152B,0xEC0007C7,0xDA000C9B,0xC60025F3,0xFF781EA2,0xFD88233D,0xFF8C2439,0xFF5C168D,0xFF440E39,0xFF240649,0xFF1C031D,0xFF040051,0xFF701E24,0xFF501536,0xFEFC05F2,0xF0880142,0x95FC25F1,0x1BC0AC1,0xFFB007EC,0xFFA00569,0xFF9C0480,0xFFA406AD,0xFF88030E,0xFF800185,0xFF7C0209,0xFF6C0001,0xF36C0139,0x9BFC0AC1,0xFF7C066B,0xFF6C0480,0xFF5803FE,0xFF2C0055, -0xF3300139,0xCFF80AC1,0xFED40480,0xF2700139,0xDE000AC2,0x9BFC0AC1,0xFF7C066B,0xFF6C0480,0xFF5803FE,0xFF2C0055,0xF3300139,0xCFF80AC1,0xFED40480,0xF2700139,0xDE000AC2,0xCFF80AC1,0xFED40480,0xF2700139,0xDE000AC2,0xDE000AC2,0xFFB4091E,0xF5B80A25,0xF7BC0A41,0xFF98075D,0xFF7C0521,0xFF5C026D,0xFF4800B4,0xFF0C0032,0xFFA4093E,0xFF900722,0xFF3004A6,0xF2700139, -0xC1FC0AC1,0x168152C,0x168152C,0x168152C,0x168152C,0xFF500BE9,0xFF500BE9,0xFF500BE9,0xFF380659,0xFF380659,0xE5340621,0xFF300A44,0xFF300A44,0xFF300A44,0xFF100159,0xFF100159,0xE9100131,0xF4FC0480,0xF4FC0480,0xE0F4007A,0xCCFC0482,0x19FC152B,0x19FC152B,0x19FC152B,0xFEE40821,0xFEE40821,0xE4EC0621,0xFE940579,0xFE940579,0xE6980006,0xCCB00482,0x8FF8152B, -0x8FF8152B,0xE4000621,0xCA0004F6,0xB200152B,0xFF5810A1,0xFB641341,0x168152C,0xFF440C7A,0xFF300805,0xFF240465,0xFF1C031D,0xFF040051,0xFF501035,0xFF300BE1,0xFEFC05B2,0xE6980006,0x71FC152B,0x19C0480,0x19C0480,0x19C0480,0x19C0480,0xFF800185,0xFF800185,0xFF800185,0xFD6C0000,0xFD6C0000,0xE56C0001,0x6BFC0480,0x6BFC0480,0x6BFC0480,0xFF2C0055,0xFF2C0055, -0xE73C0001,0xB7F80480,0xB7F80480,0xE4AC0001,0xCC000482,0x6BFC0480,0x6BFC0480,0x6BFC0480,0xFF2C0055,0xFF2C0055,0xE73C0001,0xB7F80480,0xB7F80480,0xE4AC0001,0xCC000482,0xB7F80480,0xB7F80480,0xE4AC0001,0xCC000482,0xCC000482,0xFF90039D,0xF59803F5,0x19C0480,0xFD840320,0xFF700221,0xFF500151,0xFF4800B4,0xFF0C0032,0xFD8803C8,0xFF7402FD,0xA3FC0480,0xE4AC0001, -0xA3FC0480,0x1E40139,0xFFDC00B9,0xFFCC0040,0xFFCC0000,0xD9FC0139,0xFFC00074,0xFFB40000,0xEDF80139,0xFF640000,0xF2000139,0xD9FC0139,0xFFC00074,0xFFB40000,0xEDF80139,0xFF640000,0xF2000139,0xEDF80139,0xFF640000,0xF2000139,0xF2000139,0xD9FC0139,0xFFC00074,0xFFB40000,0xEDF80139,0xFF640000,0xF2000139,0xEDF80139,0xFF640000,0xF2000139,0xF2000139,0xEDF80139, -0xFF640000,0xF2000139,0xF2000139,0xF2000139,0xF5E40120,0x37FC0139,0xFBE40120,0xFFD800F2,0xFFBC00C2,0xFFA40061,0xFF840000,0xFF400000,0xFFDC0109,0xFFCC00E9,0xFF940009,0xF2000139,0xE7FC0139,0x1340620,0x1340620,0x1340620,0x1340620,0x1340620,0x1340620,0x1340620,0x1340620,0x1340620,0x1340620,0xFF0C0080,0xFF0C0080,0xFF0C0080,0xFF0C0080,0xFF0C0080, -0xFF0C0080,0xD0FC0000,0xD0FC0000,0xD0FC0000,0xB4FC0001,0x1C80620,0x1C80620,0x1C80620,0x1C80620,0x1C80620,0x1C80620,0xE8940001,0xE8940001,0xE8940001,0xB6C40001,0x69FC0620,0x69FC0620,0x69FC0620,0xB4180001,0x98000622,0xFF2C04B1,0x1340620,0x1340620,0xFF200328,0xFF140220,0xFF100128,0xFF100128,0xFF000008,0xFD1C0451,0xFF1402F9,0xEEEC0000,0xE8940001, -0x41FC0620,}; -static const uint32_t g_etc1_to_bc7_m6_table186[] = { -0x10C0000,0x10C0000,0x10C0000,0x10C0000,0x10C0000,0x10C0000,0x10C0000,0x10C0000,0x10C0000,0x10C0000,0x10C0000,0x10C0000,0x10C0000,0x10C0000,0x10C0000,0x10C0000,0x10C0000,0x10C0000,0x10C0000,0x10C0000,0x38C0000,0x38C0000,0x38C0000,0x38C0000,0x38C0000,0x38C0000,0x38C0000,0x38C0000,0x38C0000,0x38C0000,0x4BFC0000, -0x4BFC0000,0x4BFC0000,0x4BFC0000,0x84000001,0x10C0000,0x10C0000,0x10C0000,0x10C0000,0x10C0000,0x10C0000,0x10C0000,0x10C0000,0x71C0000,0x71C0000,0x71C0000,0x38C0000,0x1DF80000,0x17C0000,0x17C0000,0x17C0000,0x17C0000,0x17C0000,0x17C0000,0x17C0000,0x17C0000,0x17C0000,0x17C0000,0x3BFC0000,0x3BFC0000,0x3BFC0000,0x3BFC0000,0x3BFC0000, -0x3BFC0000,0x9FF80000,0x9FF80000,0x9FF80000,0xBC000001,0x3BFC0000,0x3BFC0000,0x3BFC0000,0x3BFC0000,0x3BFC0000,0x3BFC0000,0x9FF80000,0x9FF80000,0x9FF80000,0xBC000001,0x9FF80000,0x9FF80000,0x9FF80000,0xBC000001,0xBC000001,0x3940000,0x17C0000,0x17C0000,0x5B80000,0x1DC0000,0xDFC0000,0xDFC0000,0x61FC0000,0x5B80000,0x1DC0000,0x85FC0000,0x9FF80000, -0x85FC0000,0x1DC0000,0x1DC0000,0x1DC0000,0x1DC0000,0xCDFC0000,0xCDFC0000,0xCDFC0000,0xE7F80000,0xE7F80000,0xEC000001,0xCDFC0000,0xCDFC0000,0xCDFC0000,0xE7F80000,0xE7F80000,0xEC000001,0xE7F80000,0xE7F80000,0xEC000001,0xEC000001,0xCDFC0000,0xCDFC0000,0xCDFC0000,0xE7F80000,0xE7F80000,0xEC000001,0xE7F80000,0xE7F80000,0xEC000001,0xEC000001,0xE7F80000, -0xE7F80000,0xEC000001,0xEC000001,0xEC000001,0x89FC0000,0x1FC0000,0x1DC0000,0xC1FC0000,0xD7FC0000,0xDFFC0000,0xE3FC0000,0xE9F40000,0xADFC0000,0xCDFC0000,0xDFFC0000,0xEC000001,0xDFFC0000,0x1FC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000, -0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xF7FC0001,0xF7FC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFFF00000,0xFE000000, -0xFFFC0000,0x1982295,0xFF8C1C24,0xFF7C16F9,0xFF78152C,0xFF74162D,0xFF640F5A,0xFF5C0C99,0xFF4C0A19,0xFF4C06D0,0xF74406B1,0xFF68172A,0xFF500E8F,0xFF440B02,0xFF2C06C9,0xFF200231,0xF7200185,0xFF200A26,0xFF0C0482,0xF30001AE,0xE30C08E2,0x65FC2295,0xFF401914,0xFF34152B,0xFF140F05,0xFEFC08D9,0xF6F006B1,0xFEE40F9A,0xFEB80619,0xF49C0096,0xE2B008E2,0xB3FC2295, -0xFE60152B,0xF40006C7,0xE0000A17,0xCC002297,0xFF801C65,0xFF8C2049,0xF598216C,0xFF701581,0xFF540E23,0xFF3806FD,0xFF340421,0xFF1400E4,0xFF781BC6,0xFF5C147B,0xFF1806AC,0xF49C0096,0x9FFC2295,0x1C808E1,0xFFBC06E4,0xFFAC0529,0xFFAC0480,0xFFB00599,0xFF9C0300,0xFF9801E5,0xFF880191,0xFF7C0010,0xF77C0091,0xAFFC08E1,0xFF9405D3,0xFF840480,0xFF700356,0xFF4C00A9, -0xF7440091,0xD7FC08E1,0xFF040480,0xF6900091,0xE20008E2,0xAFFC08E1,0xFF9405D3,0xFF840480,0xFF700356,0xFF4C00A9,0xF7440091,0xD7FC08E1,0xFF040480,0xF6900091,0xE20008E2,0xD7FC08E1,0xFF040480,0xF6900091,0xE20008E2,0xE20008E2,0xFFBC07A1,0xFBC4084D,0xFBC40879,0xFFB00662,0xFF90049D,0xFF740269,0xFF640104,0xFF300074,0xFFB407AA,0xFFA40632,0xFF500499,0xF6900091, -0xCDFC08E1,0x178152C,0x178152C,0x178152C,0x178152C,0xFF5C0C99,0xFF5C0C99,0xFF5C0C99,0xFF4C06D0,0xFF4C06D0,0xED440621,0xFF440B02,0xFF440B02,0xFF440B02,0xFF200231,0xFF200231,0xF1200131,0xFD0C0480,0xFD0C0480,0xE904007A,0xD50C0482,0x31FC152B,0x31FC152B,0x31FC152B,0xFEFC08D9,0xFEFC08D9,0xECFC0621,0xFEB80619,0xFEB80619,0xEEA80006,0xD4C00482,0x9BF8152B, -0x9BF8152B,0xEC100621,0xD20004D2,0xBA00152B,0xFF6810FE,0xFF6C1369,0x178152C,0xFF540D39,0xFF440905,0xFF340565,0xFF340421,0xFF1400E4,0xFF5810BE,0xFF500C92,0xFF18067B,0xEEA80006,0x7FFC152B,0x1AC0480,0x1AC0480,0x1AC0480,0x1AC0480,0xFF9801E5,0xFF9801E5,0xFF9801E5,0xFF7C0010,0xFF7C0010,0xED7C0001,0x83FC0480,0x83FC0480,0x83FC0480,0xFF4C00A9,0xFF4C00A9, -0xEF4C0001,0xC3F80480,0xC3F80480,0xECBC0001,0xD4000482,0x83FC0480,0x83FC0480,0x83FC0480,0xFF4C00A9,0xFF4C00A9,0xEF4C0001,0xC3F80480,0xC3F80480,0xECBC0001,0xD4000482,0xC3F80480,0xC3F80480,0xECBC0001,0xD4000482,0xD4000482,0xFFA003CA,0xFDA803F5,0x1AC0480,0xFF980349,0xFF840269,0xFF6C019A,0xFF640104,0xFF300074,0xFF9403DA,0xFF840340,0xB3FC0480,0xECBC0001, -0xB3FC0480,0x1EC0091,0xFFE80055,0xFFE0001D,0xFFDC0000,0xE5FC0091,0xFFD80034,0xFFCC0000,0xF3F80091,0xFF940000,0xF6000091,0xE5FC0091,0xFFD80034,0xFFCC0000,0xF3F80091,0xFF940000,0xF6000091,0xF3F80091,0xFF940000,0xF6000091,0xF6000091,0xE5FC0091,0xFFD80034,0xFFCC0000,0xF3F80091,0xFF940000,0xF6000091,0xF3F80091,0xFF940000,0xF6000091,0xF6000091,0xF3F80091, -0xFF940000,0xF6000091,0xF6000091,0xF6000091,0xF9EC0080,0x77FC0091,0xFFEC0080,0xFDE80071,0xFFD0005A,0xFFC00028,0xFFA80000,0xFF7C0000,0xFFE80080,0xFFE00071,0xFFB40004,0xF6000091,0xEFFC0091,0x1440620,0x1440620,0x1440620,0x1440620,0x1440620,0x1440620,0x1440620,0x1440620,0x1440620,0x1440620,0xFF1800B4,0xFF1800B4,0xFF1800B4,0xFF1800B4,0xFF1800B4, -0xFF1800B4,0xD90C0000,0xD90C0000,0xD90C0000,0xBD0C0001,0x1E00620,0x1E00620,0x1E00620,0x1E00620,0x1E00620,0x1E00620,0xF0A40001,0xF0A40001,0xF0A40001,0xBED40001,0x75FC0620,0x75FC0620,0x75FC0620,0xBC280001,0xA0000622,0xF73C04E4,0x1440620,0x1440620,0xFF2C0371,0xFF280254,0xFF240171,0xFF240171,0xFF140020,0xF9300480,0xFF200332,0xF6FC0000,0xF0A40001, -0x51FC0620,}; -static const uint32_t g_etc1_to_bc7_m6_table187[] = { -0x11C0000,0x11C0000,0x11C0000,0x11C0000,0x11C0000,0x11C0000,0x11C0000,0x11C0000,0x11C0000,0x11C0000,0x11C0000,0x11C0000,0x11C0000,0x11C0000,0x11C0000,0x11C0000,0x11C0000,0x11C0000,0x11C0000,0x11C0000,0x3A40000,0x3A40000,0x3A40000,0x3A40000,0x3A40000,0x3A40000,0x3A40000,0x3A40000,0x3A40000,0x3A40000,0x57FC0000, -0x57FC0000,0x57FC0000,0x57FC0000,0x8C000001,0x11C0000,0x11C0000,0x11C0000,0x11C0000,0x11C0000,0x11C0000,0x11C0000,0x11C0000,0xF2C0000,0xF2C0000,0xF2C0000,0x3A40000,0x2BFC0000,0x18C0000,0x18C0000,0x18C0000,0x18C0000,0x18C0000,0x18C0000,0x18C0000,0x18C0000,0x18C0000,0x18C0000,0x53FC0000,0x53FC0000,0x53FC0000,0x53FC0000,0x53FC0000, -0x53FC0000,0xABF80000,0xABF80000,0xABF80000,0xC4000001,0x53FC0000,0x53FC0000,0x53FC0000,0x53FC0000,0x53FC0000,0x53FC0000,0xABF80000,0xABF80000,0xABF80000,0xC4000001,0xABF80000,0xABF80000,0xABF80000,0xC4000001,0xC4000001,0xBA40000,0x18C0000,0x18C0000,0x1CC0000,0x1F00000,0x2BFC0000,0x2BFC0000,0x73FC0000,0x1CC0000,0x1F00000,0x95FC0000,0xABF80000, -0x95FC0000,0x1EC0000,0x1EC0000,0x1EC0000,0x1EC0000,0xE5FC0000,0xE5FC0000,0xE5FC0000,0xF3F80000,0xF3F80000,0xF4000001,0xE5FC0000,0xE5FC0000,0xE5FC0000,0xF3F80000,0xF3F80000,0xF4000001,0xF3F80000,0xF3F80000,0xF4000001,0xF4000001,0xE5FC0000,0xE5FC0000,0xE5FC0000,0xF3F80000,0xF3F80000,0xF4000001,0xF3F80000,0xF3F80000,0xF4000001,0xF4000001,0xF3F80000, -0xF3F80000,0xF4000001,0xF4000001,0xF4000001,0xC3FC0000,0x77FC0000,0x1EC0000,0xDFFC0000,0xEBFC0000,0xEFFC0000,0xF1FC0000,0xF3FC0000,0xD5FC0000,0xE5FC0000,0xEFFC0000,0xF4000001,0xEFFC0000,0x1FC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000, -0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xF7FC0001,0xF7FC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFFF00000,0xFE000000, -0xFFFC0000,0x1A41F99,0xFF981A90,0xFF881695,0xFF88152C,0xFF80150D,0xFF740F8A,0xFF680D79,0xFF640A11,0xFF58076C,0xFB540649,0xFF7415A6,0xFF600EC8,0xFF5C0BF2,0xFF40071A,0xFF380339,0xFD2C0139,0xFF2C0946,0xFF200496,0xF71400FA,0xE91C0756,0x77FC1F99,0xFF58182C,0xFF4C152B,0xFF2C0E9D,0xFF1409B1,0xFB040649,0xFF080EA6,0xFED80706,0xFAB0002A,0xE8C40756,0xBDF81F99, -0xFE90152B,0xFA080649,0xE600080B,0xD2001F9B,0xFF901A71,0xF9A01DC1,0xFBA41E94,0xFF80147F,0xFF640E3A,0xFF4C0805,0xFF3C0548,0xFF3001B8,0xFF9019F6,0xFF7413B6,0xFF300766,0xFAB0002A,0xABFC1F99,0x1D00759,0xFFC40609,0xFFC004EC,0xFFBC0480,0xFFBC04CD,0xFFB0030E,0xFFA40249,0xFFA00169,0xFF940050,0xFB8C0029,0xBDFC0756,0xFFAC055B,0xFF9C0480,0xFF8802EE,0xFF700115, -0xFB580029,0xDFF80756,0xFF340480,0xFAB00029,0xE8000756,0xBDFC0756,0xFFAC055B,0xFF9C0480,0xFF8802EE,0xFF700115,0xFB580029,0xDFF80756,0xFF340480,0xFAB00029,0xE8000756,0xDFF80756,0xFF340480,0xFAB00029,0xE8000756,0xE8000756,0xFDCC067A,0xFFCC06D5,0xFFCC0711,0xFFC0058C,0xFFA40441,0xFF8402B0,0xFF7C0172,0xFF5000DD,0xFFC4067D,0xFFB0057E,0xFF700490,0xFAB00029, -0xD7FC0756,0x188152C,0x188152C,0x188152C,0x188152C,0xFF680D79,0xFF680D79,0xFF680D79,0xFF58076C,0xFF58076C,0xF5540621,0xFF5C0BF2,0xFF5C0BF2,0xFF5C0BF2,0xFF380339,0xFF380339,0xF9300131,0xFF200496,0xFF200496,0xF114007A,0xDD1C0482,0x49FC152B,0x49FC152B,0x49FC152B,0xFF1409B1,0xFF1409B1,0xF50C0621,0xFED80706,0xFED80706,0xF6B80006,0xDCD00482,0xA7F8152B, -0xA7F8152B,0xF4200621,0xDC0004A6,0xC200152B,0xFF741194,0xFB8413A0,0x188152C,0xFF680E19,0xFF580A15,0xFF4C06C1,0xFF3C0548,0xFF3001B8,0xFF741148,0xFF5C0D82,0xFF300742,0xF6B80006,0x8FFC152B,0x1BC0480,0x1BC0480,0x1BC0480,0x1BC0480,0xFFA40249,0xFFA40249,0xFFA40249,0xFF940050,0xFF940050,0xF58C0001,0x9BFC0480,0x9BFC0480,0x9BFC0480,0xFF700115,0xFF700115, -0xF75C0001,0xCFF80480,0xCFF80480,0xF4CC0001,0xDC000482,0x9BFC0480,0x9BFC0480,0x9BFC0480,0xFF700115,0xFF700115,0xF75C0001,0xCFF80480,0xCFF80480,0xF4CC0001,0xDC000482,0xCFF80480,0xCFF80480,0xF4CC0001,0xDC000482,0xDC000482,0xFBB403F5,0xF5B80424,0x1BC0480,0xFFA40384,0xFF9802B9,0xFF7C020A,0xFF7C0172,0xFF5000DD,0xFDB003F5,0xFF980371,0xC1FC0480,0xF4CC0001, -0xC1FC0480,0x1F40029,0xFFF40019,0xFFF00008,0xFFEC0000,0xF1FC0029,0xFFE40010,0xFFE40000,0xF9F80029,0xFFC80000,0xFA000029,0xF1FC0029,0xFFE40010,0xFFE40000,0xF9F80029,0xFFC80000,0xFA000029,0xF9F80029,0xFFC80000,0xFA000029,0xFA000029,0xF1FC0029,0xFFE40010,0xFFE40000,0xF9F80029,0xFFC80000,0xFA000029,0xF9F80029,0xFFC80000,0xFA000029,0xFA000029,0xF9F80029, -0xFFC80000,0xFA000029,0xFA000029,0xFA000029,0xFDF40020,0xB7FC0029,0xF3F40029,0xFFEC001D,0xFFE80014,0xFFDC000A,0xFFD00000,0xFFB80000,0xFFF00022,0xFFF00020,0xFFD80001,0xFA000029,0xF7FC0029,0x1540620,0x1540620,0x1540620,0x1540620,0x1540620,0x1540620,0x1540620,0x1540620,0x1540620,0x1540620,0xFF3000F4,0xFF3000F4,0xFF3000F4,0xFF3000F4,0xFF3000F4, -0xFF3000F4,0xE11C0000,0xE11C0000,0xE11C0000,0xC51C0001,0x1F80620,0x1F80620,0x1F80620,0x1F80620,0x1F80620,0x1F80620,0xF8B40001,0xF8B40001,0xF8B40001,0xC6E40001,0x81FC0620,0x81FC0620,0x81FC0620,0xC4380001,0xA8000622,0xFF4C04E4,0x1540620,0x1540620,0xFD48039D,0xFF3C0290,0xFF3401B1,0xFF3401B1,0xFF240050,0xFF3C0488,0xFF340355,0xFF0C0000,0xF8B40001, -0x5FFC0620,}; -static const uint32_t g_etc1_to_bc7_m6_table188[] = { -0x12C0001,0x12C0001,0x12C0001,0x12C0001,0x12C0001,0x12C0001,0x12C0001,0x12C0001,0x12C0001,0x12C0001,0x12C0001,0x12C0001,0x12C0001,0x12C0001,0x12C0001,0x12C0001,0x12C0001,0x12C0001,0x12C0001,0x12C0001,0x1C00000,0x1C00000,0x1C00000,0x1C00000,0x1C00000,0x1C00000,0x1C00000,0x1C00000,0x1C00000,0x1C00000,0x65F80000, -0x65F80000,0x65F80000,0x65F80000,0x96000000,0x12C0001,0x12C0001,0x12C0001,0x12C0001,0x12C0001,0x12C0001,0x12C0001,0x12C0001,0x9400000,0x9400000,0x9400000,0x1C00000,0x3DF80000,0x19C0001,0x19C0001,0x19C0001,0x19C0001,0x19C0001,0x19C0001,0x19C0001,0x19C0001,0x19C0001,0x19C0001,0x6FFC0000,0x6FFC0000,0x6FFC0000,0x6FFC0000,0x6FFC0000, -0x6FFC0000,0xB9F80000,0xB9F80000,0xB9F80000,0xCE000000,0x6FFC0000,0x6FFC0000,0x6FFC0000,0x6FFC0000,0x6FFC0000,0x6FFC0000,0xB9F80000,0xB9F80000,0xB9F80000,0xCE000000,0xB9F80000,0xB9F80000,0xB9F80000,0xCE000000,0xCE000000,0x5B80000,0x19C0001,0x19C0001,0x3E00000,0x15FC0000,0x4DFC0000,0x4DFC0000,0x8BFC0000,0x3E00000,0x15FC0000,0xA5FC0000,0xB9F80000, -0xA5FC0000,0x1FC0001,0x1FC0001,0x1FC0001,0x1FC0001,0xFDFC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000, -0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFBFC0001,0xF7FC0001,0x1FC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFFFC0000,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0x1FC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000, -0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xF7FC0001,0xF7FC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFFF00000,0xFE000000, -0xFFFC0000,0x1B01CB4,0xFFA4190F,0xFF9C1633,0xFF98152B,0xFF98140A,0xFF8C0FFF,0xFF800E56,0xFF700A74,0xFF700863,0xFF640622,0xFF8C144D,0xFF740F22,0xFF680D11,0xFF5807AB,0xFF4C04BA,0xFF44013D,0xFF4C08DC,0xFF380519,0xFB28008D,0xEF2C0601,0x8DFC1CB0,0xFF701751,0xFF68152C,0xFF4C0EB2,0xFF380AC2,0xFF1C0620,0xFF200DF9,0xFEFC0829,0xFECC0005,0xEED80600,0xC7FC1CB0, -0xFEC8152B,0xFE2C0620,0xEC00064C,0xD8001CB0,0xFFA0185A,0xFFAC1AFA,0xFFAC1BE7,0xFF9413DF,0xFF780E8B,0xFF680924,0xFF5C06CB,0xFF400302,0xFF98183A,0xFF801312,0xFF3C08BF,0xFECC0005,0xB9FC1CB0,0x1DC0603,0xFFD40556,0xFFCC04C2,0xFFCC0482,0xFFD00433,0xFFC40336,0xFFBC02C5,0xFFAC0183,0xFFAC00DA,0xFF9C0001,0xCFFC0600,0xFFC004F6,0xFFB80480,0xFFA002C2,0xFF8801A9, -0xFF700000,0xE7FC0600,0xFF6C0480,0xFED80000,0xEE000600,0xCFFC0600,0xFFC004F6,0xFFB80480,0xFFA002C2,0xFF8801A9,0xFF700000,0xE7FC0600,0xFF6C0480,0xFED80000,0xEE000600,0xE7FC0600,0xFF6C0480,0xFED80000,0xEE000600,0xEE000600,0xFFD80565,0xF7DC05C1,0xF7DC05E2,0xFFC404EB,0xFFC003FE,0xFFA802E1,0xFFA00212,0xFF7C0172,0xFFD00575,0xFFC804AC,0xFF980489,0xFED80000, -0xE1FC0600,0x198152B,0x198152B,0x198152B,0x198152B,0xFF800E56,0xFF800E56,0xFF800E56,0xFF700863,0xFF700863,0xFF640622,0xFF680D11,0xFF680D11,0xFF680D11,0xFF4C04BA,0xFF4C04BA,0xFF44013D,0xFF380519,0xFF380519,0xF924007D,0xE72C0481,0x65FC152B,0x65FC152B,0x65FC152B,0xFF380AC2,0xFF380AC2,0xFF1C0620,0xFEFC0829,0xFEFC0829,0xFECC0005,0xE6E00480,0xB3FC152B, -0xB3FC152B,0xFE2C0620,0xE6000490,0xCC00152C,0xFF901212,0xFF8C13EB,0x198152B,0xFF800EF9,0xFF6C0B5E,0xFF5C082E,0xFF5C06CB,0xFF400302,0xFF8011D1,0xFF740E66,0xFF3C089B,0xFECC0005,0x9FFC152B,0x1CC0482,0x1CC0482,0x1CC0482,0x1CC0482,0xFFBC02C5,0xFFBC02C5,0xFFBC02C5,0xFFAC00DA,0xFFAC00DA,0xFF9C0001,0xB7FC0480,0xB7FC0480,0xB7FC0480,0xFF8801A9,0xFF8801A9, -0xFF700000,0xDDF40480,0xDDF40480,0xFED80000,0xE6000480,0xB7FC0480,0xB7FC0480,0xB7FC0480,0xFF8801A9,0xFF8801A9,0xFF700000,0xDDF40480,0xDDF40480,0xFED80000,0xE6000480,0xDDF40480,0xDDF40480,0xFED80000,0xE6000480,0xE6000480,0xFDC80422,0xFFCC0422,0x1CC0482,0xFDC003CA,0xFFAC0321,0xFFA0028D,0xFFA00212,0xFF7C0172,0xFFC40422,0xFFB003C5,0xD3FC0480,0xFED80000, -0xD3FC0480,0x1FC0002,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000, -0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0002,0xF7FC0002,0xF7FC0002,0xFDFC0002,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFFFC0000,0xFDFC0002,0xFDFC0002,0xFFFC0000,0xFE000000,0xFFFC0000,0x1640622,0x1640622,0x1640622,0x1640622,0x1640622,0x1640622,0x1640622,0x1640622,0x1640622,0x1640622,0xFF44013D,0xFF44013D,0xFF44013D,0xFF44013D,0xFF44013D, -0xFF44013D,0xEB2C0001,0xEB2C0001,0xEB2C0001,0xCF2C0001,0x19FC0620,0x19FC0620,0x19FC0620,0x19FC0620,0x19FC0620,0x19FC0620,0xFECC0005,0xFECC0005,0xFECC0005,0xCEF80000,0x8FF80620,0x8FF80620,0x8FF80620,0xCE480000,0xB2000620,0xF9600515,0x1640622,0x1640622,0xFF5803CA,0xFF5002DA,0xFF4C0202,0xFF4C0202,0xFF400091,0xFD5404B1,0xFF50039D,0xFF24000D,0xFECC0005, -0x71FC0620,}; -static const uint32_t g_etc1_to_bc7_m6_table189[] = { -0x13C0001,0x13C0001,0x13C0001,0x13C0001,0x13C0001,0x13C0001,0x13C0001,0x13C0001,0x13C0001,0x13C0001,0x13C0001,0x13C0001,0x13C0001,0x13C0001,0x13C0001,0x13C0001,0x13C0001,0x13C0001,0x13C0001,0x13C0001,0x1D80000,0x1D80000,0x1D80000,0x1D80000,0x1D80000,0x1D80000,0x1D80000,0x1D80000,0x1D80000,0x1D80000,0x71F80000, -0x71F80000,0x71F80000,0x71F80000,0x9E000000,0x13C0001,0x13C0001,0x13C0001,0x13C0001,0x13C0001,0x13C0001,0x13C0001,0x13C0001,0x1540000,0x1540000,0x1540000,0x1D80000,0x4BFC0000,0x1AC0001,0x1AC0001,0x1AC0001,0x1AC0001,0x1AC0001,0x1AC0001,0x1AC0001,0x1AC0001,0x1AC0001,0x1AC0001,0x87FC0000,0x87FC0000,0x87FC0000,0x87FC0000,0x87FC0000, -0x87FC0000,0xC5F80000,0xC5F80000,0xC5F80000,0xD6000000,0x87FC0000,0x87FC0000,0x87FC0000,0x87FC0000,0x87FC0000,0x87FC0000,0xC5F80000,0xC5F80000,0xC5F80000,0xD6000000,0xC5F80000,0xC5F80000,0xC5F80000,0xD6000000,0xD6000000,0xDC80000,0x1AC0001,0x1AC0001,0x1F40000,0x3DFC0000,0x6BFC0000,0x6BFC0000,0x9DFC0000,0x1F40000,0x3DFC0000,0xB5FC0000,0xC5F80000, -0xB5FC0000,0x1FC0001,0x1FC0001,0x1FC0001,0x1FC0001,0xFDFC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000, -0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFBFC0001,0xF7FC0001,0x1FC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFFFC0000,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0x1FC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000, -0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xF7FC0001,0xF7FC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFFF00000,0xFE000000, -0xFFFC0000,0x1B81834,0xFFB01547,0xFFA812FF,0xFFA4122B,0xFFA4114A,0xFF980E07,0xFF8C0CB6,0xFF880994,0xFF7C07EB,0xFF740622,0xFF981115,0xFF800CE2,0xFF800B29,0xFF7006D3,0xFF64046A,0xFF500195,0xFF580704,0xFF4C03F3,0xFD380035,0xF13C042D,0x99FC1830,0xFF7C13E9,0xFF78122B,0xFF580CF2,0xFF4C09E9,0xFF340620,0xFF380B89,0xFF1406C9,0xFEE40025,0xF0EC042D,0xCDFC1830, -0xFEEC122B,0xFE600620,0xF0000435,0xDC001830,0xFFA814D6,0xFFAC171A,0xF5B817AC,0xFF9810D6,0xFF880C93,0xFF700806,0xFF68061E,0xFF5802DE,0xFFA014B2,0xFF901042,0xFF58074F,0xFEE40025,0xBFFC1830,0x1E4042B,0xFFDC03AB,0xFFD80346,0xFFD40322,0xFFD002E3,0xFFC8023E,0xFFC401E2,0xFFB8010B,0xFFB80092,0xFFAC0001,0xD9FC042B,0xFFCC0372,0xFFC00322,0xFFAC01E2,0xFFA00121, -0xFF880000,0xEDF8042B,0xFF840320,0xFF080000,0xF000042C,0xD9FC042B,0xFFCC0372,0xFFC00322,0xFFAC01E2,0xFFA00121,0xFF880000,0xEDF8042B,0xFF840320,0xFF080000,0xF000042C,0xEDF8042B,0xFF840320,0xFF080000,0xF000042C,0xF000042C,0xFFD803C5,0xF9E003F9,0xFBE40412,0xFFD40355,0xFFC802BD,0xFFB801F5,0xFFA80161,0xFF8C0105,0xFFDC03C5,0xFFC8034C,0xFFA80329,0xFF080000, -0xE7FC042B,0x1A4122B,0x1A4122B,0x1A4122B,0x1A4122B,0xFF8C0CB6,0xFF8C0CB6,0xFF8C0CB6,0xFF7C07EB,0xFF7C07EB,0xFF740622,0xFF800B29,0xFF800B29,0xFF800B29,0xFF64046A,0xFF64046A,0xFF500195,0xFF4C03F3,0xFF4C03F3,0xFB3C002A,0xEB3C0321,0x77FC122B,0x77FC122B,0x77FC122B,0xFF4C09E9,0xFF4C09E9,0xFF340620,0xFF1406C9,0xFF1406C9,0xFEE40025,0xEAF40320,0xBDF8122B, -0xBDF8122B,0xFE600620,0xEA040320,0xD000122C,0xFD9C0FA9,0xF9A01122,0x1A4122B,0xFF900D02,0xFF8009FE,0xFF700742,0xFF68061E,0xFF5802DE,0xFF940F4C,0xFF800CA1,0xFF580736,0xFEE40025,0xABFC122B,0x1D40322,0x1D40322,0x1D40322,0x1D40322,0xFFC401E2,0xFFC401E2,0xFFC401E2,0xFFB80092,0xFFB80092,0xFFAC0001,0xC3FC0320,0xC3FC0320,0xC3FC0320,0xFFA00121,0xFFA00121, -0xFF880000,0xE1FC0320,0xE1FC0320,0xFF080000,0xEA000320,0xC3FC0320,0xC3FC0320,0xC3FC0320,0xFFA00121,0xFFA00121,0xFF880000,0xE1FC0320,0xE1FC0320,0xFF080000,0xEA000320,0xE1FC0320,0xE1FC0320,0xFF080000,0xEA000320,0xEA000320,0xFBD002D4,0xFFCC02F2,0x1D40322,0xFFC4029A,0xFFC00225,0xFFB001BD,0xFFA80161,0xFF8C0105,0xFDCC02D4,0xFFC80288,0xDBFC0320,0xFF080000, -0xDBFC0320,0x1FC0002,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000, -0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0002,0xF7FC0002,0xF7FC0002,0xFDFC0002,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFFFC0000,0xFDFC0002,0xFDFC0002,0xFFFC0000,0xFE000000,0xFFFC0000,0x1740622,0x1740622,0x1740622,0x1740622,0x1740622,0x1740622,0x1740622,0x1740622,0x1740622,0x1740622,0xFF500195,0xFF500195,0xFF500195,0xFF500195,0xFF500195, -0xFF500195,0xF33C0001,0xF33C0001,0xF33C0001,0xD73C0001,0x31FC0620,0x31FC0620,0x31FC0620,0x31FC0620,0x31FC0620,0x31FC0620,0xFEE40025,0xFEE40025,0xFEE40025,0xD7080000,0x9BF80620,0x9BF80620,0x9BF80620,0xD6580000,0xBA000620,0xFF6C0521,0x1740622,0x1740622,0xFF6803F9,0xFF640322,0xFF5C024A,0xFF5C024A,0xFF4C00DA,0xF96804E2,0xFF5803E8,0xFF38002D,0xFEE40025, -0x7FFC0620,}; -static const uint32_t g_etc1_to_bc7_m6_table190[] = { -0x14C0001,0x14C0001,0x14C0001,0x14C0001,0x14C0001,0x14C0001,0x14C0001,0x14C0001,0x14C0001,0x14C0001,0x14C0001,0x14C0001,0x14C0001,0x14C0001,0x14C0001,0x14C0001,0x14C0001,0x14C0001,0x14C0001,0x14C0001,0x1F00000,0x1F00000,0x1F00000,0x1F00000,0x1F00000,0x1F00000,0x1F00000,0x1F00000,0x1F00000,0x1F00000,0x7DF80000, -0x7DF80000,0x7DF80000,0x7DF80000,0xA6000000,0x14C0001,0x14C0001,0x14C0001,0x14C0001,0x14C0001,0x14C0001,0x14C0001,0x14C0001,0x1640000,0x1640000,0x1640000,0x1F00000,0x5BFC0000,0x1BC0001,0x1BC0001,0x1BC0001,0x1BC0001,0x1BC0001,0x1BC0001,0x1BC0001,0x1BC0001,0x1BC0001,0x1BC0001,0x9FFC0000,0x9FFC0000,0x9FFC0000,0x9FFC0000,0x9FFC0000, -0x9FFC0000,0xD1F80000,0xD1F80000,0xD1F80000,0xDE000000,0x9FFC0000,0x9FFC0000,0x9FFC0000,0x9FFC0000,0x9FFC0000,0x9FFC0000,0xD1F80000,0xD1F80000,0xD1F80000,0xDE000000,0xD1F80000,0xD1F80000,0xD1F80000,0xDE000000,0xDE000000,0x1DC0000,0x1BC0001,0x1BC0001,0x1FFC0000,0x63FC0000,0x89FC0000,0x89FC0000,0xB1FC0000,0x1FFC0000,0x63FC0000,0xC3FC0000,0xD1F80000, -0xC3FC0000,0x1FC0001,0x1FC0001,0x1FC0001,0x1FC0001,0xFDFC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000, -0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFBFC0001,0xF7FC0001,0x1FC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFFFC0000,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0x1FC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000, -0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xF7FC0001,0xF7FC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFFF00000,0xFE000000, -0xFFFC0000,0x1C01434,0xFFBC11F7,0xFFB4102B,0xFFAC0F83,0xFFB00EDA,0xFFA40C47,0xFF980B46,0xFF9408C4,0xFF88078B,0xFF840622,0xFFA40E45,0xFF8C0AF2,0xFF8C0989,0xFF7C0613,0xFF700432,0xFF6801ED,0xFF64058C,0xFF58030B,0xFD4C000A,0xF54C02AD,0xA5FC1430,0xFF9410D1,0xFF880F80,0xFF700B62,0xFF640911,0xFF4C0620,0xFF4C09AB,0xFF2C05A9,0xFF080059,0xF50002AD,0xD3FC1430, -0xFF080F80,0xFE900620,0xF40C02AC,0xE0001430,0xFFB4117B,0xF9C01344,0xF9C013BC,0xFFAC0E6E,0xFF940AD2,0xFF7C073E,0xFF7805B3,0xFF6C02C3,0xFFB4111B,0xFF980DEE,0xFF70060B,0xFF080059,0xC7FC1430,0x1E802AB,0xFDE40263,0xFFE0021B,0xFFDC0202,0xFFDC01D3,0xFFD4016E,0xFFD00132,0xFFCC00B1,0xFFC00065,0xFFBC0001,0xDFFC02AB,0xFFD80236,0xFFCC0202,0xFFB80132,0xFFAC00B9, -0xFFA00000,0xEFFC02AB,0xFF9C0200,0xFF380000,0xF40002AC,0xDFFC02AB,0xFFD80236,0xFFCC0202,0xFFB80132,0xFFAC00B9,0xFFA00000,0xEFFC02AB,0xFF9C0200,0xFF380000,0xF40002AC,0xEFFC02AB,0xFF9C0200,0xFF380000,0xF40002AC,0xF40002AC,0xFFE4026D,0xFDE80281,0xFDE80296,0xFFDC0215,0xFFD401C2,0xFFBC0152,0xFFB800E8,0xFFA8009D,0xFFE00272,0xFFDC020E,0xFFB80204,0xFF380000, -0xEBFC02AB,0x1AC0F83,0x1AC0F83,0x1AC0F83,0x1AC0F83,0xFF980B46,0xFF980B46,0xFF980B46,0xFF88078B,0xFF88078B,0xFF840622,0xFF8C0989,0xFF8C0989,0xFF8C0989,0xFF700432,0xFF700432,0xFF6801ED,0xFF58030B,0xFF58030B,0xFD4C0006,0xEF4C0201,0x87FC0F80,0x87FC0F80,0x87FC0F80,0xFF640911,0xFF640911,0xFF4C0620,0xFF2C05A9,0xFF2C05A9,0xFF080059,0xEF080200,0xC5F80F80, -0xC5F80F80,0xFE900620,0xEE280200,0xD6000F80,0xFFA00D61,0xFFAC0E96,0x1AC0F83,0xFF980B42,0xFF8C08EE,0xFF7C0695,0xFF7805B3,0xFF6C02C3,0xFFA00D29,0xFF900AF9,0xFF7005FB,0xFF080059,0xB5FC0F80,0x1DC0202,0x1DC0202,0x1DC0202,0x1DC0202,0xFFD00132,0xFFD00132,0xFFD00132,0xFFC00065,0xFFC00065,0xFFBC0001,0xCFFC0200,0xCFFC0200,0xCFFC0200,0xFFAC00B9,0xFFAC00B9, -0xFFA00000,0xE7FC0200,0xE7FC0200,0xFF380000,0xEE000200,0xCFFC0200,0xCFFC0200,0xCFFC0200,0xFFAC00B9,0xFFAC00B9,0xFFA00000,0xE7FC0200,0xE7FC0200,0xFF380000,0xEE000200,0xE7FC0200,0xE7FC0200,0xFF380000,0xEE000200,0xEE000200,0xFFD801C4,0xF7DC01E1,0x1DC0202,0xFDD801A5,0xFFC80164,0xFFBC0121,0xFFB800E8,0xFFA8009D,0xFFD001D4,0xFBD401A5,0xE1FC0200,0xFF380000, -0xE1FC0200,0x1FC0002,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000, -0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0002,0xF7FC0002,0xF7FC0002,0xFDFC0002,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFFFC0000,0xFDFC0002,0xFDFC0002,0xFFFC0000,0xFE000000,0xFFFC0000,0x1840622,0x1840622,0x1840622,0x1840622,0x1840622,0x1840622,0x1840622,0x1840622,0x1840622,0x1840622,0xFF6801ED,0xFF6801ED,0xFF6801ED,0xFF6801ED,0xFF6801ED, -0xFF6801ED,0xFB4C0001,0xFB4C0001,0xFB4C0001,0xDF4C0001,0x49FC0620,0x49FC0620,0x49FC0620,0x49FC0620,0x49FC0620,0x49FC0620,0xFF080059,0xFF080059,0xFF080059,0xDF180000,0xA7F80620,0xA7F80620,0xA7F80620,0xDE680000,0xC2000620,0xF980054A,0x1840622,0x1840622,0xFF740442,0xFF780372,0xFF7002B1,0xFF7002B1,0xFF5C0131,0xFF7404EA,0xFD740422,0xFF500075,0xFF080059, -0x8FFC0620,}; -static const uint32_t g_etc1_to_bc7_m6_table191[] = { -0x15C0001,0x15C0001,0x15C0001,0x15C0001,0x15C0001,0x15C0001,0x15C0001,0x15C0001,0x15C0001,0x15C0001,0x15C0001,0x15C0001,0x15C0001,0x15C0001,0x15C0001,0x15C0001,0x15C0001,0x15C0001,0x15C0001,0x15C0001,0xDFC0000,0xDFC0000,0xDFC0000,0xDFC0000,0xDFC0000,0xDFC0000,0xDFC0000,0xDFC0000,0xDFC0000,0xDFC0000,0x89F80000, -0x89F80000,0x89F80000,0x89F80000,0xAE000000,0x15C0001,0x15C0001,0x15C0001,0x15C0001,0x15C0001,0x15C0001,0x15C0001,0x15C0001,0x3740000,0x3740000,0x3740000,0xDFC0000,0x69FC0000,0x1CC0001,0x1CC0001,0x1CC0001,0x1CC0001,0x1CC0001,0x1CC0001,0x1CC0001,0x1CC0001,0x1CC0001,0x1CC0001,0xB7FC0000,0xB7FC0000,0xB7FC0000,0xB7FC0000,0xB7FC0000, -0xB7FC0000,0xDDF40000,0xDDF40000,0xDDF40000,0xE6000000,0xB7FC0000,0xB7FC0000,0xB7FC0000,0xB7FC0000,0xB7FC0000,0xB7FC0000,0xDDF40000,0xDDF40000,0xDDF40000,0xE6000000,0xDDF40000,0xDDF40000,0xDDF40000,0xE6000000,0xE6000000,0x1EC0000,0x1CC0001,0x1CC0001,0x57FC0000,0x8BFC0000,0xA7FC0000,0xA7FC0000,0xC5FC0000,0x57FC0000,0x8BFC0000,0xD3FC0000,0xDDF40000, -0xD3FC0000,0x1FC0001,0x1FC0001,0x1FC0001,0x1FC0001,0xFDFC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000, -0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFBFC0001,0xF7FC0001,0x1FC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFFFC0000,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0x1FC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000, -0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xF7FC0001,0xF7FC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFFF00000,0xFE000000, -0xFFFC0000,0x1C810B4,0xFFC40EF4,0xFFB80DA4,0xFFB80D2B,0xFFB00CBA,0xFFB00ABF,0xFFA40A06,0xFFA00814,0xFF9C0732,0xFF940622,0xFFB00BDD,0xFF980952,0xFF980831,0xFF88058B,0xFF84041A,0xFF74025D,0xFF7C045C,0xFF700263,0xFF600005,0xF75C0181,0xB1FC10B0,0xFFA00E21,0xFF980D2C,0xFF7C0A12,0xFF700851,0xFF640620,0xFF6407F3,0xFF3804E9,0xFF2000A9,0xF7180180,0xD9FC10B0, -0xFF280D2B,0xFEC00620,0xF6380180,0xE40010B0,0xFFBC0E86,0xFDC80FE4,0xFDC8104C,0xFFAC0C2E,0xFFA00963,0xFF90068E,0xFF900555,0xFF7402DE,0xFFB40E4B,0xFFB00BC7,0xFF7C0521,0xFF2000A9,0xCFFC10B0,0x1EC0183,0xFFE80153,0xFFE40132,0xFFE40122,0xFFE8010B,0xFFDC00CE,0xFFDC00AA,0xFFD80061,0xFFD4003A,0xFFCC0001,0xE9FC0180,0xFFE00141,0xFFD80122,0xFFCC00B1,0xFFC0006D, -0xFFB80000,0xF3FC0180,0xFFB40120,0xFF6C0000,0xF6000180,0xE9FC0180,0xFFE00141,0xFFD80122,0xFFCC00B1,0xFFC0006D,0xFFB80000,0xF3FC0180,0xFFB40120,0xFF6C0000,0xF6000180,0xF3FC0180,0xFFB40120,0xFF6C0000,0xF6000180,0xF6000180,0xFBEC0161,0xFFEC0161,0xFFEC0172,0xFFE00143,0xFFDC00F9,0xFFD000C3,0xFFD00082,0xFFB8005A,0xF9EC0161,0xFFDC012E,0xFFD00123,0xFF6C0000, -0xF1FC0180,0x1B80D2B,0x1B80D2B,0x1B80D2B,0x1B80D2B,0xFFA40A06,0xFFA40A06,0xFFA40A06,0xFF9C0732,0xFF9C0732,0xFF940622,0xFF980831,0xFF980831,0xFF980831,0xFF84041A,0xFF84041A,0xFF74025D,0xFF700263,0xFF700263,0xFF600005,0xF35C0121,0x95FC0D2B,0x95FC0D2B,0x95FC0D2B,0xFF700851,0xFF700851,0xFF640620,0xFF3804E9,0xFF3804E9,0xFF2000A9,0xF31C0120,0xCBFC0D2B, -0xCBFC0D2B,0xFEC00620,0xF2480120,0xDC000D2C,0xFFAC0B7E,0xF5B80CA3,0x1B80D2B,0xFFA409EB,0xFF9407DE,0xFF900615,0xFF900555,0xFF7402DE,0xFDB00B5E,0xFF9809A5,0xFF7C0511,0xFF2000A9,0xBFF80D2B,0x1E40122,0x1E40122,0x1E40122,0x1E40122,0xFFDC00AA,0xFFDC00AA,0xFFDC00AA,0xFFD4003A,0xFFD4003A,0xFFCC0001,0xDBFC0120,0xDBFC0120,0xDBFC0120,0xFFC0006D,0xFFC0006D, -0xFFB80000,0xEDFC0120,0xEDFC0120,0xFF6C0000,0xF2000120,0xDBFC0120,0xDBFC0120,0xDBFC0120,0xFFC0006D,0xFFC0006D,0xFFB80000,0xEDFC0120,0xEDFC0120,0xFF6C0000,0xF2000120,0xEDFC0120,0xEDFC0120,0xFF6C0000,0xF2000120,0xF2000120,0xF7E40109,0xFBE40109,0x1E40122,0xFFDC00E1,0xFFD400C1,0xFFD000AA,0xFFD00082,0xFFB8005A,0xF5E40109,0xFFDC00DD,0xE9FC0120,0xFF6C0000, -0xE9FC0120,0x1FC0002,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000, -0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0002,0xF7FC0002,0xF7FC0002,0xFDFC0002,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFFFC0000,0xFDFC0002,0xFDFC0002,0xFFFC0000,0xFE000000,0xFFFC0000,0x1940622,0x1940622,0x1940622,0x1940622,0x1940622,0x1940622,0x1940622,0x1940622,0x1940622,0x1940622,0xFF74025D,0xFF74025D,0xFF74025D,0xFF74025D,0xFF74025D, -0xFF74025D,0xFF600005,0xFF600005,0xFF600005,0xE75C0001,0x63FC0620,0x63FC0620,0x63FC0620,0x63FC0620,0x63FC0620,0x63FC0620,0xFF2000A9,0xFF2000A9,0xFF2000A9,0xE7280000,0xB3F80620,0xB3F80620,0xB3F80620,0xE6780000,0xCA000620,0xFF8C055A,0x1940622,0x1940622,0xFF840479,0xFF8003C5,0xFF800305,0xFF800305,0xFF700195,0xFD8C0515,0xFF80045D,0xFF6000CD,0xFF2000A9, -0x9FF80620,}; -static const uint32_t g_etc1_to_bc7_m6_table192[] = { -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1, -0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, -0x0,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1, -0x1,0x400001,0x400001,0x400001,0x400001,0x600000,0x600000,0x600000,0xC40000,0xC40000,0x20000000,0x600000,0x600000,0x600000,0xC40000,0xC40000,0x20000000,0xC40000,0xC40000,0x20000000,0x20000000,0x600000,0x600000,0x600000,0xC40000,0xC40000,0x20000000,0xC40000,0xC40000,0x20000000,0x20000000,0xC40000, -0xC40000,0x20000000,0x20000000,0x20000000,0x4C0000,0xA440000,0x400001,0x580000,0x26C0000,0x8C0000,0xA00000,0xF00000,0x4500000,0x600000,0x8C0000,0x20000000,0x8C0000,0xD40000,0x13C0000,0x21FC0000,0x68000001,0x13C0000,0x21FC0000,0x68000001,0x21FC0000,0x68000001,0x68000001,0x13C0000,0x21FC0000,0x68000001,0x21FC0000,0x68000001, -0x68000001,0x21FC0000,0x68000001,0x68000001,0x68000001,0x13C0000,0x21FC0000,0x68000001,0x21FC0000,0x68000001,0x68000001,0x21FC0000,0x68000001,0x68000001,0x68000001,0x21FC0000,0x68000001,0x68000001,0x68000001,0x68000001,0x3080000,0x8E00000,0x8E00000,0x1640000,0x5FC0000,0x45F40000,0x68000001,0x68000001,0x1200000,0x18C0000,0x61D40000,0x68000001, -0x1C00000,0x441D49,0xFE1C039A,0x981402D9,0x681402DA,0xD0000A69,0x92000112,0x68000002,0x66000A69,0x560003DA,0x44000A69,0x8A0016FD,0x7A000882,0x62000432,0x58000E66,0x520006FB,0x40000C4A,0x440016FD,0x44000E46,0x38001145,0x2E0016FE,0x681D47,0x68000DD2,0x580007C3,0x52001187,0x4C000994,0x40000E03,0x400018C6,0x3E001027,0x360012AA,0x2E0017DF,0xD01D47, -0x380014C2,0x3200161D,0x26001A42,0x22001D47,0xFE140B92,0xF4381671,0xF8401611,0xC80006E0,0x8A000732,0x660006FD,0x5A0004DA,0x4A000929,0xF2000CF6,0x9E00098E,0x52000B32,0x360012AA,0x941D47,0x5C16FD,0xFE240289,0x94200222,0x68200222,0xD0000A69,0x92000112,0x68000002,0x66000A69,0x560003DA,0x44000A69,0x8816FD,0x7A000882,0x62000432,0x58000E66,0x520006FB, -0x40000C4A,0x11416FD,0x44000E46,0x38001145,0x2E0016FE,0x8816FD,0x7A000882,0x62000432,0x58000E66,0x520006FB,0x40000C4A,0x11416FD,0x44000E46,0x38001145,0x2E0016FE,0x11416FD,0x44000E46,0x38001145,0x2E0016FE,0x2E0016FE,0xFE140B2E,0xFC481271,0xFE4C1121,0xC80006E0,0x8A000732,0x660006FD,0x5A0004DA,0x4A000929,0xFA000BFE,0x9E00092A,0x52000B19,0x38001145, -0xC016FD,0x1402D9,0x1402D9,0x1402D9,0x1402D9,0x64000000,0x64000000,0x64000000,0x30000000,0x30000000,0x20000000,0x30000221,0x30000221,0x30000221,0x280000C2,0x280000C2,0x1E000068,0x18000221,0x18000221,0x16000145,0x10000221,0x2002D6,0x2002D6,0x2002D6,0x22000143,0x22000143,0x180000C0,0x1200025D,0x1200025D,0x14000185,0xE00023E,0x3C02D6, -0x3C02D6,0x100001F2,0xE000289,0xA0002D6,0xC40000A9,0xFE0C00C1,0x1402D9,0x640000E8,0x3C0000D0,0x2E0000D0,0x2E0000A9,0x220000F5,0x64000178,0x44000138,0x1E000225,0x14000185,0x2C02D6,0x200221,0x200221,0x200221,0x200221,0x64000000,0x64000000,0x64000000,0x30000000,0x30000000,0x20000000,0x300221,0x300221,0x300221,0x280000C2,0x280000C2, -0x1E000068,0x5C0221,0x5C0221,0x16000145,0x10000221,0x300221,0x300221,0x300221,0x280000C2,0x280000C2,0x1E000068,0x5C0221,0x5C0221,0x16000145,0x10000221,0x5C0221,0x5C0221,0x16000145,0x10000221,0x10000221,0xC40000A9,0xFE0C009D,0x200221,0x640000E8,0x3C0000D0,0x2E0000D0,0x2E0000A9,0x220000F5,0x74000151,0x4A000121,0x400221,0x16000145, -0x400221,0x8C0A69,0xFC440001,0x8C440001,0x68400002,0xCC0A69,0x92000112,0x68000002,0x1A00A69,0x560003DA,0x44000A69,0xCC0A69,0x92000112,0x68000002,0x1A00A69,0x560003DA,0x44000A69,0x1A00A69,0x560003DA,0x44000A69,0x44000A69,0xCC0A69,0x92000112,0x68000002,0x1A00A69,0x560003DA,0x44000A69,0x1A00A69,0x560003DA,0x44000A69,0x44000A69,0x1A00A69, -0x560003DA,0x44000A69,0x44000A69,0x44000A69,0xFE3406B2,0x940A69,0xF8800745,0xDE000385,0x96000410,0x720003D4,0x5E00028A,0x54000502,0xFE180659,0xBA000454,0x64000232,0x44000A69,0x1240A69,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, -0x0,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x1,0x2,0x2,0x2,0x2,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1, -0x2,}; -static const uint32_t g_etc1_to_bc7_m6_table193[] = { -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1, -0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, -0x0,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1, -0x1,0x500001,0x500001,0x500001,0x500001,0x780000,0x780000,0x780000,0xF40000,0xF40000,0x28000000,0x780000,0x780000,0x780000,0xF40000,0xF40000,0x28000000,0xF40000,0xF40000,0x28000000,0x28000000,0x780000,0x780000,0x780000,0xF40000,0xF40000,0x28000000,0xF40000,0xF40000,0x28000000,0x28000000,0xF40000, -0xF40000,0x28000000,0x28000000,0x28000000,0x600000,0x580000,0x500001,0x700000,0x880000,0xAC0000,0xC80000,0x12C0000,0x4640000,0x780000,0xAC0000,0x28000000,0xAC0000,0xE40000,0x3500000,0x2DFC0000,0x70000001,0x3500000,0x2DFC0000,0x70000001,0x2DFC0000,0x70000001,0x70000001,0x3500000,0x2DFC0000,0x70000001,0x2DFC0000,0x70000001, -0x70000001,0x2DFC0000,0x70000001,0x70000001,0x70000001,0x3500000,0x2DFC0000,0x70000001,0x2DFC0000,0x70000001,0x70000001,0x2DFC0000,0x70000001,0x70000001,0x70000001,0x2DFC0000,0x70000001,0x70000001,0x70000001,0x70000001,0x31C0000,0xF40000,0xF40000,0x1800000,0x13F80000,0x4FF40000,0x70000001,0x70000001,0x3340000,0x1AC0000,0x69E40000,0x70000001, -0x1E40000,0x4C21E1,0xFE2405DD,0xA21C0461,0x701C0462,0xEA000A69,0xA20000A0,0x7200000A,0x72000A69,0x60000361,0x4C000A69,0x9C001A0D,0x860009AA,0x68000506,0x68000F41,0x58000723,0x46000CCE,0x4C001A0D,0x4A001006,0x3E0012F1,0x32001A0E,0x7421DF,0x7400101A,0x62000932,0x62001345,0x52000A54,0x46000EDF,0x46001C46,0x44001257,0x3C0014AA,0x30001B22,0xE821DF, -0x3E0017F2,0x320018ED,0x2C001E16,0x260021DF,0xFE140E42,0xF8401A29,0xFC481A39,0xDE000716,0x9A000789,0x7000072D,0x5E0004BB,0x560009B3,0xFE000ECD,0xB6000A4B,0x56000C76,0x3C0014AA,0xA421DF,0x681A0D,0xFE300425,0x9E28034A,0x7028034A,0xEA000A69,0xA20000A0,0x72040009,0x72000A69,0x60000361,0x4C000A69,0x2981A0D,0x860009AA,0x68000506,0x68000F41,0x58000723, -0x46000CCE,0x1381A0D,0x4A001006,0x3E0012F1,0x32001A0E,0x2981A0D,0x860009AA,0x68000506,0x68000F41,0x58000723,0x46000CCE,0x1381A0D,0x4A001006,0x3E0012F1,0x32001A0E,0x1381A0D,0x4A001006,0x3E0012F1,0x32001A0E,0x32001A0E,0xFE200D73,0xFE4C1521,0xF860142A,0xDE000716,0x9A000789,0x7000072D,0x5E0004BB,0x560009B3,0xFE000DCD,0xBC0009CE,0x56000C5D,0x3E0012F1, -0xDC1A0D,0x1C0461,0x1C0461,0x1C0461,0x1C0461,0x7C000000,0x7C000000,0x7C000000,0x3C000000,0x3C000000,0x28000000,0x3C000349,0x3C000349,0x3C000349,0x2E000132,0x2E000132,0x2200009D,0x1E000349,0x1E000349,0x1C0001F9,0x14000349,0x280461,0x280461,0x280461,0x280001FB,0x280001FB,0x22000116,0x180003A1,0x180003A1,0x1A000259,0x12000371,0x500461, -0x500461,0x16000306,0x100003DA,0xC000462,0xF6000105,0xFE0C01B1,0x1C0461,0x7A000161,0x50000140,0x40000145,0x38000112,0x2A000172,0x82000248,0x500001DD,0x2400034D,0x1A000259,0x380461,0x280349,0x280349,0x280349,0x280349,0x7C000000,0x7C000000,0x7C000000,0x3C000000,0x3C000000,0x28000000,0x3C0349,0x3C0349,0x3C0349,0x2E000132,0x2E000132, -0x2200009D,0x740349,0x740349,0x1C0001F9,0x14000349,0x3C0349,0x3C0349,0x3C0349,0x2E000132,0x2E000132,0x2200009D,0x740349,0x740349,0x1C0001F9,0x14000349,0x740349,0x740349,0x1C0001F9,0x14000349,0x14000349,0xF6000105,0xF4180154,0x280349,0x7A000161,0x50000140,0x40000145,0x38000112,0x2A000172,0x82000208,0x5A0001BD,0x540349,0x1C0001F9, -0x540349,0x9C0A69,0xFE540005,0x94540001,0x70500002,0xE40A69,0xA20000A0,0x700C0001,0x1D00A69,0x60000361,0x4C000A69,0xE40A69,0xA20000A0,0x700C0001,0x1D00A69,0x60000361,0x4C000A69,0x1D00A69,0x60000361,0x4C000A69,0x4C000A69,0xE40A69,0xA20000A0,0x700C0001,0x1D00A69,0x60000361,0x4C000A69,0x1D00A69,0x60000361,0x4C000A69,0x4C000A69,0x1D00A69, -0x60000361,0x4C000A69,0x4C000A69,0x4C000A69,0xFE5006CD,0xA40A69,0xFE8C0749,0xF4000304,0xA0000384,0x7C000335,0x66000209,0x5C000492,0xFE2C0694,0xCC0003E8,0x6E0001A8,0x4C000A69,0x1480A69,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, -0x0,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x1,0x2,0x2,0x2,0x2,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1, -0x2,}; -static const uint32_t g_etc1_to_bc7_m6_table194[] = { -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1, -0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, -0x0,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1, -0x1,0x600001,0x600001,0x600001,0x600001,0x900000,0x900000,0x900000,0x1240000,0x1240000,0x30000000,0x900000,0x900000,0x900000,0x1240000,0x1240000,0x30000000,0x1240000,0x1240000,0x30000000,0x30000000,0x900000,0x900000,0x900000,0x1240000,0x1240000,0x30000000,0x1240000,0x1240000,0x30000000,0x30000000,0x1240000, -0x1240000,0x30000000,0x30000000,0x30000000,0x2700000,0x680000,0x600001,0x840000,0xA40000,0xD00000,0xEC0000,0x1680000,0x4780000,0x900000,0xD00000,0x30000000,0xD00000,0xF40000,0x3680000,0x39FC0000,0x78000001,0x3680000,0x39FC0000,0x78000001,0x39FC0000,0x78000001,0x78000001,0x3680000,0x39FC0000,0x78000001,0x39FC0000,0x78000001, -0x78000001,0x39FC0000,0x78000001,0x78000001,0x78000001,0x3680000,0x39FC0000,0x78000001,0x39FC0000,0x78000001,0x78000001,0x39FC0000,0x78000001,0x78000001,0x78000001,0x39FC0000,0x78000001,0x78000001,0x78000001,0x78000001,0x3300000,0x1040000,0x1040000,0x1980000,0x1FFC0000,0x59F40000,0x78000001,0x78000001,0x14C0000,0x1C80000,0x71F40000,0x78000001, -0x5FC0000,0x5426F9,0xFE3008D5,0xAC200642,0x78200642,0xFE000A6D,0xAE000050,0x7A04003A,0x7E000A69,0x6C0002E9,0x54000A69,0xAC001D72,0x92000B12,0x6E000632,0x6E001055,0x62000755,0x52000D4E,0x54001D72,0x5000120E,0x440014CD,0x38001D72,0x8026F7,0x7A0012C2,0x68000B0A,0x62001515,0x5E000B3C,0x4C000FDB,0x4C00202E,0x4A0014D7,0x440016DE,0x36001EC2,0x10026F7, -0x44001B8A,0x38001C09,0x32002262,0x2A0026F7,0xFE201173,0xFC481E61,0xFE4C1EE5,0xF4000768,0xA20007D3,0x7C000746,0x660004D2,0x60000A46,0xFE00117D,0xC6000B19,0x5E000E2A,0x440016DE,0xB426F7,0x701D75,0xFE3C0631,0xA83004B2,0x783004B2,0xFE000A6D,0xAE000050,0x7C080032,0x7E000A69,0x6C0002E9,0x54000A69,0xA81D72,0x92000B12,0x6E000632,0x6E001055,0x62000755, -0x52000D4E,0x1581D72,0x5000120E,0x440014CD,0x38001D72,0xA81D72,0x92000B12,0x6E000632,0x6E001055,0x62000755,0x52000D4E,0x1581D72,0x5000120E,0x440014CD,0x38001D72,0x1581D72,0x5000120E,0x440014CD,0x38001D72,0x38001D72,0xFE340FF2,0xF8601819,0xFC68174A,0xF4000768,0xA20007D3,0x7C000746,0x660004D2,0x60000A46,0xFE08103E,0xC6000A89,0x5E000E06,0x440014CD, -0xF01D72,0x200641,0x200641,0x200641,0x200641,0x94000000,0x94000000,0x94000000,0x48000000,0x48000000,0x30000000,0x480004B1,0x480004B1,0x480004B1,0x3A0001BA,0x3A0001BA,0x2E0000E5,0x220004B1,0x220004B1,0x200002E4,0x180004B1,0x300641,0x300641,0x300641,0x2E0002E3,0x2E0002E3,0x28000192,0x2200052A,0x2200052A,0x1C00035D,0x180004F1,0x5C0641, -0x5C0641,0x1C000462,0x1400058D,0x10000642,0xF60001A5,0xF4180304,0x200641,0x900001F4,0x5E0001CD,0x480001CD,0x44000184,0x2E00022D,0x9600034E,0x720002BB,0x2C0004BA,0x1C00035D,0x400641,0x3004B1,0x3004B1,0x3004B1,0x3004B1,0x94000000,0x94000000,0x94000000,0x48000000,0x48000000,0x30000000,0x4804B1,0x4804B1,0x4804B1,0x3A0001BA,0x3A0001BA, -0x2E0000E5,0x8C04B1,0x8C04B1,0x200002E4,0x180004B1,0x4804B1,0x4804B1,0x4804B1,0x3A0001BA,0x3A0001BA,0x2E0000E5,0x8C04B1,0x8C04B1,0x200002E4,0x180004B1,0x8C04B1,0x8C04B1,0x200002E4,0x180004B1,0x180004B1,0xF60001A5,0xF8200244,0x3004B1,0x900001F4,0x5E0001CD,0x480001CD,0x44000184,0x2E00022D,0xA40002F2,0x7200028A,0x6404B1,0x200002E4, -0x6404B1,0xAC0A69,0xFE680012,0x9C640001,0x78600002,0xFC0A69,0xAE000050,0x781C0001,0x3F80A69,0x6C0002E9,0x54000A69,0xFC0A69,0xAE000050,0x781C0001,0x3F80A69,0x6C0002E9,0x54000A69,0x3F80A69,0x6C0002E9,0x54000A69,0x54000A69,0xFC0A69,0xAE000050,0x781C0001,0x3F80A69,0x6C0002E9,0x54000A69,0x3F80A69,0x6C0002E9,0x54000A69,0x54000A69,0x3F80A69, -0x6C0002E9,0x54000A69,0x54000A69,0x54000A69,0xF6680708,0xB80A69,0xF8A00782,0xFC0002AD,0xB600031A,0x860002D5,0x70000195,0x6400042A,0xF44806CD,0xDE000361,0x76000128,0x54000A69,0x1680A69,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, -0x0,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x1,0x2,0x2,0x2,0x2,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1, -0x2,}; -static const uint32_t g_etc1_to_bc7_m6_table195[] = { -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1, -0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, -0x0,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1, -0x1,0x700001,0x700001,0x700001,0x700001,0xA80000,0xA80000,0xA80000,0x1580000,0x1580000,0x38000000,0xA80000,0xA80000,0xA80000,0x1580000,0x1580000,0x38000000,0x1580000,0x1580000,0x38000000,0x38000000,0xA80000,0xA80000,0xA80000,0x1580000,0x1580000,0x38000000,0x1580000,0x1580000,0x38000000,0x38000000,0x1580000, -0x1580000,0x38000000,0x38000000,0x38000000,0x840000,0x4780000,0x700001,0x2980000,0xC00000,0xF00000,0x1140000,0x1A40000,0x48C0000,0xA80000,0xF00000,0x38000000,0xF00000,0x1040000,0x3800000,0x45FC0000,0x80000001,0x3800000,0x45FC0000,0x80000001,0x45FC0000,0x80000001,0x80000001,0x3800000,0x45FC0000,0x80000001,0x45FC0000,0x80000001, -0x80000001,0x45FC0000,0x80000001,0x80000001,0x80000001,0x3800000,0x45FC0000,0x80000001,0x45FC0000,0x80000001,0x80000001,0x45FC0000,0x80000001,0x80000001,0x80000001,0x45FC0000,0x80000001,0x80000001,0x80000001,0x80000001,0x3440000,0x3140000,0x3140000,0x1B40000,0x2DFC0000,0x63F40000,0x80000001,0x80000001,0x1600000,0x1E80000,0x7BC80000,0x80000001, -0x15FC0000,0x5C2C91,0xFE300C45,0xB6280879,0x8024087A,0xFE0C0AED,0xBA000020,0x8208009A,0x8A000A69,0x72000271,0x5C000A69,0xBC00212D,0xA2000C99,0x7A000792,0x7A001185,0x680007B9,0x58000DDA,0x5C00212D,0x5600145E,0x4A0016D9,0x3E00212E,0x8C2C8F,0x860015BA,0x6E000D42,0x6E001735,0x62000C25,0x520010F7,0x5200247E,0x500017A7,0x4A00194A,0x3A0022B7,0x1182C8F, -0x44001F8A,0x3E001F75,0x38002726,0x2E002C8F,0xFE28156D,0xFE4C2325,0xFE4C2475,0xFE00082D,0xB6000833,0x880007C9,0x740004FA,0x60000AF6,0xFE08151E,0xDA000C0E,0x6600103A,0x4A00194A,0xC82C8F,0x7C212D,0xFE4408A6,0xB238065A,0x8038065A,0xFE0C0AC9,0xBA000020,0x840C007E,0x8A000A69,0x72000271,0x5C000A69,0xB8212D,0xA2000C99,0x7A000792,0x7A001185,0x680007B9, -0x58000DDA,0x174212D,0x5600145E,0x4A0016D9,0x3E00212E,0xB8212D,0xA2000C99,0x7A000792,0x7A001185,0x680007B9,0x58000DDA,0x174212D,0x5600145E,0x4A0016D9,0x3E00212E,0x174212D,0x5600145E,0x4A0016D9,0x3E00212E,0x3E00212E,0xFE3412F2,0xFE6C1B49,0xFE6C1AEE,0xFE00082D,0xB6000833,0x880007C9,0x740004FA,0x60000AF6,0xFE18134D,0xDA000B4A,0x66001016,0x4A0016D9, -0x108212D,0x240879,0x240879,0x240879,0x240879,0xAC000000,0xAC000000,0xAC000000,0x54000000,0x54000000,0x38000000,0x54000659,0x54000659,0x54000659,0x40000262,0x40000262,0x34000131,0x28000659,0x28000659,0x260003E8,0x1C000659,0x380876,0x380876,0x380876,0x3A0003F3,0x3A0003F3,0x2E000226,0x220006FA,0x220006FA,0x24000491,0x1A0006AE,0x700876, -0x700876,0x1C0005E2,0x16000776,0x12000876,0xFE0402B1,0xF61C0498,0x240879,0xAC0002B9,0x72000275,0x5600028A,0x4C000209,0x380002F2,0xB400047A,0x720003AB,0x34000662,0x24000491,0x500876,0x380659,0x380659,0x380659,0x380659,0xAC000000,0xAC000000,0xAC000000,0x54000000,0x54000000,0x38000000,0x540659,0x540659,0x540659,0x40000262,0x40000262, -0x34000131,0xA40659,0xA40659,0x260003E8,0x1C000659,0x540659,0x540659,0x540659,0x40000262,0x40000262,0x34000131,0xA40659,0xA40659,0x260003E8,0x1C000659,0xA40659,0xA40659,0x260003E8,0x1C000659,0x1C000659,0xFA0802AD,0xFC280374,0x380659,0xAC0002B9,0x72000275,0x5600028A,0x4C000209,0x380002F2,0xC20003FA,0x7C000371,0x740659,0x260003E8, -0x740659,0xBC0A69,0xFE78002D,0xA4740001,0x80700002,0x1140A69,0xBA000020,0x802C0001,0xFF80A69,0x72000271,0x5C000A69,0x1140A69,0xBA000020,0x802C0001,0xFF80A69,0x72000271,0x5C000A69,0xFF80A69,0x72000271,0x5C000A69,0x5C000A69,0x1140A69,0xBA000020,0x802C0001,0xFF80A69,0x72000271,0x5C000A69,0xFF80A69,0x72000271,0x5C000A69,0x5C000A69,0xFF80A69, -0x72000271,0x5C000A69,0x5C000A69,0x5C000A69,0xFE780708,0xC80A69,0xFEAC078A,0xFE1402D4,0xC000029A,0x90000254,0x7A000131,0x720003BA,0xFC5806CD,0xF40002F2,0x820000DA,0x5C000A69,0x18C0A69,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, -0x0,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x1,0x2,0x2,0x2,0x2,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1, -0x2,}; -static const uint32_t g_etc1_to_bc7_m6_table196[] = { -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1, -0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, -0x0,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1, -0x1,0x840000,0x840000,0x840000,0x840000,0xC40000,0xC40000,0xC40000,0x18C0000,0x18C0000,0x40000001,0xC40000,0xC40000,0xC40000,0x18C0000,0x18C0000,0x40000001,0x18C0000,0x18C0000,0x40000001,0x40000001,0xC40000,0xC40000,0xC40000,0x18C0000,0x18C0000,0x40000001,0x18C0000,0x18C0000,0x40000001,0x40000001,0x18C0000, -0x18C0000,0x40000001,0x40000001,0x40000001,0x2980000,0x8C0000,0x840000,0xB40000,0xDC0000,0x1180000,0x1400000,0x1E80000,0xA40000,0xC40000,0x1180000,0x40000001,0x1180000,0x1140001,0x19C0000,0x53FC0000,0x8A000000,0x19C0000,0x53FC0000,0x8A000000,0x53FC0000,0x8A000000,0x8A000000,0x19C0000,0x53FC0000,0x8A000000,0x53FC0000,0x8A000000, -0x8A000000,0x53FC0000,0x8A000000,0x8A000000,0x8A000000,0x19C0000,0x53FC0000,0x8A000000,0x53FC0000,0x8A000000,0x8A000000,0x53FC0000,0x8A000000,0x8A000000,0x8A000000,0x53FC0000,0x8A000000,0x8A000000,0x8A000000,0x8A000000,0x15C0000,0x1280000,0x1280000,0x1D40000,0x3DF80000,0x6FF00000,0x8A000000,0x8A000000,0x3780000,0x9FC0000,0x83F80000,0x8A000000, -0x25FC0000,0x683375,0xFE3C10E1,0xC22C0B59,0x8A2C0B58,0xFE0C0C55,0xCC000002,0x8E080130,0x98000A69,0x7E0001F9,0x66000A69,0xCE0025C5,0xA8000EBB,0x86000984,0x86001301,0x74000831,0x62000E81,0x640025C5,0x5C001758,0x50001969,0x440025C6,0x983373,0x92001984,0x7A001024,0x7A0019E1,0x6E000D81,0x5E00125B,0x5E0029BE,0x5C001B19,0x50001C42,0x4000279F,0x1303373, -0x5000247C,0x440023B5,0x38002CEA,0x32003373,0xFE341A28,0xFE4C299D,0xF8602B08,0xFE0009DD,0xC00008C1,0x92000865,0x7C000545,0x6C000BD8,0xFE081A0A,0xDE000D62,0x7400128E,0x50001C42,0xD83373,0x8825C5,0xFE500BF4,0xBE400884,0x8A400884,0xFE180BD5,0xCC000002,0x8E140104,0x98000A69,0x7E0001F9,0x66000A69,0xC825C5,0xA8000EBB,0x86000984,0x86001301,0x74000831, -0x62000E81,0x19825C5,0x5C001758,0x50001969,0x440025C6,0xC825C5,0xA8000EBB,0x86000984,0x86001301,0x74000831,0x62000E81,0x19825C5,0x5C001758,0x50001969,0x440025C6,0x19825C5,0x5C001758,0x50001969,0x440025C6,0x440025C6,0xFE5016DA,0xFE6C1FA5,0xF8801F85,0xFE0009DD,0xC00008C1,0x92000865,0x7C000545,0x6C000BD8,0xFE24174D,0xE8000C89,0x7400125D,0x50001969, -0x12025C5,0x2C0B58,0x2C0B58,0x2C0B58,0x2C0B58,0xC8000000,0xC8000000,0xC8000000,0x60000001,0x60000001,0x40000001,0x64000882,0x64000882,0x64000882,0x4C000335,0x4C000335,0x3A00019A,0x30000882,0x30000882,0x2C00053D,0x20000882,0x400B58,0x400B58,0x400B58,0x40000556,0x40000556,0x340002EB,0x2800095D,0x2800095D,0x2A00061E,0x1E0008EE,0x800B58, -0x800B58,0x20000809,0x1C000A0B,0x14000B5B,0xFC0C044E,0xF82006C9,0x2C0B58,0xC200039D,0x7C000352,0x6200034D,0x5A0002D0,0x400003E8,0xC200060D,0x900004DE,0x3E000892,0x2A00061E,0x5C0B58,0x400884,0x400884,0x400884,0x400884,0xC8000000,0xC8000000,0xC8000000,0x60000001,0x60000001,0x40000001,0x600882,0x600882,0x600882,0x4C000335,0x4C000335, -0x3A00019A,0xC40882,0xC40882,0x2C00053D,0x20000882,0x600882,0x600882,0x600882,0x4C000335,0x4C000335,0x3A00019A,0xC40882,0xC40882,0x2C00053D,0x20000882,0xC40882,0xC40882,0x2C00053D,0x20000882,0x20000882,0xFE100422,0xFE2C052D,0x400884,0xC200039D,0x7C000352,0x6200034D,0x5A0002D0,0x400003E8,0xD6000568,0x9000048D,0x8C0882,0x2C00053D, -0x8C0882,0xCC0A69,0xFE8C0050,0xAE840000,0x8A840000,0x1300A69,0xCC000002,0x8A3C0000,0x1DF40A69,0x7E0001F9,0x66000A69,0x1300A69,0xCC000002,0x8A3C0000,0x1DF40A69,0x7E0001F9,0x66000A69,0x1DF40A69,0x7E0001F9,0x66000A69,0x66000A69,0x1300A69,0xCC000002,0x8A3C0000,0x1DF40A69,0x7E0001F9,0x66000A69,0x1DF40A69,0x7E0001F9,0x66000A69,0x66000A69,0x1DF40A69, -0x7E0001F9,0x66000A69,0x66000A69,0x66000A69,0xFC900745,0xDC0A69,0xFAC407C1,0xFE300322,0xD6000232,0x9E0001D4,0x840000CD,0x7A000340,0xFE700708,0xFC0402AD,0x8E00007D,0x66000A69,0x1B00A69,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, -0x0,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x1,0x2,0x2,0x2,0x2,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1, -0x2,}; -static const uint32_t g_etc1_to_bc7_m6_table197[] = { -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1, -0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x100000,0x100000,0x100000,0x100000,0x100000,0x100000,0x100000,0x100000,0x100000,0x100000,0x180000,0x180000,0x180000,0x180000,0x180000, -0x180000,0x2C0000,0x2C0000,0x2C0000,0x6000001,0x180000,0x180000,0x180000,0x180000,0x180000,0x180000,0x2C0000,0x2C0000,0x2C0000,0x6000001,0x2C0000,0x2C0000,0x2C0000,0x6000001,0x6000001,0x100000,0x100000,0x100000,0x4100000,0x140000,0x140000,0x140000,0x180000,0x4100000,0x140000,0x200000,0x2C0000, -0x200000,0x940000,0x940000,0x940000,0x940000,0xDC0000,0xDC0000,0xDC0000,0x1BC0000,0x1BC0000,0x48000001,0xDC0000,0xDC0000,0xDC0000,0x1BC0000,0x1BC0000,0x48000001,0x1BC0000,0x1BC0000,0x48000001,0x48000001,0xDC0000,0xDC0000,0xDC0000,0x1BC0000,0x1BC0000,0x48000001,0x1BC0000,0x1BC0000,0x48000001,0x48000001,0x1BC0000, -0x1BC0000,0x48000001,0x48000001,0x48000001,0xAC0000,0x69C0000,0x940000,0xC80000,0xF80000,0x1380000,0x1680000,0x9F80000,0xB80000,0xDC0000,0x1380000,0x48000001,0x1380000,0x1240001,0x1B40000,0x5FF80000,0x92000000,0x1B40000,0x5FF80000,0x92000000,0x5FF80000,0x92000000,0x92000000,0x1B40000,0x5FF80000,0x92000000,0x5FF80000,0x92000000, -0x92000000,0x5FF80000,0x92000000,0x92000000,0x92000000,0x1B40000,0x5FF80000,0x92000000,0x5FF80000,0x92000000,0x92000000,0x5FF80000,0x92000000,0x92000000,0x92000000,0x5FF80000,0x92000000,0x92000000,0x92000000,0x92000000,0x1700000,0x5380000,0x5380000,0x3EC0000,0x49FC0000,0x79F00000,0x92000000,0x92000000,0x1900000,0x19FC0000,0x8DCC0000,0x92000000, -0x35FC0000,0x7436D9,0xFE4413A8,0xCC380CE4,0x92380CE4,0xFE180DB5,0xD8080020,0x981001A8,0xA2080A89,0x860401D9,0x6E080A89,0xE60025C5,0xBA000D5B,0x8C0008D8,0x920011B1,0x80000671,0x68000D49,0x700025C5,0x6C001626,0x5C001831,0x4C0025C6,0xA836D7,0xA20019F4,0x800010AC,0x86001A01,0x74000CC5,0x620011B1,0x68002A9E,0x66001AB6,0x56001BC6,0x48002826,0x15836D7, -0x560025F8,0x500024DD,0x44002EAA,0x380036D7,0xFE3C1CD5,0xFA642CB1,0xFE6C2E38,0xFE080A6B,0xD000070E,0x9E000678,0x880003A5,0x760009F9,0xFE181C4A,0xFC000B9A,0x7E00111A,0x56001BC6,0xF036D7,0x9825C5,0xFE680C84,0xC6500884,0x92500884,0xFE300C45,0xD4100002,0x96240104,0xA0100A69,0x860401D5,0x6E100A69,0xE025C5,0xBA000D5B,0x8C0008D8,0x920011B1,0x80000671, -0x68000D49,0x1CC25C5,0x6C001626,0x5C001831,0x4C0025C6,0xE025C5,0xBA000D5B,0x8C0008D8,0x920011B1,0x80000671,0x68000D49,0x1CC25C5,0x6C001626,0x5C001831,0x4C0025C6,0x1CC25C5,0x6C001626,0x5C001831,0x4C0025C6,0x4C0025C6,0xFE581771,0xFC881FBD,0xFE8C1F95,0xFE080A5B,0xD000070E,0x9E000678,0x880003A5,0x760009F9,0xFE3417D5,0xFC000A9A,0x7E0010DA,0x5C001831, -0x14025C5,0x380CE4,0x380CE4,0x380CE4,0x380CE4,0xD8080020,0xD8080020,0xD8080020,0x6A080021,0x6A080021,0x48080021,0x7C000882,0x7C000882,0x7C000882,0x62000271,0x62000271,0x460000EA,0x3C000882,0x3C000882,0x380004A5,0x28000882,0x500CE3,0x500CE3,0x500CE3,0x4C000576,0x4C000576,0x400002B3,0x340009D5,0x340009D5,0x320005D6,0x2800092B,0xA00CE3, -0xA00CE3,0x260008B1,0x20000AE6,0x1A000CE3,0xFE1004E2,0xFE2C0801,0x380CE4,0xE40002E9,0x9A00028A,0x6E00029A,0x6A0001F4,0x4C000332,0xF40005C5,0xB200046A,0x4C00089B,0x320005D6,0x700CE3,0x500884,0x500884,0x500884,0x500884,0xD0100000,0xD0100000,0xD0100000,0x68100001,0x68100001,0x48100001,0x780882,0x780882,0x780882,0x62000271,0x62000271, -0x460000EA,0xF40882,0xF40882,0x380004A5,0x28000882,0x780882,0x780882,0x780882,0x62000271,0x62000271,0x460000EA,0xF40882,0xF40882,0x380004A5,0x28000882,0xF40882,0xF40882,0x380004A5,0x28000882,0x28000882,0xFE200451,0xFA440548,0x500884,0xE40002E9,0x9A00028A,0x6E00029A,0x6A0001F4,0x4C000332,0xF40004E4,0xB20003F1,0xAC0882,0x380004A5, -0xAC0882,0xDC0A69,0xFEA40080,0xB6940000,0x92940000,0x1480A69,0xD8080000,0x924C0000,0x27FC0A69,0x840001A5,0x6E000A69,0x1480A69,0xD8080000,0x924C0000,0x27FC0A69,0x840001A5,0x6E000A69,0x27FC0A69,0x840001A5,0x6E000A69,0x6E000A69,0x1480A69,0xD8080000,0x924C0000,0x27FC0A69,0x840001A5,0x6E000A69,0x27FC0A69,0x840001A5,0x6E000A69,0x6E000A69,0x27FC0A69, -0x840001A5,0x6E000A69,0x6E000A69,0x6E000A69,0xFE940781,0xEC0A69,0xFECC07D9,0xFE400361,0xE00001CA,0xA8000190,0x8C000088,0x820002E4,0xF6880745,0xFE1402E4,0x9600003D,0x6E000A69,0x1D40A69,0x80020,0x80020,0x80020,0x80020,0x80020,0x80020,0x80020,0x80020,0x80020,0x80020,0x16000000,0x16000000,0x16000000,0x16000000,0x16000000, -0x16000000,0xA000001,0xA000001,0xA000001,0x6000001,0xC0020,0xC0020,0xC0020,0xC0020,0xC0020,0xC0020,0x600000D,0x600000D,0x600000D,0x6000005,0x140020,0x140020,0x140020,0x4000012,0x2000022,0x78000000,0x80020,0x80020,0x36000000,0x24000000,0x1C000000,0x1C000000,0x12000000,0x36000009,0x24000004,0xE000001,0x600000D, -0x100020,}; -static const uint32_t g_etc1_to_bc7_m6_table198[] = { -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1, -0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,0x200000,0x300000,0x300000,0x300000,0x300000,0x300000, -0x300000,0x5C0000,0x5C0000,0x5C0000,0xE000001,0x300000,0x300000,0x300000,0x300000,0x300000,0x300000,0x5C0000,0x5C0000,0x5C0000,0xE000001,0x5C0000,0x5C0000,0x5C0000,0xE000001,0xE000001,0x8200000,0x200000,0x200000,0x240000,0x280000,0x2C0000,0x2C0000,0x340000,0x240000,0x280000,0x400000,0x5C0000, -0x400000,0xA40000,0xA40000,0xA40000,0xA40000,0xF40000,0xF40000,0xF40000,0x1F00000,0x1F00000,0x50000001,0xF40000,0xF40000,0xF40000,0x1F00000,0x1F00000,0x50000001,0x1F00000,0x1F00000,0x50000001,0x50000001,0xF40000,0xF40000,0xF40000,0x1F00000,0x1F00000,0x50000001,0x1F00000,0x1F00000,0x50000001,0x50000001,0x1F00000, -0x1F00000,0x50000001,0x50000001,0x50000001,0x6BC0000,0xEAC0000,0xA40000,0x2DC0000,0x1140000,0x15C0000,0x1900000,0x15F40000,0x2CC0000,0xF40000,0x15C0000,0x50000001,0x15C0000,0x1340001,0x1CC0000,0x6BF80000,0x9A000000,0x1CC0000,0x6BF80000,0x9A000000,0x6BF80000,0x9A000000,0x9A000000,0x1CC0000,0x6BF80000,0x9A000000,0x6BF80000,0x9A000000, -0x9A000000,0x6BF80000,0x9A000000,0x9A000000,0x9A000000,0x1CC0000,0x6BF80000,0x9A000000,0x6BF80000,0x9A000000,0x9A000000,0x6BF80000,0x9A000000,0x9A000000,0x9A000000,0x6BF80000,0x9A000000,0x9A000000,0x9A000000,0x9A000000,0x1840000,0xD480000,0xD480000,0xBFC0000,0x57FC0000,0x83F00000,0x9A000000,0x9A000000,0x3A40000,0x2BFC0000,0x95DC0000,0x9A000000, -0x43FC0000,0x803A9D,0xFE5016F4,0xD6400EC4,0x9A400EC4,0xFE300F95,0xE4100082,0x9E1C0268,0xAA100AE9,0x900C020D,0x76100AE9,0xFE0025C5,0xCC000C2B,0x98000888,0xA2001052,0x860004F1,0x74000C51,0x7C0025C5,0x720014E2,0x66001742,0x540025C6,0xBC3A9B,0xAE001B0C,0x8C00119C,0x92001A61,0x80000C45,0x6E001179,0x74002BBE,0x6C001A56,0x60001B66,0x520028A3,0x17C3A9B, -0x5C0027DC,0x56002631,0x4A00308E,0x3E003A9B,0xFE501FDA,0xFE6C3029,0xFE6C3258,0xFE140B8E,0xE2000578,0xAE0004FD,0x9200026A,0x8000085D,0xFE241F6E,0xFC000ADA,0x86000FF4,0x60001B66,0x10C3A9B,0xA825C5,0xFE740D24,0xCE600884,0x9A600884,0xFE440CB5,0xDC200002,0x9E340104,0xA8200A69,0x8E1401D5,0x76200A69,0xF825C5,0xCC000C2B,0x98000888,0xA2001052,0x860004F1, -0x74000C51,0x1FC25C5,0x720014E2,0x66001742,0x540025C6,0xF825C5,0xCC000C2B,0x98000888,0xA2001052,0x860004F1,0x74000C51,0x1FC25C5,0x720014E2,0x66001742,0x540025C6,0x1FC25C5,0x720014E2,0x66001742,0x540025C6,0x540025C6,0xFC74181E,0xFE8C2035,0xF8A02004,0xFE140B2A,0xE2000578,0xAE0004FD,0x9200026A,0x8000085D,0xFE44186E,0xFC0009DA,0x86000FB4,0x66001742, -0x16425C5,0x400EC4,0x400EC4,0x400EC4,0x400EC4,0xE8100080,0xE8100080,0xE8100080,0x74100081,0x74100081,0x50100081,0x94000882,0x94000882,0x94000882,0x680001BD,0x680001BD,0x4C00006A,0x48000882,0x48000882,0x3E00040D,0x30000882,0x600EC3,0x600EC3,0x600EC3,0x580005D6,0x580005D6,0x460002BB,0x40000A6D,0x40000A6D,0x3A0005BA,0x2E00096B,0xC40EC3, -0xC40EC3,0x32000989,0x26000BEE,0x20000EC3,0xFE2005E1,0xF43809E0,0x400EC4,0xFA00024A,0xB20001E1,0x880001E1,0x8000015D,0x6000028A,0xFE000614,0xC40003F1,0x5C0008A6,0x3A0005BA,0x8C0EC3,0x600884,0x600884,0x600884,0x600884,0xD8200000,0xD8200000,0xD8200000,0x70200001,0x70200001,0x50200001,0x900882,0x900882,0x900882,0x680001BD,0x680001BD, -0x4C00006A,0x1240882,0x1240882,0x3E00040D,0x30000882,0x900882,0x900882,0x900882,0x680001BD,0x680001BD,0x4C00006A,0x1240882,0x1240882,0x3E00040D,0x30000882,0x1240882,0x1240882,0x3E00040D,0x30000882,0x30000882,0xFA340480,0xFE4C0568,0x600884,0xFA00024A,0xB20001E1,0x880001E1,0x8000015D,0x6000028A,0xFE0C04E2,0xD000034D,0xD00882,0x3E00040D, -0xD00882,0xEC0A69,0xFEB000B4,0xBEA40000,0x9AA40000,0x1600A69,0xE0180000,0x9A5C0000,0x33FC0A69,0x90000145,0x76000A69,0x1600A69,0xE0180000,0x9A5C0000,0x33FC0A69,0x90000145,0x76000A69,0x33FC0A69,0x90000145,0x76000A69,0x76000A69,0x1600A69,0xE0180000,0x9A5C0000,0x33FC0A69,0x90000145,0x76000A69,0x33FC0A69,0x90000145,0x76000A69,0x76000A69,0x33FC0A69, -0x90000145,0x76000A69,0x76000A69,0x76000A69,0xFEB40782,0xFC0A69,0xFAE40800,0xFE5803B5,0xF6000184,0xB6000132,0x94000048,0x8A000290,0xFE980745,0xFE2C0340,0xA200001D,0x76000A69,0x1F40A69,0x100080,0x100080,0x100080,0x100080,0x100080,0x100080,0x100080,0x100080,0x100080,0x100080,0x30000000,0x30000000,0x30000000,0x30000000,0x30000000, -0x30000000,0x16000001,0x16000001,0x16000001,0xE000001,0x180080,0x180080,0x180080,0x180080,0x180080,0x180080,0x1200002D,0x1200002D,0x1200002D,0xC000019,0x2C0080,0x2C0080,0x2C0080,0xA00004A,0x6000082,0xF8000000,0x100080,0x100080,0x6E000000,0x4C000000,0x3A000000,0x3A000000,0x26000000,0x60000028,0x42000014,0x1E000004,0x1200002D, -0x200080,}; -static const uint32_t g_etc1_to_bc7_m6_table199[] = { -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1, -0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x300000,0x300000,0x300000,0x300000,0x300000,0x300000,0x300000,0x300000,0x300000,0x300000,0x2440000,0x2440000,0x2440000,0x2440000,0x2440000, -0x2440000,0x8C0000,0x8C0000,0x8C0000,0x16000001,0x2440000,0x2440000,0x2440000,0x2440000,0x2440000,0x2440000,0x8C0000,0x8C0000,0x8C0000,0x16000001,0x8C0000,0x8C0000,0x8C0000,0x16000001,0x16000001,0x340000,0x300000,0x300000,0x380000,0x3C0000,0x400000,0x400000,0x500000,0x380000,0x3C0000,0x640000,0x8C0000, -0x640000,0xB40000,0xB40000,0xB40000,0xB40000,0x10C0000,0x10C0000,0x10C0000,0xBF80000,0xBF80000,0x58000001,0x10C0000,0x10C0000,0x10C0000,0xBF80000,0xBF80000,0x58000001,0xBF80000,0xBF80000,0x58000001,0x58000001,0x10C0000,0x10C0000,0x10C0000,0xBF80000,0xBF80000,0x58000001,0xBF80000,0xBF80000,0x58000001,0x58000001,0xBF80000, -0xBF80000,0x58000001,0x58000001,0x58000001,0xD00000,0xC00000,0xB40000,0xF40000,0x32C0000,0x17C0000,0x1B80000,0x1FF80000,0x2E00000,0x10C0000,0x17C0000,0x58000001,0x17C0000,0x1440001,0x1E40000,0x77F80000,0xA2000000,0x1E40000,0x77F80000,0xA2000000,0x77F80000,0xA2000000,0xA2000000,0x1E40000,0x77F80000,0xA2000000,0x77F80000,0xA2000000, -0xA2000000,0x77F80000,0xA2000000,0xA2000000,0xA2000000,0x1E40000,0x77F80000,0xA2000000,0x77F80000,0xA2000000,0xA2000000,0x77F80000,0xA2000000,0xA2000000,0xA2000000,0x77F80000,0xA2000000,0xA2000000,0xA2000000,0xA2000000,0x1980000,0x15C0000,0x15C0000,0x1DFC0000,0x65FC0000,0x8DF00000,0xA2000000,0xA2000000,0x1BC0000,0x3BFC0000,0x9DEC0000,0xA2000000, -0x53FC0000,0x8C3EC1,0xFE5C1AB8,0xDE4C10F9,0xA24C10F8,0xFE3C1205,0xEC180130,0xA8240370,0xB4180B89,0x98100285,0x7E180B89,0xFE0C2621,0xE2000B28,0xA204088E,0xAE000F3A,0x92000391,0x7A000B81,0x880025C5,0x7E0013B2,0x6C00162E,0x5C0025C6,0xCC3EBF,0xBA001C84,0x9800130C,0xA2001ACB,0x8C000C25,0x74001185,0x80002CFE,0x76001A25,0x66001B26,0x5800292F,0x1A03EBF, -0x66002A4B,0x5C0027D5,0x500032AA,0x44003EBF,0xFE582361,0xF8803495,0xFA843661,0xFE180DAD,0xF6000408,0xBC000398,0x9E000164,0x8A0006D0,0xFE342275,0xFE000B6D,0x94000EAC,0x66001B26,0x1243EBF,0xB825C5,0xFE8C0DD4,0xD6700884,0xA2700884,0xFE500D49,0xE4300002,0xA6440104,0xB0300A69,0x962401D5,0x7E300A69,0x11025C5,0xE2000B28,0xA2080884,0xAE000F3A,0x92000391, -0x7A000B81,0xDFC25C5,0x7E0013B2,0x6C00162E,0x5C0025C6,0x11025C5,0xE2000B28,0xA2080884,0xAE000F3A,0x92000391,0x7A000B81,0xDFC25C5,0x7E0013B2,0x6C00162E,0x5C0025C6,0xDFC25C5,0x7E0013B2,0x6C00162E,0x5C0025C6,0x5C0025C6,0xFE78188A,0xFCA82039,0xFEAC2018,0xFE300C02,0xF6000408,0xBC000398,0x9E000164,0x8A0006D0,0xFE5C18B6,0xFE040A46,0x94000E5B,0x6C00162E, -0x18825C5,0x4C10F8,0x4C10F8,0x4C10F8,0x4C10F8,0xF8180120,0xF8180120,0xF8180120,0x7E180121,0x7E180121,0x58180121,0xAC000882,0xAC000882,0xAC000882,0x7A000131,0x7A000131,0x5800001A,0x54000882,0x54000882,0x4A000385,0x38000882,0x7010F8,0x7010F8,0x7010F8,0x62000651,0x62000651,0x52000313,0x4C000B25,0x4C000B25,0x420005AE,0x340009C3,0xE410F8, -0xE410F8,0x38000AA9,0x2C000D26,0x240010FB,0xFE2C0756,0xFA440BCC,0x4C10F8,0xFE08025A,0xC6000151,0x9A000161,0x8C0000CD,0x6A0001E2,0xFE000734,0xDA000398,0x660008AE,0x420005AE,0xA010F8,0x700884,0x700884,0x700884,0x700884,0xE0300000,0xE0300000,0xE0300000,0x78300001,0x78300001,0x58300001,0xA80882,0xA80882,0xA80882,0x7A000131,0x7A000131, -0x5800001A,0x1580882,0x1580882,0x4A000385,0x38000882,0xA80882,0xA80882,0xA80882,0x7A000131,0x7A000131,0x5800001A,0x1580882,0x1580882,0x4A000385,0x38000882,0x1580882,0x1580882,0x4A000385,0x38000882,0x38000882,0xFE3C04A0,0xFA64057D,0x700884,0xFE08024A,0xC6000151,0x9A000161,0x8C0000CD,0x6A0001E2,0xFE140514,0xEC0002D0,0xF00882,0x4A000385, -0xF00882,0xFC0A69,0xFEC400E9,0xC6B40000,0xA2B40000,0x1780A69,0xE8280000,0xA26C0000,0x3FFC0A69,0x9A000104,0x7E000A69,0x1780A69,0xE8280000,0xA26C0000,0x3FFC0A69,0x9A000104,0x7E000A69,0x3FFC0A69,0x9A000104,0x7E000A69,0x7E000A69,0x1780A69,0xE8280000,0xA26C0000,0x3FFC0A69,0x9A000104,0x7E000A69,0x3FFC0A69,0x9A000104,0x7E000A69,0x7E000A69,0x3FFC0A69, -0x9A000104,0x7E000A69,0x7E000A69,0x7E000A69,0xFAC807C1,0x10C0A69,0xFEEC0820,0xFE6C03FA,0xFA040152,0xBE0000F2,0x9E000020,0x9400022D,0xFEAC0784,0xFE4C037A,0xAC000005,0x7E000A69,0xDFC0A69,0x180120,0x180120,0x180120,0x180120,0x180120,0x180120,0x180120,0x180120,0x180120,0x180120,0x48000000,0x48000000,0x48000000,0x48000000,0x48000000, -0x48000000,0x22000000,0x22000000,0x22000000,0x16000001,0x240120,0x240120,0x240120,0x240120,0x240120,0x240120,0x1E00006D,0x1E00006D,0x1E00006D,0x1400003A,0x440120,0x440120,0x440120,0x100000AA,0xA000122,0xFC080020,0x180120,0x180120,0xA8000000,0x74000000,0x58000000,0x58000000,0x3A000000,0x84000059,0x6400002D,0x2C000009,0x1E00006D, -0x300120,}; -static const uint32_t g_etc1_to_bc7_m6_table200[] = { -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1, -0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x400001,0x400001,0x400001,0x400001,0x400001,0x400001,0x400001,0x400001,0x400001,0x400001,0x600000,0x600000,0x600000,0x600000,0x600000, -0x600000,0xC40000,0xC40000,0xC40000,0x20000000,0x600000,0x600000,0x600000,0x600000,0x600000,0x600000,0xC40000,0xC40000,0xC40000,0x20000000,0xC40000,0xC40000,0xC40000,0x20000000,0x20000000,0xA440000,0x400001,0x400001,0x4C0000,0x4500000,0x580000,0x580000,0x26C0000,0x4C0000,0x4500000,0x8C0000,0xC40000, -0x8C0000,0xC40001,0xC40001,0xC40001,0xC40001,0x3240000,0x3240000,0x3240000,0x17FC0000,0x17FC0000,0x62000000,0x3240000,0x3240000,0x3240000,0x17FC0000,0x17FC0000,0x62000000,0x17FC0000,0x17FC0000,0x62000000,0x62000000,0x3240000,0x3240000,0x3240000,0x17FC0000,0x17FC0000,0x62000000,0x17FC0000,0x17FC0000,0x62000000,0x62000000,0x17FC0000, -0x17FC0000,0x62000000,0x62000000,0x62000000,0x4E40000,0xD40000,0xC40001,0x10C0000,0x14C0000,0x1A40000,0x1E40000,0x2BF80000,0xF80000,0x3240000,0x1A40000,0x62000000,0x1A40000,0x1580000,0x3FC0000,0x85F80000,0xAA000001,0x3FC0000,0x85F80000,0xAA000001,0x85F80000,0xAA000001,0xAA000001,0x3FC0000,0x85F80000,0xAA000001,0x85F80000,0xAA000001, -0xAA000001,0x85F80000,0xAA000001,0xAA000001,0xAA000001,0x3FC0000,0x85F80000,0xAA000001,0x85F80000,0xAA000001,0xAA000001,0x85F80000,0xAA000001,0xAA000001,0xAA000001,0x85F80000,0xAA000001,0xAA000001,0xAA000001,0xAA000001,0x1B00000,0xF6C0000,0xF6C0000,0x33FC0000,0x75F80000,0x97F80000,0xAA000001,0xAA000001,0x1D40000,0x4FFC0000,0xA7E00000,0xAA000001, -0x63FC0000,0x9843DA,0xFE741F87,0xEA5813DA,0xAA5813DB,0xFE441546,0xF824023F,0xB43004F3,0xC0200C8A,0xA020035E,0x86200C8A,0xFE1C2759,0xEE000A1B,0xAC0C08D9,0xC0000E29,0x9E000252,0x86000AE2,0x960025C5,0x8A001275,0x7800150D,0x640025C5,0xE043DA,0xCC001E91,0xA200151E,0xA8001BBA,0x92000C52,0x800011F2,0x8C002E81,0x80001A11,0x72001AE5,0x620029D5,0x1CC43DA, -0x6C002D36,0x66002A52,0x56003551,0x4A0043DE,0xFE6427D8,0xFE8C3942,0xFE8C3B6A,0xFE301079,0xFC000338,0xC8000260,0xA6000092,0x96000559,0xFE4426F1,0xFE040DC1,0x9E000D7F,0x72001AE5,0x14043DA,0xCC25C6,0xFE980EA3,0xDE840883,0xAA840883,0xFE680DF2,0xEE400003,0xAE540103,0xB8400A6A,0xA03801D6,0x86400A6A,0x12C25C5,0xEE000A1B,0xAA1C0883,0xC0000E29,0x9E000252, -0x86000AE2,0x1BF825C5,0x8A001275,0x7800150D,0x640025C5,0x12C25C5,0xEE000A1B,0xAA1C0883,0xC0000E29,0x9E000252,0x86000AE2,0x1BF825C5,0x8A001275,0x7800150D,0x640025C5,0x1BF825C5,0x8A001275,0x7800150D,0x640025C5,0x640025C5,0xFE941919,0xF6BC20B2,0xFAC42082,0xFE440D24,0xFC000338,0xC8000260,0xA6000092,0x96000559,0xFE781975,0xFE240B83,0x9E000D1B,0x7800150D, -0x1AC25C5,0x5813DA,0x5813DA,0x5813DA,0x5813DA,0xFE24022E,0xFE24022E,0xFE24022E,0x8A200221,0x8A200221,0x62200221,0xC8000882,0xC8000882,0xC8000882,0x860000B9,0x860000B9,0x62000001,0x60000884,0x60000884,0x500002FD,0x40000884,0x28013DA,0x28013DA,0x28013DA,0x7400074D,0x7400074D,0x580003BD,0x58000C13,0x58000C13,0x4C0005BE,0x40000A3D,0x10813DA, -0x10813DA,0x3E000C45,0x32000EC8,0x2A0013DD,0xFC380952,0xFE4C0E5E,0x5813DA,0xFE100315,0xDE0000D0,0xAE0000CD,0xA2000068,0x78000164,0xFE1408DB,0xFC000344,0x7C0008C2,0x4C0005BE,0xB813DA,0x840882,0x840882,0x840882,0x840882,0xE6440001,0xE6440001,0xE6440001,0x82400001,0x82400001,0x62400001,0xC40882,0xC40882,0xC40882,0x860000B9,0x860000B9, -0x62000001,0x18C0882,0x18C0882,0x500002FD,0x40000884,0xC40882,0xC40882,0xC40882,0x860000B9,0x860000B9,0x62000001,0x18C0882,0x18C0882,0x500002FD,0x40000884,0x18C0882,0x18C0882,0x500002FD,0x40000884,0x40000884,0xFE5804B1,0xF47805B2,0x840882,0xFE240288,0xDE0000D0,0xAE0000CD,0xA2000068,0x78000164,0xFE340515,0xFC000244,0x1180882,0x500002FD, -0x1180882,0x1100A69,0xFEDC013D,0xCEC80001,0xAAC40002,0x1900A69,0xF03C0000,0xAA800001,0x4DFC0A69,0xA40000C1,0x86000A69,0x1900A69,0xF03C0000,0xAA800001,0x4DFC0A69,0xA40000C1,0x86000A69,0x4DFC0A69,0xA40000C1,0x86000A69,0x86000A69,0x1900A69,0xF03C0000,0xAA800001,0x4DFC0A69,0xA40000C1,0x86000A69,0x4DFC0A69,0xA40000C1,0x86000A69,0x86000A69,0x4DFC0A69, -0xA40000C1,0x86000A69,0x86000A69,0x86000A69,0xFED007FD,0x1200A69,0xFD080841,0xFE940451,0xFE100172,0xD00000A9,0xA800000A,0x9C0001E1,0xF6CC07C1,0xFE6403E8,0xB6080000,0x86000A69,0x1FF80A69,0x200221,0x200221,0x200221,0x200221,0x200221,0x200221,0x200221,0x200221,0x200221,0x200221,0x64000000,0x64000000,0x64000000,0x64000000,0x64000000, -0x64000000,0x30000000,0x30000000,0x30000000,0x20000000,0x300221,0x300221,0x300221,0x300221,0x300221,0x300221,0x280000C2,0x280000C2,0x280000C2,0x1E000068,0x5C0221,0x5C0221,0x5C0221,0x16000145,0x10000221,0xFE0C009D,0x200221,0x200221,0xE8000000,0xA0000000,0x7A000000,0x7A000000,0x50000000,0xC40000A9,0x96000055,0x3E000010,0x280000C2, -0x400221,}; -static const uint32_t g_etc1_to_bc7_m6_table201[] = { -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1, -0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x500001,0x500001,0x500001,0x500001,0x500001,0x500001,0x500001,0x500001,0x500001,0x500001,0x780000,0x780000,0x780000,0x780000,0x780000, -0x780000,0xF40000,0xF40000,0xF40000,0x28000000,0x780000,0x780000,0x780000,0x780000,0x780000,0x780000,0xF40000,0xF40000,0xF40000,0x28000000,0xF40000,0xF40000,0xF40000,0x28000000,0x28000000,0x580000,0x500001,0x500001,0x600000,0x4640000,0x700000,0x700000,0x880000,0x600000,0x4640000,0xAC0000,0xF40000, -0xAC0000,0xD40001,0xD40001,0xD40001,0xD40001,0x33C0000,0x33C0000,0x33C0000,0x23FC0000,0x23FC0000,0x6A000000,0x33C0000,0x33C0000,0x33C0000,0x23FC0000,0x23FC0000,0x6A000000,0x23FC0000,0x23FC0000,0x6A000000,0x6A000000,0x33C0000,0x33C0000,0x33C0000,0x23FC0000,0x23FC0000,0x6A000000,0x23FC0000,0x23FC0000,0x6A000000,0x6A000000,0x23FC0000, -0x23FC0000,0x6A000000,0x6A000000,0x6A000000,0xF80000,0xE40000,0xD40001,0x1240000,0x1680000,0x1C80000,0x7F80000,0x37F40000,0x10C0000,0x33C0000,0x1C80000,0x6A000000,0x1C80000,0x1680000,0x1BFC0000,0x91F80000,0xB2000001,0x1BFC0000,0x91F80000,0xB2000001,0x91F80000,0xB2000001,0xB2000001,0x1BFC0000,0x91F80000,0xB2000001,0x91F80000,0xB2000001, -0xB2000001,0x91F80000,0xB2000001,0xB2000001,0xB2000001,0x1BFC0000,0x91F80000,0xB2000001,0x91F80000,0xB2000001,0xB2000001,0x91F80000,0xB2000001,0xB2000001,0xB2000001,0x91F80000,0xB2000001,0xB2000001,0xB2000001,0xB2000001,0x1C40000,0x1800000,0x1800000,0x47FC0000,0x81FC0000,0xA1FC0000,0xB2000001,0xB2000001,0x3E80000,0x61FC0000,0xAFF00000,0xB2000001, -0x73FC0000,0xA448CA,0xFE802443,0xF26416C6,0xB26416C7,0xFE5018EA,0xFE300393,0xBA3C069F,0xCA280DB2,0xA824045E,0x8E280DB2,0xFE30290A,0xFA00097B,0xB6140951,0xCC000D49,0xA800016E,0x8E000A8D,0xA20025C6,0x9000116D,0x7E001419,0x6C0025C5,0xF448CA,0xE20020BF,0xAE00178E,0xB4001CE2,0xA2000CB3,0x86001292,0x98003001,0x8A001A29,0x7A001AD5,0x68002A81,0x1F048CA, -0x7800301E,0x6C002C86,0x5C0037E9,0x500048CE,0xFE782C61,0xFE8C3E62,0xF8A040BB,0xFE401395,0xFE0403A8,0xD6000182,0xB0000031,0xA0000422,0xFE542B17,0xFE1810AE,0xA6000CB9,0x7A001AD5,0x15C48CA,0xDC25C6,0xFEB00F63,0xE6940883,0xB2940883,0xFE800E9A,0xF6500003,0xB6640103,0xC0500A6A,0xA84801D6,0x8E500A6A,0x14425C5,0xFA00097B,0xB22C0883,0xCC000D49,0xA800016E, -0x8E000A8D,0x27F825C5,0x9000116D,0x7E001419,0x6C0025C5,0x14425C5,0xFA00097B,0xB22C0883,0xCC000D49,0xA800016E,0x8E000A8D,0x27F825C5,0x9000116D,0x7E001419,0x6C0025C5,0x27F825C5,0x9000116D,0x7E001419,0x6C0025C5,0x6C0025C5,0xFEA019C8,0xFECC20B2,0xFECC20B2,0xFE5C0DFE,0xFE100393,0xD6000182,0xB0000031,0xA0000422,0xFE8819FE,0xFE400C4D,0xAC000C4E,0x7E001419, -0x1D025C5,0x6416C6,0x6416C6,0x6416C6,0x6416C6,0xFE300392,0xFE300392,0xFE300392,0x94280349,0x94280349,0x6A280349,0xE0000882,0xE0000882,0xE0000882,0x98000061,0x98000061,0x6C040018,0x6C000884,0x6C000884,0x5C00027D,0x48000884,0x9016C5,0x9016C5,0x9016C5,0x80000875,0x80000875,0x62000491,0x62000CE4,0x62000CE4,0x540005F4,0x46000AA5,0x12416C5, -0x12416C5,0x44000E01,0x3E001058,0x300016C5,0xFE3C0B76,0xF458115D,0x6416C6,0xFE18042D,0xFC000074,0xC0000074,0xAE000022,0x840000FA,0xFE200AF6,0xFE00038A,0x860008CA,0x540005F4,0xD016C5,0x940882,0x940882,0x940882,0x940882,0xEE540001,0xEE540001,0xEE540001,0x8A500001,0x8A500001,0x6A500001,0xDC0882,0xDC0882,0xDC0882,0x98000061,0x98000061, -0x6A100001,0x1BC0882,0x1BC0882,0x5C00027D,0x48000884,0xDC0882,0xDC0882,0xDC0882,0x98000061,0x98000061,0x6A100001,0x1BC0882,0x1BC0882,0x5C00027D,0x48000884,0x1BC0882,0x1BC0882,0x5C00027D,0x48000884,0x48000884,0xFA6C04E2,0xFC8805B2,0x940882,0xFE3402B1,0xFC000074,0xC0000074,0xAE000022,0x840000FA,0xFA48054A,0xFC140265,0x1380882,0x5C00027D, -0x1380882,0x1200A69,0xFEE80195,0xD6D80001,0xB2D40002,0x1A80A69,0xF84C0000,0xB2900001,0x59FC0A69,0xAC000082,0x8E000A69,0x1A80A69,0xF84C0000,0xB2900001,0x59FC0A69,0xAC000082,0x8E000A69,0x59FC0A69,0xAC000082,0x8E000A69,0x8E000A69,0x1A80A69,0xF84C0000,0xB2900001,0x59FC0A69,0xAC000082,0x8E000A69,0x59FC0A69,0xAC000082,0x8E000A69,0x8E000A69,0x59FC0A69, -0xAC000082,0x8E000A69,0x8E000A69,0x8E000A69,0xFAF00802,0x1300A69,0xFF0C087D,0xFEAC04B1,0xFE3C01C4,0xDA00006A,0xB2040001,0xA800019A,0xFEDC07C1,0xFE880424,0xBE180000,0x8E000A69,0x2DFC0A69,0x280349,0x280349,0x280349,0x280349,0x280349,0x280349,0x280349,0x280349,0x280349,0x280349,0x7C000000,0x7C000000,0x7C000000,0x7C000000,0x7C000000, -0x7C000000,0x3C000000,0x3C000000,0x3C000000,0x28000000,0x3C0349,0x3C0349,0x3C0349,0x3C0349,0x3C0349,0x3C0349,0x2E000132,0x2E000132,0x2E000132,0x2200009D,0x740349,0x740349,0x740349,0x1C0001F9,0x14000349,0xF4180154,0x280349,0x280349,0xFE04000D,0xC8000000,0x98000000,0x98000000,0x64000000,0xF6000105,0xB4000089,0x46000019,0x2E000132, -0x540349,}; -static const uint32_t g_etc1_to_bc7_m6_table202[] = { -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1, -0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x600001,0x600001,0x600001,0x600001,0x600001,0x600001,0x600001,0x600001,0x600001,0x600001,0x900000,0x900000,0x900000,0x900000,0x900000, -0x900000,0x1240000,0x1240000,0x1240000,0x30000000,0x900000,0x900000,0x900000,0x900000,0x900000,0x900000,0x1240000,0x1240000,0x1240000,0x30000000,0x1240000,0x1240000,0x1240000,0x30000000,0x30000000,0x680000,0x600001,0x600001,0x2700000,0x4780000,0x840000,0x840000,0xA40000,0x2700000,0x4780000,0xD00000,0x1240000, -0xD00000,0xE40001,0xE40001,0xE40001,0xE40001,0x1540000,0x1540000,0x1540000,0x2FFC0000,0x2FFC0000,0x72000000,0x1540000,0x1540000,0x1540000,0x2FFC0000,0x2FFC0000,0x72000000,0x2FFC0000,0x2FFC0000,0x72000000,0x72000000,0x1540000,0x1540000,0x1540000,0x2FFC0000,0x2FFC0000,0x72000000,0x2FFC0000,0x2FFC0000,0x72000000,0x72000000,0x2FFC0000, -0x2FFC0000,0x72000000,0x72000000,0x72000000,0x10C0000,0x2F40000,0xE40001,0x1380000,0x3800000,0x1E80000,0x15F80000,0x41F80000,0x1200000,0x1540000,0x1E80000,0x72000000,0x1E80000,0x1780000,0x35FC0000,0x9DF40000,0xBA000001,0x35FC0000,0x9DF40000,0xBA000001,0x9DF40000,0xBA000001,0xBA000001,0x35FC0000,0x9DF40000,0xBA000001,0x9DF40000,0xBA000001, -0xBA000001,0x9DF40000,0xBA000001,0xBA000001,0xBA000001,0x35FC0000,0x9DF40000,0xBA000001,0x9DF40000,0xBA000001,0xBA000001,0x9DF40000,0xBA000001,0xBA000001,0xBA000001,0x9DF40000,0xBA000001,0xBA000001,0xBA000001,0xBA000001,0x1D80000,0x1900000,0x1900000,0x5BFC0000,0x8FFC0000,0xABFC0000,0xBA000001,0xBA000001,0x5FC0000,0x71FC0000,0xB9C40000,0xBA000001, -0x81FC0000,0xB04E1A,0xFE8C2977,0xFC6C1A06,0xBA6C1A07,0xFE5C1D1E,0xFE3C0597,0xC24408A6,0xD4300F1A,0xB22C059E,0x96300F1A,0xFE3C2B5E,0xFE080993,0xC01C0A01,0xD8000C89,0xB40000C6,0x96000A6A,0xAE0025C6,0x9C001065,0x8A001331,0x740025C5,0x1044E1A,0xE800231B,0xB4001A6E,0xC0001E4A,0xA8000D5F,0x8C001392,0xA200315F,0x92001A55,0x82001ADB,0x6E002B4D,0x7FC4E1A, -0x7E003356,0x72002F0A,0x66003AC6,0x56004E1E,0xFE803152,0xFAA443AA,0xFEAC45DF,0xFE441768,0xFE100503,0xE20000CE,0xBC00000B,0xAA00032A,0xFE5C2FFA,0xFE241464,0xB6000BBD,0x82001ADB,0x1744E1A,0xEC25C6,0xFEC41026,0xEEA40883,0xBAA40883,0xFE980F62,0xFE600003,0xBE740103,0xC8600A6A,0xB05801D6,0x96600A6A,0x15C25C5,0xFE080983,0xBA3C0883,0xD8000C89,0xB40000C6, -0x96000A6A,0x33F825C5,0x9C001065,0x8A001331,0x740025C5,0x15C25C5,0xFE080983,0xBA3C0883,0xD8000C89,0xB40000C6,0x96000A6A,0x33F825C5,0x9C001065,0x8A001331,0x740025C5,0x33F825C5,0x9C001065,0x8A001331,0x740025C5,0x740025C5,0xFEB41A2D,0xF8E0212E,0xFAE42103,0xFE780F0E,0xFE24046B,0xE20000CE,0xBC00000B,0xAA00032A,0xFE981A99,0xFE480D53,0xB6000B44,0x8A001331, -0x1F025C5,0x6C1A06,0x6C1A06,0x6C1A06,0x6C1A06,0xFE3C0566,0xFE3C0566,0xFE3C0566,0x9E3004B1,0x9E3004B1,0x723004B1,0xF8000882,0xF8000882,0xF8000882,0xA8000025,0xA8000025,0x76080051,0x78000884,0x78000884,0x66000220,0x50000884,0xA41A05,0xA41A05,0xA41A05,0x8C0009DD,0x8C0009DD,0x680005C9,0x6E000DF4,0x6E000DF4,0x5E000632,0x4C000B25,0x14C1A05, -0x14C1A05,0x50001001,0x44001218,0x36001A05,0xFE4C0DF1,0xFA641455,0x6C1A06,0xFE2C05C9,0xFE040078,0xD200003A,0xC0000004,0x960000A0,0xFC300D65,0xFE0004CA,0x960008DB,0x5E000632,0xE81A05,0xA40882,0xA40882,0xA40882,0xA40882,0xF6640001,0xF6640001,0xF6640001,0x92600001,0x92600001,0x72600001,0xF40882,0xF40882,0xF40882,0xA8000025,0xA8000025, -0x72200001,0x1F00882,0x1F00882,0x66000220,0x50000884,0xF40882,0xF40882,0xF40882,0xA8000025,0xA8000025,0x72200001,0x1F00882,0x1F00882,0x66000220,0x50000884,0x1F00882,0x1F00882,0x66000220,0x50000884,0x50000884,0xFE740502,0xF49805E9,0xA40882,0xFE4402E4,0xFE040074,0xD200003A,0xC0000004,0x960000A0,0xFE50057A,0xFE24028A,0x15C0882,0x66000220, -0x15C0882,0x1300A69,0xFF0001ED,0xDEE80001,0xBAE40002,0x1C00A69,0xFE600002,0xBAA00001,0x65F80A69,0xB6000059,0x96000A69,0x1C00A69,0xFE600002,0xBAA00001,0x65F80A69,0xB6000059,0x96000A69,0x65F80A69,0xB6000059,0x96000A69,0x96000A69,0x1C00A69,0xFE600002,0xBAA00001,0x65F80A69,0xB6000059,0x96000A69,0x65F80A69,0xB6000059,0x96000A69,0x96000A69,0x65F80A69, -0xB6000059,0x96000A69,0x96000A69,0x96000A69,0xFEF80832,0x1440A69,0xFD280882,0xFEC004EA,0xFE500220,0xE6000050,0xBA140001,0xB2000151,0xFEF00800,0xFEA00488,0xC6280000,0x96000A69,0x3DF80A69,0x3004B1,0x3004B1,0x3004B1,0x3004B1,0x3004B1,0x3004B1,0x3004B1,0x3004B1,0x3004B1,0x3004B1,0x94000000,0x94000000,0x94000000,0x94000000,0x94000000, -0x94000000,0x48000000,0x48000000,0x48000000,0x30000000,0x4804B1,0x4804B1,0x4804B1,0x4804B1,0x4804B1,0x4804B1,0x3A0001BA,0x3A0001BA,0x3A0001BA,0x2E0000E5,0x8C04B1,0x8C04B1,0x8C04B1,0x200002E4,0x180004B1,0xF8200244,0x3004B1,0x3004B1,0xFC0C0064,0xEE000000,0xB6000000,0xB6000000,0x78000000,0xF60001A5,0xD60000C2,0x56000022,0x3A0001BA, -0x6404B1,}; -static const uint32_t g_etc1_to_bc7_m6_table203[] = { -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1, -0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x700001,0x700001,0x700001,0x700001,0x700001,0x700001,0x700001,0x700001,0x700001,0x700001,0xA80000,0xA80000,0xA80000,0xA80000,0xA80000, -0xA80000,0x1580000,0x1580000,0x1580000,0x38000000,0xA80000,0xA80000,0xA80000,0xA80000,0xA80000,0xA80000,0x1580000,0x1580000,0x1580000,0x38000000,0x1580000,0x1580000,0x1580000,0x38000000,0x38000000,0x4780000,0x700001,0x700001,0x840000,0x48C0000,0x2980000,0x2980000,0xC00000,0x840000,0x48C0000,0xF00000,0x1580000, -0xF00000,0xF40001,0xF40001,0xF40001,0xF40001,0x16C0000,0x16C0000,0x16C0000,0x3BFC0000,0x3BFC0000,0x7A000000,0x16C0000,0x16C0000,0x16C0000,0x3BFC0000,0x3BFC0000,0x7A000000,0x3BFC0000,0x3BFC0000,0x7A000000,0x7A000000,0x16C0000,0x16C0000,0x16C0000,0x3BFC0000,0x3BFC0000,0x7A000000,0x3BFC0000,0x3BFC0000,0x7A000000,0x7A000000,0x3BFC0000, -0x3BFC0000,0x7A000000,0x7A000000,0x7A000000,0x51C0000,0xB040000,0xF40001,0x34C0000,0x19C0000,0x7FC0000,0x21FC0000,0x4BFC0000,0x1340000,0x16C0000,0x7FC0000,0x7A000000,0x7FC0000,0x1880000,0x4DFC0000,0xA7FC0000,0xC2000001,0x4DFC0000,0xA7FC0000,0xC2000001,0xA7FC0000,0xC2000001,0xC2000001,0x4DFC0000,0xA7FC0000,0xC2000001,0xA7FC0000,0xC2000001, -0xC2000001,0xA7FC0000,0xC2000001,0xC2000001,0xC2000001,0x4DFC0000,0xA7FC0000,0xC2000001,0xA7FC0000,0xC2000001,0xC2000001,0xA7FC0000,0xC2000001,0xC2000001,0xC2000001,0xA7FC0000,0xC2000001,0xC2000001,0xC2000001,0xC2000001,0x1EC0000,0x9A00000,0x9A00000,0x6FFC0000,0x9DF80000,0xB5FC0000,0xC2000001,0xC2000001,0x23FC0000,0x83FC0000,0xC1D40000,0xC2000001, -0x91FC0000,0xBC53CA,0xFE982F23,0xFE781DB3,0xC2781D9B,0xFE6821E2,0xFE480853,0xCC4C0AE2,0xDE3810C2,0xBA34072F,0x9E3810C2,0xFE442E39,0xFE140A9F,0xCA240AE9,0xE2000BDE,0xBE000056,0x9E040A76,0xBA0025C6,0xA6000F93,0x9000124D,0x7C0025C5,0x11853CA,0xF400260B,0xC0001DBE,0xCC001FF2,0xB4000E7F,0x980014B2,0xA8003317,0x9E001AAD,0x8C001AFD,0x7A002C15,0x11F853CA, -0x840036F6,0x780031DE,0x6C003DB6,0x5C0053CE,0xFE8C36AE,0xFEAC491A,0xFEAC4BCF,0xFE541B8E,0xFE24073F,0xEE000058,0xC6080023,0xB6000243,0xFE703553,0xFE301879,0xBE000B25,0x8C001AFD,0x19053CA,0xFC25C6,0xFED010EE,0xF6B40883,0xC2B40883,0xFEA41022,0xFE780023,0xC6840103,0xD0700A6A,0xB86801D6,0x9E700A6A,0x17425C5,0xFE200A0B,0xC24C0883,0xE2000BDE,0xBE000056, -0x9E0C0A6A,0x3FF825C5,0xA6000F93,0x9000124D,0x7C0025C5,0x17425C5,0xFE200A0B,0xC24C0883,0xE2000BDE,0xBE000056,0x9E0C0A6A,0x3FF825C5,0xA6000F93,0x9000124D,0x7C0025C5,0x3FF825C5,0xA6000F93,0x9000124D,0x7C0025C5,0x7C0025C5,0xFED01ACD,0xFEEC2132,0xFEEC213B,0xFE940FE5,0xFE38056B,0xEE000058,0xC410000B,0xB6000243,0xFEB41B45,0xFE680E81,0xBE000A95,0x9000124D, -0xBFC25C5,0x781D9A,0x781D9A,0x781D9A,0x781D9A,0xFE440795,0xFE440795,0xFE440795,0xA8380659,0xA8380659,0x7A380659,0xFE0C08AE,0xFE0C08AE,0xFE0C08AE,0xB4000005,0xB4000005,0x7E0C00AD,0x84000884,0x84000884,0x6C0001C4,0x58000884,0x2B01D9A,0x2B01D9A,0x2B01D9A,0x98000B85,0x98000B85,0x74000731,0x74000F18,0x74000F18,0x6800068C,0x52000BBD,0x1681D9A, -0x1681D9A,0x56001235,0x4A001408,0x3A001D9D,0xFE5810F1,0xFE6C17AD,0x781D9A,0xFE3407B5,0xFE140116,0xE200000D,0xD0000002,0xA0000059,0xFE341005,0xFE100696,0xA60008E8,0x6800068C,0xFC1D9A,0xB40882,0xB40882,0xB40882,0xB40882,0xFE740001,0xFE740001,0xFE740001,0x9A700001,0x9A700001,0x7A700001,0x10C0882,0x10C0882,0x10C0882,0xB4000005,0xB4000005, -0x7A300001,0xBF80882,0xBF80882,0x6C0001C4,0x58000884,0x10C0882,0x10C0882,0x10C0882,0xB4000005,0xB4000005,0x7A300001,0xBF80882,0xBF80882,0x6C0001C4,0x58000884,0xBF80882,0xBF80882,0x6C0001C4,0x58000884,0x58000884,0xFE900515,0xFCA805E9,0xB40882,0xFE5C02FD,0xFE1C009D,0xE200000D,0xCC080000,0xA0000059,0xFA70057D,0xFA4002D2,0x17C0882,0x6C0001C4, -0x17C0882,0x1400A69,0xFF0C025D,0xE6F80001,0xC2F40002,0x1D80A69,0xFE7C0014,0xC2B00001,0x71F80A69,0xBE000032,0x9E000A69,0x1D80A69,0xFE7C0014,0xC2B00001,0x71F80A69,0xBE000032,0x9E000A69,0x71F80A69,0xBE000032,0x9E000A69,0x9E000A69,0x1D80A69,0xFE7C0014,0xC2B00001,0x71F80A69,0xBE000032,0x9E000A69,0x71F80A69,0xBE000032,0x9E000A69,0x9E000A69,0x71F80A69, -0xBE000032,0x9E000A69,0x9E000A69,0x9E000A69,0xFF140845,0x1540A69,0xF53808C5,0xFED80550,0xFE68028A,0xF2000028,0xC2240001,0xBA000115,0xF7080841,0xFEC004E2,0xCE380000,0x9E000A69,0x4BFC0A69,0x380659,0x380659,0x380659,0x380659,0x380659,0x380659,0x380659,0x380659,0x380659,0x380659,0xAC000000,0xAC000000,0xAC000000,0xAC000000,0xAC000000, -0xAC000000,0x54000000,0x54000000,0x54000000,0x38000000,0x540659,0x540659,0x540659,0x540659,0x540659,0x540659,0x40000262,0x40000262,0x40000262,0x34000131,0xA40659,0xA40659,0xA40659,0x260003E8,0x1C000659,0xFC280374,0x380659,0x380659,0xFE100104,0xFA040014,0xD4000000,0xD4000000,0x8C000000,0xFA0802AD,0xF4000112,0x66000028,0x40000262, -0x740659,}; -static const uint32_t g_etc1_to_bc7_m6_table204[] = { -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1, -0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x840000,0x840000,0x840000,0x840000,0x840000,0x840000,0x840000,0x840000,0x840000,0x840000,0xC40000,0xC40000,0xC40000,0xC40000,0xC40000, -0xC40000,0x18C0000,0x18C0000,0x18C0000,0x40000001,0xC40000,0xC40000,0xC40000,0xC40000,0xC40000,0xC40000,0x18C0000,0x18C0000,0x18C0000,0x40000001,0x18C0000,0x18C0000,0x18C0000,0x40000001,0x40000001,0x8C0000,0x840000,0x840000,0x2980000,0xA40000,0xB40000,0xB40000,0xDC0000,0x2980000,0xA40000,0x1180000,0x18C0000, -0x1180000,0x1080000,0x1080000,0x1080000,0x1080000,0x1880000,0x1880000,0x1880000,0x49F80000,0x49F80000,0x82000001,0x1880000,0x1880000,0x1880000,0x49F80000,0x49F80000,0x82000001,0x49F80000,0x49F80000,0x82000001,0x82000001,0x1880000,0x1880000,0x1880000,0x49F80000,0x49F80000,0x82000001,0x49F80000,0x49F80000,0x82000001,0x82000001,0x49F80000, -0x49F80000,0x82000001,0x82000001,0x82000001,0x1340000,0x5180000,0x1080000,0x1680000,0x1BC0000,0x19FC0000,0x31FC0000,0x59F40000,0x14C0000,0x1880000,0x19FC0000,0x82000001,0x19FC0000,0x1980001,0x69FC0000,0xB5FC0000,0xCC000000,0x69FC0000,0xB5FC0000,0xCC000000,0xB5FC0000,0xCC000000,0xCC000000,0x69FC0000,0xB5FC0000,0xCC000000,0xB5FC0000,0xCC000000, -0xCC000000,0xB5FC0000,0xCC000000,0xCC000000,0xCC000000,0x69FC0000,0xB5FC0000,0xCC000000,0xB5FC0000,0xCC000000,0xCC000000,0xB5FC0000,0xCC000000,0xCC000000,0xCC000000,0xB5FC0000,0xCC000000,0xCC000000,0xCC000000,0xCC000000,0xBFC0000,0x3B40000,0x3B40000,0x85FC0000,0xABFC0000,0xC1F40000,0xCC000000,0xCC000000,0x45FC0000,0x95FC0000,0xCBC80000,0xCC000000, -0xA1FC0000,0xC85AA5,0xFEA4360C,0xFE88228D,0xCC842208,0xFE8027E1,0xFE540C44,0xD8580DC5,0xE84412ED,0xC43C0938,0xA84012ED,0xFE503266,0xFE200CC4,0xD6240C2A,0xF4000B45,0xCA000015,0xAA080AB6,0xC60025C5,0xB2000E98,0x9C001162,0x860025C6,0x12C5AA3,0xFA002A18,0xCC00220B,0xE20021ED,0xBA00100A,0xA2001647,0xBA00351E,0xA8001B25,0x92001B46,0x80002CFE,0x1BF85AA3, -0x90003B5B,0x84003543,0x7200414F,0x64005AA3,0xFEA03D3B,0xF8C05071,0xFAC452C9,0xFE6C216E,0xFE280A9E,0xFC00000E,0xD00C0071,0xC0000184,0xFE783BC2,0xFE441DA3,0xCE000A96,0x92001B46,0x1AC5AA3,0x10C25C5,0xFEE811FD,0xFEC80885,0xCCC40884,0xFEBC1115,0xFE880086,0xD0980104,0xDA840A69,0xC07801D5,0xA8840A69,0x38C25C5,0xFE380AD4,0xCC5C0884,0xF4000B45,0xCA000015, -0xA8200A69,0x4BFC25C5,0xB2000E98,0x9C001162,0x860025C6,0x38C25C5,0xFE380AD4,0xCC5C0884,0xF4000B45,0xCA000015,0xA8200A69,0x4BFC25C5,0xB2000E98,0x9C001162,0x860025C6,0x4BFC25C5,0xB2000E98,0x9C001162,0x860025C6,0x860025C6,0xFEE41BB9,0xF90021AD,0xFD082185,0xFE981149,0xFE5C06AE,0xFC00000E,0xCE24000C,0xC0000184,0xFEC41BE9,0xFE840F78,0xCE0009ED,0x9C001162, -0x1DF825C5,0x842208,0x842208,0x842208,0x842208,0xFE500A9D,0xFE500A9D,0xFE500A9D,0xB4400884,0xB4400884,0x82400885,0xFE180974,0xFE180974,0xFE180974,0xC4000001,0xC4000001,0x88140141,0x92000882,0x92000882,0x7800015A,0x62000882,0xC42208,0xC42208,0xC42208,0xA2000D86,0xA2000D86,0x8000092D,0x80001086,0x80001086,0x6E00071A,0x5E000C63,0x18C2208, -0x18C2208,0x5C001505,0x5000166E,0x4000220B,0xFE6814BA,0xF67C1C38,0x842208,0xFE440A76,0xFE1C025D,0xF8000000,0xDE04001E,0xAE000022,0xFE3C13E0,0xFE180932,0xB6000903,0x6E00071A,0x1182208,0xC40884,0xC40884,0xC40884,0xC40884,0xFC88000D,0xFC88000D,0xFC88000D,0xA2840001,0xA2840001,0x82840001,0x3240882,0x3240882,0x3240882,0xC0080001,0xC0080001, -0x82440001,0x17FC0882,0x17FC0882,0x7800015A,0x62000882,0x3240882,0x3240882,0x3240882,0xC0080001,0xC0080001,0x82440001,0x17FC0882,0x17FC0882,0x7800015A,0x62000882,0x17FC0882,0x17FC0882,0x7800015A,0x62000882,0x62000882,0xFEA0054A,0xF6BC0620,0xC40884,0xFE780349,0xFC3C00CA,0xF8000000,0xD21C0001,0xAE000022,0xF88805B2,0xFC5802F9,0x1A40882,0x7800015A, -0x1A40882,0x1500A69,0xFF2402D5,0xF1080000,0xCD080000,0x1F40A69,0xFEA0004A,0xCCC00000,0x7FF80A69,0xCA000014,0xA8000A69,0x1F40A69,0xFEA0004A,0xCCC00000,0x7FF80A69,0xCA000014,0xA8000A69,0x7FF80A69,0xCA000014,0xA8000A69,0xA8000A69,0x1F40A69,0xFEA0004A,0xCCC00000,0x7FF80A69,0xCA000014,0xA8000A69,0x7FF80A69,0xCA000014,0xA8000A69,0xA8000A69,0x7FF80A69, -0xCA000014,0xA8000A69,0xA8000A69,0xA8000A69,0xFB2C0884,0x1680A69,0xFF4C08C5,0xFEEC05A5,0xFE900304,0xFC00000D,0xCC340000,0xC20000DD,0xFF180845,0xFED80550,0xD64C0001,0xA8000A69,0x5DF80A69,0x400884,0x400884,0x400884,0x400884,0x400884,0x400884,0x400884,0x400884,0x400884,0x400884,0xC8000000,0xC8000000,0xC8000000,0xC8000000,0xC8000000, -0xC8000000,0x60000001,0x60000001,0x60000001,0x40000001,0x600882,0x600882,0x600882,0x600882,0x600882,0x600882,0x4C000335,0x4C000335,0x4C000335,0x3A00019A,0xC40882,0xC40882,0xC40882,0x2C00053D,0x20000882,0xFE2C052D,0x400884,0x400884,0xFE200200,0xFE0C0075,0xF6000000,0xF6000000,0xA2000000,0xFE100422,0xFE0001C4,0x7600003A,0x4C000335, -0x8C0882,}; -static const uint32_t g_etc1_to_bc7_m6_table205[] = { -0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x2000000,0x2000000,0x2000000,0x2000000,0x2000000,0x2000000,0x2000000,0x2000000,0x2000000,0x2000000,0x0, -0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x8000000,0x8000000,0x8000000,0x2000000,0x0,0x940000,0x940000,0x940000,0x940000,0x940000,0x940000,0x940000,0x940000,0x940000,0x940000,0xDC0000,0xDC0000,0xDC0000,0xDC0000,0xDC0000, -0xDC0000,0x1BC0000,0x1BC0000,0x1BC0000,0x48000001,0xDC0000,0xDC0000,0xDC0000,0xDC0000,0xDC0000,0xDC0000,0x1BC0000,0x1BC0000,0x1BC0000,0x48000001,0x1BC0000,0x1BC0000,0x1BC0000,0x48000001,0x48000001,0x69C0000,0x940000,0x940000,0xAC0000,0xB80000,0xC80000,0xC80000,0xF80000,0xAC0000,0xB80000,0x1380000,0x1BC0000, -0x1380000,0x1180000,0x1180000,0x1180000,0x1180000,0x1A00000,0x1A00000,0x1A00000,0x55F80000,0x55F80000,0x8A000001,0x1A00000,0x1A00000,0x1A00000,0x55F80000,0x55F80000,0x8A000001,0x55F80000,0x55F80000,0x8A000001,0x8A000001,0x1A00000,0x1A00000,0x1A00000,0x55F80000,0x55F80000,0x8A000001,0x55F80000,0x55F80000,0x8A000001,0x8A000001,0x55F80000, -0x55F80000,0x8A000001,0x8A000001,0x8A000001,0x3440000,0xD280000,0x1180000,0x17C0000,0x3D40000,0x27FC0000,0x3FF80000,0x63F80000,0x1600000,0x1A00000,0x27FC0000,0x8A000001,0x27FC0000,0x1A80001,0x81FC0000,0xC1FC0000,0xD4000000,0x81FC0000,0xC1FC0000,0xD4000000,0xC1FC0000,0xD4000000,0xD4000000,0x81FC0000,0xC1FC0000,0xD4000000,0xC1FC0000,0xD4000000, -0xD4000000,0xC1FC0000,0xD4000000,0xD4000000,0xD4000000,0x81FC0000,0xC1FC0000,0xD4000000,0xC1FC0000,0xD4000000,0xD4000000,0xC1FC0000,0xD4000000,0xD4000000,0xD4000000,0xC1FC0000,0xD4000000,0xD4000000,0xD4000000,0xD4000000,0x33FC0000,0xBC40000,0xBC40000,0x99FC0000,0xB9FC0000,0xCBF40000,0xD4000000,0xD4000000,0x63FC0000,0xA7FC0000,0xD3D80000,0xD4000000, -0xB1FC0000,0xD4604E,0xFEB03C09,0xFE9426F6,0xD49025C5,0xFE8C2D3E,0xFE641023,0xDE641046,0xF24C14D2,0xCE440B09,0xB04C14D2,0xFE68364F,0xFE2C0F61,0xE02C0D53,0xFC040B0A,0xD2040012,0xB20C0B07,0xD20025C6,0xB8000DD5,0xA60010C2,0x8E0025C7,0x33C604A,0xFE042E6B,0xD40425C6,0xE800235E,0xC6001139,0xA80017A6,0xC0003691,0xAE001B58,0x9E001B37,0x86002D9F,0x23FC604A, -0x96003EDE,0x8A0037DE,0x7E004416,0x6A00604A,0xFEA0430C,0xFECC55D2,0xFECC5866,0xFE702686,0xFE3C0E17,0xFE08006C,0xDA1400D9,0xCA0000F6,0xFE904155,0xFE50227D,0xD60009ED,0x9E001B37,0x1C8604A,0x11C25C5,0xFEF412E5,0xFED808A8,0xD4D40884,0xFED011E1,0xFEA0010E,0xD8A80104,0xE2940A69,0xC88801D5,0xB0940A69,0x3A425C5,0xFE580BA3,0xD46C0884,0xFC040B09,0xD2040011, -0xB0300A69,0x57FC25C5,0xB8000DD4,0xA60010C1,0x8E0025C6,0x3A425C5,0xFE580BA3,0xD46C0884,0xFC040B09,0xD2040011,0xB0300A69,0x57FC25C5,0xB8000DD4,0xA60010C1,0x8E0025C6,0x57FC25C5,0xB8000DD4,0xA60010C1,0x8E0025C6,0x8E0025C6,0xFEF81C2C,0xFF0C21C5,0xFF0C21E5,0xFEC01224,0xFE6807CD,0xFE18003B,0xD634000C,0xCA0000F5,0xFEDC1C41,0xFE9810B6,0xD600095D,0xA60010C1, -0x2BFC25C5,0x9025C5,0x9025C5,0x9025C5,0x9025C5,0xFE5C0D6A,0xFE5C0D6A,0xFE5C0D6A,0xBC4C0A6A,0xBC4C0A6A,0x8A4C0A6A,0xFE240A95,0xFE240A95,0xFE240A95,0xD204000E,0xD204000E,0x901801D6,0x9E000883,0x9E000883,0x84000113,0x6A000883,0xD425C5,0xD425C5,0xD425C5,0xAE000F45,0xAE000F45,0x86000AD6,0x8C00118B,0x8C00118B,0x7A000763,0x62000CC3,0x1B025C5, -0x1B025C5,0x66001782,0x56001853,0x460025C6,0xFE681813,0xFC881FBD,0x9025C5,0xFE4C0D02,0xFE2C03E3,0xFE08001B,0xEC08004D,0xBC00000B,0xFE5016E0,0xFE300BA2,0xC60008FD,0x7A000763,0x13025C5,0xD40884,0xD40884,0xD40884,0xD40884,0xFE98001D,0xFE98001D,0xFE98001D,0xAA940001,0xAA940001,0x8A940001,0x33C0882,0x33C0882,0x33C0882,0xC8180001,0xC8180001, -0x8A540001,0x23FC0882,0x23FC0882,0x84000112,0x6A000882,0x33C0882,0x33C0882,0x33C0882,0xC8180001,0xC8180001,0x8A540001,0x23FC0882,0x23FC0882,0x84000112,0x6A000882,0x23FC0882,0x23FC0882,0x84000112,0x6A000882,0x6A000882,0xFAB4057D,0xFECC0620,0xD40884,0xFE880374,0xFE5400F2,0xFE100001,0xDA2C0001,0xBC00000A,0xFE9405BA,0xFE680322,0x1C80882,0x84000112, -0x1C80882,0x1600A69,0xFF3C0355,0xF9180000,0xD5180000,0xFFC0A69,0xFEB80092,0xD4D00000,0x8BF80A69,0xD2000008,0xB0000A69,0xFFC0A69,0xFEB80092,0xD4D00000,0x8BF80A69,0xD2000008,0xB0000A69,0x8BF80A69,0xD2000008,0xB0000A69,0xB0000A69,0xFFC0A69,0xFEB80092,0xD4D00000,0x8BF80A69,0xD2000008,0xB0000A69,0x8BF80A69,0xD2000008,0xB0000A69,0xB0000A69,0x8BF80A69, -0xD2000008,0xB0000A69,0xB0000A69,0xB0000A69,0xFF3408B4,0x1780A69,0xF75C0908,0xFF040611,0xFEBC037A,0xFE180032,0xD4440000,0xCE0000B4,0xFF2C088A,0xFEF005C4,0xDE5C0001,0xB0000A69,0x6BFC0A69,0x4C0A69,0x4C0A69,0x4C0A69,0x4C0A69,0x4C0A69,0x4C0A69,0x4C0A69,0x4C0A69,0x4C0A69,0x4C0A69,0xDC040001,0xDC040001,0xDC040001,0xDC040001,0xDC040001, -0xDC040001,0x6C040001,0x6C040001,0x6C040001,0x48000002,0x6C0A69,0x6C0A69,0x6C0A69,0x6C0A69,0x6C0A69,0x6C0A69,0x580003D4,0x580003D4,0x580003D4,0x400001E1,0xDC0A69,0xDC0A69,0xDC0A69,0x32000652,0x24000A69,0xF63C06CD,0x4C0A69,0x4C0A69,0xFE200321,0xFE140115,0xFE080012,0xFE080012,0xB2040001,0xFE1005A5,0xFE0002C5,0x86000035,0x580003D4, -0x9C0A69,}; -static const uint32_t g_etc1_to_bc7_m6_table206[] = { -0x100001,0x100001,0x100001,0x100001,0x100001,0x100001,0x100001,0x100001,0x100001,0x100001,0x100001,0x100001,0x100001,0x100001,0x100001,0x100001,0x100001,0x100001,0x100001,0x100001,0x2180000,0x2180000,0x2180000,0x2180000,0x2180000,0x2180000,0x2180000,0x2180000,0x2180000,0x2180000,0x300000, -0x300000,0x300000,0x300000,0x8000000,0x100001,0x100001,0x100001,0x100001,0x100001,0x100001,0x100001,0x100001,0x140000,0x140000,0x140000,0x2180000,0x240000,0xA40000,0xA40000,0xA40000,0xA40000,0xA40000,0xA40000,0xA40000,0xA40000,0xA40000,0xA40000,0xF40000,0xF40000,0xF40000,0xF40000,0xF40000, -0xF40000,0x1F00000,0x1F00000,0x1F00000,0x50000001,0xF40000,0xF40000,0xF40000,0xF40000,0xF40000,0xF40000,0x1F00000,0x1F00000,0x1F00000,0x50000001,0x1F00000,0x1F00000,0x1F00000,0x50000001,0x50000001,0xEAC0000,0xA40000,0xA40000,0x6BC0000,0x2CC0000,0x2DC0000,0x2DC0000,0x1140000,0x6BC0000,0x2CC0000,0x15C0000,0x1F00000, -0x15C0000,0x1280000,0x1280000,0x1280000,0x1280000,0x1B80000,0x1B80000,0x1B80000,0x61F80000,0x61F80000,0x92000001,0x1B80000,0x1B80000,0x1B80000,0x61F80000,0x61F80000,0x92000001,0x61F80000,0x61F80000,0x92000001,0x92000001,0x1B80000,0x1B80000,0x1B80000,0x61F80000,0x61F80000,0x92000001,0x61F80000,0x61F80000,0x92000001,0x92000001,0x61F80000, -0x61F80000,0x92000001,0x92000001,0x92000001,0x1580000,0x13C0000,0x1280000,0x3900000,0x1F00000,0x37FC0000,0x4BFC0000,0x6DFC0000,0x1740000,0x1B80000,0x37FC0000,0x92000001,0x37FC0000,0x1B80001,0x99FC0000,0xCDFC0000,0xDC000000,0x99FC0000,0xCDFC0000,0xDC000000,0xCDFC0000,0xDC000000,0xDC000000,0x99FC0000,0xCDFC0000,0xDC000000,0xCDFC0000,0xDC000000, -0xDC000000,0xCDFC0000,0xDC000000,0xDC000000,0xDC000000,0x99FC0000,0xCDFC0000,0xDC000000,0xCDFC0000,0xDC000000,0xDC000000,0xCDFC0000,0xDC000000,0xDC000000,0xDC000000,0xCDFC0000,0xDC000000,0xDC000000,0xDC000000,0xDC000000,0x5BFC0000,0x1D80000,0x1D80000,0xADFC0000,0xC7F80000,0xD5F40000,0xDC000000,0xDC000000,0x81FC0000,0xB7FC0000,0xDBE80000,0xDC000000, -0xBFFC0000,0xE4604E,0xFEC43D66,0xFEA027D6,0xDCA025C5,0xFE982F3A,0xFE7811D1,0xE6741046,0xFA5C14D2,0xD6540B09,0xB85C14D2,0xFE7437E7,0xFE40114C,0xE83C0D53,0xFE140B5E,0xDA140012,0xBA1C0B07,0xDA1025C6,0xC4000D55,0xAC001046,0x961025C7,0x154604A,0xFE082F3D,0xDC1425C6,0xF4002116,0xD2000F41,0xB4001656,0xD20034A5,0xBA001888,0xA800188D,0x92002BD7,0x2FFC604A, -0xA0003D3D,0x960035A6,0x8400424A,0x7200604A,0xFEBC4462,0xFECC56D2,0xF8E05915,0xFE8028C4,0xFE501077,0xFE240126,0xE22400D9,0xD40800DB,0xFE9842FE,0xFE5C2552,0xE4000921,0xA800188D,0x1E8604A,0x12C25C5,0xFF0C13F5,0xFEEC090D,0xDCE40884,0xFEE812E1,0xFEB801D6,0xE0B80104,0xEAA40A69,0xD09801D5,0xB8A40A69,0x3BC25C5,0xFE700C8B,0xDC7C0884,0xFE140B5D,0xDA140011, -0xB8400A69,0x63FC25C5,0xC4000D04,0xAC000FF5,0x960025C6,0x3BC25C5,0xFE700C8B,0xDC7C0884,0xFE140B5D,0xDA140011,0xB8400A69,0x63FC25C5,0xC4000D04,0xAC000FF5,0x960025C6,0x63FC25C5,0xC4000D04,0xAC000FF5,0x960025C6,0x960025C6,0xFF001CF1,0xFB242229,0xFD282208,0xFED41351,0xFE90091D,0xFE2C00B1,0xDE44000C,0xD4000099,0xFEF81D1D,0xFEC01208,0xE4000908,0xAC000FF5, -0x3BFC25C5,0xA025C5,0xA025C5,0xA025C5,0xA025C5,0xFE680E06,0xFE680E06,0xFE680E06,0xC45C0A6A,0xC45C0A6A,0x925C0A6A,0xFE300B25,0xFE300B25,0xFE300B25,0xDA14000E,0xDA14000E,0x982801D6,0xA6100883,0xA6100883,0x8A0C0103,0x72100883,0xEC25C5,0xEC25C5,0xEC25C5,0xC0000E11,0xC0000E11,0x92000A76,0x98001033,0x98001033,0x800005C3,0x6E000B7B,0x1E425C5, -0x1E425C5,0x6C001642,0x5C001743,0x4E0025C6,0xFE841892,0xFE8C201D,0xA025C5,0xFE5C0DCE,0xFE40049B,0xFE1C004D,0xF418004D,0xC410000B,0xFE6417AD,0xFE3C0C7D,0xD6000894,0x800005C3,0x15425C5,0xE40884,0xE40884,0xE40884,0xE40884,0xFEB0003D,0xFEB0003D,0xFEB0003D,0xB2A40001,0xB2A40001,0x92A40001,0x1540882,0x1540882,0x1540882,0xD0280001,0xD0280001, -0x92640001,0x2FFC0882,0x2FFC0882,0x8A0000CA,0x72000882,0x1540882,0x1540882,0x1540882,0xD0280001,0xD0280001,0x92640001,0x2FFC0882,0x2FFC0882,0x8A0000CA,0x72000882,0x2FFC0882,0x2FFC0882,0x8A0000CA,0x72000882,0x72000882,0xFEBC05A5,0xF6DC0659,0xE40884,0xFE9803A9,0xFC6C0139,0xFE2C0008,0xE23C0001,0xC8000000,0xFAAC05E9,0xFE740371,0x1E80882,0x8A0000CA, -0x1E80882,0x1700A69,0xFF5003D0,0xFF280001,0xDD280000,0x29FC0A69,0xFED80104,0xDCE00000,0x97F80A69,0xDC000000,0xB8000A69,0x29FC0A69,0xFED80104,0xDCE00000,0x97F80A69,0xDC000000,0xB8000A69,0x97F80A69,0xDC000000,0xB8000A69,0xB8000A69,0x29FC0A69,0xFED80104,0xDCE00000,0x97F80A69,0xDC000000,0xB8000A69,0x97F80A69,0xDC000000,0xB8000A69,0xB8000A69,0x97F80A69, -0xDC000000,0xB8000A69,0xB8000A69,0xB8000A69,0xFF5008C9,0x1880A69,0xFF6C0908,0xFF200671,0xFED003FA,0xFE480074,0xDC540000,0xD4000080,0xF74C08C5,0xFF080601,0xE66C0001,0xB8000A69,0x7BFC0A69,0x5C0A69,0x5C0A69,0x5C0A69,0x5C0A69,0x5C0A69,0x5C0A69,0x5C0A69,0x5C0A69,0x5C0A69,0x5C0A69,0xE4140001,0xE4140001,0xE4140001,0xE4140001,0xE4140001, -0xE4140001,0x74140001,0x74140001,0x74140001,0x50100002,0x840A69,0x840A69,0x840A69,0x840A69,0x840A69,0x840A69,0x680002EA,0x680002EA,0x680002EA,0x4C000119,0x10C0A69,0x10C0A69,0x10C0A69,0x3E0005AA,0x2C000A69,0xFE4C06CD,0x5C0A69,0x5C0A69,0xFE3C0349,0xFE28013D,0xFE180022,0xFE180022,0xBA140001,0xFE2005E4,0xFE1402E4,0x9A000001,0x680002EA, -0xBC0A69,}; -static const uint32_t g_etc1_to_bc7_m6_table207[] = { -0x200001,0x200001,0x200001,0x200001,0x200001,0x200001,0x200001,0x200001,0x200001,0x200001,0x200001,0x200001,0x200001,0x200001,0x200001,0x200001,0x200001,0x200001,0x200001,0x200001,0x2300000,0x2300000,0x2300000,0x2300000,0x2300000,0x2300000,0x2300000,0x2300000,0x2300000,0x2300000,0x640000, -0x640000,0x640000,0x640000,0x10000000,0x200001,0x200001,0x200001,0x200001,0x200001,0x200001,0x200001,0x200001,0x240000,0x240000,0x240000,0x2300000,0x480000,0xB40000,0xB40000,0xB40000,0xB40000,0xB40000,0xB40000,0xB40000,0xB40000,0xB40000,0xB40000,0x10C0000,0x10C0000,0x10C0000,0x10C0000,0x10C0000, -0x10C0000,0xBF80000,0xBF80000,0xBF80000,0x58000001,0x10C0000,0x10C0000,0x10C0000,0x10C0000,0x10C0000,0x10C0000,0xBF80000,0xBF80000,0xBF80000,0x58000001,0xBF80000,0xBF80000,0xBF80000,0x58000001,0x58000001,0xC00000,0xB40000,0xB40000,0xD00000,0x2E00000,0xF40000,0xF40000,0x32C0000,0xD00000,0x2E00000,0x17C0000,0xBF80000, -0x17C0000,0x1380000,0x1380000,0x1380000,0x1380000,0x1D00000,0x1D00000,0x1D00000,0x6DF80000,0x6DF80000,0x9A000001,0x1D00000,0x1D00000,0x1D00000,0x6DF80000,0x6DF80000,0x9A000001,0x6DF80000,0x6DF80000,0x9A000001,0x9A000001,0x1D00000,0x1D00000,0x1D00000,0x6DF80000,0x6DF80000,0x9A000001,0x6DF80000,0x6DF80000,0x9A000001,0x9A000001,0x6DF80000, -0x6DF80000,0x9A000001,0x9A000001,0x9A000001,0x7680000,0x14C0000,0x1380000,0x1A80000,0xDFC0000,0x45FC0000,0x59FC0000,0x79F80000,0x1880000,0x1D00000,0x45FC0000,0x9A000001,0x45FC0000,0x1C80001,0xB1FC0000,0xD9FC0000,0xE4000000,0xB1FC0000,0xD9FC0000,0xE4000000,0xD9FC0000,0xE4000000,0xE4000000,0xB1FC0000,0xD9FC0000,0xE4000000,0xD9FC0000,0xE4000000, -0xE4000000,0xD9FC0000,0xE4000000,0xE4000000,0xE4000000,0xB1FC0000,0xD9FC0000,0xE4000000,0xD9FC0000,0xE4000000,0xE4000000,0xD9FC0000,0xE4000000,0xE4000000,0xE4000000,0xD9FC0000,0xE4000000,0xE4000000,0xE4000000,0xE4000000,0x81FC0000,0x1E80000,0x1E80000,0xC1FC0000,0xD5F80000,0xDFF80000,0xE4000000,0xE4000000,0x9FFC0000,0xC9FC0000,0xE3F80000,0xE4000000, -0xCFFC0000,0xF4604E,0xFED03EDE,0xFEB828D6,0xE4B025C5,0xFEB03142,0xFE8813AF,0xEE841046,0xFE6C14EA,0xDE640B09,0xC06C14D2,0xFE8C397F,0xFE58135C,0xF04C0D53,0xFE2C0C2E,0xE2240012,0xC22C0B07,0xE22025C6,0xCE080D51,0xB4101046,0x9E2025C7,0x16C604A,0xFE2C30C9,0xE42425C6,0xFA001F7A,0xDE000DA9,0xBC00157A,0xE20032CB,0xC60015F8,0xAE00161D,0x98002A5B,0x3BFC604A, -0xAC003B6D,0x9C003362,0x8A0040B6,0x7A00604A,0xFED045E7,0xFEEC56D6,0xFEEC5931,0xFE982B12,0xFE6812F6,0xFE38023E,0xEA3400D9,0xDC1800DB,0xFEB4443B,0xFE802784,0xEE0008BF,0xAE00161D,0x7FC604A,0x13C25C5,0xFF1814ED,0xFEFC0994,0xE4F40884,0xFEF413E5,0xFECC02E0,0xE8C80104,0xF2B40A69,0xD8A801D5,0xC0B40A69,0x1D425C5,0xFE940D8B,0xE48C0884,0xFE380C01,0xE2240011, -0xC0500A69,0x6FFC25C5,0xD0000C54,0xB2000F59,0x9E0025C6,0x1D425C5,0xFE940D8B,0xE48C0884,0xFE380C01,0xE2240011,0xC0500A69,0x6FFC25C5,0xD0000C54,0xB2000F59,0x9E0025C6,0x6FFC25C5,0xD0000C54,0xB2000F59,0x9E0025C6,0x9E0025C6,0xFF141D5E,0xFF2C2251,0xFF2C2274,0xFEEC1476,0xFEA40A79,0xFE480164,0xE654000C,0xE0000062,0xFF081D9A,0xFEC812EA,0xEE0008BB,0xB2000F59, -0x49FC25C5,0xB025C5,0xB025C5,0xB025C5,0xB025C5,0xFE800E8E,0xFE800E8E,0xFE800E8E,0xCC6C0A6A,0xCC6C0A6A,0x9A6C0A6A,0xFE440BA3,0xFE440BA3,0xFE440BA3,0xE224000E,0xE224000E,0xA03801D6,0xAE200883,0xAE200883,0x921C0103,0x7A200883,0x10425C5,0x10425C5,0x10425C5,0xD2000D0D,0xD2000D0D,0x9A080A6A,0xA8000EC8,0xA8000EC8,0x8C000443,0x74000A83,0x7FC25C5, -0x7FC25C5,0x7800151A,0x66001632,0x560025C6,0xFE901926,0xFCA82036,0xB025C5,0xFE700EB6,0xFE540563,0xFE34009A,0xFC28004D,0xCC20000B,0xFE78181A,0xFE500D1D,0xE4040883,0x8C000443,0x17425C5,0xF40884,0xF40884,0xF40884,0xF40884,0xFEBC0061,0xFEBC0061,0xFEBC0061,0xBAB40001,0xBAB40001,0x9AB40001,0x16C0882,0x16C0882,0x16C0882,0xD8380001,0xD8380001, -0x9A740001,0x3BFC0882,0x3BFC0882,0x96000092,0x7A000882,0x16C0882,0x16C0882,0x16C0882,0xD8380001,0xD8380001,0x9A740001,0x3BFC0882,0x3BFC0882,0x96000092,0x7A000882,0x3BFC0882,0x3BFC0882,0x96000092,0x7A000882,0x7A000882,0xFED805B2,0xFEEC0659,0xF40884,0xFEB403F5,0xFE80016D,0xFE480020,0xEA4C0001,0xD0100000,0xFEB40611,0xFE98039D,0x7FC0882,0x96000092, -0x7FC0882,0x1800A69,0xFF5C0454,0xFF380024,0xE5380000,0x41FC0A69,0xFEF00184,0xE4F00000,0xA1FC0A69,0xE40C0000,0xC0000A69,0x41FC0A69,0xFEF00184,0xE4F00000,0xA1FC0A69,0xE40C0000,0xC0000A69,0xA1FC0A69,0xE40C0000,0xC0000A69,0xC0000A69,0x41FC0A69,0xFEF00184,0xE4F00000,0xA1FC0A69,0xE40C0000,0xC0000A69,0xA1FC0A69,0xE40C0000,0xC0000A69,0xC0000A69,0xA1FC0A69, -0xE40C0000,0xC0000A69,0xC0000A69,0xC0000A69,0xFD680908,0x19C0A69,0xF77C094D,0xFF4006CD,0xFEE80484,0xFE7000E8,0xE4640000,0xE0000061,0xFF5C08C5,0xFF200681,0xEE7C0001,0xC0000A69,0x89FC0A69,0x6C0A69,0x6C0A69,0x6C0A69,0x6C0A69,0x6C0A69,0x6C0A69,0x6C0A69,0x6C0A69,0x6C0A69,0x6C0A69,0xEC240001,0xEC240001,0xEC240001,0xEC240001,0xEC240001, -0xEC240001,0x7C240001,0x7C240001,0x7C240001,0x58200002,0x9C0A69,0x9C0A69,0x9C0A69,0x9C0A69,0x9C0A69,0x9C0A69,0x74000232,0x74000232,0x74000232,0x58000091,0x13C0A69,0x13C0A69,0x13C0A69,0x44000502,0x34000A69,0xF65C070A,0x6C0A69,0x6C0A69,0xFE4C0372,0xFE3C016D,0xFE2C003D,0xFE2C003D,0xC2240001,0xFE3C05E9,0xFA2C0322,0xA2100001,0x74000232, -0xE00A69,}; -static const uint32_t g_etc1_to_bc7_m6_table208[] = { -0x340000,0x340000,0x340000,0x340000,0x340000,0x340000,0x340000,0x340000,0x340000,0x340000,0x340000,0x340000,0x340000,0x340000,0x340000,0x340000,0x340000,0x340000,0x340000,0x340000,0x4C0000,0x4C0000,0x4C0000,0x4C0000,0x4C0000,0x4C0000,0x4C0000,0x4C0000,0x4C0000,0x4C0000,0x980000, -0x980000,0x980000,0x980000,0x18000001,0x340000,0x340000,0x340000,0x340000,0x340000,0x340000,0x340000,0x340000,0x380000,0x380000,0x380000,0x4C0000,0x6C0000,0xC40001,0xC40001,0xC40001,0xC40001,0xC40001,0xC40001,0xC40001,0xC40001,0xC40001,0xC40001,0x3240000,0x3240000,0x3240000,0x3240000,0x3240000, -0x3240000,0x17FC0000,0x17FC0000,0x17FC0000,0x62000000,0x3240000,0x3240000,0x3240000,0x3240000,0x3240000,0x3240000,0x17FC0000,0x17FC0000,0x17FC0000,0x62000000,0x17FC0000,0x17FC0000,0x17FC0000,0x62000000,0x62000000,0xD40000,0xC40001,0xC40001,0x4E40000,0xF80000,0x10C0000,0x10C0000,0x14C0000,0x4E40000,0xF80000,0x1A40000,0x17FC0000, -0x1A40000,0x1480001,0x1480001,0x1480001,0x1480001,0x3E80000,0x3E80000,0x3E80000,0x79FC0000,0x79FC0000,0xA4000000,0x3E80000,0x3E80000,0x3E80000,0x79FC0000,0x79FC0000,0xA4000000,0x79FC0000,0x79FC0000,0xA4000000,0xA4000000,0x3E80000,0x3E80000,0x3E80000,0x79FC0000,0x79FC0000,0xA4000000,0x79FC0000,0x79FC0000,0xA4000000,0xA4000000,0x79FC0000, -0x79FC0000,0xA4000000,0xA4000000,0xA4000000,0x1800000,0x1600000,0x1480001,0x1C00000,0x23FC0000,0x57FC0000,0x69F80000,0x85F80000,0x39C0000,0x3E80000,0x57FC0000,0xA4000000,0x57FC0000,0x1DC0000,0xCDFC0000,0xE7F80000,0xEC000001,0xCDFC0000,0xE7F80000,0xEC000001,0xE7F80000,0xEC000001,0xEC000001,0xCDFC0000,0xE7F80000,0xEC000001,0xE7F80000,0xEC000001, -0xEC000001,0xE7F80000,0xEC000001,0xEC000001,0xEC000001,0xCDFC0000,0xE7F80000,0xEC000001,0xE7F80000,0xEC000001,0xEC000001,0xE7F80000,0xEC000001,0xEC000001,0xEC000001,0xE7F80000,0xEC000001,0xEC000001,0xEC000001,0xEC000001,0xADFC0000,0x1FC0000,0x1FC0000,0xD7FC0000,0xE3FC0000,0xEBF00000,0xEC000001,0xEC000001,0xC1FC0000,0xDBFC0000,0xEDEC0000,0xEC000001, -0xDFFC0000,0x108604A,0xFEE840B6,0xFECC2A5B,0xECC025C7,0xFEC43362,0xFEA0161D,0xF6941046,0xFE84157A,0xE8780B07,0xC87C14D2,0xFEA43B6D,0xFE7015F8,0xFA600D51,0xFE400DA9,0xEC380012,0xCC400B09,0xEC3425C6,0xD81C0D53,0xBC201046,0xA63425C5,0x188604A,0xFE3832CB,0xEC3825C6,0xFE081F7A,0xE8000C2E,0xC60014EA,0xE80030C9,0xD200135C,0xBA0013AF,0xA20028D6,0x49F8604A, -0xB800397F,0xA6003142,0x96003EDE,0x8200604E,0xFEE44782,0xF90057DA,0xFB0459DA,0xFEAC2DF6,0xFE7C160E,0xFE4803FF,0xF24400DB,0xE42800D9,0xFED0463D,0xFE902A56,0xF81008BB,0xBA0013AF,0x19FC604A,0x15025C6,0xFF301632,0xFF140A83,0xED080883,0xFF0C151A,0xFEE40443,0xF0D80103,0xFAC40A6A,0xE2BC01D6,0xC8C40A6A,0x1F025C5,0xFEAC0EC8,0xECA00883,0xFE580D0D,0xEC38000E, -0xC8600A6A,0x7DF825C5,0xDC000BA3,0xBE000E8E,0xA60025C5,0x1F025C5,0xFEAC0EC8,0xECA00883,0xFE580D0D,0xEC38000E,0xC8600A6A,0x7DF825C5,0xDC000BA3,0xBE000E8E,0xA60025C5,0x7DF825C5,0xDC000BA3,0xBE000E8E,0xA60025C5,0xA60025C5,0xFF341E13,0xFD4822AA,0xFF4C228E,0xFF0015CE,0xFEBC0C34,0xFE70027E,0xEE64000B,0xE800004D,0xFF181E3E,0xFEDC1481,0xFC00088B,0xBE000E8E, -0x5BFC25C5,0xC025C6,0xC025C6,0xC025C6,0xC025C6,0xFE980F59,0xFE980F59,0xFE980F59,0xD67C0A69,0xD67C0A69,0xA47C0A69,0xFE5C0C54,0xFE5C0C54,0xFE5C0C54,0xEA340011,0xEA340011,0xAA4C01D5,0xB6340884,0xB6340884,0x9A2C0104,0x82340884,0x12025C5,0x12025C5,0x12025C5,0xE2000C01,0xE2000C01,0xA4180A69,0xB4000D8B,0xB4000D8B,0x980002E0,0x80000994,0x15F825C5, -0x15F825C5,0x840013E5,0x720014ED,0x600025C5,0xFEA019B4,0xF6BC20B2,0xC025C6,0xFE880F9E,0xFE6C0669,0xFE480126,0xFE3C0062,0xD430000C,0xFE9018F2,0xFE680E59,0xEC180882,0x980002E0,0x19C25C5,0x1080882,0x1080882,0x1080882,0x1080882,0xFED00092,0xFED00092,0xFED00092,0xC4C40001,0xC4C40001,0xA4C40001,0x1880882,0x1880882,0x1880882,0xE04C0001,0xE04C0001, -0xA4840001,0x49F80882,0x49F80882,0xA0000061,0x82000884,0x1880882,0x1880882,0x1880882,0xE04C0001,0xE04C0001,0xA4840001,0x49F80882,0x49F80882,0xA0000061,0x82000884,0x49F80882,0x49F80882,0xA0000061,0x82000884,0x82000884,0xFAEC05E9,0xF9000692,0x1080882,0xFEC4042A,0xFE9801A9,0xFE64003D,0xF65C0000,0xD8240001,0xFED00628,0xFEA403E8,0x19FC0882,0xA0000061, -0x19FC0882,0x1940A69,0xFF740502,0xFF4C0091,0xED480002,0x5BFC0A69,0xFF140232,0xED040001,0xAFFC0A69,0xEC240001,0xC8000A69,0x5BFC0A69,0xFF140232,0xED040001,0xAFFC0A69,0xEC240001,0xC8000A69,0xAFFC0A69,0xEC240001,0xC8000A69,0xC8000A69,0x5BFC0A69,0xFF140232,0xED040001,0xAFFC0A69,0xEC240001,0xC8000A69,0xAFFC0A69,0xEC240001,0xC8000A69,0xC8000A69,0xAFFC0A69, -0xEC240001,0xC8000A69,0xC8000A69,0xC8000A69,0xFF780910,0x1AC0A69,0xFF8C0951,0xFF580749,0xFF10052A,0xFE98018D,0xEC780001,0xE800003D,0xFF70090A,0xFF4006E5,0xF88C0000,0xC8000A69,0x9BFC0A69,0x7C0A69,0x7C0A69,0x7C0A69,0x7C0A69,0x7C0A69,0x7C0A69,0x7C0A69,0x7C0A69,0x7C0A69,0x7C0A69,0xF6340000,0xF6340000,0xF6340000,0xF6340000,0xF6340000, -0xF6340000,0x86340000,0x86340000,0x86340000,0x62340000,0xB80A69,0xB80A69,0xB80A69,0xB80A69,0xB80A69,0xB80A69,0x86000184,0x86000184,0x86000184,0x62000024,0x1740A69,0x1740A69,0x1740A69,0x50000454,0x3E000A69,0xFE6C0710,0x7C0A69,0x7C0A69,0xFE5803B5,0xFE5001A5,0xFE3C0061,0xFE3C0061,0xCC340000,0xFA500622,0xFE3C0355,0xAC200000,0x86000184, -0x1080A69,}; -static const uint32_t g_etc1_to_bc7_m6_table209[] = { -0x440000,0x440000,0x440000,0x440000,0x440000,0x440000,0x440000,0x440000,0x440000,0x440000,0x440000,0x440000,0x440000,0x440000,0x440000,0x440000,0x440000,0x440000,0x440000,0x440000,0x640000,0x640000,0x640000,0x640000,0x640000,0x640000,0x640000,0x640000,0x640000,0x640000,0xCC0000, -0xCC0000,0xCC0000,0xCC0000,0x20000001,0x440000,0x440000,0x440000,0x440000,0x440000,0x440000,0x440000,0x440000,0x480000,0x480000,0x480000,0x640000,0x900000,0xD40001,0xD40001,0xD40001,0xD40001,0xD40001,0xD40001,0xD40001,0xD40001,0xD40001,0xD40001,0x33C0000,0x33C0000,0x33C0000,0x33C0000,0x33C0000, -0x33C0000,0x23FC0000,0x23FC0000,0x23FC0000,0x6A000000,0x33C0000,0x33C0000,0x33C0000,0x33C0000,0x33C0000,0x33C0000,0x23FC0000,0x23FC0000,0x23FC0000,0x6A000000,0x23FC0000,0x23FC0000,0x23FC0000,0x6A000000,0x6A000000,0xE40000,0xD40001,0xD40001,0xF80000,0x10C0000,0x1240000,0x1240000,0x1680000,0xF80000,0x10C0000,0x1C80000,0x23FC0000, -0x1C80000,0x1580001,0x1580001,0x1580001,0x1580001,0x7FC0000,0x7FC0000,0x7FC0000,0x85FC0000,0x85FC0000,0xAC000000,0x7FC0000,0x7FC0000,0x7FC0000,0x85FC0000,0x85FC0000,0xAC000000,0x85FC0000,0x85FC0000,0xAC000000,0xAC000000,0x7FC0000,0x7FC0000,0x7FC0000,0x85FC0000,0x85FC0000,0xAC000000,0x85FC0000,0x85FC0000,0xAC000000,0xAC000000,0x85FC0000, -0x85FC0000,0xAC000000,0xAC000000,0xAC000000,0x5900000,0x1700000,0x1580001,0x3D40000,0x37FC0000,0x65FC0000,0x75FC0000,0x91F40000,0x3B00000,0x7FC0000,0x65FC0000,0xAC000000,0x65FC0000,0x1EC0000,0xE5FC0000,0xF3F80000,0xF4000001,0xE5FC0000,0xF3F80000,0xF4000001,0xF3F80000,0xF4000001,0xF4000001,0xE5FC0000,0xF3F80000,0xF4000001,0xF3F80000,0xF4000001, -0xF4000001,0xF3F80000,0xF4000001,0xF4000001,0xF4000001,0xE5FC0000,0xF3F80000,0xF4000001,0xF3F80000,0xF4000001,0xF4000001,0xF3F80000,0xF4000001,0xF4000001,0xF4000001,0xF3F80000,0xF4000001,0xF4000001,0xF4000001,0xF4000001,0xD5FC0000,0x77FC0000,0x77FC0000,0xEBFC0000,0xF1FC0000,0xF5F00000,0xF4000001,0xF4000001,0xDFFC0000,0xEDFC0000,0xF5FC0000,0xF4000001, -0xEFFC0000,0x118604A,0xFEF4424A,0xFED82BD7,0xF4D025C7,0xFED035A6,0xFEAC188D,0xFEA41046,0xFE941656,0xF0880B07,0xD08C14D2,0xFEBC3D3D,0xFE881888,0xFE740D55,0xFE580F41,0xF4480012,0xD4500B09,0xF44425C6,0xE02C0D53,0xC4301046,0xAE4425C5,0x1A0604A,0xFE5834A5,0xF44825C6,0xFE142116,0xF4000B5E,0xD00414D2,0xFA002F3D,0xDE00114C,0xC20011D1,0xAE0027D6,0x55F8604A, -0xC40037E7,0xB2002F3A,0x9C003D66,0x8A00604E,0xFEF44912,0xFF0C57EA,0xFF0C5A1A,0xFEC4307A,0xFE901902,0xFE5C05EA,0xFA5400DB,0xEC3800D9,0xFEDC478F,0xFEB02D65,0xFE2008C1,0xC20011D1,0x27FC604A,0x16025C6,0xFF441743,0xFF200B7B,0xF5180883,0xFF241642,0xFEF005C3,0xF8E80103,0xFED80A76,0xEACC01D6,0xD0D40A6A,0xDFC25C5,0xFECC1033,0xF4B00883,0xFE7C0E11,0xF448000E, -0xD0700A6A,0x89F825C5,0xE6000B25,0xCA000E06,0xAE0025C5,0xDFC25C5,0xFECC1033,0xF4B00883,0xFE7C0E11,0xF448000E,0xD0700A6A,0x89F825C5,0xE6000B25,0xCA000E06,0xAE0025C5,0x89F825C5,0xE6000B25,0xCA000E06,0xAE0025C5,0xAE0025C5,0xFF3C1EC2,0xFF4C22FE,0xF75C2313,0xFF1416C1,0xFEDC0DD4,0xFE8403CB,0xF674000B,0xF010004D,0xFF341F0E,0xFF0415B5,0xFE1408A6,0xCA000E06, -0x69FC25C5,0xD025C6,0xD025C6,0xD025C6,0xD025C6,0xFEA40FF5,0xFEA40FF5,0xFEA40FF5,0xDE8C0A69,0xDE8C0A69,0xAC8C0A69,0xFE740D04,0xFE740D04,0xFE740D04,0xF2440011,0xF2440011,0xB25C01D5,0xBE440884,0xBE440884,0xA23C0104,0x8A440884,0x13825C5,0x13825C5,0x13825C5,0xF4000B5D,0xF4000B5D,0xAC280A69,0xC6000C8B,0xC6000C8B,0xA20001D6,0x8800090D,0x21F825C5, -0x21F825C5,0x8A0012E1,0x780013F5,0x680025C5,0xFEBC1A59,0xFECC20B2,0xD025C6,0xFE981069,0xFE800755,0xFE5C01A9,0xFE540099,0xDC40000C,0xFEA01966,0xFE740F25,0xF4280882,0xA20001D6,0x1BC25C5,0x1180882,0x1180882,0x1180882,0x1180882,0xFEE800CA,0xFEE800CA,0xFEE800CA,0xCCD40001,0xCCD40001,0xACD40001,0x1A00882,0x1A00882,0x1A00882,0xE85C0001,0xE85C0001, -0xAC940001,0x55F80882,0x55F80882,0xA600003D,0x8A000884,0x1A00882,0x1A00882,0x1A00882,0xE85C0001,0xE85C0001,0xAC940001,0x55F80882,0x55F80882,0xA600003D,0x8A000884,0x55F80882,0x55F80882,0xA600003D,0x8A000884,0x8A000884,0xFEF40611,0xFF0C069A,0x1180882,0xFEDC0451,0xFEAC01ED,0xFE7C0064,0xFE6C0000,0xE0340001,0xF8EC0659,0xFEC40422,0x27FC0882,0xA600003D, -0x27FC0882,0x1A40A69,0xFF8005AA,0xFF640119,0xF5580002,0x75FC0A69,0xFF2C02EA,0xF5140001,0xBBFC0A69,0xF4340001,0xD0000A69,0x75FC0A69,0xFF2C02EA,0xF5140001,0xBBFC0A69,0xF4340001,0xD0000A69,0xBBFC0A69,0xF4340001,0xD0000A69,0xD0000A69,0x75FC0A69,0xFF2C02EA,0xF5140001,0xBBFC0A69,0xF4340001,0xD0000A69,0xBBFC0A69,0xF4340001,0xD0000A69,0xD0000A69,0xBBFC0A69, -0xF4340001,0xD0000A69,0xD0000A69,0xD0000A69,0xFD90094D,0x1C00A69,0xF9A00992,0xFF6C0794,0xFF3C05C4,0xFEC80235,0xF4880001,0xF2000022,0xF98C094D,0xFF58076D,0xFEA00004,0xD0000A69,0xA9FC0A69,0x8C0A69,0x8C0A69,0x8C0A69,0x8C0A69,0x8C0A69,0x8C0A69,0x8C0A69,0x8C0A69,0x8C0A69,0x8C0A69,0xFE440000,0xFE440000,0xFE440000,0xFE440000,0xFE440000, -0xFE440000,0x8E440000,0x8E440000,0x8E440000,0x6A440000,0xD00A69,0xD00A69,0xD00A69,0xD00A69,0xD00A69,0xD00A69,0x92000104,0x92000104,0x92000104,0x6A000001,0x1A40A69,0x1A40A69,0x1A40A69,0x560003D0,0x46000A69,0xF8800745,0x8C0A69,0x8C0A69,0xFE6803E8,0xFE6401E1,0xFE540080,0xFE540080,0xD4440000,0xFE580652,0xFE50037A,0xB4300000,0x92000104, -0x1280A69,}; -static const uint32_t g_etc1_to_bc7_m6_table210[] = { -0x540000,0x540000,0x540000,0x540000,0x540000,0x540000,0x540000,0x540000,0x540000,0x540000,0x540000,0x540000,0x540000,0x540000,0x540000,0x540000,0x540000,0x540000,0x540000,0x540000,0x7C0000,0x7C0000,0x7C0000,0x7C0000,0x7C0000,0x7C0000,0x7C0000,0x7C0000,0x7C0000,0x7C0000,0xFC0000, -0xFC0000,0xFC0000,0xFC0000,0x28000001,0x540000,0x540000,0x540000,0x540000,0x540000,0x540000,0x540000,0x540000,0x4580000,0x4580000,0x4580000,0x7C0000,0xB00000,0xE40001,0xE40001,0xE40001,0xE40001,0xE40001,0xE40001,0xE40001,0xE40001,0xE40001,0xE40001,0x1540000,0x1540000,0x1540000,0x1540000,0x1540000, -0x1540000,0x2FFC0000,0x2FFC0000,0x2FFC0000,0x72000000,0x1540000,0x1540000,0x1540000,0x1540000,0x1540000,0x1540000,0x2FFC0000,0x2FFC0000,0x2FFC0000,0x72000000,0x2FFC0000,0x2FFC0000,0x2FFC0000,0x72000000,0x72000000,0x2F40000,0xE40001,0xE40001,0x10C0000,0x1200000,0x1380000,0x1380000,0x3800000,0x10C0000,0x1200000,0x1E80000,0x2FFC0000, -0x1E80000,0x1680001,0x1680001,0x1680001,0x1680001,0x1FFC0000,0x1FFC0000,0x1FFC0000,0x91FC0000,0x91FC0000,0xB4000000,0x1FFC0000,0x1FFC0000,0x1FFC0000,0x91FC0000,0x91FC0000,0xB4000000,0x91FC0000,0x91FC0000,0xB4000000,0xB4000000,0x1FFC0000,0x1FFC0000,0x1FFC0000,0x91FC0000,0x91FC0000,0xB4000000,0x91FC0000,0x91FC0000,0xB4000000,0xB4000000,0x91FC0000, -0x91FC0000,0xB4000000,0xB4000000,0xB4000000,0x1A40000,0x9800000,0x1680001,0x1EC0000,0x4BFC0000,0x75FC0000,0x83FC0000,0x9BF80000,0x3C40000,0x1FFC0000,0x75FC0000,0xB4000000,0x75FC0000,0x1FC0000,0xFDFC0000,0xFFF80000,0xFC000001,0xFDFC0000,0xFFF80000,0xFC000001,0xFFF80000,0xFC000001,0xFC000001,0xFDFC0000,0xFFF80000,0xFC000001,0xFFF80000,0xFC000001, -0xFC000001,0xFFF80000,0xFC000001,0xFC000001,0xFC000001,0xFDFC0000,0xFFF80000,0xFC000001,0xFFF80000,0xFC000001,0xFC000001,0xFFF80000,0xFC000001,0xFC000001,0xFC000001,0xFFF80000,0xFC000001,0xFC000001,0xFC000001,0xFC000001,0xFDFC0000,0xF7FC0000,0xF7FC0000,0xFDFC0000,0xFFF80000,0xFFF00000,0xFC000001,0xFC000001,0xFDFC0000,0xFDFC0000,0xFFD00000,0xFC000001, -0xFFF80000,0x128604A,0xFF004416,0xFEF02D9F,0xFCE025C7,0xFEE837DE,0xFEC01B37,0xFEB010C2,0xFEAC17A6,0xF8980B07,0xD89C14D2,0xFED03EDE,0xFEA01B58,0xFE8C0DD5,0xFE701139,0xFC580012,0xDC600B09,0xFC5425C6,0xE83C0D53,0xCC401046,0xB65425C5,0x1B8604A,0xFE7C3691,0xFC5825C6,0xFE2C235E,0xFC040B0A,0xD81414D2,0xFC002E6B,0xE8000F61,0xCC001023,0xB40026F6,0x61F8604A, -0xCA00364F,0xB8002D3E,0xA6003C09,0x9200604E,0xFF004A76,0xF92058E2,0xFB245AA3,0xFED432EA,0xFEA81C14,0xFE7C0838,0xFE6800F6,0xF44800D9,0xFEF0492C,0xFEC02FD3,0xFE38092D,0xCC001023,0x37FC604A,0x17025C6,0xFF501853,0xFF380CC3,0xFD280883,0xFF301782,0xFF080763,0xFEF40113,0xFEF00AD6,0xF2DC01D6,0xD8E40A6A,0x25FC25C5,0xFEE4118B,0xFCC00883,0xFEA00F45,0xFC58000E, -0xD8800A6A,0x95F825C5,0xEC000A95,0xD0000D6A,0xB60025C5,0x25FC25C5,0xFEE4118B,0xFCC00883,0xFEA00F45,0xFC58000E,0xD8800A6A,0x95F825C5,0xEC000A95,0xD0000D6A,0xB60025C5,0x95F825C5,0xEC000A95,0xD0000D6A,0xB60025C5,0xB60025C5,0xFF501F35,0xFD68232A,0xFF6C2313,0xFF30183D,0xFEE80F6B,0xFEAC055A,0xFE84000B,0xF820004D,0xFF441F99,0xFF101711,0xFE34092B,0xD0000D6A, -0x79FC25C5,0xE025C6,0xE025C6,0xE025C6,0xE025C6,0xFEB010C1,0xFEB010C1,0xFEB010C1,0xE69C0A69,0xE69C0A69,0xB49C0A69,0xFE8C0DD4,0xFE8C0DD4,0xFE8C0DD4,0xFA540011,0xFA540011,0xBA6C01D5,0xC6540884,0xC6540884,0xAA4C0104,0x92540884,0x15025C5,0x15025C5,0x15025C5,0xFC040B09,0xFC040B09,0xB4380A69,0xD2000BA3,0xD2000BA3,0xAE00010E,0x920008A8,0x2DF825C5, -0x2DF825C5,0x960011E1,0x840012E5,0x700025C5,0xFECC1ACA,0xF6DC212D,0xE025C6,0xFEAC116D,0xFE88084E,0xFE700251,0xFE6800F5,0xE450000C,0xFEB419D9,0xFE901016,0xFC380882,0xAE00010E,0x1E025C5,0x1280882,0x1280882,0x1280882,0x1280882,0xFEF40112,0xFEF40112,0xFEF40112,0xD4E40001,0xD4E40001,0xB4E40001,0x1B80882,0x1B80882,0x1B80882,0xF06C0001,0xF06C0001, -0xB4A40001,0x61F80882,0x61F80882,0xB200001D,0x92000884,0x1B80882,0x1B80882,0x1B80882,0xF06C0001,0xF06C0001,0xB4A40001,0x61F80882,0x61F80882,0xB200001D,0x92000884,0x61F80882,0x61F80882,0xB200001D,0x92000884,0x92000884,0xFF100620,0xF92006CD,0x1280882,0xFCF404B1,0xFEC00239,0xFE9400AA,0xFE84000A,0xE8440001,0xFEF8065D,0xFEDC0451,0x37FC0882,0xB200001D, -0x37FC0882,0x1B40A69,0xFF980652,0xFF7C01E1,0xFD680002,0x8DFC0A69,0xFF4C03D4,0xFD240001,0xC7FC0A69,0xFC440001,0xD8000A69,0x8DFC0A69,0xFF4C03D4,0xFD240001,0xC7FC0A69,0xFC440001,0xD8000A69,0xC7FC0A69,0xFC440001,0xD8000A69,0xD8000A69,0x8DFC0A69,0xFF4C03D4,0xFD240001,0xC7FC0A69,0xFC440001,0xD8000A69,0xC7FC0A69,0xFC440001,0xD8000A69,0xD8000A69,0xC7FC0A69, -0xFC440001,0xD8000A69,0xD8000A69,0xD8000A69,0xFDA40992,0x1D00A69,0xFFAC099A,0xFF840812,0xFF500668,0xFEF0031D,0xFC980001,0xFA000012,0xFF980951,0xFF7007FD,0xFED00049,0xD8000A69,0xB9FC0A69,0x9C0A69,0x9C0A69,0x9C0A69,0x9C0A69,0x9C0A69,0x9C0A69,0x9C0A69,0x9C0A69,0x9C0A69,0x9C0A69,0xFC580008,0xFC580008,0xFC580008,0xFC580008,0xFC580008, -0xFC580008,0x96540000,0x96540000,0x96540000,0x72540000,0xE80A69,0xE80A69,0xE80A69,0xE80A69,0xE80A69,0xE80A69,0xA2000092,0xA2000092,0xA2000092,0x720C0000,0x1D80A69,0x1D80A69,0x1D80A69,0x60000355,0x4E000A69,0xFE8C0751,0x9C0A69,0x9C0A69,0xFC800424,0xFE6C0220,0xFE6000B4,0xFE6000B4,0xDC540000,0xFE740659,0xFE6403CA,0xBC400000,0xA2000092, -0x14C0A69,}; -static const uint32_t g_etc1_to_bc7_m6_table211[] = { -0x640000,0x640000,0x640000,0x640000,0x640000,0x640000,0x640000,0x640000,0x640000,0x640000,0x640000,0x640000,0x640000,0x640000,0x640000,0x640000,0x640000,0x640000,0x640000,0x640000,0x940000,0x940000,0x940000,0x940000,0x940000,0x940000,0x940000,0x940000,0x940000,0x940000,0x12C0000, -0x12C0000,0x12C0000,0x12C0000,0x30000001,0x640000,0x640000,0x640000,0x640000,0x640000,0x640000,0x640000,0x640000,0xC680000,0xC680000,0xC680000,0x940000,0xD40000,0xF40001,0xF40001,0xF40001,0xF40001,0xF40001,0xF40001,0xF40001,0xF40001,0xF40001,0xF40001,0x16C0000,0x16C0000,0x16C0000,0x16C0000,0x16C0000, -0x16C0000,0x3BFC0000,0x3BFC0000,0x3BFC0000,0x7A000000,0x16C0000,0x16C0000,0x16C0000,0x16C0000,0x16C0000,0x16C0000,0x3BFC0000,0x3BFC0000,0x3BFC0000,0x7A000000,0x3BFC0000,0x3BFC0000,0x3BFC0000,0x7A000000,0x7A000000,0xB040000,0xF40001,0xF40001,0x51C0000,0x1340000,0x34C0000,0x34C0000,0x19C0000,0x51C0000,0x1340000,0x7FC0000,0x3BFC0000, -0x7FC0000,0x1780001,0x1780001,0x1780001,0x1780001,0x37FC0000,0x37FC0000,0x37FC0000,0x9DFC0000,0x9DFC0000,0xBC000000,0x37FC0000,0x37FC0000,0x37FC0000,0x9DFC0000,0x9DFC0000,0xBC000000,0x9DFC0000,0x9DFC0000,0xBC000000,0xBC000000,0x37FC0000,0x37FC0000,0x37FC0000,0x9DFC0000,0x9DFC0000,0xBC000000,0x9DFC0000,0x9DFC0000,0xBC000000,0xBC000000,0x9DFC0000, -0x9DFC0000,0xBC000000,0xBC000000,0xBC000000,0x1B80000,0x1940000,0x1780001,0x9FC0000,0x5DFC0000,0x83FC0000,0x91FC0000,0xA5FC0000,0x3D80000,0x37FC0000,0x83FC0000,0xBC000000,0x83FC0000,0x1FC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000, -0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xF7FC0001,0xF7FC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFFF00000,0xFE000000, -0xFFFC0000,0x1345AA3,0xFF18414F,0xFEFC2CFE,0xFEF025C6,0xFEF43543,0xFED41B46,0xFEC41162,0xFEB81647,0xFAA80AB6,0xDCAC12ED,0xFEDC3B5B,0xFEAC1B25,0xFE980E98,0xFE88100A,0xFE680015,0xDE700938,0xFE64220B,0xEA4C0C2A,0xD24C0DC5,0xBC642208,0x1C85AA3,0xFE88351E,0xFE7025C5,0xFE3821ED,0xFE140B45,0xDC2812ED,0xFE082A18,0xEE000CC4,0xD4000C44,0xBA00228D,0x69FC5AA3, -0xD6003266,0xBE0027E1,0xAC00360C,0x9A005AA5,0xFF0C469D,0xFF2C536D,0xFF2C555E,0xFEEC313E,0xFEBC1BA5,0xFE9008D1,0xFE7C0184,0xF85C0071,0xFEF84551,0xFED02DDA,0xFE50093C,0xD4000C44,0x41FC5AA3,0x178220B,0xFF5C166E,0xFF400C63,0xFF380882,0xFF441505,0xFF20071A,0xFF0C015A,0xFEFC092D,0xF4EC0141,0xDCF40885,0x37FC2208,0xFEFC1086,0xFED80882,0xFEB80D86,0xFE740001, -0xDE940884,0x9DFC2208,0xF2000974,0xD6000A9D,0xBC002208,0x37FC2208,0xFEFC1086,0xFED80882,0xFEB80D86,0xFE740001,0xDE940884,0x9DFC2208,0xF2000974,0xD6000A9D,0xBC002208,0x9DFC2208,0xF2000974,0xD6000A9D,0xBC002208,0xBC002208,0xFF581C81,0xFF6C1FAD,0xFF6C1FDA,0xFF401614,0xFEFC0E52,0xFEC00532,0xFEA00022,0xFC40001E,0xFD581C9A,0xFF24153E,0xFE58092B,0xD6000A9D, -0x83FC2208,0xF025C6,0xF025C6,0xF025C6,0xF025C6,0xFEC41162,0xFEC41162,0xFEC41162,0xEEAC0A69,0xEEAC0A69,0xBCAC0A69,0xFE980E98,0xFE980E98,0xFE980E98,0xFE680015,0xFE680015,0xC27C01D5,0xCE640884,0xCE640884,0xB25C0104,0x9A640884,0x16825C5,0x16825C5,0x16825C5,0xFE140B45,0xFE140B45,0xBC480A69,0xE2000AD4,0xE2000AD4,0xBA000086,0x9A000885,0x39F825C5, -0x39F825C5,0x9C001115,0x8A0011FD,0x780025C5,0xFED81B58,0xFEEC212D,0xF025C6,0xFEBC1244,0xFE9C0952,0xFE7C0334,0xFE7C0184,0xEC60000C,0xFEBC1A8C,0xFEA41121,0xFE500893,0xBA000086,0x3FC25C5,0x1380882,0x1380882,0x1380882,0x1380882,0xFF0C015A,0xFF0C015A,0xFF0C015A,0xDCF40001,0xDCF40001,0xBCF40001,0x1D00882,0x1D00882,0x1D00882,0xF87C0001,0xF87C0001, -0xBCB40001,0x6DF80882,0x6DF80882,0xBA00000D,0x9A000884,0x1D00882,0x1D00882,0x1D00882,0xF87C0001,0xF87C0001,0xBCB40001,0x6DF80882,0x6DF80882,0xBA00000D,0x9A000884,0x6DF80882,0x6DF80882,0xBA00000D,0x9A000884,0x9A000884,0xFF200659,0xFF2C06D9,0x1380882,0xFD0404E4,0xFED4028D,0xFEB000E1,0xFEA00022,0xF0540001,0xFD100692,0xFEE80492,0x45FC0882,0xBA00000D, -0x45FC0882,0x1BC0882,0xFFA4053D,0xFF88019A,0xFF780001,0x9BFC0882,0xFF640335,0xFF380001,0xCFF80882,0xFE6C0000,0xDC000884,0x9BFC0882,0xFF640335,0xFF380001,0xCFF80882,0xFE6C0000,0xDC000884,0xCFF80882,0xFE6C0000,0xDC000884,0xDC000884,0x9BFC0882,0xFF640335,0xFF380001,0xCFF80882,0xFE6C0000,0xDC000884,0xCFF80882,0xFE6C0000,0xDC000884,0xDC000884,0xCFF80882, -0xFE6C0000,0xDC000884,0xDC000884,0xDC000884,0xFDB007C1,0x5D80882,0xF5B80802,0xFF94069A,0xFF68053D,0xFF1802A1,0xFEB80000,0xFE0C0000,0xFDA807C1,0xFF880665,0xFEF00049,0xDC000884,0xC1FC0882,0xAC0A69,0xAC0A69,0xAC0A69,0xAC0A69,0xAC0A69,0xAC0A69,0xAC0A69,0xAC0A69,0xAC0A69,0xAC0A69,0xFE680014,0xFE680014,0xFE680014,0xFE680014,0xFE680014, -0xFE680014,0x9E640000,0x9E640000,0x9E640000,0x7A640000,0x1000A69,0x1000A69,0x1000A69,0x1000A69,0x1000A69,0x1000A69,0xAE00004A,0xAE00004A,0xAE00004A,0x7A1C0000,0x5F80A69,0x5F80A69,0x5F80A69,0x6C0002D5,0x56000A69,0xF8A00784,0xAC0A69,0xAC0A69,0xFE900455,0xFE800254,0xFE7800DD,0xFE7800DD,0xE4640000,0xFA880692,0xFE7803F5,0xC4500000,0xAE00004A, -0x16C0A69,}; -static const uint32_t g_etc1_to_bc7_m6_table212[] = { -0x740001,0x740001,0x740001,0x740001,0x740001,0x740001,0x740001,0x740001,0x740001,0x740001,0x740001,0x740001,0x740001,0x740001,0x740001,0x740001,0x740001,0x740001,0x740001,0x740001,0xB00000,0xB00000,0xB00000,0xB00000,0xB00000,0xB00000,0xB00000,0xB00000,0xB00000,0xB00000,0x1640000, -0x1640000,0x1640000,0x1640000,0x3A000000,0x740001,0x740001,0x740001,0x740001,0x740001,0x740001,0x740001,0x740001,0x67C0000,0x67C0000,0x67C0000,0xB00000,0xF80000,0x1080000,0x1080000,0x1080000,0x1080000,0x1080000,0x1080000,0x1080000,0x1080000,0x1080000,0x1080000,0x1880000,0x1880000,0x1880000,0x1880000,0x1880000, -0x1880000,0x49F80000,0x49F80000,0x49F80000,0x82000001,0x1880000,0x1880000,0x1880000,0x1880000,0x1880000,0x1880000,0x49F80000,0x49F80000,0x49F80000,0x82000001,0x49F80000,0x49F80000,0x49F80000,0x82000001,0x82000001,0x5180000,0x1080000,0x1080000,0x1340000,0x14C0000,0x1680000,0x1680000,0x1BC0000,0x1340000,0x14C0000,0x19FC0000,0x49F80000, -0x19FC0000,0x18C0000,0x18C0000,0x18C0000,0x18C0000,0x53FC0000,0x53FC0000,0x53FC0000,0xABF80000,0xABF80000,0xC4000001,0x53FC0000,0x53FC0000,0x53FC0000,0xABF80000,0xABF80000,0xC4000001,0xABF80000,0xABF80000,0xC4000001,0xC4000001,0x53FC0000,0x53FC0000,0x53FC0000,0xABF80000,0xABF80000,0xC4000001,0xABF80000,0xABF80000,0xC4000001,0xC4000001,0xABF80000, -0xABF80000,0xC4000001,0xC4000001,0xC4000001,0x1CC0000,0xBA40000,0x18C0000,0x2BFC0000,0x73FC0000,0x95FC0000,0x9FFC0000,0xB3F40000,0x1F00000,0x53FC0000,0x95FC0000,0xC4000001,0x95FC0000,0x1FC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000, -0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xF7FC0001,0xF7FC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFFF00000,0xFE000000, -0xFFFC0000,0x14053CE,0xFF243DB6,0xFF082C15,0xFF0425C5,0xFF0C31DE,0xFEE41AFD,0xFEDC124D,0xFECC14B2,0xFCC00A76,0xE2C010C2,0xFEF436F6,0xFEC01AAD,0xFEB00F93,0xFE940E7F,0xFE800056,0xE488072F,0xFE7C1DBE,0xEC680AE9,0xD8640AE2,0xC2741D9B,0x3DC53CA,0xFEA03317,0xFE8825C6,0xFE641FF2,0xFE2C0BDE,0xE23C10C2,0xFE14260B,0xF4000A9F,0xDA000853,0xC2001DB3,0x73FC53CA, -0xDC002E39,0xCA0021E2,0xB2002F23,0xA00053CA,0xFF204186,0xFF2C4DB2,0xF9404F7E,0xFF002E66,0xFED01ABC,0xFEA4092A,0xFE900243,0xFA700023,0xFF10407E,0xFEDC2BAA,0xFE700975,0xDA000853,0x4FFC53CA,0x1841D9D,0xFF681408,0xFF580BBD,0xFF480884,0xFF501235,0xFF2C068C,0xFF2401C4,0xFF140731,0xF90000AD,0xE3080659,0x49FC1D9A,0xFF140F18,0xFEF00884,0xFECC0B85,0xFE940005, -0xE2AC0659,0xA7F81D9A,0xF80008AE,0xDC000795,0xC2001D9A,0x49FC1D9A,0xFF140F18,0xFEF00884,0xFECC0B85,0xFE940005,0xE2AC0659,0xA7F81D9A,0xF80008AE,0xDC000795,0xC2001D9A,0xA7F81D9A,0xF80008AE,0xDC000795,0xC2001D9A,0xC2001D9A,0xFF7418F9,0xF9801BAD,0xFB841BC5,0xFF40137A,0xFF100CD4,0xFEDC04E3,0xFEBC0059,0xFE5C0002,0xFF5C18D2,0xFF401296,0xFE7C0912,0xDC000795, -0x8FFC1D9A,0x10425C5,0x10425C5,0x10425C5,0x10425C5,0xFEDC124D,0xFEDC124D,0xFEDC124D,0xF6C00A6A,0xF6C00A6A,0xC4C00A6A,0xFEB00F93,0xFEB00F93,0xFEB00F93,0xFE800056,0xFE800056,0xCA8C01D6,0xD8740883,0xD8740883,0xBC700103,0xA4740883,0x38025C5,0x38025C5,0x38025C5,0xFE2C0BDE,0xFE2C0BDE,0xC45C0A6A,0xEE000A0B,0xEE000A0B,0xC2000023,0xA40C0883,0x45FC25C5, -0x45FC25C5,0xAC001022,0x960010EE,0x800025C6,0xFEE81BE6,0xF6FC21AD,0x10425C5,0xFECC134A,0xFEB00A91,0xFE98043A,0xFE900243,0xF674000B,0xFED01B16,0xFEB01226,0xFE6808D8,0xC2000023,0x15FC25C5,0x1480884,0x1480884,0x1480884,0x1480884,0xFF2401C4,0xFF2401C4,0xFF2401C4,0xE5080001,0xE5080001,0xC5080001,0x3E80882,0x3E80882,0x3E80882,0xFE940005,0xFE940005, -0xC4C80001,0x79FC0882,0x79FC0882,0xC4000001,0xA4000882,0x3E80882,0x3E80882,0x3E80882,0xFE940005,0xFE940005,0xC4C80001,0x79FC0882,0x79FC0882,0xC4000001,0xA4000882,0x79FC0882,0x79FC0882,0xC4000001,0xA4000882,0xA4000882,0xFB340694,0xFB440708,0x1480884,0xFF180519,0xFEF002F2,0xFEC80151,0xFEBC0059,0xFA640000,0xF92806CD,0xFF0404EA,0x57FC0882,0xC4000001, -0x57FC0882,0x1C40659,0xFFB003E8,0xFF940131,0xFF8C0000,0xA9FC0659,0xFF700262,0xFF540000,0xD5F80659,0xFEA00000,0xE2000659,0xA9FC0659,0xFF700262,0xFF540000,0xD5F80659,0xFEA00000,0xE2000659,0xD5F80659,0xFEA00000,0xE2000659,0xE2000659,0xA9FC0659,0xFF700262,0xFF540000,0xD5F80659,0xFEA00000,0xE2000659,0xD5F80659,0xFEA00000,0xE2000659,0xE2000659,0xD5F80659, -0xFEA00000,0xE2000659,0xE2000659,0xE2000659,0xFFB405BA,0x1E40659,0xFBC405E9,0xFFA004F4,0xFF7C03E8,0xFF2C01F9,0xFEE40000,0xFE500000,0xFFAC05C4,0xFF9404C9,0xFF100032,0xE2000659,0xC9FC0659,0xC00A69,0xC00A69,0xC00A69,0xC00A69,0xC00A69,0xC00A69,0xC00A69,0xC00A69,0xC00A69,0xC00A69,0xFE800032,0xFE800032,0xFE800032,0xFE800032,0xFE800032, -0xFE800032,0xA6780001,0xA6780001,0xA6780001,0x82740002,0x11C0A69,0x11C0A69,0x11C0A69,0x11C0A69,0x11C0A69,0x11C0A69,0xC0000014,0xC0000014,0xC0000014,0x82300001,0x11FC0A69,0x11FC0A69,0x11FC0A69,0x7800025D,0x5E000A69,0xFEAC07A2,0xC00A69,0xC00A69,0xFEA00492,0xFE94029A,0xFE880115,0xFE880115,0xEC780001,0xFE9006C4,0xFC900451,0xCC640001,0xC0000014, -0x1940A69,}; -static const uint32_t g_etc1_to_bc7_m6_table213[] = { -0x840001,0x840001,0x840001,0x840001,0x840001,0x840001,0x840001,0x840001,0x840001,0x840001,0x840001,0x840001,0x840001,0x840001,0x840001,0x840001,0x840001,0x840001,0x840001,0x840001,0x2C40000,0x2C40000,0x2C40000,0x2C40000,0x2C40000,0x2C40000,0x2C40000,0x2C40000,0x2C40000,0x2C40000,0x1940000, -0x1940000,0x1940000,0x1940000,0x42000000,0x840001,0x840001,0x840001,0x840001,0x840001,0x840001,0x840001,0x840001,0xE8C0000,0xE8C0000,0xE8C0000,0x2C40000,0x11C0000,0x1180000,0x1180000,0x1180000,0x1180000,0x1180000,0x1180000,0x1180000,0x1180000,0x1180000,0x1180000,0x1A00000,0x1A00000,0x1A00000,0x1A00000,0x1A00000, -0x1A00000,0x55F80000,0x55F80000,0x55F80000,0x8A000001,0x1A00000,0x1A00000,0x1A00000,0x1A00000,0x1A00000,0x1A00000,0x55F80000,0x55F80000,0x55F80000,0x8A000001,0x55F80000,0x55F80000,0x55F80000,0x8A000001,0x8A000001,0xD280000,0x1180000,0x1180000,0x3440000,0x1600000,0x17C0000,0x17C0000,0x3D40000,0x3440000,0x1600000,0x27FC0000,0x55F80000, -0x27FC0000,0x19C0000,0x19C0000,0x19C0000,0x19C0000,0x6BFC0000,0x6BFC0000,0x6BFC0000,0xB7F80000,0xB7F80000,0xCC000001,0x6BFC0000,0x6BFC0000,0x6BFC0000,0xB7F80000,0xB7F80000,0xCC000001,0xB7F80000,0xB7F80000,0xCC000001,0xCC000001,0x6BFC0000,0x6BFC0000,0x6BFC0000,0xB7F80000,0xB7F80000,0xCC000001,0xB7F80000,0xB7F80000,0xCC000001,0xCC000001,0xB7F80000, -0xB7F80000,0xCC000001,0xCC000001,0xCC000001,0x1E00000,0x1B80000,0x19C0000,0x49FC0000,0x87FC0000,0xA3FC0000,0xADFC0000,0xBDF80000,0x11FC0000,0x6BFC0000,0xA3FC0000,0xCC000001,0xA3FC0000,0x1FC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000, -0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xF7FC0001,0xF7FC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFFF00000,0xFE000000, -0xFFFC0000,0x14C4E1E,0xFF303AC6,0xFF202B4D,0xFF1425C5,0xFF182F0A,0xFEF81ADB,0xFEE81331,0xFED81392,0xFED00A6A,0xE6D00F1A,0xFF003356,0xFED81A55,0xFEC41065,0xFEAC0D5F,0xFE9400C6,0xE898059E,0xFE941A6E,0xF07C0A01,0xDC7808A6,0xC8841A07,0x1F04E1A,0xFEB8315F,0xFEA025C6,0xFE7C1E4A,0xFE4C0C89,0xE6500F1A,0xFE2C231B,0xFA000993,0xE0000597,0xC8041A06,0x7DF84E1A, -0xE0002B5E,0xD0001D1E,0xB8002977,0xA6004E1A,0xFF343DC5,0xFD48484A,0xFF4C4A16,0xFF082C34,0xFEE01A1E,0xFEB809A4,0xFEA4032A,0xFE84000B,0xFF183CC9,0xFEF429C3,0xFE7C09C3,0xE0000597,0x5BFC4E1A,0x1901A05,0xFF741218,0xFF640B25,0xFF580884,0xFF5C1001,0xFF400632,0xFF300220,0xFF2005C9,0xFB100051,0xE71804B1,0x59FC1A05,0xFF200DF4,0xFF080884,0xFEE409DD,0xFEAC0025, -0xE6C004B1,0xADFC1A05,0xFE080882,0xE0000566,0xC8001A06,0x59FC1A05,0xFF200DF4,0xFF080884,0xFEE409DD,0xFEAC0025,0xE6C004B1,0xADFC1A05,0xFE080882,0xE0000566,0xC8001A06,0xADFC1A05,0xFE080882,0xE0000566,0xC8001A06,0xC8001A06,0xFF7815DA,0xFF8C182D,0xFF8C185D,0xFF5C114D,0xFF280B9E,0xFEF0049D,0xFED000A0,0xFE7C0004,0xFD74161E,0xFF481074,0xFEA008FB,0xE0000566, -0x99FC1A05,0x11425C5,0x11425C5,0x11425C5,0x11425C5,0xFEE81331,0xFEE81331,0xFEE81331,0xFED00A6A,0xFED00A6A,0xCCD00A6A,0xFEC41065,0xFEC41065,0xFEC41065,0xFE9400C6,0xFE9400C6,0xD29C01D6,0xE0840883,0xE0840883,0xC4800103,0xAC840883,0x39825C5,0x39825C5,0x39825C5,0xFE4C0C89,0xFE4C0C89,0xCC6C0A6A,0xFA000983,0xFA000983,0xCE000003,0xAC1C0883,0x51FC25C5, -0x51FC25C5,0xB2000F62,0x9C001026,0x880025C6,0xFD001CA9,0xFF0C21AD,0x11425C5,0xFEDC144E,0xFEC40BB5,0xFEAC053E,0xFEA4032A,0xFE84000B,0xFEE41BE5,0xFED012ED,0xFE7C0933,0xCE000003,0x23FC25C5,0x1580884,0x1580884,0x1580884,0x1580884,0xFF300220,0xFF300220,0xFF300220,0xED180001,0xED180001,0xCD180001,0x7FC0882,0x7FC0882,0x7FC0882,0xFEAC0025,0xFEAC0025, -0xCCD80001,0x85FC0882,0x85FC0882,0xCC0C0001,0xAC000882,0x7FC0882,0x7FC0882,0x7FC0882,0xFEAC0025,0xFEAC0025,0xCCD80001,0x85FC0882,0x85FC0882,0xCC0C0001,0xAC000882,0x85FC0882,0x85FC0882,0xCC0C0001,0xAC000882,0xAC000882,0xFF3C06C4,0xFF4C0728,0x1580884,0xFF24057A,0xFF040352,0xFEE4019A,0xFED000A0,0xFE7C0004,0xFF3406D1,0xFF180521,0x65FC0882,0xCC0C0001, -0x65FC0882,0x1CC04B1,0xFFBC02E4,0xFFA000E5,0xFF9C0000,0xB5FC04B1,0xFF8801BA,0xFF6C0000,0xDBF804B1,0xFED40000,0xE60004B1,0xB5FC04B1,0xFF8801BA,0xFF6C0000,0xDBF804B1,0xFED40000,0xE60004B1,0xDBF804B1,0xFED40000,0xE60004B1,0xE60004B1,0xB5FC04B1,0xFF8801BA,0xFF6C0000,0xDBF804B1,0xFED40000,0xE60004B1,0xDBF804B1,0xFED40000,0xE60004B1,0xE60004B1,0xDBF804B1, -0xFED40000,0xE60004B1,0xE60004B1,0xE60004B1,0xF9C40451,0x1EC04B1,0xFFCC0451,0xFFB003A1,0xFF9002E4,0xFF480168,0xFF0C0000,0xFE8C0000,0xF3C40451,0xFFA00392,0xFF300025,0xE60004B1,0xD1FC04B1,0xD00A69,0xD00A69,0xD00A69,0xD00A69,0xD00A69,0xD00A69,0xD00A69,0xD00A69,0xD00A69,0xD00A69,0xFE900059,0xFE900059,0xFE900059,0xFE900059,0xFE900059, -0xFE900059,0xAE880001,0xAE880001,0xAE880001,0x8A840002,0x1340A69,0x1340A69,0x1340A69,0x1340A69,0x1340A69,0x1340A69,0xCE000002,0xCE000002,0xCE000002,0x8A400001,0x1DFC0A69,0x1DFC0A69,0x1DFC0A69,0x7E0001ED,0x66000A69,0xFAC407C1,0xD00A69,0xD00A69,0xFCB804E2,0xFEA802DA,0xFE980151,0xFE980151,0xF4880001,0xFEAC0708,0xFEA00480,0xD4740001,0xCE000002, -0x1B40A69,}; -static const uint32_t g_etc1_to_bc7_m6_table214[] = { -0x940001,0x940001,0x940001,0x940001,0x940001,0x940001,0x940001,0x940001,0x940001,0x940001,0x940001,0x940001,0x940001,0x940001,0x940001,0x940001,0x940001,0x940001,0x940001,0x940001,0x2DC0000,0x2DC0000,0x2DC0000,0x2DC0000,0x2DC0000,0x2DC0000,0x2DC0000,0x2DC0000,0x2DC0000,0x2DC0000,0x1C40000, -0x1C40000,0x1C40000,0x1C40000,0x4A000000,0x940001,0x940001,0x940001,0x940001,0x940001,0x940001,0x940001,0x940001,0xA00000,0xA00000,0xA00000,0x2DC0000,0x13C0000,0x1280000,0x1280000,0x1280000,0x1280000,0x1280000,0x1280000,0x1280000,0x1280000,0x1280000,0x1280000,0x1B80000,0x1B80000,0x1B80000,0x1B80000,0x1B80000, -0x1B80000,0x61F80000,0x61F80000,0x61F80000,0x92000001,0x1B80000,0x1B80000,0x1B80000,0x1B80000,0x1B80000,0x1B80000,0x61F80000,0x61F80000,0x61F80000,0x92000001,0x61F80000,0x61F80000,0x61F80000,0x92000001,0x92000001,0x13C0000,0x1280000,0x1280000,0x1580000,0x1740000,0x3900000,0x3900000,0x1F00000,0x1580000,0x1740000,0x37FC0000,0x61F80000, -0x37FC0000,0x1AC0000,0x1AC0000,0x1AC0000,0x1AC0000,0x83FC0000,0x83FC0000,0x83FC0000,0xC3F80000,0xC3F80000,0xD4000001,0x83FC0000,0x83FC0000,0x83FC0000,0xC3F80000,0xC3F80000,0xD4000001,0xC3F80000,0xC3F80000,0xD4000001,0xD4000001,0x83FC0000,0x83FC0000,0x83FC0000,0xC3F80000,0xC3F80000,0xD4000001,0xC3F80000,0xC3F80000,0xD4000001,0xD4000001,0xC3F80000, -0xC3F80000,0xD4000001,0xD4000001,0xD4000001,0x3F00000,0x1C80000,0x1AC0000,0x67FC0000,0x9BFC0000,0xB3FC0000,0xBBFC0000,0xC7FC0000,0x37FC0000,0x83FC0000,0xB3FC0000,0xD4000001,0xB3FC0000,0x1FC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000, -0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xF7FC0001,0xF7FC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFFF00000,0xFE000000, -0xFFFC0000,0x15848CE,0xFF4437E9,0xFF2C2A81,0xFF2425C5,0xFF242C86,0xFF081AD5,0xFF001419,0xFEF01292,0xFEE00A8D,0xEAE00DB2,0xFF0C301E,0xFEE41A29,0xFEDC116D,0xFEB80CB3,0xFEAC016E,0xEAA8045E,0xFEA0178E,0xF4900951,0xE088069F,0xCC9416C7,0x7FC48CA,0xFECC3001,0xFEB825C6,0xFE941CE2,0xFE640D49,0xEA640DB2,0xFE3820BF,0xFE08097B,0xE6000393,0xCC1816C6,0x85FC48CA, -0xE600290A,0xD60018EA,0xBE002443,0xAC0048CA,0xFF3C39F6,0xFF4C436A,0xFF4C4586,0xFF182A0A,0xFEF419AA,0xFEC80A63,0xFEBC0422,0xFE9C0031,0xFF34391E,0xFF0027C6,0xFE940A51,0xE6000393,0x65FC48CA,0x19C16C5,0xFF801058,0xFF700AA5,0xFF680884,0xFF740E01,0xFF5405F4,0xFF44027D,0xFF380491,0xFD240018,0xEB280349,0x6BFC16C5,0xFF380CE4,0xFF200884,0xFEFC0875,0xFECC0061, -0xEAD40349,0xB7F816C5,0xFE380882,0xE6000392,0xCC0016C6,0x6BFC16C5,0xFF380CE4,0xFF200884,0xFEFC0875,0xFECC0061,0xEAD40349,0xB7F816C5,0xFE380882,0xE6000392,0xCC0016C6,0xB7F816C5,0xFE380882,0xE6000392,0xCC0016C6,0xCC0016C6,0xFF80136D,0xFF8C154D,0xF59815A4,0xFF6C0F72,0xFF480A86,0xFF040496,0xFEE800FA,0xFEA00022,0xFF781352,0xFF5C0EC6,0xFED008E5,0xE6000392, -0xA3FC16C5,0x12425C5,0x12425C5,0x12425C5,0x12425C5,0xFF001419,0xFF001419,0xFF001419,0xFEE00A8D,0xFEE00A8D,0xD4E00A6A,0xFEDC116D,0xFEDC116D,0xFEDC116D,0xFEAC016E,0xFEAC016E,0xDAAC01D6,0xE8940883,0xE8940883,0xCC900103,0xB4940883,0x3B025C5,0x3B025C5,0x3B025C5,0xFE640D49,0xFE640D49,0xD47C0A6A,0xFE08097B,0xFE08097B,0xD6100003,0xB42C0883,0x5DFC25C5, -0x5DFC25C5,0xBE000E9A,0xA6000F63,0x900025C6,0xFF101D2B,0xF920222A,0x12425C5,0xFEF81556,0xFED80CE9,0xFEBC0666,0xFEBC0422,0xFE9C0031,0xFEF81C56,0xFEDC1421,0xFE9409D8,0xD6100003,0x33FC25C5,0x1680884,0x1680884,0x1680884,0x1680884,0xFF44027D,0xFF44027D,0xFF44027D,0xF5280001,0xF5280001,0xD5280001,0x1FFC0882,0x1FFC0882,0x1FFC0882,0xFECC0061,0xFECC0061, -0xD4E80001,0x91FC0882,0x91FC0882,0xD41C0001,0xB4000882,0x1FFC0882,0x1FFC0882,0x1FFC0882,0xFECC0061,0xFECC0061,0xD4E80001,0x91FC0882,0x91FC0882,0xD41C0001,0xB4000882,0x91FC0882,0x91FC0882,0xD41C0001,0xB4000882,0xB4000882,0xFF5806CD,0xFB640745,0x1680884,0xFF4405B2,0xFF1803BA,0xFEFC01F9,0xFEE800FA,0xFEA00022,0xFD4C0708,0xFF300581,0x75FC0882,0xD41C0001, -0x75FC0882,0x1D40349,0xFFC401F9,0xFFB8009D,0xFFAC0000,0xC1FC0349,0xFFA00132,0xFF840000,0xE1F80349,0xFF040000,0xEA000349,0xC1FC0349,0xFFA00132,0xFF840000,0xE1F80349,0xFF040000,0xEA000349,0xE1F80349,0xFF040000,0xEA000349,0xEA000349,0xC1FC0349,0xFFA00132,0xFF840000,0xE1F80349,0xFF040000,0xEA000349,0xE1F80349,0xFF040000,0xEA000349,0xEA000349,0xE1F80349, -0xFF040000,0xEA000349,0xEA000349,0xEA000349,0xFDCC02F9,0x1F40349,0xFFCC0311,0xFFC00288,0xFFA80202,0xFF700104,0xFF340000,0xFEC80000,0xF7CC02F9,0xFDBC0288,0xFF500019,0xEA000349,0xD9FC0349,0xE00A69,0xE00A69,0xE00A69,0xE00A69,0xE00A69,0xE00A69,0xE00A69,0xE00A69,0xE00A69,0xE00A69,0xFEA40082,0xFEA40082,0xFEA40082,0xFEA40082,0xFEA40082, -0xFEA40082,0xB6980001,0xB6980001,0xB6980001,0x92940002,0x1480A69,0x1480A69,0x1480A69,0x1480A69,0x1480A69,0x1480A69,0xD80C0000,0xD80C0000,0xD80C0000,0x92500001,0x29FC0A69,0x29FC0A69,0x29FC0A69,0x8A000195,0x6E000A69,0xFECC07E9,0xE00A69,0xE00A69,0xFCC80515,0xFEB40321,0xFEAC019A,0xFEAC019A,0xFC980001,0xFEBC070A,0xFEB404B1,0xDC840001,0xD80C0000, -0x1D80A69,}; -static const uint32_t g_etc1_to_bc7_m6_table215[] = { -0xA40001,0xA40001,0xA40001,0xA40001,0xA40001,0xA40001,0xA40001,0xA40001,0xA40001,0xA40001,0xA40001,0xA40001,0xA40001,0xA40001,0xA40001,0xA40001,0xA40001,0xA40001,0xA40001,0xA40001,0x2F40000,0x2F40000,0x2F40000,0x2F40000,0x2F40000,0x2F40000,0x2F40000,0x2F40000,0x2F40000,0x2F40000,0x1F40000, -0x1F40000,0x1F40000,0x1F40000,0x52000000,0xA40001,0xA40001,0xA40001,0xA40001,0xA40001,0xA40001,0xA40001,0xA40001,0xB00000,0xB00000,0xB00000,0x2F40000,0x1600000,0x1380000,0x1380000,0x1380000,0x1380000,0x1380000,0x1380000,0x1380000,0x1380000,0x1380000,0x1380000,0x1D00000,0x1D00000,0x1D00000,0x1D00000,0x1D00000, -0x1D00000,0x6DF80000,0x6DF80000,0x6DF80000,0x9A000001,0x1D00000,0x1D00000,0x1D00000,0x1D00000,0x1D00000,0x1D00000,0x6DF80000,0x6DF80000,0x6DF80000,0x9A000001,0x6DF80000,0x6DF80000,0x6DF80000,0x9A000001,0x9A000001,0x14C0000,0x1380000,0x1380000,0x7680000,0x1880000,0x1A80000,0x1A80000,0xDFC0000,0x7680000,0x1880000,0x45FC0000,0x6DF80000, -0x45FC0000,0x1BC0000,0x1BC0000,0x1BC0000,0x1BC0000,0x9BFC0000,0x9BFC0000,0x9BFC0000,0xCFF80000,0xCFF80000,0xDC000001,0x9BFC0000,0x9BFC0000,0x9BFC0000,0xCFF80000,0xCFF80000,0xDC000001,0xCFF80000,0xCFF80000,0xDC000001,0xDC000001,0x9BFC0000,0x9BFC0000,0x9BFC0000,0xCFF80000,0xCFF80000,0xDC000001,0xCFF80000,0xCFF80000,0xDC000001,0xDC000001,0xCFF80000, -0xCFF80000,0xDC000001,0xDC000001,0xDC000001,0x17FC0000,0x5D80000,0x1BC0000,0x85FC0000,0xAFFC0000,0xC1FC0000,0xC9F80000,0xD3F80000,0x5FFC0000,0x9BFC0000,0xC1FC0000,0xDC000001,0xC1FC0000,0x1FC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000, -0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xF7FC0001,0xF7FC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFFF00000,0xFE000000, -0xFFFC0000,0x16443DE,0xFF503551,0xFF3829D5,0xFF3425C5,0xFF302A52,0xFF181AE5,0xFF0C150D,0xFEFC11F2,0xFEF00AE2,0xEEF00C8A,0xFF242D36,0xFEFC1A11,0xFEE81275,0xFED80C52,0xFEC00252,0xEEBC035E,0xFEB8151E,0xF8A408D9,0xE69404F3,0xD2A413DB,0x19FC43DA,0xFEE42E81,0xFED025C5,0xFEAC1BBA,0xFE7C0E29,0xEE780C8A,0xFE641E91,0xFE200A1B,0xEC0C023F,0xD22813DA,0x8FF843DA, -0xF0002759,0xDC001546,0xC4001F87,0xB20043DA,0xFF4C36D3,0xF9603F4E,0xFB6440F5,0xFF2C286E,0xFF04195C,0xFEDC0B1C,0xFED00559,0xFEB00092,0xFF3435BE,0xFF102642,0xFEB00AE7,0xEC0C023F,0x71FC43DA,0x1A413DD,0xFF8C0EC8,0xFF7C0A3D,0xFF780884,0xFF800C45,0xFF6405BE,0xFF5C02FD,0xFF4C03BD,0xFF380001,0xEF380221,0x7BFC13DA,0xFF4C0C13,0xFF380884,0xFF14074D,0xFEE400B9, -0xEEE80221,0xBFF813DA,0xFE6C0882,0xEC00022E,0xD20013DA,0x7BFC13DA,0xFF4C0C13,0xFF380884,0xFF14074D,0xFEE400B9,0xEEE80221,0xBFF813DA,0xFE6C0882,0xEC00022E,0xD20013DA,0xBFF813DA,0xFE6C0882,0xEC00022E,0xD20013DA,0xD20013DA,0xFF9410EE,0xF9A01299,0xFBA412D8,0xFF780DD1,0xFF5C09A6,0xFF240491,0xFF0C0164,0xFEB80068,0xFF8810FD,0xFF680D52,0xFEE408D3,0xEC00022E, -0xADFC13DA,0x13425C5,0x13425C5,0x13425C5,0x13425C5,0xFF0C150D,0xFF0C150D,0xFF0C150D,0xFEF00AE2,0xFEF00AE2,0xDCF00A6A,0xFEE81275,0xFEE81275,0xFEE81275,0xFEC00252,0xFEC00252,0xE2BC01D6,0xF0A40883,0xF0A40883,0xD4A00103,0xBCA40883,0x1C825C5,0x1C825C5,0x1C825C5,0xFE7C0E29,0xFE7C0E29,0xDC8C0A6A,0xFE200A1B,0xFE200A1B,0xDE200003,0xBC3C0883,0x69FC25C5, -0x69FC25C5,0xCA000DF2,0xB2000EA3,0x980025C6,0xFF201DA6,0xFF2C222E,0x13425C5,0xFF081643,0xFEEC0E2D,0xFED407CE,0xFED00559,0xFEB00092,0xFF141D18,0xFEF41512,0xFEB00A83,0xDE200003,0x41FC25C5,0x1780884,0x1780884,0x1780884,0x1780884,0xFF5C02FD,0xFF5C02FD,0xFF5C02FD,0xFD380001,0xFD380001,0xDD380001,0x37FC0882,0x37FC0882,0x37FC0882,0xFEE400B9,0xFEE400B9, -0xDCF80001,0x9DFC0882,0x9DFC0882,0xDC2C0001,0xBC000882,0x37FC0882,0x37FC0882,0x37FC0882,0xFEE400B9,0xFEE400B9,0xDCF80001,0x9DFC0882,0x9DFC0882,0xDC2C0001,0xBC000882,0x9DFC0882,0x9DFC0882,0xDC2C0001,0xBC000882,0xBC000882,0xFB6C0708,0xFF6C076D,0x1780884,0xFD5805E9,0xFF400422,0xFF20028A,0xFF0C0164,0xFEB80068,0xF5640745,0xFF4805B4,0x83FC0882,0xDC2C0001, -0x83FC0882,0x1DC0221,0xFFD00145,0xFFC00068,0xFFBC0000,0xCDFC0221,0xFFAC00C2,0xFF9C0000,0xE7F80221,0xFF340000,0xEE000221,0xCDFC0221,0xFFAC00C2,0xFF9C0000,0xE7F80221,0xFF340000,0xEE000221,0xE7F80221,0xFF340000,0xEE000221,0xEE000221,0xCDFC0221,0xFFAC00C2,0xFF9C0000,0xE7F80221,0xFF340000,0xEE000221,0xE7F80221,0xFF340000,0xEE000221,0xEE000221,0xE7F80221, -0xFF340000,0xEE000221,0xEE000221,0xEE000221,0xFFD001ED,0x1FC0221,0xF7DC0200,0xFFC001A8,0xFFA80152,0xFF8400A0,0xFF5C0000,0xFF040000,0xFBD401E1,0xFFC00190,0xFF700010,0xEE000221,0xDFFC0221,0xF00A69,0xF00A69,0xF00A69,0xF00A69,0xF00A69,0xF00A69,0xF00A69,0xF00A69,0xF00A69,0xF00A69,0xFEB400C1,0xFEB400C1,0xFEB400C1,0xFEB400C1,0xFEB400C1, -0xFEB400C1,0xBEA80001,0xBEA80001,0xBEA80001,0x9AA40002,0x1600A69,0x1600A69,0x1600A69,0x1600A69,0x1600A69,0x1600A69,0xE01C0000,0xE01C0000,0xE01C0000,0x9A600001,0x35FC0A69,0x35FC0A69,0x35FC0A69,0x9000013D,0x76000A69,0xFAE40802,0xF00A69,0xF00A69,0xFED8054A,0xFED00372,0xFEC401E1,0xFEC401E1,0xFCA8000A,0xFAD00745,0xFEBC0502,0xE4940001,0xE01C0000, -0x1F80A69,}; -static const uint32_t g_etc1_to_bc7_m6_table216[] = { -0xB80000,0xB80000,0xB80000,0xB80000,0xB80000,0xB80000,0xB80000,0xB80000,0xB80000,0xB80000,0xB80000,0xB80000,0xB80000,0xB80000,0xB80000,0xB80000,0xB80000,0xB80000,0xB80000,0xB80000,0x1100000,0x1100000,0x1100000,0x1100000,0x1100000,0x1100000,0x1100000,0x1100000,0x1100000,0x1100000,0xDFC0000, -0xDFC0000,0xDFC0000,0xDFC0000,0x5A000001,0xB80000,0xB80000,0xB80000,0xB80000,0xB80000,0xB80000,0xB80000,0xB80000,0xC40000,0xC40000,0xC40000,0x1100000,0x1880000,0x1480001,0x1480001,0x1480001,0x1480001,0x1480001,0x1480001,0x1480001,0x1480001,0x1480001,0x1480001,0x3E80000,0x3E80000,0x3E80000,0x3E80000,0x3E80000, -0x3E80000,0x79FC0000,0x79FC0000,0x79FC0000,0xA4000000,0x3E80000,0x3E80000,0x3E80000,0x3E80000,0x3E80000,0x3E80000,0x79FC0000,0x79FC0000,0x79FC0000,0xA4000000,0x79FC0000,0x79FC0000,0x79FC0000,0xA4000000,0xA4000000,0x1600000,0x1480001,0x1480001,0x1800000,0x39C0000,0x1C00000,0x1C00000,0x23FC0000,0x1800000,0x39C0000,0x57FC0000,0x79FC0000, -0x57FC0000,0x1CC0001,0x1CC0001,0x1CC0001,0x1CC0001,0xB7FC0000,0xB7FC0000,0xB7FC0000,0xDDF40000,0xDDF40000,0xE6000000,0xB7FC0000,0xB7FC0000,0xB7FC0000,0xDDF40000,0xDDF40000,0xE6000000,0xDDF40000,0xDDF40000,0xE6000000,0xE6000000,0xB7FC0000,0xB7FC0000,0xB7FC0000,0xDDF40000,0xDDF40000,0xE6000000,0xDDF40000,0xDDF40000,0xE6000000,0xE6000000,0xDDF40000, -0xDDF40000,0xE6000000,0xE6000000,0xE6000000,0x57FC0000,0x1EC0000,0x1CC0001,0xA7FC0000,0xC5FC0000,0xD3FC0000,0xD7FC0000,0xDFF80000,0x8BFC0000,0xB7FC0000,0xD3FC0000,0xE6000000,0xD3FC0000,0x1FC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000, -0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xF7FC0001,0xF7FC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFFF00000,0xFE000000, -0xFFFC0000,0x1743EBF,0xFF5C32AA,0xFF4C292F,0xFF4425C6,0xFF4427D5,0xFF301B26,0xFF24162E,0xFF141185,0xFF080B81,0xF3000B89,0xFF302A4B,0xFF101A25,0xFF0013B2,0xFEE40C25,0xFED80391,0xF6CC0285,0xFECC130C,0xFCB8088E,0xEAA80370,0xD8B810F8,0x2FFC3EBF,0xFEFC2CFE,0xFEEC25C5,0xFEB81ACB,0xFEA00F3A,0xF2900B89,0xFE881C84,0xFE380B28,0xF0200130,0xD83C10F9,0x99FC3EBF, -0xF8002621,0xE0001205,0xD0001AB8,0xB8003EC1,0xFF583335,0xFF6C3A65,0xFF6C3C36,0xFF4026D4,0xFF181935,0xFEF00C2B,0xFEE806D0,0xFEC00164,0xFF50326B,0xFF3024FE,0xFEBC0BFE,0xF0200130,0x7FF83EBF,0x1B010FB,0xFFA40D26,0xFF9409C3,0xFF8C0882,0xFF8C0AA9,0xFF7405AE,0xFF680385,0xFF580313,0xFF4C001A,0xF3480121,0x8DFC10F8,0xFF640B25,0xFF540882,0xFF2C0651,0xFF080131, -0xF2FC0121,0xC7FC10F8,0xFEA00882,0xF2080120,0xD80010F8,0x8DFC10F8,0xFF640B25,0xFF540882,0xFF2C0651,0xFF080131,0xF2FC0121,0xC7FC10F8,0xFEA00882,0xF2080120,0xD80010F8,0xC7FC10F8,0xFEA00882,0xF2080120,0xD80010F8,0xD80010F8,0xFFA00E9D,0xFFAC0FC9,0xFFAC1026,0xFF880C23,0xFF6808C1,0xFF380495,0xFF2801E2,0xFEE400CD,0xFF980EBE,0xFF840BB2,0xFF1008B5,0xF2080120, -0xB9FC10F8,0x14425C6,0x14425C6,0x14425C6,0x14425C6,0xFF24162E,0xFF24162E,0xFF24162E,0xFF080B81,0xFF080B81,0xE7000A69,0xFF0013B2,0xFF0013B2,0xFF0013B2,0xFED80391,0xFED80391,0xECD001D5,0xF8B80884,0xF8B80884,0xDCB00104,0xC4B80884,0x1E425C5,0x1E425C5,0x1E425C5,0xFEA00F3A,0xFEA00F3A,0xE69C0A69,0xFE380B28,0xFE380B28,0xE6340002,0xC4500884,0x77F825C5, -0x77F825C5,0xD6000D49,0xB8000DD4,0xA20025C5,0xFF2C1E68,0xF94022AA,0x14425C6,0xFF181761,0xFF000FB2,0xFEF00952,0xFEE806D0,0xFEC00164,0xFF201DB2,0xFF101682,0xFEBC0B9A,0xE6340002,0x53FC25C5,0x18C0882,0x18C0882,0x18C0882,0x18C0882,0xFF680385,0xFF680385,0xFF680385,0xFF4C001A,0xFF4C001A,0xE7480001,0x53FC0882,0x53FC0882,0x53FC0882,0xFF080131,0xFF080131, -0xE7080001,0xABF80882,0xABF80882,0xE63C0000,0xC4000884,0x53FC0882,0x53FC0882,0x53FC0882,0xFF080131,0xFF080131,0xE7080001,0xABF80882,0xABF80882,0xE63C0000,0xC4000884,0xABF80882,0xABF80882,0xE63C0000,0xC4000884,0xC4000884,0xFF74073A,0xFD880782,0x18C0882,0xFB700659,0xFF540488,0xFF300304,0xFF2801E2,0xFEE400CD,0xFD740745,0xFF5C05F5,0x95FC0882,0xE63C0000, -0x95FC0882,0x1E40122,0xFFDC00AA,0xFFD4003A,0xFFCC0001,0xDBFC0120,0xFFC0006D,0xFFB80000,0xEDFC0120,0xFF6C0000,0xF2000120,0xDBFC0120,0xFFC0006D,0xFFB80000,0xEDFC0120,0xFF6C0000,0xF2000120,0xEDFC0120,0xFF6C0000,0xF2000120,0xF2000120,0xDBFC0120,0xFFC0006D,0xFFB80000,0xEDFC0120,0xFF6C0000,0xF2000120,0xEDFC0120,0xFF6C0000,0xF2000120,0xF2000120,0xEDFC0120, -0xFF6C0000,0xF2000120,0xF2000120,0xF2000120,0xF5E40109,0x47FC0120,0xFBE40109,0xFFD800DD,0xFFCC00B5,0xFFAC0059,0xFF880000,0xFF480000,0xFFDC00F4,0xFFCC00DA,0xFF980009,0xF2000120,0xE9FC0120,0x1000A69,0x1000A69,0x1000A69,0x1000A69,0x1000A69,0x1000A69,0x1000A69,0x1000A69,0x1000A69,0x1000A69,0xFEC80104,0xFEC80104,0xFEC80104,0xFEC80104,0xFEC80104, -0xFEC80104,0xC8B80000,0xC8B80000,0xC8B80000,0xA4B80000,0x17C0A69,0x17C0A69,0x17C0A69,0x17C0A69,0x17C0A69,0x17C0A69,0xEA2C0000,0xEA2C0000,0xEA2C0000,0xA4700000,0x43F80A69,0x43F80A69,0x43F80A69,0x9C0000E9,0x80000A69,0xF4F80841,0x1000A69,0x1000A69,0xFEE80589,0xFEE403C8,0xFED4022D,0xFED4022D,0xFEC00020,0xFED80781,0xFED0053D,0xEEA40000,0xEA2C0000, -0x11FC0A69,}; -static const uint32_t g_etc1_to_bc7_m6_table217[] = { -0xC80000,0xC80000,0xC80000,0xC80000,0xC80000,0xC80000,0xC80000,0xC80000,0xC80000,0xC80000,0xC80000,0xC80000,0xC80000,0xC80000,0xC80000,0xC80000,0xC80000,0xC80000,0xC80000,0xC80000,0x1280000,0x1280000,0x1280000,0x1280000,0x1280000,0x1280000,0x1280000,0x1280000,0x1280000,0x1280000,0x19FC0000, -0x19FC0000,0x19FC0000,0x19FC0000,0x62000001,0xC80000,0xC80000,0xC80000,0xC80000,0xC80000,0xC80000,0xC80000,0xC80000,0x2D40000,0x2D40000,0x2D40000,0x1280000,0x1A80000,0x1580001,0x1580001,0x1580001,0x1580001,0x1580001,0x1580001,0x1580001,0x1580001,0x1580001,0x1580001,0x7FC0000,0x7FC0000,0x7FC0000,0x7FC0000,0x7FC0000, -0x7FC0000,0x85FC0000,0x85FC0000,0x85FC0000,0xAC000000,0x7FC0000,0x7FC0000,0x7FC0000,0x7FC0000,0x7FC0000,0x7FC0000,0x85FC0000,0x85FC0000,0x85FC0000,0xAC000000,0x85FC0000,0x85FC0000,0x85FC0000,0xAC000000,0xAC000000,0x1700000,0x1580001,0x1580001,0x5900000,0x3B00000,0x3D40000,0x3D40000,0x37FC0000,0x5900000,0x3B00000,0x65FC0000,0x85FC0000, -0x65FC0000,0x1DC0001,0x1DC0001,0x1DC0001,0x1DC0001,0xCFFC0000,0xCFFC0000,0xCFFC0000,0xE7FC0000,0xE7FC0000,0xEE000000,0xCFFC0000,0xCFFC0000,0xCFFC0000,0xE7FC0000,0xE7FC0000,0xEE000000,0xE7FC0000,0xE7FC0000,0xEE000000,0xEE000000,0xCFFC0000,0xCFFC0000,0xCFFC0000,0xE7FC0000,0xE7FC0000,0xEE000000,0xE7FC0000,0xE7FC0000,0xEE000000,0xEE000000,0xE7FC0000, -0xE7FC0000,0xEE000000,0xEE000000,0xEE000000,0x91FC0000,0x7FC0000,0x1DC0001,0xC5FC0000,0xD9FC0000,0xE1FC0000,0xE5FC0000,0xE9FC0000,0xB3FC0000,0xCFFC0000,0xE1FC0000,0xEE000000,0xE1FC0000,0x1FC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000, -0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xF7FC0001,0xF7FC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFFF00000,0xFE000000, -0xFFFC0000,0x1803A9B,0xFF68308E,0xFF5828A3,0xFF5425C6,0xFF502631,0xFF3C1B66,0xFF301742,0xFF201179,0xFF140C51,0xF7100AE9,0xFF4427DC,0xFF241A56,0xFF1814E2,0xFEFC0C45,0xFEE404F1,0xF8DC020D,0xFEE4119C,0xFECC0888,0xEEBC0268,0xDEC80EC4,0x41FC3A9B,0xFF142BBE,0xFF0425C5,0xFED81A61,0xFEB81052,0xF6A40AE9,0xFEA01B0C,0xFE640C2B,0xF6340082,0xDE500EC4,0xA1FC3A9B, -0xFE0025C5,0xE6000F95,0xD60016F4,0xBE003A9D,0xFF643075,0xFF6C3735,0xF77C38AF,0xFF442569,0xFF281942,0xFEFC0D81,0xFEF8085D,0xFED8026A,0xFF542FDE,0xFF4023EC,0xFEDC0D0E,0xF6340082,0x89FC3A9B,0x1BC0EC3,0xFFB00BEE,0xFFA0096B,0xFF9C0882,0xFF980989,0xFF8405BA,0xFF80040D,0xFF7002BB,0xFF64006A,0xF7580081,0x9BFC0EC3,0xFF7C0A6D,0xFF6C0882,0xFF4C05D6,0xFF2C01BD, -0xF7100081,0xCFF80EC3,0xFED40882,0xF6280080,0xDE000EC4,0x9BFC0EC3,0xFF7C0A6D,0xFF6C0882,0xFF4C05D6,0xFF2C01BD,0xF7100081,0xCFF80EC3,0xFED40882,0xF6280080,0xDE000EC4,0xCFF80EC3,0xFED40882,0xF6280080,0xDE000EC4,0xDE000EC4,0xFFB40CEA,0xF5B80E03,0xF7BC0E43,0xFF980AE1,0xFF7C0839,0xFF5804EB,0xFF3C028A,0xFEFC015D,0xFFA40D0A,0xFF900AA6,0xFF3008A8,0xF6280080, -0xC1FC0EC3,0x15425C6,0x15425C6,0x15425C6,0x15425C6,0xFF301742,0xFF301742,0xFF301742,0xFF140C51,0xFF140C51,0xEF100A69,0xFF1814E2,0xFF1814E2,0xFF1814E2,0xFEE404F1,0xFEE404F1,0xF4E001D5,0xFECC0888,0xFECC0888,0xE4C00104,0xCCC80884,0x1FC25C5,0x1FC25C5,0x1FC25C5,0xFEB81052,0xFEB81052,0xEEAC0A69,0xFE640C2B,0xFE640C2B,0xEE440002,0xCC600884,0x83F825C5, -0x83F825C5,0xDC000CB5,0xC4000D24,0xAA0025C5,0xFF3C1EFE,0xFF4C22BE,0x15425C6,0xFF2C188D,0xFF141116,0xFEFC0ADD,0xFEF8085D,0xFED8026A,0xFF341E29,0xFF18178E,0xFEDC0CBD,0xEE440002,0x61FC25C5,0x19C0882,0x19C0882,0x19C0882,0x19C0882,0xFF80040D,0xFF80040D,0xFF80040D,0xFF64006A,0xFF64006A,0xEF580001,0x6BFC0882,0x6BFC0882,0x6BFC0882,0xFF2C01BD,0xFF2C01BD, -0xEF180001,0xB7F80882,0xB7F80882,0xEE4C0000,0xCC000884,0x6BFC0882,0x6BFC0882,0x6BFC0882,0xFF2C01BD,0xFF2C01BD,0xEF180001,0xB7F80882,0xB7F80882,0xEE4C0000,0xCC000884,0xB7F80882,0xB7F80882,0xEE4C0000,0xCC000884,0xCC000884,0xFF900745,0xF59807C1,0x19C0882,0xFF780681,0xFF700515,0xFF5003B5,0xFF3C028A,0xFEFC015D,0xFD880782,0xFF74065D,0xA3FC0882,0xEE4C0000, -0xA3FC0882,0x1EC0082,0xFFE8004A,0xFFE40019,0xFFDC0001,0xE9FC0080,0xFFD8002D,0xFFCC0001,0xF3FC0080,0xFF9C0000,0xF6000080,0xE9FC0080,0xFFD8002D,0xFFCC0001,0xF3FC0080,0xFF9C0000,0xF6000080,0xF3FC0080,0xFF9C0000,0xF6000080,0xF6000080,0xE9FC0080,0xFFD8002D,0xFFCC0001,0xF3FC0080,0xFF9C0000,0xF6000080,0xF3FC0080,0xFF9C0000,0xF6000080,0xF6000080,0xF3FC0080, -0xFF9C0000,0xF6000080,0xF6000080,0xF6000080,0xF9EC0071,0x87FC0080,0xFFEC0071,0xFDE80062,0xFDE00055,0xFFC80022,0xFFB00000,0xFF840000,0xFDEC0071,0xFFE40062,0xFFB80004,0xF6000080,0xF1FC0080,0x1100A69,0x1100A69,0x1100A69,0x1100A69,0x1100A69,0x1100A69,0x1100A69,0x1100A69,0x1100A69,0x1100A69,0xFEDC0145,0xFEDC0145,0xFEDC0145,0xFEDC0145,0xFEDC0145, -0xFEDC0145,0xD0C80000,0xD0C80000,0xD0C80000,0xACC80000,0x1940A69,0x1940A69,0x1940A69,0x1940A69,0x1940A69,0x1940A69,0xF23C0000,0xF23C0000,0xF23C0000,0xAC800000,0x4FF80A69,0x4FF80A69,0x4FF80A69,0xA60000B4,0x88000A69,0xFD080841,0x1100A69,0x1100A69,0xFEF405E4,0xFEEC041D,0xFEE80290,0xFEE80290,0xFED40048,0xFEF40784,0xFEE40595,0xF6B40000,0xF23C0000, -0x1FFC0A69,}; -static const uint32_t g_etc1_to_bc7_m6_table218[] = { -0xD80000,0xD80000,0xD80000,0xD80000,0xD80000,0xD80000,0xD80000,0xD80000,0xD80000,0xD80000,0xD80000,0xD80000,0xD80000,0xD80000,0xD80000,0xD80000,0xD80000,0xD80000,0xD80000,0xD80000,0x1400000,0x1400000,0x1400000,0x1400000,0x1400000,0x1400000,0x1400000,0x1400000,0x1400000,0x1400000,0x25F80000, -0x25F80000,0x25F80000,0x25F80000,0x6A000001,0xD80000,0xD80000,0xD80000,0xD80000,0xD80000,0xD80000,0xD80000,0xD80000,0xAE40000,0xAE40000,0xAE40000,0x1400000,0x1CC0000,0x1680001,0x1680001,0x1680001,0x1680001,0x1680001,0x1680001,0x1680001,0x1680001,0x1680001,0x1680001,0x1FFC0000,0x1FFC0000,0x1FFC0000,0x1FFC0000,0x1FFC0000, -0x1FFC0000,0x91FC0000,0x91FC0000,0x91FC0000,0xB4000000,0x1FFC0000,0x1FFC0000,0x1FFC0000,0x1FFC0000,0x1FFC0000,0x1FFC0000,0x91FC0000,0x91FC0000,0x91FC0000,0xB4000000,0x91FC0000,0x91FC0000,0x91FC0000,0xB4000000,0xB4000000,0x9800000,0x1680001,0x1680001,0x1A40000,0x3C40000,0x1EC0000,0x1EC0000,0x4BFC0000,0x1A40000,0x3C40000,0x75FC0000,0x91FC0000, -0x75FC0000,0x1EC0001,0x1EC0001,0x1EC0001,0x1EC0001,0xE9FC0000,0xE9FC0000,0xE9FC0000,0xF3FC0000,0xF3FC0000,0xF6000000,0xE9FC0000,0xE9FC0000,0xE9FC0000,0xF3FC0000,0xF3FC0000,0xF6000000,0xF3FC0000,0xF3FC0000,0xF6000000,0xF6000000,0xE9FC0000,0xE9FC0000,0xE9FC0000,0xF3FC0000,0xF3FC0000,0xF6000000,0xF3FC0000,0xF3FC0000,0xF6000000,0xF6000000,0xF3FC0000, -0xF3FC0000,0xF6000000,0xF6000000,0xF6000000,0xC9FC0000,0x87FC0000,0x1EC0001,0xE3FC0000,0xEDFC0000,0xF1FC0000,0xF3F80000,0xF5F80000,0xDBFC0000,0xE9FC0000,0xF1FC0000,0xF6000000,0xF1FC0000,0x1FC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000, -0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xF7FC0001,0xF7FC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFFF00000,0xFE000000, -0xFFFC0000,0x18C36D7,0xFF742EAA,0xFF6C2826,0xFF6425C6,0xFF5C24DD,0xFF501BC6,0xFF441831,0xFF3811B1,0xFF2C0D49,0xFB200A89,0xFF5025F8,0xFF301AB6,0xFF241626,0xFF140CC5,0xFEFC0671,0xFCF001D9,0xFEFC10AC,0xFEE408D8,0xF4C801A8,0xE2D80CE4,0x53FC36D7,0xFF2C2A9E,0xFF1C25C5,0xFEF01A01,0xFED811B1,0xFAB80A89,0xFEB819F4,0xFE880D5B,0xFA4C0020,0xE2640CE4,0xABF836D7, -0xFE2C25C5,0xEC000DB5,0xDC0013A8,0xC40036D9,0xFF742E0F,0xFD883393,0xFD88351B,0xFF54242D,0xFF381982,0xFF180EB9,0xFF1009F9,0xFEEC03A5,0xFF702D9A,0xFF5022A2,0xFEF40E18,0xFA4C0020,0x95FC36D7,0x1C80CE3,0xFFBC0AE6,0xFFAC092B,0xFFAC0882,0xFFA408B1,0xFF9805D6,0xFF8C04A5,0xFF7C02B3,0xFF7000EA,0xFB680021,0xAFFC0CE3,0xFF9409D5,0xFF840882,0xFF640576,0xFF380271, -0xFB240021,0xD7FC0CE3,0xFF040882,0xFA4C0020,0xE2000CE4,0xAFFC0CE3,0xFF9409D5,0xFF840882,0xFF640576,0xFF380271,0xFB240021,0xD7FC0CE3,0xFF040882,0xFA4C0020,0xE2000CE4,0xD7FC0CE3,0xFF040882,0xFA4C0020,0xE2000CE4,0xE2000CE4,0xFFBC0B6D,0xFBC40C2B,0xFBC40C7B,0xFFB00A0A,0xFF9007D9,0xFF6C0515,0xFF640332,0xFF2801F4,0xFFB40B76,0xFF9809BE,0xFF50089B,0xFA4C0020, -0xCDFC0CE3,0x16425C6,0x16425C6,0x16425C6,0x16425C6,0xFF441831,0xFF441831,0xFF441831,0xFF2C0D49,0xFF2C0D49,0xF7200A69,0xFF241626,0xFF241626,0xFF241626,0xFEFC0671,0xFEFC0671,0xFCF001D5,0xFEE408D8,0xFEE408D8,0xECD00104,0xD4D80884,0x19FC25C5,0x19FC25C5,0x19FC25C5,0xFED811B1,0xFED811B1,0xF6BC0A69,0xFE880D5B,0xFE880D5B,0xF6540002,0xD4700884,0x8FF825C5, -0x8FF825C5,0xE6000C45,0xCA000C84,0xB20025C5,0xFF4C1F85,0xF960232D,0x16425C6,0xFF3C1996,0xFF2C12AC,0xFF180CA8,0xFF1009F9,0xFEEC03A5,0xFD4C1F0B,0xFF30188D,0xFEF40DD8,0xF6540002,0x71FC25C5,0x1AC0882,0x1AC0882,0x1AC0882,0x1AC0882,0xFF8C04A5,0xFF8C04A5,0xFF8C04A5,0xFF7000EA,0xFF7000EA,0xF7680001,0x83FC0882,0x83FC0882,0x83FC0882,0xFF380271,0xFF380271, -0xF7280001,0xC3F80882,0xC3F80882,0xF65C0000,0xD4000884,0x83FC0882,0x83FC0882,0x83FC0882,0xFF380271,0xFF380271,0xF7280001,0xC3F80882,0xC3F80882,0xF65C0000,0xD4000884,0xC3F80882,0xC3F80882,0xF65C0000,0xD4000884,0xD4000884,0xFFA00784,0xFDA807C1,0x1AC0882,0xFF9806CD,0xFF840581,0xFF640431,0xFF640332,0xFF2801F4,0xFF940794,0xFF8406B2,0xB3FC0882,0xF65C0000, -0xB3FC0882,0x1F40022,0xFFF40012,0xFFF00005,0xFFEC0001,0xF5FC0020,0xFFEC000D,0xFFE40001,0xF9FC0020,0xFFCC0000,0xFA000020,0xF5FC0020,0xFFEC000D,0xFFE40001,0xF9FC0020,0xFFCC0000,0xFA000020,0xF9FC0020,0xFFCC0000,0xFA000020,0xFA000020,0xF5FC0020,0xFFEC000D,0xFFE40001,0xF9FC0020,0xFFCC0000,0xFA000020,0xF9FC0020,0xFFCC0000,0xFA000020,0xFA000020,0xF9FC0020, -0xFFCC0000,0xFA000020,0xFA000020,0xFA000020,0xFDF40019,0xC7FC0020,0xF3F40022,0xFFF00019,0xFFE80011,0xFFDC0009,0xFFD80000,0xFFC00000,0xFFF0001D,0xFFF00019,0xFFDC0001,0xFA000020,0xF9FC0020,0x1200A69,0x1200A69,0x1200A69,0x1200A69,0x1200A69,0x1200A69,0x1200A69,0x1200A69,0x1200A69,0x1200A69,0xFEF401A5,0xFEF401A5,0xFEF401A5,0xFEF401A5,0xFEF401A5, -0xFEF401A5,0xD8D80000,0xD8D80000,0xD8D80000,0xB4D80000,0x1AC0A69,0x1AC0A69,0x1AC0A69,0x1AC0A69,0x1AC0A69,0x1AC0A69,0xFA4C0000,0xFA4C0000,0xFA4C0000,0xB4900000,0x5BF80A69,0x5BF80A69,0x5BF80A69,0xAC000080,0x90000A69,0xF5180884,0x1200A69,0x1200A69,0xFF100620,0xFF000469,0xFEF802E4,0xFEF802E4,0xFEE40088,0xFB0807C1,0xFEF805C4,0xFEC40000,0xFA4C0000, -0x2FFC0A69,}; -static const uint32_t g_etc1_to_bc7_m6_table219[] = { -0xE80000,0xE80000,0xE80000,0xE80000,0xE80000,0xE80000,0xE80000,0xE80000,0xE80000,0xE80000,0xE80000,0xE80000,0xE80000,0xE80000,0xE80000,0xE80000,0xE80000,0xE80000,0xE80000,0xE80000,0x1580000,0x1580000,0x1580000,0x1580000,0x1580000,0x1580000,0x1580000,0x1580000,0x1580000,0x1580000,0x31F80000, -0x31F80000,0x31F80000,0x31F80000,0x72000001,0xE80000,0xE80000,0xE80000,0xE80000,0xE80000,0xE80000,0xE80000,0xE80000,0xF80000,0xF80000,0xF80000,0x1580000,0x1EC0000,0x1780001,0x1780001,0x1780001,0x1780001,0x1780001,0x1780001,0x1780001,0x1780001,0x1780001,0x1780001,0x37FC0000,0x37FC0000,0x37FC0000,0x37FC0000,0x37FC0000, -0x37FC0000,0x9DFC0000,0x9DFC0000,0x9DFC0000,0xBC000000,0x37FC0000,0x37FC0000,0x37FC0000,0x37FC0000,0x37FC0000,0x37FC0000,0x9DFC0000,0x9DFC0000,0x9DFC0000,0xBC000000,0x9DFC0000,0x9DFC0000,0x9DFC0000,0xBC000000,0xBC000000,0x1940000,0x1780001,0x1780001,0x1B80000,0x3D80000,0x9FC0000,0x9FC0000,0x5DFC0000,0x1B80000,0x3D80000,0x83FC0000,0x9DFC0000, -0x83FC0000,0x1FC0001,0x1FC0001,0x1FC0001,0x1FC0001,0xFDFC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000, -0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFBFC0001,0xF7FC0001,0x1FC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFFFC0000,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0x1FC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000, -0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xF7FC0001,0xF7FC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFFF00000,0xFE000000, -0xFFFC0000,0x1983373,0xFF8C2CEA,0xFF7C279F,0xFF7425C6,0xFF7423B5,0xFF5C1C42,0xFF5C1969,0xFF40125B,0xFF380E81,0xFF300A69,0xFF5C247C,0xFF441B19,0xFF441758,0xFF200D81,0xFF140831,0xFF0001F9,0xFF081024,0xFEF00984,0xF8DC0130,0xE8E80B58,0x65FC3373,0xFF4029BE,0xFF3425C5,0xFF0819E1,0xFEF01301,0xFECC0A69,0xFED81984,0xFEA00EBB,0xFE640002,0xE8740B59,0xB3FC3373, -0xFE6025C5,0xF6000C55,0xE00010E1,0xCA003375,0xFF802BE9,0xFF8C3087,0xFF8C323F,0xFF70239D,0xFF4C19E6,0xFF2C1017,0xFF240BD8,0xFF040545,0xFF782B2A,0xFF5C221F,0xFF100FAE,0xFE640002,0x9FFC3373,0x1D00B5B,0xFFC40A0B,0xFFC008EE,0xFFBC0882,0xFFBC0809,0xFFA4061E,0xFFA4053D,0xFF9402EB,0xFF88019A,0xFF780001,0xBDFC0B58,0xFFAC095D,0xFF9C0882,0xFF7C0556,0xFF640335, -0xFF380001,0xDFF80B58,0xFF340882,0xFE6C0000,0xE8000B58,0xBDFC0B58,0xFFAC095D,0xFF9C0882,0xFF7C0556,0xFF640335,0xFF380001,0xDFF80B58,0xFF340882,0xFE6C0000,0xE8000B58,0xDFF80B58,0xFF340882,0xFE6C0000,0xE8000B58,0xE8000B58,0xFDCC0A58,0xFFCC0AB3,0xFFCC0B13,0xFFB40941,0xFFA407A1,0xFF7C0571,0xFF7C03E8,0xFF4802D0,0xFFC40A5B,0xFFB00926,0xFF700892,0xFE6C0000, -0xD7FC0B58,0x17425C6,0x17425C6,0x17425C6,0x17425C6,0xFF5C1969,0xFF5C1969,0xFF5C1969,0xFF380E81,0xFF380E81,0xFF300A69,0xFF441758,0xFF441758,0xFF441758,0xFF140831,0xFF140831,0xFF0001F9,0xFEF00984,0xFEF00984,0xF4E00104,0xDCE80884,0x31FC25C5,0x31FC25C5,0x31FC25C5,0xFEF01301,0xFEF01301,0xFECC0A69,0xFEA00EBB,0xFEA00EBB,0xFE640002,0xDC800884,0x9BF825C5, -0x9BF825C5,0xF2000BD5,0xD6000BF4,0xBA0025C5,0xFF682010,0xFF6C2345,0x17425C6,0xFF541A99,0xFF401434,0xFF2C0E5E,0xFF240BD8,0xFF040545,0xFF501F9B,0xFF4419D4,0xFEFC0F78,0xFE640002,0x7FFC25C5,0x1BC0882,0x1BC0882,0x1BC0882,0x1BC0882,0xFFA4053D,0xFFA4053D,0xFFA4053D,0xFF88019A,0xFF88019A,0xFF780001,0x9BFC0882,0x9BFC0882,0x9BFC0882,0xFF640335,0xFF640335, -0xFF380001,0xCFF80882,0xCFF80882,0xFE6C0000,0xDC000884,0x9BFC0882,0x9BFC0882,0x9BFC0882,0xFF640335,0xFF640335,0xFF380001,0xCFF80882,0xCFF80882,0xFE6C0000,0xDC000884,0xCFF80882,0xCFF80882,0xFE6C0000,0xDC000884,0xDC000884,0xFBB407C1,0xF5B80802,0x1BC0882,0xFFA4071A,0xFF9805F5,0xFF7C04C8,0xFF7C03E8,0xFF4802D0,0xFDB007C1,0xFF9806F5,0xC1FC0882,0xFE6C0000, -0xC1FC0882,0x1FC0002,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000, -0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0002,0xF7FC0002,0xF7FC0002,0xFDFC0002,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFFFC0000,0xFDFC0002,0xFDFC0002,0xFFFC0000,0xFE000000,0xFFFC0000,0x1300A69,0x1300A69,0x1300A69,0x1300A69,0x1300A69,0x1300A69,0x1300A69,0x1300A69,0x1300A69,0x1300A69,0xFF0001F9,0xFF0001F9,0xFF0001F9,0xFF0001F9,0xFF0001F9, -0xFF0001F9,0xE0E80000,0xE0E80000,0xE0E80000,0xBCE80000,0x1C40A69,0x1C40A69,0x1C40A69,0x1C40A69,0x1C40A69,0x1C40A69,0xFE640002,0xFE640002,0xFE640002,0xBCA00000,0x67F80A69,0x67F80A69,0x67F80A69,0xB8000050,0x98000A69,0xFD280884,0x1300A69,0x1300A69,0xFF200659,0xFF1404BD,0xFF080340,0xFF080340,0xFEF400CD,0xFF1007E9,0xFD100622,0xFED8000A,0xFE640002, -0x3FF80A69,}; -static const uint32_t g_etc1_to_bc7_m6_table220[] = { -0xF80001,0xF80001,0xF80001,0xF80001,0xF80001,0xF80001,0xF80001,0xF80001,0xF80001,0xF80001,0xF80001,0xF80001,0xF80001,0xF80001,0xF80001,0xF80001,0xF80001,0xF80001,0xF80001,0xF80001,0x1740000,0x1740000,0x1740000,0x1740000,0x1740000,0x1740000,0x1740000,0x1740000,0x1740000,0x1740000,0x3FF80000, -0x3FF80000,0x3FF80000,0x3FF80000,0x7C000000,0xF80001,0xF80001,0xF80001,0xF80001,0xF80001,0xF80001,0xF80001,0xF80001,0xD080000,0xD080000,0xD080000,0x1740000,0xBFC0000,0x18C0000,0x18C0000,0x18C0000,0x18C0000,0x18C0000,0x18C0000,0x18C0000,0x18C0000,0x18C0000,0x18C0000,0x53FC0000,0x53FC0000,0x53FC0000,0x53FC0000,0x53FC0000, -0x53FC0000,0xABF80000,0xABF80000,0xABF80000,0xC4000001,0x53FC0000,0x53FC0000,0x53FC0000,0x53FC0000,0x53FC0000,0x53FC0000,0xABF80000,0xABF80000,0xABF80000,0xC4000001,0xABF80000,0xABF80000,0xABF80000,0xC4000001,0xC4000001,0xBA40000,0x18C0000,0x18C0000,0x1CC0000,0x1F00000,0x2BFC0000,0x2BFC0000,0x73FC0000,0x1CC0000,0x1F00000,0x95FC0000,0xABF80000, -0x95FC0000,0x1FC0001,0x1FC0001,0x1FC0001,0x1FC0001,0xFDFC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000, -0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFBFC0001,0xF7FC0001,0x1FC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFFFC0000,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0x1FC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000, -0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xF7FC0001,0xF7FC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFFF00000,0xFE000000, -0xFFFC0000,0x1A02C8F,0xFF8C2726,0xFF8822B7,0xFF80212E,0xFF801F75,0xFF68194A,0xFF6816D9,0xFF5810F7,0xFF4C0DDA,0xFF440A69,0xFF681F8A,0xFF5017A7,0xFF50145E,0xFF380C25,0xFF2C07B9,0xFF180271,0xFF200D42,0xFF080792,0xFAF8009A,0xEAF8087A,0x71FC2C8F,0xFF58247E,0xFF44212D,0xFF201735,0xFF081185,0xFEE80A69,0xFEF015BA,0xFEB80C99,0xFE880020,0xEA900879,0xB9FC2C8F, -0xFE84212D,0xF8000AED,0xE6000C45,0xD0002C91,0xFF8C262B,0xF79C2A69,0xF9A02B7E,0xFF701F1D,0xFF5816D7,0xFF3C0E7E,0xFF3C0AF6,0xFF1404FA,0xFF8025C2,0xFF681E1D,0xFF1C0D7A,0xFE880020,0xA7FC2C8F,0x1D80876,0xFFD00776,0xFFC806AE,0xFFC40659,0xFFC405E2,0xFFB00491,0xFFB003E8,0xFFA00226,0xFF940131,0xFF8C0000,0xC7FC0876,0xFFB806FA,0xFFA80659,0xFF8803F3,0xFF700262, -0xFF540000,0xE3FC0876,0xFF4C0659,0xFEA00000,0xEA000879,0xC7FC0876,0xFFB806FA,0xFFA80659,0xFF8803F3,0xFF700262,0xFF540000,0xE3FC0876,0xFF4C0659,0xFEA00000,0xEA000879,0xE3FC0876,0xFF4C0659,0xFEA00000,0xEA000879,0xEA000879,0xFFD0079D,0xFFCC0822,0xF5D80851,0xFFC006D9,0xFFAC05A1,0xFFA0042C,0xFF8C02F2,0xFF640209,0xFFD007BE,0xFFC006B9,0xFF840669,0xFEA00000, -0xDDF80876,0x180212E,0x180212E,0x180212E,0x180212E,0xFF6816D9,0xFF6816D9,0xFF6816D9,0xFF4C0DDA,0xFF4C0DDA,0xFF440A69,0xFF50145E,0xFF50145E,0xFF50145E,0xFF2C07B9,0xFF2C07B9,0xFF180271,0xFF080792,0xFF080792,0xF8F4007E,0xE2F8065A,0x43FC212D,0x43FC212D,0x43FC212D,0xFF081185,0xFF081185,0xFEE80A69,0xFEB80C99,0xFEB80C99,0xFE880020,0xE294065A,0xA3FC212D, -0xA3FC212D,0xF8000AC9,0xDC0008A6,0xC000212D,0xFF741C62,0xF9801F46,0x180212E,0xFF5C17A3,0xFF541226,0xFF3C0CEE,0xFF3C0AF6,0xFF1404FA,0xFF641BFE,0xFF5016B4,0xFF1C0D49,0xFE880020,0x8BFC212D,0x1C40659,0x1C40659,0x1C40659,0x1C40659,0xFFB003E8,0xFFB003E8,0xFFB003E8,0xFF940131,0xFF940131,0xFF8C0000,0xA9FC0659,0xA9FC0659,0xA9FC0659,0xFF700262,0xFF700262, -0xFF540000,0xD5F80659,0xD5F80659,0xFEA00000,0xE2000659,0xA9FC0659,0xA9FC0659,0xA9FC0659,0xFF700262,0xFF700262,0xFF540000,0xD5F80659,0xD5F80659,0xFEA00000,0xE2000659,0xD5F80659,0xD5F80659,0xFEA00000,0xE2000659,0xE2000659,0xFFBC05B4,0xFBC405E9,0x1C40659,0xFFB4054A,0xFFAC0480,0xFF9403B5,0xFF8C02F2,0xFF640209,0xFFB405BA,0xFFA4053D,0xC9FC0659,0xFEA00000, -0xC9FC0659,0x1FC0002,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000, -0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0002,0xF7FC0002,0xF7FC0002,0xFDFC0002,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFFFC0000,0xFDFC0002,0xFDFC0002,0xFFFC0000,0xFE000000,0xFFFC0000,0x1440A69,0x1440A69,0x1440A69,0x1440A69,0x1440A69,0x1440A69,0x1440A69,0x1440A69,0x1440A69,0x1440A69,0xFF180271,0xFF180271,0xFF180271,0xFF180271,0xFF180271, -0xFF180271,0xE8FC0001,0xE8FC0001,0xE8FC0001,0xC4F80002,0x1E00A69,0x1E00A69,0x1E00A69,0x1E00A69,0x1E00A69,0x1E00A69,0xFE880020,0xFE880020,0xFE880020,0xC4B40001,0x73FC0A69,0x73FC0A69,0x73FC0A69,0xC200002D,0xA0000A69,0xF73C08C5,0x1440A69,0x1440A69,0xFF2C06B2,0xFF280521,0xFF1803BA,0xFF1803BA,0xFF080131,0xF9300841,0xFF200665,0xFEF0002D,0xFE880020, -0x4FFC0A69,}; -static const uint32_t g_etc1_to_bc7_m6_table221[] = { -0x1080001,0x1080001,0x1080001,0x1080001,0x1080001,0x1080001,0x1080001,0x1080001,0x1080001,0x1080001,0x1080001,0x1080001,0x1080001,0x1080001,0x1080001,0x1080001,0x1080001,0x1080001,0x1080001,0x1080001,0x18C0000,0x18C0000,0x18C0000,0x18C0000,0x18C0000,0x18C0000,0x18C0000,0x18C0000,0x18C0000,0x18C0000,0x4BF80000, -0x4BF80000,0x4BF80000,0x4BF80000,0x84000000,0x1080001,0x1080001,0x1080001,0x1080001,0x1080001,0x1080001,0x1080001,0x1080001,0x11C0000,0x11C0000,0x11C0000,0x18C0000,0x1BFC0000,0x19C0000,0x19C0000,0x19C0000,0x19C0000,0x19C0000,0x19C0000,0x19C0000,0x19C0000,0x19C0000,0x19C0000,0x6BFC0000,0x6BFC0000,0x6BFC0000,0x6BFC0000,0x6BFC0000, -0x6BFC0000,0xB7F80000,0xB7F80000,0xB7F80000,0xCC000001,0x6BFC0000,0x6BFC0000,0x6BFC0000,0x6BFC0000,0x6BFC0000,0x6BFC0000,0xB7F80000,0xB7F80000,0xB7F80000,0xCC000001,0xB7F80000,0xB7F80000,0xB7F80000,0xCC000001,0xCC000001,0x1B80000,0x19C0000,0x19C0000,0x1E00000,0x11FC0000,0x49FC0000,0x49FC0000,0x87FC0000,0x1E00000,0x11FC0000,0xA3FC0000,0xB7F80000, -0xA3FC0000,0x1FC0001,0x1FC0001,0x1FC0001,0x1FC0001,0xFDFC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000, -0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFBFC0001,0xF7FC0001,0x1FC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFFFC0000,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0x1FC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000, -0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xF7FC0001,0xF7FC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFFF00000,0xFE000000, -0xFFFC0000,0x1A826F7,0xFF982262,0xFF901EC2,0xFF8C1D72,0xFF8C1C09,0xFF7416DE,0xFF7414CD,0xFF640FDB,0xFF580D4E,0xFF540A69,0xFF741B8A,0xFF6814D7,0xFF5C120E,0xFF400B3C,0xFF380755,0xFF2402E9,0xFF2C0B0A,0xFF200632,0xFD08003A,0xEF080642,0x7DFC26F7,0xFF64202E,0xFF541D72,0xFF2C1515,0xFF201055,0xFF000A69,0xFEFC12C2,0xFED80B12,0xFEA00050,0xEEA00642,0xBFFC26F7, -0xFEA01D72,0xFE000A6D,0xE60008D5,0xD40026F9,0xFFA021AB,0xFBA42501,0xFDA825FE,0xFF801B4F,0xFF6C146F,0xFF540D63,0xFF3C0A46,0xFF2804D2,0xFF9020F8,0xFF741A72,0xFF300B96,0xFEA00050,0xAFFC26F7,0x1DC0642,0xFFD4058D,0xFFCC04F1,0xFFCC04B1,0xFFC40462,0xFFBC035D,0xFFBC02E4,0xFFAC0192,0xFFA000E5,0xFF9C0000,0xCFFC0641,0xFFB8052A,0xFFB404B1,0xFFA002E3,0xFF8801BA, -0xFF6C0000,0xE7FC0641,0xFF6404B1,0xFED40000,0xEE000641,0xCFFC0641,0xFFB8052A,0xFFB404B1,0xFFA002E3,0xFF8801BA,0xFF6C0000,0xE7FC0641,0xFF6404B1,0xFED40000,0xEE000641,0xE7FC0641,0xFF6404B1,0xFED40000,0xEE000641,0xEE000641,0xFFD805A2,0xF7DC0600,0xF7DC0621,0xFFC4051A,0xFFC0042D,0xFFA80302,0xFFA0022D,0xFF740184,0xFFD005AE,0xFFC804E1,0xFF9404BA,0xFED40000, -0xE1FC0641,0x18C1D72,0x18C1D72,0x18C1D72,0x18C1D72,0xFF7414CD,0xFF7414CD,0xFF7414CD,0xFF580D4E,0xFF580D4E,0xFF540A69,0xFF5C120E,0xFF5C120E,0xFF5C120E,0xFF380755,0xFF380755,0xFF2402E9,0xFF200632,0xFF200632,0xFB040032,0xE70804B2,0x53FC1D72,0x53FC1D72,0x53FC1D72,0xFF201055,0xFF201055,0xFF000A69,0xFED80B12,0xFED80B12,0xFEA00050,0xE6A804B2,0xABF81D72, -0xABF81D72,0xFC000A6D,0xE0000631,0xC4001D75,0xFF841959,0xFD881BB6,0x18C1D72,0xFF701549,0xFF581073,0xFF4C0C25,0xFF3C0A46,0xFF2804D2,0xFF7818E3,0xFF5C14A8,0xFF300B72,0xFEA00050,0x95FC1D72,0x1CC04B1,0x1CC04B1,0x1CC04B1,0x1CC04B1,0xFFBC02E4,0xFFBC02E4,0xFFBC02E4,0xFFA000E5,0xFFA000E5,0xFF9C0000,0xB5FC04B1,0xB5FC04B1,0xB5FC04B1,0xFF8801BA,0xFF8801BA, -0xFF6C0000,0xDBF804B1,0xDBF804B1,0xFED40000,0xE60004B1,0xB5FC04B1,0xB5FC04B1,0xB5FC04B1,0xFF8801BA,0xFF8801BA,0xFF6C0000,0xDBF804B1,0xDBF804B1,0xFED40000,0xE60004B1,0xDBF804B1,0xDBF804B1,0xFED40000,0xE60004B1,0xE60004B1,0xF7C80451,0xFFCC0451,0x1CC04B1,0xFDC003F5,0xFFAC0340,0xFFA002A8,0xFFA0022D,0xFF740184,0xF9C40451,0xFFB003E8,0xD1FC04B1,0xFED40000, -0xD1FC04B1,0x1FC0002,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000, -0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0002,0xF7FC0002,0xF7FC0002,0xFDFC0002,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFFFC0000,0xFDFC0002,0xFDFC0002,0xFFFC0000,0xFE000000,0xFFFC0000,0x1540A69,0x1540A69,0x1540A69,0x1540A69,0x1540A69,0x1540A69,0x1540A69,0x1540A69,0x1540A69,0x1540A69,0xFF2402E9,0xFF2402E9,0xFF2402E9,0xFF2402E9,0xFF2402E9, -0xFF2402E9,0xF10C0001,0xF10C0001,0xF10C0001,0xCD080002,0x1F80A69,0x1F80A69,0x1F80A69,0x1F80A69,0x1F80A69,0x1F80A69,0xFEA00050,0xFEA00050,0xFEA00050,0xCCC40001,0x7FFC0A69,0x7FFC0A69,0x7FFC0A69,0xCA000012,0xA8000A69,0xFF4C08C5,0x1540A69,0x1540A69,0xFF3C06F5,0xFF34057A,0xFF34042A,0xFF34042A,0xFF1C0195,0xFF3C0845,0xFF34069A,0xFEFC007A,0xFEA00050, -0x5FF80A69,}; -static const uint32_t g_etc1_to_bc7_m6_table222[] = { -0x1180001,0x1180001,0x1180001,0x1180001,0x1180001,0x1180001,0x1180001,0x1180001,0x1180001,0x1180001,0x1180001,0x1180001,0x1180001,0x1180001,0x1180001,0x1180001,0x1180001,0x1180001,0x1180001,0x1180001,0x1A40000,0x1A40000,0x1A40000,0x1A40000,0x1A40000,0x1A40000,0x1A40000,0x1A40000,0x1A40000,0x1A40000,0x57F80000, -0x57F80000,0x57F80000,0x57F80000,0x8C000000,0x1180001,0x1180001,0x1180001,0x1180001,0x1180001,0x1180001,0x1180001,0x1180001,0x12C0000,0x12C0000,0x12C0000,0x1A40000,0x29FC0000,0x1AC0000,0x1AC0000,0x1AC0000,0x1AC0000,0x1AC0000,0x1AC0000,0x1AC0000,0x1AC0000,0x1AC0000,0x1AC0000,0x83FC0000,0x83FC0000,0x83FC0000,0x83FC0000,0x83FC0000, -0x83FC0000,0xC3F80000,0xC3F80000,0xC3F80000,0xD4000001,0x83FC0000,0x83FC0000,0x83FC0000,0x83FC0000,0x83FC0000,0x83FC0000,0xC3F80000,0xC3F80000,0xC3F80000,0xD4000001,0xC3F80000,0xC3F80000,0xC3F80000,0xD4000001,0xD4000001,0x1C80000,0x1AC0000,0x1AC0000,0x3F00000,0x37FC0000,0x67FC0000,0x67FC0000,0x9BFC0000,0x3F00000,0x37FC0000,0xB3FC0000,0xC3F80000, -0xB3FC0000,0x1FC0001,0x1FC0001,0x1FC0001,0x1FC0001,0xFDFC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000, -0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFBFC0001,0xF7FC0001,0x1FC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFFFC0000,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0x1FC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000, -0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xF7FC0001,0xF7FC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFFF00000,0xFE000000, -0xFFFC0000,0x1B021DF,0xFFA41E16,0xFF9C1B22,0xFF981A0E,0xFF9818ED,0xFF8014AA,0xFF8012F1,0xFF700EDF,0xFF700CCE,0xFF640A69,0xFF8017F2,0xFF741257,0xFF681006,0xFF580A54,0xFF4C0723,0xFF3C0361,0xFF380932,0xFF2C0506,0xFF18000A,0xF1180462,0x89FC21DF,0xFF701C46,0xFF641A0D,0xFF381345,0xFF2C0F41,0xFF180A69,0xFF14101A,0xFEF009AA,0xFEB800A0,0xF0B80461,0xC5FC21DF, -0xFEC01A0D,0xFE200A69,0xEC0005DD,0xD80021E1,0xFFA01D2B,0xFFAC2019,0xFFAC2106,0xFF881837,0xFF78124A,0xFF5C0C29,0xFF5009B3,0xFF4004BB,0xFF941CEE,0xFF801747,0xFF3C0A2E,0xFEB800A0,0xB7FC21DF,0x1E40462,0xFFDC03DA,0xFFD80371,0xFFD40349,0xFFD00306,0xFFC80259,0xFFC401F9,0xFFB80116,0xFFB8009D,0xFFAC0000,0xD5FC0461,0xFFCC03A1,0xFFC00349,0xFFAC01FB,0xFFA00132, -0xFF840000,0xEBF80461,0xFF7C0349,0xFF040000,0xF0000461,0xD5FC0461,0xFFCC03A1,0xFFC00349,0xFFAC01FB,0xFFA00132,0xFF840000,0xEBF80461,0xFF7C0349,0xFF040000,0xF0000461,0xEBF80461,0xFF7C0349,0xFF040000,0xF0000461,0xF0000461,0xFFD803F2,0xF9E0042C,0xF9E00449,0xFFD40382,0xFFC802E2,0xFFB80212,0xFFA80172,0xFF8C0112,0xFFDC03F8,0xFFC80371,0xFFA40352,0xFF040000, -0xE5FC0461,0x1981A0E,0x1981A0E,0x1981A0E,0x1981A0E,0xFF8012F1,0xFF8012F1,0xFF8012F1,0xFF700CCE,0xFF700CCE,0xFF640A69,0xFF681006,0xFF681006,0xFF681006,0xFF4C0723,0xFF4C0723,0xFF3C0361,0xFF2C0506,0xFF2C0506,0xFD180009,0xEB18034A,0x63FC1A0D,0x63FC1A0D,0x63FC1A0D,0xFF2C0F41,0xFF2C0F41,0xFF180A69,0xFEF009AA,0xFEF009AA,0xFEB800A0,0xEABC034A,0xB3F81A0D, -0xB3F81A0D,0xFE200A69,0xE6000425,0xCA001A0D,0xFF841689,0xFF8C18AA,0x1981A0E,0xFF801316,0xFF6C0EEB,0xFF5C0B29,0xFF5009B3,0xFF4004BB,0xFF80163E,0xFF741269,0xFF3C0A0A,0xFEB800A0,0x9FF81A0D,0x1D40349,0x1D40349,0x1D40349,0x1D40349,0xFFC401F9,0xFFC401F9,0xFFC401F9,0xFFB8009D,0xFFB8009D,0xFFAC0000,0xC1FC0349,0xC1FC0349,0xC1FC0349,0xFFA00132,0xFFA00132, -0xFF840000,0xE1F80349,0xE1F80349,0xFF040000,0xEA000349,0xC1FC0349,0xC1FC0349,0xC1FC0349,0xFFA00132,0xFFA00132,0xFF840000,0xE1F80349,0xE1F80349,0xFF040000,0xEA000349,0xE1F80349,0xE1F80349,0xFF040000,0xEA000349,0xEA000349,0xFBD002F9,0xFFCC0311,0x1D40349,0xFFC402B9,0xFFC00244,0xFFB001D4,0xFFA80172,0xFF8C0112,0xFDCC02F9,0xFFC402AD,0xD9FC0349,0xFF040000, -0xD9FC0349,0x1FC0002,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000, -0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0002,0xF7FC0002,0xF7FC0002,0xFDFC0002,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFFFC0000,0xFDFC0002,0xFDFC0002,0xFFFC0000,0xFE000000,0xFFFC0000,0x1640A69,0x1640A69,0x1640A69,0x1640A69,0x1640A69,0x1640A69,0x1640A69,0x1640A69,0x1640A69,0x1640A69,0xFF3C0361,0xFF3C0361,0xFF3C0361,0xFF3C0361,0xFF3C0361, -0xFF3C0361,0xF91C0001,0xF91C0001,0xF91C0001,0xD5180002,0x13FC0A69,0x13FC0A69,0x13FC0A69,0x13FC0A69,0x13FC0A69,0x13FC0A69,0xFEB800A0,0xFEB800A0,0xFEB800A0,0xD4D40001,0x8BFC0A69,0x8BFC0A69,0x8BFC0A69,0xD4000005,0xB0000A69,0xF75C090A,0x1640A69,0x1640A69,0xFF4C073A,0xFF5005E9,0xFF440492,0xFF440492,0xFF300209,0xFB500884,0xFD4C0708,0xFF1800CD,0xFEB800A0, -0x6DFC0A69,}; -static const uint32_t g_etc1_to_bc7_m6_table223[] = { -0x1280001,0x1280001,0x1280001,0x1280001,0x1280001,0x1280001,0x1280001,0x1280001,0x1280001,0x1280001,0x1280001,0x1280001,0x1280001,0x1280001,0x1280001,0x1280001,0x1280001,0x1280001,0x1280001,0x1280001,0x1BC0000,0x1BC0000,0x1BC0000,0x1BC0000,0x1BC0000,0x1BC0000,0x1BC0000,0x1BC0000,0x1BC0000,0x1BC0000,0x61FC0000, -0x61FC0000,0x61FC0000,0x61FC0000,0x94000000,0x1280001,0x1280001,0x1280001,0x1280001,0x1280001,0x1280001,0x1280001,0x1280001,0x73C0000,0x73C0000,0x73C0000,0x1BC0000,0x39FC0000,0x1BC0000,0x1BC0000,0x1BC0000,0x1BC0000,0x1BC0000,0x1BC0000,0x1BC0000,0x1BC0000,0x1BC0000,0x1BC0000,0x9BFC0000,0x9BFC0000,0x9BFC0000,0x9BFC0000,0x9BFC0000, -0x9BFC0000,0xCFF80000,0xCFF80000,0xCFF80000,0xDC000001,0x9BFC0000,0x9BFC0000,0x9BFC0000,0x9BFC0000,0x9BFC0000,0x9BFC0000,0xCFF80000,0xCFF80000,0xCFF80000,0xDC000001,0xCFF80000,0xCFF80000,0xCFF80000,0xDC000001,0xDC000001,0x5D80000,0x1BC0000,0x1BC0000,0x17FC0000,0x5FFC0000,0x85FC0000,0x85FC0000,0xAFFC0000,0x17FC0000,0x5FFC0000,0xC1FC0000,0xCFF80000, -0xC1FC0000,0x1FC0001,0x1FC0001,0x1FC0001,0x1FC0001,0xFDFC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000, -0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFBFC0001,0xF7FC0001,0x1FC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFFFC0000,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0x1FC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000, -0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xF7FC0001,0xF7FC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFFF00000,0xFE000000, -0xFFFC0000,0x1B81D47,0xFFB01A42,0xFFA017DF,0xFFA016FE,0xFF98161D,0xFF9012AA,0xFF8C1145,0xFF7C0E03,0xFF7C0C4A,0xFF740A69,0xFF8C14C2,0xFF801027,0xFF740E46,0xFF640994,0xFF5806FB,0xFF5003DA,0xFF4C07C3,0xFF380432,0xFF2C0002,0xF32802DA,0x95FC1D47,0xFF7C18C6,0xFF7416FD,0xFF581187,0xFF400E66,0xFF300A69,0xFF2C0DD2,0xFF080882,0xFED80112,0xF4CC02D9,0xCBFC1D47, -0xFEE416FD,0xFE540A69,0xF000039A,0xDC001D49,0xFFA8198F,0xFFAC1C09,0xF5B81CBF,0xFF981527,0xFF801057,0xFF700B37,0xFF680929,0xFF4804DA,0xFFA01957,0xFF90147F,0xFF50092A,0xFED80112,0xBFF81D47,0x1E802D6,0xFFE00289,0xFFE0023E,0xFFDC0221,0xFFDC01F2,0xFFD00185,0xFFD00145,0xFFCC00C0,0xFFC00068,0xFFBC0000,0xDFFC02D6,0xFFD8025D,0xFFCC0221,0xFFB80143,0xFFAC00C2, -0xFF9C0000,0xEFFC02D6,0xFF940221,0xFF340000,0xF20002D9,0xDFFC02D6,0xFFD8025D,0xFFCC0221,0xFFB80143,0xFFAC00C2,0xFF9C0000,0xEFFC02D6,0xFF940221,0xFF340000,0xF20002D9,0xEFFC02D6,0xFF940221,0xFF340000,0xF20002D9,0xF20002D9,0xFFE40296,0xFDE802AC,0xFDE802C1,0xFFDC0238,0xFFD401E1,0xFFB80162,0xFFB800F5,0xFFA000A9,0xFFDC0298,0xFFDC0233,0xFFB40225,0xFF340000, -0xEBFC02D6,0x1A016FE,0x1A016FE,0x1A016FE,0x1A016FE,0xFF8C1145,0xFF8C1145,0xFF8C1145,0xFF7C0C4A,0xFF7C0C4A,0xFF740A69,0xFF740E46,0xFF740E46,0xFF740E46,0xFF5806FB,0xFF5806FB,0xFF5003DA,0xFF380432,0xFF380432,0xFF2C0002,0xEF280222,0x75FC16FD,0x75FC16FD,0x75FC16FD,0xFF400E66,0xFF400E66,0xFF300A69,0xFF080882,0xFF080882,0xFED80112,0xEED00222,0xBBFC16FD, -0xBBFC16FD,0xFE540A69,0xEC000289,0xD00016FD,0xFF901433,0xF9A015ED,0x1A016FE,0xFF88111E,0xFF800DB3,0xFF680A6E,0xFF680929,0xFF4804DA,0xFF9013B8,0xFF8010A6,0xFF500911,0xFED80112,0xA9FC16FD,0x1DC0221,0x1DC0221,0x1DC0221,0x1DC0221,0xFFD00145,0xFFD00145,0xFFD00145,0xFFC00068,0xFFC00068,0xFFBC0000,0xCDFC0221,0xCDFC0221,0xCDFC0221,0xFFAC00C2,0xFFAC00C2, -0xFF9C0000,0xE7F80221,0xE7F80221,0xFF340000,0xEE000221,0xCDFC0221,0xCDFC0221,0xCDFC0221,0xFFAC00C2,0xFFAC00C2,0xFF9C0000,0xE7F80221,0xE7F80221,0xFF340000,0xEE000221,0xE7F80221,0xE7F80221,0xFF340000,0xEE000221,0xEE000221,0xFFD801E1,0xF7DC0200,0x1DC0221,0xFFD401C2,0xFFC80179,0xFFB80131,0xFFB800F5,0xFFA000A9,0xFFD001ED,0xFFC801BD,0xDFFC0221,0xFF340000, -0xDFFC0221,0x1FC0002,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000, -0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0002,0xF7FC0002,0xF7FC0002,0xFDFC0002,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFFFC0000,0xFDFC0002,0xFDFC0002,0xFFFC0000,0xFE000000,0xFFFC0000,0x1740A69,0x1740A69,0x1740A69,0x1740A69,0x1740A69,0x1740A69,0x1740A69,0x1740A69,0x1740A69,0x1740A69,0xFF5003DA,0xFF5003DA,0xFF5003DA,0xFF5003DA,0xFF5003DA, -0xFF5003DA,0xFF2C0002,0xFF2C0002,0xFF2C0002,0xDD280002,0x2BFC0A69,0x2BFC0A69,0x2BFC0A69,0x2BFC0A69,0x2BFC0A69,0x2BFC0A69,0xFED80112,0xFED80112,0xFED80112,0xDCE40001,0x97FC0A69,0x97FC0A69,0x97FC0A69,0xDC040001,0xB8000A69,0xFF6C090A,0x1740A69,0x1740A69,0xFF680782,0xFF580652,0xFF540502,0xFF540502,0xFF40028A,0xFF5808B4,0xFF500750,0xFF300132,0xFED80112, -0x7DF80A69,}; -static const uint32_t g_etc1_to_bc7_m6_table224[] = { -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1, -0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, -0x0,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1, -0x1,0x5C0001,0x5C0001,0x5C0001,0x5C0001,0x8C0000,0x8C0000,0x8C0000,0x1180000,0x1180000,0x2E000000,0x8C0000,0x8C0000,0x8C0000,0x1180000,0x1180000,0x2E000000,0x1180000,0x1180000,0x2E000000,0x2E000000,0x8C0000,0x8C0000,0x8C0000,0x1180000,0x1180000,0x2E000000,0x1180000,0x1180000,0x2E000000,0x2E000000,0x1180000, -0x1180000,0x2E000000,0x2E000000,0x2E000000,0x6C0000,0x640000,0x5C0001,0x800000,0x9C0000,0xC80000,0xE40000,0x15C0000,0x2740000,0x8C0000,0xC80000,0x2E000000,0xC80000,0x16C0001,0x25FC0000,0x95F80000,0xB6000000,0x25FC0000,0x95F80000,0xB6000000,0x95F80000,0xB6000000,0xB6000000,0x25FC0000,0x95F80000,0xB6000000,0x95F80000,0xB6000000, -0xB6000000,0x95F80000,0xB6000000,0xB6000000,0xB6000000,0x25FC0000,0x95F80000,0xB6000000,0x95F80000,0xB6000000,0xB6000000,0x95F80000,0xB6000000,0xB6000000,0xB6000000,0x95F80000,0xB6000000,0xB6000000,0xB6000000,0xB6000000,0x1CC0000,0xB840000,0xB840000,0x4FFC0000,0x87F80000,0xA5F80000,0xB6000000,0xB6000000,0x3F00000,0x67FC0000,0xB3D80000,0xB6000000, -0x79FC0000,0x7457CA,0xFE442041,0xFE2005E5,0xB62005C1,0xFE182962,0xF4000585,0xB4000094,0xAA002420,0x96000F64,0x72002420,0xEA004691,0xCC001B02,0xA2000CAD,0x98002F04,0x88001816,0x6E002950,0x72004691,0x72002CBD,0x5C0036EC,0x4C004691,0xA857CA,0xAE002A47,0x92001711,0x860037C0,0x80001F6C,0x68002DF0,0x68004B75,0x6C0031E9,0x56003AAD,0x480048F9,0x15857CA, -0x5C003E8D,0x500043F0,0x44004F85,0x380057CA,0xFE3438A1,0xFA644CC8,0xFE6C4B89,0xFE001F2A,0xE200192D,0xAC001816,0x92001141,0x82001EEA,0xFE1837C5,0xFC002039,0x86002331,0x56003AAD,0xF057CA,0x984692,0xFE5C1A55,0xFE300461,0xB6300451,0xFE302822,0xF4000585,0xB4000094,0xAA002420,0x96000F64,0x72002420,0xE44691,0xCC001B02,0xA2000CAD,0x98002F04,0x88001816, -0x6E002950,0x1D04691,0x72002CBD,0x5C0036EC,0x4C004691,0xE44691,0xCC001B02,0xA2000CAD,0x98002F04,0x88001816,0x6E002950,0x1D04691,0x72002CBD,0x5C0036EC,0x4C004691,0x1D04691,0x72002CBD,0x5C0036EC,0x4C004691,0x4C004691,0xFE503353,0xFC883FC2,0xFE8C3D0E,0xFE001F2A,0xE200192D,0xAC001816,0x92001141,0x82001EEA,0xFE3433C8,0xFC001F39,0x860022F1,0x5C0036EC, -0x1484691,0x2005C1,0x2005C1,0x2005C1,0x2005C1,0x8E000000,0x8E000000,0x8E000000,0x44000001,0x44000001,0x2E000000,0x44000451,0x44000451,0x44000451,0x3400019A,0x3400019A,0x280000CD,0x22000451,0x22000451,0x200002A8,0x16000451,0x3005C1,0x3005C1,0x3005C1,0x2E0002A3,0x2E0002A3,0x28000176,0x1E0004C1,0x1E0004C1,0x1C000311,0x1400048E,0x5C05C1, -0x5C05C1,0x16000402,0x1000051E,0xE0005C2,0xF6000171,0xF21402AC,0x2005C1,0x900001D0,0x5A0001A8,0x440001A8,0x40000161,0x2E0001F9,0x9600030A,0x66000286,0x2A00045A,0x1C000311,0x4005C1,0x300451,0x300451,0x300451,0x300451,0x8E000000,0x8E000000,0x8E000000,0x44000001,0x44000001,0x2E000000,0x440451,0x440451,0x440451,0x3400019A,0x3400019A, -0x280000CD,0x880451,0x880451,0x200002A8,0x16000451,0x440451,0x440451,0x440451,0x3400019A,0x3400019A,0x280000CD,0x880451,0x880451,0x200002A8,0x16000451,0x880451,0x880451,0x200002A8,0x16000451,0x16000451,0xF6000171,0xF8200200,0x300451,0x900001D0,0x5A0001A8,0x440001A8,0x40000161,0x2E0001F9,0x960002B9,0x6C00025D,0x600451,0x200002A8, -0x600451,0xE42422,0xFE980C49,0xF8600001,0xB65C0001,0x1542420,0xF4000585,0xB4000094,0x2FFC2420,0x96000F64,0x72002420,0x1542420,0xF4000585,0xB4000094,0x2FFC2420,0x96000F64,0x72002420,0x2FFC2420,0x96000F64,0x72002420,0x72002420,0x1542420,0xF4000585,0xB4000094,0x2FFC2420,0x96000F64,0x72002420,0x2FFC2420,0x96000F64,0x72002420,0x72002420,0x2FFC2420, -0x96000F64,0x72002420,0x72002420,0x72002420,0xFAAC1E85,0x2F42420,0xF6DC1F81,0xFE4015A0,0xF6001009,0xBC000EF9,0x9E000AE1,0x9000133D,0xFE901E08,0xFE14145D,0xA6000988,0x72002420,0x1E82420,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, -0x0,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x1,0x2,0x2,0x2,0x2,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1, -0x2,}; -static const uint32_t g_etc1_to_bc7_m6_table225[] = { -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1, -0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, -0x0,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1, -0x1,0x6C0001,0x6C0001,0x6C0001,0x6C0001,0xA40000,0xA40000,0xA40000,0x14C0000,0x14C0000,0x36000000,0xA40000,0xA40000,0xA40000,0x14C0000,0x14C0000,0x36000000,0x14C0000,0x14C0000,0x36000000,0x36000000,0xA40000,0xA40000,0xA40000,0x14C0000,0x14C0000,0x36000000,0x14C0000,0x14C0000,0x36000000,0x36000000,0x14C0000, -0x14C0000,0x36000000,0x36000000,0x36000000,0x800000,0x2740000,0x6C0001,0x940000,0xB80000,0xE80000,0x10C0000,0x1980000,0x2880000,0xA40000,0xE80000,0x36000000,0xE80000,0x17C0001,0x3DFC0000,0xA1F80000,0xBE000000,0x3DFC0000,0xA1F80000,0xBE000000,0xA1F80000,0xBE000000,0xBE000000,0x3DFC0000,0xA1F80000,0xBE000000,0xA1F80000,0xBE000000, -0xBE000000,0xA1F80000,0xBE000000,0xBE000000,0xBE000000,0x3DFC0000,0xA1F80000,0xBE000000,0xA1F80000,0xBE000000,0xBE000000,0xA1F80000,0xBE000000,0xBE000000,0xBE000000,0xA1F80000,0xBE000000,0xBE000000,0xBE000000,0xBE000000,0x1E00000,0x1980000,0x1980000,0x63FC0000,0x95F80000,0xAFF80000,0xBE000000,0xBE000000,0xFFC0000,0x77FC0000,0xBBE80000,0xBE000000, -0x87FC0000,0x7C5F3A,0xFE442651,0xFE280892,0xBE2407E1,0xFE242C5A,0xFA0004BD,0xBA000034,0xB6002420,0x9C000E48,0x7A002420,0xF8004B86,0xE2001C71,0xA8000DB5,0xA200306B,0x92001820,0x74002A0C,0x78004B89,0x78002F69,0x660039D9,0x50004B89,0xB45F3A,0xBA002DB7,0xA2001906,0x92003AA0,0x86002070,0x6E002F60,0x6E005129,0x72003541,0x60003DE9,0x4C004E42,0x1705F3A, -0x5C0043BD,0x56004888,0x440055C5,0x3C005F3A,0xFE503ED3,0xFE6C5368,0xFE6C52D9,0xFE142325,0xF600193D,0xBC0017ED,0x9E0010D5,0x8A001F71,0xFE183E05,0xFC002279,0x9400251B,0x60003DE9,0x1005F3A,0xA44B86,0xFE681ED9,0xFE38064D,0xBE3805E9,0xFE3C2A76,0xFA0004BD,0xBA000034,0xB6002420,0x9C000E48,0x7A002420,0xF44B86,0xE2001C71,0xA8000DB5,0xA200306B,0x92001820, -0x74002A0C,0x1F04B86,0x78002F69,0x660039D9,0x50004B89,0xF44B86,0xE2001C71,0xA8000DB5,0xA200306B,0x92001820,0x74002A0C,0x1F04B86,0x78002F69,0x660039D9,0x50004B89,0x1F04B86,0x78002F69,0x660039D9,0x50004B89,0x50004B89,0xFE64380A,0xFE8C4466,0xFE8C426E,0xFE1422C1,0xF600193D,0xBC0017ED,0x9E0010D5,0x8A001F71,0xFE443845,0xFC002179,0x940024CA,0x660039D9, -0x15C4B86,0x2407E1,0x2407E1,0x2407E1,0x2407E1,0xA6000000,0xA6000000,0xA6000000,0x50000001,0x50000001,0x36000000,0x500005E9,0x500005E9,0x500005E9,0x40000232,0x40000232,0x2E000121,0x280005E9,0x280005E9,0x260003A4,0x1A0005E9,0x3407E1,0x3407E1,0x3407E1,0x340003AB,0x340003AB,0x2E000202,0x2200067A,0x2200067A,0x20000441,0x18000635,0x6807E1, -0x6807E1,0x1C000576,0x160006F2,0x120007E2,0xF8040269,0xF61C042C,0x2407E1,0xA400028A,0x68000249,0x4C000254,0x4C0001E1,0x380002BA,0xA400042E,0x72000363,0x320005F2,0x20000441,0x4C07E1,0x3805E9,0x3805E9,0x3805E9,0x3805E9,0xA6000000,0xA6000000,0xA6000000,0x50000001,0x50000001,0x36000000,0x5005E9,0x5005E9,0x5005E9,0x40000232,0x40000232, -0x2E000121,0xA005E9,0xA005E9,0x260003A4,0x1A0005E9,0x5005E9,0x5005E9,0x5005E9,0x40000232,0x40000232,0x2E000121,0xA005E9,0xA005E9,0x260003A4,0x1A0005E9,0xA005E9,0xA005E9,0x260003A4,0x1A0005E9,0x1A0005E9,0xF8040265,0xFC280320,0x3805E9,0xA400028A,0x68000249,0x4C000254,0x4C0001E1,0x380002BA,0xB40003B5,0x72000332,0x7005E9,0x260003A4, -0x7005E9,0xF42422,0xFEB00D41,0xFE700002,0xBE6C0001,0x16C2420,0xFA0004BD,0xBA000034,0x3BFC2420,0x9C000E48,0x7A002420,0x16C2420,0xFA0004BD,0xBA000034,0x3BFC2420,0x9C000E48,0x7A002420,0x3BFC2420,0x9C000E48,0x7A002420,0x7A002420,0x16C2420,0xFA0004BD,0xBA000034,0x3BFC2420,0x9C000E48,0x7A002420,0x3BFC2420,0x9C000E48,0x7A002420,0x7A002420,0x3BFC2420, -0x9C000E48,0x7A002420,0x7A002420,0x7A002420,0xFEB41EAD,0xB042420,0xFEEC1F81,0xFE6C1661,0xF6000F79,0xBC000E29,0xA80009CD,0x94001248,0xFE981E3A,0xFE401528,0xB400084A,0x7A002420,0x7FC2420,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, -0x0,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x1,0x2,0x2,0x2,0x2,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1, -0x2,}; -static const uint32_t g_etc1_to_bc7_m6_table226[] = { -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1, -0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, -0x0,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1, -0x1,0x7C0001,0x7C0001,0x7C0001,0x7C0001,0xBC0000,0xBC0000,0xBC0000,0x17C0000,0x17C0000,0x3E000000,0xBC0000,0xBC0000,0xBC0000,0x17C0000,0x17C0000,0x3E000000,0x17C0000,0x17C0000,0x3E000000,0x3E000000,0xBC0000,0xBC0000,0xBC0000,0x17C0000,0x17C0000,0x3E000000,0x17C0000,0x17C0000,0x3E000000,0x3E000000,0x17C0000, -0x17C0000,0x3E000000,0x3E000000,0x3E000000,0x4900000,0xA840000,0x7C0001,0xAC0000,0xD40000,0x10C0000,0x1340000,0x1D40000,0x29C0000,0xBC0000,0x10C0000,0x3E000000,0x10C0000,0x18C0001,0x55FC0000,0xADF80000,0xC6000000,0x55FC0000,0xADF80000,0xC6000000,0xADF80000,0xC6000000,0xC6000000,0x55FC0000,0xADF80000,0xC6000000,0xADF80000,0xC6000000, -0xC6000000,0xADF80000,0xC6000000,0xC6000000,0xC6000000,0x55FC0000,0xADF80000,0xC6000000,0xADF80000,0xC6000000,0xC6000000,0xADF80000,0xC6000000,0xC6000000,0xC6000000,0xADF80000,0xC6000000,0xC6000000,0xC6000000,0xC6000000,0x1F40000,0x1A80000,0x1A80000,0x77FC0000,0xA1FC0000,0xB9F80000,0xC6000000,0xC6000000,0x2FFC0000,0x89FC0000,0xC3F80000,0xC6000000, -0x97FC0000,0x84672A,0xFE502CD1,0xFE2C0BE9,0xC6280A59,0xFE303022,0xFE0404C5,0xC6000004,0xC2002420,0xA6000D61,0x82002420,0xFE0450E5,0xE8001E1D,0xB4000EED,0xAE003223,0x98001848,0x7A002AE0,0x800050D1,0x7E00325D,0x6C003CB9,0x560050D1,0xC0672A,0xC6003187,0xA2001B66,0xA2003D84,0x920021A0,0x740030F0,0x74005745,0x780038E9,0x6600415D,0x520053E2,0x188672A, -0x66004956,0x5C004D70,0x4A005C5D,0x4000672A,0xFE504513,0xFE6C5AE8,0xF67C5B12,0xFE142775,0xF60019AD,0xBC00181D,0xA60010A0,0x90002036,0xFE3444C8,0xFE0025AA,0x96002723,0x6600415D,0x114672A,0xB050D2,0xFE7423CD,0xFE4008E2,0xC64007C1,0xFE442D24,0xFE0404C1,0xC6000004,0xC2002420,0xA6000D61,0x82002420,0x30050D1,0xE8001E1D,0xB4000EED,0xAE003223,0x98001848, -0x7A002AE0,0x5FC50D1,0x7E00325D,0x6C003CB9,0x560050D1,0x30050D1,0xE8001E1D,0xB4000EED,0xAE003223,0x98001848,0x7A002AE0,0x5FC50D1,0x7E00325D,0x6C003CB9,0x560050D1,0x5FC50D1,0x7E00325D,0x6C003CB9,0x560050D1,0x560050D1,0xFE783CC9,0xF8A049A0,0xFCA84789,0xFE142711,0xF60019AD,0xBC00181D,0xA60010A0,0x90002036,0xFC583D2B,0xFE0424A1,0x960026D2,0x6C003CB9, -0x17050D1,0x280A59,0x280A59,0x280A59,0x280A59,0xBE000000,0xBE000000,0xBE000000,0x5C000001,0x5C000001,0x3E000000,0x5C0007C1,0x5C0007C1,0x5C0007C1,0x4C0002EA,0x4C0002EA,0x3A000179,0x2E0007C1,0x2E0007C1,0x2C0004C8,0x1E0007C1,0x23C0A56,0x23C0A56,0x23C0A56,0x400004DB,0x400004DB,0x340002A6,0x28000882,0x28000882,0x2600058D,0x1E000825,0x7C0A56, -0x7C0A56,0x2000074C,0x1A00092D,0x14000A56,0xFA0803B9,0xF8200600,0x280A59,0xBA00034D,0x7C000301,0x62000308,0x5600028A,0x40000385,0xC200057A,0x9000047B,0x3A0007D1,0x2600058D,0x580A56,0x4007C1,0x4007C1,0x4007C1,0x4007C1,0xBE000000,0xBE000000,0xBE000000,0x5C000001,0x5C000001,0x3E000000,0x5C07C1,0x5C07C1,0x5C07C1,0x4C0002EA,0x4C0002EA, -0x3A000179,0xB807C1,0xB807C1,0x2C0004C8,0x1E0007C1,0x5C07C1,0x5C07C1,0x5C07C1,0x4C0002EA,0x4C0002EA,0x3A000179,0xB807C1,0xB807C1,0x2C0004C8,0x1E0007C1,0xB807C1,0xB807C1,0x2C0004C8,0x1E0007C1,0x1E0007C1,0xFC0C039D,0xFE2C0488,0x4007C1,0xBA00034D,0x7C000301,0x62000308,0x5600028A,0x40000385,0xC20004EA,0x9000042A,0x8007C1,0x2C0004C8, -0x8007C1,0x1042422,0xFEC40E2A,0xFE84002D,0xC67C0001,0x1842420,0xFE0804B5,0xC6000004,0x47FC2420,0xA6000D61,0x82002420,0x1842420,0xFE0804B5,0xC6000004,0x47FC2420,0xA6000D61,0x82002420,0x47FC2420,0xA6000D61,0x82002420,0x82002420,0x1842420,0xFE0804B5,0xC6000004,0x47FC2420,0xA6000D61,0x82002420,0x47FC2420,0xA6000D61,0x82002420,0x82002420,0x47FC2420, -0xA6000D61,0x82002420,0x82002420,0x82002420,0xFED01F04,0x1182420,0xF6FC2002,0xFE6C1711,0xFE0C0F79,0xD0000D00,0xB00008C8,0x9C001174,0xFEAC1EC1,0xFE4C15DD,0xBE000734,0x82002420,0x17FC2420,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, -0x0,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x1,0x2,0x2,0x2,0x2,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1, -0x2,}; -static const uint32_t g_etc1_to_bc7_m6_table227[] = { -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1, -0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, -0x0,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1, -0x1,0x8C0001,0x8C0001,0x8C0001,0x8C0001,0x2D00000,0x2D00000,0x2D00000,0x1AC0000,0x1AC0000,0x46000000,0x2D00000,0x2D00000,0x2D00000,0x1AC0000,0x1AC0000,0x46000000,0x1AC0000,0x1AC0000,0x46000000,0x46000000,0x2D00000,0x2D00000,0x2D00000,0x1AC0000,0x1AC0000,0x46000000,0x1AC0000,0x1AC0000,0x46000000,0x46000000,0x1AC0000, -0x1AC0000,0x46000000,0x46000000,0x46000000,0xA40000,0x980000,0x8C0001,0xC00000,0x2EC0000,0x12C0000,0x15C0000,0x5F80000,0x2B00000,0x2D00000,0x12C0000,0x46000000,0x12C0000,0x19C0001,0x6FFC0000,0xB9F80000,0xCE000000,0x6FFC0000,0xB9F80000,0xCE000000,0xB9F80000,0xCE000000,0xCE000000,0x6FFC0000,0xB9F80000,0xCE000000,0xB9F80000,0xCE000000, -0xCE000000,0xB9F80000,0xCE000000,0xCE000000,0xCE000000,0x6FFC0000,0xB9F80000,0xCE000000,0xB9F80000,0xCE000000,0xCE000000,0xB9F80000,0xCE000000,0xCE000000,0xCE000000,0xB9F80000,0xCE000000,0xCE000000,0xCE000000,0xCE000000,0x15FC0000,0x5B80000,0x5B80000,0x8BFC0000,0xAFFC0000,0xC3F80000,0xCE000000,0xCE000000,0x4DFC0000,0x99FC0000,0xCDCC0000,0xCE000000, -0xA5FC0000,0x8C6F9A,0xFE5C3409,0xFE380FFD,0xCE300D21,0xFE303482,0xFE080585,0xD0000008,0xCE002420,0xAC000C6D,0x8A002420,0xFE0C56D6,0xF4002035,0xBA00107D,0xB40033FB,0xA200187A,0x80002BCC,0x8A005671,0x84003599,0x72003FC9,0x5C005671,0xCC6F9A,0xD20035B7,0xAE001E26,0xA20040A4,0x980022EC,0x7A0032A0,0x80005DB5,0x7E003CE1,0x6C004509,0x580059E2,0x1A06F9A, -0x6C004F2A,0x5C0052B0,0x5000636D,0x44006F9A,0xFE504C53,0xF8806322,0xFA846322,0xFE142CC5,0xFC001ADA,0xCC001898,0xAE001085,0x980020F9,0xFE344BA8,0xFE0029CA,0x9E0029C1,0x6C004509,0x1246F9A,0xB85672,0xFE802931,0xFE4C0BF6,0xCE4809D9,0xFE503080,0xFE080575,0xCE040008,0xCE002420,0xAC000C6D,0x8A002420,0x1145671,0xF4002035,0xBA00107D,0xB40033FB,0xA200187A, -0x80002BCC,0xFF85671,0x84003599,0x72003FC9,0x5C005671,0x1145671,0xF4002035,0xBA00107D,0xB40033FB,0xA200187A,0x80002BCC,0xFF85671,0x84003599,0x72003FC9,0x5C005671,0xFF85671,0x84003599,0x72003FC9,0x5C005671,0x5C005671,0xFE7841F9,0xFEAC4ECC,0xFEAC4D09,0xFE302BF5,0xFC001ADA,0xCC001898,0xAE001085,0x980020F9,0xFE5C422B,0xFE0428A1,0x9E00295D,0x72003FC9, -0x18C5671,0x300D21,0x300D21,0x300D21,0x300D21,0xD6000000,0xD6000000,0xD6000000,0x68000000,0x68000000,0x46000000,0x6A0009D9,0x6A0009D9,0x6A0009D9,0x520003BA,0x520003BA,0x400001DD,0x340009D9,0x340009D9,0x32000614,0x220009D9,0x2440D21,0x2440D21,0x2440D21,0x46000633,0x46000633,0x3A000362,0x2E000AD2,0x2E000AD2,0x2C000709,0x22000A52,0x8C0D21, -0x8C0D21,0x26000948,0x1C000B96,0x16000D22,0xFC0C0561,0xFA24082C,0x300D21,0xD000042A,0x860003D9,0x6A0003D4,0x62000334,0x4A000484,0xE4000704,0x900005AB,0x400009E9,0x2C000709,0x640D21,0x4809D9,0x4809D9,0x4809D9,0x4809D9,0xD6000000,0xD6000000,0xD6000000,0x68000000,0x68000000,0x46000000,0x6809D9,0x6809D9,0x6809D9,0x520003BA,0x520003BA, -0x400001DD,0xD009D9,0xD009D9,0x32000614,0x220009D9,0x6809D9,0x6809D9,0x6809D9,0x520003BA,0x520003BA,0x400001DD,0xD009D9,0xD009D9,0x32000614,0x220009D9,0xD009D9,0xD009D9,0x32000614,0x220009D9,0x220009D9,0xFE100521,0xF4380659,0x4809D9,0xD000042A,0x860003D9,0x6A0003D4,0x62000334,0x4A000484,0xF400063D,0x9A000551,0x9409D9,0x32000614, -0x9409D9,0x1142422,0xFED00F3A,0xFE940082,0xCE8C0001,0x19C2420,0xFE080565,0xCE080000,0x53FC2420,0xAC000C6D,0x8A002420,0x19C2420,0xFE080565,0xCE080000,0x53FC2420,0xAC000C6D,0x8A002420,0x53FC2420,0xAC000C6D,0x8A002420,0x8A002420,0x19C2420,0xFE080565,0xCE080000,0x53FC2420,0xAC000C6D,0x8A002420,0x53FC2420,0xAC000C6D,0x8A002420,0x8A002420,0x53FC2420, -0xAC000C6D,0x8A002420,0x8A002420,0x8A002420,0xF6E81F81,0x1282420,0xFF0C2002,0xFE9417C2,0xFE100FE9,0xDA000BE9,0xB40007B4,0xA800109D,0xFCD01F02,0xFE6416CD,0xC6000659,0x8A002420,0x25FC2420,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, -0x0,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x1,0x2,0x2,0x2,0x2,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1, -0x2,}; -static const uint32_t g_etc1_to_bc7_m6_table228[] = { -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1, -0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, -0x0,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1, -0x1,0xA00000,0xA00000,0xA00000,0xA00000,0xEC0000,0xEC0000,0xEC0000,0x1E40000,0x1E40000,0x4E000001,0xEC0000,0xEC0000,0xEC0000,0x1E40000,0x1E40000,0x4E000001,0x1E40000,0x1E40000,0x4E000001,0x4E000001,0xEC0000,0xEC0000,0xEC0000,0x1E40000,0x1E40000,0x4E000001,0x1E40000,0x1E40000,0x4E000001,0x4E000001,0x1E40000, -0x1E40000,0x4E000001,0x4E000001,0x4E000001,0x4B80000,0xCA80000,0xA00000,0xD80000,0x10C0000,0x1540000,0x1880000,0x11FC0000,0xC80000,0xEC0000,0x1540000,0x4E000001,0x1540000,0x1B00000,0x89FC0000,0xC5FC0000,0xD6000001,0x89FC0000,0xC5FC0000,0xD6000001,0xC5FC0000,0xD6000001,0xD6000001,0x89FC0000,0xC5FC0000,0xD6000001,0xC5FC0000,0xD6000001, -0xD6000001,0xC5FC0000,0xD6000001,0xD6000001,0xD6000001,0x89FC0000,0xC5FC0000,0xD6000001,0xC5FC0000,0xD6000001,0xD6000001,0xC5FC0000,0xD6000001,0xD6000001,0xD6000001,0xC5FC0000,0xD6000001,0xD6000001,0xD6000001,0xD6000001,0x41FC0000,0x1CC0000,0x1CC0000,0xA1FC0000,0xBFF80000,0xCFF40000,0xD6000001,0xD6000001,0x6FFC0000,0xADFC0000,0xD5FC0000,0xD6000001, -0xB7FC0000,0x9479B0,0xFE5C3CE5,0xFE381579,0xD63410AD,0xFE3C3A48,0xFE08077D,0xD804003A,0xDC002420,0xB8000B51,0x92002422,0xFE185E40,0xFA0022E9,0xC6001283,0xC0003629,0xAE0018E6,0x8C002CC6,0x92005D2B,0x90003993,0x78004373,0x62005D2B,0xDC79B0,0xE2003A6D,0xB40021B4,0xAE00448A,0xA200246F,0x86003492,0x8600656B,0x840041BB,0x7200496F,0x5E006114,0x1BC79B0, -0x72005634,0x66005924,0x56006BE7,0x480079B4,0xFE645556,0xFC886C60,0xFE8C6CD0,0xFE1833EE,0xFC001D3E,0xDA0018C5,0xBC00109D,0xA00021F6,0xFE345496,0xFE042F97,0xA6002D3F,0x7200496F,0x13879B0,0xC45D2C,0xFE8C2FC1,0xFE581024,0xD6500C81,0xFE5C34E6,0xFE140759,0xDA080032,0xDC002420,0xB8000B51,0x92002422,0x3245D2B,0xFA0022E9,0xC6001283,0xC0003629,0xAE0018E6, -0x8C002CC6,0x17FC5D2B,0x90003993,0x78004373,0x62005D2B,0x3245D2B,0xFA0022E9,0xC6001283,0xC0003629,0xAE0018E6,0x8C002CC6,0x17FC5D2B,0x90003993,0x78004373,0x62005D2B,0x17FC5D2B,0x90003993,0x78004373,0x62005D2B,0x62005D2B,0xFE9448B3,0xFEAC5556,0xF8C05444,0xFE4031C3,0xFC001D3E,0xDA0018C5,0xBC00109D,0xA00021F6,0xFE5C48FD,0xFE042E53,0xA6002CDB,0x78004373, -0x1A45D2B,0x3410AC,0x3410AC,0x3410AC,0x3410AC,0xF2000000,0xF2000000,0xF2000000,0x76000000,0x76000000,0x4E000001,0x78000C80,0x78000C80,0x78000C80,0x620004A9,0x620004A9,0x46000262,0x3A000C80,0x3A000C80,0x380007B5,0x26000C82,0x5010AB,0x5010AB,0x5010AB,0x4C0007F2,0x4C0007F2,0x40000453,0x34000DC1,0x34000DC1,0x320008EE,0x24000D22,0xA010AB, -0xA010AB,0x2C000BD1,0x20000EC6,0x1A0010AB,0xFE1007AA,0xFE2C0B01,0x3410AC,0xEC000562,0x9E0004E1,0x800004FD,0x6E00040D,0x560005C9,0xF40008E9,0xB2000742,0x46000C98,0x320008EE,0x7010AB,0x500C80,0x500C80,0x500C80,0x500C80,0xF2000000,0xF2000000,0xF2000000,0x76000000,0x76000000,0x4E000001,0x2740C80,0x2740C80,0x2740C80,0x620004A9,0x620004A9, -0x46000262,0xF00C80,0xF00C80,0x380007B5,0x26000C82,0x2740C80,0x2740C80,0x2740C80,0x620004A9,0x620004A9,0x46000262,0xF00C80,0xF00C80,0x380007B5,0x26000C82,0xF00C80,0xF00C80,0x380007B5,0x26000C82,0x26000C82,0xFE200745,0xF8400884,0x500C80,0xEC000562,0x9E0004E1,0x800004FD,0x6E00040D,0x560005C9,0xF4000808,0xB20006C9,0xA80C80,0x380007B5, -0xA80C80,0x1282420,0xFEE81074,0xFEAC0124,0xD6A00001,0x1B82420,0xFE2C069D,0xD61C0001,0x61F82420,0xB8000B51,0x92002422,0x1B82420,0xFE2C069D,0xD61C0001,0x61F82420,0xB8000B51,0x92002422,0x61F82420,0xB8000B51,0x92002422,0x92002422,0x1B82420,0xFE2C069D,0xD61C0001,0x61F82420,0xB8000B51,0x92002422,0x61F82420,0xB8000B51,0x92002422,0x92002422,0x61F82420, -0xB8000B51,0x92002422,0x92002422,0x92002422,0xFEF81F85,0x13C2420,0xF9202081,0xFEB018A0,0xFE281109,0xE8000B14,0xBE0006B2,0xB2000F82,0xFEDC1F22,0xFE881771,0xD4000541,0x92002422,0x37FC2420,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, -0x0,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x1,0x2,0x2,0x2,0x2,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1, -0x2,}; -static const uint32_t g_etc1_to_bc7_m6_table229[] = { -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1, -0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, -0x0,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1, -0x1,0xB00000,0xB00000,0xB00000,0xB00000,0x1040000,0x1040000,0x1040000,0x7FC0000,0x7FC0000,0x56000001,0x1040000,0x1040000,0x1040000,0x7FC0000,0x7FC0000,0x56000001,0x7FC0000,0x7FC0000,0x56000001,0x56000001,0x1040000,0x1040000,0x1040000,0x7FC0000,0x7FC0000,0x56000001,0x7FC0000,0x7FC0000,0x56000001,0x56000001,0x7FC0000, -0x7FC0000,0x56000001,0x56000001,0x56000001,0xCC0000,0xBC0000,0xB00000,0xF00000,0x1280000,0x1740000,0x1AC0000,0x1DF40000,0xDC0000,0x1040000,0x1740000,0x56000001,0x1740000,0x1C00000,0xA3FC0000,0xD1FC0000,0xDE000001,0xA3FC0000,0xD1FC0000,0xDE000001,0xD1FC0000,0xDE000001,0xDE000001,0xA3FC0000,0xD1FC0000,0xDE000001,0xD1FC0000,0xDE000001, -0xDE000001,0xD1FC0000,0xDE000001,0xDE000001,0xDE000001,0xA3FC0000,0xD1FC0000,0xDE000001,0xD1FC0000,0xDE000001,0xDE000001,0xD1FC0000,0xDE000001,0xDE000001,0xDE000001,0xD1FC0000,0xDE000001,0xDE000001,0xDE000001,0xDE000001,0x69FC0000,0x7DC0000,0x7DC0000,0xB3FC0000,0xCBFC0000,0xD9F40000,0xDE000001,0xDE000001,0x8DFC0000,0xBDFC0000,0xDFD00000,0xDE000001, -0xC5FC0000,0x9C8330,0xFE684541,0xFE401B24,0xDE3C142D,0xFE443FEA,0xFE140A2D,0xE008009A,0xE6002422,0xC4000A69,0x9A002422,0xFE246584,0xFA002639,0xCC0014AB,0xCC003831,0xB4001956,0x92002DC2,0x9A006380,0x96003D53,0x7E0046EB,0x66006383,0xE88330,0xE8003F39,0xC0002534,0xBA00483A,0xA8002617,0x8C00366A,0x8C006CB7,0x8A00465F,0x78004D93,0x620067CB,0x1D88330, -0x78005CE4,0x6C005F04,0x5C0073EF,0x4C008334,0xFE645DA6,0xFE8C7530,0xFE8C7650,0xFE303A6D,0xFE04205E,0xDE001961,0xC40010B2,0xAA002336,0xFE445CDB,0xFE0435B7,0xB600301B,0x78004D93,0x14C8330,0xD06380,0xFE983611,0xFE641478,0xDE580F21,0xFE683962,0xFE2009C5,0xE20C007E,0xE6002422,0xC4000A69,0x9A002422,0x1346380,0xFA002639,0xCC0014AB,0xCC003831,0xB4001956, -0x92002DC2,0x1FF86380,0x96003D53,0x7E0046EB,0x66006383,0x1346380,0xFA002639,0xCC0014AB,0xCC003831,0xB4001956,0x92002DC2,0x1FF86380,0x96003D53,0x7E0046EB,0x66006383,0x1FF86380,0x96003D53,0x7E0046EB,0x66006383,0x66006383,0xFE944E93,0xFAC45BA4,0xFCC85A64,0xFE403763,0xFE04205A,0xDE001961,0xC40010B2,0xAA002336,0xFE784F21,0xFE18341D,0xB6002FA2,0x7E0046EB, -0x1B86380,0x3C142C,0x3C142C,0x3C142C,0x3C142C,0xFE000010,0xFE000010,0xFE000010,0x82000000,0x82000000,0x56000001,0x84000F20,0x84000F20,0x84000F20,0x680005A5,0x680005A5,0x4C0002EA,0x40000F20,0x40000F20,0x3E000955,0x2A000F22,0x54142B,0x54142B,0x54142B,0x580009A2,0x580009A2,0x46000543,0x3A0010A9,0x3A0010A9,0x38000ACE,0x28000FDB,0xAC142B, -0xAC142B,0x2C000E41,0x240011F3,0x1C00142B,0xFE100A3A,0xFE2C0DF1,0x3C142C,0xFA000682,0xA80005ED,0x840005EA,0x800004FD,0x56000709,0xF4000B09,0xB20008D2,0x52000F39,0x38000ACE,0x78142B,0x580F20,0x580F20,0x580F20,0x580F20,0xFE04000D,0xFE04000D,0xFE04000D,0x82000000,0x82000000,0x56000001,0x2800F20,0x2800F20,0x2800F20,0x680005A5,0x680005A5, -0x4C0002EA,0x1080F20,0x1080F20,0x3E000955,0x2A000F22,0x2800F20,0x2800F20,0x2800F20,0x680005A5,0x680005A5,0x4C0002EA,0x1080F20,0x1080F20,0x3E000955,0x2A000F22,0x1080F20,0x1080F20,0x3E000955,0x2A000F22,0x2A000F22,0xFE200965,0xFC480AB4,0x580F20,0xFA000682,0xA80005ED,0x840005EA,0x800004FD,0x56000709,0xF6040A20,0xBC000848,0xB80F20,0x3E000955, -0xB80F20,0x1382420,0xFF0011A4,0xFEB801F4,0xDEB00001,0x1D02420,0xFE4C07F9,0xDE2C0001,0x6DF82420,0xC4000A69,0x9A002422,0x1D02420,0xFE4C07F9,0xDE2C0001,0x6DF82420,0xC4000A69,0x9A002422,0x6DF82420,0xC4000A69,0x9A002422,0x9A002422,0x1D02420,0xFE4C07F9,0xDE2C0001,0x6DF82420,0xC4000A69,0x9A002422,0x6DF82420,0xC4000A69,0x9A002422,0x9A002422,0x6DF82420, -0xC4000A69,0x9A002422,0x9A002422,0x9A002422,0xFD102000,0x14C2420,0xFF2C208D,0xFEC01945,0xFE501231,0xF6000A12,0xC80005D2,0xBA000EBA,0xFEF01FA9,0xFEA01865,0xDE000465,0x9A002422,0x45FC2420,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0, -0x0,0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1,0x1,0x1,0x2,0x2,0x2,0x2,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x1, -0x2,}; -static const uint32_t g_etc1_to_bc7_m6_table230[] = { -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1, -0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x40000,0x40000,0x40000,0x40000,0x40000,0x40000,0x40000,0x40000,0x40000,0x40000,0x40000,0x40000,0x40000,0x40000,0x40000, -0x40000,0x80000,0x80000,0x80000,0x1,0x40000,0x40000,0x40000,0x40000,0x40000,0x40000,0x80000,0x80000,0x80000,0x1,0x80000,0x80000,0x80000,0x1,0x1,0x40000,0x40000,0x40000,0x40000,0x40000,0x40000,0x40000,0x40000,0x40000,0x40000,0x80000,0x80000, -0x80000,0xC00000,0xC00000,0xC00000,0xC00000,0x11C0000,0x11C0000,0x11C0000,0x13FC0000,0x13FC0000,0x5E000001,0x11C0000,0x11C0000,0x11C0000,0x13FC0000,0x13FC0000,0x5E000001,0x13FC0000,0x13FC0000,0x5E000001,0x5E000001,0x11C0000,0x11C0000,0x11C0000,0x13FC0000,0x13FC0000,0x5E000001,0x13FC0000,0x13FC0000,0x5E000001,0x5E000001,0x13FC0000, -0x13FC0000,0x5E000001,0x5E000001,0x5E000001,0xE00000,0xCC0000,0xC00000,0x1040000,0x3400000,0x1980000,0x1D40000,0x27F80000,0xF00000,0x11C0000,0x1980000,0x5E000001,0x1980000,0x1D00000,0xBBFC0000,0xDDFC0000,0xE6000001,0xBBFC0000,0xDDFC0000,0xE6000001,0xDDFC0000,0xE6000001,0xE6000001,0xBBFC0000,0xDDFC0000,0xE6000001,0xDDFC0000,0xE6000001, -0xE6000001,0xDDFC0000,0xE6000001,0xE6000001,0xE6000001,0xBBFC0000,0xDDFC0000,0xE6000001,0xDDFC0000,0xE6000001,0xE6000001,0xDDFC0000,0xE6000001,0xE6000001,0xE6000001,0xDDFC0000,0xE6000001,0xE6000001,0xE6000001,0xE6000001,0x91FC0000,0xFEC0000,0xFEC0000,0xC7FC0000,0xD9FC0000,0xE3F40000,0xE6000001,0xE6000001,0xABFC0000,0xCFFC0000,0xE7E00000,0xE6000001, -0xD5FC0000,0xA48BEC,0xFE744D71,0xFE4C20D8,0xE6401785,0xFE5045F6,0xFE140D79,0xEC0C0111,0xF2042424,0xCA00098D,0xA2002426,0xFE306BE4,0xFA002945,0xD80015EB,0xD8003941,0xC00018FE,0x98002E12,0xA2006878,0x9C003FBB,0x84004933,0x6C00687B,0xF48BEC,0xEE004349,0xC6002804,0xC6004B2A,0xAE002717,0x920037A6,0x980072CF,0x960049C7,0x7E00509F,0x68006D47,0x1F08BEC, -0x7E0062AC,0x72006404,0x5C007ADF,0x52008BEC,0xFE786595,0xFE8C7DDC,0xF8A07F6D,0xFE3040E1,0xFE04237E,0xEE00192E,0xC8000FFB,0xB6002345,0xFE546487,0xFE043C07,0xB60031CB,0x7E00509F,0x15C8BEC,0xDC6878,0xFEA43B8D,0xFE701888,0xE6601145,0xFE743D82,0xFE2C0C8D,0xEA1400D9,0xF2042420,0xCA00098D,0xA2042422,0x3446878,0xFA002945,0xD80015EB,0xD8003941,0xC00018FE, -0x98002E12,0x27FC6878,0x9C003FBB,0x84004933,0x6C00687B,0x3446878,0xFA002945,0xD80015EB,0xD8003941,0xC00018FE,0x98002E12,0x27FC6878,0x9C003FBB,0x84004933,0x6C00687B,0x27FC6878,0x9C003FBB,0x84004933,0x6C00687B,0x6C00687B,0xFEA053D2,0xFECC6050,0xFECC5F74,0xFE543C9E,0xFE04237A,0xEE00192E,0xC8000FFB,0xB6002345,0xFE885438,0xFE2C3966,0xB6003152,0x84004933, -0x1D46878,0x401784,0x401784,0x401784,0x401784,0xFE0C0074,0xFE0C0074,0xFE0C0074,0x8E000004,0x8E000004,0x5E000005,0x94001142,0x94001142,0x94001142,0x74000631,0x74000631,0x5800030A,0x48001142,0x48001142,0x44000A69,0x30001142,0x601783,0x601783,0x601783,0x62000ACD,0x62000ACD,0x4C0005EB,0x4000132D,0x4000132D,0x3E000C3A,0x2E00122B,0xC41783, -0xC41783,0x3200106D,0x260014AE,0x20001783,0xFE200C8D,0xFE2C110D,0x401784,0xFA00078A,0xBC000679,0x8C000682,0x8C000559,0x6A0007B2,0xFE000D14,0xD00009C2,0x5C001166,0x3E000C3A,0x8C1783,0x601144,0x601144,0x601144,0x601144,0xFE0C0050,0xFE0C0050,0xFE0C0050,0x8C040001,0x8C040001,0x5E040001,0x901142,0x901142,0x901142,0x74000631,0x74000631, -0x5800030A,0x1241142,0x1241142,0x44000A69,0x30001142,0x901142,0x901142,0x901142,0x74000631,0x74000631,0x5800030A,0x1241142,0x1241142,0x44000A69,0x30001142,0x1241142,0x1241142,0x44000A69,0x30001142,0x30001142,0xFA340B48,0xFE4C0CA0,0x601144,0xFA00078A,0xBC000679,0x8C000682,0x8C000559,0x6A0007B2,0xFE0C0BE2,0xD0000919,0xD01142,0x44000A69, -0xD01142,0x1482420,0xFF0C12C8,0xFECC02FD,0xE6C00001,0x1E82420,0xFE640949,0xE63C0001,0x79F82420,0xCA000989,0xA2002422,0x1E82420,0xFE640949,0xE63C0001,0x79F82420,0xCA000989,0xA2002422,0x79F82420,0xCA000989,0xA2002422,0xA2002422,0x1E82420,0xFE640949,0xE63C0001,0x79F82420,0xCA000989,0xA2002422,0x79F82420,0xCA000989,0xA2002422,0xA2002422,0x79F82420, -0xCA000989,0xA2002422,0xA2002422,0xA2002422,0xFF142048,0x75C2420,0xF9402104,0xFED81A29,0xFE68133D,0xFC000928,0xD40004ED,0xC2000DFA,0xFF102000,0xFEC01919,0xE60003BA,0xA2002422,0x55FC2420,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4,0x4000000,0x4000000,0x4000000,0x4000000,0x4000000, -0x4000000,0x2000000,0x2000000,0x2000000,0x1,0x2000002,0x2000002,0x2000002,0x2000002,0x2000002,0x2000002,0x1,0x1,0x1,0x1,0x2,0x2,0x2,0x2,0x2,0x18000000,0x4,0x4,0xA000000,0x8000000,0x6000000,0x6000000,0x4000000,0x4000001,0x2000001,0x2000000,0x1, -0x2,}; -static const uint32_t g_etc1_to_bc7_m6_table231[] = { -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1, -0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x140000,0x140000,0x140000,0x140000,0x140000,0x140000,0x140000,0x140000,0x140000,0x140000,0x1C0000,0x1C0000,0x1C0000,0x1C0000,0x1C0000, -0x1C0000,0x380000,0x380000,0x380000,0x8000001,0x1C0000,0x1C0000,0x1C0000,0x1C0000,0x1C0000,0x1C0000,0x380000,0x380000,0x380000,0x8000001,0x380000,0x380000,0x380000,0x8000001,0x8000001,0x2140000,0x140000,0x140000,0x180000,0x180000,0x2180000,0x2180000,0x200000,0x180000,0x180000,0x280000,0x380000, -0x280000,0xD00000,0xD00000,0xD00000,0xD00000,0x1340000,0x1340000,0x1340000,0x1FF80000,0x1FF80000,0x66000001,0x1340000,0x1340000,0x1340000,0x1FF80000,0x1FF80000,0x66000001,0x1FF80000,0x1FF80000,0x66000001,0x66000001,0x1340000,0x1340000,0x1340000,0x1FF80000,0x1FF80000,0x66000001,0x1FF80000,0x1FF80000,0x66000001,0x66000001,0x1FF80000, -0x1FF80000,0x66000001,0x66000001,0x66000001,0x2F00000,0x6DC0000,0xD00000,0x3180000,0x15C0000,0x1B80000,0x1FC0000,0x33F40000,0x1040000,0x1340000,0x1B80000,0x66000001,0x1B80000,0x1E00000,0xD3FC0000,0xE9FC0000,0xEE000001,0xD3FC0000,0xE9FC0000,0xEE000001,0xE9FC0000,0xEE000001,0xEE000001,0xD3FC0000,0xE9FC0000,0xEE000001,0xE9FC0000,0xEE000001, -0xEE000001,0xE9FC0000,0xEE000001,0xEE000001,0xEE000001,0xD3FC0000,0xE9FC0000,0xEE000001,0xE9FC0000,0xEE000001,0xEE000001,0xE9FC0000,0xEE000001,0xEE000001,0xEE000001,0xE9FC0000,0xEE000001,0xEE000001,0xEE000001,0xEE000001,0xB7FC0000,0x17FC0000,0x17FC0000,0xDBFC0000,0xE7F80000,0xEDF40000,0xEE000001,0xEE000001,0xC9FC0000,0xE1FC0000,0xEFF00000,0xEE000001, -0xE3FC0000,0xB09144,0xFE805385,0xFE582588,0xEE4C19B9,0xFE5C4AD6,0xFE201109,0xF6140195,0xFC0C2454,0xD6000915,0xAA082456,0xFE3C6E48,0xFE08296D,0xE200142D,0xE80036E6,0xC60015E6,0xA2002BFB,0xAE006878,0xA6003DB5,0x90004763,0x7400687B,0x1049144,0xFA004419,0xD2002844,0xD2004B5A,0xBA00258F,0x9E0036E6,0xA2007431,0x9C0048BB,0x8A004FCF,0x6E006E1B,0x7FC9144, -0x840064EC,0x780065C4,0x66007DB4,0x58009144,0xFE786AC5,0xFAA48366,0xFEAC8499,0xFE40451B,0xFE04257E,0xFC0015D9,0xD2000D46,0xB6002035,0xFE5C697E,0xFE184056,0xBE002F7B,0x8A004FCF,0x1749144,0xEC6878,0xFEB03D85,0xFE7C1A74,0xEE701145,0xFE8C3F52,0xFE380EE1,0xF22400D9,0xFA142420,0xD6000915,0xAA142422,0x35C6878,0xFE08295D,0xE200142D,0xE80036E6,0xC60015E6, -0xA2002BFB,0x33FC6878,0xA6003DB5,0x90004763,0x7400687B,0x35C6878,0xFE08295D,0xE200142D,0xE80036E6,0xC60015E6,0xA2002BFB,0x33FC6878,0xA6003DB5,0x90004763,0x7400687B,0x33FC6878,0xA6003DB5,0x90004763,0x7400687B,0x7400687B,0xFEB45485,0xF8E06116,0xFAE4601D,0xFE6C3E89,0xFE102549,0xFC0015D9,0xD2000D46,0xB6002035,0xFE985529,0xFE403AFB,0xBE002EEB,0x90004763, -0x1F46878,0x4C19B8,0x4C19B8,0x4C19B8,0x4C19B8,0xFE180124,0xFE180124,0xFE180124,0x98080034,0x98080034,0x66080035,0xAC001142,0xAC001142,0xAC001142,0x80000521,0x80000521,0x620001FD,0x54001142,0x54001142,0x4A000989,0x38001142,0x7019B8,0x7019B8,0x7019B8,0x6E000AFD,0x6E000AFD,0x58000593,0x4C0013E5,0x4C0013E5,0x44000BEA,0x34001283,0xE419B8, -0xE419B8,0x38001155,0x2C0015E6,0x240019BB,0xFE200E1D,0xFA441304,0x4C19B8,0xFE08079A,0xD4000562,0xA2000562,0x96000448,0x6E0006AD,0xFE000E34,0xF2000912,0x6600116E,0x44000BEA,0xA019B8,0x701144,0x701144,0x701144,0x701144,0xFE240080,0xFE240080,0xFE240080,0x94140001,0x94140001,0x66140001,0xA81142,0xA81142,0xA81142,0x80000521,0x80000521, -0x620001FD,0x1581142,0x1581142,0x4A000989,0x38001142,0xA81142,0xA81142,0xA81142,0x80000521,0x80000521,0x620001FD,0x1581142,0x1581142,0x4A000989,0x38001142,0x1581142,0x1581142,0x4A000989,0x38001142,0x38001142,0xFE3C0B68,0xFA640CD1,0x701144,0xFE08078A,0xD4000562,0xA2000562,0x96000448,0x6E0006AD,0xFE140C14,0xF2000831,0xF01142,0x4A000989, -0xF01142,0x1582420,0xFF241408,0xFEE40425,0xEED00001,0x3FC2420,0xFE880AB5,0xEE4C0001,0x85F82420,0xD60008B1,0xAA002422,0x3FC2420,0xFE880AB5,0xEE4C0001,0x85F82420,0xD60008B1,0xAA002422,0x85F82420,0xD60008B1,0xAA002422,0xAA002422,0x3FC2420,0xFE880AB5,0xEE4C0001,0x85F82420,0xD60008B1,0xAA002422,0x85F82420,0xD60008B1,0xAA002422,0xAA002422,0x85F82420, -0xD60008B1,0xAA002422,0xAA002422,0xAA002422,0xFF342081,0xF6C2420,0xFF4C2114,0xFEEC1AC8,0xFE90147D,0xFE040910,0xDE000431,0xD0000D22,0xFF182032,0xFECC1A04,0xF2000301,0xAA002422,0x63FC2420,0x80034,0x80034,0x80034,0x80034,0x80034,0x80034,0x80034,0x80034,0x80034,0x80034,0x1C000000,0x1C000000,0x1C000000,0x1C000000,0x1C000000, -0x1C000000,0xE000000,0xE000000,0xE000000,0x8000001,0x20C0032,0x20C0032,0x20C0032,0x20C0032,0x20C0032,0x20C0032,0xC000011,0xC000011,0xC000011,0x800000A,0x180032,0x180032,0x180032,0x4000022,0x4000032,0x98000000,0x80034,0x80034,0x44000000,0x2E000000,0x24000000,0x24000000,0x18000000,0x3600000D,0x24000008,0x12000001,0xC000011, -0x140032,}; -static const uint32_t g_etc1_to_bc7_m6_table232[] = { -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1, -0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x240001,0x240001,0x240001,0x240001,0x240001,0x240001,0x240001,0x240001,0x240001,0x240001,0x380000,0x380000,0x380000,0x380000,0x380000, -0x380000,0x700000,0x700000,0x700000,0x12000000,0x380000,0x380000,0x380000,0x380000,0x380000,0x380000,0x700000,0x700000,0x700000,0x12000000,0x700000,0x700000,0x700000,0x12000000,0x12000000,0x280000,0x240001,0x240001,0x2C0000,0x300000,0x340000,0x340000,0x400000,0x2C0000,0x300000,0x500000,0x700000, -0x500000,0xE00001,0xE00001,0xE00001,0xE00001,0x1500000,0x1500000,0x1500000,0x2DF80000,0x2DF80000,0x70000000,0x1500000,0x1500000,0x1500000,0x2DF80000,0x2DF80000,0x70000000,0x2DF80000,0x2DF80000,0x70000000,0x70000000,0x1500000,0x1500000,0x1500000,0x2DF80000,0x2DF80000,0x70000000,0x2DF80000,0x2DF80000,0x70000000,0x70000000,0x2DF80000, -0x2DF80000,0x70000000,0x70000000,0x70000000,0x7040000,0xF00000,0xE00001,0x1340000,0x17C0000,0x1E00000,0x11FC0000,0x3FF40000,0x11C0000,0x1500000,0x1E00000,0x70000000,0x1E00000,0x1F00001,0xEFFC0000,0xF7F80000,0xF8000000,0xEFFC0000,0xF7F80000,0xF8000000,0xF7F80000,0xF8000000,0xF8000000,0xEFFC0000,0xF7F80000,0xF8000000,0xF7F80000,0xF8000000, -0xF8000000,0xF7F80000,0xF8000000,0xF8000000,0xF8000000,0xEFFC0000,0xF7F80000,0xF8000000,0xF7F80000,0xF8000000,0xF8000000,0xF7F80000,0xF8000000,0xF8000000,0xF8000000,0xF7F80000,0xF8000000,0xF8000000,0xF8000000,0xF8000000,0xE3FC0000,0xA7FC0000,0xA7FC0000,0xF1FC0000,0xF5FC0000,0xF9F00000,0xF8000000,0xF8000000,0xEBFC0000,0xF3FC0000,0xF9E40000,0xF8000000, -0xF5FC0000,0xC097BB,0xFE8C5AEA,0xFE642B8F,0xF8581C9A,0xFE6850F9,0xFE3815EA,0xFC200282,0xFE14251D,0xDE040922,0xB41424D5,0xFE4471AC,0xFE082B02,0xEE0012C6,0xF40034A9,0xD20012B1,0xAE002A0C,0xBC006878,0xB2003B2E,0x9600456C,0x7E006878,0x31897B9,0xFA004686,0xE200290A,0xE2004B75,0xC6002442,0xA8003621,0xAE00761C,0xA60047DF,0x90004F04,0x7A006EE8,0x11FC97B9, -0x900067C5,0x7E006825,0x6C008115,0x5E0097B9,0xFE8C716F,0xFEAC89AD,0xFEAC8B86,0xFE544AE1,0xFE1028CE,0xFC00135A,0xDE000A4D,0xCA001CD5,0xFE707042,0xFE244643,0xD6002C8C,0x90004F04,0x19497B9,0xFC687B,0xFEC43F8B,0xFE941CBB,0xF8841142,0xFE984159,0xFE5811F2,0xFC3800DA,0xFE2C2431,0xDE10090E,0xB4242421,0x1786878,0xFE082AF2,0xEE0012C6,0xF40034A9,0xD20012B1, -0xAE002A0C,0x41FC6878,0xB2003B2E,0x9600456C,0x7E006878,0x1786878,0xFE082AF2,0xEE0012C6,0xF40034A9,0xD20012B1,0xAE002A0C,0x41FC6878,0xB2003B2E,0x9600456C,0x7E006878,0x41FC6878,0xB2003B2E,0x9600456C,0x7E006878,0x7E006878,0xFED055D8,0xFEEC6131,0xFEEC6086,0xFE8040FD,0xFE242846,0xFC00135A,0xDE000A4D,0xCA001CD5,0xFEB456A6,0xFE5C3DAE,0xD6002BE3,0x9600456C, -0xFFC6878,0x581C9A,0x581C9A,0x581C9A,0x581C9A,0xFE240266,0xFE240266,0xFE240266,0xA21400B5,0xA21400B5,0x701400B5,0xC8001142,0xC8001142,0xC8001142,0x9200040D,0x9200040D,0x68000121,0x60001144,0x60001144,0x56000895,0x40001144,0x2801C9A,0x2801C9A,0x2801C9A,0x7A000B7D,0x7A000B7D,0x6200056D,0x580014D3,0x580014D3,0x50000BA2,0x400012FD,0x1081C9A, -0x1081C9A,0x440012AD,0x32001788,0x2A001C9D,0xFC38101A,0xFE4C1596,0x581C9A,0xFE100871,0xF2000448,0xC0000464,0xAA00031D,0x80000585,0xFE140FDB,0xFC000884,0x7C001182,0x50000BA2,0xB81C9A,0x841142,0x841142,0x841142,0x841142,0xFE3400C1,0xFE3400C1,0xFE3400C1,0x9E240001,0x9E240001,0x70240001,0xC41142,0xC41142,0xC41142,0x9200040D,0x9200040D, -0x68000121,0x18C1142,0x18C1142,0x56000895,0x40001144,0xC41142,0xC41142,0xC41142,0x9200040D,0x9200040D,0x68000121,0x18C1142,0x18C1142,0x56000895,0x40001144,0x18C1142,0x18C1142,0x56000895,0x40001144,0x40001144,0xFE580B95,0xFE6C0D0D,0x841142,0xFE1807E9,0xF2000448,0xC0000464,0xAA00031D,0x80000585,0xFE340C31,0xFC000784,0x1181142,0x56000895, -0x1181142,0x1682422,0xFF301572,0xFEFC05B9,0xF8E00001,0x1FFC2420,0xFEA00C69,0xF85C0000,0x91FC2420,0xDC0007D9,0xB4002420,0x1FFC2420,0xFEA00C69,0xF85C0000,0x91FC2420,0xDC0007D9,0xB4002420,0x91FC2420,0xDC0007D9,0xB4002420,0xB4002420,0x1FFC2420,0xFEA00C69,0xF85C0000,0x91FC2420,0xDC0007D9,0xB4002420,0x91FC2420,0xDC0007D9,0xB4002420,0xB4002420,0x91FC2420, -0xDC0007D9,0xB4002420,0xB4002420,0xB4002420,0xFD4C2102,0x9802420,0xFB642185,0xFF141BC1,0xFEA815C1,0xFE0409FA,0xE8000371,0xD8000C44,0xFF2C20D5,0xFEF01B2D,0xFE000248,0xB4002420,0x75FC2420,0x1400B5,0x1400B5,0x1400B5,0x1400B5,0x1400B5,0x1400B5,0x1400B5,0x1400B5,0x1400B5,0x1400B5,0x38000000,0x38000000,0x38000000,0x38000000,0x38000000, -0x38000000,0x1C000000,0x1C000000,0x1C000000,0x12000000,0x1C00B5,0x1C00B5,0x1C00B5,0x1C00B5,0x1C00B5,0x1C00B5,0x18000044,0x18000044,0x18000044,0x12000024,0x3000B5,0x3000B5,0x3000B5,0xA000071,0x80000B5,0xFA040005,0x1400B5,0x1400B5,0x84000000,0x5C000000,0x46000000,0x46000000,0x2E000000,0x76000035,0x5600001A,0x22000004,0x18000044, -0x2400B5,}; -static const uint32_t g_etc1_to_bc7_m6_table233[] = { -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1, -0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x340001,0x340001,0x340001,0x340001,0x340001,0x340001,0x340001,0x340001,0x340001,0x340001,0x500000,0x500000,0x500000,0x500000,0x500000, -0x500000,0xA00000,0xA00000,0xA00000,0x1A000000,0x500000,0x500000,0x500000,0x500000,0x500000,0x500000,0xA00000,0xA00000,0xA00000,0x1A000000,0xA00000,0xA00000,0xA00000,0x1A000000,0x1A000000,0x4380000,0x340001,0x340001,0x63C0000,0x440000,0x480000,0x480000,0x580000,0x63C0000,0x440000,0x700000,0xA00000, -0x700000,0xF00001,0xF00001,0xF00001,0xF00001,0x1680000,0x1680000,0x1680000,0x39F80000,0x39F80000,0x78000000,0x1680000,0x1680000,0x1680000,0x39F80000,0x39F80000,0x78000000,0x39F80000,0x39F80000,0x78000000,0x78000000,0x1680000,0x1680000,0x1680000,0x39F80000,0x39F80000,0x78000000,0x39F80000,0x39F80000,0x78000000,0x78000000,0x39F80000, -0x39F80000,0x78000000,0x78000000,0x78000000,0x3180000,0x9000000,0xF00001,0x1480000,0x3940000,0x3FC0000,0x1FF80000,0x49F80000,0x1300000,0x1680000,0x3FC0000,0x78000000,0x3FC0000,0x1FC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000, -0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xF7FC0001,0xF7FC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFFF00000,0xFE000000, -0xFFFC0000,0xC89B73,0xFE98601A,0xFE70308B,0xFE641F86,0xFE7454F9,0xFE3819DE,0xFE280401,0xFE20257D,0xE4100916,0xBA1C2481,0xFE507334,0xFE142CA6,0xFA0011D2,0xFA0031B5,0xDE000F8D,0xB4002774,0xC6006693,0xB80037EE,0x9C004258,0x86006694,0x12C9B71,0xFA0048EA,0xE20029B6,0xE8004A85,0xCC0022AE,0xAE003499,0xBA0075EC,0xB20045F3,0x9A004CE6,0x80006DCC,0x1BF89B71, -0x9600690D,0x8A0068A1,0x7200821D,0x64009B71,0xFE94756C,0xF8C08E33,0xFAC48FAF,0xFE544EB5,0xFE242B66,0xFC0011E2,0xEA0007C2,0xD0001968,0xFE7873EA,0xFE40496C,0xD6002964,0x9A004CE6,0x1AC9B71,0x10C6693,0xFED04023,0xFEAC1E33,0xFE941142,0xFEB0416D,0xFE6413AA,0xFE4400F5,0xFE402373,0xE41C08A6,0xBA342315,0x38C6693,0xFE202C26,0xFA0011D2,0xFA0031B5,0xDE000F8D, -0xB4002774,0x4BFC6693,0xB80037EE,0x9C004258,0x86006694,0x38C6693,0xFE202C26,0xFA0011D2,0xFA0031B5,0xDE000F8D,0xB4002774,0x4BFC6693,0xB80037EE,0x9C004258,0x86006694,0x4BFC6693,0xB80037EE,0x9C004258,0x86006694,0x86006694,0xFED05534,0xF900600B,0xFD085F33,0xFE9440FA,0xFE3829B2,0xFC0011E2,0xEA0007C2,0xD0001968,0xFEC455C3,0xFE843E6A,0xDE0028A6,0x9C004258, -0x1DF86693,0x641F86,0x641F86,0x641F86,0x641F86,0xFE280401,0xFE280401,0xFE280401,0xAC1C016D,0xAC1C016D,0x781C016D,0xE0001142,0xE0001142,0xE0001142,0xA200031D,0xA200031D,0x74000089,0x6C001144,0x6C001144,0x5C0007D9,0x48001144,0x901F85,0x901F85,0x901F85,0x86000C35,0x86000C35,0x680005B5,0x620015A4,0x620015A4,0x58000B8A,0x46001365,0x1241F85, -0x1241F85,0x4A001419,0x3E001918,0x30001F85,0xFE3C123E,0xF45818B1,0x641F86,0xFE180989,0xFC000384,0xC8000368,0xB800025D,0x8C0004A5,0xFE201212,0xFE0008CA,0x8600118A,0x58000B8A,0xD01F85,0x941142,0x941142,0x941142,0x941142,0xFE4400F5,0xFE4400F5,0xFE4400F5,0xA6340001,0xA6340001,0x78340001,0xDC1142,0xDC1142,0xDC1142,0xA200031D,0xA200031D, -0x74000089,0x1BC1142,0x1BC1142,0x5C0007D9,0x48001144,0xDC1142,0xDC1142,0xDC1142,0xA200031D,0xA200031D,0x74000089,0x1BC1142,0x1BC1142,0x5C0007D9,0x48001144,0x1BC1142,0x1BC1142,0x5C0007D9,0x48001144,0x48001144,0xFA6C0BE2,0xFC880D22,0x941142,0xFE340845,0xFC000384,0xC8000368,0xB800025D,0x8C0004A5,0xFA480C82,0xFE0407B4,0x1381142,0x5C0007D9, -0x1381142,0x1782312,0xFF441595,0xFF0806B9,0xFEF00001,0x35FC2312,0xFEB80D39,0xFE700000,0x9DF42312,0xE60006C4,0xBA002314,0x35FC2312,0xFEB80D39,0xFE700000,0x9DF42312,0xE60006C4,0xBA002314,0x9DF42312,0xE60006C4,0xBA002314,0xBA002314,0x35FC2312,0xFEB80D39,0xFE700000,0x9DF42312,0xE60006C4,0xBA002314,0x9DF42312,0xE60006C4,0xBA002314,0xBA002314,0x9DF42312, -0xE60006C4,0xBA002314,0xBA002314,0xBA002314,0xFF502032,0x1902312,0xFF6C2099,0xFF201B94,0xFED01619,0xFE180AF1,0xF20002A1,0xE0000B14,0xFD502000,0xFF081AAA,0xFE0001C4,0xBA002314,0x81FC2312,0x1C016D,0x1C016D,0x1C016D,0x1C016D,0x1C016D,0x1C016D,0x1C016D,0x1C016D,0x1C016D,0x1C016D,0x50000000,0x50000000,0x50000000,0x50000000,0x50000000, -0x50000000,0x26000001,0x26000001,0x26000001,0x1A000000,0x28016D,0x28016D,0x28016D,0x28016D,0x28016D,0x28016D,0x22000082,0x22000082,0x22000082,0x18000044,0x4C016D,0x4C016D,0x4C016D,0x100000DD,0xC00016D,0xFE0C003D,0x1C016D,0x1C016D,0xBC000000,0x82000000,0x64000000,0x64000000,0x42000000,0xA0000074,0x7400003A,0x32000009,0x22000082, -0x34016D,}; -static const uint32_t g_etc1_to_bc7_m6_table234[] = { -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1, -0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x440001,0x440001,0x440001,0x440001,0x440001,0x440001,0x440001,0x440001,0x440001,0x440001,0x680000,0x680000,0x680000,0x680000,0x680000, -0x680000,0xD00000,0xD00000,0xD00000,0x22000000,0x680000,0x680000,0x680000,0x680000,0x680000,0x680000,0xD00000,0xD00000,0xD00000,0x22000000,0xD00000,0xD00000,0xD00000,0x22000000,0x22000000,0xC480000,0x440001,0x440001,0x500000,0x580000,0x25C0000,0x25C0000,0x740000,0x500000,0x580000,0x940000,0xD00000, -0x940000,0x1000001,0x1000001,0x1000001,0x1000001,0x1800000,0x1800000,0x1800000,0x45F80000,0x45F80000,0x80000000,0x1800000,0x1800000,0x1800000,0x45F80000,0x45F80000,0x80000000,0x45F80000,0x45F80000,0x80000000,0x80000000,0x1800000,0x1800000,0x1800000,0x45F80000,0x45F80000,0x80000000,0x45F80000,0x45F80000,0x80000000,0x80000000,0x45F80000, -0x45F80000,0x80000000,0x80000000,0x80000000,0x12C0000,0x1140000,0x1000001,0x35C0000,0x1B00000,0x13FC0000,0x2BFC0000,0x55F40000,0x1440000,0x1800000,0x13FC0000,0x80000000,0x13FC0000,0x1FC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000, -0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xF7FC0001,0xF7FC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFFF00000,0xFE000000, -0xFFFC0000,0xD0985B,0xFEA46016,0xFE7C32E7,0xFE6C22C6,0xFE80534D,0xFE4C1AEE,0xFE300602,0xFE2C22E1,0xE8180846,0xBE242169,0xFE5C6E98,0xFE142B26,0xFC001148,0xFA002BC5,0xE2000B41,0xBA0021D8,0xD0005F33,0xBE0031CA,0xA6003B0D,0x8A005F34,0x1389859,0xFC004866,0xE80029FE,0xEE004581,0xD2001F56,0xB4002FCD,0xC0006FCC,0xB20040B3,0x9C004648,0x86006704,0x21F89859, -0x9C0065F9,0x8A0063E1,0x78007CE9,0x68009859,0xFEA072F9,0xFCC88B1B,0xFECC8CE7,0xFE6C4D3A,0xFE2829D6,0xFE040EE2,0xEE0004B9,0xD6001419,0xFE7871FA,0xFE4047CC,0xDE00246A,0x9C004648,0x1BC9859,0x1185F33,0xFEE83C13,0xFEB81D03,0xFEA41142,0xFEC43C4B,0xFE7C126A,0xFE5C013D,0xFE4C1F8B,0xE8300726,0xBE441F05,0x1A05F33,0xFE3829C6,0xFC001148,0xFA002BC5,0xE2000B41, -0xBA0021D8,0x55F85F33,0xBE0031CA,0xA6003B0D,0x8A005F34,0x1A05F33,0xFE3829C6,0xFC001148,0xFA002BC5,0xE2000B41,0xBA0021D8,0x55F85F33,0xBE0031CA,0xA6003B0D,0x8A005F34,0x55F85F33,0xBE0031CA,0xA6003B0D,0x8A005F34,0x8A005F34,0xFEE44F59,0xFF0C58D3,0xFF0C5843,0xFEB03CE2,0xFE4826EA,0xFE040EDE,0xEE0004B9,0xD6001419,0xFEDC4F89,0xFE8439AA,0xDE0023A6,0xA6003B0D, -0x27FC5F33,0x6C22C6,0x6C22C6,0x6C22C6,0x6C22C6,0xFE300602,0xFE300602,0xFE300602,0xB6240265,0xB6240265,0x80240265,0xF8001142,0xF8001142,0xF8001142,0xAE00025D,0xAE00025D,0x80000031,0x78001144,0x78001144,0x66000728,0x50001144,0xA422C5,0xA422C5,0xA422C5,0x92000D2D,0x92000D2D,0x7400063D,0x6E0016B4,0x6E0016B4,0x60000B84,0x4C0013E5,0x14C22C5, -0x14C22C5,0x500015CD,0x44001AD8,0x360022C5,0xFE4C14D5,0xFA641BA9,0x6C22C6,0xFE240B44,0xFE040388,0xE20002B1,0xCC00019A,0x960003E8,0xFC301481,0xFE000A0A,0x9600119B,0x60000B84,0xE822C5,0xA41142,0xA41142,0xA41142,0xA41142,0xFE5C013D,0xFE5C013D,0xFE5C013D,0xAE440001,0xAE440001,0x80440001,0xF41142,0xF41142,0xF41142,0xAE00025D,0xAE00025D, -0x80000031,0x1F01142,0x1F01142,0x66000728,0x50001144,0xF41142,0xF41142,0xF41142,0xAE00025D,0xAE00025D,0x80000031,0x1F01142,0x1F01142,0x66000728,0x50001144,0x1F01142,0x1F01142,0x66000728,0x50001144,0x50001144,0xFE740C02,0xFE8C0D6A,0xA41142,0xFE440894,0xFE040384,0xE20002B1,0xCC00019A,0x960003E8,0xFE500CB2,0xFE1807FD,0x15C1142,0x66000728, -0x15C1142,0x1801F02,0xFF501315,0xFF2005F1,0xFF000001,0x41FC1F02,0xFECC0BD5,0xFE880000,0xA1FC1F02,0xEC0004C8,0xBE001F04,0x41FC1F02,0xFECC0BD5,0xFE880000,0xA1FC1F02,0xEC0004C8,0xBE001F04,0xA1FC1F02,0xEC0004C8,0xBE001F04,0xBE001F04,0x41FC1F02,0xFECC0BD5,0xFE880000,0xA1FC1F02,0xEC0004C8,0xBE001F04,0xA1FC1F02,0xEC0004C8,0xBE001F04,0xBE001F04,0xA1FC1F02, -0xEC0004C8,0xBE001F04,0xBE001F04,0xBE001F04,0xF7681C99,0x5981F02,0xFF6C1D09,0xFF30184D,0xFEE81379,0xFE4809A1,0xF4000164,0xE0000894,0xFD581C22,0xFF1417A5,0xFE000124,0xBE001F04,0x89FC1F02,0x240265,0x240265,0x240265,0x240265,0x240265,0x240265,0x240265,0x240265,0x240265,0x240265,0x6A000000,0x6A000000,0x6A000000,0x6A000000,0x6A000000, -0x6A000000,0x32000001,0x32000001,0x32000001,0x22000000,0x340265,0x340265,0x340265,0x340265,0x340265,0x340265,0x280000DA,0x280000DA,0x280000DA,0x1E000074,0x640265,0x640265,0x640265,0x16000171,0x10000265,0xF21400C8,0x240265,0x240265,0xF6000000,0xAA000000,0x82000000,0x82000000,0x54000000,0xC40000C1,0x96000061,0x40000010,0x280000DA, -0x480265,}; -static const uint32_t g_etc1_to_bc7_m6_table235[] = { -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1, -0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x540001,0x540001,0x540001,0x540001,0x540001,0x540001,0x540001,0x540001,0x540001,0x540001,0x800000,0x800000,0x800000,0x800000,0x800000, -0x800000,0x1000000,0x1000000,0x1000000,0x2A000000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x1000000,0x1000000,0x1000000,0x2A000000,0x1000000,0x1000000,0x1000000,0x2A000000,0x2A000000,0x5C0000,0x540001,0x540001,0x640000,0x6C0000,0x740000,0x740000,0x900000,0x640000,0x6C0000,0xB40000,0x1000000, -0xB40000,0x1100001,0x1100001,0x1100001,0x1100001,0x1980000,0x1980000,0x1980000,0x51F80000,0x51F80000,0x88000000,0x1980000,0x1980000,0x1980000,0x51F80000,0x51F80000,0x88000000,0x51F80000,0x51F80000,0x88000000,0x88000000,0x1980000,0x1980000,0x1980000,0x51F80000,0x51F80000,0x88000000,0x51F80000,0x51F80000,0x88000000,0x88000000,0x51F80000, -0x51F80000,0x88000000,0x88000000,0x88000000,0x73C0000,0x1240000,0x1100001,0x1740000,0x1CC0000,0x21FC0000,0x39FC0000,0x5FF80000,0x1580000,0x1980000,0x21FC0000,0x88000000,0x21FC0000,0x1FC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000, -0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xF7FC0001,0xF7FC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFFF00000,0xFE000000, -0xFFFC0000,0xD895C3,0xFEB0608A,0xFE8835A3,0xFE78265A,0xFE80521D,0xFE581C6A,0xFE440859,0xFE3820E5,0xEC2007F6,0xC22C1ED1,0xFE686AA4,0xFE202A26,0xFE0C116E,0xFE04269A,0xE80007B5,0xC0001CD4,0xD600582B,0xC4002C2E,0xAC003425,0x90005828,0x14495C1,0xFE08488A,0xEE002B26,0xF400410D,0xD8001CB6,0xB4002B8D,0xC6006A14,0xB8003BF7,0xA4004028,0x8C00609C,0x27F895C1, -0x9C006399,0x90005FA9,0x7E00782D,0x6C0095C1,0xFEA07179,0xFECC888F,0xFECC8AE7,0xFE6C4C2A,0xFE382902,0xFE040CD2,0xF4000288,0xD8000F71,0xFE906FEE,0xFE5046F2,0xE600202C,0xA4004028,0x1D095C1,0x120582B,0xFEF43833,0xFEC01C1A,0xFEB41142,0xFED03783,0xFE88113A,0xFE680195,0xFE641BE3,0xEA4005CA,0xC2541B35,0x1B05828,0xFE4C27C5,0xFE141142,0xFE08268D,0xE80007B5, -0xC0001CD4,0x5DF45828,0xC4002C2E,0xAC003425,0x90005828,0x1B05828,0xFE4C27C5,0xFE141142,0xFE08268D,0xE80007B5,0xC0001CD4,0x5DF45828,0xC4002C2E,0xAC003425,0x90005828,0x5DF45828,0xC4002C2E,0xAC003425,0x90005828,0x90005828,0xFEF8494A,0xFF0C5253,0xFF0C5243,0xFEB03872,0xFE682411,0xFE040CCE,0xF4000288,0xD8000F71,0xFEDC4979,0xFE9035DE,0xE6001F68,0xAC003425, -0x31FC5828,0x78265A,0x78265A,0x78265A,0x78265A,0xFE440859,0xFE440859,0xFE440859,0xC02C039D,0xC02C039D,0x882C039D,0xFE0C116E,0xFE0C116E,0xFE0C116E,0xBA0001BD,0xBA0001BD,0x88000004,0x84001144,0x84001144,0x72000668,0x58001144,0x2B0265A,0x2B0265A,0x2B0265A,0xA2000E36,0xA2000E36,0x7A00070D,0x740017D8,0x740017D8,0x68000B94,0x5200147D,0x168265A, -0x168265A,0x560017C9,0x4A001CC8,0x3A00265D,0xFE5817D5,0xFE6C1F01,0x78265A,0xFE340D49,0xFE14045E,0xEE0001F4,0xDA000112,0xAA00031D,0xFE341721,0xFE100BF2,0xA60011A8,0x68000B94,0xFC265A,0xB41142,0xB41142,0xB41142,0xB41142,0xFE680195,0xFE680195,0xFE680195,0xB6540001,0xB6540001,0x88540001,0x10C1142,0x10C1142,0x10C1142,0xBA0001BD,0xBA0001BD, -0x88000004,0xBF81142,0xBF81142,0x72000668,0x58001144,0x10C1142,0x10C1142,0x10C1142,0xBA0001BD,0xBA0001BD,0x88000004,0xBF81142,0xBF81142,0x72000668,0x58001144,0xBF81142,0xBF81142,0x72000668,0x58001144,0x58001144,0xFE900C31,0xFCA80D75,0xB41142,0xFE5C08C9,0xFE1803E8,0xEE0001F4,0xDA000112,0xAA00031D,0xFA700CD1,0xFE300869,0x17C1142,0x72000668, -0x17C1142,0x1881B32,0xFF5C10BD,0xFF2C052D,0xFF100001,0x4DFC1B32,0xFEE40A55,0xFEA00000,0xA7FC1B32,0xEC000328,0xC2001B34,0x4DFC1B32,0xFEE40A55,0xFEA00000,0xA7FC1B32,0xEC000328,0xC2001B34,0xA7FC1B32,0xEC000328,0xC2001B34,0xC2001B34,0x4DFC1B32,0xFEE40A55,0xFEA00000,0xA7FC1B32,0xEC000328,0xC2001B34,0xA7FC1B32,0xEC000328,0xC2001B34,0xC2001B34,0xA7FC1B32, -0xEC000328,0xC2001B34,0xC2001B34,0xC2001B34,0xFB7018F1,0x9A01B32,0xFB841962,0xFF401540,0xFEE81109,0xFE480871,0xF800009D,0xE4000665,0xFF5C1892,0xFF2014D2,0xFE1000E5,0xC2001B34,0x91FC1B32,0x2C039D,0x2C039D,0x2C039D,0x2C039D,0x2C039D,0x2C039D,0x2C039D,0x2C039D,0x2C039D,0x2C039D,0x82000000,0x82000000,0x82000000,0x82000000,0x82000000, -0x82000000,0x3E000001,0x3E000001,0x3E000001,0x2A000000,0x40039D,0x40039D,0x40039D,0x40039D,0x40039D,0x40039D,0x34000152,0x34000152,0x34000152,0x280000AD,0x7C039D,0x7C039D,0x7C039D,0x1C00022D,0x1400039D,0xF61C0188,0x2C039D,0x2C039D,0xFE04001D,0xD2000000,0xA0000000,0xA0000000,0x68000000,0xF6000121,0xC2000099,0x50000019,0x34000152, -0x58039D,}; -static const uint32_t g_etc1_to_bc7_m6_table236[] = { -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1, -0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x680000,0x680000,0x680000,0x680000,0x680000,0x680000,0x680000,0x680000,0x680000,0x680000,0x2980000,0x2980000,0x2980000,0x2980000,0x2980000, -0x2980000,0x1380000,0x1380000,0x1380000,0x32000001,0x2980000,0x2980000,0x2980000,0x2980000,0x2980000,0x2980000,0x1380000,0x1380000,0x1380000,0x32000001,0x1380000,0x1380000,0x1380000,0x32000001,0x32000001,0xE6C0000,0x680000,0x680000,0x780000,0x2800000,0x8C0000,0x8C0000,0x2AC0000,0x780000,0x2800000,0xDC0000,0x1380000, -0xDC0000,0x1240000,0x1240000,0x1240000,0x1240000,0x3B00000,0x3B00000,0x3B00000,0x5DFC0000,0x5DFC0000,0x90000001,0x3B00000,0x3B00000,0x3B00000,0x5DFC0000,0x5DFC0000,0x90000001,0x5DFC0000,0x5DFC0000,0x90000001,0x90000001,0x3B00000,0x3B00000,0x3B00000,0x5DFC0000,0x5DFC0000,0x90000001,0x5DFC0000,0x5DFC0000,0x90000001,0x90000001,0x5DFC0000, -0x5DFC0000,0x90000001,0x90000001,0x90000001,0x1540000,0x1380000,0x1240000,0x18C0000,0x1EC0000,0x33FC0000,0x49F80000,0x6BF80000,0x36C0000,0x3B00000,0x33FC0000,0x90000001,0x33FC0000,0x1FC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000, -0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xF7FC0001,0xF7FC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFFF00000,0xFE000000, -0xFFFC0000,0xE49371,0xFEB06174,0xFE943921,0xFE842AC8,0xFE8C5159,0xFE641E9A,0xFE500B99,0xFE401F71,0xEE300834,0xC8341C7D,0xFE7466F6,0xFE2C29B8,0xFE181234,0xFE0821B1,0xEE000485,0xC60017E2,0xE00050A2,0xCA002684,0xB2002CE1,0x960050A2,0x150936F,0xFE0849BC,0xEE002D78,0xFA003CBD,0xE2001A89,0xBA00277B,0xCC006426,0xC0003749,0xAA0039C2,0x920059D2,0x2DF8936F, -0xA60061D4,0x96005B93,0x8400735F,0x7000936F,0xFEB46FEE,0xFECC86CD,0xF6DC89B8,0xFE804B93,0xFE3C288E,0xFE040BB2,0xF80000EC,0xE0000ADE,0xFE986E7F,0xFE544677,0xF0001BFE,0xAA0039C2,0x1E0936F,0x12C50A5,0xFF00340D,0xFED81AE4,0xFEC41144,0xFEDC3275,0xFEA01012,0xFE8001F9,0xFE701821,0xEA580474,0xC8681735,0x1C050A2,0xFE642553,0xFE2C1144,0xFE0821A1,0xEE000485, -0xC60017E2,0x65F850A2,0xCA002684,0xB2002CE1,0x960050A2,0x1C050A2,0xFE642553,0xFE2C1144,0xFE0821A1,0xEE000485,0xC60017E2,0x65F850A2,0xCA002684,0xB2002CE1,0x960050A2,0x65F850A2,0xCA002684,0xB2002CE1,0x960050A2,0x960050A2,0xFEF84350,0xFB244B59,0xFD284B14,0xFEC033C8,0xFE7C2149,0xFE040BAE,0xF80000EC,0xE0000ADE,0xFEF843BD,0xFEA431C2,0xF0001B1D,0xB2002CE1, -0x3DF850A2,0x842AC8,0x842AC8,0x842AC8,0x842AC8,0xFE500B99,0xFE500B99,0xFE500B99,0xCC340548,0xCC340548,0x90340549,0xFE181234,0xFE181234,0xFE181234,0xCC000121,0xCC000121,0x92040009,0x92001142,0x92001142,0x7E0005AA,0x62001142,0xC42AC8,0xC42AC8,0xC42AC8,0xA8000FDA,0xA8000FDA,0x86000849,0x80001946,0x80001946,0x74000BC6,0x5E001523,0x18C2AC8, -0x18C2AC8,0x5C001A61,0x50001F2E,0x40002ACB,0xFE681BBA,0xF67C23A8,0x842AC8,0xFE441026,0xFE1805AA,0xFC000171,0xEA000088,0xB6000274,0xFE3C1B18,0xFE180E8E,0xB60011C3,0x74000BC6,0x1182AC8,0xC41144,0xC41144,0xC41144,0xC41144,0xFE8001F9,0xFE8001F9,0xFE8001F9,0xBE680001,0xBE680001,0x90680001,0x3241142,0x3241142,0x3241142,0xCC000121,0xCC000121, -0x900C0001,0x17FC1142,0x17FC1142,0x7E0005AA,0x62001142,0x3241142,0x3241142,0x3241142,0xCC000121,0xCC000121,0x900C0001,0x17FC1142,0x17FC1142,0x7E0005AA,0x62001142,0x17FC1142,0x17FC1142,0x7E0005AA,0x62001142,0x62001142,0xFEA00C82,0xF6BC0DC8,0xC41144,0xFE78094D,0xFE2C046A,0xFC000171,0xEA000088,0xB6000274,0xFE780D0D,0xFE4808B4,0x1A41142,0x7E0005AA, -0x1A41142,0x1901735,0xFF680E48,0xFF380464,0xFF240000,0x59FC1735,0xFEFC08C8,0xFEB80001,0xADFC1735,0xF20001B1,0xC8001735,0x59FC1735,0xFEFC08C8,0xFEB80001,0xADFC1735,0xF20001B1,0xC8001735,0xADFC1735,0xF20001B1,0xC8001735,0xC8001735,0x59FC1735,0xFEFC08C8,0xFEB80001,0xADFC1735,0xF20001B1,0xC8001735,0xADFC1735,0xF20001B1,0xC8001735,0xC8001735,0xADFC1735, -0xF20001B1,0xC8001735,0xC8001735,0xC8001735,0xFF781522,0x1AC1735,0xFF8C1589,0xFF401231,0xFEFC0E90,0xFE840734,0xFC000014,0xEC000454,0xFF701520,0xFF4011AD,0xFE3000C5,0xC8001735,0x99FC1735,0x340548,0x340548,0x340548,0x340548,0x340548,0x340548,0x340548,0x340548,0x340548,0x340548,0x9C000000,0x9C000000,0x9C000000,0x9C000000,0x9C000000, -0x9C000000,0x4C000000,0x4C000000,0x4C000000,0x32000001,0x4C0548,0x4C0548,0x4C0548,0x4C0548,0x4C0548,0x4C0548,0x3A0001F9,0x3A0001F9,0x3A0001F9,0x2E0000FA,0x980548,0x980548,0x980548,0x2000034D,0x1800054A,0xFA2402AD,0x340548,0x340548,0xFE100091,0xFE000000,0xC2000000,0xC2000000,0x7E000000,0xFC000200,0xE40000DD,0x60000024,0x3A0001F9, -0x6C0548,}; -static const uint32_t g_etc1_to_bc7_m6_table237[] = { -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1, -0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x780000,0x780000,0x780000,0x780000,0x780000,0x780000,0x780000,0x780000,0x780000,0x780000,0x2B00000,0x2B00000,0x2B00000,0x2B00000,0x2B00000, -0x2B00000,0x1680000,0x1680000,0x1680000,0x3A000001,0x2B00000,0x2B00000,0x2B00000,0x2B00000,0x2B00000,0x2B00000,0x1680000,0x1680000,0x1680000,0x3A000001,0x1680000,0x1680000,0x1680000,0x3A000001,0x3A000001,0x800000,0x780000,0x780000,0x8C0000,0x2940000,0xA40000,0xA40000,0xC80000,0x8C0000,0x2940000,0xFC0000,0x1680000, -0xFC0000,0x1340000,0x1340000,0x1340000,0x1340000,0x1C80000,0x1C80000,0x1C80000,0x69FC0000,0x69FC0000,0x98000001,0x1C80000,0x1C80000,0x1C80000,0x69FC0000,0x69FC0000,0x98000001,0x69FC0000,0x69FC0000,0x98000001,0x98000001,0x1C80000,0x1C80000,0x1C80000,0x69FC0000,0x69FC0000,0x98000001,0x69FC0000,0x69FC0000,0x98000001,0x98000001,0x69FC0000, -0x69FC0000,0x98000001,0x98000001,0x98000001,0x5640000,0x1480000,0x1340000,0x1A40000,0x7FC0000,0x41FC0000,0x55FC0000,0x77F40000,0x3800000,0x1C80000,0x41FC0000,0x98000001,0x41FC0000,0x1FC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000, -0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xF7FC0001,0xF7FC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFFF00000,0xFE000000, -0xFFFC0000,0xEC91E9,0xFEC46279,0xFEA03CA5,0xFE902F14,0xFE985139,0xFE64210A,0xFE5C0EF9,0xFE4C1EBD,0xF23808E4,0xCC3C1AF5,0xFE806462,0xFE3829E8,0xFE241378,0xFE081E61,0xF000026D,0xCC00141E,0xE8004A4E,0xD0002208,0xB80026E5,0x9C004A4E,0x15C91E7,0xFE084BDC,0xF4003058,0xFA0039ED,0xE2001939,0xC000247F,0xD8005F3E,0xC60033B5,0xAE00348E,0x98005432,0x33F891E7, -0xA60060B4,0x9C005887,0x8A006F9B,0x740091E7,0xFEBC6F6D,0xF8E085F5,0xFAE48878,0xFE804B93,0xFE4C28D8,0xFE100BA9,0xFC000045,0xE40007A9,0xFE986E0F,0xFE5C46BB,0xF60018B4,0xAE00348E,0x1F091E7,0x1384A4D,0xFF0C3095,0xFEE419E8,0xFED41144,0xFEE82E49,0xFEAC0F1E,0xFE980269,0xFE881509,0xEE6C0364,0xCC7813ED,0x1D04A4D,0xFE70234B,0xFE441142,0xFE141E3D,0xF000026D, -0xCC00141E,0x6DF84A4D,0xD0002208,0xB80026E5,0x9C004A4E,0x1D04A4D,0xFE70234B,0xFE441142,0xFE141E3D,0xF000026D,0xCC00141E,0x6DF84A4D,0xD0002208,0xB80026E5,0x9C004A4E,0x6DF84A4D,0xD0002208,0xB80026E5,0x9C004A4E,0x9C004A4E,0xFF143E02,0xFF2C4531,0xFF2C4538,0xFED43009,0xFE901F05,0xFE240B1D,0xFC000045,0xE40007A9,0xFEF83E4D,0xFEC02DC4,0xF60017D3,0xB80026E5, -0x45FC4A4D,0x902F14,0x902F14,0x902F14,0x902F14,0xFE5C0EF9,0xFE5C0EF9,0xFE5C0EF9,0xD63C0708,0xD63C0708,0x983C0709,0xFE241378,0xFE241378,0xFE241378,0xD80000B9,0xD80000B9,0x9A080035,0x9E001142,0x9E001142,0x84000502,0x6A001142,0x2D02F13,0x2D02F13,0x2D02F13,0xB400119A,0xB400119A,0x8C0009B1,0x8C001AA6,0x8C001AA6,0x7A000C12,0x620015C2,0x1AC2F13, -0x1AC2F13,0x66001D13,0x56002186,0x46002F13,0xFE681F7A,0xFC8827B4,0x902F14,0xFE4C1319,0xFE2C078E,0xFE040199,0xFC000041,0xC00001D4,0xFE501E81,0xFE301181,0xC60011D4,0x7A000C12,0x12C2F13,0xD41144,0xD41144,0xD41144,0xD41144,0xFE980269,0xFE980269,0xFE980269,0xC6780001,0xC6780001,0x98780001,0x33C1142,0x33C1142,0x33C1142,0xD80000B9,0xD80000B9, -0x981C0001,0x23FC1142,0x23FC1142,0x84000502,0x6A001142,0x33C1142,0x33C1142,0x33C1142,0xD80000B9,0xD80000B9,0x981C0001,0x23FC1142,0x23FC1142,0x84000502,0x6A001142,0x23FC1142,0x23FC1142,0x84000502,0x6A001142,0x6A001142,0xFAB40CD1,0xFECC0DC8,0xD41144,0xFE880994,0xFE4804D9,0xFE0C0190,0xFC000041,0xC00001D4,0xFE940D2A,0xFE5C0901,0x1C81142,0x84000502, -0x1C81142,0x19813ED,0xFF740C44,0xFF4C03D9,0xFF340000,0x65FC13ED,0xFF080784,0xFED00000,0xB3FC13ED,0xF80000CD,0xCC0013ED,0x65FC13ED,0xFF080784,0xFED00000,0xB3FC13ED,0xF80000CD,0xCC0013ED,0xB3FC13ED,0xF80000CD,0xCC0013ED,0xCC0013ED,0x65FC13ED,0xFF080784,0xFED00000,0xB3FC13ED,0xF80000CD,0xCC0013ED,0xB3FC13ED,0xF80000CD,0xCC0013ED,0xCC0013ED,0xB3FC13ED, -0xF80000CD,0xCC0013ED,0xCC0013ED,0xCC0013ED,0xFF781232,0x1B413ED,0xFF8C1289,0xFF580FA1,0xFF100C84,0xFE980631,0xFE0C0000,0xF20002D0,0xFF701220,0xFF400F1D,0xFE5000A9,0xCC0013ED,0x9FFC13ED,0x3C0708,0x3C0708,0x3C0708,0x3C0708,0x3C0708,0x3C0708,0x3C0708,0x3C0708,0x3C0708,0x3C0708,0xB6000000,0xB6000000,0xB6000000,0xB6000000,0xB6000000, -0xB6000000,0x58000000,0x58000000,0x58000000,0x3A000001,0x580708,0x580708,0x580708,0x580708,0x580708,0x580708,0x460002A1,0x460002A1,0x460002A1,0x34000152,0xB00708,0xB00708,0xB00708,0x2600045D,0x1C00070A,0xFE2C03F5,0x3C0708,0x3C0708,0xFA180154,0xFC080029,0xE0000000,0xE0000000,0x92000000,0xFA080322,0xFE000140,0x70000031,0x460002A1, -0x7C0708,}; -static const uint32_t g_etc1_to_bc7_m6_table238[] = { -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1, -0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x880000,0x880000,0x880000,0x880000,0x880000,0x880000,0x880000,0x880000,0x880000,0x880000,0xC80000,0xC80000,0xC80000,0xC80000,0xC80000, -0xC80000,0x1980000,0x1980000,0x1980000,0x42000001,0xC80000,0xC80000,0xC80000,0xC80000,0xC80000,0xC80000,0x1980000,0x1980000,0x1980000,0x42000001,0x1980000,0x1980000,0x1980000,0x42000001,0x42000001,0x900000,0x880000,0x880000,0x49C0000,0x2A80000,0xB80000,0xB80000,0xE40000,0x49C0000,0x2A80000,0x1200000,0x1980000, -0x1200000,0x1440000,0x1440000,0x1440000,0x1440000,0x1E00000,0x1E00000,0x1E00000,0x75FC0000,0x75FC0000,0xA0000001,0x1E00000,0x1E00000,0x1E00000,0x75FC0000,0x75FC0000,0xA0000001,0x75FC0000,0x75FC0000,0xA0000001,0xA0000001,0x1E00000,0x1E00000,0x1E00000,0x75FC0000,0x75FC0000,0xA0000001,0x75FC0000,0x75FC0000,0xA0000001,0xA0000001,0x75FC0000, -0x75FC0000,0xA0000001,0xA0000001,0xA0000001,0x1780000,0x5580000,0x1440000,0x1B80000,0x1BFC0000,0x51FC0000,0x63FC0000,0x81F80000,0x3940000,0x1E00000,0x51FC0000,0xA0000001,0x51FC0000,0x1FC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000, -0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xF7FC0001,0xF7FC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFFF00000,0xFE000000, -0xFFFC0000,0xF490E1,0xFEC46419,0xFEA04085,0xFE9833B4,0xFEA451A9,0xFE7023E2,0xFE5C12C9,0xFE581EA9,0xF6400A14,0xD04419ED,0xFE806262,0xFE402ADB,0xFE301544,0xFE141BF1,0xF60000F9,0xD00010E6,0xF000444D,0xD6001E14,0xBE002159,0xA000444E,0x16890DF,0xFE144EC8,0xFA003418,0xFA00381D,0xE80018CD,0xC6002223,0xE2005A92,0xCC0030B1,0xB4002FCA,0x98004EF2,0x39F890DF, -0xAC006018,0x9C005607,0x8A006C1B,0x780090DF,0xFEBC6F7D,0xFCE884ED,0xFEEC87B8,0xFE944C1E,0xFE50299A,0xFE180BFB,0xFE040069,0xEA0004E2,0xFEB46DCE,0xFE704795,0xF6001634,0xB4002FCA,0x3FC90DF,0x144444D,0xFF182D4D,0xFEF01904,0xFEE41144,0xFEF42A65,0xFEB80E5A,0xFEA402D5,0xFE941241,0xF07C0278,0xD08810E5,0x1E0444D,0xFE882153,0xFE5C1142,0xFE2C1B35,0xF60000F9, -0xD00010E6,0x75FC444D,0xD6001E14,0xBE002159,0xA000444E,0x1E0444D,0xFE882153,0xFE5C1142,0xFE2C1B35,0xF60000F9,0xD00010E6,0x75FC444D,0xD6001E14,0xBE002159,0xA000444E,0x75FC444D,0xD6001E14,0xBE002159,0xA000444E,0xA000444E,0xFF20392D,0xFF2C3FE1,0xF9404005,0xFEEC2C7A,0xFEA41CE9,0xFE380A7D,0xFE0C0050,0xEA0004E2,0xFF08395E,0xFEC82A3E,0xF6001553,0xBE002159, -0x51FC444D,0x9833B4,0x9833B4,0x9833B4,0x9833B4,0xFE5C12C9,0xFE5C12C9,0xFE5C12C9,0xE0440908,0xE0440908,0xA0440909,0xFE301544,0xFE301544,0xFE301544,0xE8000059,0xE8000059,0xA20C0089,0xAA001142,0xAA001142,0x9000046A,0x72001142,0xE433B3,0xE433B3,0xE433B3,0xC000139A,0xC000139A,0x98000B59,0x98001C26,0x98001C26,0x86000C7A,0x6E001672,0x1D033B3, -0x1D033B3,0x6C001FE3,0x5C00240E,0x4C0033B3,0xFE7423B8,0xFE8C2C28,0x9833B4,0xFE541675,0xFE2C09CE,0xFE0C0274,0xFE040069,0xCC00015A,0xFE5022C1,0xFE3014B1,0xD60011ED,0x86000C7A,0x14833B3,0xE41144,0xE41144,0xE41144,0xE41144,0xFEA402D5,0xFEA402D5,0xFEA402D5,0xCE880001,0xCE880001,0xA0880001,0x1541142,0x1541142,0x1541142,0xE8000059,0xE8000059, -0xA02C0001,0x2FFC1142,0x2FFC1142,0x9000046A,0x72001142,0x1541142,0x1541142,0x1541142,0xE8000059,0xE8000059,0xA02C0001,0x2FFC1142,0x2FFC1142,0x9000046A,0x72001142,0x2FFC1142,0x2FFC1142,0x9000046A,0x72001142,0x72001142,0xFEBC0CF9,0xF6DC0E1D,0xE41144,0xFE9809E5,0xFE5C0551,0xFE2001E2,0xFE0C0050,0xCC00015A,0xFAAC0D75,0xFE740975,0x1E81142,0x9000046A, -0x1E81142,0x1A010E5,0xFF800A68,0xFF58033D,0xFF440000,0x71FC10E5,0xFF200654,0xFEE80000,0xB9FC10E5,0xF800003D,0xD00010E5,0x71FC10E5,0xFF200654,0xFEE80000,0xB9FC10E5,0xF800003D,0xD00010E5,0xB9FC10E5,0xF800003D,0xD00010E5,0xD00010E5,0x71FC10E5,0xFF200654,0xFEE80000,0xB9FC10E5,0xF800003D,0xD00010E5,0xB9FC10E5,0xF800003D,0xD00010E5,0xD00010E5,0xB9FC10E5, -0xF800003D,0xD00010E5,0xD00010E5,0xD00010E5,0xFD900F79,0x1BC10E5,0xF79C0FD4,0xFF6C0D2A,0xFF280A82,0xFEC00544,0xFE340000,0xF2000190,0xF7880F79,0xFF4C0CE2,0xFE700090,0xD00010E5,0xA7FC10E5,0x440908,0x440908,0x440908,0x440908,0x440908,0x440908,0x440908,0x440908,0x440908,0x440908,0xCE000000,0xCE000000,0xCE000000,0xCE000000,0xCE000000, -0xCE000000,0x64000000,0x64000000,0x64000000,0x42000001,0x640908,0x640908,0x640908,0x640908,0x640908,0x640908,0x52000369,0x52000369,0x52000369,0x3A0001BA,0xCC0908,0xCC0908,0xCC0908,0x2C000595,0x2000090A,0xFE2C05A5,0x440908,0x440908,0xFE200244,0xFE0C009D,0xFE000000,0xFE000000,0xA6000000,0xFE100482,0xFE000200,0x7E000041,0x52000369, -0x900908,}; -static const uint32_t g_etc1_to_bc7_m6_table239[] = { -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1, -0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x980000,0x980000,0x980000,0x980000,0x980000,0x980000,0x980000,0x980000,0x980000,0x980000,0xE00000,0xE00000,0xE00000,0xE00000,0xE00000, -0xE00000,0x1CC0000,0x1CC0000,0x1CC0000,0x4A000001,0xE00000,0xE00000,0xE00000,0xE00000,0xE00000,0xE00000,0x1CC0000,0x1CC0000,0x1CC0000,0x4A000001,0x1CC0000,0x1CC0000,0x1CC0000,0x4A000001,0x4A000001,0x8A00000,0x980000,0x980000,0xB00000,0x2BC0000,0x2CC0000,0x2CC0000,0x1000000,0xB00000,0x2BC0000,0x1400000,0x1CC0000, -0x1400000,0x1540000,0x1540000,0x1540000,0x1540000,0x1F80000,0x1F80000,0x1F80000,0x81FC0000,0x81FC0000,0xA8000001,0x1F80000,0x1F80000,0x1F80000,0x81FC0000,0x81FC0000,0xA8000001,0x81FC0000,0x81FC0000,0xA8000001,0xA8000001,0x1F80000,0x1F80000,0x1F80000,0x81FC0000,0x81FC0000,0xA8000001,0x81FC0000,0x81FC0000,0xA8000001,0xA8000001,0x81FC0000, -0x81FC0000,0xA8000001,0xA8000001,0xA8000001,0x18C0000,0xD680000,0x1540000,0x3CC0000,0x2FFC0000,0x5FFC0000,0x71FC0000,0x8BFC0000,0x3A80000,0x1F80000,0x5FFC0000,0xA8000001,0x5FFC0000,0x1FC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000, -0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xF7FC0001,0xF7FC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFFF00000,0xFE000000, -0xFFFC0000,0xFC9059,0xFED0662D,0xFEAC44A9,0xFEA438A8,0xFEB052A9,0xFE7C2732,0xFE6816F9,0xFE581F29,0xFA480BC4,0xD44C1965,0xFE8C60F6,0xFE4C2C1F,0xFE3C1798,0xFE201A39,0xFA000035,0xD4080E36,0xF8003EA2,0xDC001AA8,0xC4001C3D,0xA6003EA2,0x1749057,0xFE20521C,0xFC0038AF,0xFA00374D,0xEE001919,0xCC002067,0xE2005652,0xD2002E3D,0xBA002B7E,0xA20049CB,0x3FF89057, -0xB2006024,0xA6005459,0x9000690F,0x7C009057,0xFED06FC2,0xFEEC8481,0xFEEC87D8,0xFE984D29,0xFE602AF8,0xFE240D01,0xFE100125,0xF00002D9,0xFEB46DDE,0xFE80487B,0xFE001462,0xBA002B7E,0xBFC9057,0x14C3EA5,0xFF242A35,0xFF081824,0xFEF41144,0xFF0026C9,0xFECC0DAC,0xFEBC0355,0xFEAC0FB9,0xF28C01B4,0xD4980E1D,0x1F03EA2,0xFEA01F7B,0xFE741142,0xFE381881,0xFA000035, -0xD4100E1E,0x7DF83EA2,0xDC001AA8,0xC4001C3D,0xA6003EA2,0x1F03EA2,0xFEA01F7B,0xFE741142,0xFE381881,0xFA000035,0xD4100E1E,0x7DF83EA2,0xDC001AA8,0xC4001C3D,0xA6003EA2,0x7DF83EA2,0xDC001AA8,0xC4001C3D,0xA6003EA2,0xA6003EA2,0xFF343494,0xFB443A79,0xFD483A9D,0xFEEC292A,0xFEA81AF3,0xFE480A18,0xFE280088,0xF00002D9,0xFF1834C1,0xFEDC273A,0xFE001362,0xC4001C3D, -0x5BFC3EA2,0xA438A8,0xA438A8,0xA438A8,0xA438A8,0xFE6816F9,0xFE6816F9,0xFE6816F9,0xEA4C0B48,0xEA4C0B48,0xA84C0B49,0xFE3C1798,0xFE3C1798,0xFE3C1798,0xFA000025,0xFA000025,0xAE100102,0xB6001142,0xB6001142,0x960003DA,0x7A001142,0xF438A8,0xF438A8,0xF438A8,0xCC0015DA,0xCC0015DA,0xA2000D3B,0xA2001D8D,0xA2001D8D,0x8C000CF6,0x7400172E,0x1F038A8, -0x1F038A8,0x720022FB,0x660026FB,0x500038AB,0xFE842831,0xF69C3169,0xA438A8,0xFE5C1A55,0xFE400CA2,0xFE1C03D8,0xFE100125,0xDA0000FA,0xFE64274E,0xFE44188A,0xE6001206,0x8C000CF6,0x15C38A8,0xF41144,0xF41144,0xF41144,0xF41144,0xFEBC0355,0xFEBC0355,0xFEBC0355,0xD6980001,0xD6980001,0xA8980001,0x16C1142,0x16C1142,0x16C1142,0xFA000025,0xFA000025, -0xA83C0001,0x3BFC1142,0x3BFC1142,0x960003DA,0x7A001142,0x16C1142,0x16C1142,0x16C1142,0xFA000025,0xFA000025,0xA83C0001,0x3BFC1142,0x3BFC1142,0x960003DA,0x7A001142,0x3BFC1142,0x3BFC1142,0x960003DA,0x7A001142,0x7A001142,0xFED80D22,0xFEEC0E1D,0xF41144,0xFEA40A68,0xFE7005D1,0xFE380249,0xFE280088,0xDA0000FA,0xFEB40D9D,0xFE9809D9,0x7FC1142,0x960003DA, -0x7FC1142,0x1A80E1D,0xFF8C08B4,0xFF6402B1,0xFF540000,0x7DFC0E1D,0xFF380544,0xFF000000,0xBFFC0E1D,0xFE000001,0xD4000E1D,0x7DFC0E1D,0xFF380544,0xFF000000,0xBFFC0E1D,0xFE000001,0xD4000E1D,0xBFFC0E1D,0xFE000001,0xD4000E1D,0xD4000E1D,0x7DFC0E1D,0xFF380544,0xFF000000,0xBFFC0E1D,0xFE000001,0xD4000E1D,0xBFFC0E1D,0xFE000001,0xD4000E1D,0xD4000E1D,0xBFFC0E1D, -0xFE000001,0xD4000E1D,0xD4000E1D,0xD4000E1D,0xFF940CD5,0x1C40E1D,0xFBA40D24,0xFF6C0AFA,0xFF3C08CA,0xFEC80451,0xFE5C0000,0xF60000B9,0xFB900CD1,0xFF640AD2,0xFE940079,0xD4000E1D,0xAFFC0E1D,0x4C0B48,0x4C0B48,0x4C0B48,0x4C0B48,0x4C0B48,0x4C0B48,0x4C0B48,0x4C0B48,0x4C0B48,0x4C0B48,0xE6000000,0xE6000000,0xE6000000,0xE6000000,0xE6000000, -0xE6000000,0x70000000,0x70000000,0x70000000,0x4A000001,0x700B48,0x700B48,0x700B48,0x700B48,0x700B48,0x700B48,0x58000449,0x58000449,0x58000449,0x4600022A,0xE40B48,0xE40B48,0xE40B48,0x320006F5,0x24000B4A,0xF63C0784,0x4C0B48,0x4C0B48,0xFE2C039D,0xFE140164,0xFE080029,0xFE080029,0xBA000000,0xFE100652,0xFE000340,0x86000050,0x58000449, -0xA00B48,}; -static const uint32_t g_etc1_to_bc7_m6_table240[] = { -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1, -0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0xA80001,0xA80001,0xA80001,0xA80001,0xA80001,0xA80001,0xA80001,0xA80001,0xA80001,0xA80001,0xFC0000,0xFC0000,0xFC0000,0xFC0000,0xFC0000, -0xFC0000,0x3F80000,0x3F80000,0x3F80000,0x54000000,0xFC0000,0xFC0000,0xFC0000,0xFC0000,0xFC0000,0xFC0000,0x3F80000,0x3F80000,0x3F80000,0x54000000,0x3F80000,0x3F80000,0x3F80000,0x54000000,0x54000000,0x2B40000,0xA80001,0xA80001,0x2C40000,0xD40000,0xE80000,0xE80000,0x11C0000,0x2C40000,0xD40000,0x1680000,0x3F80000, -0x1680000,0x1640001,0x1640001,0x1640001,0x1640001,0x19FC0000,0x19FC0000,0x19FC0000,0x8FF80000,0x8FF80000,0xB2000000,0x19FC0000,0x19FC0000,0x19FC0000,0x8FF80000,0x8FF80000,0xB2000000,0x8FF80000,0x8FF80000,0xB2000000,0xB2000000,0x19FC0000,0x19FC0000,0x19FC0000,0x8FF80000,0x8FF80000,0xB2000000,0x8FF80000,0x8FF80000,0xB2000000,0xB2000000,0x8FF80000, -0x8FF80000,0xB2000000,0xB2000000,0xB2000000,0x1A00000,0x77C0000,0x1640001,0x1E80000,0x45FC0000,0x71FC0000,0x7FFC0000,0x99F40000,0x1C00000,0x19FC0000,0x71FC0000,0xB2000000,0x71FC0000,0x1FC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000, -0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xF7FC0001,0xF7FC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFFF00000,0xFE000000, -0xFFFC0000,0x1049057,0xFEDC690F,0xFEB849CB,0xFEB03EA2,0xFEB05459,0xFE882B7E,0xFE741C3D,0xFE642067,0xFA540E36,0xD8541965,0xFE986024,0xFE582E3D,0xFE441AA8,0xFE201919,0xFE040035,0xDA080BC4,0xFE0438AF,0xE0001798,0xCA0016F9,0xAC0038A8,0x3809057,0xFE385652,0xFE0C3EA2,0xFE08374D,0xEE001A39,0xD2001F29,0xEE00521C,0xD8002C1F,0xC0002732,0xA80044A9,0x45FC9057, -0xB80060F6,0xA60052A9,0x9600662D,0x80009059,0xFED870CD,0xFEEC8535,0xF90088B3,0xFE984F45,0xFE682CFD,0xFE2C0EC7,0xFE1C02D9,0xF6000125,0xFEB46F22,0xFE804A3D,0xFE001354,0xC0002732,0x15FC9057,0x15838AB,0xFF3026FB,0xFF14172E,0xFF081142,0xFF1822FB,0xFEE40CF6,0xFED003DA,0xFEB80D3B,0xF6A00102,0xD8A80B49,0x7FC38A8,0xFEB81D8D,0xFE901142,0xFE5815DA,0xFE080025, -0xD8280B48,0x85FC38A8,0xE0001798,0xCA0016F9,0xAC0038A8,0x7FC38A8,0xFEB81D8D,0xFE901142,0xFE5815DA,0xFE080025,0xD8280B48,0x85FC38A8,0xE0001798,0xCA0016F9,0xAC0038A8,0x85FC38A8,0xE0001798,0xCA0016F9,0xAC0038A8,0xAC0038A8,0xFF342F72,0xFF4C34BB,0xFF4C3533,0xFF082595,0xFEC818C5,0xFE7009A1,0xFE3C00FA,0xF6000125,0xFF243009,0xFEE8241E,0xFE001254,0xCA0016F9, -0x65FC38A8,0xB03EA2,0xB03EA2,0xB03EA2,0xB03EA2,0xFE741C3D,0xFE741C3D,0xFE741C3D,0xF4540E1E,0xF4540E1E,0xB2540E1D,0xFE441AA8,0xFE441AA8,0xFE441AA8,0xFE040035,0xFE040035,0xB81801B4,0xC4001142,0xC4001142,0xA0000355,0x82001144,0x1043EA2,0x1043EA2,0x1043EA2,0xE2001881,0xE2001881,0xA8000FB9,0xAE001F7B,0xAE001F7B,0x98000DAC,0x7A001824,0x7FC3EA2, -0x7FC3EA2,0x7E0026C9,0x6C002A35,0x56003EA5,0xFE902DE5,0xFCA83721,0xB03EA2,0xFE701F65,0xFE441079,0xFE24061D,0xFE1C02D9,0xEA000088,0xFE782CA5,0xFE501D0A,0xF6001225,0x98000DAC,0x1743EA2,0x1081142,0x1081142,0x1081142,0x1081142,0xFED003DA,0xFED003DA,0xFED003DA,0xE0A80001,0xE0A80001,0xB2A80001,0x1881142,0x1881142,0x1881142,0xFE080025,0xFE080025, -0xB24C0001,0x49F81142,0x49F81142,0xA0000355,0x82001144,0x1881142,0x1881142,0x1881142,0xFE080025,0xFE080025,0xB24C0001,0x49F81142,0x49F81142,0xA0000355,0x82001144,0x49F81142,0x49F81142,0xA0000355,0x82001144,0x82001144,0xFAEC0D75,0xF9000E72,0x1081142,0xFEC40ABA,0xFE98065D,0xFE5802F2,0xFE3C00FA,0xEA000088,0xFED00DD0,0xFEA40A40,0x19FC1142,0xA0000355, -0x19FC1142,0x1B00B4A,0xFF9806F5,0xFF70022A,0xFF640001,0x8DFC0B48,0xFF4C0449,0xFF1C0000,0xC7FC0B48,0xFE2C0000,0xD8000B48,0x8DFC0B48,0xFF4C0449,0xFF1C0000,0xC7FC0B48,0xFE2C0000,0xD8000B48,0xC7FC0B48,0xFE2C0000,0xD8000B48,0xD8000B48,0x8DFC0B48,0xFF4C0449,0xFF1C0000,0xC7FC0B48,0xFE2C0000,0xD8000B48,0xC7FC0B48,0xFE2C0000,0xD8000B48,0xD8000B48,0xC7FC0B48, -0xFE2C0000,0xD8000B48,0xD8000B48,0xD8000B48,0xFF940A68,0xFCC0B48,0xFFAC0A6D,0xFF8408D1,0xFF500709,0xFEF00382,0xFE880000,0xFA000029,0xFF980A22,0xFF7008B4,0xFEB80064,0xD8000B48,0xB9FC0B48,0x540E1D,0x540E1D,0x540E1D,0x540E1D,0x540E1D,0x540E1D,0x540E1D,0x540E1D,0x540E1D,0x540E1D,0xFE000001,0xFE000001,0xFE000001,0xFE000001,0xFE000001, -0xFE000001,0x7E000000,0x7E000000,0x7E000000,0x54000000,0x7C0E1D,0x7C0E1D,0x7C0E1D,0x7C0E1D,0x7C0E1D,0x7C0E1D,0x62000544,0x62000544,0x62000544,0x4C0002B1,0xFC0E1D,0xFC0E1D,0xFC0E1D,0x380008B4,0x2A000E1D,0xFC4809D9,0x540E1D,0x540E1D,0xFE2C0568,0xFE200290,0xFE1000B9,0xFE1000B9,0xD0000000,0xFE20088A,0xFE1404E2,0x9E000065,0x62000544, -0xB00E1D,}; -static const uint32_t g_etc1_to_bc7_m6_table241[] = { -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1, -0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0xB80001,0xB80001,0xB80001,0xB80001,0xB80001,0xB80001,0xB80001,0xB80001,0xB80001,0xB80001,0x1140000,0x1140000,0x1140000,0x1140000,0x1140000, -0x1140000,0xFF80000,0xFF80000,0xFF80000,0x5C000000,0x1140000,0x1140000,0x1140000,0x1140000,0x1140000,0x1140000,0xFF80000,0xFF80000,0xFF80000,0x5C000000,0xFF80000,0xFF80000,0xFF80000,0x5C000000,0x5C000000,0xAC40000,0xB80001,0xB80001,0xD80000,0xE80000,0xFC0000,0xFC0000,0x1380000,0xD80000,0xE80000,0x18C0000,0xFF80000, -0x18C0000,0x1740001,0x1740001,0x1740001,0x1740001,0x31FC0000,0x31FC0000,0x31FC0000,0x9BF80000,0x9BF80000,0xBA000000,0x31FC0000,0x31FC0000,0x31FC0000,0x9BF80000,0x9BF80000,0xBA000000,0x9BF80000,0x9BF80000,0xBA000000,0xBA000000,0x31FC0000,0x31FC0000,0x31FC0000,0x9BF80000,0x9BF80000,0xBA000000,0x9BF80000,0x9BF80000,0xBA000000,0xBA000000,0x9BF80000, -0x9BF80000,0xBA000000,0xBA000000,0xBA000000,0x1B40000,0xF8C0000,0x1740001,0x1FC0000,0x59FC0000,0x7FFC0000,0x8DFC0000,0xA3F80000,0x1D40000,0x31FC0000,0x7FFC0000,0xBA000000,0x7FFC0000,0x1FC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000, -0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xF7FC0001,0xF7FC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFFF00000,0xFE000000, -0xFFFC0000,0x10C90DF,0xFEE86C1B,0xFEC04EF2,0xFEBC444E,0xFEC45607,0xFE942FCA,0xFE802159,0xFE702223,0xFE5C10E6,0xDC5C19ED,0xFEA46018,0xFE6430B1,0xFE501E14,0xFE2C18CD,0xFE1000F9,0xDE100A14,0xFE083418,0xE6001544,0xCA0012C9,0xB20033B4,0x38C90DF,0xFE385A92,0xFE1C444D,0xFE08381D,0xF4001BF1,0xD2001EA9,0xF4004EC8,0xDE002ADB,0xC60023E2,0xAE004085,0x4BFC90DF, -0xBE006262,0xAC0051A9,0x9C006419,0x840090E1,0xFEE47241,0xFB048637,0xFD08897B,0xFEAC5155,0xFE742F9E,0xFE381111,0xFE2804E2,0xFC000069,0xFED07092,0xFE904C7B,0xFE001374,0xC60023E2,0x1DF890DF,0x16433B3,0xFF44240E,0xFF201672,0xFF181142,0xFF241FE3,0xFEF00C7A,0xFEDC046A,0xFECC0B59,0xF6B40089,0xDCB80909,0x15FC33B3,0xFECC1C26,0xFEA81142,0xFE70139A,0xFE2C0059, -0xDC3C0908,0x8DFC33B3,0xE6001544,0xCA0012C9,0xB20033B4,0x15FC33B3,0xFECC1C26,0xFEA81142,0xFE70139A,0xFE2C0059,0xDC3C0908,0x8DFC33B3,0xE6001544,0xCA0012C9,0xB20033B4,0x8DFC33B3,0xE6001544,0xCA0012C9,0xB20033B4,0xB20033B4,0xFF3C2BBB,0xF75C3071,0xF96030C6,0xFF142266,0xFEDC1721,0xFE7C0965,0xFE64015A,0xFC000069,0xFF342BED,0xFF042108,0xFE141223,0xCA0012C9, -0x6FFC33B3,0xBC444E,0xBC444E,0xBC444E,0xBC444E,0xFE802159,0xFE802159,0xFE802159,0xFE5C10E6,0xFE5C10E6,0xBA5C10E5,0xFE501E14,0xFE501E14,0xFE501E14,0xFE1000F9,0xFE1000F9,0xC01C0278,0xD0001142,0xD0001142,0xAC0002D5,0x8A001144,0x114444D,0x114444D,0x114444D,0xE8001B35,0xE8001B35,0xB4001241,0xBA002153,0xBA002153,0xA2000E5A,0x86001904,0xFF8444D, -0xFF8444D,0x84002A65,0x72002D4D,0x5C00444D,0xFEA03348,0xFEAC3CB9,0xBC444E,0xFE78242D,0xFE541448,0xFE3408B9,0xFE2804E2,0xF8000050,0xFE7831F5,0xFE5021DA,0xFE001274,0xA2000E5A,0x18C444D,0x1181142,0x1181142,0x1181142,0x1181142,0xFEDC046A,0xFEDC046A,0xFEDC046A,0xE8B80001,0xE8B80001,0xBAB80001,0x1A01142,0x1A01142,0x1A01142,0xFE2C0059,0xFE2C0059, -0xBA5C0001,0x55F81142,0x55F81142,0xAC0002D5,0x8A001144,0x1A01142,0x1A01142,0x1A01142,0xFE2C0059,0xFE2C0059,0xBA5C0001,0x55F81142,0x55F81142,0xAC0002D5,0x8A001144,0x55F81142,0x55F81142,0xAC0002D5,0x8A001144,0x8A001144,0xFEF40D9D,0xFF0C0E7A,0x1181142,0xFEDC0AFD,0xFEAC06D9,0xFE740361,0xFE64015A,0xF8000050,0xF8EC0E1D,0xFEC40AB2,0x27FC1142,0xAC0002D5, -0x27FC1142,0x1B8090A,0xFFA40595,0xFF8801BA,0xFF740001,0x99FC0908,0xFF580369,0xFF340000,0xCDFC0908,0xFE600000,0xDC000908,0x99FC0908,0xFF580369,0xFF340000,0xCDFC0908,0xFE600000,0xDC000908,0xCDFC0908,0xFE600000,0xDC000908,0xDC000908,0x99FC0908,0xFF580369,0xFF340000,0xCDFC0908,0xFE600000,0xDC000908,0xCDFC0908,0xFE600000,0xDC000908,0xDC000908,0xCDFC0908, -0xFE600000,0xDC000908,0xDC000908,0xDC000908,0xFBAC0841,0x1D80908,0xFFAC087D,0xFF94070A,0xFF680595,0xFF0402C2,0xFEB00000,0xFE000000,0xFF980832,0xFF8806D1,0xFEDC0051,0xDC000908,0xBFFC0908,0x5C10E5,0x5C10E5,0x5C10E5,0x5C10E5,0x5C10E5,0x5C10E5,0x5C10E5,0x5C10E5,0x5C10E5,0x5C10E5,0xFE0C003D,0xFE0C003D,0xFE0C003D,0xFE0C003D,0xFE0C003D, -0xFE0C003D,0x8A000000,0x8A000000,0x8A000000,0x5C000000,0x8810E5,0x8810E5,0x8810E5,0x8810E5,0x8810E5,0x8810E5,0x6E000654,0x6E000654,0x6E000654,0x5200033D,0x11410E5,0x11410E5,0x11410E5,0x3E000A68,0x2E0010E5,0xFE4C0C35,0x5C10E5,0x5C10E5,0xFE3C0745,0xFE280401,0xFE180190,0xFE180190,0xE4000000,0xFE200AFA,0xFE1406B2,0xA6000074,0x6E000654, -0xC010E5,}; -static const uint32_t g_etc1_to_bc7_m6_table242[] = { -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1, -0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0xC80001,0xC80001,0xC80001,0xC80001,0xC80001,0xC80001,0xC80001,0xC80001,0xC80001,0xC80001,0x12C0000,0x12C0000,0x12C0000,0x12C0000,0x12C0000, -0x12C0000,0x1BF80000,0x1BF80000,0x1BF80000,0x64000000,0x12C0000,0x12C0000,0x12C0000,0x12C0000,0x12C0000,0x12C0000,0x1BF80000,0x1BF80000,0x1BF80000,0x64000000,0x1BF80000,0x1BF80000,0x1BF80000,0x64000000,0x64000000,0xD80000,0xC80001,0xC80001,0x6E80000,0xFC0000,0x3100000,0x3100000,0x1540000,0x6E80000,0xFC0000,0x1AC0000,0x1BF80000, -0x1AC0000,0x1840001,0x1840001,0x1840001,0x1840001,0x49FC0000,0x49FC0000,0x49FC0000,0xA7F80000,0xA7F80000,0xC2000000,0x49FC0000,0x49FC0000,0x49FC0000,0xA7F80000,0xA7F80000,0xC2000000,0xA7F80000,0xA7F80000,0xC2000000,0xC2000000,0x49FC0000,0x49FC0000,0x49FC0000,0xA7F80000,0xA7F80000,0xC2000000,0xA7F80000,0xA7F80000,0xC2000000,0xC2000000,0xA7F80000, -0xA7F80000,0xC2000000,0xC2000000,0xC2000000,0x3C40000,0x1A00000,0x1840001,0x1FFC0000,0x6DFC0000,0x8FFC0000,0x9BFC0000,0xADFC0000,0x1E80000,0x49FC0000,0x8FFC0000,0xC2000000,0x8FFC0000,0x1FC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000, -0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xF7FC0001,0xF7FC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFFF00000,0xFE000000, -0xFFFC0000,0x11491E7,0xFEE86F9B,0xFECC5432,0xFEC44A4E,0xFEC45887,0xFEA0348E,0xFE8C26E5,0xFE7C247F,0xFE64141E,0xE0641AF5,0xFEB060B4,0xFE7033B5,0xFE5C2208,0xFE381939,0xFE14026D,0xE21808E4,0xFE143058,0xEC001378,0xD0000EF9,0xB6002F14,0x39891E7,0xFE4C5F3E,0xFE2C4A4E,0xFE0839ED,0xFA001E61,0xD8001EBD,0xFA004BDC,0xE20029E8,0xCC00210A,0xAE003CA5,0x51FC91E7, -0xBE006462,0xB2005139,0x9C006279,0x880091E9,0xFEE47431,0xFF0C873F,0xFF0C8ACF,0xFEB45441,0xFE7C3299,0xFE48140A,0xFE3407A9,0xFE040045,0xFED4724F,0xFE984F5B,0xFE001494,0xCC00210A,0x23FC91E7,0x1702F13,0xFF502186,0xFF3815C2,0xFF281142,0xFF301D13,0xFF080C12,0xFEF40502,0xFEE409B1,0xFAC80035,0xE0C80709,0x29FC2F13,0xFEE41AA6,0xFEC01142,0xFE88119A,0xFE4000B9, -0xE0500708,0x97F82F13,0xEC001378,0xD0000EF9,0xB6002F14,0x29FC2F13,0xFEE41AA6,0xFEC01142,0xFE88119A,0xFE4000B9,0xE0500708,0x97F82F13,0xEC001378,0xD0000EF9,0xB6002F14,0x97F82F13,0xEC001378,0xD0000EF9,0xB6002F14,0xB6002F14,0xFF5027BA,0xFD682BE9,0xFF6C2C5A,0xFF30200A,0xFEE8158A,0xFEA4095B,0xFE7C01D4,0xFE040041,0xFF442838,0xFF041EA8,0xFE341206,0xD0000EF9, -0x7BFC2F13,0xC44A4E,0xC44A4E,0xC44A4E,0xC44A4E,0xFE8C26E5,0xFE8C26E5,0xFE8C26E5,0xFE64141E,0xFE64141E,0xC26413ED,0xFE5C2208,0xFE5C2208,0xFE5C2208,0xFE14026D,0xFE14026D,0xC8200364,0xDC001142,0xDC001142,0xB2000269,0x92001144,0x3244A4D,0x3244A4D,0x3244A4D,0xF4001E3D,0xF4001E3D,0xBA001509,0xC000234B,0xC000234B,0xA8000F1E,0x8C0019E8,0x17FC4A4D, -0x17FC4A4D,0x8A002E49,0x78003095,0x62004A4D,0xFEA03908,0xF8C0430A,0xC44A4E,0xFE802964,0xFE5818D5,0xFE3C0BE6,0xFE3407A9,0xFE040045,0xFE9437CD,0xFE5C2742,0xFE001394,0xA8000F1E,0x1A44A4D,0x1281142,0x1281142,0x1281142,0x1281142,0xFEF40502,0xFEF40502,0xFEF40502,0xF0C80001,0xF0C80001,0xC2C80001,0x1B81142,0x1B81142,0x1B81142,0xFE4000B9,0xFE4000B9, -0xC26C0001,0x61F81142,0x61F81142,0xB2000269,0x92001144,0x1B81142,0x1B81142,0x1B81142,0xFE4000B9,0xFE4000B9,0xC26C0001,0x61F81142,0x61F81142,0xB2000269,0x92001144,0x61F81142,0x61F81142,0xB2000269,0x92001144,0x92001144,0xFF100DC8,0xF9200EC9,0x1281142,0xFEDC0B8D,0xFEC0075D,0xFE7C0414,0xFE7C01D4,0xFE040041,0xFEF80E21,0xFEDC0AFD,0x37FC1142,0xB2000269, -0x37FC1142,0x1C0070A,0xFFB0045D,0xFF940152,0xFF840001,0xA5FC0708,0xFF7002A1,0xFF4C0000,0xD3FC0708,0xFE900000,0xE0000708,0xA5FC0708,0xFF7002A1,0xFF4C0000,0xD3FC0708,0xFE900000,0xE0000708,0xD3FC0708,0xFE900000,0xE0000708,0xE0000708,0xA5FC0708,0xFF7002A1,0xFF4C0000,0xD3FC0708,0xFE900000,0xE0000708,0xD3FC0708,0xFE900000,0xE0000708,0xE0000708,0xD3FC0708, -0xFE900000,0xE0000708,0xE0000708,0xE0000708,0xFFB40659,0x1E00708,0xF9C00692,0xFF94057A,0xFF7C045D,0xFF2C0232,0xFED80000,0xFE380000,0xFFAC065D,0xFF940550,0xFEFC0040,0xE0000708,0xC7FC0708,0x6413ED,0x6413ED,0x6413ED,0x6413ED,0x6413ED,0x6413ED,0x6413ED,0x6413ED,0x6413ED,0x6413ED,0xFE0C00CD,0xFE0C00CD,0xFE0C00CD,0xFE0C00CD,0xFE0C00CD, -0xFE0C00CD,0x96000000,0x96000000,0x96000000,0x64000000,0x9413ED,0x9413ED,0x9413ED,0x9413ED,0x9413ED,0x9413ED,0x7A000784,0x7A000784,0x7A000784,0x580003D9,0x12C13ED,0x12C13ED,0x12C13ED,0x44000C44,0x320013ED,0xFE4C0F05,0x6413ED,0x6413ED,0xFE3C0975,0xFE3405B4,0xFE1802D0,0xFE1802D0,0xF8000000,0xFC380D75,0xFE2008D1,0xB6000089,0x7A000784, -0xD413ED,}; -static const uint32_t g_etc1_to_bc7_m6_table243[] = { -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1, -0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0xD80001,0xD80001,0xD80001,0xD80001,0xD80001,0xD80001,0xD80001,0xD80001,0xD80001,0xD80001,0x1440000,0x1440000,0x1440000,0x1440000,0x1440000, -0x1440000,0x27F80000,0x27F80000,0x27F80000,0x6C000000,0x1440000,0x1440000,0x1440000,0x1440000,0x1440000,0x1440000,0x27F80000,0x27F80000,0x27F80000,0x6C000000,0x27F80000,0x27F80000,0x27F80000,0x6C000000,0x6C000000,0xE80000,0xD80001,0xD80001,0x2FC0000,0x1100000,0x1280000,0x1280000,0x36C0000,0x2FC0000,0x1100000,0x1D00000,0x27F80000, -0x1D00000,0x1940001,0x1940001,0x1940001,0x1940001,0x63FC0000,0x63FC0000,0x63FC0000,0xB3F80000,0xB3F80000,0xCA000000,0x63FC0000,0x63FC0000,0x63FC0000,0xB3F80000,0xB3F80000,0xCA000000,0xB3F80000,0xB3F80000,0xCA000000,0xCA000000,0x63FC0000,0x63FC0000,0x63FC0000,0xB3F80000,0xB3F80000,0xCA000000,0xB3F80000,0xB3F80000,0xCA000000,0xCA000000,0xB3F80000, -0xB3F80000,0xCA000000,0xCA000000,0xCA000000,0x1D80000,0x1B00000,0x1940001,0x3DFC0000,0x81FC0000,0x9FF80000,0xA9F80000,0xB9F80000,0x1FC0000,0x63FC0000,0x9FF80000,0xCA000000,0x9FF80000,0x1FC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000, -0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xF7FC0001,0xF7FC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFFF00000,0xFE000000, -0xFFFC0000,0x11C936F,0xFEF4735F,0xFED859D2,0xFED050A2,0xFED05B93,0xFEA839C2,0xFE982CE1,0xFE88277B,0xFE7017E2,0xE46C1C7D,0xFEB061D4,0xFE7C3749,0xFE682684,0xFE381A89,0xFE200485,0xE6200834,0xFE142D78,0xF2001234,0xD6000B99,0xBC002AC8,0x3A4936F,0xFE646426,0xFE3C50A2,0xFE083CBD,0xFA0021B1,0xDE001F71,0xFA0049BC,0xE80029B8,0xCC001E9A,0xB4003921,0x57FC936F, -0xC40066F6,0xB8005159,0xA6006174,0x8C009371,0xFEF476C5,0xFF0C88FF,0xFF0C8D0F,0xFEC45747,0xFE883642,0xFE541781,0xFE3C0ADE,0xFE0C00EC,0xFED474DF,0xFE9852EB,0xFE101676,0xCC001E9A,0x2BFC936F,0x1782ACB,0xFF5C1F2E,0xFF401523,0xFF381142,0xFF441A61,0xFF140BC6,0xFF0005AA,0xFEF00849,0xFCD80009,0xE4D80549,0x37FC2AC8,0xFEFC1946,0xFED81142,0xFEA00FDA,0xFE640121, -0xE4640548,0x9DFC2AC8,0xF2001234,0xD6000B99,0xBC002AC8,0x37FC2AC8,0xFEFC1946,0xFED81142,0xFEA00FDA,0xFE640121,0xE4640548,0x9DFC2AC8,0xF2001234,0xD6000B99,0xBC002AC8,0x9DFC2AC8,0xF2001234,0xD6000B99,0xBC002AC8,0xBC002AC8,0xFF58247D,0xFF6C27E1,0xFF6C289A,0xFF301D7A,0xFEFC143A,0xFEB80925,0xFE900274,0xFE280088,0xFD5824CE,0xFF181C5E,0xFE5811EB,0xD6000B99, -0x83FC2AC8,0xD050A2,0xD050A2,0xD050A2,0xD050A2,0xFE982CE1,0xFE982CE1,0xFE982CE1,0xFE7017E2,0xFE7017E2,0xCA6C1735,0xFE682684,0xFE682684,0xFE682684,0xFE200485,0xFE200485,0xD2280474,0xE6001144,0xE6001144,0xBE0001F9,0x9A001144,0x13450A2,0x13450A2,0x13450A2,0xFA0021A1,0xFA0021A1,0xC6001821,0xCC002553,0xCC002553,0xAE001012,0x92001AE4,0x1FF850A2, -0x1FF850A2,0x90003275,0x7E00340D,0x660050A5,0xFEAC3F3D,0xFCC8492A,0xD050A2,0xFE902EFD,0xFE6C1DB1,0xFE3C0FE6,0xFE3C0ADE,0xFE0C00EC,0xFE943DAD,0xFE742C9D,0xFE101595,0xAE001012,0x1B850A2,0x1381142,0x1381142,0x1381142,0x1381142,0xFF0005AA,0xFF0005AA,0xFF0005AA,0xF8D80001,0xF8D80001,0xCAD80001,0x1D01142,0x1D01142,0x1D01142,0xFE640121,0xFE640121, -0xCA7C0001,0x6DF81142,0x6DF81142,0xBE0001F9,0x9A001144,0x1D01142,0x1D01142,0x1D01142,0xFE640121,0xFE640121,0xCA7C0001,0x6DF81142,0x6DF81142,0xBE0001F9,0x9A001144,0x6DF81142,0x6DF81142,0xBE0001F9,0x9A001144,0x9A001144,0xFF200E1D,0xFF2C0ED5,0x1381142,0xFEF80BD1,0xFED407E9,0xFEA804A0,0xFE900274,0xFE280088,0xFD100E72,0xFEE80B5A,0x45FC1142,0xBE0001F9, -0x45FC1142,0x1C8054A,0xFFB0034D,0xFFA000FA,0xFF940001,0xB1FC0548,0xFF7C01F9,0xFF640000,0xD9FC0548,0xFEC00000,0xE4000548,0xB1FC0548,0xFF7C01F9,0xFF640000,0xD9FC0548,0xFEC00000,0xE4000548,0xD9FC0548,0xFEC00000,0xE4000548,0xE4000548,0xB1FC0548,0xFF7C01F9,0xFF640000,0xD9FC0548,0xFEC00000,0xE4000548,0xD9FC0548,0xFEC00000,0xE4000548,0xE4000548,0xD9FC0548, -0xFEC00000,0xE4000548,0xE4000548,0xE4000548,0xFFB404D9,0x1E80548,0xFDC804E2,0xFFB00422,0xFF7C034D,0xFF480195,0xFEFC0000,0xFE740000,0xF5C004E2,0xFFA00401,0xFF200031,0xE4000548,0xCFFC0548,0x6C1735,0x6C1735,0x6C1735,0x6C1735,0x6C1735,0x6C1735,0x6C1735,0x6C1735,0x6C1735,0x6C1735,0xFE1801B1,0xFE1801B1,0xFE1801B1,0xFE1801B1,0xFE1801B1, -0xFE1801B1,0xA0000001,0xA0000001,0xA0000001,0x6C000000,0xA01735,0xA01735,0xA01735,0xA01735,0xA01735,0xA01735,0x800008C8,0x800008C8,0x800008C8,0x62000464,0x1441735,0x1441735,0x1441735,0x4A000E48,0x36001735,0xF8601200,0x6C1735,0x6C1735,0xFE4C0BE4,0xFE3407B4,0xFE240454,0xFE240454,0xFE040014,0xFE3C1031,0xFC300B48,0xC6000099,0x800008C8, -0xE41735,}; -static const uint32_t g_etc1_to_bc7_m6_table244[] = { -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1, -0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0xEC0000,0xEC0000,0xEC0000,0xEC0000,0xEC0000,0xEC0000,0xEC0000,0xEC0000,0xEC0000,0xEC0000,0x35C0000,0x35C0000,0x35C0000,0x35C0000,0x35C0000, -0x35C0000,0x33FC0000,0x33FC0000,0x33FC0000,0x74000001,0x35C0000,0x35C0000,0x35C0000,0x35C0000,0x35C0000,0x35C0000,0x33FC0000,0x33FC0000,0x33FC0000,0x74000001,0x33FC0000,0x33FC0000,0x33FC0000,0x74000001,0x74000001,0xFC0000,0xEC0000,0xEC0000,0x5100000,0x1280000,0x1400000,0x1400000,0x18C0000,0x5100000,0x1280000,0x1F40000,0x33FC0000, -0x1F40000,0x1A80000,0x1A80000,0x1A80000,0x1A80000,0x7DFC0000,0x7DFC0000,0x7DFC0000,0xBFFC0000,0xBFFC0000,0xD2000001,0x7DFC0000,0x7DFC0000,0x7DFC0000,0xBFFC0000,0xBFFC0000,0xD2000001,0xBFFC0000,0xBFFC0000,0xD2000001,0xD2000001,0x7DFC0000,0x7DFC0000,0x7DFC0000,0xBFFC0000,0xBFFC0000,0xD2000001,0xBFFC0000,0xBFFC0000,0xD2000001,0xD2000001,0xBFFC0000, -0xBFFC0000,0xD2000001,0xD2000001,0xD2000001,0x1EC0000,0x1C40000,0x1A80000,0x5FFC0000,0x97FC0000,0xAFFC0000,0xB7FC0000,0xC5F80000,0x2DFC0000,0x7DFC0000,0xAFFC0000,0xD2000001,0xAFFC0000,0x1FC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000, -0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xF7FC0001,0xF7FC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFFF00000,0xFE000000, -0xFFFC0000,0x12495C1,0xFF00782D,0xFEE4609C,0xFEDC5828,0xFEDC5FA9,0xFEB44028,0xFEA43425,0xFE942B8D,0xFE7C1CD4,0xE8741ED1,0xFEC46399,0xFE8C3BF7,0xFE742C2E,0xFE4C1CB6,0xFE2C07B5,0xEE2407F6,0xFE202B26,0xF800116E,0xDC000859,0xC200265A,0x3B095C1,0xFE706A14,0xFE4C582B,0xFE14410D,0xFC00269A,0xE20020E5,0xFA00488A,0xEE002A26,0xD2001C6A,0xBA0035A3,0x5DFC95C1, -0xCA006AA4,0xBE00521D,0xA600608A,0x920095C3,0xFF007A21,0xFF0C8C29,0xF9208FF4,0xFED45B79,0xFE903AF9,0xFE5C1BF9,0xFE4C0F71,0xFE140288,0xFEF07883,0xFEB0571E,0xFE141976,0xD2001C6A,0x33FC95C1,0x184265D,0xFF681CC8,0xFF58147D,0xFF481144,0xFF5017C9,0xFF2C0B94,0xFF180668,0xFF08070D,0xFEEC0004,0xE8EC039D,0x49FC265A,0xFF1417D8,0xFEF01144,0xFEB80E36,0xFE8801BD, -0xE87C039D,0xA7F8265A,0xF800116E,0xDC000859,0xC200265A,0x49FC265A,0xFF1417D8,0xFEF01144,0xFEB80E36,0xFE8801BD,0xE87C039D,0xA7F8265A,0xF800116E,0xDC000859,0xC200265A,0xA7F8265A,0xF800116E,0xDC000859,0xC200265A,0xC200265A,0xFF742111,0xF98023FD,0xFB842485,0xFF401AEA,0xFF1012F4,0xFEC80956,0xFEA8031D,0xFE480112,0xFF5C2106,0xFF401A06,0xFE7C11D2,0xDC000859, -0x8FFC265A,0xDC5828,0xDC5828,0xDC5828,0xDC5828,0xFEA43425,0xFEA43425,0xFEA43425,0xFE7C1CD4,0xFE7C1CD4,0xD2741B35,0xFE742C2E,0xFE742C2E,0xFE742C2E,0xFE2C07B5,0xFE2C07B5,0xDE2805CA,0xF4001142,0xF4001142,0xCA000195,0xA4001142,0x3445828,0x3445828,0x3445828,0xFA00268D,0xFA00268D,0xCC001BE3,0xD80027C5,0xD80027C5,0xBA00113A,0x9E001C1A,0x27FC5828, -0x27FC5828,0x96003783,0x84003833,0x6C00582B,0xFEBC4689,0xFECC50B4,0xDC5828,0xFE9835F1,0xFE6C2405,0xFE5414FE,0xFE4C0F71,0xFE140288,0xFEA04502,0xFE7433A5,0xFE141895,0xBA00113A,0x1D45828,0x1481144,0x1481144,0x1481144,0x1481144,0xFF180668,0xFF180668,0xFF180668,0xFEEC0004,0xFEEC0004,0xD2EC0001,0x3E81142,0x3E81142,0x3E81142,0xFE8801BD,0xFE8801BD, -0xD2900001,0x79FC1142,0x79FC1142,0xCA000195,0xA4001142,0x3E81142,0x3E81142,0x3E81142,0xFE8801BD,0xFE8801BD,0xD2900001,0x79FC1142,0x79FC1142,0xCA000195,0xA4001142,0x79FC1142,0x79FC1142,0xCA000195,0xA4001142,0xA4001142,0xFB340E74,0xFB440F20,0x1481144,0xFF180C35,0xFEF008A2,0xFEB80562,0xFEA8031D,0xFE480112,0xF9280EC9,0xFF040BEA,0x57FC1142,0xCA000195, -0x57FC1142,0x1D4039D,0xFFC4022D,0xFFAC00AD,0xFFA80000,0xBDFC039D,0xFF940152,0xFF7C0001,0xDFF8039D,0xFEF80000,0xE800039D,0xBDFC039D,0xFF940152,0xFF7C0001,0xDFF8039D,0xFEF80000,0xE800039D,0xDFF8039D,0xFEF80000,0xE800039D,0xE800039D,0xBDFC039D,0xFF940152,0xFF7C0001,0xDFF8039D,0xFEF80000,0xE800039D,0xDFF8039D,0xFEF80000,0xE800039D,0xE800039D,0xDFF8039D, -0xFEF80000,0xE800039D,0xE800039D,0xE800039D,0xFDCC0349,0x1F0039D,0xFFCC0355,0xFDBC02D4,0xFFA80242,0xFF5C0119,0xFF280000,0xFEB80000,0xF7CC0349,0xFFAC02C5,0xFF50001D,0xE800039D,0xD7FC039D,0x741B34,0x741B34,0x741B34,0x741B34,0x741B34,0x741B34,0x741B34,0x741B34,0x741B34,0x741B34,0xFE240328,0xFE240328,0xFE240328,0xFE240328,0xFE240328, -0xFE240328,0xAE000000,0xAE000000,0xAE000000,0x74000001,0xB01B32,0xB01B32,0xB01B32,0xB01B32,0xB01B32,0xB01B32,0x8C000A55,0x8C000A55,0x8C000A55,0x6800052D,0x1641B32,0x1641B32,0x1641B32,0x500010BD,0x3A001B32,0xFC681589,0x741B34,0x741B34,0xFE4C0F05,0xFE3C0A68,0xFE340665,0xFE340665,0xFE0C009D,0xFE3C13D0,0xFE340E29,0xD60000B9,0x8C000A55, -0xF81B32,}; -static const uint32_t g_etc1_to_bc7_m6_table245[] = { -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1, -0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0xFC0000,0xFC0000,0xFC0000,0xFC0000,0xFC0000,0xFC0000,0xFC0000,0xFC0000,0xFC0000,0xFC0000,0x3740000,0x3740000,0x3740000,0x3740000,0x3740000, -0x3740000,0x3FFC0000,0x3FFC0000,0x3FFC0000,0x7C000001,0x3740000,0x3740000,0x3740000,0x3740000,0x3740000,0x3740000,0x3FFC0000,0x3FFC0000,0x3FFC0000,0x7C000001,0x3FFC0000,0x3FFC0000,0x3FFC0000,0x7C000001,0x7C000001,0x10C0000,0xFC0000,0xFC0000,0x1240000,0x13C0000,0x3540000,0x3540000,0x1A80000,0x1240000,0x13C0000,0xDFC0000,0x3FFC0000, -0xDFC0000,0x1B80000,0x1B80000,0x1B80000,0x1B80000,0x95FC0000,0x95FC0000,0x95FC0000,0xCBFC0000,0xCBFC0000,0xDA000001,0x95FC0000,0x95FC0000,0x95FC0000,0xCBFC0000,0xCBFC0000,0xDA000001,0xCBFC0000,0xCBFC0000,0xDA000001,0xDA000001,0x95FC0000,0x95FC0000,0x95FC0000,0xCBFC0000,0xCBFC0000,0xDA000001,0xCBFC0000,0xCBFC0000,0xDA000001,0xDA000001,0xCBFC0000, -0xCBFC0000,0xDA000001,0xDA000001,0xDA000001,0x9FC0000,0x3D40000,0x1B80000,0x7DFC0000,0xABFC0000,0xBFF80000,0xC5FC0000,0xD1F40000,0x55FC0000,0x95FC0000,0xBFF80000,0xDA000001,0xBFF80000,0x1FC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000, -0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xF7FC0001,0xF7FC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFFF00000,0xFE000000, -0xFFFC0000,0x12C9859,0xFF0C7CE9,0xFEF06704,0xFEE85F34,0xFEE863E1,0xFEC44648,0xFEB03B0D,0xFE942FCD,0xFE8821D8,0xEC7C2169,0xFEC465F9,0xFE9840B3,0xFE8031CA,0xFE581F56,0xFE380B41,0xF22C0846,0xFE2C29FE,0xFE041148,0xE6000602,0xC80022C6,0x3BC9859,0xFE7C6FCC,0xFE5C5F33,0xFE204581,0xFE082BC5,0xE80022E1,0xFE044866,0xEE002B26,0xD8001AEE,0xC00032E7,0x63FC9859, -0xD0006E98,0xBE00534D,0xAC006016,0x9600985B,0xFF007DA1,0xFB248F01,0xFD2892C4,0xFED45F89,0xFEA03FAE,0xFE6820C1,0xFE501419,0xFE2004B9,0xFEF87BA9,0xFEC45BAD,0xFE201CEC,0xD8001AEE,0x3BFC9859,0x19022C5,0xFF741AD8,0xFF6413E5,0xFF581144,0xFF5C15CD,0xFF380B84,0xFF300728,0xFF14063D,0xFEFC0031,0xECFC0265,0x59FC22C5,0xFF2016B4,0xFF081144,0xFED80D2D,0xFEA0025D, -0xEC900265,0xADFC22C5,0xFE081142,0xE6000602,0xC80022C6,0x59FC22C5,0xFF2016B4,0xFF081144,0xFED80D2D,0xFEA0025D,0xEC900265,0xADFC22C5,0xFE081142,0xE6000602,0xC80022C6,0xADFC22C5,0xFE081142,0xE6000602,0xC80022C6,0xC80022C6,0xFF781E0E,0xFF8C207D,0xFF8C211D,0xFF5C18D9,0xFF2411F8,0xFEEC0969,0xFED003E8,0xFE64019A,0xFD741E52,0xFF4817E4,0xFEA011BB,0xE6000602, -0x99FC22C5,0xE85F34,0xE85F34,0xE85F34,0xE85F34,0xFEB03B0D,0xFEB03B0D,0xFEB03B0D,0xFE8821D8,0xFE8821D8,0xDA7C1F05,0xFE8031CA,0xFE8031CA,0xFE8031CA,0xFE380B41,0xFE380B41,0xE62C0726,0xFE041148,0xFE041148,0xD000013D,0xAC001142,0x1545F33,0x1545F33,0x1545F33,0xFE082BC5,0xFE082BC5,0xD8001F8B,0xE20029C6,0xE20029C6,0xC000126A,0xA2001D03,0x2FFC5F33, -0x2FFC5F33,0x9C003C4B,0x8A003C13,0x72005F33,0xFECC4D68,0xF8E0580D,0xE85F34,0xFEAC3CD5,0xFE8029D5,0xFE5C1A05,0xFE501419,0xFE2004B9,0xFEB44BB9,0xFE903A4A,0xFE201C0B,0xC000126A,0x1E85F33,0x1581144,0x1581144,0x1581144,0x1581144,0xFF300728,0xFF300728,0xFF300728,0xFEFC0031,0xFEFC0031,0xDAFC0001,0x7FC1142,0x7FC1142,0x7FC1142,0xFEA0025D,0xFEA0025D, -0xDAA00001,0x85FC1142,0x85FC1142,0xD000013D,0xAC001142,0x7FC1142,0x7FC1142,0x7FC1142,0xFEA0025D,0xFEA0025D,0xDAA00001,0x85FC1142,0x85FC1142,0xD000013D,0xAC001142,0x85FC1142,0x85FC1142,0xD000013D,0xAC001142,0xAC001142,0xFF3C0EA4,0xFF4C0F40,0x1581144,0xFF240CB2,0xFF04093A,0xFEE40632,0xFED003E8,0xFE64019A,0xFF340ECD,0xFF180C3D,0x65FC1142,0xD000013D, -0x65FC1142,0x1DC0265,0xFFD00171,0xFFC00074,0xFFB80000,0xC9FC0265,0xFFAC00DA,0xFF940001,0xE5F80265,0xFF280000,0xEC000265,0xC9FC0265,0xFFAC00DA,0xFF940001,0xE5F80265,0xFF280000,0xEC000265,0xE5F80265,0xFF280000,0xEC000265,0xEC000265,0xC9FC0265,0xFFAC00DA,0xFF940001,0xE5F80265,0xFF280000,0xEC000265,0xE5F80265,0xFF280000,0xEC000265,0xEC000265,0xE5F80265, -0xFF280000,0xEC000265,0xEC000265,0xEC000265,0xFFD00225,0x1FC0265,0xF5D80244,0xFFC001D4,0xFFA80172,0xFF8400B4,0xFF500000,0xFEF40000,0xFBD40221,0xFFC001C4,0xFF700014,0xEC000265,0xDFF80265,0x7C1F04,0x7C1F04,0x7C1F04,0x7C1F04,0x7C1F04,0x7C1F04,0x7C1F04,0x7C1F04,0x7C1F04,0x7C1F04,0xFE2404C8,0xFE2404C8,0xFE2404C8,0xFE2404C8,0xFE2404C8, -0xFE2404C8,0xBA000000,0xBA000000,0xBA000000,0x7C000001,0xBC1F02,0xBC1F02,0xBC1F02,0xBC1F02,0xBC1F02,0xBC1F02,0x98000BD5,0x98000BD5,0x98000BD5,0x6E0005F1,0x17C1F02,0x17C1F02,0x17C1F02,0x56001315,0x3E001F02,0xFE6C18FD,0x7C1F04,0x7C1F04,0xFE581220,0xFE500D24,0xFE3C0894,0xFE3C0894,0xFE140164,0xFC541735,0xFE341139,0xE60000CD,0x98000BD5, -0x10C1F02,}; -static const uint32_t g_etc1_to_bc7_m6_table246[] = { -0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1, -0x1,0x1,0x1,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x10C0000,0x10C0000,0x10C0000,0x10C0000,0x10C0000,0x10C0000,0x10C0000,0x10C0000,0x10C0000,0x10C0000,0x38C0000,0x38C0000,0x38C0000,0x38C0000,0x38C0000, -0x38C0000,0x4BFC0000,0x4BFC0000,0x4BFC0000,0x84000001,0x38C0000,0x38C0000,0x38C0000,0x38C0000,0x38C0000,0x38C0000,0x4BFC0000,0x4BFC0000,0x4BFC0000,0x84000001,0x4BFC0000,0x4BFC0000,0x4BFC0000,0x84000001,0x84000001,0x71C0000,0x10C0000,0x10C0000,0x1380000,0x1500000,0x16C0000,0x16C0000,0x3C00000,0x1380000,0x1500000,0x1DF80000,0x4BFC0000, -0x1DF80000,0x1C80000,0x1C80000,0x1C80000,0x1C80000,0xAFFC0000,0xAFFC0000,0xAFFC0000,0xD7FC0000,0xD7FC0000,0xE2000001,0xAFFC0000,0xAFFC0000,0xAFFC0000,0xD7FC0000,0xD7FC0000,0xE2000001,0xD7FC0000,0xD7FC0000,0xE2000001,0xE2000001,0xAFFC0000,0xAFFC0000,0xAFFC0000,0xD7FC0000,0xD7FC0000,0xE2000001,0xD7FC0000,0xD7FC0000,0xE2000001,0xE2000001,0xD7FC0000, -0xD7FC0000,0xE2000001,0xE2000001,0xE2000001,0x43FC0000,0xBE40000,0x1C80000,0x9BFC0000,0xBDFC0000,0xCDFC0000,0xD3F80000,0xDBF80000,0x7DFC0000,0xAFFC0000,0xCDFC0000,0xE2000001,0xCDFC0000,0x1FC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000, -0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xF7FC0001,0xF7FC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFFF00000,0xFE000000, -0xFFFC0000,0x1349B71,0xFF18821D,0xFEFC6DCC,0xFEF06694,0xFEE868A1,0xFEC84CE6,0xFEC44258,0xFEA03499,0xFE942774,0xF0842481,0xFED0690D,0xFE9845F3,0xFE8C37EE,0xFE6422AE,0xFE400F8D,0xF6340916,0xFE3829B6,0xFE0811D2,0xEA000401,0xCC001F86,0x1C89B71,0xFE8875EC,0xFE706693,0xFE2C4A85,0xFE0831B5,0xEE00257D,0xFE0848EA,0xF4002CA6,0xE20019DE,0xC600308B,0x69FC9B71, -0xD6007334,0xC40054F9,0xB200601A,0x9A009B73,0xFF0C818D,0xFF2C9219,0xFF2C962C,0xFED46499,0xFEA84503,0xFE7025F5,0xFE5C1968,0xFE2807C2,0xFEF87F79,0xFED06046,0xFE3020B2,0xE20019DE,0x41FC9B71,0x19C1F85,0xFF801918,0xFF701365,0xFF681144,0xFF681419,0xFF4C0B8A,0xFF4407D9,0xFF2C05B5,0xFF140089,0xF10C016D,0x6BFC1F85,0xFF3815A4,0xFF201144,0xFEF00C35,0xFEB8031D, -0xF0A4016D,0xB7F81F85,0xFE381142,0xEA000401,0xCC001F86,0x6BFC1F85,0xFF3815A4,0xFF201144,0xFEF00C35,0xFEB8031D,0xF0A4016D,0xB7F81F85,0xFE381142,0xEA000401,0xCC001F86,0xB7F81F85,0xFE381142,0xEA000401,0xCC001F86,0xCC001F86,0xFF801BA1,0xFF8C1D9D,0xF5981E64,0xFF5C1729,0xFF401123,0xFEFC0989,0xFEE404A5,0xFE8C025D,0xFF781B86,0xFF5C1652,0xFED011A5,0xEA000401, -0xA3FC1F85,0xF06694,0xF06694,0xF06694,0xF06694,0xFEC44258,0xFEC44258,0xFEC44258,0xFE942774,0xFE942774,0xE2842315,0xFE8C37EE,0xFE8C37EE,0xFE8C37EE,0xFE400F8D,0xFE400F8D,0xF03408A6,0xFE0811D2,0xFE0811D2,0xDC0000F5,0xB4001142,0x1686693,0x1686693,0x1686693,0xFE0831B5,0xFE0831B5,0xDE002373,0xEE002C26,0xEE002C26,0xCC0013AA,0xA8001E33,0x39F86693, -0x39F86693,0xA600416D,0x90004023,0x78006693,0xFECC54C8,0xFEEC5F3D,0xF06694,0xFEB443E1,0xFE943075,0xFE681FB0,0xFE5C1968,0xFE2807C2,0xFEB45309,0xFE98413E,0xFE301FEE,0xCC0013AA,0x3FC6693,0x1681144,0x1681144,0x1681144,0x1681144,0xFF4407D9,0xFF4407D9,0xFF4407D9,0xFF140089,0xFF140089,0xE30C0001,0x1FFC1142,0x1FFC1142,0x1FFC1142,0xFEB8031D,0xFEB8031D, -0xE2B00001,0x91FC1142,0x91FC1142,0xDC0000F5,0xB4001142,0x1FFC1142,0x1FFC1142,0x1FFC1142,0xFEB8031D,0xFEB8031D,0xE2B00001,0x91FC1142,0x91FC1142,0xDC0000F5,0xB4001142,0x91FC1142,0x91FC1142,0xDC0000F5,0xB4001142,0xB4001142,0xFF580EC9,0xFB640F79,0x1681144,0xFF440D22,0xFF1809DA,0xFEF406DA,0xFEE404A5,0xFE8C025D,0xFD4C0F20,0xFF240CC8,0x75FC1142,0xDC0000F5, -0x75FC1142,0x1E4016D,0xFFDC00DD,0xFFCC0044,0xFFC80000,0xD5FC016D,0xFFB80082,0xFFAC0001,0xEBF8016D,0xFF580000,0xF000016D,0xD5FC016D,0xFFB80082,0xFFAC0001,0xEBF8016D,0xFF580000,0xF000016D,0xEBF8016D,0xFF580000,0xF000016D,0xF000016D,0xD5FC016D,0xFFB80082,0xFFAC0001,0xEBF8016D,0xFF580000,0xF000016D,0xEBF8016D,0xFF580000,0xF000016D,0xF000016D,0xEBF8016D, -0xFF580000,0xF000016D,0xF000016D,0xF000016D,0xF9E00152,0x27FC016D,0xF9E00154,0xFFD40120,0xFFBC00DA,0xFF98006D,0xFF780000,0xFF300000,0xFFDC0139,0xFFCC010D,0xFF90000A,0xF000016D,0xE5FC016D,0x842314,0x842314,0x842314,0x842314,0x842314,0x842314,0x842314,0x842314,0x842314,0x842314,0xFE3006C4,0xFE3006C4,0xFE3006C4,0xFE3006C4,0xFE3006C4, -0xFE3006C4,0xC6000000,0xC6000000,0xC6000000,0x84000001,0x2C42312,0x2C42312,0x2C42312,0x2C42312,0x2C42312,0x2C42312,0xA2000D39,0xA2000D39,0xA2000D39,0x7A0006B9,0x1942312,0x1942312,0x1942312,0x5C001595,0x42002312,0xFE6C1CED,0x842314,0x842314,0xFE681589,0xFE501004,0xFE3C0B14,0xFE3C0B14,0xFE1802A1,0xFE581AC1,0xFE3C14B4,0xF60000EA,0xA2000D39, -0x11C2312,}; -static const uint32_t g_etc1_to_bc7_m6_table247[] = { -0xC0000,0xC0000,0xC0000,0xC0000,0xC0000,0xC0000,0xC0000,0xC0000,0xC0000,0xC0000,0xC0000,0xC0000,0xC0000,0xC0000,0xC0000,0xC0000,0xC0000,0xC0000,0xC0000,0xC0000,0x100000,0x100000,0x100000,0x100000,0x100000,0x100000,0x100000,0x100000,0x100000,0x100000,0x200000, -0x200000,0x200000,0x200000,0x4000001,0xC0000,0xC0000,0xC0000,0xC0000,0xC0000,0xC0000,0xC0000,0xC0000,0xC0000,0xC0000,0xC0000,0x100000,0x180000,0x11C0000,0x11C0000,0x11C0000,0x11C0000,0x11C0000,0x11C0000,0x11C0000,0x11C0000,0x11C0000,0x11C0000,0x3A40000,0x3A40000,0x3A40000,0x3A40000,0x3A40000, -0x3A40000,0x57FC0000,0x57FC0000,0x57FC0000,0x8C000001,0x3A40000,0x3A40000,0x3A40000,0x3A40000,0x3A40000,0x3A40000,0x57FC0000,0x57FC0000,0x57FC0000,0x8C000001,0x57FC0000,0x57FC0000,0x57FC0000,0x8C000001,0x8C000001,0xF2C0000,0x11C0000,0x11C0000,0x5480000,0x1640000,0x3800000,0x3800000,0x1DC0000,0x5480000,0x1640000,0x2BFC0000,0x57FC0000, -0x2BFC0000,0x1D80000,0x1D80000,0x1D80000,0x1D80000,0xC7FC0000,0xC7FC0000,0xC7FC0000,0xE3FC0000,0xE3FC0000,0xEA000001,0xC7FC0000,0xC7FC0000,0xC7FC0000,0xE3FC0000,0xE3FC0000,0xEA000001,0xE3FC0000,0xE3FC0000,0xEA000001,0xEA000001,0xC7FC0000,0xC7FC0000,0xC7FC0000,0xE3FC0000,0xE3FC0000,0xEA000001,0xE3FC0000,0xE3FC0000,0xEA000001,0xEA000001,0xE3FC0000, -0xE3FC0000,0xEA000001,0xEA000001,0xEA000001,0x7BFC0000,0x1F80000,0x1D80000,0xB9FC0000,0xD1FC0000,0xDDF80000,0xDFFC0000,0xE5FC0000,0xA3FC0000,0xC7FC0000,0xDDF80000,0xEA000001,0xDDF80000,0x1FC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000, -0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xF7FC0001,0xF7FC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFFF00000,0xFE000000, -0xFFFC0000,0x14097B9,0xFF248115,0xFF086EE8,0xFF006878,0xFF006825,0xFEDC4F04,0xFED0456C,0xFEAC3621,0xFEA02A0C,0xF49424D5,0xFEDC67C5,0xFEB047DF,0xFE983B2E,0xFE702442,0xFE5812B1,0xFA3C0922,0xFE38290A,0xFE2012C6,0xEE040282,0xD20C1C9A,0x1DC97B9,0xFEA0761C,0xFE846878,0xFE384B75,0xFE1434A9,0xF400251D,0xFE084686,0xFA002B02,0xE20015EA,0xCC002B8F,0x73F897B9, -0xDC0071AC,0xCA0050F9,0xB8005AEA,0x9E0097BB,0xFF207F85,0xFF2C8F25,0xF73C935D,0xFEF064CD,0xFEB446BE,0xFE7C292B,0xFE681CD5,0xFE400A4D,0xFF107DEB,0xFED0602E,0xFE3C238C,0xE20015EA,0x4DFC97B9,0x1A41C9D,0xFF8C1788,0xFF7C12FD,0xFF781144,0xFF7412AD,0xFF5C0BA2,0xFF500895,0xFF38056D,0xFF2C0121,0xF51C00B5,0x7BFC1C9A,0xFF4C14D3,0xFF381144,0xFF080B7D,0xFED8040D, -0xF4B800B5,0xBFF81C9A,0xFE6C1142,0xEC000266,0xD2001C9A,0x7BFC1C9A,0xFF4C14D3,0xFF381144,0xFF080B7D,0xFED8040D,0xF4B800B5,0xBFF81C9A,0xFE6C1142,0xEC000266,0xD2001C9A,0xBFF81C9A,0xFE6C1142,0xEC000266,0xD2001C9A,0xD2001C9A,0xFF901929,0xF9A01B05,0xFBA41B98,0xFF781595,0xFF481062,0xFF200A13,0xFEFC0585,0xFEA8031D,0xFF88194D,0xFF6814FA,0xFEE41193,0xEC000266, -0xADFC1C9A,0x1006878,0x1006878,0x1006878,0x1006878,0xFED0456C,0xFED0456C,0xFED0456C,0xFEA02A0C,0xFEA02A0C,0xEA942421,0xFE983B2E,0xFE983B2E,0xFE983B2E,0xFE5812B1,0xFE5812B1,0xF640090E,0xFE2012C6,0xFE2012C6,0xE20400DA,0xBC0C1142,0x17C6878,0x17C6878,0x17C6878,0xFE1434A9,0xFE1434A9,0xE8002431,0xFA002AF2,0xFA002AF2,0xD20011F2,0xB4001CBB,0x43F86878, -0x43F86878,0xB2004159,0x9C003F8B,0x7E00687B,0xFEE85775,0xFEEC61A9,0x1006878,0xFEC446F4,0xFE943411,0xFE782328,0xFE681CD5,0xFE400A4D,0xFED055B3,0xFEB04469,0xFE3C22C8,0xD20011F2,0x11FC6878,0x1781144,0x1781144,0x1781144,0x1781144,0xFF500895,0xFF500895,0xFF500895,0xFF2C0121,0xFF2C0121,0xEB1C0001,0x37FC1142,0x37FC1142,0x37FC1142,0xFED8040D,0xFED8040D, -0xEAC00001,0x9DFC1142,0x9DFC1142,0xE40000C1,0xBC001142,0x37FC1142,0x37FC1142,0x37FC1142,0xFED8040D,0xFED8040D,0xEAC00001,0x9DFC1142,0x9DFC1142,0xE40000C1,0xBC001142,0x9DFC1142,0x9DFC1142,0xE40000C1,0xBC001142,0xBC001142,0xFB6C0F20,0xFF6C0FA1,0x1781144,0xFD580D75,0xFF2C0A82,0xFEFC07D5,0xFEFC0585,0xFEA8031D,0xFF500F68,0xFF480D24,0x83FC1142,0xE40000C1, -0x83FC1142,0x1EC00B5,0xFFE80071,0xFFD80024,0xFFD80000,0xE3FC00B5,0xFFCC0044,0xFFC40000,0xF1F800B5,0xFF880000,0xF40000B5,0xE3FC00B5,0xFFCC0044,0xFFC40000,0xF1F800B5,0xFF880000,0xF40000B5,0xF1F800B5,0xFF880000,0xF40000B5,0xF40000B5,0xE3FC00B5,0xFFCC0044,0xFFC40000,0xF1F800B5,0xFF880000,0xF40000B5,0xF1F800B5,0xFF880000,0xF40000B5,0xF40000B5,0xF1F800B5, -0xFF880000,0xF40000B5,0xF40000B5,0xF40000B5,0xFDE800A2,0x67FC00B5,0xFDE800A4,0xFBE40091,0xFFD0006A,0xFFC00034,0xFFA00000,0xFF6C0000,0xFBE800A2,0xFFD80088,0xFFB00005,0xF40000B5,0xEDFC00B5,0x942420,0x942420,0x942420,0x942420,0x942420,0x942420,0x942420,0x942420,0x942420,0x942420,0xFE4407D9,0xFE4407D9,0xFE4407D9,0xFE4407D9,0xFE4407D9, -0xFE4407D9,0xD00C0000,0xD00C0000,0xD00C0000,0x8C0C0001,0xDC2420,0xDC2420,0xDC2420,0xDC2420,0xDC2420,0xDC2420,0xAE000C69,0xAE000C69,0xAE000C69,0x800005B9,0x1BC2420,0x1BC2420,0x1BC2420,0x66001572,0x48002422,0xFC881E08,0x942420,0x942420,0xFE6816CD,0xFE641154,0xFE4C0C44,0xFE4C0C44,0xFE2C0371,0xFA6C1C20,0xFE5015C5,0xFE000095,0xAE000C69, -0x1382420,}; -static const uint32_t g_etc1_to_bc7_m6_table248[] = { -0x1C0001,0x1C0001,0x1C0001,0x1C0001,0x1C0001,0x1C0001,0x1C0001,0x1C0001,0x1C0001,0x1C0001,0x1C0001,0x1C0001,0x1C0001,0x1C0001,0x1C0001,0x1C0001,0x1C0001,0x1C0001,0x1C0001,0x1C0001,0x2C0000,0x2C0000,0x2C0000,0x2C0000,0x2C0000,0x2C0000,0x2C0000,0x2C0000,0x2C0000,0x2C0000,0x580000, -0x580000,0x580000,0x580000,0xE000000,0x1C0001,0x1C0001,0x1C0001,0x1C0001,0x1C0001,0x1C0001,0x1C0001,0x1C0001,0x200000,0x200000,0x200000,0x2C0000,0x3C0000,0x12C0001,0x12C0001,0x12C0001,0x12C0001,0x12C0001,0x12C0001,0x12C0001,0x12C0001,0x12C0001,0x12C0001,0x1C00000,0x1C00000,0x1C00000,0x1C00000,0x1C00000, -0x1C00000,0x65F80000,0x65F80000,0x65F80000,0x96000000,0x1C00000,0x1C00000,0x1C00000,0x1C00000,0x1C00000,0x1C00000,0x65F80000,0x65F80000,0x65F80000,0x96000000,0x65F80000,0x65F80000,0x65F80000,0x96000000,0x96000000,0x9400000,0x12C0001,0x12C0001,0x1600000,0x5780000,0x3980000,0x3980000,0x1FC0000,0x1600000,0x5780000,0x3DF80000,0x65F80000, -0x3DF80000,0x1E80001,0x1E80001,0x1E80001,0x1E80001,0xE3FC0000,0xE3FC0000,0xE3FC0000,0xF1F80000,0xF1F80000,0xF4000000,0xE3FC0000,0xE3FC0000,0xE3FC0000,0xF1F80000,0xF1F80000,0xF4000000,0xF1F80000,0xF1F80000,0xF4000000,0xF4000000,0xE3FC0000,0xE3FC0000,0xE3FC0000,0xF1F80000,0xF1F80000,0xF4000000,0xF1F80000,0xF1F80000,0xF4000000,0xF4000000,0xF1F80000, -0xF1F80000,0xF4000000,0xF4000000,0xF4000000,0xBBFC0000,0x67FC0000,0x1E80001,0xDBFC0000,0xE7FC0000,0xEDFC0000,0xEFFC0000,0xF3F40000,0xD1FC0000,0xE3FC0000,0xEDFC0000,0xF4000000,0xEDFC0000,0x1FC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000, -0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xF7FC0001,0xF7FC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFFF00000,0xFE000000, -0xFFFC0000,0x14C9144,0xFF307DB4,0xFF206E1B,0xFF10687B,0xFF0C65C4,0xFEE84FCF,0xFEDC4763,0xFEC036E6,0xFEB82BFB,0xF8A42456,0xFEF464EC,0xFEC448BB,0xFEB03DB5,0xFE88258F,0xFE7015E6,0xFE500915,0xFE582844,0xFE38142D,0xF4100195,0xD81C19B9,0x1EC9144,0xFEB87431,0xFEA06878,0xFE584B5A,0xFE2C36E6,0xF8042454,0xFE084419,0xFA00296D,0xEE001109,0xD2002588,0x7BFC9144, -0xE0006E48,0xD0004AD6,0xBE005385,0xA6009144,0xFF207B7A,0xFD488994,0xFD488D3C,0xFF0062DC,0xFECC477A,0xFE982BD6,0xFE902035,0xFE580D46,0xFF1079CE,0xFEDC5F8A,0xFE582697,0xEE001109,0x59FC9144,0x1B019BB,0xFFA415E6,0xFF941283,0xFF8C1142,0xFF8C1155,0xFF740BEA,0xFF680989,0xFF4C0593,0xFF3801FD,0xF92C0035,0x8DFC19B8,0xFF6413E5,0xFF541142,0xFF200AFD,0xFEFC0521, -0xFACC0034,0xC7FC19B8,0xFEA01142,0xF2000124,0xD80019B8,0x8DFC19B8,0xFF6413E5,0xFF541142,0xFF200AFD,0xFEFC0521,0xFACC0034,0xC7FC19B8,0xFEA01142,0xF2000124,0xD80019B8,0xC7FC19B8,0xFEA01142,0xF2000124,0xD80019B8,0xD80019B8,0xFFA016ED,0xFFAC1835,0xFFAC18E6,0xFF881403,0xFF5C0FD6,0xFF380A61,0xFF2006AD,0xFED00448,0xFF941715,0xFF841392,0xFF101175,0xF2000124, -0xB9FC19B8,0x110687B,0x110687B,0x110687B,0x110687B,0xFEDC4763,0xFEDC4763,0xFEDC4763,0xFEB82BFB,0xFEB82BFB,0xF4A42422,0xFEB03DB5,0xFEB03DB5,0xFEB03DB5,0xFE7015E6,0xFE7015E6,0xFE500915,0xFE38142D,0xFE38142D,0xEC1800D9,0xC41C1145,0x1986878,0x1986878,0x1986878,0xFE2C36E6,0xFE2C36E6,0xF4082420,0xFA00295D,0xFA00295D,0xE2000EE1,0xC0001A74,0x51F86878, -0x51F86878,0xB8003F52,0xA6003D85,0x88006878,0xFEF458B2,0xFF0C61E3,0x110687B,0xFED448E2,0xFEB0370B,0xFE9026C5,0xFE902035,0xFE580D46,0xFED85741,0xFEBC46B5,0xFE5825EE,0xE2000EE1,0x21FC6878,0x18C1142,0x18C1142,0x18C1142,0x18C1142,0xFF680989,0xFF680989,0xFF680989,0xFF3801FD,0xFF3801FD,0xF52C0001,0x53FC1142,0x53FC1142,0x53FC1142,0xFEFC0521,0xFEFC0521, -0xF4D00001,0xABF81142,0xABF81142,0xEC000080,0xC4001144,0x53FC1142,0x53FC1142,0x53FC1142,0xFEFC0521,0xFEFC0521,0xF4D00001,0xABF81142,0xABF81142,0xEC000080,0xC4001144,0xABF81142,0xABF81142,0xEC000080,0xC4001144,0xC4001144,0xFF740F52,0xFD880FD2,0x18C1142,0xFF5C0DE5,0xFF540B50,0xFF2808B1,0xFF2006AD,0xFED00448,0xFD740F79,0xFF5C0D81,0x95FC1142,0xEC000080, -0x95FC1142,0x1F40032,0xFDF00022,0xFFEC000A,0xFFE80001,0xF1FC0032,0xFFE40011,0xFFE00000,0xF9F80032,0xFFC00000,0xF8000034,0xF1FC0032,0xFFE40011,0xFFE00000,0xF9F80032,0xFFC00000,0xF8000034,0xF9F80032,0xFFC00000,0xF8000034,0xF8000034,0xF1FC0032,0xFFE40011,0xFFE00000,0xF9F80032,0xFFC00000,0xF8000034,0xF9F80032,0xFFC00000,0xF8000034,0xF8000034,0xF9F80032, -0xFFC00000,0xF8000034,0xF8000034,0xF8000034,0xFDF40029,0xB7FC0032,0xF3F40032,0xFFEC0022,0xFFE80019,0xFFDC000D,0xFFCC0000,0xFFB00000,0xFFF00029,0xFFEC0029,0xFFD40001,0xF8000034,0xF7FC0032,0xA42422,0xA42422,0xA42422,0xA42422,0xA42422,0xA42422,0xA42422,0xA42422,0xA42422,0xA42422,0xFE5008B1,0xFE5008B1,0xFE5008B1,0xFE5008B1,0xFE5008B1, -0xFE5008B1,0xD8200001,0xD8200001,0xD8200001,0x961C0001,0x2F42420,0x2F42420,0x2F42420,0x2F42420,0x2F42420,0x2F42420,0xBA000AB5,0xBA000AB5,0xBA000AB5,0x8C000425,0x1F42420,0x1F42420,0x1F42420,0x6C001408,0x52002420,0xFE8C1E6A,0xA42422,0xA42422,0xFE84174D,0xFE781212,0xFE5C0D22,0xFE5C0D22,0xFE400431,0xFE741C52,0xFE641699,0xFE1000D0,0xBA000AB5, -0x1602420,}; -static const uint32_t g_etc1_to_bc7_m6_table249[] = { -0x2C0001,0x2C0001,0x2C0001,0x2C0001,0x2C0001,0x2C0001,0x2C0001,0x2C0001,0x2C0001,0x2C0001,0x2C0001,0x2C0001,0x2C0001,0x2C0001,0x2C0001,0x2C0001,0x2C0001,0x2C0001,0x2C0001,0x2C0001,0x440000,0x440000,0x440000,0x440000,0x440000,0x440000,0x440000,0x440000,0x440000,0x440000,0x880000, -0x880000,0x880000,0x880000,0x16000000,0x2C0001,0x2C0001,0x2C0001,0x2C0001,0x2C0001,0x2C0001,0x2C0001,0x2C0001,0x300000,0x300000,0x300000,0x440000,0x600000,0x13C0001,0x13C0001,0x13C0001,0x13C0001,0x13C0001,0x13C0001,0x13C0001,0x13C0001,0x13C0001,0x13C0001,0x1D80000,0x1D80000,0x1D80000,0x1D80000,0x1D80000, -0x1D80000,0x71F80000,0x71F80000,0x71F80000,0x9E000000,0x1D80000,0x1D80000,0x1D80000,0x1D80000,0x1D80000,0x1D80000,0x71F80000,0x71F80000,0x71F80000,0x9E000000,0x71F80000,0x71F80000,0x71F80000,0x9E000000,0x9E000000,0x1540000,0x13C0001,0x13C0001,0x3700000,0x58C0000,0x1B00000,0x1B00000,0x13FC0000,0x3700000,0x58C0000,0x4BFC0000,0x71F80000, -0x4BFC0000,0x1F80001,0x1F80001,0x1F80001,0x1F80001,0xFBFC0000,0xFBFC0000,0xFBFC0000,0xFDF80000,0xFDF80000,0xFC000000,0xFBFC0000,0xFBFC0000,0xFBFC0000,0xFDF80000,0xFDF80000,0xFC000000,0xFDF80000,0xFDF80000,0xFC000000,0xFC000000,0xFBFC0000,0xFBFC0000,0xFBFC0000,0xFDF80000,0xFDF80000,0xFC000000,0xFDF80000,0xFDF80000,0xFC000000,0xFC000000,0xFDF80000, -0xFDF80000,0xFC000000,0xFC000000,0xFC000000,0xF5FC0000,0xE7FC0000,0x1F80001,0xF9FC0000,0xFBFC0000,0xFDF80000,0xFDF80000,0xFDF80000,0xF7FC0000,0xFBFC0000,0xFDF80000,0xFC000000,0xFDF80000,0x1FC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000, -0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xF7FC0001,0xF7FC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFFF00000,0xFE000000, -0xFFFC0000,0x1588BEC,0xFF447ADF,0xFF2C6D47,0xFF20687B,0xFF186404,0xFF00509F,0xFEF44933,0xFED837A6,0xFECC2E12,0xFCB42426,0xFF0062AC,0xFED049C7,0xFEC43FBB,0xFE942717,0xFE7C18FE,0xFE68098D,0xFE702804,0xFE4C15EB,0xF8240111,0xDE2C1785,0x3FC8BEC,0xFECC72CF,0xFEB86878,0xFE704B2A,0xFE4C3941,0xFC182424,0xFE204349,0xFE082945,0xF4000D79,0xD80020D8,0x85F88BEC, -0xE6006BE4,0xD60045F6,0xC4004D71,0xAC008BEC,0xFF3C7814,0xFF4C849C,0xFF4C888C,0xFF1861D6,0xFED8483B,0xFEAC2E3E,0xFE902345,0xFE6C0FFB,0xFF3476CA,0xFEF45E5F,0xFE7028DB,0xF4000D79,0x63FC8BEC,0x1BC1783,0xFFB014AE,0xFFA0122B,0xFF9C1142,0xFF98106D,0xFF800C3A,0xFF740A69,0xFF6405EB,0xFF4C030A,0xFD3C0005,0x9BFC1783,0xFF7C132D,0xFF6C1142,0xFF380ACD,0xFF140631, -0xFEE00004,0xCFF81783,0xFED41142,0xF8000074,0xDE001784,0x9BFC1783,0xFF7C132D,0xFF6C1142,0xFF380ACD,0xFF140631,0xFEE00004,0xCFF81783,0xFED41142,0xF8000074,0xDE001784,0xCFF81783,0xFED41142,0xF8000074,0xDE001784,0xDE001784,0xFFB41556,0xFFAC1685,0xF7BC1703,0xFF9812DD,0xFF700F7A,0xFF480B1E,0xFF2807B2,0xFEE40559,0xFFA41576,0xFF841292,0xFF301168,0xF8000074, -0xC1FC1783,0x120687B,0x120687B,0x120687B,0x120687B,0xFEF44933,0xFEF44933,0xFEF44933,0xFECC2E12,0xFECC2E12,0xFCB42422,0xFEC43FBB,0xFEC43FBB,0xFEC43FBB,0xFE7C18FE,0xFE7C18FE,0xFE68098D,0xFE4C15EB,0xFE4C15EB,0xF42800D9,0xCC2C1145,0x1B06878,0x1B06878,0x1B06878,0xFE4C3941,0xFE4C3941,0xFC182420,0xFE082945,0xFE082945,0xE8000C8D,0xC6001888,0x5DF46878, -0x5DF46878,0xC4003D82,0xAC003B8D,0x90006878,0xFF045983,0xF71C62B2,0x120687B,0xFEE84AEA,0xFEC4399B,0xFEAC29BA,0xFE902345,0xFE6C0FFB,0xFEF8582E,0xFED0482D,0xFE70284B,0xE8000C8D,0x31FC6878,0x19C1142,0x19C1142,0x19C1142,0x19C1142,0xFF740A69,0xFF740A69,0xFF740A69,0xFF4C030A,0xFF4C030A,0xFD3C0001,0x6BFC1142,0x6BFC1142,0x6BFC1142,0xFF140631,0xFF140631, -0xFCE00001,0xB7F81142,0xB7F81142,0xF8000050,0xCC001144,0x6BFC1142,0x6BFC1142,0x6BFC1142,0xFF140631,0xFF140631,0xFCE00001,0xB7F81142,0xB7F81142,0xF8000050,0xCC001144,0xB7F81142,0xB7F81142,0xF8000050,0xCC001144,0xCC001144,0xFF900F79,0xFF8C101A,0x19C1142,0xFF780E45,0xFF5C0C05,0xFF3809A1,0xFF2807B2,0xFEE40559,0xFF780FCD,0xFF680E10,0xA3FC1142,0xF8000050, -0xA3FC1142,0x1FC0002,0xFDFC0002,0xFFFC0001,0xFFF80001,0xFDFC0002,0xFFF80001,0xFFF80000,0xFFF80002,0xFFF00000,0xFC000004,0xFDFC0002,0xFFF80001,0xFFF80000,0xFFF80002,0xFFF00000,0xFC000004,0xFFF80002,0xFFF00000,0xFC000004,0xFC000004,0xFDFC0002,0xFFF80001,0xFFF80000,0xFFF80002,0xFFF00000,0xFC000004,0xFFF80002,0xFFF00000,0xFC000004,0xFC000004,0xFFF80002, -0xFFF00000,0xFC000004,0xFC000004,0xFC000004,0xFDFC0002,0xF7FC0002,0xF7FC0002,0xFDFC0002,0xFFF80001,0xFFF40001,0xFFF40000,0xFFEC0000,0xFDFC0002,0xFDFC0002,0xFFF40000,0xFC000004,0xFFF80002,0xB42422,0xB42422,0xB42422,0xB42422,0xB42422,0xB42422,0xB42422,0xB42422,0xB42422,0xB42422,0xFE680989,0xFE680989,0xFE680989,0xFE680989,0xFE680989, -0xFE680989,0xE0300001,0xE0300001,0xE0300001,0x9E2C0001,0x30C2420,0x30C2420,0x30C2420,0x30C2420,0x30C2420,0x30C2420,0xCC000949,0xCC000949,0xCC000949,0x980002FD,0xBFC2420,0xBFC2420,0xBFC2420,0x780012C8,0x5A002420,0xFEAC1E85,0xB42422,0xB42422,0xFE9017EA,0xFE8C12CA,0xFE780DFA,0xFE780DFA,0xFE5404ED,0xFE901C99,0xFE7816FA,0xFE200140,0xCC000949, -0x1802420,}; -static const uint32_t g_etc1_to_bc7_m6_table250[] = { -0x3C0001,0x3C0001,0x3C0001,0x3C0001,0x3C0001,0x3C0001,0x3C0001,0x3C0001,0x3C0001,0x3C0001,0x3C0001,0x3C0001,0x3C0001,0x3C0001,0x3C0001,0x3C0001,0x3C0001,0x3C0001,0x3C0001,0x3C0001,0x5C0000,0x5C0000,0x5C0000,0x5C0000,0x5C0000,0x5C0000,0x5C0000,0x5C0000,0x5C0000,0x5C0000,0xB80000, -0xB80000,0xB80000,0xB80000,0x1E000000,0x3C0001,0x3C0001,0x3C0001,0x3C0001,0x3C0001,0x3C0001,0x3C0001,0x3C0001,0x8400000,0x8400000,0x8400000,0x5C0000,0x800000,0x14C0001,0x14C0001,0x14C0001,0x14C0001,0x14C0001,0x14C0001,0x14C0001,0x14C0001,0x14C0001,0x14C0001,0x1F00000,0x1F00000,0x1F00000,0x1F00000,0x1F00000, -0x1F00000,0x7DF80000,0x7DF80000,0x7DF80000,0xA6000000,0x1F00000,0x1F00000,0x1F00000,0x1F00000,0x1F00000,0x1F00000,0x7DF80000,0x7DF80000,0x7DF80000,0xA6000000,0x7DF80000,0x7DF80000,0x7DF80000,0xA6000000,0xA6000000,0x1640000,0x14C0001,0x14C0001,0x1840000,0x5A00000,0x3C40000,0x3C40000,0x27FC0000,0x1840000,0x5A00000,0x5BFC0000,0x7DF80000, -0x5BFC0000,0x1FC0001,0x1FC0001,0x1FC0001,0x1FC0001,0xFDFC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000, -0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFBFC0001,0xF7FC0001,0x1FC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFFFC0000,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0x1FC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000, -0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xF7FC0001,0xF7FC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFFF00000,0xFE000000, -0xFFFC0000,0x1608334,0xFF4473EF,0xFF3867CB,0xFF2C6383,0xFF245F04,0xFF0C4D93,0xFF0046EB,0xFEE4366A,0xFED82DC2,0xFEC42422,0xFF0C5CE4,0xFEE8465F,0xFED03D53,0xFEAC2617,0xFE941956,0xFE740A69,0xFE7C2534,0xFE5814AB,0xFA3C009A,0xE03C142D,0x13FC8330,0xFEE46CB7,0xFEC86380,0xFE88483A,0xFE643831,0xFE2C2422,0xFE2C3F39,0xFE082639,0xF4000A2D,0xDE001B24,0x8BFC8330, -0xEC006584,0xDC003FEA,0xCA004541,0xB0008330,0xFF3C711C,0xFF4C7D04,0xF9608037,0xFF185C82,0xFEEC452B,0xFEBC2D3F,0xFEA82336,0xFE7410B2,0xFF346F66,0xFF00597C,0xFE7C2771,0xF4000A2D,0x6DFC8330,0x1C4142B,0xFFB411F3,0xFFAC0FDB,0xFFA40F22,0xFFA40E41,0xFF8C0ACE,0xFF800955,0xFF700543,0xFF6402EA,0xFF4C0001,0xA9FC142B,0xFF8810A9,0xFF7C0F20,0xFF4C09A2,0xFF2C05A5, -0xFEF80000,0xD5F8142B,0xFEF00F20,0xFE000010,0xE000142C,0xA9FC142B,0xFF8810A9,0xFF7C0F20,0xFF4C09A2,0xFF2C05A5,0xFEF80000,0xD5F8142B,0xFEF00F20,0xFE000010,0xE000142C,0xD5F8142B,0xFEF00F20,0xFE000010,0xE000142C,0xE000142C,0xFFB41242,0xF9C01343,0xF9C013BB,0xFF98106D,0xFF840D72,0xFF6409D1,0xFF500709,0xFEFC04FD,0xFFB41262,0xFF980FFE,0xFF440F44,0xFE000010, -0xC9FC142B,0x12C6383,0x12C6383,0x12C6383,0x12C6383,0xFF0046EB,0xFF0046EB,0xFF0046EB,0xFED82DC2,0xFED82DC2,0xFEC42422,0xFED03D53,0xFED03D53,0xFED03D53,0xFE941956,0xFE941956,0xFE740A69,0xFE5814AB,0xFE5814AB,0xF838007E,0xD23C0F21,0x1C06380,0x1C06380,0x1C06380,0xFE643831,0xFE643831,0xFE2C2422,0xFE082639,0xFE082639,0xEE0009C5,0xCC001478,0x65F86380, -0x65F86380,0xCA003962,0xB2003611,0x96006380,0xFF1055F5,0xFD285DF2,0x12C6383,0xFEF8483A,0xFED437FA,0xFEBC28FE,0xFEA82336,0xFE7410B2,0xFEF8548A,0xFEDC4611,0xFE7C26E1,0xEE0009C5,0x3DF86380,0x1A40F22,0x1A40F22,0x1A40F22,0x1A40F22,0xFF800955,0xFF800955,0xFF800955,0xFF6402EA,0xFF6402EA,0xFF4C0001,0x7BFC0F20,0x7BFC0F20,0x7BFC0F20,0xFF2C05A5,0xFF2C05A5, -0xFEF80000,0xBFF80F20,0xBFF80F20,0xFC00000D,0xD2000F20,0x7BFC0F20,0x7BFC0F20,0x7BFC0F20,0xFF2C05A5,0xFF2C05A5,0xFEF80000,0xBFF80F20,0xBFF80F20,0xFC00000D,0xD2000F20,0xBFF80F20,0xBFF80F20,0xFC00000D,0xD2000F20,0xD2000F20,0xFF900DB1,0xFBA40E1D,0x1A40F22,0xFF880C92,0xFF700AA5,0xFF5808CA,0xFF500709,0xFEFC04FD,0xFF940DC8,0xFF840C82,0xADFC0F20,0xFC00000D, -0xADFC0F20,0x1FC0002,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000, -0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0002,0xF7FC0002,0xF7FC0002,0xFDFC0002,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFFFC0000,0xFDFC0002,0xFDFC0002,0xFFFC0000,0xFE000000,0xFFFC0000,0xC42422,0xC42422,0xC42422,0xC42422,0xC42422,0xC42422,0xC42422,0xC42422,0xC42422,0xC42422,0xFE740A69,0xFE740A69,0xFE740A69,0xFE740A69,0xFE740A69, -0xFE740A69,0xE8400001,0xE8400001,0xE8400001,0xA63C0001,0x3242420,0x3242420,0x3242420,0x3242420,0x3242420,0x3242420,0xD80007F9,0xD80007F9,0xD80007F9,0xA20001F4,0x17FC2420,0x17FC2420,0x17FC2420,0x7E0011A4,0x62002420,0xFEAC1EF5,0xC42422,0xC42422,0xFEA01865,0xFE941379,0xFE880EBA,0xFE880EBA,0xFE6C05D2,0xFEA01D14,0xFE9417A4,0xFE3401BA,0xD80007F9, -0x1A42420,}; -static const uint32_t g_etc1_to_bc7_m6_table251[] = { -0x4C0001,0x4C0001,0x4C0001,0x4C0001,0x4C0001,0x4C0001,0x4C0001,0x4C0001,0x4C0001,0x4C0001,0x4C0001,0x4C0001,0x4C0001,0x4C0001,0x4C0001,0x4C0001,0x4C0001,0x4C0001,0x4C0001,0x4C0001,0x740000,0x740000,0x740000,0x740000,0x740000,0x740000,0x740000,0x740000,0x740000,0x740000,0xE80000, -0xE80000,0xE80000,0xE80000,0x26000000,0x4C0001,0x4C0001,0x4C0001,0x4C0001,0x4C0001,0x4C0001,0x4C0001,0x4C0001,0x540000,0x540000,0x540000,0x740000,0xA40000,0x15C0001,0x15C0001,0x15C0001,0x15C0001,0x15C0001,0x15C0001,0x15C0001,0x15C0001,0x15C0001,0x15C0001,0xDFC0000,0xDFC0000,0xDFC0000,0xDFC0000,0xDFC0000, -0xDFC0000,0x89F80000,0x89F80000,0x89F80000,0xAE000000,0xDFC0000,0xDFC0000,0xDFC0000,0xDFC0000,0xDFC0000,0xDFC0000,0x89F80000,0x89F80000,0x89F80000,0xAE000000,0x89F80000,0x89F80000,0x89F80000,0xAE000000,0xAE000000,0x3740000,0x15C0001,0x15C0001,0x1980000,0x5B40000,0x1DC0000,0x1DC0000,0x3BFC0000,0x1980000,0x5B40000,0x69FC0000,0x89F80000, -0x69FC0000,0x1FC0001,0x1FC0001,0x1FC0001,0x1FC0001,0xFDFC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000, -0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFBFC0001,0xF7FC0001,0x1FC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFFFC0000,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0x1FC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000, -0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xF7FC0001,0xF7FC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFFF00000,0xFE000000, -0xFFFC0000,0x16879B4,0xFF506BE7,0xFF406114,0xFF385D2B,0xFF305924,0xFF18496F,0xFF0C4373,0xFEF03492,0xFEE42CC6,0xFED42422,0xFF185634,0xFEF441BB,0xFEDC3993,0xFEB8246F,0xFEA018E6,0xFE8C0B51,0xFE9421B4,0xFE701283,0xFC4C003A,0xE44C10AD,0x1FFC79B0,0xFEF0656B,0xFED85D2B,0xFEA0448A,0xFE703629,0xFE442420,0xFE383A6D,0xFE0822E9,0xFA00077D,0xE2001579,0x91FC79B0, -0xF2005E40,0xE0003A48,0xD0003CE5,0xB40079B0,0xFF4C694B,0xFB647402,0xFD6876DF,0xFF2C56B2,0xFF004133,0xFED42B7A,0xFEBC21F6,0xFE84109D,0xFF3467C6,0xFF1053A2,0xFE94250F,0xFA00077D,0x75FC79B0,0x1C810AB,0xFFBC0EC6,0xFFB40D22,0xFFAC0C82,0xFFA40BD1,0xFF9808EE,0xFF8C07B5,0xFF7C0453,0xFF700262,0xFF5C0001,0xAFFC10AB,0xFF940DC1,0xFF880C80,0xFF5807F2,0xFF3804A9, -0xFF100000,0xD7FC10AB,0xFF080C80,0xFE140000,0xE40010AC,0xAFFC10AB,0xFF940DC1,0xFF880C80,0xFF5807F2,0xFF3804A9,0xFF100000,0xD7FC10AB,0xFF080C80,0xFE140000,0xE40010AC,0xD7FC10AB,0xFF080C80,0xFE140000,0xE40010AC,0xE40010AC,0xFFBC0F15,0xFBC40FDB,0xFDC81043,0xFFB00D9E,0xFF980B2E,0xFF6C0809,0xFF5005C9,0xFF20040D,0xFFB40F22,0xFF980D4E,0xFF540C99,0xFE140000, -0xCDFC10AB,0x1385D2B,0x1385D2B,0x1385D2B,0x1385D2B,0xFF0C4373,0xFF0C4373,0xFF0C4373,0xFEE42CC6,0xFEE42CC6,0xFED42422,0xFEDC3993,0xFEDC3993,0xFEDC3993,0xFEA018E6,0xFEA018E6,0xFE8C0B51,0xFE701283,0xFE701283,0xFA480032,0xD64C0C81,0x1D05D2B,0x1D05D2B,0x1D05D2B,0xFE703629,0xFE703629,0xFE442420,0xFE0822E9,0xFE0822E9,0xF4000759,0xD2001024,0x6DF85D2B, -0x6DF85D2B,0xD00034E6,0xB8002FC1,0x9C005D2C,0xFF205092,0xFF2C5816,0x1385D2B,0xFF004403,0xFEEC354B,0xFEBC276E,0xFEBC21F6,0xFE84109D,0xFF104F65,0xFEF441EE,0xFE942496,0xF4000759,0x45FC5D2B,0x1AC0C82,0x1AC0C82,0x1AC0C82,0x1AC0C82,0xFF8C07B5,0xFF8C07B5,0xFF8C07B5,0xFF700262,0xFF700262,0xFF5C0001,0x87FC0C80,0x87FC0C80,0x87FC0C80,0xFF3804A9,0xFF3804A9, -0xFF100000,0xC5F80C80,0xC5F80C80,0xFE140000,0xD6000C80,0x87FC0C80,0x87FC0C80,0x87FC0C80,0xFF3804A9,0xFF3804A9,0xFF100000,0xC5F80C80,0xC5F80C80,0xFE140000,0xD6000C80,0xC5F80C80,0xC5F80C80,0xFE140000,0xD6000C80,0xD6000C80,0xFFA00B50,0xFFAC0B95,0x1AC0C82,0xFF980A69,0xFF8408D1,0xFF640721,0xFF5005C9,0xFF20040D,0xFF940B68,0xFF840A52,0xB5FC0C80,0xFE140000, -0xB5FC0C80,0x1FC0002,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000, -0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0002,0xF7FC0002,0xF7FC0002,0xFDFC0002,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFFFC0000,0xFDFC0002,0xFDFC0002,0xFFFC0000,0xFE000000,0xFFFC0000,0xD42422,0xD42422,0xD42422,0xD42422,0xD42422,0xD42422,0xD42422,0xD42422,0xD42422,0xD42422,0xFE8C0B51,0xFE8C0B51,0xFE8C0B51,0xFE8C0B51,0xFE8C0B51, -0xFE8C0B51,0xF0500001,0xF0500001,0xF0500001,0xAE4C0001,0x33C2420,0x33C2420,0x33C2420,0x33C2420,0x33C2420,0x33C2420,0xE800069D,0xE800069D,0xE800069D,0xA8000124,0x23FC2420,0x23FC2420,0x23FC2420,0x8A001074,0x6A002420,0xFECC1F02,0xD42422,0xD42422,0xFEBC18F5,0xFEA81429,0xFE980F82,0xFE980F82,0xFE8006B2,0xFAB41D8D,0xFEA01829,0xFE50027D,0xE800069D, -0x1C82420,}; -static const uint32_t g_etc1_to_bc7_m6_table252[] = { -0x600000,0x600000,0x600000,0x600000,0x600000,0x600000,0x600000,0x600000,0x600000,0x600000,0x600000,0x600000,0x600000,0x600000,0x600000,0x600000,0x600000,0x600000,0x600000,0x600000,0x28C0000,0x28C0000,0x28C0000,0x28C0000,0x28C0000,0x28C0000,0x28C0000,0x28C0000,0x28C0000,0x28C0000,0x1200000, -0x1200000,0x1200000,0x1200000,0x2E000001,0x600000,0x600000,0x600000,0x600000,0x600000,0x600000,0x600000,0x600000,0xA640000,0xA640000,0xA640000,0x28C0000,0xCC0000,0x1700000,0x1700000,0x1700000,0x1700000,0x1700000,0x1700000,0x1700000,0x1700000,0x1700000,0x1700000,0x29FC0000,0x29FC0000,0x29FC0000,0x29FC0000,0x29FC0000, -0x29FC0000,0x97F80000,0x97F80000,0x97F80000,0xB6000001,0x29FC0000,0x29FC0000,0x29FC0000,0x29FC0000,0x29FC0000,0x29FC0000,0x97F80000,0x97F80000,0x97F80000,0xB6000001,0x97F80000,0x97F80000,0x97F80000,0xB6000001,0xB6000001,0x1880000,0x1700000,0x1700000,0x1AC0000,0x3CC0000,0x1F40000,0x1F40000,0x51FC0000,0x1AC0000,0x3CC0000,0x7BFC0000,0x97F80000, -0x7BFC0000,0x1FC0001,0x1FC0001,0x1FC0001,0x1FC0001,0xFDFC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000, -0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFBFC0001,0xF7FC0001,0x1FC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFFFC0000,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0x1FC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000, -0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xF7FC0001,0xF7FC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFFF00000,0xFE000000, -0xFFFC0000,0x1746F9A,0xFF5C636D,0xFF4C59E2,0xFF445671,0xFF4452B0,0xFF244509,0xFF183FC9,0xFF0832A0,0xFEFC2BCC,0xFEE82420,0xFF244F2A,0xFF003CE1,0xFEF43599,0xFECC22EC,0xFEB8187A,0xFEA40C6D,0xFEA01E26,0xFE88107D,0xFE5C0008,0xE6600D21,0x2BFC6F9A,0xFEFC5DB5,0xFEE85671,0xFEAC40A4,0xFE8833FB,0xFE602420,0xFE5835B7,0xFE142035,0xFA000585,0xE2000FFD,0x97FC6F9A, -0xF80056D6,0xE6003482,0xD0003409,0xB8006F9A,0xFF5860F6,0xFF6C6A48,0xFF6C6D09,0xFF2C503A,0xFF0C3CF6,0xFEDC2926,0xFECC20F9,0xFEA01085,0xFF505FB2,0xFF184DB4,0xFEB0221D,0xFA000585,0x7DF86F9A,0x1D00D22,0xFFC40B96,0xFFB80A52,0xFFB809D9,0xFFB00948,0xFFA40709,0xFF980614,0xFF880362,0xFF7C01DD,0xFF700000,0xB7FC0D21,0xFFA00AD2,0xFF9409D9,0xFF700633,0xFF5803BA, -0xFF2C0000,0xDDF40D21,0xFF2009D9,0xFE4C0000,0xE6000D21,0xB7FC0D21,0xFFA00AD2,0xFF9409D9,0xFF700633,0xFF5803BA,0xFF2C0000,0xDDF40D21,0xFF2009D9,0xFE4C0000,0xE6000D21,0xDDF40D21,0xFF2009D9,0xFE4C0000,0xE6000D21,0xE6000D21,0xFFBC0BF4,0xFFCC0C66,0xFFCC0CC6,0xFFB40AAE,0xFF9808C1,0xFF7C063E,0xFF680484,0xFF380334,0xFFC40C0E,0xFFA40A8D,0xFF6409F2,0xFE4C0000, -0xD3FC0D21,0x1445671,0x1445671,0x1445671,0x1445671,0xFF183FC9,0xFF183FC9,0xFF183FC9,0xFEFC2BCC,0xFEFC2BCC,0xFEE82420,0xFEF43599,0xFEF43599,0xFEF43599,0xFEB8187A,0xFEB8187A,0xFEA40C6D,0xFE88107D,0xFE88107D,0xFC600008,0xDA6009D9,0x1E05671,0x1E05671,0x1E05671,0xFE8833FB,0xFE8833FB,0xFE602420,0xFE142035,0xFE142035,0xFA000575,0xD8000BF6,0x75FC5671, -0x75FC5671,0xD6003080,0xBE002931,0xA2005672,0xFF2C4B21,0xF9405231,0x1445671,0xFF103F92,0xFEEC3269,0xFEDC25DD,0xFECC20F9,0xFEA01085,0xFF2049F1,0xFF003DFD,0xFEB021B9,0xFA000575,0x51FC5671,0x1B809D9,0x1B809D9,0x1B809D9,0x1B809D9,0xFF980614,0xFF980614,0xFF980614,0xFF7C01DD,0xFF7C01DD,0xFF700000,0x93FC09D9,0x93FC09D9,0x93FC09D9,0xFF5803BA,0xFF5803BA, -0xFF2C0000,0xCBF809D9,0xCBF809D9,0xFE4C0000,0xDA0009D9,0x93FC09D9,0x93FC09D9,0x93FC09D9,0xFF5803BA,0xFF5803BA,0xFF2C0000,0xCBF809D9,0xCBF809D9,0xFE4C0000,0xDA0009D9,0xCBF809D9,0xCBF809D9,0xFE4C0000,0xDA0009D9,0xDA0009D9,0xF9B00908,0xFFAC0928,0x1B809D9,0xFF980832,0xFF8406F4,0xFF740590,0xFF680484,0xFF380334,0xFFA80908,0xFF980808,0xBDF809D9,0xFE4C0000, -0xBDF809D9,0x1FC0002,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000, -0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0002,0xF7FC0002,0xF7FC0002,0xFDFC0002,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFFFC0000,0xFDFC0002,0xFDFC0002,0xFFFC0000,0xFE000000,0xFFFC0000,0xE82420,0xE82420,0xE82420,0xE82420,0xE82420,0xE82420,0xE82420,0xE82420,0xE82420,0xE82420,0xFEA40C6D,0xFEA40C6D,0xFEA40C6D,0xFEA40C6D,0xFEA40C6D, -0xFEA40C6D,0xFA600000,0xFA600000,0xFA600000,0xB6600001,0x1582420,0x1582420,0x1582420,0x1582420,0x1582420,0x1582420,0xFA000565,0xFA000565,0xFA000565,0xB4000082,0x31F82420,0x31F82420,0x31F82420,0x96000F3A,0x72002422,0xF8E01F81,0xE82420,0xE82420,0xFECC1974,0xFEB414F4,0xFEAC109D,0xFEAC109D,0xFE9407B4,0xFEBC1DC9,0xFEB418A0,0xFE60034D,0xFA000565, -0x1EC2420,}; -static const uint32_t g_etc1_to_bc7_m6_table253[] = { -0x700000,0x700000,0x700000,0x700000,0x700000,0x700000,0x700000,0x700000,0x700000,0x700000,0x700000,0x700000,0x700000,0x700000,0x700000,0x700000,0x700000,0x700000,0x700000,0x700000,0x2A40000,0x2A40000,0x2A40000,0x2A40000,0x2A40000,0x2A40000,0x2A40000,0x2A40000,0x2A40000,0x2A40000,0x1500000, -0x1500000,0x1500000,0x1500000,0x36000001,0x700000,0x700000,0x700000,0x700000,0x700000,0x700000,0x700000,0x700000,0x780000,0x780000,0x780000,0x2A40000,0xEC0000,0x1800000,0x1800000,0x1800000,0x1800000,0x1800000,0x1800000,0x1800000,0x1800000,0x1800000,0x1800000,0x41FC0000,0x41FC0000,0x41FC0000,0x41FC0000,0x41FC0000, -0x41FC0000,0xA1FC0000,0xA1FC0000,0xA1FC0000,0xBE000001,0x41FC0000,0x41FC0000,0x41FC0000,0x41FC0000,0x41FC0000,0x41FC0000,0xA1FC0000,0xA1FC0000,0xA1FC0000,0xBE000001,0xA1FC0000,0xA1FC0000,0xA1FC0000,0xBE000001,0xBE000001,0x5980000,0x1800000,0x1800000,0x7BC0000,0x3E00000,0x13FC0000,0x13FC0000,0x65FC0000,0x7BC0000,0x3E00000,0x89FC0000,0xA1FC0000, -0x89FC0000,0x1FC0001,0x1FC0001,0x1FC0001,0x1FC0001,0xFDFC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000, -0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFBFC0001,0xF7FC0001,0x1FC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFFFC0000,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0x1FC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000, -0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xF7FC0001,0xF7FC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFFF00000,0xFE000000, -0xFFFC0000,0x17C672A,0xFF685C5D,0xFF5853E2,0xFF5050D1,0xFF444D70,0xFF30415D,0xFF243CB9,0xFF1430F0,0xFF082AE0,0xFEF82420,0xFF304956,0xFF0C38E9,0xFF00325D,0xFED821A0,0xFECC1848,0xFEB00D61,0xFEAC1B66,0xFE940EED,0xFE700004,0xE8700A59,0x37FC672A,0xFF145745,0xFEFC50D1,0xFEB83D84,0xFEA03223,0xFE782420,0xFE703187,0xFE2C1E1D,0xFC0004C5,0xE8000BE9,0x9DFC672A, -0xFC0050E5,0xE6003022,0xD6002CD1,0xBC00672A,0xFF645A02,0xFF6C6288,0xF578652A,0xFF444AE6,0xFF143961,0xFEF0276A,0xFEDC2036,0xFEB010A0,0xFF5058A2,0xFF304877,0xFEB41FE1,0xFC0004C5,0x83FC672A,0x1D40A56,0xFFC8092D,0xFFC00825,0xFFC007C1,0xFFBC074C,0xFFB0058D,0xFFA404C8,0xFF9402A6,0xFF880179,0xFF800000,0xC1FC0A56,0xFFAC0882,0xFFA007C1,0xFF7C04DB,0xFF6402EA, -0xFF400001,0xE1F80A56,0xFF3807C1,0xFE7C0000,0xE8000A59,0xC1FC0A56,0xFFAC0882,0xFFA007C1,0xFF7C04DB,0xFF6402EA,0xFF400001,0xE1F80A56,0xFF3807C1,0xFE7C0000,0xE8000A59,0xE1F80A56,0xFF3807C1,0xFE7C0000,0xE8000A59,0xE8000A59,0xFDCC0965,0xFFCC09C6,0xFFCC0A26,0xFFC00865,0xFFAC06E5,0xFF7C050E,0xFF7C0385,0xFF50028A,0xFFC4096E,0xFFB0085D,0xFF7407D1,0xFE7C0000, -0xD9FC0A56,0x15050D1,0x15050D1,0x15050D1,0x15050D1,0xFF243CB9,0xFF243CB9,0xFF243CB9,0xFF082AE0,0xFF082AE0,0xFEF82420,0xFF00325D,0xFF00325D,0xFF00325D,0xFECC1848,0xFECC1848,0xFEB00D61,0xFE940EED,0xFE940EED,0xFE700004,0xDE7007C1,0x1F450D1,0x1F450D1,0x1F450D1,0xFEA03223,0xFEA03223,0xFE782420,0xFE2C1E1D,0xFE2C1E1D,0xFC0004C1,0xDE0008E2,0x7FF850D1, -0x7FF850D1,0xDC002D24,0xC40023CD,0xA60050D2,0xFF3C469D,0xFF4C4CD1,0x15050D1,0xFF183C30,0xFF002FDD,0xFEE82482,0xFEDC2036,0xFEB010A0,0xFF344580,0xFF103A91,0xFEB41F7D,0xFC0004C1,0x5DF850D1,0x1C007C1,0x1C007C1,0x1C007C1,0x1C007C1,0xFFA404C8,0xFFA404C8,0xFFA404C8,0xFF880179,0xFF880179,0xFF800000,0x9FFC07C1,0x9FFC07C1,0x9FFC07C1,0xFF6402EA,0xFF6402EA, -0xFF400001,0xD1F807C1,0xD1F807C1,0xFE7C0000,0xDE0007C1,0x9FFC07C1,0x9FFC07C1,0x9FFC07C1,0xFF6402EA,0xFF6402EA,0xFF400001,0xD1F807C1,0xD1F807C1,0xFE7C0000,0xDE0007C1,0xD1F807C1,0xD1F807C1,0xFE7C0000,0xDE0007C1,0xDE0007C1,0xFDB80708,0xF7BC0745,0x1C007C1,0xFFA40681,0xFF980568,0xFF7C0465,0xFF7C0385,0xFF50028A,0xFDB0070A,0xFFA4065D,0xC3FC07C1,0xFE7C0000, -0xC3FC07C1,0x1FC0002,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000, -0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0002,0xF7FC0002,0xF7FC0002,0xFDFC0002,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFFFC0000,0xFDFC0002,0xFDFC0002,0xFFFC0000,0xFE000000,0xFFFC0000,0xF82420,0xF82420,0xF82420,0xF82420,0xF82420,0xF82420,0xF82420,0xF82420,0xF82420,0xF82420,0xFEB00D61,0xFEB00D61,0xFEB00D61,0xFEB00D61,0xFEB00D61, -0xFEB00D61,0xFE700004,0xFE700004,0xFE700004,0xBE700001,0x1702420,0x1702420,0x1702420,0x1702420,0x1702420,0x1702420,0xFA0004B5,0xFA0004B5,0xFA0004B5,0xBC00002D,0x3DF82420,0x3DF82420,0x3DF82420,0x9C000E2A,0x7A002422,0xFEEC1F85,0xF82420,0xF82420,0xFED81A11,0xFED015B1,0xFEC41174,0xFEC41174,0xFE9C08C8,0xFED81E0A,0xFED01962,0xFE74040D,0xFA0004B5, -0x9FC2420,}; -static const uint32_t g_etc1_to_bc7_m6_table254[] = { -0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x2BC0000,0x2BC0000,0x2BC0000,0x2BC0000,0x2BC0000,0x2BC0000,0x2BC0000,0x2BC0000,0x2BC0000,0x2BC0000,0x1800000, -0x1800000,0x1800000,0x1800000,0x3E000001,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x800000,0x880000,0x880000,0x880000,0x2BC0000,0x1100000,0x1900000,0x1900000,0x1900000,0x1900000,0x1900000,0x1900000,0x1900000,0x1900000,0x1900000,0x1900000,0x59FC0000,0x59FC0000,0x59FC0000,0x59FC0000,0x59FC0000, -0x59FC0000,0xADFC0000,0xADFC0000,0xADFC0000,0xC6000001,0x59FC0000,0x59FC0000,0x59FC0000,0x59FC0000,0x59FC0000,0x59FC0000,0xADFC0000,0xADFC0000,0xADFC0000,0xC6000001,0xADFC0000,0xADFC0000,0xADFC0000,0xC6000001,0xC6000001,0xDA80000,0x1900000,0x1900000,0x1D00000,0x3F40000,0x31FC0000,0x31FC0000,0x79FC0000,0x1D00000,0x3F40000,0x99FC0000,0xADFC0000, -0x99FC0000,0x1FC0001,0x1FC0001,0x1FC0001,0x1FC0001,0xFDFC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000, -0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFBFC0001,0xF7FC0001,0x1FC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFFFC0000,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0x1FC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000, -0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xF7FC0001,0xF7FC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFFF00000,0xFE000000, -0xFFFC0000,0x1845F3A,0xFF7455C5,0xFF644E42,0xFF584B89,0xFF504888,0xFF3C3DE9,0xFF3039D9,0xFF202F60,0xFF142A0C,0xFF082420,0xFF4443BD,0xFF183541,0xFF0C2F69,0xFEF02070,0xFED81820,0xFEC40E48,0xFEB81906,0xFEA00DB5,0xFE880034,0xEC8007E1,0x43FC5F3A,0xFF205129,0xFF084B89,0xFED83AA0,0xFEB8306B,0xFE902420,0xFE882DB7,0xFE381C71,0xFE0804BD,0xEA000892,0xA3FC5F3A, -0xFE084B86,0xEC002C5A,0xDC002651,0xC0005F3A,0xFF645372,0xF9805B72,0xF9805D5A,0xFF4445D6,0xFF20362E,0xFEFC25F8,0xFEE81F71,0xFEC010D5,0xFF58526E,0xFF3043C7,0xFEBC1E2D,0xFE0804BD,0x8BFC5F3A,0x1D807E2,0xFFD006F2,0xFFCC0635,0xFFC805E9,0xFFC40576,0xFFBC0441,0xFFB003A4,0xFFA00202,0xFFA00121,0xFF900000,0xC9FC07E1,0xFFB8067A,0xFFAC05E9,0xFF9403AB,0xFF7C0232, -0xFF580001,0xE5F807E1,0xFF5405E9,0xFEAC0000,0xEC0007E1,0xC9FC07E1,0xFFB8067A,0xFFAC05E9,0xFF9403AB,0xFF7C0232,0xFF580001,0xE5F807E1,0xFF5405E9,0xFEAC0000,0xEC0007E1,0xE5F807E1,0xFF5405E9,0xFEAC0000,0xEC0007E1,0xEC0007E1,0xFFD00715,0xF5D80798,0xF5D807BD,0xFFC4065E,0xFFAC0545,0xFFA003D8,0xFF8C02BA,0xFF6401E1,0xFFD0072E,0xFFC0063D,0xFF9005F6,0xFEAC0000, -0xDFF807E1,0x1584B89,0x1584B89,0x1584B89,0x1584B89,0xFF3039D9,0xFF3039D9,0xFF3039D9,0xFF142A0C,0xFF142A0C,0xFF082420,0xFF0C2F69,0xFF0C2F69,0xFF0C2F69,0xFED81820,0xFED81820,0xFEC40E48,0xFEA00DB5,0xFEA00DB5,0xFE880034,0xE28005E9,0x7FC4B86,0x7FC4B86,0x7FC4B86,0xFEB8306B,0xFEB8306B,0xFE902420,0xFE381C71,0xFE381C71,0xFE0804BD,0xE200064D,0x85FC4B86, -0x85FC4B86,0xE0002A76,0xCA001ED9,0xAC004B86,0xFF4C4244,0xFF4C4811,0x1584B89,0xFF2C38D6,0xFF142DA1,0xFEF8232A,0xFEE81F71,0xFEC010D5,0xFF344100,0xFF18376B,0xFEBC1DC9,0xFE0804BD,0x65FC4B86,0x1C805E9,0x1C805E9,0x1C805E9,0x1C805E9,0xFFB003A4,0xFFB003A4,0xFFB003A4,0xFFA00121,0xFFA00121,0xFF900000,0xABFC05E9,0xABFC05E9,0xABFC05E9,0xFF7C0232,0xFF7C0232, -0xFF580001,0xD7F805E9,0xD7F805E9,0xFEAC0000,0xE20005E9,0xABFC05E9,0xABFC05E9,0xABFC05E9,0xFF7C0232,0xFF7C0232,0xFF580001,0xD7F805E9,0xD7F805E9,0xFEAC0000,0xE20005E9,0xD7F805E9,0xD7F805E9,0xFEAC0000,0xE20005E9,0xE20005E9,0xFFBC0550,0xFBC4057D,0x1C805E9,0xFFB404EA,0xFFAC0424,0xFF940371,0xFF8C02BA,0xFF6401E1,0xFFB4055A,0xFFB004E4,0xCBFC05E9,0xFEAC0000, -0xCBFC05E9,0x1FC0002,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000, -0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0002,0xF7FC0002,0xF7FC0002,0xFDFC0002,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFFFC0000,0xFDFC0002,0xFDFC0002,0xFFFC0000,0xFE000000,0xFFFC0000,0x1082420,0x1082420,0x1082420,0x1082420,0x1082420,0x1082420,0x1082420,0x1082420,0x1082420,0x1082420,0xFEC40E48,0xFEC40E48,0xFEC40E48,0xFEC40E48,0xFEC40E48, -0xFEC40E48,0xFE880034,0xFE880034,0xFE880034,0xC6800001,0x1882420,0x1882420,0x1882420,0x1882420,0x1882420,0x1882420,0xFE0804BD,0xFE0804BD,0xFE0804BD,0xC6000002,0x49F82420,0x49F82420,0x49F82420,0xA6000D41,0x82002422,0xF9002000,0x1082420,0x1082420,0xFEE81A90,0xFEE41675,0xFED41248,0xFED41248,0xFEAC09CD,0xFAEC1E85,0xFED019E2,0xFE90052A,0xFE0804BD, -0x19FC2420,}; -static const uint32_t g_etc1_to_bc7_m6_table255[] = { -0x900000,0x900000,0x900000,0x900000,0x900000,0x900000,0x900000,0x900000,0x900000,0x900000,0x900000,0x900000,0x900000,0x900000,0x900000,0x900000,0x900000,0x900000,0x900000,0x900000,0xD40000,0xD40000,0xD40000,0xD40000,0xD40000,0xD40000,0xD40000,0xD40000,0xD40000,0xD40000,0x1B00000, -0x1B00000,0x1B00000,0x1B00000,0x46000001,0x900000,0x900000,0x900000,0x900000,0x900000,0x900000,0x900000,0x900000,0x4980000,0x4980000,0x4980000,0xD40000,0x1300000,0x1A00000,0x1A00000,0x1A00000,0x1A00000,0x1A00000,0x1A00000,0x1A00000,0x1A00000,0x1A00000,0x1A00000,0x71FC0000,0x71FC0000,0x71FC0000,0x71FC0000,0x71FC0000, -0x71FC0000,0xB9FC0000,0xB9FC0000,0xB9FC0000,0xCE000001,0x71FC0000,0x71FC0000,0x71FC0000,0x71FC0000,0x71FC0000,0x71FC0000,0xB9FC0000,0xB9FC0000,0xB9FC0000,0xCE000001,0xB9FC0000,0xB9FC0000,0xB9FC0000,0xCE000001,0xCE000001,0x1BC0000,0x1A00000,0x1A00000,0x1E40000,0x1BFC0000,0x4FFC0000,0x4FFC0000,0x8DFC0000,0x1E40000,0x1BFC0000,0xA7FC0000,0xB9FC0000, -0xA7FC0000,0x1FC0001,0x1FC0001,0x1FC0001,0x1FC0001,0xFDFC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000, -0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFBFC0001,0xF7FC0001,0x1FC0001,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFFFC0000,0xFDFC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0x1FC0001,0xFDFC0001,0xFFFC0000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000, -0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xFFFC0000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0001,0xF7FC0001,0xF7FC0001,0xFDFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0001,0xFDFC0001,0xFFF00000,0xFE000000, -0xFFFC0000,0x18C57CA,0xFF744F85,0xFF6C48F9,0xFF644691,0xFF5C43F0,0xFF443AAD,0xFF4436EC,0xFF2C2DF0,0xFF202950,0xFF182420,0xFF443E8D,0xFF2431E9,0xFF182CBD,0xFEFC1F6C,0xFEEC1816,0xFED00F64,0xFED81711,0xFEB80CAD,0xFE940094,0xEE9005C1,0x4FFC57CA,0xFF2C4B75,0xFF184691,0xFEF037C0,0xFECC2F04,0xFEA82420,0xFEA02A47,0xFE641B02,0xFE140585,0xEE0005E5,0xA9FC57CA, -0xFE284691,0xF2002962,0xDC002041,0xC40057CA,0xFF744D72,0xFD885442,0xFD88560A,0xFF5440F0,0xFF343326,0xFF1024C0,0xFEF81EEA,0xFED81141,0xFF704C95,0xFF503F25,0xFED81CB7,0xFE140585,0x93FC57CA,0x1E005C2,0xFFDC051E,0xFFD4048E,0xFFD00451,0xFFD00402,0xFFC40311,0xFFBC02A8,0xFFAC0176,0xFFAC00CD,0xFFA00000,0xCFFC05C1,0xFFC004C1,0xFFB80451,0xFFA002A3,0xFF88019A, -0xFF700001,0xE7FC05C1,0xFF6C0451,0xFEE00000,0xEE0005C1,0xCFFC05C1,0xFFC004C1,0xFFB80451,0xFFA002A3,0xFF88019A,0xFF700001,0xE7FC05C1,0xFF6C0451,0xFEE00000,0xEE0005C1,0xE7FC05C1,0xFF6C0451,0xFEE00000,0xEE0005C1,0xEE0005C1,0xFFD8052A,0xF7DC0584,0xF7DC05A5,0xFFD404BA,0xFFC003D1,0xFFA802C2,0xFFA001F9,0xFF7C0161,0xFFD0053E,0xFFC80479,0xFF98045A,0xFEE00000, -0xE1FC05C1,0x1644691,0x1644691,0x1644691,0x1644691,0xFF4436EC,0xFF4436EC,0xFF4436EC,0xFF202950,0xFF202950,0xFF182420,0xFF182CBD,0xFF182CBD,0xFF182CBD,0xFEEC1816,0xFEEC1816,0xFED00F64,0xFEB80CAD,0xFEB80CAD,0xFE940094,0xE6900451,0x15FC4691,0x15FC4691,0x15FC4691,0xFECC2F04,0xFECC2F04,0xFEA82420,0xFE641B02,0xFE641B02,0xFE140585,0xE6000461,0x8DFC4691, -0x8DFC4691,0xE6002822,0xD0001A55,0xB2004692,0xFF4C3E24,0xF96043A4,0x1644691,0xFF3C35A5,0xFF202BD5,0xFF08226D,0xFEF81EEA,0xFED81141,0xFF3C3D49,0xFF303446,0xFED81C66,0xFE140585,0x6FFC4691,0x1D00451,0x1D00451,0x1D00451,0x1D00451,0xFFBC02A8,0xFFBC02A8,0xFFBC02A8,0xFFAC00CD,0xFFAC00CD,0xFFA00000,0xB7FC0451,0xB7FC0451,0xB7FC0451,0xFF88019A,0xFF88019A, -0xFF700001,0xDDF40451,0xDDF40451,0xFEE00000,0xE6000451,0xB7FC0451,0xB7FC0451,0xB7FC0451,0xFF88019A,0xFF88019A,0xFF700001,0xDDF40451,0xDDF40451,0xFEE00000,0xE6000451,0xDDF40451,0xDDF40451,0xFEE00000,0xE6000451,0xE6000451,0xF9CC03F5,0xFFCC03F5,0x1D00451,0xFFC4039D,0xFFAC0304,0xFFA80271,0xFFA001F9,0xFF7C0161,0xFBC803F5,0xFBC0039D,0xD3FC0451,0xFEE00000, -0xD3FC0451,0x1FC0002,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFDFC0002,0xFFFC0001,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFE000000,0xFFFC0000,0xFFFC0000,0xFE000000,0xFE000000,0xFFFC0000, -0xFFFC0000,0xFE000000,0xFE000000,0xFE000000,0xFDFC0002,0xF7FC0002,0xF7FC0002,0xFDFC0002,0xFFFC0001,0xFFFC0000,0xFFFC0000,0xFFFC0000,0xFDFC0002,0xFDFC0002,0xFFFC0000,0xFE000000,0xFFFC0000,0x1182420,0x1182420,0x1182420,0x1182420,0x1182420,0x1182420,0x1182420,0x1182420,0x1182420,0x1182420,0xFED00F64,0xFED00F64,0xFED00F64,0xFED00F64,0xFED00F64, -0xFED00F64,0xFE940094,0xFE940094,0xFE940094,0xCE900001,0x1A02420,0x1A02420,0x1A02420,0x1A02420,0x1A02420,0x1A02420,0xFE140585,0xFE140585,0xFE140585,0xCE0C0001,0x55F82420,0x55F82420,0x55F82420,0xB2000C49,0x8A002422,0xFF0C2008,0x1182420,0x1182420,0xFF041B34,0xFEF81741,0xFEDC133D,0xFEDC133D,0xFEC00AE1,0xFEF41EAD,0xFEE41AAA,0xFE9C0631,0xFE140585, -0x27FC2420,}; -const uint32_t *g_etc1_to_bc7_m6_table[] = { -g_etc1_to_bc7_m6_table0, g_etc1_to_bc7_m6_table1, g_etc1_to_bc7_m6_table2, g_etc1_to_bc7_m6_table3, g_etc1_to_bc7_m6_table4, g_etc1_to_bc7_m6_table5, g_etc1_to_bc7_m6_table6, g_etc1_to_bc7_m6_table7, g_etc1_to_bc7_m6_table8, g_etc1_to_bc7_m6_table9, g_etc1_to_bc7_m6_table10, g_etc1_to_bc7_m6_table11, g_etc1_to_bc7_m6_table12, g_etc1_to_bc7_m6_table13, g_etc1_to_bc7_m6_table14, g_etc1_to_bc7_m6_table15, -g_etc1_to_bc7_m6_table16, g_etc1_to_bc7_m6_table17, g_etc1_to_bc7_m6_table18, g_etc1_to_bc7_m6_table19, g_etc1_to_bc7_m6_table20, g_etc1_to_bc7_m6_table21, g_etc1_to_bc7_m6_table22, g_etc1_to_bc7_m6_table23, g_etc1_to_bc7_m6_table24, g_etc1_to_bc7_m6_table25, g_etc1_to_bc7_m6_table26, g_etc1_to_bc7_m6_table27, g_etc1_to_bc7_m6_table28, g_etc1_to_bc7_m6_table29, g_etc1_to_bc7_m6_table30, g_etc1_to_bc7_m6_table31, -g_etc1_to_bc7_m6_table32, g_etc1_to_bc7_m6_table33, g_etc1_to_bc7_m6_table34, g_etc1_to_bc7_m6_table35, g_etc1_to_bc7_m6_table36, g_etc1_to_bc7_m6_table37, g_etc1_to_bc7_m6_table38, g_etc1_to_bc7_m6_table39, g_etc1_to_bc7_m6_table40, g_etc1_to_bc7_m6_table41, g_etc1_to_bc7_m6_table42, g_etc1_to_bc7_m6_table43, g_etc1_to_bc7_m6_table44, g_etc1_to_bc7_m6_table45, g_etc1_to_bc7_m6_table46, g_etc1_to_bc7_m6_table47, -g_etc1_to_bc7_m6_table48, g_etc1_to_bc7_m6_table49, g_etc1_to_bc7_m6_table50, g_etc1_to_bc7_m6_table51, g_etc1_to_bc7_m6_table52, g_etc1_to_bc7_m6_table53, g_etc1_to_bc7_m6_table54, g_etc1_to_bc7_m6_table55, g_etc1_to_bc7_m6_table56, g_etc1_to_bc7_m6_table57, g_etc1_to_bc7_m6_table58, g_etc1_to_bc7_m6_table59, g_etc1_to_bc7_m6_table60, g_etc1_to_bc7_m6_table61, g_etc1_to_bc7_m6_table62, g_etc1_to_bc7_m6_table63, -g_etc1_to_bc7_m6_table64, g_etc1_to_bc7_m6_table65, g_etc1_to_bc7_m6_table66, g_etc1_to_bc7_m6_table67, g_etc1_to_bc7_m6_table68, g_etc1_to_bc7_m6_table69, g_etc1_to_bc7_m6_table70, g_etc1_to_bc7_m6_table71, g_etc1_to_bc7_m6_table72, g_etc1_to_bc7_m6_table73, g_etc1_to_bc7_m6_table74, g_etc1_to_bc7_m6_table75, g_etc1_to_bc7_m6_table76, g_etc1_to_bc7_m6_table77, g_etc1_to_bc7_m6_table78, g_etc1_to_bc7_m6_table79, -g_etc1_to_bc7_m6_table80, g_etc1_to_bc7_m6_table81, g_etc1_to_bc7_m6_table82, g_etc1_to_bc7_m6_table83, g_etc1_to_bc7_m6_table84, g_etc1_to_bc7_m6_table85, g_etc1_to_bc7_m6_table86, g_etc1_to_bc7_m6_table87, g_etc1_to_bc7_m6_table88, g_etc1_to_bc7_m6_table89, g_etc1_to_bc7_m6_table90, g_etc1_to_bc7_m6_table91, g_etc1_to_bc7_m6_table92, g_etc1_to_bc7_m6_table93, g_etc1_to_bc7_m6_table94, g_etc1_to_bc7_m6_table95, -g_etc1_to_bc7_m6_table96, g_etc1_to_bc7_m6_table97, g_etc1_to_bc7_m6_table98, g_etc1_to_bc7_m6_table99, g_etc1_to_bc7_m6_table100, g_etc1_to_bc7_m6_table101, g_etc1_to_bc7_m6_table102, g_etc1_to_bc7_m6_table103, g_etc1_to_bc7_m6_table104, g_etc1_to_bc7_m6_table105, g_etc1_to_bc7_m6_table106, g_etc1_to_bc7_m6_table107, g_etc1_to_bc7_m6_table108, g_etc1_to_bc7_m6_table109, g_etc1_to_bc7_m6_table110, g_etc1_to_bc7_m6_table111, -g_etc1_to_bc7_m6_table112, g_etc1_to_bc7_m6_table113, g_etc1_to_bc7_m6_table114, g_etc1_to_bc7_m6_table115, g_etc1_to_bc7_m6_table116, g_etc1_to_bc7_m6_table117, g_etc1_to_bc7_m6_table118, g_etc1_to_bc7_m6_table119, g_etc1_to_bc7_m6_table120, g_etc1_to_bc7_m6_table121, g_etc1_to_bc7_m6_table122, g_etc1_to_bc7_m6_table123, g_etc1_to_bc7_m6_table124, g_etc1_to_bc7_m6_table125, g_etc1_to_bc7_m6_table126, g_etc1_to_bc7_m6_table127, -g_etc1_to_bc7_m6_table128, g_etc1_to_bc7_m6_table129, g_etc1_to_bc7_m6_table130, g_etc1_to_bc7_m6_table131, g_etc1_to_bc7_m6_table132, g_etc1_to_bc7_m6_table133, g_etc1_to_bc7_m6_table134, g_etc1_to_bc7_m6_table135, g_etc1_to_bc7_m6_table136, g_etc1_to_bc7_m6_table137, g_etc1_to_bc7_m6_table138, g_etc1_to_bc7_m6_table139, g_etc1_to_bc7_m6_table140, g_etc1_to_bc7_m6_table141, g_etc1_to_bc7_m6_table142, g_etc1_to_bc7_m6_table143, -g_etc1_to_bc7_m6_table144, g_etc1_to_bc7_m6_table145, g_etc1_to_bc7_m6_table146, g_etc1_to_bc7_m6_table147, g_etc1_to_bc7_m6_table148, g_etc1_to_bc7_m6_table149, g_etc1_to_bc7_m6_table150, g_etc1_to_bc7_m6_table151, g_etc1_to_bc7_m6_table152, g_etc1_to_bc7_m6_table153, g_etc1_to_bc7_m6_table154, g_etc1_to_bc7_m6_table155, g_etc1_to_bc7_m6_table156, g_etc1_to_bc7_m6_table157, g_etc1_to_bc7_m6_table158, g_etc1_to_bc7_m6_table159, -g_etc1_to_bc7_m6_table160, g_etc1_to_bc7_m6_table161, g_etc1_to_bc7_m6_table162, g_etc1_to_bc7_m6_table163, g_etc1_to_bc7_m6_table164, g_etc1_to_bc7_m6_table165, g_etc1_to_bc7_m6_table166, g_etc1_to_bc7_m6_table167, g_etc1_to_bc7_m6_table168, g_etc1_to_bc7_m6_table169, g_etc1_to_bc7_m6_table170, g_etc1_to_bc7_m6_table171, g_etc1_to_bc7_m6_table172, g_etc1_to_bc7_m6_table173, g_etc1_to_bc7_m6_table174, g_etc1_to_bc7_m6_table175, -g_etc1_to_bc7_m6_table176, g_etc1_to_bc7_m6_table177, g_etc1_to_bc7_m6_table178, g_etc1_to_bc7_m6_table179, g_etc1_to_bc7_m6_table180, g_etc1_to_bc7_m6_table181, g_etc1_to_bc7_m6_table182, g_etc1_to_bc7_m6_table183, g_etc1_to_bc7_m6_table184, g_etc1_to_bc7_m6_table185, g_etc1_to_bc7_m6_table186, g_etc1_to_bc7_m6_table187, g_etc1_to_bc7_m6_table188, g_etc1_to_bc7_m6_table189, g_etc1_to_bc7_m6_table190, g_etc1_to_bc7_m6_table191, -g_etc1_to_bc7_m6_table192, g_etc1_to_bc7_m6_table193, g_etc1_to_bc7_m6_table194, g_etc1_to_bc7_m6_table195, g_etc1_to_bc7_m6_table196, g_etc1_to_bc7_m6_table197, g_etc1_to_bc7_m6_table198, g_etc1_to_bc7_m6_table199, g_etc1_to_bc7_m6_table200, g_etc1_to_bc7_m6_table201, g_etc1_to_bc7_m6_table202, g_etc1_to_bc7_m6_table203, g_etc1_to_bc7_m6_table204, g_etc1_to_bc7_m6_table205, g_etc1_to_bc7_m6_table206, g_etc1_to_bc7_m6_table207, -g_etc1_to_bc7_m6_table208, g_etc1_to_bc7_m6_table209, g_etc1_to_bc7_m6_table210, g_etc1_to_bc7_m6_table211, g_etc1_to_bc7_m6_table212, g_etc1_to_bc7_m6_table213, g_etc1_to_bc7_m6_table214, g_etc1_to_bc7_m6_table215, g_etc1_to_bc7_m6_table216, g_etc1_to_bc7_m6_table217, g_etc1_to_bc7_m6_table218, g_etc1_to_bc7_m6_table219, g_etc1_to_bc7_m6_table220, g_etc1_to_bc7_m6_table221, g_etc1_to_bc7_m6_table222, g_etc1_to_bc7_m6_table223, -g_etc1_to_bc7_m6_table224, g_etc1_to_bc7_m6_table225, g_etc1_to_bc7_m6_table226, g_etc1_to_bc7_m6_table227, g_etc1_to_bc7_m6_table228, g_etc1_to_bc7_m6_table229, g_etc1_to_bc7_m6_table230, g_etc1_to_bc7_m6_table231, g_etc1_to_bc7_m6_table232, g_etc1_to_bc7_m6_table233, g_etc1_to_bc7_m6_table234, g_etc1_to_bc7_m6_table235, g_etc1_to_bc7_m6_table236, g_etc1_to_bc7_m6_table237, g_etc1_to_bc7_m6_table238, g_etc1_to_bc7_m6_table239, -g_etc1_to_bc7_m6_table240, g_etc1_to_bc7_m6_table241, g_etc1_to_bc7_m6_table242, g_etc1_to_bc7_m6_table243, g_etc1_to_bc7_m6_table244, g_etc1_to_bc7_m6_table245, g_etc1_to_bc7_m6_table246, g_etc1_to_bc7_m6_table247, g_etc1_to_bc7_m6_table248, g_etc1_to_bc7_m6_table249, g_etc1_to_bc7_m6_table250, g_etc1_to_bc7_m6_table251, g_etc1_to_bc7_m6_table252, g_etc1_to_bc7_m6_table253, g_etc1_to_bc7_m6_table254, g_etc1_to_bc7_m6_table255, -}; diff --git a/webgl/gltf/BasisTextureLoader.js b/webgl/gltf/BasisTextureLoader.js index 46312bc..627bdf3 100644 --- a/webgl/gltf/BasisTextureLoader.js +++ b/webgl/gltf/BasisTextureLoader.js @@ -20,7 +20,6 @@ THREE.BasisTextureLoader = function ( manager ) { THREE.Loader.call( this, manager ); - this.useAlpha = true; this.transcoderPath = ''; this.transcoderBinary = null; this.transcoderPending = null; @@ -30,12 +29,11 @@ THREE.BasisTextureLoader = function ( manager ) { this.workerNextTaskID = 1; this.workerSourceURL = ''; this.workerConfig = { - format: null, - useAlpha: true, - astcSupported: false, + format: null, + astcSupported: false, etcSupported: false, dxtSupported: false, - pvrtcSupported: false, + pvrtcSupported: false, }; }; @@ -64,28 +62,33 @@ THREE.BasisTextureLoader.prototype = Object.assign( Object.create( THREE.Loader. var config = this.workerConfig; - config.astcSupported = !! renderer.extensions.get( 'WEBGL_compressed_texture_astc' ); + config.bc7Supported = !! renderer.extensions.get( 'EXT_texture_compression_bptc' ); + config.astcSupported = !! renderer.extensions.get( 'WEBGL_compressed_texture_astc' ); config.etcSupported = !! renderer.extensions.get( 'WEBGL_compressed_texture_etc1' ); config.dxtSupported = !! renderer.extensions.get( 'WEBGL_compressed_texture_s3tc' ); config.pvrtcSupported = !! renderer.extensions.get( 'WEBGL_compressed_texture_pvrtc' ) - || !! renderer.extensions.get( 'WEBKIT_WEBGL_compressed_texture_pvrtc' ); + || !! renderer.extensions.get( 'WEBKIT_WEBGL_compressed_texture_pvrtc' ); - if (config.astcSupported) { + if ( config.astcSupported ) { - config.format = THREE.BasisTextureLoader.BASIS_FORMAT.cTFASTC_4x4; + config.format = THREE.BasisTextureLoader.BASIS_FORMAT.cTFASTC_4x4; - } else if ( config.dxtSupported ) { + } else if ( config.bc7Supported ) { - config.format = this.useAlpha ? THREE.BasisTextureLoader.BASIS_FORMAT.cTFBC3 : THREE.BasisTextureLoader.BASIS_FORMAT.cTFBC1; + config.format = THREE.BasisTextureLoader.BASIS_FORMAT.cTFBC7_M6_OPAQUE_ONLY; + + } else if ( config.dxtSupported ) { + + config.format = THREE.BasisTextureLoader.BASIS_FORMAT.cTFBC3; + + } else if ( config.etcSupported ) { + + config.format = THREE.BasisTextureLoader.BASIS_FORMAT.cTFETC1; } else if ( config.pvrtcSupported ) { config.format = this.useAlpha ? THREE.BasisTextureLoader.BASIS_FORMAT.cTFPVRTC1_4_RGBA : THREE.BasisTextureLoader.BASIS_FORMAT.cTFPVRTC1_4_RGB; - - } else if ( config.etcSupported ) { - - config.format = THREE.BasisTextureLoader.BASIS_FORMAT.cTFETC1; - + } else { throw new Error( 'THREE.BasisTextureLoader: No suitable compressed texture format found.' ); @@ -121,7 +124,9 @@ THREE.BasisTextureLoader.prototype = Object.assign( Object.create( THREE.Loader. var worker; var taskID; - var texturePending = this._getWorker() + var taskCost = buffer.byteLength; + + var texturePending = this._allocateWorker( taskCost ) .then( ( _worker ) => { worker = _worker; @@ -130,8 +135,6 @@ THREE.BasisTextureLoader.prototype = Object.assign( Object.create( THREE.Loader. return new Promise( ( resolve, reject ) => { worker._callbacks[ taskID ] = { resolve, reject }; - worker._taskCosts[ taskID ] = buffer.byteLength; - worker._taskLoad += worker._taskCosts[ taskID ]; worker.postMessage( { type: 'transcode', id: taskID, buffer }, [ buffer ] ); @@ -142,30 +145,35 @@ THREE.BasisTextureLoader.prototype = Object.assign( Object.create( THREE.Loader. var config = this.workerConfig; - var { width, height, hasAlpha, mipmaps } = message; + var { width, height, mipmaps, format } = message; var texture; - switch(config.format) { - case THREE.BasisTextureLoader.BASIS_FORMAT.cTFASTC_4x4: - texture = new THREE.CompressedTexture( mipmaps, width, height, THREE.BasisTextureLoader.COMPRESSED_RGBA_ASTC_4x4_KHR ); - break; - case THREE.BasisTextureLoader.BASIS_FORMAT.cTFBC1: - case THREE.BasisTextureLoader.BASIS_FORMAT.cTFBC3: - texture = new THREE.CompressedTexture( mipmaps, width, height, THREE.BasisTextureLoader.DXT_FORMAT_MAP[ config.format ], THREE.UnsignedByteType ); - break; - case THREE.BasisTextureLoader.BASIS_FORMAT.cTFETC1: - texture = new THREE.CompressedTexture( mipmaps, width, height, THREE.RGB_ETC1_Format ); - break; - case THREE.BasisTextureLoader.BASIS_FORMAT.cTFPVRTC1_4_RGB: - texture = new THREE.CompressedTexture( mipmaps, width, height, THREE.RGB_PVRTC_4BPPV1_Format ); - break; - case THREE.BasisTextureLoader.BASIS_FORMAT.cTFPVRTC1_4_RGBA: - texture = new THREE.CompressedTexture( mipmaps, width, height, THREE.RGBA_PVRTC_4BPPV1_Format ); - break; - default: - throw new Error( 'THREE.BasisTextureLoader: No supported format available.' ); - } + switch ( format ) { + + case THREE.BasisTextureLoader.BASIS_FORMAT.cTFASTC_4x4: + texture = new THREE.CompressedTexture( mipmaps, width, height, THREE.RGBA_ASTC_4x4_Format ); + break; + case THREE.BasisTextureLoader.BASIS_FORMAT.cTFBC7_M6_OPAQUE_ONLY: + texture = new THREE.CompressedTexture( mipmaps, width, height, THREE.BasisTextureLoader.COMPRESSED_RGBA_BPTC_UNORM ); + break; + case THREE.BasisTextureLoader.BASIS_FORMAT.cTFBC1: + case THREE.BasisTextureLoader.BASIS_FORMAT.cTFBC3: + texture = new THREE.CompressedTexture( mipmaps, width, height, THREE.BasisTextureLoader.DXT_FORMAT_MAP[ config.format ], THREE.UnsignedByteType ); + break; + case THREE.BasisTextureLoader.BASIS_FORMAT.cTFETC1: + texture = new THREE.CompressedTexture( mipmaps, width, height, THREE.RGB_ETC1_Format ); + break; + case THREE.BasisTextureLoader.BASIS_FORMAT.cTFPVRTC1_4_RGB: + texture = new THREE.CompressedTexture( mipmaps, width, height, THREE.RGB_PVRTC_4BPPV1_Format ); + break; + case THREE.BasisTextureLoader.BASIS_FORMAT.cTFPVRTC1_4_RGBA: + texture = new THREE.CompressedTexture( mipmaps, width, height, THREE.RGBA_PVRTC_4BPPV1_Format ); + break; + default: + throw new Error( 'THREE.BasisTextureLoader: No supported format available.' ); + + } texture.minFilter = mipmaps.length === 1 ? THREE.LinearFilter : THREE.LinearMipmapLinearFilter; texture.magFilter = THREE.LinearFilter; @@ -181,9 +189,8 @@ THREE.BasisTextureLoader.prototype = Object.assign( Object.create( THREE.Loader. if ( worker && taskID ) { - worker._taskLoad -= worker._taskCosts[ taskID ]; + worker._taskLoad -= taskCost; delete worker._callbacks[ taskID ]; - delete worker._taskCosts[ taskID ]; } @@ -195,7 +202,7 @@ THREE.BasisTextureLoader.prototype = Object.assign( Object.create( THREE.Loader. _initTranscoder: function () { - if ( ! this.transcoderBinary ) { + if ( ! this.transcoderPending ) { // Load transcoder wrapper. var jsLoader = new THREE.FileLoader( this.manager ); @@ -239,7 +246,7 @@ THREE.BasisTextureLoader.prototype = Object.assign( Object.create( THREE.Loader. }, - _getWorker: function () { + _allocateWorker: function ( taskCost ) { return this._initTranscoder().then( () => { @@ -248,10 +255,8 @@ THREE.BasisTextureLoader.prototype = Object.assign( Object.create( THREE.Loader. var worker = new Worker( this.workerSourceURL ); worker._callbacks = {}; - worker._taskCosts = {}; worker._taskLoad = 0; - this.workerConfig.useAlpha = this.useAlpha; worker.postMessage( { type: 'init', config: this.workerConfig, @@ -291,7 +296,11 @@ THREE.BasisTextureLoader.prototype = Object.assign( Object.create( THREE.Loader. } - return this.workerPool[ this.workerPool.length - 1 ]; + var worker = this.workerPool[ this.workerPool.length - 1 ]; + + worker._taskLoad += taskCost; + + return worker; } ); @@ -323,16 +332,16 @@ THREE.BasisTextureLoader.BASIS_FORMAT = { cTFBC4: 4, cTFBC5: 5, cTFBC7_M6_OPAQUE_ONLY: 6, - cTFBC7_M5: 7, - cTFPVRTC1_4_RGB: 8, - cTFPVRTC1_4_RGBA: 9, - cTFASTC_4x4: 10, - cTFATC_RGB: 11, - cTFATC_RGBA_INTERPOLATED_ALPHA: 12, - cTFRGBA32: 13, - cTFRGB565: 14, - cTFBGR565: 15, - cTFRGBA4444: 16, + cTFBC7_M5: 7, + cTFPVRTC1_4_RGB: 8, + cTFPVRTC1_4_RGBA: 9, + cTFASTC_4x4: 10, + cTFATC_RGB: 11, + cTFATC_RGBA_INTERPOLATED_ALPHA: 12, + cTFRGBA32: 13, + cTFRGB565: 14, + cTFBGR565: 15, + cTFRGBA4444: 16, }; // DXT formats, from: @@ -347,12 +356,16 @@ THREE.BasisTextureLoader.DXT_FORMAT_MAP = {}; THREE.BasisTextureLoader.DXT_FORMAT_MAP[ THREE.BasisTextureLoader.BASIS_FORMAT.cTFBC1 ] = THREE.BasisTextureLoader.DXT_FORMAT.COMPRESSED_RGB_S3TC_DXT1_EXT; THREE.BasisTextureLoader.DXT_FORMAT_MAP[ THREE.BasisTextureLoader.BASIS_FORMAT.cTFBC3 ] = - THREE.BasisTextureLoader.DXT_FORMAT.COMPRESSED_RGBA_S3TC_DXT5_EXT; + THREE.BasisTextureLoader.DXT_FORMAT.COMPRESSED_RGBA_S3TC_DXT5_EXT; -// ASTC formats, from: + // ASTC formats, from: // https://www.khronos.org/registry/webgl/extensions/WEBGL_compressed_texture_astc/ THREE.BasisTextureLoader.COMPRESSED_RGBA_ASTC_4x4_KHR = 0x93B0; +// BC7/BPTC format, from: +// https://www.khronos.org/registry/webgl/extensions/EXT_texture_compression_bptc/ +THREE.BasisTextureLoader.COMPRESSED_RGBA_BPTC_UNORM = 0x8E8C; + /* WEB WORKER */ THREE.BasisTextureLoader.BasisWorker = function () { @@ -377,7 +390,7 @@ THREE.BasisTextureLoader.BasisWorker = function () { try { - var { width, height, hasAlpha, mipmaps } = transcode( message.buffer ); + var { width, height, hasAlpha, mipmaps, format } = transcode( message.buffer ); var buffers = []; @@ -387,7 +400,7 @@ THREE.BasisTextureLoader.BasisWorker = function () { } - self.postMessage( { type: 'transcode', id: message.id, width, height, hasAlpha, mipmaps }, buffers ); + self.postMessage( { type: 'transcode', id: message.id, width, height, hasAlpha, mipmaps, format }, buffers ); } catch ( error ) { @@ -406,15 +419,15 @@ THREE.BasisTextureLoader.BasisWorker = function () { function init( wasmBinary ) { - var m; - transcoderPending = new Promise( ( resolve ) => { + var BasisModule; + transcoderPending = new Promise( ( resolve ) => { - m = { wasmBinary, onRuntimeInitialized: resolve }; - BASIS(m); + BasisModule = { wasmBinary, onRuntimeInitialized: resolve }; + BASIS( BasisModule ); } ).then( () => { - var { BasisFile, initializeBasis } = m; + var { BasisFile, initializeBasis } = BasisModule; _BasisFile = BasisFile; @@ -430,8 +443,8 @@ THREE.BasisTextureLoader.BasisWorker = function () { var width = basisFile.getImageWidth( 0, 0 ); var height = basisFile.getImageHeight( 0, 0 ); - var levels = basisFile.getNumLevels( 0 ); - var hasAlpha = basisFile.getHasAlpha(); + var levels = basisFile.getNumLevels( 0 ); + var hasAlpha = basisFile.getHasAlpha(); function cleanup() { @@ -440,6 +453,20 @@ THREE.BasisTextureLoader.BasisWorker = function () { } + if ( ! hasAlpha ) { + + switch ( config.format ) { + + case 9: // Hardcoded: THREE.BasisTextureLoader.BASIS_FORMAT.cTFPVRTC1_4_RGBA + config.format = 8; // Hardcoded: THREE.BasisTextureLoader.BASIS_FORMAT.cTFPVRTC1_4_RGB; + break; + default: + break; + + } + + } + if ( ! width || ! height || ! levels ) { cleanup(); @@ -466,9 +493,9 @@ THREE.BasisTextureLoader.BasisWorker = function () { dst, 0, mip, - config.format, - config.useAlpha, - 0 + config.format, + 0, + hasAlpha ); if ( ! status ) { @@ -484,8 +511,8 @@ THREE.BasisTextureLoader.BasisWorker = function () { cleanup(); - return { width, height, hasAlpha, mipmaps }; + return { width, height, hasAlpha, mipmaps, format: config.format }; } -}; \ No newline at end of file +}; diff --git a/webgl/gltf/GLTFLoader.js b/webgl/gltf/GLTFLoader.js index 9e11b42..78c0687 100644 --- a/webgl/gltf/GLTFLoader.js +++ b/webgl/gltf/GLTFLoader.js @@ -6,39 +6,32 @@ * @author Don McCurdy / https://www.donmccurdy.com */ - /** - * A modified version of THREE.GLTFLoader, with support for the (hypothetical) - * GOOGLE_texture_basis extension. This extension is defined for the sake of - * example only – the glTF format will officially reference Basis files within - * a KTX2 wrapper. - */ THREE.GLTFLoader = ( function () { function GLTFLoader( manager ) { - this.manager = ( manager !== undefined ) ? manager : THREE.DefaultLoadingManager; + THREE.Loader.call( this, manager ); + this.dracoLoader = null; this.ddsLoader = null; } - GLTFLoader.prototype = { + GLTFLoader.prototype = Object.assign( Object.create( THREE.Loader.prototype ), { constructor: GLTFLoader, - crossOrigin: 'anonymous', - load: function ( url, onLoad, onProgress, onError ) { var scope = this; var resourcePath; - if ( this.resourcePath !== undefined ) { + if ( this.resourcePath !== '' ) { resourcePath = this.resourcePath; - } else if ( this.path !== undefined ) { + } else if ( this.path !== '' ) { resourcePath = this.path; @@ -103,27 +96,6 @@ THREE.GLTFLoader = ( function () { }, - setCrossOrigin: function ( value ) { - - this.crossOrigin = value; - return this; - - }, - - setPath: function ( value ) { - - this.path = value; - return this; - - }, - - setResourcePath: function ( value ) { - - this.resourcePath = value; - return this; - - }, - setDRACOLoader: function ( dracoLoader ) { this.dracoLoader = dracoLoader; @@ -178,7 +150,7 @@ THREE.GLTFLoader = ( function () { if ( json.asset === undefined || json.asset.version[ 0 ] < 2 ) { - if ( onError ) onError( new Error( 'THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported. Use LegacyGLTFLoader instead.' ) ); + if ( onError ) onError( new Error( 'THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported.' ) ); return; } @@ -209,14 +181,19 @@ THREE.GLTFLoader = ( function () { break; case EXTENSIONS.MSFT_TEXTURE_DDS: - extensions[ EXTENSIONS.MSFT_TEXTURE_DDS ] = new GLTFTextureDDSExtension( this.ddsLoader ); + extensions[ extensionName ] = new GLTFTextureDDSExtension( this.ddsLoader ); + break; + + case EXTENSIONS.GOOGLE_TEXTURE_BASIS: + extensions[ EXTENSIONS.GOOGLE_TEXTURE_BASIS ] = new GLTFTextureBasisExtension(); break; - case EXTENSIONS.GOOGLE_TEXTURE_BASIS: - extensions[ EXTENSIONS.GOOGLE_TEXTURE_BASIS ] = new GLTFTextureBasisExtension(); - break; case EXTENSIONS.KHR_TEXTURE_TRANSFORM: - extensions[ EXTENSIONS.KHR_TEXTURE_TRANSFORM ] = new GLTFTextureTransformExtension(); + extensions[ extensionName ] = new GLTFTextureTransformExtension(); + break; + + case EXTENSIONS.KHR_MESH_QUANTIZATION: + extensions[ extensionName ] = new GLTFMeshQuantizationExtension(); break; default: @@ -245,7 +222,7 @@ THREE.GLTFLoader = ( function () { } - }; + } ); /* GLTFREGISTRY */ @@ -294,15 +271,15 @@ THREE.GLTFLoader = ( function () { KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS: 'KHR_materials_pbrSpecularGlossiness', KHR_MATERIALS_UNLIT: 'KHR_materials_unlit', KHR_TEXTURE_TRANSFORM: 'KHR_texture_transform', - MSFT_TEXTURE_DDS: 'MSFT_texture_dds', - GOOGLE_TEXTURE_BASIS: 'GOOGLE_texture_basis' + KHR_MESH_QUANTIZATION: 'KHR_mesh_quantization', + MSFT_TEXTURE_DDS: 'MSFT_texture_dds', + GOOGLE_TEXTURE_BASIS: 'GOOGLE_texture_basis' }; /** * DDS Texture Extension * - * Specification: - * https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/MSFT_texture_dds + * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/MSFT_texture_dds * */ function GLTFTextureDDSExtension( ddsLoader ) { @@ -318,20 +295,20 @@ THREE.GLTFLoader = ( function () { } - /** - * Basis Texture Extension - * - */ - function GLTFTextureBasisExtension() { + /** + * Basis Texture Extension + * + */ + function GLTFTextureBasisExtension() { - this.name = EXTENSIONS.GOOGLE_TEXTURE_BASIS; + this.name = EXTENSIONS.GOOGLE_TEXTURE_BASIS; - } + } /** - * Lights Extension + * Punctual Lights Extension * - * Specification: PENDING + * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_lights_punctual */ function GLTFLightsExtension( json ) { @@ -398,9 +375,9 @@ THREE.GLTFLoader = ( function () { }; /** - * Unlit Materials Extension (pending) + * Unlit Materials Extension * - * PR: https://github.com/KhronosGroup/glTF/pull/1163 + * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_unlit */ function GLTFMaterialsUnlitExtension() { @@ -471,7 +448,7 @@ THREE.GLTFLoader = ( function () { } else if ( this.header.version < 2.0 ) { - throw new Error( 'THREE.GLTFLoader: Legacy binary file detected. Use LegacyGLTFLoader instead.' ); + throw new Error( 'THREE.GLTFLoader: Legacy binary file detected.' ); } @@ -515,7 +492,7 @@ THREE.GLTFLoader = ( function () { /** * DRACO Mesh Compression Extension * - * Specification: https://github.com/KhronosGroup/glTF/pull/874 + * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_draco_mesh_compression */ function GLTFDracoMeshCompressionExtension( json, dracoLoader ) { @@ -528,6 +505,7 @@ THREE.GLTFLoader = ( function () { this.name = EXTENSIONS.KHR_DRACO_MESH_COMPRESSION; this.json = json; this.dracoLoader = dracoLoader; + this.dracoLoader.preload(); } @@ -593,7 +571,7 @@ THREE.GLTFLoader = ( function () { /** * Texture Transform Extension * - * Specification: + * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_texture_transform */ function GLTFTextureTransformExtension() { @@ -640,6 +618,158 @@ THREE.GLTFLoader = ( function () { * * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_pbrSpecularGlossiness */ + + /** + * A sub class of THREE.StandardMaterial with some of the functionality + * changed via the `onBeforeCompile` callback + * @pailhead + */ + + function GLTFMeshStandardSGMaterial( params ) { + + THREE.MeshStandardMaterial.call( this ); + + this.isGLTFSpecularGlossinessMaterial = true; + + //various chunks that need replacing + var specularMapParsFragmentChunk = [ + '#ifdef USE_SPECULARMAP', + ' uniform sampler2D specularMap;', + '#endif' + ].join( '\n' ); + + var glossinessMapParsFragmentChunk = [ + '#ifdef USE_GLOSSINESSMAP', + ' uniform sampler2D glossinessMap;', + '#endif' + ].join( '\n' ); + + var specularMapFragmentChunk = [ + 'vec3 specularFactor = specular;', + '#ifdef USE_SPECULARMAP', + ' vec4 texelSpecular = texture2D( specularMap, vUv );', + ' texelSpecular = sRGBToLinear( texelSpecular );', + ' // reads channel RGB, compatible with a glTF Specular-Glossiness (RGBA) texture', + ' specularFactor *= texelSpecular.rgb;', + '#endif' + ].join( '\n' ); + + var glossinessMapFragmentChunk = [ + 'float glossinessFactor = glossiness;', + '#ifdef USE_GLOSSINESSMAP', + ' vec4 texelGlossiness = texture2D( glossinessMap, vUv );', + ' // reads channel A, compatible with a glTF Specular-Glossiness (RGBA) texture', + ' glossinessFactor *= texelGlossiness.a;', + '#endif' + ].join( '\n' ); + + var lightPhysicalFragmentChunk = [ + 'PhysicalMaterial material;', + 'material.diffuseColor = diffuseColor.rgb;', + 'vec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );', + 'float geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );', + 'material.specularRoughness = max( 1.0 - glossinessFactor, 0.0525 );// 0.0525 corresponds to the base mip of a 256 cubemap.', + 'material.specularRoughness += geometryRoughness;', + 'material.specularRoughness = min( material.specularRoughness, 1.0 );', + 'material.specularColor = specularFactor.rgb;', + ].join( '\n' ); + + var uniforms = { + specular: { value: new THREE.Color().setHex( 0xffffff ) }, + glossiness: { value: 1 }, + specularMap: { value: null }, + glossinessMap: { value: null } + }; + + this._extraUniforms = uniforms; + + // please see #14031 or #13198 for an alternate approach + this.onBeforeCompile = function ( shader ) { + + for ( var uniformName in uniforms ) { + + shader.uniforms[ uniformName ] = uniforms[ uniformName ]; + + } + + shader.fragmentShader = shader.fragmentShader.replace( 'uniform float roughness;', 'uniform vec3 specular;' ); + shader.fragmentShader = shader.fragmentShader.replace( 'uniform float metalness;', 'uniform float glossiness;' ); + shader.fragmentShader = shader.fragmentShader.replace( '#include ', specularMapParsFragmentChunk ); + shader.fragmentShader = shader.fragmentShader.replace( '#include ', glossinessMapParsFragmentChunk ); + shader.fragmentShader = shader.fragmentShader.replace( '#include ', specularMapFragmentChunk ); + shader.fragmentShader = shader.fragmentShader.replace( '#include ', glossinessMapFragmentChunk ); + shader.fragmentShader = shader.fragmentShader.replace( '#include ', lightPhysicalFragmentChunk ); + + }; + + /*eslint-disable*/ + Object.defineProperties( + this, + { + specular: { + get: function () { return uniforms.specular.value; }, + set: function ( v ) { uniforms.specular.value = v; } + }, + specularMap: { + get: function () { return uniforms.specularMap.value; }, + set: function ( v ) { uniforms.specularMap.value = v; } + }, + glossiness: { + get: function () { return uniforms.glossiness.value; }, + set: function ( v ) { uniforms.glossiness.value = v; } + }, + glossinessMap: { + get: function () { return uniforms.glossinessMap.value; }, + set: function ( v ) { + + uniforms.glossinessMap.value = v; + //how about something like this - @pailhead + if ( v ) { + + this.defines.USE_GLOSSINESSMAP = ''; + // set USE_ROUGHNESSMAP to enable vUv + this.defines.USE_ROUGHNESSMAP = ''; + + } else { + + delete this.defines.USE_ROUGHNESSMAP; + delete this.defines.USE_GLOSSINESSMAP; + + } + + } + } + } + ); + + /*eslint-enable*/ + delete this.metalness; + delete this.roughness; + delete this.metalnessMap; + delete this.roughnessMap; + + this.setValues( params ); + + } + + GLTFMeshStandardSGMaterial.prototype = Object.create( THREE.MeshStandardMaterial.prototype ); + GLTFMeshStandardSGMaterial.prototype.constructor = GLTFMeshStandardSGMaterial; + + GLTFMeshStandardSGMaterial.prototype.copy = function ( source ) { + + THREE.MeshStandardMaterial.prototype.copy.call( this, source ); + this.specularMap = source.specularMap; + this.specular.copy( source.specular ); + this.glossinessMap = source.glossinessMap; + this.glossiness = source.glossiness; + delete this.metalness; + delete this.roughness; + delete this.metalnessMap; + delete this.roughnessMap; + return this; + + }; + function GLTFMaterialsPbrSpecularGlossinessExtension() { return { @@ -659,6 +789,7 @@ THREE.GLTFLoader = ( function () { 'bumpMap', 'bumpScale', 'normalMap', + 'normalMapType', 'displacementMap', 'displacementScale', 'displacementBias', @@ -674,7 +805,7 @@ THREE.GLTFLoader = ( function () { getMaterialType: function () { - return THREE.ShaderMaterial; + return GLTFMeshStandardSGMaterial; }, @@ -682,72 +813,6 @@ THREE.GLTFLoader = ( function () { var pbrSpecularGlossiness = materialDef.extensions[ this.name ]; - var shader = THREE.ShaderLib[ 'standard' ]; - - var uniforms = THREE.UniformsUtils.clone( shader.uniforms ); - - var specularMapParsFragmentChunk = [ - '#ifdef USE_SPECULARMAP', - ' uniform sampler2D specularMap;', - '#endif' - ].join( '\n' ); - - var glossinessMapParsFragmentChunk = [ - '#ifdef USE_GLOSSINESSMAP', - ' uniform sampler2D glossinessMap;', - '#endif' - ].join( '\n' ); - - var specularMapFragmentChunk = [ - 'vec3 specularFactor = specular;', - '#ifdef USE_SPECULARMAP', - ' vec4 texelSpecular = texture2D( specularMap, vUv );', - ' texelSpecular = sRGBToLinear( texelSpecular );', - ' // reads channel RGB, compatible with a glTF Specular-Glossiness (RGBA) texture', - ' specularFactor *= texelSpecular.rgb;', - '#endif' - ].join( '\n' ); - - var glossinessMapFragmentChunk = [ - 'float glossinessFactor = glossiness;', - '#ifdef USE_GLOSSINESSMAP', - ' vec4 texelGlossiness = texture2D( glossinessMap, vUv );', - ' // reads channel A, compatible with a glTF Specular-Glossiness (RGBA) texture', - ' glossinessFactor *= texelGlossiness.a;', - '#endif' - ].join( '\n' ); - - var lightPhysicalFragmentChunk = [ - 'PhysicalMaterial material;', - 'material.diffuseColor = diffuseColor.rgb;', - 'material.specularRoughness = clamp( 1.0 - glossinessFactor, 0.04, 1.0 );', - 'material.specularColor = specularFactor.rgb;', - ].join( '\n' ); - - var fragmentShader = shader.fragmentShader - .replace( 'uniform float roughness;', 'uniform vec3 specular;' ) - .replace( 'uniform float metalness;', 'uniform float glossiness;' ) - .replace( '#include ', specularMapParsFragmentChunk ) - .replace( '#include ', glossinessMapParsFragmentChunk ) - .replace( '#include ', specularMapFragmentChunk ) - .replace( '#include ', glossinessMapFragmentChunk ) - .replace( '#include ', lightPhysicalFragmentChunk ); - - delete uniforms.roughness; - delete uniforms.metalness; - delete uniforms.roughnessMap; - delete uniforms.metalnessMap; - - uniforms.specular = { value: new THREE.Color().setHex( 0x111111 ) }; - uniforms.glossiness = { value: 0.5 }; - uniforms.specularMap = { value: null }; - uniforms.glossinessMap = { value: null }; - - materialParams.vertexShader = shader.vertexShader; - materialParams.fragmentShader = fragmentShader; - materialParams.uniforms = uniforms; - materialParams.defines = { 'STANDARD': '' } - materialParams.color = new THREE.Color( 1.0, 1.0, 1.0 ); materialParams.opacity = 1.0; @@ -790,240 +855,69 @@ THREE.GLTFLoader = ( function () { }, - createMaterial: function ( params ) { + createMaterial: function ( materialParams ) { - // setup material properties based on MeshStandardMaterial for Specular-Glossiness + var material = new GLTFMeshStandardSGMaterial( materialParams ); + material.fog = true; - var material = new THREE.ShaderMaterial( { - defines: params.defines, - vertexShader: params.vertexShader, - fragmentShader: params.fragmentShader, - uniforms: params.uniforms, - fog: true, - lights: true, - opacity: params.opacity, - transparent: params.transparent - } ); + material.color = materialParams.color; - material.isGLTFSpecularGlossinessMaterial = true; - - material.color = params.color; - - material.map = params.map === undefined ? null : params.map; + material.map = materialParams.map === undefined ? null : materialParams.map; material.lightMap = null; material.lightMapIntensity = 1.0; - material.aoMap = params.aoMap === undefined ? null : params.aoMap; + material.aoMap = materialParams.aoMap === undefined ? null : materialParams.aoMap; material.aoMapIntensity = 1.0; - material.emissive = params.emissive; + material.emissive = materialParams.emissive; material.emissiveIntensity = 1.0; - material.emissiveMap = params.emissiveMap === undefined ? null : params.emissiveMap; + material.emissiveMap = materialParams.emissiveMap === undefined ? null : materialParams.emissiveMap; - material.bumpMap = params.bumpMap === undefined ? null : params.bumpMap; + material.bumpMap = materialParams.bumpMap === undefined ? null : materialParams.bumpMap; material.bumpScale = 1; - material.normalMap = params.normalMap === undefined ? null : params.normalMap; + material.normalMap = materialParams.normalMap === undefined ? null : materialParams.normalMap; + material.normalMapType = THREE.TangentSpaceNormalMap; - if ( params.normalScale ) material.normalScale = params.normalScale; + if ( materialParams.normalScale ) material.normalScale = materialParams.normalScale; material.displacementMap = null; material.displacementScale = 1; material.displacementBias = 0; - material.specularMap = params.specularMap === undefined ? null : params.specularMap; - material.specular = params.specular; + material.specularMap = materialParams.specularMap === undefined ? null : materialParams.specularMap; + material.specular = materialParams.specular; - material.glossinessMap = params.glossinessMap === undefined ? null : params.glossinessMap; - material.glossiness = params.glossiness; + material.glossinessMap = materialParams.glossinessMap === undefined ? null : materialParams.glossinessMap; + material.glossiness = materialParams.glossiness; material.alphaMap = null; - material.envMap = params.envMap === undefined ? null : params.envMap; + material.envMap = materialParams.envMap === undefined ? null : materialParams.envMap; material.envMapIntensity = 1.0; material.refractionRatio = 0.98; - material.extensions.derivatives = true; - return material; }, - /** - * Clones a GLTFSpecularGlossinessMaterial instance. The ShaderMaterial.copy() method can - * copy only properties it knows about or inherits, and misses many properties that would - * normally be defined by MeshStandardMaterial. - * - * This method allows GLTFSpecularGlossinessMaterials to be cloned in the process of - * loading a glTF model, but cloning later (e.g. by the user) would require these changes - * AND also updating `.onBeforeRender` on the parent mesh. - * - * @param {THREE.ShaderMaterial} source - * @return {THREE.ShaderMaterial} - */ - cloneMaterial: function ( source ) { - - var target = source.clone(); - - target.isGLTFSpecularGlossinessMaterial = true; - - var params = this.specularGlossinessParams; - - for ( var i = 0, il = params.length; i < il; i ++ ) { - - var value = source[ params[ i ] ]; - target[ params[ i ] ] = ( value && value.isColor ) ? value.clone() : value; - - } - - return target; - - }, - - // Here's based on refreshUniformsCommon() and refreshUniformsStandard() in WebGLRenderer. - refreshUniforms: function ( renderer, scene, camera, geometry, material ) { - - if ( material.isGLTFSpecularGlossinessMaterial !== true ) { - - return; - - } - - var uniforms = material.uniforms; - var defines = material.defines; - - uniforms.opacity.value = material.opacity; - - uniforms.diffuse.value.copy( material.color ); - uniforms.emissive.value.copy( material.emissive ).multiplyScalar( material.emissiveIntensity ); - - uniforms.map.value = material.map; - uniforms.specularMap.value = material.specularMap; - uniforms.alphaMap.value = material.alphaMap; - - uniforms.lightMap.value = material.lightMap; - uniforms.lightMapIntensity.value = material.lightMapIntensity; - - uniforms.aoMap.value = material.aoMap; - uniforms.aoMapIntensity.value = material.aoMapIntensity; - - // uv repeat and offset setting priorities - // 1. color map - // 2. specular map - // 3. normal map - // 4. bump map - // 5. alpha map - // 6. emissive map - - var uvScaleMap; - - if ( material.map ) { - - uvScaleMap = material.map; - - } else if ( material.specularMap ) { - - uvScaleMap = material.specularMap; - - } else if ( material.displacementMap ) { - - uvScaleMap = material.displacementMap; - - } else if ( material.normalMap ) { - - uvScaleMap = material.normalMap; - - } else if ( material.bumpMap ) { - - uvScaleMap = material.bumpMap; - - } else if ( material.glossinessMap ) { - - uvScaleMap = material.glossinessMap; - - } else if ( material.alphaMap ) { - - uvScaleMap = material.alphaMap; - - } else if ( material.emissiveMap ) { - - uvScaleMap = material.emissiveMap; - - } - - if ( uvScaleMap !== undefined ) { - - // backwards compatibility - if ( uvScaleMap.isWebGLRenderTarget ) { - - uvScaleMap = uvScaleMap.texture; - - } - - if ( uvScaleMap.matrixAutoUpdate === true ) { - - uvScaleMap.updateMatrix(); - - } - - uniforms.uvTransform.value.copy( uvScaleMap.matrix ); - - } - - if ( material.envMap ) { - - uniforms.envMap.value = material.envMap; - uniforms.envMapIntensity.value = material.envMapIntensity; - - // don't flip CubeTexture envMaps, flip everything else: - // WebGLRenderTargetCube will be flipped for backwards compatibility - // WebGLRenderTargetCube.texture will be flipped because it's a Texture and NOT a CubeTexture - // this check must be handled differently, or removed entirely, if WebGLRenderTargetCube uses a CubeTexture in the future - uniforms.flipEnvMap.value = material.envMap.isCubeTexture ? - 1 : 1; - - uniforms.reflectivity.value = material.reflectivity; - uniforms.refractionRatio.value = material.refractionRatio; - - uniforms.maxMipLevel.value = renderer.properties.get( material.envMap ).__maxMipLevel; - - } - - uniforms.specular.value.copy( material.specular ); - uniforms.glossiness.value = material.glossiness; - - uniforms.glossinessMap.value = material.glossinessMap; - - uniforms.emissiveMap.value = material.emissiveMap; - uniforms.bumpMap.value = material.bumpMap; - uniforms.normalMap.value = material.normalMap; - - uniforms.displacementMap.value = material.displacementMap; - uniforms.displacementScale.value = material.displacementScale; - uniforms.displacementBias.value = material.displacementBias; - - if ( uniforms.glossinessMap.value !== null && defines.USE_GLOSSINESSMAP === undefined ) { - - defines.USE_GLOSSINESSMAP = ''; - // set USE_ROUGHNESSMAP to enable vUv - defines.USE_ROUGHNESSMAP = ''; - - } - - if ( uniforms.glossinessMap.value === null && defines.USE_GLOSSINESSMAP !== undefined ) { - - delete defines.USE_GLOSSINESSMAP; - delete defines.USE_ROUGHNESSMAP; - - } - - } - }; } + /** + * Mesh Quantization Extension + * + * Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_mesh_quantization + */ + function GLTFMeshQuantizationExtension() { + + this.name = EXTENSIONS.KHR_MESH_QUANTIZATION; + + } + /*********************************/ /********** INTERPOLATION ********/ /*********************************/ @@ -1207,11 +1101,11 @@ THREE.GLTFLoader = ( function () { // Invalid URL if ( typeof url !== 'string' || url === '' ) return ''; - + // Host Relative URL if ( /^https?:\/\//i.test( path ) && /^\//.test( url ) ) { - path = path.replace( /(^https?:\/\/[^\/]+).*/i , '$1' ); + path = path.replace( /(^https?:\/\/[^\/]+).*/i, '$1' ); } @@ -1229,24 +1123,26 @@ THREE.GLTFLoader = ( function () { } - var defaultMaterial; - /** * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#default-material */ - function createDefaultMaterial() { + function createDefaultMaterial( cache ) { - defaultMaterial = defaultMaterial || new THREE.MeshStandardMaterial( { - color: 0xFFFFFF, - emissive: 0x000000, - metalness: 1, - roughness: 1, - transparent: false, - depthTest: true, - side: THREE.FrontSide - } ); + if ( cache[ 'DefaultMaterial' ] === undefined ) { - return defaultMaterial; + cache[ 'DefaultMaterial' ] = new THREE.MeshStandardMaterial( { + color: 0xFFFFFF, + emissive: 0x000000, + metalness: 1, + roughness: 1, + transparent: false, + depthTest: true, + side: THREE.FrontSide + } ); + + } + + return cache[ 'DefaultMaterial' ]; } @@ -1352,95 +1248,9 @@ THREE.GLTFLoader = ( function () { var morphPositions = accessors[ 0 ]; var morphNormals = accessors[ 1 ]; - // Clone morph target accessors before modifying them. - - for ( var i = 0, il = morphPositions.length; i < il; i ++ ) { - - if ( geometry.attributes.position === morphPositions[ i ] ) continue; - - morphPositions[ i ] = cloneBufferAttribute( morphPositions[ i ] ); - - } - - for ( var i = 0, il = morphNormals.length; i < il; i ++ ) { - - if ( geometry.attributes.normal === morphNormals[ i ] ) continue; - - morphNormals[ i ] = cloneBufferAttribute( morphNormals[ i ] ); - - } - - for ( var i = 0, il = targets.length; i < il; i ++ ) { - - var target = targets[ i ]; - var attributeName = 'morphTarget' + i; - - if ( hasMorphPosition ) { - - // Three.js morph position is absolute value. The formula is - // basePosition - // + weight0 * ( morphPosition0 - basePosition ) - // + weight1 * ( morphPosition1 - basePosition ) - // ... - // while the glTF one is relative - // basePosition - // + weight0 * glTFmorphPosition0 - // + weight1 * glTFmorphPosition1 - // ... - // then we need to convert from relative to absolute here. - - if ( target.POSITION !== undefined ) { - - var positionAttribute = morphPositions[ i ]; - positionAttribute.name = attributeName; - - var position = geometry.attributes.position; - - for ( var j = 0, jl = positionAttribute.count; j < jl; j ++ ) { - - positionAttribute.setXYZ( - j, - positionAttribute.getX( j ) + position.getX( j ), - positionAttribute.getY( j ) + position.getY( j ), - positionAttribute.getZ( j ) + position.getZ( j ) - ); - - } - - } - - } - - if ( hasMorphNormal ) { - - // see target.POSITION's comment - - if ( target.NORMAL !== undefined ) { - - var normalAttribute = morphNormals[ i ]; - normalAttribute.name = attributeName; - - var normal = geometry.attributes.normal; - - for ( var j = 0, jl = normalAttribute.count; j < jl; j ++ ) { - - normalAttribute.setXYZ( - j, - normalAttribute.getX( j ) + normal.getX( j ), - normalAttribute.getY( j ) + normal.getY( j ), - normalAttribute.getZ( j ) + normal.getZ( j ) - ); - - } - - } - - } - - } - if ( hasMorphPosition ) geometry.morphAttributes.position = morphPositions; if ( hasMorphNormal ) geometry.morphAttributes.normal = morphNormals; + geometry.morphTargetsRelative = true; return geometry; @@ -1528,31 +1338,6 @@ THREE.GLTFLoader = ( function () { } - function cloneBufferAttribute( attribute ) { - - if ( attribute.isInterleavedBufferAttribute ) { - - var count = attribute.count; - var itemSize = attribute.itemSize; - var array = attribute.array.slice( 0, count * itemSize ); - - for ( var i = 0, j = 0; i < count; ++ i ) { - - array[ j ++ ] = attribute.getX( i ); - if ( itemSize >= 2 ) array[ j ++ ] = attribute.getY( i ); - if ( itemSize >= 3 ) array[ j ++ ] = attribute.getZ( i ); - if ( itemSize >= 4 ) array[ j ++ ] = attribute.getW( i ); - - } - - return new THREE.BufferAttribute( array, itemSize, attribute.normalized ); - - } - - return attribute.clone(); - - } - /* GLTF PARSER */ function GLTFParser( json, extensions, options ) { @@ -1919,7 +1704,7 @@ THREE.GLTFLoader = ( function () { } - bufferAttribute = new THREE.InterleavedBufferAttribute( ib, itemSize, (byteOffset % byteStride) / elementBytes, normalized ); + bufferAttribute = new THREE.InterleavedBufferAttribute( ib, itemSize, ( byteOffset % byteStride ) / elementBytes, normalized ); } else { @@ -1952,7 +1737,7 @@ THREE.GLTFLoader = ( function () { if ( bufferView !== null ) { // Avoid modifying the original ArrayBuffer, if the bufferView wasn't initialized with zeroes. - bufferAttribute.setArray( bufferAttribute.array.slice() ); + bufferAttribute = new THREE.BufferAttribute( bufferAttribute.array.slice(), bufferAttribute.itemSize, bufferAttribute.normalized ); } @@ -1999,10 +1784,9 @@ THREE.GLTFLoader = ( function () { if ( textureExtensions[ EXTENSIONS.MSFT_TEXTURE_DDS ] ) { source = json.images[ textureExtensions[ EXTENSIONS.MSFT_TEXTURE_DDS ].source ]; + } else if ( textureExtensions[ EXTENSIONS.GOOGLE_TEXTURE_BASIS ] ) { - } else if ( textureExtensions[ EXTENSIONS.GOOGLE_TEXTURE_BASIS ] ) { - - source = json.images[ textureExtensions[ EXTENSIONS.GOOGLE_TEXTURE_BASIS ].source ]; + source = json.images[ textureExtensions[ EXTENSIONS.GOOGLE_TEXTURE_BASIS ].source ]; } else { @@ -2032,7 +1816,7 @@ THREE.GLTFLoader = ( function () { // Load Texture resource. - var loader = THREE.Loader.Handlers.get( sourceURI ); + var loader = options.manager.getHandler( sourceURI ); if ( ! loader ) { @@ -2060,7 +1844,7 @@ THREE.GLTFLoader = ( function () { texture.flipY = false; - if ( textureDef.name !== undefined ) texture.name = textureDef.name; + if ( textureDef.name ) texture.name = textureDef.name; // Ignore unknown mime types, like DDS files. if ( source.mimeType in MIME_TYPE_FORMATS ) { @@ -2112,6 +1896,14 @@ THREE.GLTFLoader = ( function () { } + // Materials sample aoMap from UV set 1 and other maps from UV set 0 - this can't be configured + // However, we will copy UV set 0 to UV set 1 on demand for aoMap + if ( mapDef.texCoord !== undefined && mapDef.texCoord != 0 && ! ( mapName === 'aoMap' && mapDef.texCoord == 1 ) ) { + + console.warn( 'THREE.GLTFLoader: Custom UV set ' + mapDef.texCoord + ' for texture ' + mapName + ' not yet supported.' ); + + } + if ( parser.extensions[ EXTENSIONS.KHR_TEXTURE_TRANSFORM ] ) { var transform = mapDef.extensions !== undefined ? mapDef.extensions[ EXTENSIONS.KHR_TEXTURE_TRANSFORM ] : undefined; @@ -2142,7 +1934,6 @@ THREE.GLTFLoader = ( function () { var geometry = mesh.geometry; var material = mesh.material; - var extensions = this.extensions; var useVertexTangents = geometry.attributes.tangent !== undefined; var useVertexColors = geometry.attributes.color !== undefined; @@ -2163,7 +1954,6 @@ THREE.GLTFLoader = ( function () { THREE.Material.prototype.copy.call( pointsMaterial, material ); pointsMaterial.color.copy( material.color ); pointsMaterial.map = material.map; - pointsMaterial.lights = false; // PointsMaterial doesn't support lights yet pointsMaterial.sizeAttenuation = false; // glTF spec says points should be 1px this.cache.add( cacheKey, pointsMaterial ); @@ -2183,7 +1973,6 @@ THREE.GLTFLoader = ( function () { lineMaterial = new THREE.LineBasicMaterial(); THREE.Material.prototype.copy.call( lineMaterial, material ); lineMaterial.color.copy( material.color ); - lineMaterial.lights = false; // LineBasicMaterial doesn't support lights yet this.cache.add( cacheKey, lineMaterial ); @@ -2210,13 +1999,11 @@ THREE.GLTFLoader = ( function () { if ( ! cachedMaterial ) { - cachedMaterial = material.isGLTFSpecularGlossinessMaterial - ? extensions[ EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ].cloneMaterial( material ) - : material.clone(); + cachedMaterial = material.clone(); if ( useSkinning ) cachedMaterial.skinning = true; if ( useVertexTangents ) cachedMaterial.vertexTangents = true; - if ( useVertexColors ) cachedMaterial.vertexColors = THREE.VertexColors; + if ( useVertexColors ) cachedMaterial.vertexColors = true; if ( useFlatShading ) cachedMaterial.flatShading = true; if ( useMorphTargets ) cachedMaterial.morphTargets = true; if ( useMorphNormals ) cachedMaterial.morphNormals = true; @@ -2233,15 +2020,14 @@ THREE.GLTFLoader = ( function () { if ( material.aoMap && geometry.attributes.uv2 === undefined && geometry.attributes.uv !== undefined ) { - console.log( 'THREE.GLTFLoader: Duplicating UVs to support aoMap.' ); - geometry.addAttribute( 'uv2', new THREE.BufferAttribute( geometry.attributes.uv.array, 2 ) ); + geometry.setAttribute( 'uv2', new THREE.BufferAttribute( geometry.attributes.uv.array, 2 ) ); } - if ( material.isGLTFSpecularGlossinessMaterial ) { + // https://github.com/mrdoob/three.js/issues/11438#issuecomment-507003995 + if ( material.normalScale && ! useVertexTangents ) { - // for GLTFSpecularGlossinessMaterial(ShaderMaterial) uniforms runtime update - mesh.onBeforeRender = extensions[ EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ].refreshUniforms; + material.normalScale.y = - material.normalScale.y; } @@ -2330,6 +2116,9 @@ THREE.GLTFLoader = ( function () { materialParams.transparent = true; + // See: https://github.com/mrdoob/three.js/issues/17706 + materialParams.depthWrite = false; + } else { materialParams.transparent = false; @@ -2384,7 +2173,7 @@ THREE.GLTFLoader = ( function () { var material; - if ( materialType === THREE.ShaderMaterial ) { + if ( materialType === GLTFMeshStandardSGMaterial ) { material = extensions[ EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ].createMaterial( materialParams ); @@ -2394,12 +2183,11 @@ THREE.GLTFLoader = ( function () { } - if ( materialDef.name !== undefined ) material.name = materialDef.name; + if ( materialDef.name ) material.name = materialDef.name; // baseColorTexture, emissiveTexture, and specularGlossinessTexture use sRGB encoding. if ( material.map ) material.map.encoding = THREE.sRGBEncoding; if ( material.emissiveMap ) material.emissiveMap.encoding = THREE.sRGBEncoding; - if ( material.specularMap ) material.specularMap.encoding = THREE.sRGBEncoding; assignExtrasToUserData( material, materialDef ); @@ -2411,6 +2199,96 @@ THREE.GLTFLoader = ( function () { }; + /** + * @param {THREE.BufferGeometry} geometry + * @param {GLTF.Primitive} primitiveDef + * @param {GLTFParser} parser + */ + function computeBounds( geometry, primitiveDef, parser ) { + + var attributes = primitiveDef.attributes; + + var box = new THREE.Box3(); + + if ( attributes.POSITION !== undefined ) { + + var accessor = parser.json.accessors[ attributes.POSITION ]; + + var min = accessor.min; + var max = accessor.max; + + // glTF requires 'min' and 'max', but VRM (which extends glTF) currently ignores that requirement. + + if ( min !== undefined && max !== undefined ) { + + box.set( + new THREE.Vector3( min[ 0 ], min[ 1 ], min[ 2 ] ), + new THREE.Vector3( max[ 0 ], max[ 1 ], max[ 2 ] ) ); + + } else { + + console.warn( 'THREE.GLTFLoader: Missing min/max properties for accessor POSITION.' ); + + return; + + } + + } else { + + return; + + } + + var targets = primitiveDef.targets; + + if ( targets !== undefined ) { + + var vector = new THREE.Vector3(); + + for ( var i = 0, il = targets.length; i < il; i ++ ) { + + var target = targets[ i ]; + + if ( target.POSITION !== undefined ) { + + var accessor = parser.json.accessors[ target.POSITION ]; + var min = accessor.min; + var max = accessor.max; + + // glTF requires 'min' and 'max', but VRM (which extends glTF) currently ignores that requirement. + + if ( min !== undefined && max !== undefined ) { + + // we need to get max of absolute components because target weight is [-1,1] + vector.setX( Math.max( Math.abs( min[ 0 ] ), Math.abs( max[ 0 ] ) ) ); + vector.setY( Math.max( Math.abs( min[ 1 ] ), Math.abs( max[ 1 ] ) ) ); + vector.setZ( Math.max( Math.abs( min[ 2 ] ), Math.abs( max[ 2 ] ) ) ); + + box.expandByVector( vector ); + + } else { + + console.warn( 'THREE.GLTFLoader: Missing min/max properties for accessor POSITION.' ); + + } + + } + + } + + } + + geometry.boundingBox = box; + + var sphere = new THREE.Sphere(); + + box.getCenter( sphere.center ); + sphere.radius = box.min.distanceTo( box.max ) / 2; + + geometry.boundingSphere = sphere; + + } + /** * @param {THREE.BufferGeometry} geometry * @param {GLTF.Primitive} primitiveDef @@ -2428,7 +2306,7 @@ THREE.GLTFLoader = ( function () { return parser.getDependency( 'accessor', accessorIndex ) .then( function ( accessor ) { - geometry.addAttribute( attributeName, accessor ); + geometry.setAttribute( attributeName, accessor ); } ); @@ -2459,6 +2337,8 @@ THREE.GLTFLoader = ( function () { assignExtrasToUserData( geometry, primitiveDef ); + computeBounds( geometry, primitiveDef, parser ); + return Promise.all( pending ).then( function () { return primitiveDef.targets !== undefined @@ -2469,6 +2349,100 @@ THREE.GLTFLoader = ( function () { } + /** + * @param {THREE.BufferGeometry} geometry + * @param {Number} drawMode + * @return {THREE.BufferGeometry} + */ + function toTrianglesDrawMode( geometry, drawMode ) { + + var index = geometry.getIndex(); + + // generate index if not present + + if ( index === null ) { + + var indices = []; + + var position = geometry.getAttribute( 'position' ); + + if ( position !== undefined ) { + + for ( var i = 0; i < position.count; i ++ ) { + + indices.push( i ); + + } + + geometry.setIndex( indices ); + index = geometry.getIndex(); + + } else { + + console.error( 'THREE.GLTFLoader.toTrianglesDrawMode(): Undefined position attribute. Processing not possible.' ); + return geometry; + + } + + } + + // + + var numberOfTriangles = index.count - 2; + var newIndices = []; + + if ( drawMode === THREE.TriangleFanDrawMode ) { + + // gl.TRIANGLE_FAN + + for ( var i = 1; i <= numberOfTriangles; i ++ ) { + + newIndices.push( index.getX( 0 ) ); + newIndices.push( index.getX( i ) ); + newIndices.push( index.getX( i + 1 ) ); + + } + + } else { + + // gl.TRIANGLE_STRIP + + for ( var i = 0; i < numberOfTriangles; i ++ ) { + + if ( i % 2 === 0 ) { + + newIndices.push( index.getX( i ) ); + newIndices.push( index.getX( i + 1 ) ); + newIndices.push( index.getX( i + 2 ) ); + + + } else { + + newIndices.push( index.getX( i + 2 ) ); + newIndices.push( index.getX( i + 1 ) ); + newIndices.push( index.getX( i ) ); + + } + + } + + } + + if ( ( newIndices.length / 3 ) !== numberOfTriangles ) { + + console.error( 'THREE.GLTFLoader.toTrianglesDrawMode(): Unable to generate correct amount of triangles.' ); + + } + + // build final geometry + + var newGeometry = geometry.clone(); + newGeometry.setIndex( newIndices ); + + return newGeometry; + + } + /** * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#geometry * @@ -2557,115 +2531,116 @@ THREE.GLTFLoader = ( function () { for ( var i = 0, il = primitives.length; i < il; i ++ ) { var material = primitives[ i ].material === undefined - ? createDefaultMaterial() + ? createDefaultMaterial( this.cache ) : this.getDependency( 'material', primitives[ i ].material ); pending.push( material ); } - return Promise.all( pending ).then( function ( originalMaterials ) { + pending.push( parser.loadGeometries( primitives ) ); - return parser.loadGeometries( primitives ).then( function ( geometries ) { + return Promise.all( pending ).then( function ( results ) { - var meshes = []; + var materials = results.slice( 0, results.length - 1 ); + var geometries = results[ results.length - 1 ]; - for ( var i = 0, il = geometries.length; i < il; i ++ ) { + var meshes = []; - var geometry = geometries[ i ]; - var primitive = primitives[ i ]; + for ( var i = 0, il = geometries.length; i < il; i ++ ) { - // 1. create Mesh + var geometry = geometries[ i ]; + var primitive = primitives[ i ]; - var mesh; + // 1. create Mesh - var material = originalMaterials[ i ]; + var mesh; - if ( primitive.mode === WEBGL_CONSTANTS.TRIANGLES || - primitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP || - primitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN || - primitive.mode === undefined ) { + var material = materials[ i ]; - // .isSkinnedMesh isn't in glTF spec. See .markDefs() - mesh = meshDef.isSkinnedMesh === true - ? new THREE.SkinnedMesh( geometry, material ) - : new THREE.Mesh( geometry, material ); + if ( primitive.mode === WEBGL_CONSTANTS.TRIANGLES || + primitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP || + primitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN || + primitive.mode === undefined ) { - if ( mesh.isSkinnedMesh === true && ! mesh.geometry.attributes.skinWeight.normalized ) { + // .isSkinnedMesh isn't in glTF spec. See .markDefs() + mesh = meshDef.isSkinnedMesh === true + ? new THREE.SkinnedMesh( geometry, material ) + : new THREE.Mesh( geometry, material ); - // we normalize floating point skin weight array to fix malformed assets (see #15319) - // it's important to skip this for non-float32 data since normalizeSkinWeights assumes non-normalized inputs - mesh.normalizeSkinWeights(); + if ( mesh.isSkinnedMesh === true && ! mesh.geometry.attributes.skinWeight.normalized ) { - } - - if ( primitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP ) { - - mesh.drawMode = THREE.TriangleStripDrawMode; - - } else if ( primitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN ) { - - mesh.drawMode = THREE.TriangleFanDrawMode; - - } - - } else if ( primitive.mode === WEBGL_CONSTANTS.LINES ) { - - mesh = new THREE.LineSegments( geometry, material ); - - } else if ( primitive.mode === WEBGL_CONSTANTS.LINE_STRIP ) { - - mesh = new THREE.Line( geometry, material ); - - } else if ( primitive.mode === WEBGL_CONSTANTS.LINE_LOOP ) { - - mesh = new THREE.LineLoop( geometry, material ); - - } else if ( primitive.mode === WEBGL_CONSTANTS.POINTS ) { - - mesh = new THREE.Points( geometry, material ); - - } else { - - throw new Error( 'THREE.GLTFLoader: Primitive mode unsupported: ' + primitive.mode ); + // we normalize floating point skin weight array to fix malformed assets (see #15319) + // it's important to skip this for non-float32 data since normalizeSkinWeights assumes non-normalized inputs + mesh.normalizeSkinWeights(); } - if ( Object.keys( mesh.geometry.morphAttributes ).length > 0 ) { + if ( primitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP ) { - updateMorphTargets( mesh, meshDef ); + mesh.geometry = toTrianglesDrawMode( mesh.geometry, THREE.TriangleStripDrawMode ); + + } else if ( primitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN ) { + + mesh.geometry = toTrianglesDrawMode( mesh.geometry, THREE.TriangleFanDrawMode ); } - mesh.name = meshDef.name || ( 'mesh_' + meshIndex ); + } else if ( primitive.mode === WEBGL_CONSTANTS.LINES ) { - if ( geometries.length > 1 ) mesh.name += '_' + i; + mesh = new THREE.LineSegments( geometry, material ); - assignExtrasToUserData( mesh, meshDef ); + } else if ( primitive.mode === WEBGL_CONSTANTS.LINE_STRIP ) { - parser.assignFinalMaterial( mesh ); + mesh = new THREE.Line( geometry, material ); - meshes.push( mesh ); + } else if ( primitive.mode === WEBGL_CONSTANTS.LINE_LOOP ) { + + mesh = new THREE.LineLoop( geometry, material ); + + } else if ( primitive.mode === WEBGL_CONSTANTS.POINTS ) { + + mesh = new THREE.Points( geometry, material ); + + } else { + + throw new Error( 'THREE.GLTFLoader: Primitive mode unsupported: ' + primitive.mode ); } - if ( meshes.length === 1 ) { + if ( Object.keys( mesh.geometry.morphAttributes ).length > 0 ) { - return meshes[ 0 ]; + updateMorphTargets( mesh, meshDef ); } - var group = new THREE.Group(); + mesh.name = meshDef.name || ( 'mesh_' + meshIndex ); - for ( var i = 0, il = meshes.length; i < il; i ++ ) { + if ( geometries.length > 1 ) mesh.name += '_' + i; - group.add( meshes[ i ] ); + assignExtrasToUserData( mesh, meshDef ); - } + parser.assignFinalMaterial( mesh ); - return group; + meshes.push( mesh ); - } ); + } + + if ( meshes.length === 1 ) { + + return meshes[ 0 ]; + + } + + var group = new THREE.Group(); + + for ( var i = 0, il = meshes.length; i < il; i ++ ) { + + group.add( meshes[ i ] ); + + } + + return group; } ); @@ -2691,7 +2666,7 @@ THREE.GLTFLoader = ( function () { if ( cameraDef.type === 'perspective' ) { - camera = new THREE.PerspectiveCamera( THREE.Math.radToDeg( params.yfov ), params.aspectRatio || 1, params.znear || 1, params.zfar || 2e6 ); + camera = new THREE.PerspectiveCamera( THREE.MathUtils.radToDeg( params.yfov ), params.aspectRatio || 1, params.znear || 1, params.zfar || 2e6 ); } else if ( cameraDef.type === 'orthographic' ) { @@ -2699,7 +2674,7 @@ THREE.GLTFLoader = ( function () { } - if ( cameraDef.name !== undefined ) camera.name = cameraDef.name; + if ( cameraDef.name ) camera.name = cameraDef.name; assignExtrasToUserData( camera, cameraDef ); @@ -2920,7 +2895,7 @@ THREE.GLTFLoader = ( function () { } - var name = animationDef.name !== undefined ? animationDef.name : 'animation_' + animationIndex; + var name = animationDef.name ? animationDef.name : 'animation_' + animationIndex; return new THREE.AnimationClip( name, undefined, tracks ); @@ -2961,16 +2936,6 @@ THREE.GLTFLoader = ( function () { node = mesh.clone(); node.name += '_instance_' + instanceNum; - // onBeforeRender copy for Specular-Glossiness - node.onBeforeRender = mesh.onBeforeRender; - - for ( var i = 0, il = node.children.length; i < il; i ++ ) { - - node.children[ i ].name += '_instance_' + instanceNum; - node.children[ i ].onBeforeRender = mesh.children[ i ].onBeforeRender; - - } - } else { node = mesh; @@ -3049,7 +3014,7 @@ THREE.GLTFLoader = ( function () { } - if ( nodeDef.name !== undefined ) { + if ( nodeDef.name ) { node.userData.name = nodeDef.name; node.name = THREE.PropertyBinding.sanitizeNodeName( nodeDef.name ); @@ -3064,7 +3029,7 @@ THREE.GLTFLoader = ( function () { var matrix = new THREE.Matrix4(); matrix.fromArray( nodeDef.matrix ); - node.applyMatrix( matrix ); + node.applyMatrix4( matrix ); } else { @@ -3097,7 +3062,7 @@ THREE.GLTFLoader = ( function () { /** * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#scenes * @param {number} sceneIndex - * @return {Promise} + * @return {Promise} */ GLTFParser.prototype.loadScene = function () { @@ -3206,8 +3171,10 @@ THREE.GLTFLoader = ( function () { var sceneDef = this.json.scenes[ sceneIndex ]; var parser = this; - var scene = new THREE.Scene(); - if ( sceneDef.name !== undefined ) scene.name = sceneDef.name; + // Loader returns Group, not Scene. + // See: https://github.com/mrdoob/three.js/issues/18342#issuecomment-578981172 + var scene = new THREE.Group(); + if ( sceneDef.name ) scene.name = sceneDef.name; assignExtrasToUserData( scene, sceneDef ); @@ -3235,4 +3202,4 @@ THREE.GLTFLoader = ( function () { return GLTFLoader; -} )(); \ No newline at end of file +} )(); diff --git a/webgl/gltf/index.html b/webgl/gltf/index.html index 55f8ae2..c436e6e 100644 --- a/webgl/gltf/index.html +++ b/webgl/gltf/index.html @@ -1,11 +1,11 @@ - + + -

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ℑOrOQ=%ab{6*0W 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 z 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