From 75466ad87d2af99d05b0c5b84e661523734d710b Mon Sep 17 00:00:00 2001 From: cgwg Date: Thu, 7 Jul 2022 10:15:55 +0100 Subject: [PATCH] bgfx: crt-geom and crt-geom-deluxe improvements: (#8653) * crt-geom-deluxe: Increased number of taps for halation and increased maximum width. * crt-geom*: Moved repeated crt-geom/crt-geom-deluxe functions into their own file. * crt-geom and crt-geom-deluxe: added support for sRGB output gamma ramp and made it the default. --- bgfx/chains/crt-geom-deluxe.json | 15 +- bgfx/chains/crt-geom.json | 13 +- bgfx/effects/crt-geom/crt-geom-deluxe.json | 1 + bgfx/effects/crt-geom/crt-geom.json | 1 + .../chains/crt-geom/fs_crt-geom-deluxe.bin | Bin 17749 -> 18114 bytes .../essl/chains/crt-geom/fs_crt-geom.bin | Bin 13852 -> 14279 bytes .../essl/chains/crt-geom/fs_gaussx.bin | Bin 2097 -> 3787 bytes .../essl/chains/crt-geom/fs_gaussy.bin | Bin 2097 -> 3787 bytes .../essl/chains/crt-geom/vs_gaussx.bin | Bin 704 -> 832 bytes .../essl/chains/crt-geom/vs_gaussy.bin | Bin 704 -> 832 bytes .../chains/crt-geom/fs_crt-geom-deluxe.bin | Bin 16997 -> 17343 bytes .../glsl/chains/crt-geom/fs_crt-geom.bin | Bin 13196 -> 13604 bytes .../glsl/chains/crt-geom/fs_gaussx.bin | Bin 2009 -> 3645 bytes .../glsl/chains/crt-geom/fs_gaussy.bin | Bin 2009 -> 3645 bytes .../glsl/chains/crt-geom/vs_gaussx.bin | Bin 644 -> 766 bytes .../glsl/chains/crt-geom/vs_gaussy.bin | Bin 644 -> 766 bytes .../chains/crt-geom/fs_crt-geom-deluxe.bin | Bin 15163 -> 15960 bytes .../metal/chains/crt-geom/fs_crt-geom.bin | Bin 11796 -> 12535 bytes .../metal/chains/crt-geom/fs_gaussx.bin | Bin 2143 -> 3485 bytes .../metal/chains/crt-geom/fs_gaussy.bin | Bin 2143 -> 3485 bytes .../metal/chains/crt-geom/vs_gaussx.bin | Bin 1063 -> 1227 bytes .../metal/chains/crt-geom/vs_gaussy.bin | Bin 1063 -> 1227 bytes .../chains/crt-geom/fs_crt-geom-deluxe.bin | Bin 24150 -> 24660 bytes .../spirv/chains/crt-geom/fs_crt-geom.bin | Bin 18545 -> 19259 bytes .../spirv/chains/crt-geom/fs_gaussx.bin | Bin 4470 -> 7294 bytes .../spirv/chains/crt-geom/fs_gaussy.bin | Bin 4486 -> 7310 bytes .../spirv/chains/crt-geom/vs_gaussx.bin | Bin 1936 -> 2224 bytes .../spirv/chains/crt-geom/vs_gaussy.bin | Bin 1952 -> 2240 bytes .../chains/crt-geom/crt-geom_common.sc | 203 ++++++++++++++++++ .../chains/crt-geom/fs_crt-geom-deluxe.sc | 185 +--------------- .../shaders/chains/crt-geom/fs_crt-geom.sc | 184 +--------------- .../bgfx/shaders/chains/crt-geom/fs_gaussx.sc | 13 +- .../bgfx/shaders/chains/crt-geom/fs_gaussy.sc | 13 +- .../shaders/chains/crt-geom/varying.def.sc | 5 +- .../bgfx/shaders/chains/crt-geom/vs_gaussx.sc | 3 +- .../bgfx/shaders/chains/crt-geom/vs_gaussy.sc | 3 +- 36 files changed, 265 insertions(+), 374 deletions(-) create mode 100644 src/osd/modules/render/bgfx/shaders/chains/crt-geom/crt-geom_common.sc diff --git a/bgfx/chains/crt-geom-deluxe.json b/bgfx/chains/crt-geom-deluxe.json index 5e20b5f8aa4..cea592b5d67 100644 --- a/bgfx/chains/crt-geom-deluxe.json +++ b/bgfx/chains/crt-geom-deluxe.json @@ -133,7 +133,7 @@ "name": "blurwidth", "text": "Halation blur width", "default": 2.0, - "max" : 4.0, + "max" : 8.0, "min" : 0.1, "step" : 0.1, "format": "%1.1f", @@ -210,9 +210,19 @@ "step" : 0.05, "format": "%1.2f", "screen": "raster" }, + { "type": "intenum", + "name": "monitorsRGB", + "text": "Gamma of output display", + "default": 1, + "max" : 1, + "min" : 0, + "step" : 1, + "format": "%s", + "strings": [ "custom", "sRGB" ], + "screen": "raster" }, { "type": "float", "name": "monitorgamma", - "text": "Gamma of output display", + "text": " custom gamma", "default": 2.2, "max" : 4.0, "min" : 0.7, @@ -341,6 +351,7 @@ { "uniform": "overscan", "slider": "overscan" }, { "uniform": "aspect", "slider": "aspect" }, { "uniform": "CRTgamma", "slider": "CRTgamma" }, + { "uniform": "monitorsRGB", "slider": "monitorsRGB" }, { "uniform": "monitorgamma","slider": "monitorgamma" }, { "uniform": "aperture_strength","slider": "aperture_strength" }, { "uniform": "aperture_brightboost","slider": "aperture_brightboost" }, diff --git a/bgfx/chains/crt-geom.json b/bgfx/chains/crt-geom.json index f34d059800d..8e9c7af37ed 100644 --- a/bgfx/chains/crt-geom.json +++ b/bgfx/chains/crt-geom.json @@ -129,9 +129,19 @@ "step" : 0.05, "format": "%1.2f", "screen": "raster" }, + { "type": "intenum", + "name": "monitorsRGB", + "text": "Gamma of output display", + "default": 1, + "max" : 1, + "min" : 0, + "step" : 1, + "format": "%s", + "strings": [ "custom", "sRGB" ], + "screen": "raster" }, { "type": "float", "name": "monitorgamma", - "text": "Gamma of output display", + "text": " custom gamma", "default": 2.2, "max" : 4.0, "min" : 0.7, @@ -165,6 +175,7 @@ { "uniform": "overscan", "slider": "overscan" }, { "uniform": "aspect", "slider": "aspect" }, { "uniform": "CRTgamma", "slider": "CRTgamma" }, + { "uniform": "monitorsRGB", "slider": "monitorsRGB" }, { "uniform": "monitorgamma","slider": "monitorgamma" }, { "uniform": "aperture_strength", "slider": "aperture_strength" }, { "uniform": "aperture_brightboost","slider": "aperture_brightboost" }, diff --git a/bgfx/effects/crt-geom/crt-geom-deluxe.json b/bgfx/effects/crt-geom/crt-geom-deluxe.json index 500eab09542..08e4f2714c1 100644 --- a/bgfx/effects/crt-geom/crt-geom-deluxe.json +++ b/bgfx/effects/crt-geom/crt-geom-deluxe.json @@ -30,6 +30,7 @@ { "name": "mipmap_texture", "type": "int", "values": [ 3 ] }, { "name": "curvature", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, { "name": "CRTgamma", "type": "vec4", "values": [ 2.4, 0.0, 0.0, 0.0 ] }, + { "name": "monitorsRGB", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, { "name": "monitorgamma", "type": "vec4", "values": [ 2.2, 0.0, 0.0, 0.0 ] }, { "name": "overscan", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, { "name": "aspect", "type": "vec4", "values": [ 1.0, 0.75,0.0, 0.0 ] }, diff --git a/bgfx/effects/crt-geom/crt-geom.json b/bgfx/effects/crt-geom/crt-geom.json index b742896485e..e51f071495e 100644 --- a/bgfx/effects/crt-geom/crt-geom.json +++ b/bgfx/effects/crt-geom/crt-geom.json @@ -28,6 +28,7 @@ { "name": "mask_texture", "type": "int", "values": [ 1 ] }, { "name": "curvature", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, { "name": "CRTgamma", "type": "vec4", "values": [ 2.4, 0.0, 0.0, 0.0 ] }, + { "name": "monitorsRGB", "type": "vec4", "values": [ 1.0, 0.0, 0.0, 0.0 ] }, { "name": "monitorgamma", "type": "vec4", "values": [ 2.2, 0.0, 0.0, 0.0 ] }, { "name": "overscan", "type": "vec4", "values": [ 1.0, 1.0, 0.0, 0.0 ] }, { "name": "aspect", "type": "vec4", "values": [ 1.0, 0.75,0.0, 0.0 ] }, diff --git a/bgfx/shaders/essl/chains/crt-geom/fs_crt-geom-deluxe.bin b/bgfx/shaders/essl/chains/crt-geom/fs_crt-geom-deluxe.bin index dd169986c52b875baf3b1c8bdb3d41a6b6d62a87..5c2140607f7ee456147e498a77a8d05f6b0b7895 100644 GIT binary patch delta 977 zcmZuv!EVz)5RH=vL_*by%B@HdjKswoxt1NrZYXV2C82Oa2wGK~k|>xql3ho3k_J!| z^}q!QiD<>Wd_rX|+zf1P(Rh6 z2dUfiN9u2ym+Yp*;A{GpmbC^QDFZy{pBS4uql(E!VDVTJb&( zJxyU7ob~{uuG8r^Jp>CfNK)Tw=@Vz@<64e3s;gHfKGC%=GDJ*`5JU*% z!Rgs`&+_XUfpwS>yL?4Q0NEiS(kL+5=u1@wuU-?@t?iz6fOUo7Xxgd4fc8slcV_>} z0CqrC3_{=y?=uoJ!cnDg=N?!sF@fWGK$Qne8Lg_F!@P2j$jzvhv>kE z*F!B1s*@Uiu<61VBaMP`4^7u*4pzojU|YVwf80EYNbLRz?grIVUDMSP>vKLO7|fj^ zShjD)IWapsU4C#kKV3>w8}FsOs9T MHw&V|Fq29A2Vq18@&Et; delta 655 zcmX@q%Xqbmk=HHQgWI(DaX14INKWKU;O0y&Eh0*Nly+pv&SL5 z`GA=|BMv#RRucvUmlRpcJPUd#fWd{jqT60Y{5Ej{7?-a^7Io^^h-_XPw7R4G)+Ml z8by;8T_h$uxX9IOf;DOCfb7yi*l(z*sR`0pniF4?S{!c(RtD9KX@f3EH&_G0Js=%G mW8ne@dO)`W1t87?s@K=Z&Ci=`?It{Vv6}=t(EGJqTnqr~2eE7b diff --git a/bgfx/shaders/essl/chains/crt-geom/fs_crt-geom.bin b/bgfx/shaders/essl/chains/crt-geom/fs_crt-geom.bin index bd3eae75d41781941304fcd683dfda672a92e010..c7ff79043b5676cb229a421ff88c0983441017f2 100644 GIT binary patch delta 730 zcmZWmzfaph6eaRSC&A#Oj&-(kBo=}JBD_t=*?SrVdyX;2*$SBY@9IMXk{2x0n=0|kL5 zI7*OA&6EX;I;B#ZEBtk33$`Fm>8Iv2Q37;(}D%qrn=_5#F6ouXnA51wc z!?BQKBng!C-}mBpzved7Oe&I6+q5Zu6tcc635IZ{2c92$!i5Et{AQ?hVPtQ9&z8RT r1U&E#>#aaqTujlH=%`W4=%9tT^#7OmL3ph|CVyp%A8@Xh%Z>d5vB$|< delta 370 zcmX?}KPQLRE!czGwD@s20}zNztOfD@dODriZN@bd8;xlo|vdICA^-OUllP@y9 zo-D&GH+c_J!elGvFPr^X&g-#NRK}Yr*iMcxHk|BaC^lK&Sc?TDw7Jtbg>iDe8YjP{ zfi;(cLP>5xSz=MVrNQI|a}iAgy^6{z1zUxJ{Bi}2+{_9E4XC_@g^q#-P`QGFMpzH_ku-@gC$_2$E$U%w4}-Wc!B{x*o?;PorRz(0I$&i*OP{bN*y zb{BnntfEzyy4TP5hH(kfBHC}sW3+udkW0As$i-hL;bwDOjd~g#NvnfH@dbBDl0K|P z=Y6zE(pa3i;Z(G>#9jL_h!49kb-oaWj_*vO2NDO-o=|i2eMHDE$r!dvj_25i6^80m zHoGJ^kyCuYBz&YL?Qim#P_XPzR49^_n`So_%i!?tt}xWK3LI=(_EjveCcIr(Hu=a0 zIczdUR5c!wj8IJPbWTIeg|cKOgm&d3V?NY1O)D?T32BOD<#}%6%>1i3R+eQ7R!`va zB&?oQv(9^1Yv{2O8VgC}jjT;Fl8k zWdrXF0>9LN?^*O9Dk0bsd<<5ab4$4rUn}Fw)dp-0^mfI!Qp{hdkmOF0B|@fHe!yI( z$qztQ1YkwrC8)mm6CjmIsPz`$e=5)#eCuo=x*|9-Zl_*+!>m1UH2C`#pJ>e>^JWY( z!y9JfgR8;cv-3f;YmoUh1{wb_stX#1-6y*s8aBur8-t907|#PO%Wfq=vH?WT2AOGN zkR>q8kpr|`yKe`Gwhc1h#vn^zm=hmp7`J2fZ2{4`LFU~UWC`>gueqkbKteUlyFPF; z?dO*bj~~`SbZ=N%8Co4)Ed)!)AfDzi%nXOtsCb$W*DkGZA+^BcD7*vET4^a|L3Ylr z?_yYlaeD=@ib{C!8IvddO0i#7_cN=R|Ls{xdp9Mjzj99ef>%BHtftBI5C2WXeA;^p bHn6H~cm91EZ10j?l42paQDW(Sj7G*^GU;h8 delta 246 zcmX>tyHS9{E!cy*jHxPSB8MH*Gxmud1{0_KWi**w$Spm2J);kcUU_->K~J zlg(JeCQoHjp1ht_X7W`a|1*#u%&a^)hfQYkWM;L=8`**;3$iFrR%cI}9LSsxmp3O?vWapolS8#FI^B@&;Dv$sKH(Od24&!zQz^ zt4z-0l~y*i=2B27$t@^LEQ&WY)GJr8RWQ^uKoOk0hSyZ8EIv6uH7%`JuR=jv0nVw^ WRM4Kx&nGpxmCv3XXjCm17Xtv@LP>A{ diff --git a/bgfx/shaders/essl/chains/crt-geom/fs_gaussy.bin b/bgfx/shaders/essl/chains/crt-geom/fs_gaussy.bin index 5e5a57f68e309f42470951f0b76e76807b6bd6a5..e0ad4c1f8d1a4c55d953a2e3c045ab4db3c541c5 100644 GIT binary patch literal 3787 zcmcJS%Zl4D6o%cFQpiA;U2ADK8P~^lZiKF;4BhtujLA3|LmUU^;!7#?5&8&S_Az@b zS+>%VJnDc$AmQlZPsd09FWrCpdh_AWuiplK-Wc!B!8S~i@bxRhz%PDo&cP`vf@54o zP8WT9tfO@o*6Zhc!?=W58Sl5`G2T8N$R%3)$Lq}9ct_<*}K%^p^x z^FH3BSt8Eda4Onb;;#J|CWl>=xnBrH$7iPT14+VoPfTm{eMHDE%_+7=j^`wR6^7VS zHoG)DkyCQOMFdDo+W+J;F~N2|nL?86(z3d-ml)bcF0FQ z$fc7}qPp>r=ETJ1oz7W=Ycc6!CdBO0MaF!nXIXYpRuj@B%Pxw-!kPJ7aqT?M6|BC% z_=N<1(ZG9yz%Ml5d#ZjZz%M26 z%Ld*Z1b(Rj-&6D;Dj_%$d<@o_b8B)XzE;MUs|`3B=xxQfQp_KykmOF0B|@esKcKGD ztPenz1fWUaDX8E06CjmIsPz`$e=^V-eCuo=x+1tTZkH9`FtrD+27h1iiPj752AN-Dkn#_sx}ag$eX{bFK8$k4IkeN0H z=>mp1a)6d=_w4}Dwn66G7^Djr=EMgY#_igDTR^mKka;%-=>qzW*Id(IAfX!O%?{jD z`}t+V=ZAF=-5Zv6j#h_P3&GMch^KiBQ^PSCDxT(}wP&(h2orc5g?9jxDXnSJAU$WZ zyBLb|xV-}4Wrekm$&-GS*e_@Ota|2ud)9j2O^HIUoD<*RRZl*vWl{aZpNY7h_TGXG aG;7;kaG!tyHS9{E!cy*jHxPSB8MH*Gxmud1{0_KWi**w$Spm2J);kcUU_->K~J zlg(JeCQoHjp1ht_X7W`a|1*#u%&a^)hfQYkWM;L=8`**;3$iFrR%cI}9LSsxmp3O?vWapolS8#FI^B@&;Dv$sKH(Od24&!zQz^ zt4z-0l~y*i=2B27$t@^LEQ&WY)GJr8RWQ^uKoOk0hSyZ8EIv6uH7%`JuR=jv0nVw^ WRM4Kx&nGpxmCv3XXjCm17Xtv@LP>A{ diff --git a/bgfx/shaders/essl/chains/crt-geom/vs_gaussx.bin b/bgfx/shaders/essl/chains/crt-geom/vs_gaussx.bin index 7756f23231321b3466655d88060bf48a7d16fe40..8ea683c808425b5995c4e5eb719b214afd6264a6 100644 GIT binary patch delta 88 zcmX@WdVq~5EZBpa0SLraOjt0HCy4Rx#P||!6NR$)vF@SOMVy3wOnDq)< diff --git a/bgfx/shaders/essl/chains/crt-geom/vs_gaussy.bin b/bgfx/shaders/essl/chains/crt-geom/vs_gaussy.bin index ee1fb41724fd8e913df2656cb98de1afbf302264..09fcd8b2eee7ca3b11cc05e4a582cb04ee0edcd7 100644 GIT binary patch delta 88 zcmX@WdVq~5EZBpa0SLraOjt0HCy4Rx#P||!6NR$)vF@SOMVy3wOnDq)< diff --git a/bgfx/shaders/glsl/chains/crt-geom/fs_crt-geom-deluxe.bin b/bgfx/shaders/glsl/chains/crt-geom/fs_crt-geom-deluxe.bin index daf0b406f0c34d668eea73748070e58a7b3a2370..4a8d4e1ec979e7565163cada0a7b243582db1292 100644 GIT binary patch delta 946 zcmZuv&2G~`5U!JQXwn=JC_QvUFT0Urtz&P}Kubs?l>!n6KmsnLk>$3LoI16WV17b` zgv70Cv{zmMA>I{aCIsNi^J>RoWy93*CAKcz!htl`Vo2HL4YZAMYz0cI_RrV=+ ziG9d^TNMER-s)c^Z+d-{gTUBN4cLqp*}2w8i~B`AC#5CW8BG-UGm6u}PiqMPh02s@_?=nQyD#jd$p#;65)pks` ztzsxcjBxpq#uL0cEQmNNf;PGl#e4A*i;hK8%Q&5gSoer`8(XyE!A&3v#TZ@%9Y;Jg zoD_vC?%U4+Eo6`bc0?3it#Yf$oFwT6!}0G?66lF0w4gMQAUgQN<&Y~#k~tx|Zp2{pS*`3*M@_lC3$(xvuZl1{UKu<`+NY6k)OMy!P3{oo!G$xrSO#WmlJ$ak4 zJ#N{}Rwi7GxTPm|n&QyB`ID&@K8=ayI5bW^WF@otnYkA(%^>MAOC=oAn-5vp;gA9w z>}GSFiLIhC-crGKa;UxGWJ!Bl77%xHn|%c1QrF l7ckHRIvgkfaT`#*zD90--ed=7;mHe}CD?&}ujS%m0004(s$l>C diff --git a/bgfx/shaders/glsl/chains/crt-geom/fs_crt-geom.bin b/bgfx/shaders/glsl/chains/crt-geom/fs_crt-geom.bin index 61e08b8409c133c1987541a7c018088397c9d5bd..bee9e6fddd94b8e3eeb44a79f37513237ab6df18 100644 GIT binary patch delta 703 zcmZuuJ4*vW5H|6Ji77?J!U3Dxa9MWma!C$RMDYQF#0OZ05Kc|Vi(FnRAz&xk#O=h= zP7uV>%0m1D{sY0z|KQvud&b8!GdquO=KJ>Y@HQ7(+uaBn_WS+-+C(SBI@>E_nOdcu zuGT76=lo$jSSS^<)l$XYSzi{+ckWN>;>q_auKio$%s+KCI4nN>FGEiG@n-N%6?ZHy z8jL-Du%wUckSXO;CYujHFM+c~6q3q1^tni@j%Ij752J#X3e-ch?&%&m{f{rezZsIelgn=URclz!!e8 By%_)i delta 395 zcmZ3I)sxQa7VN=oTKqVi0SH7U@)~e+CYKhKC6<&Hr7}%4@tHVf+2jDmdZu%RlP@wJ zpZttTV)6_ozsUy7tdp6Uk8Xa%yibR%qB7o0!FKXB1H;L446Io|+|BHUKwTyZCAkG< ziAC|22G(2(2##L4f~|s~9-3f9Wff4kAirEeBR8``K?ADS!a_$u1E^a;L8B}+*;oTE zZmFQ909L30G)h5N0jvh7DzPB72;}_u$*YZcC+|0stJefeY3hLN)PXs}!dz2R6KDj? z8dI<;s4*B;>4Nm4sJ8&A2bu}fZ>9(I0FV!HBv7@!Ms9vyW=Ve0qAkC{mJPcKq#n`2XSl+t-^9zkmL+@OoptJBF($Nut-UEDL||x;ci2xCr;_ zDt6D&xBEI;r^u{7?=9;TW#xLiVyE~aV5jgQjhD;)VnBwyi@1mBSne)Ov&Y5YxLq&P zERl5@o=&u7I^Wqx$!-&8-WMj|@DtMYBTJ(7mT`OVeZcC9KHDFY5El5~a+5{}c1U(e z7$OjB|7M>V2gm)ywY@uqZPz(i!&8aAw#au%T;@9NMXabx-Oe1BeN>A)QASYIH+N~y zIPT_f%wk06f_=pJ`9#=IE%j~NDavZZnp1I#qOh^DI&9C$^SnbDXhZ=)890)1`UIuK z9bU!7gJCptVB@{#u&b)-p6*!V9uwT-hI`Tr_t=EHEXywUMB|?fT+za=_guCvW zPM=IQ?kT}NZMcJ8xTnu^i|+1V&ot~Afjw)m{a&zV2H0eG&o%5hfjw`qyGaUv0kr zmOCidME|;q0{qY3b&mqw*}$WSJ=tpgbQ*XD_Crl6ZHP_BzXLEevhfsyUD5BWu->%I$=@nTS*_cJhnk@M1>u3Ilq z-itwj-p`B%2IlKIbgS$33zYw2P@q3G1S^exfiM~vupEn(mIrE@2Hk>T?&RoNIQ473 zj6oc?F)X};OG+HK@il_W7X+!;xC)1KE(Mfx5ftOFd+%Fqw-*jiV&Dpe(T{ z-e|HTOZMdRY@Cy~vKWK)*t4okmSPi~T*0b7`3OhYKUL2PL|^}l`4x*&QDECE7q$}&{lwRDm4|fCpYp+ QP5#bn&ki)ImWzu403K#cDF6Tf diff --git a/bgfx/shaders/glsl/chains/crt-geom/fs_gaussy.bin b/bgfx/shaders/glsl/chains/crt-geom/fs_gaussy.bin index de57d5715c58d05c84f440dcc8a84d3441839b4e..dc708579ed8954372233a6306423e45cbad60f18 100644 GIT binary patch literal 3645 zcmcJSOK#gR5QfzjMF9uhcFiSKJE}&KUog5#5p>@J2tpzo1}w{vA9@tMLyyp9&({-l zM2a$9jT1J23g{?ijA3B#B*g39;v(Fy ztJpn9-|p*ZJw?v?^WL&fQC60(J@?(s;StF9u}TyNG)@9n;;VY4*4n9JlLb znk6z%!_$ejOy`k(l~10(;(Id%a-K4Y0}L z23_C4CBQLQ>&Y!w%6h4HFIN(94WQe~ZUt6-;T54h>ntHsoniyw9L>%EsO^K;zS?~K zD|b+?iT-sJ1^A!6>mCKVvw=qud$QE}sWk8m$mvqk?G-40#h|dRejaV`4amu78+6MB z%5yO&$otV!Ffd(OOhGqYpj;P&g1jI10wddPAM%Sr*L@c#^k$mGiw+%Fqw-*jiV&Dpe(T{ z-e|HTOZMdRY@Cy~vKWK)*t4okmSPi~T*0b7`3OhYKUL2PL|^}l`4x*&QDECE7q$}&{lwRDm4|fCpYp+ QP5#bn&ki)ImWzu403K#cDF6Tf diff --git a/bgfx/shaders/glsl/chains/crt-geom/vs_gaussx.bin b/bgfx/shaders/glsl/chains/crt-geom/vs_gaussx.bin index 1f007194d4e75d701979f536bfed8859cd317de3..e8991da8526278134f9fb39e8b5c3670bd259f39 100644 GIT binary patch delta 87 zcmZo+{m04^7VN>z00d$yCM=l96T~=sVtfp@i9%U?a(-%BTCvf_bqz00d=BRWTEJf*2Ji#>Z^DY|J=0gJ~K7ldlPj diff --git a/bgfx/shaders/glsl/chains/crt-geom/vs_gaussy.bin b/bgfx/shaders/glsl/chains/crt-geom/vs_gaussy.bin index 2ee2901d407f387c8f3cf2d401be122a74c23fe3..0db77bad36f0d811e72d9fdb962e7b0e06b31794 100644 GIT binary patch delta 87 zcmZo+{m04^7VN>z00d$yCM=l96T~=sVtfp@i9%U?a(-%BTCvf_bqz00d=BRWTEJf*2Ji#>Z^DY|J=0gJ~K7ldlPj diff --git a/bgfx/shaders/metal/chains/crt-geom/fs_crt-geom-deluxe.bin b/bgfx/shaders/metal/chains/crt-geom/fs_crt-geom-deluxe.bin index c4f056e4a1b78c2dd76b7437d648c64b2d5895ec..e6204e106a6f9d9907e7f78dedf28657193adb44 100644 GIT binary patch literal 15960 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 Ke0+3tJ@_wHbetFf literal 11796 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 Nz0Bj|qoZ$n{{`mU^&|iQ diff --git a/bgfx/shaders/metal/chains/crt-geom/fs_gaussx.bin b/bgfx/shaders/metal/chains/crt-geom/fs_gaussx.bin index 43b4090f063b415ab5c59776ebcdcaf4687fc24c..c911e1cf9fd046bd73b38a5fa8525c5cac3938a5 100644 GIT binary patch delta 268 zcmcaFFjtzxE!cxwY{i5H6FG926nQt6i7`r;D3rw~=clHn6&oo;N0%0-7HQ<F4nUq6RJL+*0;?U6 zZwi%-V|AGPnkja2606PTW@by4$tkQ>jHZ(l*+YR^fs%}7AU4ogutr96s0`3hpoI`s m+t}3@H74I=cXn0KR>;iLgF9ERLK9u25<{d4U1YK(hZ_KDd`uAl delta 63 zcmV-F0Kos98{ZHJMpH-&b^>}_kqB%8;|H;J76Fs80T=->v&#Vw0h8haIg^3~Tayt4 VJ+m7IHw2Te3?P%z3_z1w4MTYZ6RZFL diff --git a/bgfx/shaders/metal/chains/crt-geom/fs_gaussy.bin b/bgfx/shaders/metal/chains/crt-geom/fs_gaussy.bin index 8e561ec35fe8954bbb7e98361daca351b4cfdb2f..7f62f62ded0a7b613d688bd1b6c9ee04cb6e9d19 100644 GIT binary patch delta 268 zcmcaFFjtzxE!cxwY{i5H6FG926nQt6i7`r;D3rw~=clHn6&oo;N0%0-7HQ<2ffhnk mZDUts)R=se-Pu(^TOl(~5AIyO3Qcs8N(_-IbdkxD9Bu&Q=uk@l delta 63 zcmV-F0Kos98{ZHJMpH-&b^>}_kqB%8;|H;J76Fs80T=->v&#Vw0h8haK9h$9R+A9~ VLbD(SG6a*Z3?P%z3_z1w4MTbK6Se>V diff --git a/bgfx/shaders/metal/chains/crt-geom/vs_gaussx.bin b/bgfx/shaders/metal/chains/crt-geom/vs_gaussx.bin index 9cfe64d0167cfa7ddc9921c90750c578b5891ab1..64c780917506135302a83cc39877a063020144bf 100644 GIT binary patch delta 128 zcmZ3^ahj7SEZBpa0SLraOjt0HCx|JYWn+R6<78__8AhYY6Bwl@7cpuv8f~7-XvD~9 zKKTOES59*iO$B|0cti8a=a>~Wlk-#4(u$1~Y!y-~3N+Gk@)Ju;G>lC340IHX%|N7y QC5SXLnY@Ns5=Cz$0G@v#~Wlk-#4(u$1~Y!y-~3N+Gk@)Ju;G>lC340IHX%|N7y QC5SXLnY@Ns5=Cz$0G`t!=Kufz delta 70 zcmX@jxtxP1EZBpa0SL;Ns$wSc1TpPq-k2c7IC&ML*5uiY{F@&$sxUH|PUc|#%57?@ Ysi3bAZwRC(FJP9Re1MU2@*Ea@0GKEf8~^|S diff --git a/bgfx/shaders/spirv/chains/crt-geom/fs_crt-geom-deluxe.bin b/bgfx/shaders/spirv/chains/crt-geom/fs_crt-geom-deluxe.bin index 41a10e636ed5db7c2eb41e1ed4c958b94bb9fdcc..75dfa85cec721f3edee07bf5e36cb4378271f0bc 100644 GIT binary patch literal 24660 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 diff --git a/bgfx/shaders/spirv/chains/crt-geom/fs_crt-geom.bin b/bgfx/shaders/spirv/chains/crt-geom/fs_crt-geom.bin index 1f3f3f6b4bcee79fb0532f9d5ae1080ad2d03bf3..14a47c07920056223bf47673bd13e5c849badc98 100644 GIT binary patch literal 19259 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 literal 18545 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 OTkpTDy0~1qyZ9gN3TyKK literal 4470 zcmZveTZmR=6oz+>GamC)Drv~5ftqGgW|C;*0X4N$JOHyL!Mj0#L5B*>tnL_sIIFiDY$o@dYh4txIbn}4y_`>yq^^{w~YGykmIw0gvW zL5ChFSPjL9{jK}j54QH~KGZ&MTrsA&M!FcXzqO;Sv$Jg+elOG5W8S=Ckl{g-ikV~C zJ!tw6IirhV#bBOVXWQ<* zJc<gwKUsF5G%IncVJt9{q5o^Z~0z*@CT&*{7mb?iD=R#?%tuMNdkF{N`&b0aHwD!#WP zcD`y{Y}~tAU72S(*cFa;h1?iy6|*?Ed#veP)tX{!y2rS)j=&#X!_GJb-(}qS#L0KI z#IK`^eWsQ-+S_vyOcUG$IPba{yMgy(C{M9ucCIuNgdp zr^|keYFLe3#&7O*%ihMtYU&yfp3Act^9-|V_|`gnJJ>audG6%t9Oin?wU{e-Q;81W zJ%zY;;Q2MrvW2H}$$J*DcOmClw()GnT-FnBFH!IQ`|-`SZ~8r0#t)wgK2YM8KKx{f zi#~k3H~)j=pYM&g1Yas~OCKJkFvZ~(&%YdB=sccZ?7Jfu?7Jg2e@)HzPK}Fwm-rOM zx8Zn?sVDZ`l3T#L?yTOsOYSm^e=`=tdf&4!?^^7g%)z`{u{Bpy%kzjm!#aHXFJ-q{ zK8vsZ-nTlNr?$_*8#_Wb@lky5RX*Gc_-Ze=fjsNKh%dhu|FIhP64<`Rw!-=Tv@@7z z_59o5JZlG>y!q>y#`pXfzP#oFmYU@JFPAlo!uPX!{^Rh*HZZ4kI@vE58_87iufXvs zCSmq6ZzJb%=2yY$r|zlKLtH-g1i98Z0cS1a(dRX=?_yP-lW_7?eO?EvkFn@;h&uK9 zJPIdoe)M?*UtV(o`|0y$S#zL1Z^0YOT#vI~E*5>>f#Xx^V=wcf&wF6?v32Sk0m#Rq z&--xJGVXh!W~adFW-OY0gzxWbRkM%b@>c-<^uN9 z?9;O5K+Vp;8_TTEuwO0~%|3(UQ)*@}^P<`3U^O$II?ofAk43YyaMm&&&AtGuo3Uv2 zCBA>ts+ygHldo#_6}z~^%?0eI**9g)ftq~_Z!EK(V82`} zntcz)r_{_|=0&sfU^R24&Pn3(v1s-qoVAQcv!B4~W-N2RO}u{Ycj4sKD0BaUFR!_P z{pS9)tT}M*-{6hqydSb(E|$6ffa6onZ7=h3?mxkv-JJY=y?}odtKREhV9#tU^PQ$n z{d{NOwj?8G9G&9;%JkE0 z7`)%9_1{Uu;f+PJpYi2l(QG7~HT_PqmwC}_6uz1nPo3Z4=k7?$lcfXRa~NY>#F5=Xn}S-g12Z$2FFFUQy$WMTg1EDIbdttKpp6c;4%Kz*l>( z*T5S~pSAe*mQSCl)RB+n-tL9Vz1h>e%zq!)xGUWH8t0yH8)}@X8&Jgmzc&KhZ@zKQ TvxGNbI~$GtOV@>E=jP&nKx2C^ diff --git a/bgfx/shaders/spirv/chains/crt-geom/fs_gaussy.bin b/bgfx/shaders/spirv/chains/crt-geom/fs_gaussy.bin index 0b1ed313eb2172b20409f3ec5947b4855311cce3..632ca0c628308a8e065218e4fd43762e4d785657 100644 GIT binary patch literal 7310 zcmZvg3#^xQ8OPta6Sor}PBeCa+7O8t6J;5CP$#&dp5lmUt`*Im)~>*BZ^*vgoodW;fU8^Pczn-@CW}51##>=lgx$-{tfE z&f#z_Si5@Cto?iT7L3uwr0u=K{X2WNZN9dD$@HS5c$;!DetYkxzJYEt8I*lqSL zDMo3Jnq73A!qcPXkJo>DF`?)lt5Fp1pu;C7730d!RcqF+S-fp{!{XDIEzzIKnhtxW z@#Gjjje)++SMgCyWP!=VG-3uZkLchTdsvKYbm3BeV}h}$^=HSj=Baq)R@e3oT)nk_ zh?2f>#iHmv{X2)Z5A{dCl;qN@Hg6mp8aQ|B;FVj{$MJ-^qXL08uGHLj4H=!Ii_6N+ zk#*evrmejf4E1d~Z*XvEgVtF7c%~h_R}S`X+_){8XNhsJyL|r}Y-es_U)5e|U ztmpR)_d#+MC-3i1n&p=h5TfX&?p4lkl&}N}|A3BMXiizC7 zk^AAi^^y8S)^=Y$%W|F&~mCWY5zk%HQ;{Ehq*ymli z5nb;lR=3_w?mbkG_BnFzidr{)&VMtx_gC*TmG*gZ*VS8x=6(M?hjZ_q=Q1?+{s%O5 z`!C^ieqDZnT-|WU5vjHRTPfVXUr*lC?0*lsUN`4-p1<E`84} zvjfy}(+jh2lKcIn&g?-nndybux5#Ct7iK3gck@o2h^B6Tm_0R$3|g4EmVIINEVaxW znP)k^dLqo8Lvt?uFgr>uH@z@>p4@+z>dbzICNsS-dx2bLdSP}Bb2pi-L{qmv%w8r} zHyll7ui&?1_H%T-oOKn?t0lthRkSd3E&Iak7u5b+Q2*X_5x#mN%zlaHT>4>lj9PAb zVfGri|901z{TfYXdSUh(a+&FcSr2nJnXN-pw?E8&>oaJEqsi=b{C3QKhprc9AK`hm zM3@~%3p3ZUFU>uPZ z(+jiB%-v+R1x?-lF#8v|y5VRt`!{|&X8%Fg3$tr@UM&%3Z=r>mYuOiOUND*IXP!^G z4=-L7VK$1|x%9(q44T~Z!fZUbKLgg8O+b^GUYJcJmziFeUB}!_X1mbT?GLlbWtTJg=4rvktT{b1nPAY&x~f9GT}9eDy?_%|vr9{Vf#&37-Q_%IY-@AEUEs=B2LCd*a%f9TpliI!8lb;vgMecju z%^ve!-;L&;^>V&_%+oyIeQ4_T=X?vu)eT4Ue5c~KJKsWdy`1j=&#NVJzC~y`pKIBd z_qv$6`Cbp=t0(eam!LV9e)uexJ2i zJg=4rvu?C7b1nPA?1R)Y<8N!8SMk*oVb+7@T>4?Qj#_SdVRkvW|BtRSy8=ySdSUiq za+&Fc*{_(p$?P>Wb^F8YqvYy_qsgonza6uWq3ea&>pZWP2($HQVdh%)h1mvbneow@ z=TG?Ri7?xU=3M$=_Hk;t>4n)Aa(~xQXSNkhW_n>ZKrS=AFnfc!o6O!sQ@20Nt|nJE z98G4|;J0HogsvB6Z}GfZBFu)-!pybo3$q>6&7Zr+@XHAGM40VFb1wZbyOvsRdSUh{ za(^FFXLcQ$%=E(S)8sPK3$sbg-DEZeP2K)5yPjO#a5R~H7QY>{8_@N_YzEJ(CBkes zT9~<(ePMPJwaoN0&q?^|i7>kv&AIf$>=tUd>4n*?cy5VRtdjP*3 zv;F9LVYY(j)e>QL04>a1%f2xC2DQxiXw7pTzIr0e9z=64{V+R7EjPW)`4D-2eu?&Q zrMVBE_4i`mL9zP~5X?A1%(Q&k@yt^GYsVXvM{W$+BSKbPrce?KPgsl437XDdxF z@B2dDgL)$G=_s1-ML)lv{RwruJM>d@y{z**xofLuolBTUJ&}9$0$T2sYucCdzeug` ri1t#Y`AoEzD@~r=5ShZ~D`-A%zrOo9n;YuyxAp$Zs>{ojJB$ATo9%8Z literal 4486 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 literal 1936 zcmZvc%TH556vn451uO#o<;KLN z@vSii7e4p8^`CO##>DS8y#v?iB_DIX?>y$rnSmQi3w=i4R&w`dm+5JH+x}X3J84QL zfo%HPURd4nTK;Y|pEQL??QMJIR-;-8lV&B7GHq|muWpx`!JRJU0b@pcj7cR&^gCfP zrq_J8sxe1R(x&y9ZoAGeE-mI-;acv(#XKSXCS@b(;fS#f+KQWHzm8*BSQTo*Js}i! zgp_{LT7N1rtqi(wIce=RE`Gi4*MjEe>_$+zD=M|4V;`L1K&OY;5EPxZb&^)MCiY=nZZ|rpt+WplCkG3RO?~$ zekt(l;gxpSXotD=4X?DHs<=aT7XQX=Y1eA4)}nsK&gy?L+HsB@wY^!;^q3bPb6ilS z<0Dr6Thk?*fmj@KBd!qBm>F6rrZF?L6=7cUVh`fxwJWn57Wf<=>QKv>=U|MlMx4Eg zXO8$?J>E*^HFf;Fn|MBN2u}VnWsx_ep6C(#gsg6@S>dGW_iBYRA9#PniH9=}{Nx@N zAJ&=`s6Q5Q&h9v|qXM7vpOH=eDaDUzWl#1SRApx6G<1-a_pDZO@L!HNvvhr&lbsd# z*avPOq*n6JYbBO`@Uu<`#_Y|xz9z*ur}IzYHV~I6df;g{Kaw8WBV?O zQ-eHW3xbQCm95%8;KQ;OE${StO*XwU2YSDyH6bty&JJIWH2mer=C1I=S7ZKaWOH}; z;kB5*A)9l%`f%PA8u4)66`cLHBiq%3cm7uyb4hYKFDT{d`|l)8;y9k-zV9`;^Xg-_gGX7-q>e>8SwU)G4Jh*fc{u9?Eh7u2Kuya clXroJ&6}V>#D6KO|AX$Vu#*dXS8IwsJP3EREcM^4# zKuSb6`4ik}KeUw6f`}GcZM$}-e}@Y9Yu!d4YQpj6az9;7{x>;Q^g}68hbrU}oVM-+dAuw|^p?c*mbg zC;uMB59y=_>hD!0X6YO}(kJU@I>~|kM1q;M_jOQupM-}x;6nkm;txy5m;T&-OnSQS zUQ?eYuf`o@TUeuY9Fk|qd&TSIr%v`~>gv0(# zqW2_rFgr^O_GY59C&Yugnq%~Sdq|QL2sCyxFZ>nu%qk?e!Tm;5^V1Gopk&LCG3s+eJ>r` zx2j6q4-#VGJ@!ZG#IpD4*n7g*JodhHb`btXlJ6(!W!>pd5SPm9-kBz{_gkJo!F-RogL zo!t2k=?w{wbAL*Q!{6`sL^{6M_DT5G3d(U&=TiwYXZLwmLpuMGz;7lq_**(T;J?)N htm%Y9U)RYz&^L6_D>}Q!4!u?DS8_YPd6)11!vzVnzfXHI*4d9mMUZKif_berCex8+yEwUjBD zE@;!=@xt1+*YQ z*7TY0mNn+EN!hS|(_{CArRAl3JFMoX&Q0PnVA9r;8V(s-pv|~Z_8S;HNky_MX-PVg z9Z6cBjP{=j%qW5?Tuer1O$c9W`1PQ*F}EI6?g)yFc=Y`{?DN!+Xo9>mHc!g(wq1KU zsM@tgsyx#skD`^)hq}vNC0Gwy_MULuqwF<XE7g9$(ShF>AU(KEPGf=kETiuMKdi!<{HT{bxsQ#^LF0Vc|nMKgNd7w7;|sd;n@fm94=TqSai4;*^3jV z*WP1Jm>k3vB-owrymaOM0UnWd+2W}7W$DyTU%1On?bJbu%Lk7ByNo%n-x#&?zAR#XiQzx(l2~f2 zN-8lX$C`wCit0M=_DI58GdH{`alFT42{z~VL^^(>65iJNJ(Z5_zD_0XnS@w)7yDc~ zvAlUQ_JuGu7yDBBv;_V^obQ!%a$s;)9UiU}&%`(B@JZn;djC!`C&A~S zDu;V7;hj!OuwRX9_#mA=vK;qOIvoD)yid~c#Wp5k9*fGsjD42S17?rjF>hZa@DJmf jzDg$t{ES|cxqw4wCa4dc_g|Cz*6Gt!kk06P&@{~-i?F#~ diff --git a/src/osd/modules/render/bgfx/shaders/chains/crt-geom/crt-geom_common.sc b/src/osd/modules/render/bgfx/shaders/chains/crt-geom/crt-geom_common.sc new file mode 100644 index 00000000000..6863a180ef6 --- /dev/null +++ b/src/osd/modules/render/bgfx/shaders/chains/crt-geom/crt-geom_common.sc @@ -0,0 +1,203 @@ +// Comment the next line to disable interpolation in linear gamma (and gain speed). +//#define LINEAR_PROCESSING + +// Enable 3x oversampling of the beam profile +#define OVERSAMPLE + +// Use the older, purely gaussian beam profile +#define USEGAUSSIAN + +// Macros. +#define FIX(c) max(abs(c), 1e-5) +#define PI 3.141592653589 + +vec4 TEX2D(vec2 c) +{ + vec2 underscan = step(0.0,c) * step(0.0,vec2_splat(1.0)-c); + vec4 col = texture2D(mpass_texture, c) * vec4_splat(underscan.x*underscan.y); +#ifdef LINEAR_PROCESSING + col = pow(col, vec4_splat(CRTgamma.x)); +#endif + return col; +} + +// Enable screen curvature. +uniform vec4 curvature; + +uniform vec4 spot_size; +uniform vec4 spot_growth; +uniform vec4 spot_growth_power; + +uniform vec4 u_interp; + +uniform vec4 aperture_strength; +uniform vec4 aperture_brightboost; + +uniform vec4 CRTgamma; +uniform vec4 monitorsRGB; +uniform vec4 monitorgamma; + +uniform vec4 overscan; +uniform vec4 aspect; + +uniform vec4 d; +uniform vec4 R; + +uniform vec4 cornersize; +uniform vec4 cornersmooth; + +float intersect(vec2 xy , vec2 sinangle, vec2 cosangle) +{ + float A = dot(xy,xy)+d.x*d.x; + float B = 2.0*(R.x*(dot(xy,sinangle)-d.x*cosangle.x*cosangle.y)-d.x*d.x); + float C = d.x*d.x + 2.0*R.x*d.x*cosangle.x*cosangle.y; + return (-B-sqrt(B*B-4.0*A*C))/(2.0*A); +} + +vec2 bkwtrans(vec2 xy, vec2 sinangle, vec2 cosangle) +{ + float c = intersect(xy, sinangle, cosangle); + vec2 pt = vec2_splat(c)*xy; + pt -= vec2_splat(-R.x)*sinangle; + pt /= vec2_splat(R.x); + vec2 tang = sinangle/cosangle; + vec2 poc = pt/cosangle; + float A = dot(tang,tang)+1.0; + float B = -2.0*dot(poc,tang); + float C = dot(poc,poc)-1.0; + float a = (-B+sqrt(B*B-4.0*A*C))/(2.0*A); + vec2 uv = (pt-a*sinangle)/cosangle; + float r = FIX(R.x*acos(a)); + return uv*r/sin(r/R.x); +} + +vec2 transform(vec2 coord, vec3 stretch, vec2 sinangle, vec2 cosangle) +{ + coord = (coord-vec2_splat(0.5))*aspect.xy*stretch.z+stretch.xy; + return (bkwtrans(coord, sinangle, cosangle)/overscan.xy/aspect.xy+vec2_splat(0.5)); +} + +float corner(vec2 coord) +{ + coord = (coord - vec2_splat(0.5)) * overscan.xy + vec2_splat(0.5); + coord = min(coord, vec2_splat(1.0)-coord) * aspect.xy; + vec2 cdist = vec2_splat(cornersize.x); + coord = (cdist - min(coord,cdist)); + float dist = sqrt(dot(coord,coord)); + return clamp((max(cdist.x,1e-3)-dist)*cornersmooth.x,0.0, 1.0); +} + +// Calculate the influence of a scanline on the current pixel. +// +// 'distance' is the distance in texture coordinates from the current +// pixel to the scanline in question. +// 'color' is the colour of the scanline at the horizontal location of +// the current pixel. +vec4 scanlineWeights(float distance, vec4 color) +{ + // "wid" controls the width of the scanline beam, for each RGB channel + // The "weights" lines basically specify the formula that gives + // you the profile of the beam, i.e. the intensity as + // a function of distance from the vertical center of the + // scanline. In this case, it is gaussian if width=2, and + // becomes nongaussian for larger widths. Ideally this should + // be normalized so that the integral across the beam is + // independent of its width. That is, for a narrower beam + // "weights" should have a higher peak at the center of the + // scanline than for a wider beam. +#ifdef USEGAUSSIAN + vec4 wid = spot_size.x + spot_growth.x * pow(color, vec4_splat(spot_growth_power.x)); + vec4 weights = vec4(distance / wid); + float maxwid = spot_size.x + spot_growth.x; + float norm = maxwid / ( 1.0 + exp(-1.0/(maxwid*maxwid)) ); + return norm * exp(-weights * weights) / wid; +#else + vec4 wid = 2.0 + 2.0 * pow(color, vec4_splat(4.0)); + vec4 weights = vec4_splat(distance / 0.3); + return 1.4 * exp(-pow(weights * inversesqrt(0.5 * wid), wid)) / (0.6 + 0.2 * wid); +#endif +} + +vec4 cubic(vec4 x, float B, float C) +{ + // https://en.wikipedia.org/wiki/Mitchell%E2%80%93Netravali_filters + vec2 a = x.yz; // components in [0,1] + vec2 b = x.xw; // components in [1,2] + vec2 a2 = a*a; + vec2 b2 = b*b; + a = (2.0-1.5*B-1.0*C)*a*a2 + (-3.0+2.0*B+C)*a2 + (1.0-(1.0/3.0)*B); + b = ((-1.0/6.0)*B-C)*b*b2 + (B+5.0*C)*b2 + (-2.0*B-8.0*C)*b + ((4.0/3.0)*B+4.0*C); + return vec4(b.x,a.x,a.y,b.y); +} + +vec4 x_coeffs(vec4 x, float pos_x) +{ + if (u_interp.x < 0.5) { // box + float wid = length(vec2(dFdx(pos_x),dFdy(pos_x))); + float dx = clamp((0.5 + 0.5*wid - x.y)/wid, 0.0, 1.0); + return vec4(0.0,dx,1.0-dx,0.0); + } else if (u_interp.x < 1.5) { // linear + return vec4(0.0, 1.0-x.y, 1.0-x.z, 0.0); + } else if (u_interp.x < 2.5) { // Lanczos + // Prevent division by zero. + vec4 coeffs = FIX(PI * x); + // Lanczos2 kernel. + coeffs = 2.0 * sin(coeffs) * sin(coeffs / 2.0) / (coeffs * coeffs); + // Normalize. + coeffs /= dot(coeffs, vec4_splat(1.0)); + return coeffs; + } else if (u_interp.x < 3.5) { // Catmull-Rom + return cubic(x,0.0,0.5); + } else if (u_interp.x < 4.5) { // Mitchell-Netravali + return cubic(x,1.0/3.0,1.0/3.0); + } else /*if (u_interp.x < 5.5)*/ { // B-spline + return cubic(x,1.0,0.0); + } +} + +vec4 sample_scanline(vec2 xy, vec4 coeffs, float onex) +{ + // Calculate the effective colour of the given + // scanline at the horizontal location of the current pixel, + // using the Lanczos coefficients. + vec4 col = clamp(TEX2D(xy + vec2(-onex, 0.0))*coeffs.x + + TEX2D(xy)*coeffs.y + + TEX2D(xy +vec2(onex, 0.0))*coeffs.z + + TEX2D(xy + vec2(2.0 * onex, 0.0))*coeffs.w , 0.0, 1.0); + return col; +} + +vec3 apply_shadow_mask(vec2 coord, vec3 col) +{ + vec2 xy = coord * u_quad_dims.xy / u_tex_size1.xy; + vec4 mask = texture2D(mask_texture, xy); + // count of total bright pixels is encoded in the mask's alpha channel + float nbright = 255.0 - 255.0*mask.a; + // fraction of bright pixels in the mask + float fbright = nbright / ( u_tex_size1.x * u_tex_size1.y ); + // average darkening factor of the mask + float aperture_average = mix(1.0-aperture_strength.x*(1.0-aperture_brightboost.x), 1.0, fbright); + // colour of dark mask pixels + vec3 clow = vec3_splat(1.0-aperture_strength.x) * col + vec3_splat(aperture_strength.x*(aperture_brightboost.x)) * col * col; + float ifbright = 1.0 / fbright; + // colour of bright mask pixels + vec3 chi = vec3_splat(ifbright*aperture_average) * col - vec3_splat(ifbright - 1.0) * clow; + return mix(clow,chi,mask.rgb); // mask texture selects dark vs bright +} + +vec3 linear_to_sRGB(vec3 col) +{ + // only applies the gamma ramp; does not adjust the primaries + vec3 linear_ramp = vec3(lessThan(col, vec3_splat(0.0031308))); + vec3 clin = col * vec3_splat(12.92); + vec3 cpow = pow(col, vec3_splat(1.0/2.4)) * vec3_splat(1.055) - vec3_splat(0.055); + return mix(cpow, clin, linear_ramp); +} + +vec3 linear_to_output(vec3 col) +{ + if (monitorsRGB.x > 0.5) + return linear_to_sRGB(col); + else + return pow(col, vec3_splat(1.0 / monitorgamma.x)); +} diff --git a/src/osd/modules/render/bgfx/shaders/chains/crt-geom/fs_crt-geom-deluxe.sc b/src/osd/modules/render/bgfx/shaders/chains/crt-geom/fs_crt-geom-deluxe.sc index 53d67e2b37a..72705bdcb83 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/crt-geom/fs_crt-geom-deluxe.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/crt-geom/fs_crt-geom-deluxe.sc @@ -12,61 +12,16 @@ $input v_sinangle, v_cosangle, v_stretch, v_one, v_texCoord #include "common.sh" -// Comment the next line to disable interpolation in linear gamma (and gain speed). -//#define LINEAR_PROCESSING - -// Enable 3x oversampling of the beam profile -#define OVERSAMPLE - -// Use the older, purely gaussian beam profile -#define USEGAUSSIAN - -// Macros. -#define FIX(c) max(abs(c), 1e-5) -#define PI 3.141592653589 - SAMPLER2D(mpass_texture, 0); SAMPLER2D(mask_texture, 1); SAMPLER2D(blur_texture, 2); SAMPLER2D(mipmap_texture, 3); -vec4 TEX2D(vec2 c) -{ - vec2 underscan = step(0.0,c) * step(0.0,vec2_splat(1.0)-c); - vec4 col = texture2D(mpass_texture, c) * vec4_splat(underscan.x*underscan.y); -#ifdef LINEAR_PROCESSING - col = pow(col, vec4_splat(CRTgamma.x)); -#endif - return col; -} - -// Enable screen curvature. -uniform vec4 curvature; - uniform vec4 u_tex_size0; uniform vec4 u_tex_size1; uniform vec4 u_quad_dims; -uniform vec4 spot_size; -uniform vec4 spot_growth; -uniform vec4 spot_growth_power; - -uniform vec4 u_interp; - -uniform vec4 aperture_strength; -uniform vec4 aperture_brightboost; - -uniform vec4 CRTgamma; -uniform vec4 monitorgamma; - -uniform vec4 overscan; -uniform vec4 aspect; - -uniform vec4 d; -uniform vec4 R; - -uniform vec4 cornersize; -uniform vec4 cornersmooth; +#include "crt-geom_common.sc" uniform vec4 halation; uniform vec4 rasterbloom; @@ -86,127 +41,6 @@ vec3 texblur(vec2 c) return col * vec3_splat( c.x * c.y ); } -float intersect(vec2 xy , vec2 sinangle, vec2 cosangle) -{ - float A = dot(xy,xy)+d.x*d.x; - float B = 2.0*(R.x*(dot(xy,sinangle)-d.x*cosangle.x*cosangle.y)-d.x*d.x); - float C = d.x*d.x + 2.0*R.x*d.x*cosangle.x*cosangle.y; - return (-B-sqrt(B*B-4.0*A*C))/(2.0*A); -} - -vec2 bkwtrans(vec2 xy, vec2 sinangle, vec2 cosangle) -{ - float c = intersect(xy, sinangle, cosangle); - vec2 pt = vec2_splat(c)*xy; - pt -= vec2_splat(-R.x)*sinangle; - pt /= vec2_splat(R.x); - vec2 tang = sinangle/cosangle; - vec2 poc = pt/cosangle; - float A = dot(tang,tang)+1.0; - float B = -2.0*dot(poc,tang); - float C = dot(poc,poc)-1.0; - float a = (-B+sqrt(B*B-4.0*A*C))/(2.0*A); - vec2 uv = (pt-a*sinangle)/cosangle; - float r = FIX(R.x*acos(a)); - return uv*r/sin(r/R.x); -} - -vec2 transform(vec2 coord, vec3 stretch, vec2 sinangle, vec2 cosangle) -{ - coord = (coord-vec2_splat(0.5))*aspect.xy*stretch.z+stretch.xy; - return (bkwtrans(coord, sinangle, cosangle)/overscan.xy/aspect.xy+vec2_splat(0.5)); -} - -float corner(vec2 coord) -{ - coord = (coord - vec2_splat(0.5)) * overscan.xy + vec2_splat(0.5); - coord = min(coord, vec2_splat(1.0)-coord) * aspect.xy; - vec2 cdist = vec2_splat(cornersize.x); - coord = (cdist - min(coord,cdist)); - float dist = sqrt(dot(coord,coord)); - return clamp((max(cdist.x,1e-3)-dist)*cornersmooth.x,0.0, 1.0); -} - -// Calculate the influence of a scanline on the current pixel. -// -// 'distance' is the distance in texture coordinates from the current -// pixel to the scanline in question. -// 'color' is the colour of the scanline at the horizontal location of -// the current pixel. -vec4 scanlineWeights(float distance, vec4 color) -{ - // "wid" controls the width of the scanline beam, for each RGB channel - // The "weights" lines basically specify the formula that gives - // you the profile of the beam, i.e. the intensity as - // a function of distance from the vertical center of the - // scanline. In this case, it is gaussian if width=2, and - // becomes nongaussian for larger widths. Ideally this should - // be normalized so that the integral across the beam is - // independent of its width. That is, for a narrower beam - // "weights" should have a higher peak at the center of the - // scanline than for a wider beam. -#ifdef USEGAUSSIAN - vec4 wid = spot_size.x + spot_growth.x * pow(color, vec4_splat(spot_growth_power.x)); - vec4 weights = vec4(distance / wid); - float maxwid = spot_size.x + spot_growth.x; - float norm = maxwid / ( 1.0 + 2.0 * exp(-1.0/(maxwid*maxwid)) ); - return norm * exp(-weights * weights) / wid; -#else - vec4 wid = 2.0 + 2.0 * pow(color, vec4_splat(4.0)); - vec4 weights = vec4_splat(abs(distance) / 0.3); - return 1.4 * exp(-pow(weights * inversesqrt(0.5 * wid), wid)) / (0.6 + 0.2 * wid); -#endif -} - -vec4 cubic(vec4 x, float B, float C) -{ - // https://en.wikipedia.org/wiki/Mitchell%E2%80%93Netravali_filters - vec2 a = x.yz; // components in [0,1] - vec2 b = x.xw; // components in [1,2] - vec2 a2 = a*a; - vec2 b2 = b*b; - a = (2.0-1.5*B-1.0*C)*a*a2 + (-3.0+2.0*B+C)*a2 + (1.0-(1.0/3.0)*B); - b = ((-1.0/6.0)*B-C)*b*b2 + (B+5.0*C)*b2 + (-2.0*B-8.0*C)*b + ((4.0/3.0)*B+4.0*C); - return vec4(b.x,a.x,a.y,b.y); -} - -vec4 x_coeffs(vec4 x, float pos_x) -{ - if (u_interp.x < 0.5) { // box - float wid = length(vec2(dFdx(pos_x),dFdy(pos_x))); - float dx = clamp((0.5 + 0.5*wid - x.y)/wid, 0.0, 1.0); - return vec4(0.0,dx,1.0-dx,0.0); - } else if (u_interp.x < 1.5) { // linear - return vec4(0.0, 1.0-x.y, 1.0-x.z, 0.0); - } else if (u_interp.x < 2.5) { // Lanczos - // Prevent division by zero. - vec4 coeffs = FIX(PI * x); - // Lanczos2 kernel. - coeffs = 2.0 * sin(coeffs) * sin(coeffs / 2.0) / (coeffs * coeffs); - // Normalize. - coeffs /= dot(coeffs, vec4_splat(1.0)); - return coeffs; - } else if (u_interp.x < 3.5) { // Catmull-Rom - return cubic(x,0.0,0.5); - } else if (u_interp.x < 4.5) { // Mitchell-Netravali - return cubic(x,1.0/3.0,1.0/3.0); - } else /*if (u_interp.x < 5.5)*/ { // B-spline - return cubic(x,1.0,0.0); - } -} - -vec4 sample_scanline(vec2 xy, vec4 coeffs, float onex) -{ - // Calculate the effective colour of the given - // scanline at the horizontal location of the current pixel, - // using the Lanczos coefficients. - vec4 col = clamp(TEX2D(xy + vec2(-onex, 0.0))*coeffs.x + - TEX2D(xy)*coeffs.y + - TEX2D(xy +vec2(onex, 0.0))*coeffs.z + - TEX2D(xy + vec2(2.0 * onex, 0.0))*coeffs.w , 0.0, 1.0); - return col; -} - void main() { // Here's a helpful diagram to keep in mind while trying to @@ -300,23 +134,10 @@ void main() mul_res = mix(mul_res, blur, halation.x) * vec3_splat(cval*rbloom); // Shadow mask - xy = v_texCoord.xy * u_quad_dims.xy / u_tex_size1.xy; - vec4 mask = texture2D(mask_texture, xy); - // count of total bright pixels is encoded in the mask's alpha channel - float nbright = 255.0 - 255.0*mask.a; - // fraction of bright pixels in the mask - float fbright = nbright / ( u_tex_size1.x * u_tex_size1.y ); - // average darkening factor of the mask - float aperture_average = mix(1.0-aperture_strength.x*(1.0-aperture_brightboost.x), 1.0, fbright); - // colour of dark mask pixels - vec3 clow = vec3_splat(1.0-aperture_strength.x) * mul_res + vec3_splat(aperture_strength.x*(aperture_brightboost.x)) * mul_res * mul_res; - float ifbright = 1.0 / fbright; - // colour of bright mask pixels - vec3 chi = vec3_splat(ifbright*aperture_average) * mul_res - vec3_splat(ifbright - 1.0) * clow; - vec3 cout = mix(clow,chi,mask.rgb); // mask texture selects dark vs bright + vec3 cout = apply_shadow_mask(v_texCoord.xy, mul_res); // Convert the image gamma for display on our output device. - cout = pow(cout, vec3_splat(1.0 / monitorgamma.x)); + cout = linear_to_output(cout); gl_FragColor = vec4(cout,1.0); } diff --git a/src/osd/modules/render/bgfx/shaders/chains/crt-geom/fs_crt-geom.sc b/src/osd/modules/render/bgfx/shaders/chains/crt-geom/fs_crt-geom.sc index b7ff6362018..c096ebca7e0 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/crt-geom/fs_crt-geom.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/crt-geom/fs_crt-geom.sc @@ -12,180 +12,15 @@ $input v_sinangle, v_cosangle, v_stretch, v_one, v_texCoord #include "common.sh" -// Comment the next line to disable interpolation in linear gamma (and gain speed). -//#define LINEAR_PROCESSING - -// Enable 3x oversampling of the beam profile -#define OVERSAMPLE - -// Use the older, purely gaussian beam profile -#define USEGAUSSIAN - -// Macros. -#define FIX(c) max(abs(c), 1e-5) -#define PI 3.141592653589 - SAMPLER2D(mpass_texture, 0); SAMPLER2D(mask_texture, 1); -vec4 TEX2D(vec2 c) -{ - vec2 underscan = step(0.0,c) * step(0.0,vec2_splat(1.0)-c); - vec4 col = texture2D(mpass_texture, c) * vec4_splat(underscan.x*underscan.y); -#ifdef LINEAR_PROCESSING - col = pow(col, vec4_splat(CRTgamma.x)); -#endif - return col; -} - -// Enable screen curvature. -uniform vec4 curvature; - uniform vec4 u_tex_size0; uniform vec4 u_tex_size1; uniform vec4 u_quad_dims; -uniform vec4 spot_size; -uniform vec4 spot_growth; -uniform vec4 spot_growth_power; +#include "crt-geom_common.sc" -uniform vec4 u_interp; - -uniform vec4 aperture_strength; -uniform vec4 aperture_brightboost; - -uniform vec4 CRTgamma; -uniform vec4 monitorgamma; - -uniform vec4 overscan; -uniform vec4 aspect; - -uniform vec4 d; -uniform vec4 R; - -uniform vec4 cornersize; -uniform vec4 cornersmooth; - -float intersect(vec2 xy , vec2 sinangle, vec2 cosangle) -{ - float A = dot(xy,xy)+d.x*d.x; - float B = 2.0*(R.x*(dot(xy,sinangle)-d.x*cosangle.x*cosangle.y)-d.x*d.x); - float C = d.x*d.x + 2.0*R.x*d.x*cosangle.x*cosangle.y; - return (-B-sqrt(B*B-4.0*A*C))/(2.0*A); -} - -vec2 bkwtrans(vec2 xy, vec2 sinangle, vec2 cosangle) -{ - float c = intersect(xy, sinangle, cosangle); - vec2 pt = vec2_splat(c)*xy; - pt -= vec2_splat(-R.x)*sinangle; - pt /= vec2_splat(R.x); - vec2 tang = sinangle/cosangle; - vec2 poc = pt/cosangle; - float A = dot(tang,tang)+1.0; - float B = -2.0*dot(poc,tang); - float C = dot(poc,poc)-1.0; - float a = (-B+sqrt(B*B-4.0*A*C))/(2.0*A); - vec2 uv = (pt-a*sinangle)/cosangle; - float r = FIX(R.x*acos(a)); - return uv*r/sin(r/R.x); -} - -vec2 transform(vec2 coord, vec3 stretch, vec2 sinangle, vec2 cosangle) -{ - coord = (coord-vec2_splat(0.5))*aspect.xy*stretch.z+stretch.xy; - return (bkwtrans(coord, sinangle, cosangle)/overscan.xy/aspect.xy+vec2_splat(0.5)); -} - -float corner(vec2 coord) -{ - coord = (coord - vec2_splat(0.5)) * overscan.xy + vec2_splat(0.5); - coord = min(coord, vec2_splat(1.0)-coord) * aspect.xy; - vec2 cdist = vec2_splat(cornersize.x); - coord = (cdist - min(coord,cdist)); - float dist = sqrt(dot(coord,coord)); - return clamp((max(cdist.x,1e-3)-dist)*cornersmooth.x,0.0, 1.0); -} - -// Calculate the influence of a scanline on the current pixel. -// -// 'distance' is the distance in texture coordinates from the current -// pixel to the scanline in question. -// 'color' is the colour of the scanline at the horizontal location of -// the current pixel. -vec4 scanlineWeights(float distance, vec4 color) -{ - // "wid" controls the width of the scanline beam, for each RGB channel - // The "weights" lines basically specify the formula that gives - // you the profile of the beam, i.e. the intensity as - // a function of distance from the vertical center of the - // scanline. In this case, it is gaussian if width=2, and - // becomes nongaussian for larger widths. Ideally this should - // be normalized so that the integral across the beam is - // independent of its width. That is, for a narrower beam - // "weights" should have a higher peak at the center of the - // scanline than for a wider beam. -#ifdef USEGAUSSIAN - vec4 wid = spot_size.x + spot_growth.x * pow(color, vec4_splat(spot_growth_power.x)); - vec4 weights = vec4(distance / wid); - float maxwid = spot_size.x + spot_growth.x; - float norm = maxwid / ( 1.0 + exp(-1.0/(maxwid*maxwid)) ); - return norm * exp(-weights * weights) / wid; -#else - vec4 wid = 2.0 + 2.0 * pow(color, vec4_splat(4.0)); - vec4 weights = vec4_splat(distance / 0.3); - return 1.4 * exp(-pow(weights * inversesqrt(0.5 * wid), wid)) / (0.6 + 0.2 * wid); -#endif -} - -vec4 cubic(vec4 x, float B, float C) -{ - // https://en.wikipedia.org/wiki/Mitchell%E2%80%93Netravali_filters - vec2 a = x.yz; // components in [0,1] - vec2 b = x.xw; // components in [1,2] - vec2 a2 = a*a; - vec2 b2 = b*b; - a = (2.0-1.5*B-1.0*C)*a*a2 + (-3.0+2.0*B+C)*a2 + (1.0-(1.0/3.0)*B); - b = ((-1.0/6.0)*B-C)*b*b2 + (B+5.0*C)*b2 + (-2.0*B-8.0*C)*b + ((4.0/3.0)*B+4.0*C); - return vec4(b.x,a.x,a.y,b.y); -} - -vec4 x_coeffs(vec4 x, float pos_x) -{ - if (u_interp.x < 0.5) { // box - float wid = length(vec2(dFdx(pos_x),dFdy(pos_x))); - float dx = clamp((0.5 + 0.5*wid - x.y)/wid, 0.0, 1.0); - return vec4(0.0,dx,1.0-dx,0.0); - } else if (u_interp.x < 1.5) { // linear - return vec4(0.0, 1.0-x.y, 1.0-x.z, 0.0); - } else if (u_interp.x < 2.5) { // Lanczos - // Prevent division by zero. - vec4 coeffs = FIX(PI * x); - // Lanczos2 kernel. - coeffs = 2.0 * sin(coeffs) * sin(coeffs / 2.0) / (coeffs * coeffs); - // Normalize. - coeffs /= dot(coeffs, vec4_splat(1.0)); - return coeffs; - } else if (u_interp.x < 3.5) { // Catmull-Rom - return cubic(x,0.0,0.5); - } else if (u_interp.x < 4.5) { // Mitchell-Netravali - return cubic(x,1.0/3.0,1.0/3.0); - } else /*if (u_interp.x < 5.5)*/ { // B-spline - return cubic(x,1.0,0.0); - } -} - -vec4 sample_scanline(vec2 xy, vec4 coeffs, float onex) -{ - // Calculate the effective colour of the given - // scanline at the horizontal location of the current pixel, - // using the Lanczos coefficients. - vec4 col = clamp(TEX2D(xy + vec2(-onex, 0.0))*coeffs.x + - TEX2D(xy)*coeffs.y + - TEX2D(xy +vec2(onex, 0.0))*coeffs.z + - TEX2D(xy + vec2(2.0 * onex, 0.0))*coeffs.w , 0.0, 1.0); - return col; -} void main() { @@ -258,23 +93,10 @@ void main() vec3 mul_res = (col * weights + col2 * weights2).rgb * vec3_splat(cval); // Shadow mask - xy = v_texCoord.xy * u_quad_dims.xy / u_tex_size1.xy; - vec4 mask = texture2D(mask_texture, xy); - // count of total bright pixels is encoded in the mask's alpha channel - float nbright = 255.0 - 255.0*mask.a; - // fraction of bright pixels in the mask - float fbright = nbright / ( u_tex_size1.x * u_tex_size1.y ); - // average darkening factor of the mask - float aperture_average = mix(1.0-aperture_strength.x*(1.0-aperture_brightboost.x), 1.0, fbright); - // colour of dark mask pixels - vec3 clow = vec3_splat(1.0-aperture_strength.x) * mul_res + vec3_splat(aperture_strength.x*(aperture_brightboost.x)) * mul_res * mul_res; - float ifbright = 1.0 / fbright; - // colour of bright mask pixels - vec3 chi = vec3_splat(ifbright*aperture_average) * mul_res - vec3_splat(ifbright - 1.0) * clow; - vec3 cout = mix(clow,chi,mask.rgb); // mask texture selects dark vs bright + vec3 cout = apply_shadow_mask(v_texCoord.xy, mul_res); // Convert the image gamma for display on our output device. - cout = pow(cout, vec3_splat(1.0 / monitorgamma.x)); + cout = linear_to_output(cout); gl_FragColor = vec4(cout,1.0); } diff --git a/src/osd/modules/render/bgfx/shaders/chains/crt-geom/fs_gaussx.sc b/src/osd/modules/render/bgfx/shaders/chains/crt-geom/fs_gaussx.sc index 6c7c2c8560c..74faf15a740 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/crt-geom/fs_gaussx.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/crt-geom/fs_gaussx.sc @@ -1,4 +1,4 @@ -$input v_texCoord, v_coeffs +$input v_texCoord, v_coeffs, v_coeffs2 #include "common.sh" @@ -13,6 +13,10 @@ void main() vec3 sum = vec3_splat(0.0); float onex = 1.0/u_tex_size0.x; + sum += TEX2D(v_texCoord + vec2(-8.0 * onex, 0.0)) * vec3_splat(v_coeffs2.w); + sum += TEX2D(v_texCoord + vec2(-7.0 * onex, 0.0)) * vec3_splat(v_coeffs2.z); + sum += TEX2D(v_texCoord + vec2(-6.0 * onex, 0.0)) * vec3_splat(v_coeffs2.y); + sum += TEX2D(v_texCoord + vec2(-5.0 * onex, 0.0)) * vec3_splat(v_coeffs2.x); sum += TEX2D(v_texCoord + vec2(-4.0 * onex, 0.0)) * vec3_splat(v_coeffs.w); sum += TEX2D(v_texCoord + vec2(-3.0 * onex, 0.0)) * vec3_splat(v_coeffs.z); sum += TEX2D(v_texCoord + vec2(-2.0 * onex, 0.0)) * vec3_splat(v_coeffs.y); @@ -22,8 +26,13 @@ void main() sum += TEX2D(v_texCoord + vec2(+2.0 * onex, 0.0)) * vec3_splat(v_coeffs.y); sum += TEX2D(v_texCoord + vec2(+3.0 * onex, 0.0)) * vec3_splat(v_coeffs.z); sum += TEX2D(v_texCoord + vec2(+4.0 * onex, 0.0)) * vec3_splat(v_coeffs.w); + sum += TEX2D(v_texCoord + vec2(+5.0 * onex, 0.0)) * vec3_splat(v_coeffs2.x); + sum += TEX2D(v_texCoord + vec2(+6.0 * onex, 0.0)) * vec3_splat(v_coeffs2.y); + sum += TEX2D(v_texCoord + vec2(+7.0 * onex, 0.0)) * vec3_splat(v_coeffs2.z); + sum += TEX2D(v_texCoord + vec2(+8.0 * onex, 0.0)) * vec3_splat(v_coeffs2.w); - float norm = 1.0 / (1.0 + 2.0*(v_coeffs.x+v_coeffs.y+v_coeffs.z+v_coeffs.w)); + float norm = 1.0 / (1.0 + 2.0*(v_coeffs.x+v_coeffs.y+v_coeffs.z+v_coeffs.w + +v_coeffs2.x+v_coeffs2.y+v_coeffs2.z+v_coeffs2.w)); gl_FragColor = vec4( pow(sum*vec3_splat(norm), vec3_splat(1.0/u_gamma.x)), 1.0 ); } diff --git a/src/osd/modules/render/bgfx/shaders/chains/crt-geom/fs_gaussy.sc b/src/osd/modules/render/bgfx/shaders/chains/crt-geom/fs_gaussy.sc index f6044f4d8f9..c4fa73cdcce 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/crt-geom/fs_gaussy.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/crt-geom/fs_gaussy.sc @@ -1,4 +1,4 @@ -$input v_texCoord, v_coeffs +$input v_texCoord, v_coeffs, v_coeffs2 #include "common.sh" @@ -13,6 +13,10 @@ void main() vec3 sum = vec3_splat(0.0); float oney = 1.0/u_tex_size0.y; + sum += TEX2D(v_texCoord + vec2(0.0, -8.0 * oney)) * vec3_splat(v_coeffs2.w); + sum += TEX2D(v_texCoord + vec2(0.0, -7.0 * oney)) * vec3_splat(v_coeffs2.z); + sum += TEX2D(v_texCoord + vec2(0.0, -6.0 * oney)) * vec3_splat(v_coeffs2.y); + sum += TEX2D(v_texCoord + vec2(0.0, -5.0 * oney)) * vec3_splat(v_coeffs2.x); sum += TEX2D(v_texCoord + vec2(0.0, -4.0 * oney)) * vec3_splat(v_coeffs.w); sum += TEX2D(v_texCoord + vec2(0.0, -3.0 * oney)) * vec3_splat(v_coeffs.z); sum += TEX2D(v_texCoord + vec2(0.0, -2.0 * oney)) * vec3_splat(v_coeffs.y); @@ -22,8 +26,13 @@ void main() sum += TEX2D(v_texCoord + vec2(0.0, +2.0 * oney)) * vec3_splat(v_coeffs.y); sum += TEX2D(v_texCoord + vec2(0.0, +3.0 * oney)) * vec3_splat(v_coeffs.z); sum += TEX2D(v_texCoord + vec2(0.0, +4.0 * oney)) * vec3_splat(v_coeffs.w); + sum += TEX2D(v_texCoord + vec2(0.0, +5.0 * oney)) * vec3_splat(v_coeffs2.x); + sum += TEX2D(v_texCoord + vec2(0.0, +6.0 * oney)) * vec3_splat(v_coeffs2.y); + sum += TEX2D(v_texCoord + vec2(0.0, +7.0 * oney)) * vec3_splat(v_coeffs2.z); + sum += TEX2D(v_texCoord + vec2(0.0, +8.0 * oney)) * vec3_splat(v_coeffs2.w); - float norm = 1.0 / (1.0 + 2.0*(v_coeffs.x+v_coeffs.y+v_coeffs.z+v_coeffs.w)); + float norm = 1.0 / (1.0 + 2.0*(v_coeffs.x+v_coeffs.y+v_coeffs.z+v_coeffs.w + +v_coeffs2.x+v_coeffs2.y+v_coeffs2.z+v_coeffs2.w)); gl_FragColor = vec4( pow(sum*vec3_splat(norm), vec3_splat(1.0/u_gamma.x)), 1.0 ); } diff --git a/src/osd/modules/render/bgfx/shaders/chains/crt-geom/varying.def.sc b/src/osd/modules/render/bgfx/shaders/chains/crt-geom/varying.def.sc index 6b1e8e2bf66..0de371e22c8 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/crt-geom/varying.def.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/crt-geom/varying.def.sc @@ -4,8 +4,9 @@ vec2 v_sinangle : TEXCOORD2 = vec2(0.0,0.0); vec2 v_cosangle : TEXCOORD3 = vec2(0.0,0.0); vec2 v_one : TEXCOORD4 = vec2(0.0,0.0); vec4 v_coeffs : TEXCOORD5 = vec4(0.0,0.0,0.0,0.0); -vec4 v_lpcoeffs1: TEXCOORD6 = vec4(0.0,0.0,0.0,0.0); -vec4 v_lpcoeffs2: TEXCOORD7 = vec4(0.0,0.0,0.0,0.0); +vec4 v_coeffs2 : TEXCOORD6 = vec4(0.0,0.0,0.0,0.0); +vec4 v_lpcoeffs1: TEXCOORD7 = vec4(0.0,0.0,0.0,0.0); +vec4 v_lpcoeffs2: TEXCOORD8 = vec4(0.0,0.0,0.0,0.0); vec3 a_position : POSITION; vec4 a_color0 : COLOR0; diff --git a/src/osd/modules/render/bgfx/shaders/chains/crt-geom/vs_gaussx.sc b/src/osd/modules/render/bgfx/shaders/chains/crt-geom/vs_gaussx.sc index c91a8948bf1..e9969187c94 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/crt-geom/vs_gaussx.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/crt-geom/vs_gaussx.sc @@ -1,5 +1,5 @@ $input a_position, a_texcoord0, a_color0 -$output v_texCoord, v_coeffs +$output v_texCoord, v_coeffs, v_coeffs2 #include "common.sh" @@ -11,6 +11,7 @@ void main() { float wid = u_width.x*u_tex_size0.x/(320.*u_aspect.x); v_coeffs = exp(vec4(1.,4.,9.,16.)*vec4_splat(-1.0/wid/wid)); + v_coeffs2 = exp(vec4(25.,36.,49.,64.)*vec4_splat(-1.0/wid/wid)); // Do the standard vertex processing. gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0)); diff --git a/src/osd/modules/render/bgfx/shaders/chains/crt-geom/vs_gaussy.sc b/src/osd/modules/render/bgfx/shaders/chains/crt-geom/vs_gaussy.sc index 3ff1e07f236..0b7ff9b411f 100644 --- a/src/osd/modules/render/bgfx/shaders/chains/crt-geom/vs_gaussy.sc +++ b/src/osd/modules/render/bgfx/shaders/chains/crt-geom/vs_gaussy.sc @@ -1,5 +1,5 @@ $input a_position, a_texcoord0, a_color0 -$output v_texCoord, v_coeffs +$output v_texCoord, v_coeffs, v_coeffs2 #include "common.sh" @@ -11,6 +11,7 @@ void main() { float wid = u_width.x*u_tex_size0.y/(320.*u_aspect.y); v_coeffs = exp(vec4(1.,4.,9.,16.)*vec4_splat(-1.0/wid/wid)); + v_coeffs2 = exp(vec4(25.,36.,49.,64.)*vec4_splat(-1.0/wid/wid)); // Do the standard vertex processing. gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0));