From 9f48ad4fbb303d9ac7ca50a8b6f9e68739227f49 Mon Sep 17 00:00:00 2001 From: "therealmogminer@gmail.com" Date: Wed, 23 Mar 2016 15:11:12 +0100 Subject: [PATCH] Add screen-specific shader chain support, nw --- bgfx/effects/defocus.json | 2 +- bgfx/effects/distortion.json | 19 +-- bgfx/shaders/dx11/fs_blit.bin | Bin 40856 -> 42904 bytes bgfx/shaders/dx11/fs_color.bin | Bin 43257 -> 45305 bytes bgfx/shaders/dx11/fs_deconverge.bin | Bin 41060 -> 43108 bytes bgfx/shaders/dx11/fs_defocus.bin | Bin 45804 -> 49898 bytes bgfx/shaders/dx11/fs_distortion.bin | Bin 56045 -> 60482 bytes bgfx/shaders/dx11/fs_gui.bin | Bin 40856 -> 42904 bytes bgfx/shaders/dx11/fs_ntsc_decode.bin | Bin 58919 -> 60967 bytes bgfx/shaders/dx11/fs_ntsc_encode.bin | Bin 48331 -> 50379 bytes bgfx/shaders/dx11/fs_phosphor.bin | Bin 41094 -> 45190 bytes bgfx/shaders/dx11/fs_post.bin | Bin 55640 -> 57688 bytes bgfx/shaders/dx11/fs_screen.bin | Bin 40856 -> 42904 bytes bgfx/shaders/dx11/vs_blit.bin | Bin 38987 -> 43083 bytes bgfx/shaders/dx11/vs_color.bin | Bin 38987 -> 43083 bytes bgfx/shaders/dx11/vs_deconverge.bin | Bin 43788 -> 45836 bytes bgfx/shaders/dx11/vs_defocus.bin | Bin 38987 -> 43083 bytes bgfx/shaders/dx11/vs_distortion.bin | Bin 38987 -> 43083 bytes bgfx/shaders/dx11/vs_gui.bin | Bin 38987 -> 43083 bytes bgfx/shaders/dx11/vs_ntsc_decode.bin | Bin 38987 -> 43083 bytes bgfx/shaders/dx11/vs_ntsc_encode.bin | Bin 38987 -> 43083 bytes bgfx/shaders/dx11/vs_phosphor.bin | Bin 38987 -> 43083 bytes bgfx/shaders/dx11/vs_post.bin | Bin 41216 -> 43264 bytes bgfx/shaders/dx11/vs_screen.bin | Bin 38987 -> 43083 bytes bgfx/shaders/dx9/fs_blit.bin | Bin 605 -> 613 bytes bgfx/shaders/dx9/fs_color.bin | Bin 1466 -> 1474 bytes bgfx/shaders/dx9/fs_deconverge.bin | Bin 1009 -> 1017 bytes bgfx/shaders/dx9/fs_defocus.bin | Bin 1805 -> 1807 bytes bgfx/shaders/dx9/fs_distortion.bin | Bin 4874 -> 5447 bytes bgfx/shaders/dx9/fs_gui.bin | Bin 605 -> 613 bytes bgfx/shaders/dx9/fs_ntsc_decode.bin | Bin 7456 -> 7464 bytes bgfx/shaders/dx9/fs_ntsc_encode.bin | Bin 3520 -> 3528 bytes bgfx/shaders/dx9/fs_phosphor.bin | Bin 975 -> 983 bytes bgfx/shaders/dx9/fs_post.bin | Bin 4637 -> 4645 bytes bgfx/shaders/dx9/fs_screen.bin | Bin 605 -> 613 bytes bgfx/shaders/dx9/vs_blit.bin | Bin 886 -> 894 bytes bgfx/shaders/dx9/vs_color.bin | Bin 886 -> 894 bytes bgfx/shaders/dx9/vs_deconverge.bin | Bin 1791 -> 1799 bytes bgfx/shaders/dx9/vs_defocus.bin | Bin 890 -> 898 bytes bgfx/shaders/dx9/vs_distortion.bin | Bin 890 -> 898 bytes bgfx/shaders/dx9/vs_gui.bin | Bin 886 -> 894 bytes bgfx/shaders/dx9/vs_ntsc_decode.bin | Bin 894 -> 902 bytes bgfx/shaders/dx9/vs_ntsc_encode.bin | Bin 894 -> 902 bytes bgfx/shaders/dx9/vs_phosphor.bin | Bin 890 -> 898 bytes bgfx/shaders/dx9/vs_post.bin | Bin 1163 -> 1171 bytes bgfx/shaders/dx9/vs_screen.bin | Bin 886 -> 894 bytes bgfx/shaders/gles/fs_defocus.bin | Bin 1057 -> 1051 bytes bgfx/shaders/gles/fs_distortion.bin | Bin 3904 -> 5160 bytes bgfx/shaders/glsl/fs_defocus.bin | Bin 1022 -> 1016 bytes bgfx/shaders/glsl/fs_distortion.bin | Bin 3725 -> 4921 bytes bgfx/shaders/metal/fs_defocus.bin | Bin 2295 -> 2291 bytes bgfx/shaders/metal/fs_distortion.bin | Bin 4313 -> 5557 bytes src/osd/modules/lib/osdobj_common.cpp | 2 +- src/osd/modules/lib/osdobj_common.h | 4 +- src/osd/modules/render/bgfx/chainentry.cpp | 35 +++-- src/osd/modules/render/bgfx/chainentry.h | 11 +- .../modules/render/bgfx/chainentryreader.cpp | 5 + src/osd/modules/render/bgfx/effectmanager.cpp | 24 +++- src/osd/modules/render/bgfx/effectreader.cpp | 7 +- src/osd/modules/render/bgfx/fs_defocus.sc | 6 +- src/osd/modules/render/bgfx/fs_distortion.sc | 73 +++++------ src/osd/modules/render/bgfx/inputpair.cpp | 15 ++- src/osd/modules/render/drawbgfx.cpp | 122 ++++++++++++------ src/osd/modules/render/drawbgfx.h | 7 +- 64 files changed, 218 insertions(+), 114 deletions(-) diff --git a/bgfx/effects/defocus.json b/bgfx/effects/defocus.json index 364283f9f48..4c14ae05d76 100644 --- a/bgfx/effects/defocus.json +++ b/bgfx/effects/defocus.json @@ -18,7 +18,7 @@ "fragment": "fs_defocus", "uniforms": [ { "name": "s_tex", "type": "int", "values": [ 1.0 ] }, - { "name": "u_screen_dims", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_tex_size0", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, { "name": "u_defocus", "type": "vec4", "values": [ 0.5, 0.5, 0.0, 0.0 ] } ] } \ No newline at end of file diff --git a/bgfx/effects/distortion.json b/bgfx/effects/distortion.json index de216b397b2..13de69a40f6 100644 --- a/bgfx/effects/distortion.json +++ b/bgfx/effects/distortion.json @@ -17,13 +17,16 @@ "vertex": "vs_distortion", "fragment": "fs_distortion", "uniforms": [ - { "name": "s_tex", "type": "int", "values": [ 0.0 ] }, - { "name": "u_screen_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, - { "name": "u_curvature", "type": "vec4", "values": [ 0.25, 0.0, 0.0, 0.0 ] }, - { "name": "u_round_corner", "type": "vec4", "values": [ 0.2, 0.0, 0.0, 0.0 ] }, - { "name": "u_smooth_border", "type": "vec4", "values": [ 0.05, 0.0, 0.0, 0.0 ] }, - { "name": "u_vignetting", "type": "vec4", "values": [ 0.20, 0.0, 0.0, 0.0 ] }, - { "name": "u_reflection", "type": "vec4", "values": [ 0.30, 0.0, 0.0, 0.0 ] }, - { "name": "u_rotation_type", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] } + { "name": "s_tex", "type": "int", "values": [ 0.0 ] }, + { "name": "u_swap_xy", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_screen_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_quad_dims", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, + { "name": "u_rotation_type", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_prepare_vector", "type": "vec4", "values": [ 0.0, 0.0, 0.0, 0.0 ] }, + { "name": "u_curvature", "type": "vec4", "values": [ 0.25, 0.0, 0.0, 0.0 ] }, + { "name": "u_round_corner", "type": "vec4", "values": [ 0.2, 0.0, 0.0, 0.0 ] }, + { "name": "u_smooth_border", "type": "vec4", "values": [ 0.05, 0.0, 0.0, 0.0 ] }, + { "name": "u_vignetting", "type": "vec4", "values": [ 0.20, 0.0, 0.0, 0.0 ] }, + { "name": "u_reflection", "type": "vec4", "values": [ 0.30, 0.0, 0.0, 0.0 ] } ] } \ No newline at end of file diff --git a/bgfx/shaders/dx11/fs_blit.bin b/bgfx/shaders/dx11/fs_blit.bin index 9b82df8d3bc922b93f4ee84865790996ff3e4b03..9aa3ecb32270f4309fe29ebcaae03cf71f4278a3 100644 GIT binary patch delta 3358 zcmeHJeP~-%6u#8Ma;5rk|;+bEb|iYC_{e8&s0D3iIhH`;wOm)qger%O7jThOfNZyX#k8#}8qI(4pzm z_8yFn({Wt3b{8l@Obg8;oi<#-Qk-AIacEJR;(x}{xIwQgzBaY6o2_}O_0qv`Lq*55 z_qX#Owp{L%X7c86`>+rQ_4{H@G7#*G)dgeGuKt}&VPRt@=^3<=ArkS&1|ogL7nRpq zKv_+O1-637nk4VZU>~jZnMGfe&8Sz|GnU0HGR>Z8K9lFj&U38DYmyJ1elBH0jX&xQ zGrV!9oKg7#-85I+;AVDD(n)E4ERi&Bq?4S?`Mo~nQI=R5A5<*n4tX{h3k3b4=b!Mu z=glX>X2a8R|*K_Dl%B?P@0#Pm!?8Q9yrvyiKz(G+>w^(R1;G?%`ItpStDNYkBS=& z5XV}QJuB-kxySB7eVc5&l6!YkbE$^FO{puv|06YP|8{E9mwoq$kz|@e)<#qLkj$9O zJkF9wIk*l@4agE}3RleB*qN1_kxw}`CSl)m`otrq};+B`dlrp!D{^*%_H{QvKshD5>BbFom>{(Mca`y{b^7=*Ttl=|E<40VpHlWS|6TNffVX66zW(?KJ3-g6SHH&%_4*4U} z%+WdgK)l?BbN{oabC}K?)zQhZLYzlWj&n;oSs%mJk+z3mn=C@)-b&`8GfqpdHW%*aXniJ8yQI>!4Q;*a2t&>;!D4 rPrtR_wgGx9$sPri0+?MZfZgpD0Nc+EXa=+bTHvxKaECNC!R!A7La#QC delta 910 zcmZ{iTS!z<6o%J2qch$wrKzc<=5I7r)XoNe<_Sg~Ruc&X;%nZdK;%wn9=#Y9Pro*(31>B*G8N_yCj=zfw9qLhlqrAEDZqbbcq za;mgm7c?<86LQpYy6t-T)KL8UoB5*3nwav8$ySDVC^h|6n_HP}i~k2D;vYb1(8Y=9VdtX-qB0+wa{%TPrOBqtqJjK!j4|E*~()3J)Z zM0ZEEo@g@pCriK17LKx~nfd>B?#?tHM16_@Ltr0%*8+B9u0}}~kqz3DiElWL0?ctk zNOh+S-Pr&g1nP{6KoZyi@<1HGRwxA+!Fn;@Rn6-}?cGBOsyhiF5vX%e_40wLzYP?E S?dWAU7fYve!Bh4-{j@(mXY~#M diff --git a/bgfx/shaders/dx11/fs_color.bin b/bgfx/shaders/dx11/fs_color.bin index 388dd403690836a890a25633f4788aae4bf75bdc..aa3b9a2687a3185bd1975b5861edd2bd63954aec 100644 GIT binary patch delta 3688 zcmeHKYitx%6h3#h&uxJ|C{$@=&{B6RR`$`lvV`z3$g8wGYO%D^Qnt9U0@>Z-8mLo4 zsu+X8+y<)9VAEfyA?Wx_)aVaQEQz5JO%qgTQvnHzAT{=ftlyoTZKtzc&>yCMoaD=y zbMF1lz31L@&g_o#Nh1T&!M0f^AKtWd*`epZYE0jix#7xp1M(ARa{Cw&g-*VGq*`Jp z`0rBjlxi5l!ir~uIw$=UQ-_nR68lYM$v2pKBP}^8zrXwXqhgBV>tmR=m?3MHD6a~-P1DUZG1JI$>NG`LZ;a=>9nm%Mdam2?+!OPZxB!hiHHEh_QFMmj z@EVIv3vHAW7nw#YMS$?t34w%)gPw=WR< zvWBQ-AEO_CWmMUYT-iXh=8}baw-bGKkae`elxPNEA!9a)b#IkR8p$b}SYo?zC#Ow~Ws|13j65Zlym5yYPjnlJ zF<#vH#q%aC7Ck=xxIa}fRf^`pIU(yGg(uFzc$z}LRd~vzR<%E*po>&tkI`-r7oymH z>;j{qXa{8OB5@I#dE@ebY(2NEm{QG1#M;JYurjtwb9x%~h}VBp)nU8VSHYT`s^0BW z0zseFz{dv_@QHf&q5gx$<98Z5f;K^;nr=Pmwg@ z{4|f6!)O`X;1OZaz3@tAdmm%mVR?X;mdh!1wUKW;UUhT%TP$-L)!40=B_z+SC{8K$ zl$AJ2)nyg?le1oU_Tb*uYf8;I<*!!Pg)TQgyRk_5fl=E=Fd!)mc@DZRsT2Bn=(?m2 zp$|aUCG|tU1YMVO1^OU#T~a=L4nfx?Er$LRbX`(CqdVyW40sWe_5;G9Ci!bs+l%jk z%R)dr(*X}q3$y{R10MtDfh2Jry^f4t2NP2$izo-Eg+nVvB1tesA{H@1D|DnmR`R0i z138uW5pez5RGOJ5cowNr;$KuBDmgtU%vQ?Jn+h{LNn=yS#d?dAc0XrEnqab-GN3BJ}5Uy<13Rz+L>*0Xy&G3nfim!N2b);EOE}@;5pn z>0&WaYW1qavXAlMLmvLv;X-~K7&$ESC7lJly|a*i+bO4G7Trzjva@;dk=gv|BmHoc zlNwwg?6vCDS1+=HjuHn;{3q$y5EeK(gJtl{uFWYPgh-@5)wQ41AzeuZJ_kA&(P}{K zN<3%1(aQ2bdT@M|uw?=^pbb9eiFeEwg(Sv=z7ALg6agu`rn@nFIo=)tM7%43d-gjK`I&Tgl!0J0XGHOXVJfrWOPn*tmqf&1Bt}^TYC>Xq{h#(MOfygN%l|yj zd0x&v_uPBqqIP3Ki$#k@R<%5`a`(8|z3Ho($%?V&m&YC+ImU=6GV;#g;~GoyYnnH| z5sr}bV$_R8b3SDvZEhULtdUrGW@d~5*7m$b^fy+9j8Zl)m5Uk;RKsYlw9IKlvI9Oqt|9s`pSJIRyGb; zoqea9=Qy7Ia_DNN~pY{(q=|?(s?*AkxBzV7R)MtW8=29c__IG$T1(R09(NT z7zMJm1z9*-3V`h(21db8z@icPK$C{^I&R!@-e9r>If-0ArZ~tnEpVBpE?2VcWJ@~; za8K)=Tc!8vp9QqQE%S7ZUgT$6_Z7z)q}xG-?gF?`Nt5$DHAlZ^4y89~e7Mjp_7n{- zcgtt#0T0M}7|5Up`N?<}_v^`Np(DK&ES3dpJg)=R}B6!YzaLG3v?t>y9fLTt5~KN&Y&F=WQU2#_!0 zj4hr$a$poKnO(c_wjpvCMML$ePZORq}}E4_!v_Bu^i{o!R-^Bds=~+M#Pq zbR8LB3tufa*#H0L4qamXs7xhb3_OpEunsg~F30y(L{Vrpv;{XhfH{6UbPq`37TpJp zLglx#0eHcBuo^4|*h)5L8MGW!03R^Ga&SKp4;@{@%J}%v@G=iPOMt9?FOZ+mQt&9K X1#7@MuoeVxvin(`V8@tE+f4reT@j#D diff --git a/bgfx/shaders/dx11/fs_deconverge.bin b/bgfx/shaders/dx11/fs_deconverge.bin index 7f114eb40dec9465d103510b3e9d9a932a7a0dd5..3af60d5f943f0ce1137a6949ce8e6a147e07a88e 100644 GIT binary patch delta 3427 zcmeHKZ%kWN6hH6s+I6LaD(j$b2`@56A49_0Lck$X2CP&>3WZFZ(xjnCBP *SvzY#we@!uCiGBtj1Bqqi<_1xFj?e(?8#4qjx zFZuP{bI<*qd(XS)+;_V)PnH(QRQbjWox3`A{L1srsaNJI>)iC}SciQl2LRp+uQ|68 z?mT^n)UF%Ejs)w)XFz`1^a&>i`L%?=@3O@IhKh;jD;Cc!4=c?1J-pP~&~<*$ejxq2 z*e_35mbj64cq}F*9HU8byKu;?C~jeYB%0`mB;tWsw_;_wTfi~GL18?U*gqZ>q+B8! zAt>w&ZzvL_=_*@FiZe^rJ!?C4!x9dK=G42_^IU~_t`&J+W#PH&QYXxdM?0Y|nx1Sh znppIq^kA5UBgrM@#Bq(37e+40&4O=|)J?g@%8Nn6V&Mo6M-pKgw63rJ_%VR_%N(p7 zP$w+AI(Sgttq49W#eo+0zS6AOE#NA`H7v9L3_tx0ntnh%=QPlqGyawcM7 zw2mh0lVWQtHbr4V&~_gXx0}`6$8wA2_*70dJWH;7RPw^jX_7 zJ-yp5|KSaDw79gAE>u|L7fQb5Xzl%WIyqvLQ@a)$=;z&2H0U*vUs|Z=B@cbod)MkQ z`2QS(8-HlvCh=bL^8@Z_VtIx}eFMge+$k~EB7fk!$XQBZL^PwFN%~Z8t+BDWseW6d ze5tqHVEyT{!+me=UAQXNG~N4Y$J^!fFaMU*R~$?}jtrFWBFaV7RS9#be}lRz;XTy9 zMqQQgqiRffTSO5mWL&JOs+D&&Ec{Q&6OmP|LSN7;;@;2j(d z1}p|E4sWOX0%hyk(ZFCrcxgIt=+=G$uzaNi%5BVP5$PvX7&=lT;DF^TW~i`Pup5^` zt`9+zYAd1d4jr2f4wGWdF|m3c-8|>fcMXOK+^sg6_LUj##uhJ2=F51kKVstT6{uTr z`*C*_*i_j<(?_49XM6^F;%FzGBhS*{@l7aC)3Z}1`LO9j%&O^T!|mX|rIda&T`6y% zJ`U|8v%%wp1}!W7VK}jb>^o`kCvhQoxr6}g#%I%=0Fx+V zEqL=ZV!~pZWw-;;jO(sLxf_A^O}G!S7159AK~y7*^!<~gwoYtyA-WMe5zNaLT74>Z k2dkdVh#Ca*DI#hSYY@!04{;Bo7tu%4gmQjadbx=F154gTKL7v# delta 994 zcmaJ=Ye)pPi{HM_rYM8vU{Kkd#6Ne^=5mA26@P>5Gy2L@A7QGJ+zw%=3m5s)iO#1av9FHHc zjCy_iQ~9M-B_uVu-`j^R1;TbM)Zbn;D(lT*77SEy;kU-5Ot?9DPU|Sj!^o7x$vQ{m zvN3ASV>COiBiAUWsA(>{t&f=);(8f~o6D3#oH5}qH1f}x!WDFh+l5;YsAHCdj}F#= zO}lHupGKNQbViU zan*Zv2@Lu=ZK1eW)m+Eh8pZ0emNtFNw`HyP0M?-2$7LWe<5;l` z^;=bw1*;x5N=Pqy`IPiuH|kT@LB{iWw+e04QZ8#8t8t}hY`?@C87f~3e^(+l>lAIb zj1e{@IB+D1BXwju)5yIz8gDkYU?Jm=Hqgn6Q`KuAgOs2V;*+!2%rNBfK*@)pz_uND4}$~F2+I?%qE=u$5NA^lYtaK i^-;GW4afs_0=t0SKt6^TWQ8&?pyRS;;G6n&%)bGcp8mZ6 diff --git a/bgfx/shaders/dx11/fs_defocus.bin b/bgfx/shaders/dx11/fs_defocus.bin index 2b62ecfea50ea7a00f312ea63bf7755bb4127fdf..ffc56866624ced30d1005810fcd767ec987110a2 100644 GIT binary patch delta 4069 zcmeHKeN2^A7=OdzD0Ra4}5XWm8+5 zZOk1@Hb2T?=>!vfOJ{4%+;VHRmRo?jF%`&X5wKeH??mZV?xEEKk`lETb=l;%f z&iOs(JkNWc^Stlf8@fBY^r?&8B?h+R{uMnXwAK2(?X|59uXycy(xzrySXjNF_(uMv zbu|`Va!d*M`7r-6OUZyIJM)}o_J^y0T#O-}fnsX>!jr=y?Me$%f| z%mzc+<-_-@#GJ(+b2%73G75CEQWgH28fD-o~{nycbsywe4W^-A|0lci|+siHcv+QQ|c{#k(1q zr|T$bfN1_SMxBcoSJyDWsHGaqfAwLx?pgkmFy@wqU8JrO; zvCXJwADS9DG$F;MT`dqflTlHNCgy305nfc>qIofMK>8PmodY2w&X~l%EX)3gbFSBC|}Kpl=gb~ALQ$1Z%eB;bny;Psupi(1c}`mNsw>~4W)X78i>lQQOGXM zJrN;C9lcSwc`>=61PcsRi&4nRCQto_5>KPg+3qON+@9vGW|?9(pUdfQ_F=TPJ-0o( zsK`-}t!z`Yy<4&i&9ZVK`I?4I7J?;WBLX;NF`T6~n1o%I6Lyt(^AwoPQ8ax#bK@j+ zTUjIHy=n1kbLxJ3{9t8P_wBRlHR}AOR=vJu-5TyKeRbS}dk^l3I%}GTzhdqvdzQ~G zD|~cg#(Zn|&u+|Qf5ufi>%b$~J>|Vqi?#PL{v%%a{p5@63TxHZz2L_OK z0G8As)qcyj?8&{k4mSGN=ZWiB`*~UKAb|k5J7(dQpK&t4Q!R# S-}gH^ed^AjATUdH3jGOGfa16S delta 1779 zcmcJPZA@EL7{{M;`$8!#ly_KbXy;ZIg0-D&(rJvrshBVsFCB}DU`8D*0})nNOw8>Z zEE-I7I~W(UEGC$_4+UwjLbeanXqbCbhoAUhmT4FoUBE6`X5v`=AMV+N5BklU{QG;J z=luJebI(2Z{x)Q|eoZNPs;Sn<4&M05K=w#m|E|7pxTme7tGoYj(f!Wk)}1v^%%*cI z^VIiywED-aFRr~6WkeKDCYs+hvT;6VtgyGBFes|Hc4)a-7nwG1wkj;9rOY=GTaCt& zue607!t&nckMpJ{Zq`f|f4CU`YpO_7a^@I!xJr|~zcA<7=ZGQ)8C_Xmw0#KvCZcl< z3f0_VoaL8hw_ahCm?p|hDMSv-jQ`_%&Njh^g{Su57AjeO)WtSX!t^%xA%f!BF^ z<00-hEm`j@-dPk2$_(;98l$qy9_DcV>}N65XLH`Z_Su^=jC*qY-0_K#SA<;VCx3YQ z{E=#{E)-`rq7&s-7zMeprNSK8kVx-b}6c7kf zTpA?lGIG&SlCH~Kk}TNqOBk1=YUJM`m!wYQ7m-WSJJK&n6N;)&Fo6L~M3;2NB& zrF7beQaX)$!u7b61+3-8U6DKlbR(5b#f9R32IcA@e!T00H4UO_rIJEBs%WH$*eqf` zGakZ=QZqWgN8txt`CKhCC;NtdtKO>rdd-UXpC^9T=1*FTb+wq>jmKLEVv>8Bk+BCw zQ6G|dP;yK%EV%??54Nxv4~;#;4j|6gl4Bl*g*I{Trw&sy9PRin3^P7IQBc2@8ggy8 z8?g^!cf_^oBZq2*^ekKMxpc3ER=Ig;!c*>D;YVxP^&fvn_~lo2Mf!O#v0fFuvtiOl z^VLhW6sI)k9+6#TCS(i-AXQLVI&@_z>euNgJRjPCzAC2fsL`;y-=}-+0;v zt%uCeM(81^3fcs1h8~8*p+|e(dTJZ<@-I&9H<00q9w%9@-8yLJizw OQdvk#oo0&SroRE8$;Kl9 diff --git a/bgfx/shaders/dx11/fs_distortion.bin b/bgfx/shaders/dx11/fs_distortion.bin index 8bb9b1d8de9ee5edfd2d847df61aafbcad317781..f416e0393857e2cbc6f99b885f365a86914ef2eb 100644 GIT binary patch delta 10684 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 delta 7264 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 K{8dfgLH`R`7x`-d diff --git a/bgfx/shaders/dx11/fs_gui.bin b/bgfx/shaders/dx11/fs_gui.bin index 7091eac73e3092df15a4c0369317701cf1694e1e..fcb148030350e34696171640eff5e2e991bcec9c 100644 GIT binary patch delta 3341 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 diff --git a/bgfx/shaders/dx11/fs_ntsc_encode.bin b/bgfx/shaders/dx11/fs_ntsc_encode.bin index 0b9a2ef1c2de7bf0c3672822a42ef910a3446957..26ea7d7b35b349bec395e8992e6c80c9f6ff0f56 100644 GIT binary patch delta 4132 zcmeHKU2IfE6h3qNvt_%bOQpzP;Gz}UQrhlrsf8lTPa&Yle@lyC+1jnGZ3=0(xCHQS zVxSmJM8}Xd`hq4xpplkqK@A~1P@6zPY{CN=g9Hke2Z0jQf=d17?v&l`ZmZ&hG2td> zzxih7n>%Ob%$&Vv?G8T34>Zqu zec2a<@99^q-E4#EYOJc;?DC|Sdov2voo0jNsZBNYo&`0Y#VU4erk-29shX=%vnfsABNY01@vREFV#YfLBF!Lqp~3-O#F|Cw zqQ<}UkDv3J5Y>?)dsJ0KSVsySQH8^~xBT%z9oT0Pc*c?jqVa!xP(4*O?z+m=?yc^I zMz;~+gHKdLprr!W@__S!^Mjf&sU~jOLC0zcu>%)GxH#fu4WZ48sx?lR7EBXEh}A8w zS8A8I>ZiIgU}M4AUK#+OKyibiw~6_scJk`H(vTq1o8ejQvQodU;M@JXZ| z$t99ChUhlhB~k%+FStb7B-@d-sn{5<4!Q zH(;@dkyO3&lZ4ofrJ%Xk_KQI5ETu{;lQ>JFXcP9K#3>+xZL=4s~9gnQ9sDJXFA^A66$%qE(|T2r3bSDk4)nP30BkTU~WcZX*8m;VInI zqVg56k6P0BtAycRcKFuACplHn!akSU_+=A0#@k!TKXaGfY9lM8Drz1PZy z%gx$pjX$#4?1dPm@R%=?iskT{;1+3{Wf7}u^Pg0jZMqh>?}4A&wP9!b-p~1-^Emly6;+Vwxo5e*s%P`56&K%+Bv?$UF$vB)&I|-H44Dwj<&AoXmvt&IkJ;C zvEhJeW!Yd4By}r096!cVgLZHHZPt_G;wGH6Z(!3)LMRSBT)aULf;LAqJ4~A2b?dq5b9S*Sf`MfX~7i*mQ7bUxKbhGq{8Mtg|;pr zVZZ`hwsL-{?DJ{SeB0$zDsk}U;7#+NU*zlFk`Ox@)VQ=?y(+}E-PY&Vj=$2Ylvd6; z+F9yxtf*U@RgiB#UfQaXfRAP*GRjb2+nDXho$t-@!gg;uFvissXm@`YnYj1-{vG@9 z-G)WFZA(`0Cxy^@#*^4e{zxxG6a5u>Av)-Ppcf({@j`$(&az(!E_lcbkw+h9zYtp$ zf;h(pRt(WZnF$HeN`H}Fh;OA|h=_P0z}>vccp;{X7ow2fo6i0k5oaE$^kvtNij`tRw5D3^XA8iNwhI7}QPyE#CJ%k(|;LfoM@ z6A;1^H|&L2MQ3okO3RqPvP4i-tnZb|T$_>1Ca z3HO@>yh^fl$VN<8Yz>UP%e zs_>UpR@Kz$!S;+9SuycuSWI}-#QVw`eAV@SJ;lC1)-yuv3ldvkXJp6D!#hH3Ma6J1 zpUP%?>V4BF93i|`Qtz=d?ptEf2(fh)z8z(Osv15&{hpmUJ4convnw2B%I=|SI55{! zVU|59Va|Zvo6@hQm9y`^8?mh_5b*CR+qq>+oj<_LU)z~;?qy~;Y9BntSF^KzhZ*y` zotbMkCWTXp&2PpV??7Ey!2jYpUrlYbe-|*7v17ICc={AGYHZA?dn3#!Cv^JpX1@2U zb@gHr9B;KY39z#rPfkK6fXet4aYN#@ApmP>Pysfc5jDr HSRwoiyyqrX diff --git a/bgfx/shaders/dx11/fs_phosphor.bin b/bgfx/shaders/dx11/fs_phosphor.bin index 4e9463b9e4393e8dfa9e4f10ab45f4c64a229d75..0eae4ac059abaa5c195129a9fcbd192f7b83dc13 100644 GIT binary patch delta 3540 zcmeHKZ%mU%7{7a43RI>jA_!)_3P{V8**_45K#)294NxjD)EQPMXeR+e%hF9v8Jn27 zE&Mrxn-B&uTf(v#&FiwyB+O(kam1Kt+~(p!7LqME-IrzA=zjNdWp7&`%f7e|H2L*+ z&)xl=yXWqCu4(s#)O}y-Ela+313u=Z@C)r@$l_i(UcI9bNR~AWQks4 zol?dVFQCKAd-2(?j75D-l`eg>B#~d0KK(<=M)i87D@w0Vygl})j?eqB_>-~EDlLWG zS8g2WKfG~P8Ht&ubxx0|!E4?npEfo%w>mv`xx>}sDROz-HLb9xH!TS;m zhQ*^@FeI9?KrotE&?t+u%D2M86D|6K}g(vHX56>=GZqnl66T(wiHU_$VG{D4m_z$ zNki191|`FrHY2$6Em zKITt}L>h;Stc$AtRe1ayw5Q4K<-)64smwrv;H0zkfoFUon9)7L(QYI3&@Q(ApNB0IfD8*M!y=y0CpwaY#Kav9R3ceECGFv$@IY zwPb4^M&n7N_ysXF*{q({CX65`Jw~_>~I^WO&^!Yx>MGo86G0B$mBGmASaL>}*Q%8|NO(J>Wl(Bf0F|($`ns zyvO(ECI7gScH$-sKP0}?7juU7mOBg=-gx_FTCOrv{wa-FLk^ma80XAJD>4jOIoX+( zEM=-9CL%T=v$El%&wJam{>szcIdu0=_Dl6P-}jVswm|_Vz2I+Q3no{EEtuSbeHY_` z$?veggDse>hY#*gFfj>RFsXoj595LfCB>}IQN1Gten>3;B80a$sVzd*gL8m-;1n7+J^ zIcf*f+s1jfktD{iMmIc3nkfrovCLoVzSvbKMT*yAwaUNhy)CV?A-$PP8&IFikfNWLoIb|1{p8 zhTp*rbQSwx@M&zCT_4Oa_ol%3}t^e}Ri$iO5pfXMa&HE8qCja))H z!D--L1M(j27{CM^hr8|I8Gu&^ALDj4P!4PZ4D9C%hc@m(>p7qpC;@mSl>zCjWT-WZ xmuM=G25`S-AOm;`;PQMTIf72<3{8CNBJ-oZG%ZV)P~FJMZ3m z?!B+~dtXQ9<;biY-Rep=?P%QGdv$Y%=jLKfsi$elJ^$PHf`}T@(|cV~q|}h~7Hx-P z4|}oN^o0Fep_7)!B_97^XSY~ZUeLE*XTij9<7a%|a!KeX2Tc{Zs=+e6mWzTIbP{d%GO zj3^|UT;o8PS*1f>tIuD*p`P?ysPHl8)w`3IUON5xm4&75r_S|m{7Kz>!#y}FXebIj zm`1^0!Zu82jcu5Ignb@y!?Xl@2DV`;Lk+HHm^{WdOaa&z5I0PMn$?jV!Dbukkdq%o zyx*AH5tV@(fW5#l@F~E(kw~>bJJ1iLfr~=V$}Zu1;<8V04%aIIxR-;nSqog*Yyn58 z$-oW{DBbm5DSPkyRZJD-oL3;zBPz7>XvIvB-40q=UJN%XN#5Jkid}IvC!HsfyQF%# z$E8!f@B2!)#wGwVdJz~gSYukmW0&dnC$cIhAcI z#k>2%106jFqWi;0cm`T0w6!{Pyx8a%WJjiIYXGjr cU!50t6=()pfUUq5+@KR8ppQ%mi(Ewy01t|Hh5!Hn diff --git a/bgfx/shaders/dx11/fs_post.bin b/bgfx/shaders/dx11/fs_post.bin index 2966d31caed7a77b4fd508067028538919fa2c52..037d3e4b5f5dfe202024ab0c19b08b51e8340dc2 100644 GIT binary patch delta 4912 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 X`(PpDgi6Jxlo^T(FLotSEmHmi;pfr( diff --git a/bgfx/shaders/dx11/fs_screen.bin b/bgfx/shaders/dx11/fs_screen.bin index 77db0e11cdf39599be3dd29493f97c054d03b1d8..855a5c142f1cbd7b681cbfc60f498dc609b6fe62 100644 GIT binary patch delta 3433 zcmeHKTTE0(7@j$cU>B52iqcZ!1X|dG2D=x?T8N>j+!R?U5({kz*4>o40lF-NR+~d& zc&M#am~A0#V?vr}j9Rg$KD2!>HfhteX$(yhd@#fqk~XQ;N*@}V$o8AF7tUp=zVYJ8 ze*AO(neU(ZX8wPcoxCDVUXxC)FFdnjf9>{v`2CyhwKvW;ynpb(;^o#iC?Vv?nMB4~TDImTID*29$ERM(_=&0!+Y^#R7S$=+-&7sXNKY%6omyxYV|Sf&n z+E@pif+$8X%@gD8!@EO!H`ByOJ8uC1@LjC0Q0-7^x!}R3%9kO*)d0#}4#_13muW!Huo{A^-Os zgbW^~WbO_nzER`~@@md6kxzfO@r&8{*>AQ>7u>3n29A;WZ4`m&#mVviTt$ekCo`r6B9hk7Fl^I>mja>E5#X#sTktwgdF{* zJhHr0#Q&40tYF~^g$gc;eGnTfc*_Y2If+aaZ9{%9@hl3>JVS~v@jOg1rJA0I`SkVP zm{_GbJ#}kD^U(`e2vfuj2$n%uawdx|<5UJ!Ns=WibtEA#S-7HZmC%4+yQ7VwLg+#d zN_;@S{VoGHK{cJ)GF*2`u40n74B3;CY*M-mm-TnQcBr8{7;p_cD|LBhKWq>A73~|z z5pcW0eF1cL4VMqg)z!{QnH^zz?^|+}Jzgs=HrQ*3sqHEbQ;VntjFqti5fRqyLRhwK z8$;C1Oy`rC%;~yy>gn7&Zhn(S?TdF8?~3o)qOJVY&Y{Qm zQf}Pt`ueXc*IPRO*u*=UOXOKfMtoqvl5ot9#4S0A_v`4_EI-@4CAS!!EI>R@0$z27 zo}yn^G*R4A9q7-qSBZ=#{Xu_7ojx&7pNW(^>GHo4_&nv)C(`)jSRT#f=f*l$ zl?b|;IsPtv6$wWe@Ga1f#kBx!Xp5&63mk#HfK1LeFN{R{)Xj%|IEj z2dD?01Je0}4?FW~(b^8|0Coa(KnZ{OqeIRjw2Faefl@%kl>xD>n*cFiBhUow26kbu MCTNQ~HDOEt50OArod5s; delta 923 zcmZ{iT}V_>5XWck>h8Mgx`z8vZe`~Bv6-&9ft3&WQKlyAvSp$VCL|PPL}?U6Y(=6G z`EjmoQEH1+hK6fLAEF>NiXg%^d`=U63w7%u2=q3`Ht?kbzx$s%XJ+oXGw0rvbnlJS zVNUETt}ZNUndu3t-+muUEweoyP^1+EfGd3?yXp{oSr^)4UF4`1URvdRMDr23tcsFw znfp~gk#}k|5ta$QSS3Od2Ifm-CA+Zo%YL5OwiLw!(eud0EoRne)pDoh8z#Q50cgH~ z@O2TP@+KvD06w@SXkS4#9B0%&FGVPLDM3_70x<9(PGWzz$*EgiT3r&K*yd!t9zsHeHdV#-|0hhjRJviXn^vc#@{0D530y%dXDZ?Z|Qf zpL3m58K$Qe63&)i?do*Tji-FRTf}NSsTr>jypF`_t&()rtFy~d!vRt z34~Ze^N15fD-U^w(H3U_NT)(NP?QLAD~gJq0Qq6Gq{Zyr(dG@p`y-?Wvk@pqC5^YR z!&SG;P$1kouoz>=O_d~JtJzAGkIkZ?Up^+WfYr=1H<=up#bLxz_ljcSMJcdP*lgy` z7@tL?3ASq^cBYfdLR}X7f<0kv3#&1#4MM54C0%m9bWK>FSakP9WD5BmG$D>m_T}Z+ z!5tq0?$N zxKB4p?lGa34ffPV0xYLD^61_+w8~jI`2P#|U>;9Vc}OBAiR1LAF5(E;V!53FUecjl z+N1dtlTB9!L~|;sIhmxRgcw>WkwzRM3W;PwO=J*uVh0QL)#7$m|LC+$G{;7y5@IN# bUJ)VcA0SGIgVf4FEaQIvuSg#7$4GwwjKcfK diff --git a/bgfx/shaders/dx11/vs_blit.bin b/bgfx/shaders/dx11/vs_blit.bin index 921983524a6cc5f2a1ce1915d275d09f96e97518..fe9ce0d3a0b334e4876fed931f80c64b473ffcff 100644 GIT binary patch delta 3243 zcmeHJUrZE77@t|rUGa>hrwub zG|{GQXuUYdi-`#_QDbdlGd}Us7fl~9(Ffy;h6HjN^@VEmO{w3^?b7{o&?Zfqrg4+s ze)G-D@B8MP`M%kmxGGHC7BZzJmm0eoHeFxe+0oh_ZjMjh8?JwRYZN1d$}at~zEHpy zNWD=0_Gi#>koCgTPG!dgra_xiz=&?M{f z7gzjwiT=MP1~g)w!DV1UCR>!q{pOb18B@sA^5V3dWFua6VY#Inr=`4Hw?t&-`Az0k zo+TgyF9gm5`H7Zz^h8rMEj*YGIjM^Unv&jf3xt_J5+lhF2Mu}>LYmV=n5I8wP#4^B z)t8Bt+u^^F96DZF%PPxWav$2^aV210CUa=nN-IyxDML!B@sY{CLP!)V>0iwKuv#^9 z$!}Qb!U3`^&}TyD|1kIAd>~3K6`=XgbH7C^7)#n2J@NVt%4%`Uu`FkzWAPK|i>0Em zNPK@sVB|8t-pOqA zm;7mw*Qn$LJ7Cu@fnBk#P6VqJqOOljb-hpPnhP-bVCPo)!#me7y-|F;ikuYwaLvxl z&af|@vVm-AntF5f^%X8NUwtLhRd@)tD7))+#(k2shdS(E6x~m~s-YJ{SFn3A>h`%{ zm`T#pT5exkv#zpwEj`s*RNy(g;hY>& zCAy~Sszi4{pM?3UM2}QmmFT6ab4jFdz0(0b>?wl(oZs;I;HNfau1HN~V7^2QpXND| zDg6zkHcH{I{J zgGq2WK=(OrV(cMb3ng^Vk6BzgQdy1X{~bP^1y*J$ev5QvKHkeb!2{_mBGk*8+9Mz* z+Fp>;?t{Q+OdI0zOF5<>C80z>TQgqy6r+O&_<+t9eUSMayp5Cw&uu_x2!>zPAXIBZ zsESWT$P2OpVygfd05FGJ0p)-;z-qt>fSp_(*t1&I)&c2g2J=V-j%}j~fu$_6gd{jazQd;@RN}{-adG>fddx~xIZC4ZTm!kz6 zzwNtAbO2)wB^VaU_H>!m%?_)@3OwFbrZP-NCclrxTBZ-(aUbM2-?|y!QNQyEf#@LS zqr&+)jVcOR#a9$2(SL^dio!R=R}>10FDqLcaO$xk*~)OV<5fK;qpog=zgRMCW#e&O zkq91PFXP8}f)c!jgoc`oxMrXL;`joGqUET}@3XQ5HL_cmHi)@g#uknA5~KVhm@8?o zGJ}7C)_~cH&CW9o@PXugvUpxt$?_Z!lcl^j^_4JJx`Jp}Pr7M$$q6}*jVuQU;uw~F z94KfZpqlgEqljK79KVIg77h(WATku$k6zfwFWhah?Y8#24oW=;x&jGS%sL9)hv_QMOLuV>xZjr j(XT`5kz&M+v>_g3Bht=d^a0sC>c2s?sv!~2 z@18j`^PMwi=A5~=?|Y%|wjdW5ome1AqTG`1_{y7$M|3cX3X> zfWM(NLdn=qpkuSr3(pEBS^F>xiZ%fwwo3dH(>Bqu$Sc<;<#&C0a)wa2T!{;8m@ zXYl;Z>%SE~U>h7ya5~Zvmr_2mBN|K9MpMbAc%9PWR&*a}?evg6BoR*SNW_SgROh;( za~|1eR~3IwqW|BC0Zy#Rb{TjpQ&|*I{c1~H6OGYdr%gypNo6FnFm37C(^76#H$`OR z`3>ed&lFG=F9gm5xrwHD^h856^=dFHrKBzvX!`V)>mkhCkz|u}aj>8>E@;P0V3Pij zL4E6fb591Aw!i-&HFUgmCZ|k0srtwqovH+k%TyeiHqy+?nTk9Cw*>@ciI+S*WJnO#*` z?w!p}HWcPLdz()^Ex332`OFKO1|mnV4pFvz#@dG%b#(v(Bs!+aE-ujzT;~$q0sUu~ z&m|h2oFLT3HB|`6hMMxUo_-J*?a~jUZBjIb zV)0lQddn`CKf~yc7IlKo7JDLp2Hv`hgQw>r)CI#Ys}QOd5vow9BIE{H3elB<3;+~| z%K#;S<$#%h=>QA;u6zB2T4*fjh7YNaT&;8!>=N`_zzu)3pu{bTlmfTp4 z&r^Lf5PJ8k^nOMK^+x?AKdKP`3S-YI5(P%7Qdm>!IpEczY<053xQNoNm<0Zm&B`~V zcEupwMny5t$*(P1*~;ddSFz_)HRB6eV#(4uEw3l9Aq{rq(`0@b1{b>n8XXfMDbsx8%k3=CA6F{#R;DC#M6*oB#Vs9Lw+U9_4jeSOP5AQ=G`G$|TB?aSo9v~l} zo!73o&x-&PcoTNK_bl3sbLIUz0baX0Is*{s4)}S0?1k++!oR)b+VC~BL~IWH|NrxF zmFF3;G>p0cLfmW12~fqK+s=E(bc$X_|DcDH?2{|F%$}TDNsKZo2G}-7Q&x zI!(lcm`#e_Ce)C|RFw3A2y{&R;l(GEi1CFG9(*9C7DEWtMiY$+es|_>JKNc%4+i_< zCSSgLX6|?9o_o(ZGn>9Drsu`umnvtU>)Zb9AL;Z$;o#%*<5w!^(9YWz1VTvt?D@G$ zlkoAo=IW9?uv6?JelI9nioOvP(P|TgpOrG}F9MaUCPgeVnJTVMFYad3gm%lfUz9!8 zIPe-6FspVkr?s z+}ZQsgz4N8TuFzecrcmIzbB{Aa}QxVUzs>J3Nf0Xqwc-N^*5 zEj@c$(xKXhh*s)6E8KIPA)qW>Gal~EEi}ZV7p{n=MGeLhNU&HG@u9P#tS(xDy>x^) z8YWxyVB9NJ+ODjs^XPRlOD85Y#IG(av*D`Y)eAE^L-`@Xa)1}dlFE>DIu+Y9 zX)v4&g@ch-yMqUV@kCI~@a&3;Yj-d)k%^2c-8rPPp-<)!dvb^km6b>9&8bxbm6y{a zk61bo7#eO4L_+RVZJq8kY=>>UvpYf_cQO{j-GNk1%IWvl);XmklK$%J&ITLr+;~|; zmt8hMrS2*+VA-Q~<_@@oUymDprN%}HZe5b@8ofQRiSBCulwN;nopNl$p*q@WzH7U) zaA$$N>2CU!; zN1*_d4>ca+OfGYqGr0x(CgyX-mjog6usIVKw>gs@ZgVC_xy_lJ6Ns!jz<@Ei2Hb!{ z&cq~YHfQ4HHfPcg`zOrjOpbAzGx?0$oXK_AEC9|}H~qc$ZTnWl#eNS1UZ4*+0N9RsBZX5tjH>sWsLx#rt!ZO@ts1ktr?aBdHNd|S$(v>xCUrOEuJK*bYYI(T9$odqnD4*K#W z#*;4k;7J!f2wXe)33I^;h5wQg8?bkRviZF^;n9hjS|R@*jrZs9jHwMm5#2Pk&oZp~ zpogZa#ml|Q>8XAJ&P~)ZUD5Q&(*%8mko{QXj9Dv7HroM=VRu~MRzz3;?gW_K1#APV z01F+S9xC5~(enU{vIW=)IOuoN2`4N0CjdL(1ge220d^?6fL5Rl=%9B$7#F&gvQvvz QY~s2H3e4F3QgV*`1F=X{wEzGB delta 1423 zcmaKsTTE0(7{|Xk?AZkb+>MIpQtFM1D~nLEOVXRx3)+eeqA?;Na*8TVW zJ&hiQYA2Zm9Q zl`O_&%u2-^v(hfaBk;3QH^;0rz%eWRj971g73-FNRe!Z^E%v3`Y)}mLfG*GnMu7#( z(tFwk!ay(g0kEUoo8SOAD?4|;anA5r)aS1}Uy*7 z(tg|`_nn?4y=F+?t9_?!!V!V>B)9}_fKg2LtWK46 zZcNOqY4pdhRX&fpvtExY5t&j#F89vGtC0(PUUZ(F>O51HE;seu!b@wFMl4+<%6YMB zD^aA{VaU&7F1aI?qWWSLBJ*fLk@)}L&xJ98kH8|Wy%}ZmO7NLuszwif3+CjJKuCGu z4%U?qy$4NzmVu>U6L5hg0MpYlpnY!X@2wTt^2gqm>>R|oK-badV?8JZ8^C*DBX}Rr X?S$B@99RCdVN+>I2`0{i9Y^sWP91-Y diff --git a/bgfx/shaders/dx11/vs_defocus.bin b/bgfx/shaders/dx11/vs_defocus.bin index 48e32ee5d8c07aa8dcc920768af225a1e44d1616..6ada3526c81bd66c30bc6adae1b59bb9541d73b5 100644 GIT binary patch delta 3240 zcmeHJU2IfE6rQP>jQy=V6-tLXr@n%3B38RCZHkuATfbdH2TnB;u}TJ+@JRDy|l%w%2nH(_W94Nq&!K>5rHG+{GvUQ5rj{-g~b7 zbl{Uc-%I0HS$Aj>tFiUu?O>)qFDoJ$%;uD)tWwySZ{ZzLu8X8+C`L|@fwVF>kRx(I zn;V7B8DhefnD}>Mk_*0JLN;4Ip`CqbLPxDr@R2*qn?n$d$Nj8dOhUGXD3rjnZ zzO0hTruz?UPajJU6w>th$Rc$>Z^KZ*jD^n?iEXmm^*RSP;mWneWN=lx2BPqE*BM!yuEtgL4M9_E;qM3xK*$u2U!PogeZHl$S6{ml7dl0^rM7zySKd~p8`$TmD>(Et>WT$nm`mEz zR^wgMP+u2c!_KxDuKTQ0!^2))<%;{@Wl(jG4^AkqH{lEZ;&ggR3kZ9b{ z4T)}n{xi%sB>K(J4T&BYx+baEu`%F>9{yFrf17XcW$87K+NAw8nJG?N`r9v$vd4Ia zWJ~)pl3PV~vt=8wFD9Boftrlbwz#VP{)BxH6D*-P8y!4Bay^EWmwF%G+coonBSWdkk zA6fMRw3Y!PfE564HwN$lHUm>^3)Za;p_9XOx-Ns&$te1tz+wWv!O0G1Qh#=%1xCDtaks`Ybd$ z!z|X4Mh>D(IX?AJR!^}PiTTz`u~G@A{Xh}Bb@$%}!2h~hZRy9^n^-I9@# zU)(Q!CoC-Kx!WK~me>4SP?SAOzl-N>>6XElV-pKA9~b$lk{n4*StxhQeUw#LSM%o3 z%^DMyF6I~WV#!q}^B$QMDb^fXC@uS>kSK=J*Jg5)1MHaZxSn{wTq)G>wC^b?0T`_= z#kr{C2BZC(lQ+Uq}0E=Py3-T;Px1dl)}a)&7b=v! zHH9qtH(0MJ%xPXzC}>_)wkJ?;!iLmg#@UGn^p>RDL5WXoxTTaAVQfEAt5yJ9*Hj2$ za=e|#=t?}$n1Na?7?UZ+MGkRkx)zoBeF}?F3wwO0PCVl>LfD#k2eGJE!rVhny$$@U zj553Yz$`5-8Gv^Wjgj>-uKs(}oe{pAcMQ)G=1#052G*9?-C2A?EyFi&0tn;Wt9qO$ z7$Klrb{|kgbJMP$Le$aQ)g6IIU*s&hT`%lE2>iPj|C|UBYuxT2|Nl?!=dhoo^=Qfo z5XHR;H2@6~fTF$yU>oW_JfNMZVMMglf>a|15s|Mz^vHI^hU{R;0fM diff --git a/bgfx/shaders/dx11/vs_distortion.bin b/bgfx/shaders/dx11/vs_distortion.bin index d56ecb58e4f2f1652e9138ab726018e1393914f0..34362427383afadd2c5fd91cf8af9d8118628685 100644 GIT binary patch delta 3199 zcmeHJTWk|Y6rI@^$8iIs5Gtw!v4BbKyhzrD1`!@kXyP~!3gr<3C~Uzl2G>TmfslY~ zka$(7Y?**SNR=uOjSwHLhA)J~CrIfBA3Q!lNTvBeNGO1W`cWP|yIza++5rSo`;(Q9 z@4Yi~?wvb(@2m%Z69#VxN_pA9;?Ab#^;72m)i+pC_1wm;pL_k}DkX$C27dptP@w18 zLZNc(HyGHWj^bIyW!oU-UQ3Zc314n`LfJ-(m3wU#%j7%1JX@_Un|bBbp;+%DU+VmX zDgSJjI{1d-A)1WJ31@eYYo55*9t^{f#2ukXqA8S!uZ*^+15VYJM640}#8@D)BNh?m zxVAQn=*~-Yzk}#U1W#V3=dDb2Q=+zs^j24eBJ9r@lag{=oylx0z4h#638!Y~WMt;K zP40DGPC{8cAA)=G6La!05>45(Y00$6aYHUpC8Osyq?tdHY?7OMOQJ$jTPkA8_-bLk z^^|r0CRX}X-=iQ5Jgv@DV$S(#F)}YqGd$*Ps=S=z%jM-QBRxM><0wRNeR6^3&r6DC=#t^Y)c}b$q`dQ2VRlSHtR8 zuXiqMZ+Sd={W%IJsMlZFgF2eRv7Atr{8W5^E%U9gZY{l+c-g>z^8P6j)g@wjHpj3{@+}qXT4urk{{gOAKl$r)3FN2xX~8> zUt9cG-Pm+h5V8k~h3ym8a_>Q#P*ei5SRjP5uEPpfgnG)#e(2(xZ8s_N9`*1|wm(or zKMLjjwe@u5|Ha3Luw40!e!@DHS#ZaWD3#N9WnyabdpQ&#k!U0UtLAd;Q}wFhx0Eo5 z{pH>Za|uad~+2~Co?q$jwmy&m20-mq7k~yRkmDPip)~B1wocg=q@nWq>F;0 z(HU#VSfXSfL?1j}2_eX?6tR%j0WBxlVe!h~e;*l})0Y zii#w!qGw3T++?I;0|!v9ui#L%i4=o=D<-)SZ{OIj{8Jla*pNETjFlyzD{bFshG4zU zK-H@K`p0AtW9f%9Muwv+yMf6V%I@M`4_?WdTL1!GxxZa-E;<&2*hK6UMLHHOKNxsD z;!Sp(nNpTc_W#9B(_&pYQ~y0XK%9C@Hh>-pz^b0SjdU;FZzpMl&=7}+cH$tR*6t6Ko6C-8#FumHe$l8&OTT2@lar93Z@y;E!0}TyTc#G*$G32Izs`$EwJn diff --git a/bgfx/shaders/dx11/vs_gui.bin b/bgfx/shaders/dx11/vs_gui.bin index a534317dfb93a1d7d8cb80458cd6557f9ee135e3..42e835bfbf266a088685dfe72b6345641cd609ab 100644 GIT binary patch delta 3243 zcmeHJU1(ED6rQYR}+oK8)>dK z{*eeODxw#s>w{H61Qqc?9Ur7GK8kc7_CX3_cV(r5_)--X7W_T;=7!$fq*Xx##epwp z&dhx0%$Yf7ZicQiLw_++iTz4rN5j(6@>{27b=95WUj2P;W?}vR7$M}ia$`{egD;VK zrflk37}z3@LTjVEX$VuF!OUPpR~w#V(qk}EpUGgDK78TjdU=^OIk)yfYkuR+h5^gZ zedZ0c%Q}h^yvVUT!-Cil7Gv$vrbv_*owClc-EkMYm+cLTJ9`C|kA;*e7+lQmw|Zb5Cw!RyK`&iEtJL&Hm?^D65!6(8yAQxuPWo3g{K!_4N5XO$+Y)c8n+qX1GRoAd>gbtY(Zn>X<>j&H0#|w6{^I@CK%Li}zHKL(DtN+p)J} z@)s{sOO`i1`u_Ae3UYkE?T@Q)5)SD=?Vw~mMB4moj9ZIF#5Xncvi};k{(w4N7MPYL z>24`AE~r^pS-pUsY$?jK4Xi)^Y})YPfAg+w9t|D6Ge+pjIlnx_C>a3;NOU|Uld43w zR9%(mKIs3zdR3yQs;)}(TGbUvxYl~J2}a~r1pjpI;)}jjhR7$B_V>!xzY1SjW%pH) z+Xt=rf}8^6-oZZVJ8WXiHqfjLLYQ?RhC}1O!I$^pqmE^I-uA zQ6UIg#bD(Nj5-UI35_lKMEVW9^_Te0)*_UI={Ge9c?}3vDN7M@f-HyF%0YSnvcnaC zGQdi}Jiu&#kzDQnwYUL#O9735Wq>BY9Af-qTg5Esl>!`qxd7R&3s3-P2KWI1z;Zwf e9Mu4BrK?ZBz_jP|W6ckdn6No7AA+@^CFnhYxgH__ delta 815 zcmZ{iUr19?9LIm>>~7wLlZ7j`oKb07tL)k~3PQF!*WZ=760tRP>knks3<-puHlKqH zkBm`ci$sG6(~d9ILt-zHFA-7?1)-qJSF!N0I1H5A1t9H%Y4*j31Of`MA1(2xI9g`Dw!!+ z;$i6*VKK?XRauhklYF67lnqqP`Z|jrgSm?zY(-_k!P`sc2}?ODd1w0<+-vQjY_7w` zebL))3)ZhLt}cpw-5wS?^;u6DNLj_4LXsGteSdj=qMw~n2ndZcC0tcL1CYeCR@?x7 z2|&@_0 Zg2++i2usl?Lf9Ry(_B(?(5IyRH8CSL>&S?y{_1=`N|XY)Oc} zu-p=fMEoR(^nqLtA`y=s>Otb~fk;Rb;$@LYJRr{eEVDD)Mo4(+B;TBS&b{Bc_uPBV zof){v3_M~I1^L%&+iDiRAH3sVmp!`PRl(1!ynOKsMhH2s-=76v1_l>LCoM%F|HGs{kTe(BRHX;}WEdp*xcbL)jr_J&(Rw34p34dQqp z6cJ<2_AXZ?x7R8wJhv+tj@1NX(G`(8xmVJ84#sfZT&F*_t24}rQ6tfvk?0o@AgaajlVwOc4NFQ&Zc{K82>L@E%ly0jol!rT;+PQc zRNBxLO~s;AjBc=84!TQd2(DW{QKnK-xpDo(o{VH&XhTfQ?G!g}_llta-&HnObJn(5$=*-9_8cXo!|%jx_R)+ z&7aSK*CI}1BgwYOq^bThvH05Q#W9yK`7qu_n^$y~(gO^Gt>2U1lhRkOr-Cf5OO9NB zjvTuf&3{vhdtp=Z&Q+hX9VD&ZWu|SpFJs@z={0XZwv9zTmle7tN!l9=O>@fUmXyt* zCmVCK?B`cqct7sh-Osc7w+sf3+)onPJY&rZjCw=B0Evz(vR9SpwyLWVJpug{j8`Rk zr|POiUsYX}gm0;~n86}Fx$t-M0ACT7u<^er@4v2YC_3VB*hdQdzZUqh(s4>wDDQnB zShAm4O@%{d#$pH6#vp`=?{I=9m@-WAkNRkb`3WY%aSz>WeuyVagVLYJ9g@yc--)-l zps%D15B<}8dJsG%CgM?~EioHrB1aO1Q%lp_?GS@u6pn=bU@g8|@)4uQ9rS4;1jN1q zp}zv5Ug-H&j!+egP>SmWTM;-c0_g!{0h$1XfM&ofz;u9#+~`}IR|BnufLg#JKpkKP zF`e07JQZ5g01m)RfaKQ&$N|&?ynqJ4Vn8G8+Bh5fG%u21f|jgogpnOB GKtBNHJ|chs delta 763 zcmZ{hUr1AN6vxl`?KZb?cBK`=4e5{5Ts5~gE2z+I+8GEmQYX}zTMj=8!2WJyW!K;KG@`HKVN6#i6PT$sJi1Kp>!=>IxecJV@@P9#|z z>m^Ee!Qon2X~&K90GMw2tGqvG(>hxnb_a+=(5R8uV)IMWHRJ@#G{4?cRiIMaCc z6+%2peWY;vkH%GnS=Cn+=EQ|KS>uEDoQ$#T%;imh0gOi@HB=U7P z9Q<8E#%o+k4bdb{_sj?aF zNxSQ95USP7RIS>te@q8rIQPag0#%^ednxnh6`Ro9A-paVM|2cX@jQ`BtKls3N?CkLVzd5}h>RGdwXF Oy3h2Q4Rn(-w8L*+F3$=8 diff --git a/bgfx/shaders/dx11/vs_ntsc_encode.bin b/bgfx/shaders/dx11/vs_ntsc_encode.bin index d58e84749dcd094aa697c121ca3f4e1d2fc2f1bf..35c358065e38afe70473364f7cd2a500013242f6 100644 GIT binary patch delta 3220 zcmeHJUu;WJ7(eIk>e}ikM#vVqtZ27&wzimTVV#+Fw)xLgWG-4twX7wRp(7!PKR3>J zk%&ct$R5b?gGR}5aC?K{SZy#CT^*^HMn&Jj!5prGYxBqUwuL!9swFzJ5}m^m8>KL= ztW4LiO!1{SiJf}YHNh}>RWvcqN5zqJMyXfNoEEc6z9u6zM8^E3%%@I0`%D?3q> zkCLd$#w#UL$43>pK+~a&?1eP5XOcmpZgYf5oihgm%7X=W*gck`t5~T${S7%NcyUo> zB2lw@(i-XGk{p-%HAS9g^R&FIB9ikXc1tcuLreOHYHyYcY((uwIM7Tb%cTqbX(>SS zPt*kFBiv8mPT|6mMBVYb1)VN`a@e+`uF+UqJA>XG9liU zYQs=8olB}>RFkE0P+dYpaGmOfvXzp|jjI=SWhJXp8)9K@H@{`4hYtlD?G=D|I{apT`C(=`~LeHjPC-n-PXZOIjO>b#p4`mQ~E5 zXB+Z!%oo>QdN=Obolhk_+xi11?j;Frnz_CYqs|a8z@k$r+bLUgTlQs(dcl7I^JR

@(qMF0z67C?+^1LOjh06YLMU@4#hcJ3l>rYkOdz;x4v*NPt^FhN7kD1?z2)u11~ CRwtzZ delta 741 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 diff --git a/bgfx/shaders/dx11/vs_post.bin b/bgfx/shaders/dx11/vs_post.bin index 3495e27a7975cdf5fb320a72c59ea9e273847a04..d4e0aeaaedeef8072481780e2b118b455ed4a63a 100644 GIT binary patch delta 3250 zcmeHJQEXFH7(VBA>uAS9(IGHqa*TlO#EstGO<}koE8EH#;uvUjVN_|8YVBrQOm*n( zi@1n!!y^_S1%f>IfL>!vT!a`CAAFLS_@ZW6@Oi;3jmBj7-E(i(+k0Edf=@g4*;>q!7)(>Mhd(A5pnVm?avU?KQ%*c43*wuCU_QX(C zV#q=~TH}>URisuLaYSc$f1A|e<$nz6)!rEK*aL70w6w4!fXQiYj;VEq}P{%uB0UpAJJ zL0hWC(Nd0u60*Kc)oV&8I&$SCDpq2N=SY>4SG8o!`1tFw1{8vm^e@)7y+RL|?eu?b zd-cK-zlBkaMs4HwfxT2iSl+(2MT#p)6+Id$HH4$=DoLV0)u`DV%PdFHSy*~8vu6|8 zcp{cOJ{)^Fmd?aPg;#b|+StLtOer#>f1FgzV%touK@L@YuPwwHT%{^k1ge(50yW5N zBKq751JPt$&IP+Hlg2ygH9sHzcu3BU$FVz>YtIFC?Fx1U*hyx!z7pv6mOm`1vdc%o z5?RG)DSH%UBKzSIenT?+vYs9Wx7(P-7GV75`t@4j?xTu#X<=zW|KP=Tej1_lKRWp~ z&2Oi9B;k6)4{Oe>e&c(}gH79c*C2C$_IdA1i#xQ@!H?*&AyoKW51sFy~(fgxrG8hcW|rv3nlp+7?9+gA@imr*G%1%WDfc~&YO}f zLZ5?fO41A;x^7Cc+tf`-MxpC`Q<4cvyuyG5ndkjaJh|2fm-^ETD8PsoboJ8<#o;>j zADs;=9}TLr!R=q$8eJw=ZPAsE26fmnlkRvntb8BZH|~f?3}JI!$?)cbuNVv4^$d=@DAL0p`u9u&b08 z-%3YTgCq({=}kkZTl78a zaps`hWFln|>JtSKR8p2ikbVe)h_Zbs!mMBz-2ZdV<(#Wb2+D}i zQIZz%*6%F7?i+KyE2;SNpxu7ye&1U_02qu6`I&${Y*uhtDk)K~X6fwVPSY#o37tv6 z9~|{@`{uTw1(1HZ=tQv+p>pHB|S*B*tq)e^&K`znDaq{{*qd`%wqts;eQ z7ZJ^K({t16r9=6{dl8x7i%V&fZd52`xjPuUcX1q;LVj)HobvowurSni)jm!>Tk@R#KTG;EZ04oyhJaN@1$Xh9uD!}~4)Ys#L zsuwiP*EFE%Ew(b)!PW%}_=jLEn%tD$MwC&%qoIkU7fK6rS0*{v)V{h6*(~Ou1 zsT8XIKyfl57oLF0xjMrhk>ja@n94c0N ze)IFb_x5}9-mJ$iN@G7u`I_qUn>(8~U7i}99{A#)!){0Fs(bQJf)PUA^Ox2*B>XLH zl4|Ggf`x;86`pNOb&g@C*jy4lJ~)r*&1>Zg~3G^!Vss0p((# zx9QgQ9|qXo$_bn!AGzbnw5o;4kwi*sPH5TP=@!1=rqBoot)WKu-U3R@p6 zt}g=RvOxLCzz7F6TS7+WMDmv+;w1{N`c@)E|6aN%r)K$1@x}N!Y%+GFW+%Zj0`;zgKlbd(gnXi(bH$FQP8L8@9Qo-EFn@)eZH*&}w$3 zt*XLvuH&ma3x2tBf5n9Z6Yj>vLVBahU%B_PR#5 z^|`Lmv_2P_hTEH5PFUej75uZghQCp^+j39c&i}caMS~W0}VOsrp7wdJ7W2&5ru>H>K7<=f)QZ?KA zMs zPQ_p~a3y#bqu-AS1A{L%nSTeO4c91NuSKXIwjY3#MjJw_gegKk&~?DA4s-;B2YeHx z7Gx{P3Xo+WcKZGBo<+?t+61y0_KQu2TToo?>Sr6KX9s%X;AgurZ delta 812 zcmZ`%T}abW6hHUw-`s}UR+=*>ncA#bHr-ZHh;EvFEI(EvW?%Ec$kdt9n?zerfq|nV zLt?FukwH`zSBQG3bkIY-Nch-OXazy)Qzf!>?)HC)=)mv%?(dv)@BjSIy|Z(C_Bjt* zipCo|Jq;r(p=Q6Sb<9 z`3laB4v8>lG>Wi}Tg((UasW96375+G#OQ0WW0;%q;jLP^PH)4FV_nRgz7TXroLU?B zOnM_;x|64*QaTX5k!P&XNW1^G$?Z}Xi>~pn4BgR9OoyG(-DeHM=`#9q34ovcKw6XI zpoex%MtvfZ&AoHo$OOm_boT}zFc|2e^{&@dD-8ZUODslDGs{?2HT(Z7xlOOc9kVpw zcLD_ItThKfy#ipTwKUoHJ{r(YVn0E)beK>7Qi7JSgJ2_6Vk~xwm0|APzOCh? jw-Kxac^Mu;1EG=7L^y~cKFN;6efPLtvyOh#2=(v>7XZRb diff --git a/bgfx/shaders/dx9/fs_blit.bin b/bgfx/shaders/dx9/fs_blit.bin index 87431a56e71811b146f440d478fc3cc30f6a9e9d..b0f01ee708c46ff9e726fb04f2dad41d79fdabd4 100644 GIT binary patch delta 80 zcmcc1@|0zQ7^e>t1M~m?|Nh5Jl+RUUVPXJ+|NjM`v<#50U}Rv>fYKHd*WTqcG&8m^ UVfgo7X>vbf6DycES%}FS0M_Id(EtDd delta 72 zcmaFLa+hU-7^e#p1M~m?|Nci$l+RWC!^i*x|NnC^L1+;mT>%tRfYJsN*WP6{VEFf6 Paq?uwCPstFQcT_eT5T2f diff --git a/bgfx/shaders/dx9/fs_color.bin b/bgfx/shaders/dx9/fs_color.bin index bcde8844dd290f5f65e01681afe1c27e15252fbb..68f1eae9dc035570ae1713f79ce12378d19a0768 100644 GIT binary patch delta 147 zcmdnReTaKPJ*NXJ1M~m?|NbAE*pZuXr|Npl@=?Or(j*)?34v=mD(rbWpBaq$$ zq?>^B86e#br0)RfW+43nN`C>;tw25pD+5Ctkd^?_Aaxp>!x&AOI1SB=Ele2x{SVtb PfjNkg70jLdnB_VEQtKnv delta 139 zcmX@ay^DK7J*NdL1M~m?|NbAG*pZu4i1xPml=_NqA5lC+V z(oI162#{_E(pP|VGmw4&rQZPQRv@2&m4TrRNDBaIkUE9UVT`6stOgAK{)cX!!W_iN KXfXLT%XI)NmLa_W diff --git a/bgfx/shaders/dx9/fs_deconverge.bin b/bgfx/shaders/dx9/fs_deconverge.bin index b98ee3cb31d5c20cfd3bbfd653f233f1b644ed8e..6417bf6ad006dcbc4eede875a839430527af996f 100644 GIT binary patch delta 145 zcmey!{*!%z80Q0K2Il|&|NUPyQNA!yhM55f{{J_D(hgAC2TDgk=@cMc!N|Z+0Hmvd zbOVsC1kzKW{3SrT3dr98&e ubOn&E1kycF{v04(1>~=Q@^?V#BO5<%WMnm9`1fCN@@l3gMuW*l%*O$-!z9@N diff --git a/bgfx/shaders/dx9/fs_defocus.bin b/bgfx/shaders/dx9/fs_defocus.bin index 6ba9faa3292a2396a8f2f7b9a7cab2d843a4f51b..275e264bf061510dafbe15fbb141b89955a6df3f 100644 GIT binary patch delta 372 zcmeC>>*t%GCe2+MUy@o8Uz}N$Y9PeOz`)3Gg^hvv|NnpgKTmWntlz-G00jU4pMcU2 zp!5$Y&B6+i7XZ@DKx(P_@Kxqpo?E<7*f#M-Rx&=sQK=~Cwx(CSbfYLL7bUTp0 z0!X(pGSoBdfeM^~D!2os-vH@Opu#^ux*JFfumKGL(keh2ByIwvK?b`(=@1~@1>~my zX^{F7sCWyMo&u$p0O?+!{1!0H%)oG9^H#=CCUrwIV+#|8fB(%GoI@O)WPrY&5Ar!M jq=0G|KzzoD3=A_S>#~$`!UJ^jS{5@lh|bN=S=5*Sx_3*g delta 370 zcmeC@>*brECd*qIUz}W&nwl4%l9^j9#K^$F$Z&y;f%*UcfB!#CbS$i2!@>Xr|NkF> z(s!Wr7bwlZ3X$gl(#=5a5q~rET!B?!8v&?iy4an!|K(WU$Uq%0RWI}OtSz0 diff --git a/bgfx/shaders/dx9/fs_distortion.bin b/bgfx/shaders/dx9/fs_distortion.bin index 7b0fa91eb2fed7783e89df382de7abe0434e166a..b25548edd315a2262e4eb9c27ef77399511de412 100644 GIT binary patch literal 5447 zcmbVPZERat8Gf(rG|qP#CQ*r^MYJ0os-koYqp)gC6RYi{z(U%VJTTE7u*3S0;a#5 z$QRsvvfw6`+}TpDFyMr(;Pd5VDv?Sr76%*$Om{g^aOX0RN$0WyP83uhs9Y&YB2hY# zhs6-sUb5wEDlwZYWL?;6v!cbtT&}c`n8_7VWVe9rC?|@?llesD#DED8K9Xc8N%)6aVl)LsEEOz`KC=VZ0I*d1;Ht_^0BFFmXJ- zm|S$@Gv#z96`z@(tHg^7Nq8^DQ)p@mE_BlIECXjHl_t|*>Y z+)%u#ctmldx9FF>vi{1Naj@F&1% zpU5A9+krm??gsu0xDWUX;G|+oF|T-1@g>Exisu!7sko_l9r$(FyR9hww%@O~9k@>a zz;6Rb6(@mTLqD#VS3IS-qIgd6=ZYIZ+SydR4*VPXcYuEZ%2td0iaQlY6b}Qh(XaM1 ziYFCUfZxTqr?{@T0el7gCh&W}8^ANbJKB#7SiWCzP;o>t2D}ORqlzgYYzt`o^hp8Y!i7p9db*b$)$_#!6c7Wsfp3! zQEHztBWvX$JH<0|+#H#{My+<-h|*%C0huHDTJ%B-6$xdjdQQI*xa`yysGC|^7_HpcI_ zTW9})MdaS(=Ytq!uK9ls!GB2mWVQ#!7L)0$%x4k@3(5IdvXo2=C!~UL+GZV{P}xQ! zEZJOPF_}rf;HHkG=NEJ7lpK@Y&2f=qv*j5VzI@;G^(0N1NE!|EF&)cQBrmmuvh>66 za}1wn=J-oS-p;Y`xYV#!R9mEwH04qoHJs(a&C}my8*+dC~9q zQZgg8TtL5w`gwM4uIM6@=96e5a0H(zJT^9bGMerCuL)8+X2xtROT4noa`}e&NpI?~ zwKpOX!y88XD3DJDcnUA~)|vmpdCFY?UQ)SD<*o*}JIdV)aNTXjg=_=*y1SLz3mnBu zzmv+vfsBRS1?A2GeYthzHUivR%3Tj|x6!_fw+r_fe{S2*-idcexe$DeC^rH0eS8^h zJ{jdGmq(j-qi^A5{>Yt0dmZoZ@%p-#(dKg{z+G34vVIP3q5Ur2f8+JzlXk1y4fMHf z%IyUDK6WWL0`%?eQ|@p;Zc;h=@#W&+xMm9hxr)l23UDjRodq%$*2{V2Hi66m*X=sm z%*!p6Blj-apH9yfa>d+SX>ixnV}pk$j!X<5F}KIT@!VoQopB3;dxnRGhxQB)@7Xi7 z=gBAbj>vnBf{Y(MFvhduJ2Zs5E3d2UJ1@fzxH@U}u>!Y&eD2{5={G4#Jv`fhA@j|^ z9ZR{#3}?R~KKF6M@jl*?8#A2!M)`76hT~o~OM>oiKSsrrL*R9Uze)8Sm zcMM)UaPj4jK_1WGKM#@bG4dObzp?+te|^OGAm0oATHl+a*ZQ8>cxr9$8=ZgN@f7(! zBVXM=H#fKcPn#3Xc>0xxW!k_~efnXP4~~y2s%?dBkSn;Xdvq3F7^xT7+ayR^g_4pVScdF zT@A|_?++j&K4 z+r$%5yO^`r8WSC}^Pw#B6_K{4?+9`yBC8RJ!OuUc)_2(Wh`V*ug$e%+U)ze#*PQ)uaj*vM&`Gxxu#AP-(wFsT5idP z$gSFVx5CD>v14<^`3h=HyiU!J?}xnAvA(Dm)WN-BwdVmH)|$;J?M?^utxr3*ttLj= z4`a=&4;x3Xtnp_q%FpUkp7kQgRX66?jd8}{*IEzyJ*Y+8r%>Cr{(|GM1$)!pBN)do z3R7S7M_I_h=KZ>@SXjrw`LZq>9_!G`IA(sFgTGhWq`vIeDc6|m*^l_hQHFC0!6w?e z?q-hAu`;Z0>cLJ^Zwz{@J8}}OH|;RD|I1F$7v+LEWFGx`^7FOjeYuNP+YvKvgv+Qe z`Z4*keVY>pdx$dJ$K0RR2KQKF+2(hE?Pd-s&wK{!%=b^erNg}2ng~g|>eo%a*vEX9 znODw%>ufox_MtY&+cSb|BddRDf3}Z!{M&8&l{b)P&u^!9=>_wy4 KAL8-Xj{FC3hh`@L literal 4874 zcmb7HTWnlM8UAg2Oe7*aUd;HCO^WWy5%Nd`TIn@<9|Ic?~vagn|JInEqNJx4b>1?CAl&LqW&R{4Ernix< zI{BiLtrsfg!O(tC1E4DP42g98yNeJEf$b;TDCg4IO111%2SX8%eT{T2TXmdrI#(#w z28|D>*GiR2eIY$pspcrzW&JD_=F3jKUMSBGhW3HV4NAoGKJxP6sfpyt5fRB9z#kOY zksN9nbpdqhY6d?!`Pl$_LDqfpGH=H~OusoFvY-fF4b@{_524FT2a zl`1DOI#(!@8TdQkn&J&0^)?mnD*r%nN3pBV>Ky@6{t4h3@GHO; z@Hxet;-cb9iWe2HDy}JRDBe|k06Y(Se^-=#+drr{1pGPu1AhoiC_V?gjeZLFXJ8Td zJ)o<2S#eGAhT zC!PAUl|s!qk;&pbOG}Im-bl7Qsd^p?WY6%9nlx9GuhD9qGcuGAfy~TerG7k@bILiy z^n@|PF{A&yy`(zsTHjDzMn^@c{8tR03)rB{WCb^0XTH2^ z7$eUZ{jq7MJYQds)@dE1ggp5#x51F|M+n7m;$MTFMj)FFLuI!hESx$jLeRw2`GX&pVfG%sKF7ebbZYeLgU5 zK28&rWm%Ng31ipJrTRr_eXQe0q?$3y-ukl2&^EYv+I~JD_ieQ8Ogzti&vxhkf*G-+ z`mI~a6s48zXo%FX55Aty*BoRF*R+n{lWE#^58xU@vF*K|S81iq7^CyNC4RxPT&B3h z0y=EokBGEU@hk8156Y1)kr7nxyJJ9>sQ{N!ZXv)eD|aElT~Y3*!0V{AcT2fDzUOa)NI)OE1vphLjr#aL3S|Lj5MHZ!d@TBI=9Eg<;24?h4SicO7k(4dp0z3vIp= z-a=(w$UQ_`_KOUn`nreFW*H7}Bg#?M&)*o@3Dnc5etgqtv&;g0dnx4>fWGdcaxVqs zE+|KvzT7I>T%W4}x$7#o5#Vksw*_P@TWJT`o4dS-ff#=M$_Co84JLeZ%XAB~U3M~}wiM~{xi8FwkTTcp`Xrf&mT?xBY9LzQh*mL1eE5*y_HWjK46Z==o92Z6A;<9Bt33}@%D zZKOmVH=O;J_}o*5K7}R45p=OrR@nx*DzSm4SuTmX2c+Eu ziER{xOxp$DoW(Okf`=5aw0Kfn=<6=oMO;fzeJyurF}nUa&}%36C>xr zdE3|-XWLXicAOma{dwEAjXmPVIynk)ZcX@F*_92GyJmeKf{moHV||BBJ0|PR7;3mR{Ie zM~*IQzIsiYToiHBChjfRde7}f9=gGCZsfREdf=-EapC=d{baelF7;BFCqir-g70^?$}}e|CgPhFUr|<>2jGvR_-~Q1D=HsV0+8h z^)UDD{KQlxb|Ddr`^B2i{3TW zKkxX;LB^hUziszz$hT*5N&mi2#>#!m9747e5BCA%3&u{FK#pCGQJ1lDUR+Q1sY^M( x?XM?eqb$Z52h1H|e-nFqgqmGTk$eTHuevEnN`r5l+VlnJ-Y4X1W`8RSA0>=OV diff --git a/bgfx/shaders/dx9/fs_gui.bin b/bgfx/shaders/dx9/fs_gui.bin index 405e3c1f4d93433eec1f867a4f4be0d3c77c10dc..b64c72268cc6ea7c9c5e6afecb63bfd14dcf442a 100644 GIT binary patch delta 80 zcmcc1@|0zQ7^e>t1M~m?|Nh5Jl+RUUVPXJ+|NjM`v<#50U}Rv>fYKHd*WTqcG&8m^ UVfgo7X>vbf6DycES%}FS0M_Id(EtDd delta 72 zcmaFLa+hU-7^e#p1M~m?|Nci$l+RWC!^i*x|NnC^L1+;mT>%tRfYJsN*WP6{VEFf6 Paq?uwCPstFQcT_eT5T2f diff --git a/bgfx/shaders/dx9/fs_ntsc_decode.bin b/bgfx/shaders/dx9/fs_ntsc_decode.bin index c5731a1312b383203e716c4d93c80057ab3fde09..1ebb95262809be01d25cf24c2e42b8dd38065e80 100644 GIT binary patch delta 1521 zcmXZbEo@U!7{>9_!Lls5SvuIpfQD2|Gyze<4QZB&iHZqC#l%EKMMVW-Atk9;aw{s9 zP@o9~CQ2wUpg@5_D+-M7D<&qYNJRx=VxnSV0@18IclUqI?|q+haz1i$Ym4>8=6GN- z95N?HqodJ{dsBg%&dH$BHyVY|#%q|tb*x|mUF_o_nrVMsOWq0?Gmi^s`#NSxMOhP) zvLw@ZUEWq-ps&dL>bK+r*_IEbD>r2q`#6wyln>=yX`S-thcI%iV~nk$t_jQXqg<7* zWR^ZJpQzuERawCrHn4-Pe5`r9vL^dDkWbZ{)4ntEnWG@0;vP)y#o}mL|(-v zy4b@3ni>B>LHSPWgk@XW((#IAf)&hS9!prmHtt{__wf+TtiO?kA&g4z!b`KpF)viC zD0m|?vMKXe!cA=8Hg<6j|DiSKuM@^g7{df6=k)&GhG_-f+vntSS(LA3MZTAH+{PX3 z;{eSWfBpeKa^jjb>5h-GKgV}%5Tb-Fo|jTUHKXouDf19LMp8UQ;xrwo2=%jbU&gk%6HDX&5>5D zXU*x+=y-JN-h}VA^Y5I|Ga3aaJtKGnS8)vsxPwjX;Smnenlfh7XUrtdV#L!iF%{dI zkdOtrf;Z(I^;!CYysy42AIO?~D4Vh*JJ`d%ysLa5x1@F6n;*o`iHs@l+FLM)Vd)+?Hf>o_7=9~ zCv6~%aZKPUrg7s$-G7mwicRd|fpq`-f&3z^E5>}4ezY+xzbTJl0$1dB8XS|!9KnG7g3&;rX&~xmU^_S1IM@YX3VsCw#m(S6 ziW`AoAP@}(g28x!NO1gp{@!!t_df5(-ENwhWjfEclaho|YxUlJyYvD}@F+E+6Z%Ob zYTEIhLkqM7uMH8Gp27z5IjqAgW}n``Hu@ttFvOE_T*#Ep;XM|Jas@D5gJmDV^9;Dh0b3{gB{@s)niFZx4Q)Y^{s({z^>sY@&Lg8Hz7 z?>xaSe1Sa=#RP>9=dcAAP%lRG7wUs#5(m(MI`1(b!6vc`^zH^67 ze8yHpF{HS{30~tA-QrCCp*!#c4lsu((UOtV(9GDvgyG+Rr_GK`jEt;c?qp}?9srf$8SDT6 delta 107 zcmcc4ex7}T2WJa21M~m?|Nd7`3@mi~!^8jt|NnC^Lue5oUBk%0pa7)}fOIvG?*OE0 mfph?nt^?8uP&#KbGovLVs{zBm|BjnonHU)v4JLat_W%GG=@{_< diff --git a/bgfx/shaders/dx9/fs_post.bin b/bgfx/shaders/dx9/fs_post.bin index 8bb9bd011e5046beb0679aae3fe3071528533a3b..6f08bba57a4454330d81a8a0a59ce1154152a59e 100644 GIT binary patch delta 650 zcmXZWKS%;$7{~GV@Pv-EZfIz5id%vPBMFCwhK7cQh5|>22A810p&_^kherD|S_v6x zNf}xRQQ05L%pquTXbJ~Mp(QB1zL(D}pXc{`Uf%b1tOKi1(~O9zJdV?GzP8@AMLXK7 z_#9_hOo~~tBG$!**u-m1skW$mO5Ko6F(8iME&YTzD=u`k)shqmtZ*=icbFFQVg-l! z)i<#zwlT|j-QU#|1DK-^;vr7q5k|xq9&5HzafUpL1fJkFx({WAMOxR$85{O0uIs?IAFc=I51I3MCAR2Hp7z}L3nFtn@U{J>f&Kpx4 zUf8_hWnQqbX(V7HI%jZ`ar~e0obr30=l%A5XD6~1Db*~0JY;$tr{jFDzgu&5qSx>_ z&b-XXoUF)4S(gpGwv1`XU%Vmv0$sy0g17V|a#GH8wau)GG*&s7!8_cL1zEvCe)UB* zWDEB=-4i4C-g}y;DVcNh9xbscuL;GGrYoctm6eXv4UTCkEY+4OAO%y4#*h3 zk|&fC_(V?0MVZ0rXBJro*McnJ3;7Yt1M~m?|Nh5Jl+RUUVPXJ+|NjM`v<#50U}Rv>fYKHd*WTqcG&8m^ UVfgo7X>vbf6DycES%}FS0M_Id(EtDd delta 72 zcmaFLa+hU-7^e#p1M~m?|Nci$l+RWC!^i*x|NnC^L1+;mT>%tRfYJsN*WP6{VEFf6 Paq?uwCPstFQcT_eT5T2f diff --git a/bgfx/shaders/dx9/vs_blit.bin b/bgfx/shaders/dx9/vs_blit.bin index 4e60f251806afe75910aad520fd609dcc4a6696e..63d533410923a2716b896c191fc37dd20c90096b 100644 GIT binary patch delta 129 zcmeyy_K$6XG-m=c1M|QC|Ni$(RLKoI!NdRr|Nmcs(hs2Y8z}t)O0zICFw`(IFbF_t s1t@I-r0amp*D-Al(iW4}j7!P&x-n*Fb15h6zxCIZ%29knR9#+ykZ0Ka@9W&{8MxjQ)k delta 245 zcmZqY`_DV!1g8lb1M|QC|Nifqc(Jg44hsVi{QtiNN*{pIXQ1>ADE$OVe}K||pfm?7 z14An#1A_>ZR)NwMK)M|$?g6DkpmYk9E`iWq3>{E`DNuR=knR9#+ybSKKznlpx(f%)J6fB$trx8>7MG=S;H!42mLX diff --git a/bgfx/shaders/dx9/vs_distortion.bin b/bgfx/shaders/dx9/vs_distortion.bin index 02062b46eebb24d5a59b24c7b74ecd41e96e9556..72faf4cd3df3bf76184c6aa930f2ec685ab0babe 100644 GIT binary patch delta 129 zcmeyx*2F$Rnlpu&f%)J6fB$znlpx(f%)J6fB$trx8>7MG=S;H!42mLX diff --git a/bgfx/shaders/dx9/vs_gui.bin b/bgfx/shaders/dx9/vs_gui.bin index 3a63611639e6739bab55dde501841e2a7c15cc1e..c1c19c4b95e7f88772ac0a31d0007f9a0c35bf63 100644 GIT binary patch delta 129 zcmeyy_K$6XG-m=c1M|QC|Ni$(RLKoI!NdRr|Nmcs(hs2Y8z}t)O0zICFw`(IFbF_t s1t@I-r0amyw s0i|t#bRAIK2T0cf>4=T5av3=d&5SKf82tNn8>7MG*G#hk9}pt3 diff --git a/bgfx/shaders/dx9/vs_ntsc_encode.bin b/bgfx/shaders/dx9/vs_ntsc_encode.bin index b4b998256509ad024585a51036257665ea12f0cc..1db3699e5419e24f72e3d9b88baa34021fe3ad32 100644 GIT binary patch delta 129 zcmeyz*2X?Tnlpo$f%)J6fB*X?s+0y^U}6A*|Nrkm=@(G?3zTMHhRE{(=^91`1_>yw s0i|t#bRAIK2T0cf>4=T5av3=d&5SKf82tNn8>7MG*G#hk9}pt3 diff --git a/bgfx/shaders/dx9/vs_phosphor.bin b/bgfx/shaders/dx9/vs_phosphor.bin index edbe4e5e3160528bc91c2be422b658c968e4724a..441a155b3db2bd17dc0253cbe2645e6ccda20927 100644 GIT binary patch delta 129 zcmeyx*2F$Rnlpu&f%)J6fB$znlpx(f%)J6fB$trx8>7MG=S;H!42mLX diff --git a/bgfx/shaders/dx9/vs_post.bin b/bgfx/shaders/dx9/vs_post.bin index 9a0e8092fbb0948f4908a9c430f93679dd6cc7e5..43eec77a6f459c762fb22defd7fa5b2b7e836533 100644 GIT binary patch delta 176 zcmeC?oXk1Fh0}+Hf%)J6fB)xA^v$i$U}gY<|Nl#%bOV&`fzmUe^b#n&0Z7*~GBE6c z(r2Lb10dZ96#oFF|3GOT7Kpe4kZuCX8vyABAZ-Jra}zT+TQasYavGW$TbMBX`)@h< ODAPSwFmLh_=H~z^sV$5E delta 168 zcmbQt+08k@h0}$Ff%)J6fB)xB^v$hLU}gY<|NnEKbOn@dfzlJ8^c*O?0!Y_0GB9j` z(np~54IteJ6n_Dwzd&gg7Kpe6kZuCXYXIp6AZ-Gqa}zT+TQasYvKlb_`)@J%B-1@c KgUM@{p927<&nsF0 diff --git a/bgfx/shaders/dx9/vs_screen.bin b/bgfx/shaders/dx9/vs_screen.bin index a1cd3901b69a0a3be5ce5470dbad6f06f92e6706..e3bd9417ad808afaafe4d4edd072fc7de964853b 100644 GIT binary patch delta 129 zcmeyy_K$6XG-m=c1M|QC|Ni$(RLKoI!NdRr|Nmcs(hs2Y8z}t)O0zICFw`(IFbF_t s1t@I-r0am$C$_~Oi}RD+2UN{sg=T8DBXL}u3^IGa@%|1tpp Dw=fp4 delta 69 zcmbQuv5-T;E!cyFvH8{jTdU!CfW*Ndw;bk}LxYwmj{r&3aFNOJ_>?cr zFXRhSRlTsABJFVi!!UcPdi82;zkC13*JpqK`%l03Z6UIU=pf4KtFvD3toL0ZJ{HkR ztTww$uKZYtG|8iUlk7!a9b&oqQy~s%e2CIm9OGr4q~`jvNRLror0U=gc)i%K#4<_u zu{s7avt5$pAH-dfuJr2ng*a~R_i>(Y_V-dAET!>!3mQPZT>2&xd0YZi`1$MSUhf#C z6`W@uHuoP648U-9#1qQ|M31if#eTC+(p|kjVaDc;UBf`fzQaey8JC@oLx!u4eVe(C zBMy%pXKGeE4%8gi2eN2)*v2XUoe|;J{bRCOv0b#;Gtcio_8HqI4@CHc{T5~MZL&>L z5njWF8!5b&YPhwoJuD3~)v(+Yps6w~@x`X)1#RN~BuCg2E6~Yi1 zl9V~5B07NPy90!vnBf)uH!5s_dd_$- zB4ARlv{YT1TLR`Nz*7pzB=fh=E|}S=z*xOg`CXD1D0#C6i8a0(pkU=CvM?ggq1 zgAuCGs6fN1B~sNBi?><)MIzeRxL~B48C^5bm3>TequclCgs;@08IG3_t}-94>T3&j zsjZ;vZMrc=rYK#>)>2TQ#t+VN`|1UKEWZVMpzIbl|0I&fp(gY2hc40 z&I8;4Cm5%Bo-{){x@2#0pSbz_S(2z}2&#J1XRvEFO7@F#xxHHHRUHX75D6YC>ez!| z8Q^vLMRE3o_*%mF3fEQeTp>XiPeaVnx(d}v+7+@PnXklzBapM)LOp^ImSj+vtdg90 zEp8boI-RN`V`*rh`4}aVSc4W|w&9#lG3ltN5b2f>U$KJzX!=porvOrIq;P7 zI>0-`N|3LT3jX;rsg~&qszsxAEHyx5gqq1t_}3{%j@DPHGg@UloIn{cHN@QjnlTs6 zgaaBbVIHc#D@CeF;&2RC8mgSi--?MksI7X69@cfu-9WGormBIdd=`^ZrKoL0ds}^g zWOgD|NpIeCzUvGe({YD^7I)G(@c-ONgMiJ@yoT5yHl_ z=)$x(#q_c}ZA?m4hdUjoT%1;z*ZFcLeTnt2rIm$tFAJ%e+0PMR0LKXE4juP7HL(`K zoa(a5DIS7DbW3PGAS91zJK{Bs?J>>@@@VE-3{+d75b-P~R~h;L07o4I5AUpd4TfTK@uoD6I9^jf_(z zr-uqiaUal-Y;qD|Z{Cm&`A-Y8Y&x;VGX*?OUn^0mQ|Y>nmK7bXK|1d=Zol+6RxXe1 zHqy}I`lIr}iSBdL6=%QuI6eIIWqc2j$D907z>Z*^vWRqrQW4d1^t0}=4q78xpPAG$ zZK;lX>~hGl91=Jc>6mOLConQwJFiT*M(qMaAS*SJxy(m0O~xNm?9s$e6@juzpN7yi zf6CA{(>b3b^?G;F5U4~$Cd&s3Wss~m=8EzhtRg!=cNgDd`?)f9o-0bvkg5*MHAAdE zMD~D|Fv?CJT`#{HK#Q)B3NNj+z8c0*?}!{rFPU<`74OpMp8j|%^ B*3|$2 delta 880 zcmaJq8o-nx4G+G*|i&#(DY z#*;8w-|2L=hLy_jUQd68hF^lBii8h0yAcevX}F?Y`1nG*lk=kOUjOFCM%3wtjJ1jw zj|K1w-tDY&Qg>|b*RcH3RuK;Kg#NEim5V}*k5u(6{K%gr|Lll?|7w_aZHH2PARtaq zf(M23+7Ub}oiiDiBl_L#-S$q%ID9Ksbw5NmuOmNPkd&0i7*vAW*A6P+iI`iQ^nm1V^+th%U zXwhVzn4R`|@EO@sz%R6_vj*HS-^l0KZ0T%Ss`7&@L?GvOH@7fJPC+f+9@Owy03J4Cok2V3>J4JmJqf?QZ|85(rpi7H{fn*0SQ}_1&%lmO5tg#%+)Q8a5)no zs)NK1w$~zZlG`4%r>gcCKYOr8@nX7yX6&=Fc&#@Gh4lARvzJ-AHO}PHXl83oD!3*r r;^oAhQq>5fV9jX`T(l_cqnX?&_}IDy*UgE<8P4JLnX)dPV{7?0Pe}XX diff --git a/bgfx/shaders/glsl/fs_defocus.bin b/bgfx/shaders/glsl/fs_defocus.bin index d56afae0f77516da498fcede7319b00bef5b17a7..0adf5a7fd67b4c28fc665745d9dc1f646a05edb3 100644 GIT binary patch delta 63 zcmeyz{)1i2E!cyFvH8$C$_~Oi}RD+2UN{qWFT03(hL^_KQoXu>EKbQd8 C^11 zc)8vd>g2~moM&ZHuCrZSp7yCa{pk?z^K_r&X?#oe<1e5ZW%AK ze3$BLkXdZAto$qfkmXBr`u!n3uJ3kfS*~|?N*<2#bhUv7s8>hd6mgkWfQo;cpF5pn zlAmy20EQGtqAfBA9bR`2yY(u|w?r8WYiH}++S{UdcDJa${VlTfLyO}2qeb-m(xTS> zX_0C_)ubZX?l);Je;4eu>+UgIFU2-l??e!GAG$*M=C`CsZ?jF7$I-PqlR}-rk+{K^S4tj5x+&5x z5^>H0mx6T*t7{5f#mBs~y2FrfgjyY$;l+gDYQw>5*yiGmv4Yvp>84zmkaR8ENFjk< zkS}dYoXJvGf1Nu{iVv#O-?)TEL0t;95pZ$zOt?b2KxVl-_uxPfY|w&0nPEa)iMK>& z-+cO{oM_xIIMu{ZfNBYq_(g}@Jw2IIlL;;m1s&q%OmDnnrB077z^~VX;9|LE0(@aB3{GQUqs0(L2{gRQ~iWsE{&4In&|< zz;g&^6Dl!o80=_ANT@wQF=)n4xl9A(F2^Z=`qZY>=3VH>xhKI$xeToV32iAzQlNJA zvSMyh@Ap}G%PlJ6j_Q8Hg=bu46RSB_5uCR=M;_Qqte}8`KUb?FE#rv$vJl=8l+eAP zPtGFO=pL(EPGh7)#|@{q?LE(nW2tPd5S(()iKUKe68QA9n)ZZuVNL!}S2rLGlR^@f| z1{$7%uF?s`({wAJKrlTtrv{qpSu|Rec4Q-~&vgKltCyErdXv-pu4`<>*FD?4;PFU* zY4CWMyIz?+<*pe=)pOV9gEw`8r&W0dG=j%#fQx4S6q&cFa@5tlaTK}pDB^+SZuqdBmH_nm7N_Jvj3Iv4pKBPX>WZ||Rc;iJzJY3G~jgs5FkuP1N zeT-111Y7+)_zfq`GWIkZj9p?jp}im)ObnwC$%mq5W}C5^p`>ZZGCo|T_WttOi(S@A zmPVo3a#wk>DD{3p&w?U&dcoi+Cr5*5Je*$jfMz0QK_Q*wx{#|epH;znpc2p7WmrcOvJ)Z7`@(v&g+hc;j68xaCU#r`}}er??KPrcyDWa5tlm(sl~LMZ?)uWv(Ny#H56T3&m#mxX;5H<44VdXbkr0F5f{YGcgog(DZi_?L>G$YQ7}C{ zAIx0J1R{T+pRMiEh;VZ34FXxQl5G~e%QbeXEwFT(lWcRKx4F}k+`1%Vgz!n!lz>H0 z3t@pFyzIB2r6I+FeQkS4ZEjmu98_QV;ifrTJkR)dT{1i3CPMz)j+@SLmG{ogln?E$--O>Kmbs(!d4bVok## z@H}__#?pHi7B}stnP6n5VC3(mg=G$1J~|zQad7ayP+#L-!7NtbTdr7*DmV^xF!b@N zk_!lnwbyAiA(zvT+4YFdrI}H7Loak`M`*zQ*(``@M_wS~VpQ&z(J1u9etW{@l{uCq s%nHVs8&IjDnDDT4558(Un^)kQQr}>VPp2M7gy4AVIJI!bAhXr^4QlWZF8}}l diff --git a/bgfx/shaders/metal/fs_defocus.bin b/bgfx/shaders/metal/fs_defocus.bin index 76825e2201031fd6e446b614567aee2436772122..52900807388077ff1e5760f6805d63516e4b5316 100644 GIT binary patch delta 48 wcmew^_*szKE!cyFvH8MQgKIy3vjS&E9&)CWVmJ3Bw${4U?#{QBb$fBy6L$;n?oot$i&Re3MUtjL>9HqS+o zt89IF+NgRvS7Nu$)H}7ldB_%d{ad-&D)DqG#ByC_N{Yu+<-2)R)r-;P>6iXX@3+d{ zddSwxvAAESZ|m&-x>{HD(ObWlt7TOet+27!rp>2plkWDHRsr1mxXl*nVpTNWZe6KN zt*SCr`%UhhZ0dZI)p`1u&lSoywjitdwtmdiw)QX7)wW!u^Qta$pS&rmN1_8@LSa@3K`Xf*vQNg<7X8@!>QFwa`_78**;6^lDE?$#o--rf13#8_NXa}Onip@H& ziBnT-QcGp_i7GsO0;ZnI#wLfQWfI+KDqUisU53TZXwKT}3Rw#SjQJor(TADR_tw-H6A)^s#Mba$!lwFsD9 zeR#-ohCEkG;MMAM1;&oTkn+#zIzxeRG(zTvbPBu=wbw$vh(! z&_Cv2FB@WLJ1#oo5#o*EIb^Bc*5WqT4^tqf3S09(2!8rEh;5~9ybsA zYL<@8q4h#M3Nh?7zE%!t+E%3lRi_ioV=7PN1I{fp=vW8(xKPQoVk9%i?!_!2z}_?C z+(e@Xr3bbgE!h%wB_2932*`zDV4N6sNm`zg)gdWvHkG=jM2V@i^ED{ngE{)0V%F7k zzp;a}-?sh1fXNB#oNrGLf9wd)^4DsA4|{O_x3Xub808JVHfE?Fc1<$#+ktP~JZW!JgG5N& z29z7ZS0lv_0C|?~ZX5(5ugt^)4Zq#q8_Zi46JX%vX#QU3I?#@KFxPI1?nm!;wVRUK zZH6;7`nB7ARXZctAl^xmzRCpE!wY!By?fJJw>heZ9S@6+muYhNZZA{s<2YU%!|~!M zj^FHMoL#J!jbP8Ru9s!knR0YQJ2=4L{9j&X+F8LzyzKevWnZ!SZ%&>OISC`@T972~ zh!Q(uYhe430Z4FEf<}d*?=xt}cE^*7yYYfdfakF;%dH%E?V;0GWqjCILEB-Q`dnGR zi^AP*PqVsV%e3<%DB2E>dZF7S745+5l`>&NqYnpl8_R#pZFen^Q$ylhV;M+` zJDCsD(sY8yaWt_Pg~;xjmYz(9aTZDfjtrzGkYY>u+9V;VkXxx(D(wRRp09J|2F4~h zJ{{?z5y&Kp$D{L$0SG-mpTy%ajIN+UER*r%9P|J@ab09Pp~pWBF!mbQ-c+9ifIW?8 zawcI69?tlXB9R#~&~rt1@Bp=+n@!+NM^f(zB(Q6PEEjAVxj zYcrN3ry^@wJIr#gY(8^Cf2`@LF8tji@!=B?E{+{S(JuDr1N+eO@J;v&AfXq4y>sraR_Eb2s6|FQMWGu7A}Ah~sUAO~J-x{zk(b%BZM zVs8d&_x5s~tlj!I!;H3Sn_MP?bU-4q0li)*nJ7suHDrtUS6$6 yyo!Ucuf2GZ#MF|G#P6soEr?K{P-_atD&ikO!AFcU64g0;jVlc;d@MXYJ^2?b&Tu3E delta 1080 zcmaJ<&ubGw7;S>3O$kavYU;eJ&Nd|qGw&wHi1I6iOJR`Lh+z? zDIXL(iAOJjh<}0?4}wRJ-UK}fUOYLo$xb)Yn#*Rsd2inLzVCg|zOJQi-oJGz_UzZU zxw%j2lhoV!-9fv3aPmceUx+*!EpoZ6-0EDL^T)0#2f=%~bIw?sR)C zpOLa@FiXe5M-}YjW)e;lm5mGV=fUm7Iuw$r+yA8qVkm&8>e%=Ck6Qzm)`YS=;7xd) zTZSK(l~@&G3%QIHy|#Gs@B$U#uCn};+TtqkBKh?wy3WzN-ImwKgb)tp<9Rgj$zIRL zL<;JXTT@j5D$9bU;tHM+CEnuquIG2%LpVhU{wRt~EmhUAX_z{uh8g$_U$=P&l3K?b zkppa@D{)$f2dIFk6K&gp=ZGO{b0x{O;UhBQ)P~=vj%XtaZ$LBsa*;Y}&^~;gFT$Or zwW7vNhiy1qIsD&%N=A#BkXNozZ~p+3i5uh49R}HQ_x8P^G18|lXY24TyINu_BF|XF zBBSs(==W#wylA*Njaz6v*uKMlLhqXKwW&tI74Vn%KU2wtmhz8yl-esKW8&5w0MN za#Fu{^iNb+725fA(9>BYLpYUwlh?LcklyK5muniform("u_source_dims"); if (source_dims != nullptr) @@ -121,7 +121,7 @@ void bgfx_chain_entry::setup_sourcesize_uniform(render_primitive* prim) } } -void bgfx_chain_entry::setup_rotationtype_uniform(uint32_t rotation_type) +void bgfx_chain_entry::setup_rotationtype_uniform(uint32_t rotation_type) const { bgfx_uniform* rotation_type_uniform = m_effect->uniform("u_rotation_type"); if (rotation_type_uniform != nullptr) @@ -131,14 +131,24 @@ void bgfx_chain_entry::setup_rotationtype_uniform(uint32_t rotation_type) } } -void bgfx_chain_entry::setup_swapxy_uniform(bool swap_xy) +void bgfx_chain_entry::setup_swapxy_uniform(bool swap_xy) const { - bgfx_uniform* swap_xy_uniform = m_effect->uniform("u_swap_xy"); - if (swap_xy_uniform != nullptr) - { - float values[1] = { swap_xy ? 1.0f : 0.0f }; - swap_xy_uniform->set(values, sizeof(float)); - } + bgfx_uniform* swap_xy_uniform = m_effect->uniform("u_swap_xy"); + if (swap_xy_uniform != nullptr) + { + float values[1] = { swap_xy ? 1.0f : 0.0f }; + swap_xy_uniform->set(values, sizeof(float)); + } +} + +void bgfx_chain_entry::setup_quaddims_uniform(render_primitive* prim) const +{ + bgfx_uniform* quad_dims_uniform = m_effect->uniform("u_quad_dims"); + if (quad_dims_uniform != nullptr) + { + float values[2] = { (prim->bounds.x1 - prim->bounds.x0) + 0.5f, (prim->bounds.y1 - prim->bounds.y0) + 0.5f}; + quad_dims_uniform->set(values, sizeof(float) * 2); + } } void bgfx_chain_entry::setup_auto_uniforms(render_primitive* prim, texture_manager& textures, uint16_t screen_width, uint16_t screen_height, uint32_t rotation_type, bool swap_xy, int32_t screen) @@ -147,9 +157,10 @@ void bgfx_chain_entry::setup_auto_uniforms(render_primitive* prim, texture_manag setup_sourcesize_uniform(prim); setup_rotationtype_uniform(rotation_type); setup_swapxy_uniform(swap_xy); + setup_quaddims_uniform(prim); } -bool bgfx_chain_entry::setup_view(int view, uint16_t screen_width, uint16_t screen_height, int32_t screen) +bool bgfx_chain_entry::setup_view(int view, uint16_t screen_width, uint16_t screen_height, int32_t screen) const { bgfx::FrameBufferHandle handle = BGFX_INVALID_HANDLE; uint16_t width = screen_width; @@ -174,11 +185,11 @@ bool bgfx_chain_entry::setup_view(int view, uint16_t screen_width, uint16_t scre bx::mtxOrtho(projMat, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 100.0f); bgfx::setViewTransform(view, nullptr, projMat); - bgfx::setViewClear(view, BGFX_CLEAR_COLOR | BGFX_CLEAR_DEPTH, 0x000000ff, 1.0f, 0); + bgfx::setViewClear(view, BGFX_CLEAR_COLOR | BGFX_CLEAR_DEPTH, 0x00ff00ff, 1.0f, 0); return true; } -void bgfx_chain_entry::put_screen_buffer(render_primitive* prim, bgfx::TransientVertexBuffer* buffer) +void bgfx_chain_entry::put_screen_buffer(render_primitive* prim, bgfx::TransientVertexBuffer* buffer) const { if (bgfx::checkAvailTransientVertexBuffer(6, ScreenVertex::ms_decl)) { diff --git a/src/osd/modules/render/bgfx/chainentry.h b/src/osd/modules/render/bgfx/chainentry.h index 00662dcf0cd..a80fc8656c0 100644 --- a/src/osd/modules/render/bgfx/chainentry.h +++ b/src/osd/modules/render/bgfx/chainentry.h @@ -45,12 +45,13 @@ public: private: void setup_auto_uniforms(render_primitive* prim, texture_manager& textures, uint16_t screen_width, uint16_t screen_height, uint32_t rotation_type, bool swap_xy, int32_t screen); void setup_screensize_uniforms(texture_manager& textures, uint16_t screen_width, uint16_t screen_height, int32_t screen); - void setup_sourcesize_uniform(render_primitive* prim); - void setup_rotationtype_uniform(uint32_t rotation_type); - void setup_swapxy_uniform(bool swap_xy); + void setup_sourcesize_uniform(render_primitive* prim) const; + void setup_rotationtype_uniform(uint32_t rotation_type) const; + void setup_swapxy_uniform(bool swap_xy) const; + void setup_quaddims_uniform(render_primitive* prim) const; - bool setup_view(int view, uint16_t screen_width, uint16_t screen_height, int32_t screen); - void put_screen_buffer(render_primitive* prim, bgfx::TransientVertexBuffer* buffer); + bool setup_view(int view, uint16_t screen_width, uint16_t screen_height, int32_t screen) const; + void put_screen_buffer(render_primitive* prim, bgfx::TransientVertexBuffer* buffer) const; std::string m_name; bgfx_effect* m_effect; diff --git a/src/osd/modules/render/bgfx/chainentryreader.cpp b/src/osd/modules/render/bgfx/chainentryreader.cpp index e98b704a853..07088181d2d 100644 --- a/src/osd/modules/render/bgfx/chainentryreader.cpp +++ b/src/osd/modules/render/bgfx/chainentryreader.cpp @@ -36,6 +36,11 @@ bgfx_chain_entry* chain_entry_reader::read_from_value(const Value& value, std::s } bgfx_effect* effect = effects.effect(value["effect"].GetString()); + if (effect == nullptr) + { + return nullptr; + } + std::string name = value["name"].GetString(); std::vector inputs; diff --git a/src/osd/modules/render/bgfx/effectmanager.cpp b/src/osd/modules/render/bgfx/effectmanager.cpp index 7522a88dc8c..a34b5c52d82 100644 --- a/src/osd/modules/render/bgfx/effectmanager.cpp +++ b/src/osd/modules/render/bgfx/effectmanager.cpp @@ -12,6 +12,7 @@ #include "emu.h" #include +#include #include #include @@ -52,7 +53,11 @@ bgfx_effect* effect_manager::load_effect(std::string name) std::string path = std::string(m_options.bgfx_path()) + "/effects/" + name; bx::CrtFileReader reader; - bx::open(&reader, path.c_str()); + if (!bx::open(&reader, path.c_str())) + { + printf("Unable to open effect file %s\n", path.c_str()); + return nullptr; + } int32_t size (bx::getSize(&reader)); @@ -63,9 +68,22 @@ bgfx_effect* effect_manager::load_effect(std::string name) Document document; document.Parse<0>(data); - bgfx_effect* effect = effect_reader::read_from_value(document, "Effect '" + name + "': ", m_shaders); - m_effects[name] = effect; + if (document.HasParseError()) { + std::string error(GetParseError_En(document.GetParseError())); + printf("Unable to parse effect %s. Errors returned:\n", path.c_str()); + printf("%s\n", error.c_str()); + return nullptr; + } + + bgfx_effect* effect = effect_reader::read_from_value(document, "Effect '" + name + "': ", m_shaders); + + if (effect == nullptr) { + printf("Unable to load effect %s\n", path.c_str()); + return nullptr; + } + + m_effects[name] = effect; return effect; } diff --git a/src/osd/modules/render/bgfx/effectreader.cpp b/src/osd/modules/render/bgfx/effectreader.cpp index 80a8b73abed..b787dec12a3 100644 --- a/src/osd/modules/render/bgfx/effectreader.cpp +++ b/src/osd/modules/render/bgfx/effectreader.cpp @@ -42,7 +42,12 @@ bgfx_effect* effect_reader::read_from_value(const Value& value, std::string pref const Value& uniform_array = value["uniforms"]; for (UINT32 i = 0; i < uniform_array.Size(); i++) { - uniforms.push_back(uniform_reader::read_from_value(uniform_array[i], prefix + "uniforms[" + std::to_string(i) + "]: ")); + bgfx_uniform* uniform = uniform_reader::read_from_value(uniform_array[i], prefix + "uniforms[" + std::to_string(i) + "]: "); + if (uniform == nullptr) + { + return nullptr; + } + uniforms.push_back(uniform); } std::string vertex_name(value["vertex"].GetString()); diff --git a/src/osd/modules/render/bgfx/fs_defocus.sc b/src/osd/modules/render/bgfx/fs_defocus.sc index 03c442e4780..8c3ee7a4e6c 100644 --- a/src/osd/modules/render/bgfx/fs_defocus.sc +++ b/src/osd/modules/render/bgfx/fs_defocus.sc @@ -9,7 +9,7 @@ $input v_color0, v_texcoord0 #include "../../../../../3rdparty/bgfx/examples/common/common.sh" // Autos -uniform vec4 u_screen_dims; +uniform vec4 u_tex_size0; // User-supplied uniform vec4 u_defocus; @@ -32,7 +32,7 @@ void main() const vec2 Coord7Offset = vec2( 0.50, -0.75); const vec2 Coord8Offset = vec2( 1.00, -0.25); - vec2 DefocusTexelDims = u_defocus.xy / u_screen_dims.xy; + vec2 DefocusTexelDims = u_defocus.xy / u_tex_size0.xy; vec4 d0 = texture2D(s_tex, v_texcoord0); vec4 d1 = texture2D(s_tex, v_texcoord0 + Coord1Offset * DefocusTexelDims); @@ -46,5 +46,5 @@ void main() vec4 blurred = (d0 + d1 + d2 + d3 + d4 + d5 + d6 + d7 + d8) / 9.0; - gl_FragColor = vec4(blurred.xyz, 1.0) * v_color0; + gl_FragColor = vec4(blurred.rgb, 1.0) * v_color0; } diff --git a/src/osd/modules/render/bgfx/fs_distortion.sc b/src/osd/modules/render/bgfx/fs_distortion.sc index a80286cfb1a..b3678abc669 100644 --- a/src/osd/modules/render/bgfx/fs_distortion.sc +++ b/src/osd/modules/render/bgfx/fs_distortion.sc @@ -9,10 +9,13 @@ $input v_color0, v_texcoord0 #include "../../../../../3rdparty/bgfx/examples/common/common.sh" // Autos +uniform vec4 u_swap_xy; uniform vec4 u_screen_dims; +uniform vec4 u_quad_dims; uniform vec4 u_rotation_type; // User-supplied +uniform vec4 u_prepare_vector; uniform vec4 u_curvature; uniform vec4 u_round_corner; uniform vec4 u_smooth_border; @@ -46,15 +49,6 @@ float roundBox(vec2 p, vec2 b, float r) return length(max(abs(p) - b + r, 0.0)) - r; } -vec2 GetRatioCorrection() -{ - float ScreenQuadRatio = 1.0; - - return ScreenQuadRatio > 1.0f - ? vec2(1.0, 1.0f / ScreenQuadRatio) - : vec2(ScreenQuadRatio, 1.0); -} - float GetNoiseFactor(float n, float random) { // smaller n become more noisy @@ -77,22 +71,37 @@ float GetVignetteFactor(vec2 coord, float amount) float GetSpotAddend(vec2 coord, float amount) { - vec2 RatioCorrection = GetRatioCorrection(); + vec2 SpotCoord = coord; + + // hack for vector screen + if (u_prepare_vector.x > 0.0) + { + // upper right quadrant + vec2 spotOffset = vec2(-0.25, 0.25); // 0 degrees + if (u_rotation_type.x == 1.0) + spotOffset = vec2(-0.25, -0.25); // 90 degrees + if (u_rotation_type.x == 2.0) + spotOffset = vec2(0.25, -0.25); // 180 degrees + if (u_rotation_type.x == 3.0) + spotOffset = vec2(0.25, 0.25); // 270 degrees + + // normalized screen canvas ratio + vec2 CanvasRatio = ((u_swap_xy.x > 0.0) ? vec2(u_quad_dims.x / u_quad_dims.y, 1.0) : vec2(1.0, u_quad_dims.y / u_quad_dims.x)); + + SpotCoord += spotOffset; + SpotCoord *= CanvasRatio; + } + else + { + // upper right quadrant + vec2 spotOffset = vec2(-0.25, 0.25); - // normalized screen quad ratio - vec2 QuadRatio = vec2(1.0, u_screen_dims.y / u_screen_dims.x); - - // normalized screen quad ratio - // upper right quadrant - vec2 spotOffset = vec2(-0.25, 0.25); // 0 degrees - if (u_rotation_type.x == 1.0) - spotOffset = vec2(-0.25, -0.25); // 90 degrees - if (u_rotation_type.x == 2.0) - spotOffset = vec2(0.25, -0.25); // 180 degrees - if (u_rotation_type.x == 3.0) - spotOffset = vec2(0.25, 0.25); // 270 degrees - - vec2 SpotCoord = (coord + spotOffset * RatioCorrection) / RatioCorrection; + // normalized screen canvas ratio + vec2 CanvasRatio = ((u_swap_xy.x > 0.0) ? vec2(1.0, u_quad_dims.x / u_quad_dims.y) : vec2(1.0, u_quad_dims.y / u_quad_dims.x)); + + SpotCoord += spotOffset; + SpotCoord *= CanvasRatio; + } float SpotBlur = amount; @@ -110,17 +119,17 @@ float GetSpotAddend(vec2 coord, float amount) float GetRoundCornerFactor(vec2 coord, float radiusAmount, float smoothAmount) { - vec2 RatioCorrection = GetRatioCorrection(); - // reduce smooth amount down to radius amount smoothAmount = min(smoothAmount, radiusAmount); - float range = min(u_screen_dims.x, u_screen_dims.y) * 0.5; + vec2 quadDims = (u_prepare_vector.x > 0.0 && u_swap_xy.x > 0.0) ? u_quad_dims.yx : u_quad_dims.xy; + + float range = min(quadDims.x, quadDims.y) * 0.5; float radius = range * max(radiusAmount, 0.0025); float smooth_val = 1.0 / (range * max(smoothAmount, 0.0025)); // compute box - float box = roundBox(u_screen_dims.xy * (coord * 2.0f), u_screen_dims.xy * RatioCorrection, radius); + float box = roundBox(quadDims * (coord * 2.0f), quadDims, radius); // apply smooth box *= smooth_val; @@ -155,20 +164,12 @@ vec2 GetDistortedCoords(vec2 centerCoord, float amount) vec2 GetCoords(vec2 coord, float distortionAmount) { - vec2 RatioCorrection = GetRatioCorrection(); - // center coordinates coord -= 0.5; - // apply ratio difference between screen and quad - coord /= RatioCorrection; - // distort coordinates coord = GetDistortedCoords(coord, distortionAmount); - // revert ratio difference between screen and quad - coord *= RatioCorrection; - // un-center coordinates coord += 0.5; diff --git a/src/osd/modules/render/bgfx/inputpair.cpp b/src/osd/modules/render/bgfx/inputpair.cpp index d04c77e8a92..8603f7caa5e 100644 --- a/src/osd/modules/render/bgfx/inputpair.cpp +++ b/src/osd/modules/render/bgfx/inputpair.cpp @@ -29,10 +29,19 @@ bgfx_input_pair::bgfx_input_pair(int index, std::string sampler, std::string tex void bgfx_input_pair::bind(bgfx_effect *effect, target_manager& targets, texture_manager& textures, const int32_t screen) const { assert(effect->uniform(m_sampler) != nullptr); - std::string texture = m_texture; + std::string name = m_texture; if (targets.target(m_texture + std::to_string(screen)) != nullptr) { - texture = m_texture + std::to_string(screen); + name = m_texture + std::to_string(screen); } - bgfx::setTexture(m_index, effect->uniform(m_sampler)->handle(), textures.handle(texture)); + + bgfx_texture_handle_provider* provider = textures.provider(name); + bgfx_uniform *tex_size = effect->uniform("u_tex_size" + std::to_string(m_index)); + if (tex_size != nullptr) + { + float values[2] = { float(provider->width()), float(provider->height()) }; + tex_size->set(values, sizeof(float) * 2); + } + + bgfx::setTexture(m_index, effect->uniform(m_sampler)->handle(), textures.handle(name)); } diff --git a/src/osd/modules/render/drawbgfx.cpp b/src/osd/modules/render/drawbgfx.cpp index ccfd6cdd642..2dc986b0ecd 100644 --- a/src/osd/modules/render/drawbgfx.cpp +++ b/src/osd/modules/render/drawbgfx.cpp @@ -66,10 +66,11 @@ const char* renderer_bgfx::WINDOW_PREFIX = "Window 0, "; #define GIBBERISH (0) //============================================================ -// TYPES +// STATICS //============================================================ bool renderer_bgfx::s_window_set = false; +uint32_t renderer_bgfx::s_current_view = 0; //============================================================ // renderer_bgfx::create @@ -190,7 +191,7 @@ int renderer_bgfx::create() m_screen_effect[3] = m_effects->effect("screen_add"); m_chains = new chain_manager(options, *m_textures, *m_targets, *m_effects, m_width[window().m_index], m_height[window().m_index]); - m_screen_chain = m_chains->chain(options.bgfx_screen_chain(), window().machine(), window().m_index); + parse_screen_chains(options.bgfx_screen_chains()); m_sliders_dirty = true; uint32_t flags = BGFX_TEXTURE_U_CLAMP | BGFX_TEXTURE_V_CLAMP | BGFX_TEXTURE_MIN_POINT | BGFX_TEXTURE_MAG_POINT | BGFX_TEXTURE_MIP_POINT; @@ -205,6 +206,36 @@ int renderer_bgfx::create() return 0; } +//============================================================ +// parse_screen_chains +//============================================================ + +void renderer_bgfx::parse_screen_chains(std::string chain_str) +{ + std::vector chains; + uint32_t length = chain_str.length(); + uint32_t last_start = 0; + for (uint32_t i = 0; i < length + 1; i++) + { + if (i == length || chain_str[i] == ',') + { + chains.push_back(chain_str.substr(last_start, i - last_start)); + last_start = i + 1; + } + } + + for (uint32_t index = 0; index < chains.size(); index++) + { + bgfx_chain* chain = m_chains->chain(chains[index], window().machine(), index); + if (chain == nullptr) + { + chains.clear(); + return; + } + m_screen_chains.push_back(chain); + } +} + //============================================================ // destructor //============================================================ @@ -350,7 +381,8 @@ void renderer_bgfx::process_screen_quad(int screen, render_primitive* prim) m_targets->update_guest_targets(screen, tex_width, tex_height); - m_screen_chain->process(prim, screen * m_screen_chain->applicable_passes(), screen, *m_textures, window(), get_blend_state(PRIMFLAG_GET_BLENDMODE(prim->flags))); + screen_chain(screen)->process(prim, s_current_view, screen, *m_textures, window(), get_blend_state(PRIMFLAG_GET_BLENDMODE(prim->flags))); + s_current_view += screen_chain(screen)->applicable_passes(); m_textures->add_provider("screen", nullptr); delete texture; @@ -727,23 +759,29 @@ const bgfx::Memory* renderer_bgfx::mame_texture_data_to_bgfx_texture_data(UINT32 int renderer_bgfx::handle_screen_chains() { - if (!m_screen_chain) + if (m_screen_chains.size() == 0) { return 0; } window().m_primlist->acquire_lock(); - // process render_primitive *prim = window().m_primlist->first(); + // Determine how many post-processing passes are needed int screens = 0; - screen_device_iterator iter(window().machine().root_device()); - for (const screen_device *screen = iter.first(); screen != nullptr; screen = iter.next()) { - screens++; + while (prim != nullptr) + { + if (PRIMFLAG_GET_SCREENTEX(prim->flags)) + { + screens++; + } + prim = prim->next(); } m_targets->update_screen_count(screens); + // Process each screen as necessary + prim = window().m_primlist->first(); int seen_screen_quads = 0; while (prim != nullptr) { @@ -757,25 +795,34 @@ int renderer_bgfx::handle_screen_chains() window().m_primlist->release_lock(); - uint32_t total_passes = seen_screen_quads * m_screen_chain->applicable_passes(); - bgfx::setViewFrameBuffer(total_passes, BGFX_INVALID_HANDLE); + bgfx::setViewFrameBuffer(s_current_view, BGFX_INVALID_HANDLE); - return total_passes; + return s_current_view; +} + +bgfx_chain* renderer_bgfx::screen_chain(int32_t screen) +{ + if (screen >= m_screen_chains.size()) + { + return m_screen_chains[m_screen_chains.size() - 1]; + } + else + { + return m_screen_chains[screen]; + } } int renderer_bgfx::draw(int update) { - m_screens.clear(); int window_index = window().m_index; - int post_view_index = handle_screen_chains(); - int view_index = window_index; - int first_view_index = 0; - if (m_screen_chain && post_view_index > 0) + if (window_index == 0) { - view_index += post_view_index; - first_view_index = post_view_index; + s_current_view = 0; } + handle_screen_chains(); + int view_index = s_current_view; + // Set view 0 default viewport. osd_dim wdim = window().get_size(); m_width[window_index] = wdim.width(); @@ -803,7 +850,7 @@ int renderer_bgfx::draw(int update) m_dimensions = osd_dim(m_width[window_index], m_height[window_index]); bgfx::setViewClear(view_index , BGFX_CLEAR_COLOR | BGFX_CLEAR_DEPTH - , 0x000000ff + , 0x00ff00ff , 1.0f , 0 ); @@ -811,12 +858,10 @@ int renderer_bgfx::draw(int update) bgfx::frame(); return 0; } - } - if (view_index != first_view_index) - { - bgfx::setViewFrameBuffer(view_index, m_framebuffer->target()); - } + bgfx::setViewFrameBuffer(view_index, m_framebuffer->target()); + } + bgfx::setViewSeq(view_index, true); bgfx::setViewRect(view_index, 0, 0, m_width[window_index], m_height[window_index]); @@ -885,11 +930,13 @@ int renderer_bgfx::draw(int update) // Advance to next frame. Rendering thread will be kicked to // process submitted rendering primitives. - if (view_index == first_view_index) + if (window_index == 0) { bgfx::frame(); } + s_current_view++; + return 0; } @@ -928,7 +975,7 @@ renderer_bgfx::buffer_status renderer_bgfx::buffer_primitives(int view, bool atl return BUFFER_PRE_FLUSH; } - if (PRIMFLAG_GET_SCREENTEX((*prim)->flags) && m_screen_chain != nullptr) + if (PRIMFLAG_GET_SCREENTEX((*prim)->flags) && m_screen_chains.size() > 0) { render_post_screen_quad(view, *prim, buffer, screen); return BUFFER_SCREEN; @@ -1148,24 +1195,27 @@ void renderer_bgfx::allocate_buffer(render_primitive *prim, UINT32 blend, bgfx:: slider_state* renderer_bgfx::get_slider_list() { - if (!m_screen_chain) + if (m_screen_chains.size() == 0) { return nullptr; } slider_state *listhead = nullptr; slider_state **tailptr = &listhead; - std::vector sliders = m_screen_chain->sliders(); - for (bgfx_slider* slider : sliders) + for (bgfx_chain* chain : m_screen_chains) { - if (*tailptr == nullptr) + std::vector sliders = chain->sliders(); + for (bgfx_slider* slider : sliders) { - *tailptr = slider->core_slider(); - } - else - { - (*tailptr)->next = slider->core_slider(); - tailptr = &(*tailptr)->next; + if (*tailptr == nullptr) + { + *tailptr = slider->core_slider(); + } + else + { + (*tailptr)->next = slider->core_slider(); + tailptr = &(*tailptr)->next; + } } } if (*tailptr != nullptr) diff --git a/src/osd/modules/render/drawbgfx.h b/src/osd/modules/render/drawbgfx.h index a79fcb9cb30..db95d3d2550 100644 --- a/src/osd/modules/render/drawbgfx.h +++ b/src/osd/modules/render/drawbgfx.h @@ -61,6 +61,8 @@ public: private: int handle_screen_chains(); + void parse_screen_chains(std::string chain_str); + bgfx_chain* screen_chain(int32_t screen); void allocate_buffer(render_primitive *prim, UINT32 blend, bgfx::TransientVertexBuffer *buffer); enum buffer_status @@ -92,8 +94,6 @@ private: const bgfx::Memory* mame_texture_data_to_bgfx_texture_data(UINT32 format, int width, int height, int rowpixels, const rgb_t *palette, void *base); UINT32 get_texture_hash(render_primitive *prim); - std::vector m_screens; - bgfx_target* m_framebuffer; bgfx_texture* m_texture_cache; @@ -108,7 +108,7 @@ private: bgfx_effect* m_gui_effect[4]; bgfx_effect* m_screen_effect[4]; - bgfx_chain* m_screen_chain; + std::vector m_screen_chains; std::map m_hash_to_entry; std::vector m_texinfo; @@ -123,6 +123,7 @@ private: static const uint32_t WHITE_HASH; static bool s_window_set; + static uint32_t s_current_view; }; #endif